CSS如何实现带.current类的元素不触发动画且保持下划线100%宽度
问题原因
核心问题是CSS选择器层级写错,导致.current类的样式完全没有命中目标元素,和你新增的文字位移动画本身无关:
- 装饰线的
:before伪元素是绑定在<li>标签上的,你原有代码写的.snip1168 .current a:before是在找.current元素下<a>标签的伪元素,匹配不到目标 - 另一个规则
.snip1168 .current li:after也是错误写法,.current类本身就加在<li>上,不存在嵌套的子<li>元素 - 你之前尝试给
.current a设置100%宽度不生效,是因为伪元素的宽度是相对于最近的定位父元素(也就是<li>)计算的,给内部<a>标签设宽度不会影响伪元素尺寸。
修复方案
直接替换原有错误的选择器即可,新增/修改如下CSS代码:
/* 替换原有错误的:before选择器规则 */ .snip1168 li:hover:before, .snip1168 li.current:before { opacity: 1; width: 100%; } /* 替换原有错误的:after选择器规则,不需要after效果可直接删除这段 */ .snip1168 li:hover:after, .snip1168 li.current:after { max-width: 100%; } /* 可选:让当前选中项的文字也保持上移位置,视觉样式更统一 */ .snip1168 li.current a { transform: translate(0, -10px); }
效果验证
修改后即可符合需求:
- 普通导航项悬停时,线条从0%到100%宽度动画展开,文字同步上移
- 带
.current类的导航项默认保持100%宽度线条,不需要触发悬停动画 - 点击切换导航项的
.current类时,选中样式会自动同步到新的项
内容的提问来源于stack exchange,提问作者blue
相关产品推荐
相关产品推荐

