CSS+HTML实现环形导航菜单文字重叠位置异常排查求助
问题原因
你遇到的菜单项文字重叠、位置异常问题,是以下几处配置错误导致的:
- 未清除
<ul>标签的默认内外边距、列表样式,导致元素定位基准偏移 .menu-item未设置旋转原点,位移后元素对齐不符合预期.menu-item a宽度设置过大(520px),远大于实际展示需要,导致多个链接区域互相重叠- 未给a标签设置旋转原点,文字反向旋转后位置偏移
修复后的完整代码
CSS代码
body { overflow: hidden; background: linear-gradient(to right, #fc354c, #0abfbc); } /* 新增:清除ul默认样式 */ ul { list-style: none; margin: 0; padding: 0; } .menu-toggler { position: absolute; display: block; top: 0; bottom: 0; right: 0; left: 0; margin: auto; width: 40px; height: 40px; z-index: 2; opacity: 0; cursor: pointer; } .menu-toggler:hover+label, .menu-toggler:hover+label:before, .menu-toggler:hover+label:after { background: white; } .menu-toggler:checked+label { background: transparent; } .menu-toggler:checked+label:before, .menu-toggler:checked+label:after { top: 0; width: 40px; transform-origin: 50% 50%; } .menu-toggler:checked+label:before { transform: rotate(45deg); } .menu-toggler:checked+label:after { transform: rotate(-45deg); } .menu-toggler:checked~ul .menu-item { opacity: 1; } .menu-toggler:checked~ul .menu-item:nth-child(1) { transform: rotate(0deg) translateX(-110px); } .menu-toggler:checked~ul .menu-item:nth-child(2) { transform: rotate(60deg) translateX(-110px); } .menu-toggler:checked~ul .menu-item:nth-child(3) { transform: rotate(120deg) translateX(-110px); } .menu-toggler:checked~ul .menu-item:nth-child(4) { transform: rotate(180deg) translateX(-110px); } .menu-toggler:checked~ul .menu-item:nth-child(5) { transform: rotate(240deg) translateX(-110px); } .menu-toggler:checked~ul .menu-item:nth-child(6) { transform: rotate(300deg) translateX(-110px); } .menu-toggler:checked~ul .menu-item a { pointer-events: auto; } .menu-toggler+label { width: 40px; height: 5px; display: block; z-index: 1; border-radius: 2.5px; background: rgba(255, 255, 255, 0.7); transition: transform 0.5s, top 0.5s; position: absolute; top: 0; bottom: 0; right: 0; left: 0; margin: auto; } .menu-toggler+label:before, .menu-toggler+label:after { width: 40px; height: 5px; display: block; z-index: 1; border-radius: 2.5px; background: rgba(255, 255, 255, 0.7); transition: transform 0.5s, top 0.5s; content: ""; position: absolute; left: 0; } .menu-toggler+label:before { top: 10px; } .menu-toggler+label:after { top: -10px; } .menu-item:nth-child(1) a { transform: rotate(0deg); } .menu-item:nth-child(2) a { transform: rotate(-60deg); } .menu-item:nth-child(3) a { transform: rotate(-120deg); } .menu-item:nth-child(4) a { transform: rotate(-180deg); } .menu-item:nth-child(5) a { transform: rotate(-240deg); } .menu-item:nth-child(6) a { transform: rotate(-300deg); } .menu-item { position: absolute; top: 0; bottom: 0; right: 0; left: 0; margin: auto; width: 80px; height: 80px; opacity: 0; transition: 0.5s; /* 新增:设置旋转原点为元素中心 */ transform-origin: center; } .menu-item a { display: block; /* 修改:将宽度从520px改为适配文字的160px */ width: 160px; height: 60px; font-family: Courgette; line-height: 60px; color: rgba(255, 255, 255, 0.7); background: rgba(255, 255, 255, 0.2); border-radius: 38px; text-align: center; text-decoration: none; font-size: 30px; pointer-events: none; transition: 0.2s; /* 新增:设置旋转原点为元素中心 */ transform-origin: center; /* 新增:修正a标签的位置,让它和li的中心对齐 */ position: relative; left: -40px; top: 10px; } .menu-item a:hover { box-shadow: 0 0 0 2px rgba(255, 255, 255, 0.3); color: white; background: rgba(255, 255, 255, 0.3); font-size: 34px; }
HTML代码(无需修改,可直接沿用)
<body translate="no"> <nav class="menu"> <input checked="checked" class="menu-toggler" id="menu-toggler" type="checkbox"> <label for="menu-toggler"></label> <ul> <li class="menu-item"> <a target="_blank">Company Goal</a> </li> <li class="menu-item"> <a target="_blank">Company Goal</a> </li> <li class="menu-item"> <a target="_blank">Company Goal</a> </li> <li class="menu-item"> <a target="_blank">Company Goal</a> </li> <li class="menu-item"> <a target="_blank">Company Goal</a> </li> <li class="menu-item"> <a target="_blank">Company Goal</a> </li> </ul> </nav> </body>
核心修改点说明
- 新增ul样式清除默认的列表标记、内外边距,避免定位基准偏移
- 给
.menu-item和.menu-item a添加transform-origin: center,保证旋转时以元素中心为基准 - 将
.menu-item a的宽度从520px调整为160px,适配文字长度避免重叠 - 调整a标签的相对位置,让它和父级li的中心对齐,布局更规整
内容的提问来源于stack exchange,提问作者Radhika Vasudeva
相关产品推荐
相关产品推荐

