CSS3 hover触发的宽度过渡效果失效,附代码与演示地址
宽度滑入动画修正方案
现有代码存在三处核心问题,会导致动画无法正常触发、效果不符合预期:
- 触发逻辑完全错配:当前把展开动画绑定在
.lang a:hover上,但a标签初始max-width:0时可视宽度几乎为0,根本无法稳定接住鼠标悬浮事件,正确的触发场景应该是鼠标悬浮在父级.lang容器上时,所有内部链接同步触发展开动画 - 属性冲突破坏过渡:hover状态同时写
width:300px和max-width:300px,固定宽度会直接跳过max-width的过渡过程,导致动画直接跳变没有平滑效果 - 内边距溢出导致收合不彻底:a标签固定
padding:10px是全方向的,当max-width为0时,左右内边距会撑出元素边界,收起状态下会留多余缝隙、动画左右不对称
修正后可直接运行的代码
调整后的CSS代码(HTML结构无需改动):
.lang { background-color: rgba(255,255,255,0.1); left: -130px; top: 400px; /* 给父级加无背景的热区,扩大鼠标触发范围,避免移开就收起 */ padding: 10px 0; } .lang a { /* 初始状态去掉左右方向的内边距,保证max-width为0时完全收合 */ padding: 10px 0; color: black; max-width: 0; display: block; overflow: hidden; white-space: nowrap; /* 同时给max-width和padding-left加过渡,展开时文字不会贴边 */ transition: max-width 1s ease-in-out, padding-left 0.3s ease; } /* 绑定父级悬浮事件触发所有子链接展开 */ .lang:hover a { max-width: 300px; padding-left: 10px; }
调整后效果和参考交互完全一致:鼠标移到侧边区域时,所有语言、搜索链接会从左向右平滑展开,移开后自动收合,没有跳变、留缝的问题。
内容的提问来源于stack exchange,提问作者Mahmoud Khosravi
相关产品推荐
相关产品推荐

