CSS Transition在手风琴按钮生效但内容平滑显隐失效怎么解决
问题原因
CSS transition 过渡效果不支持display属性,你当前用display: none和display: block切换内容区域显示状态,过渡属性无法捕获该状态变化,所以不会触发平滑动画。
修复方案
改用max-height、opacity和padding属性组合实现平滑过渡,无需修改JS逻辑,仅调整CSS代码即可:
修改后的CSS代码
.accordian { margin: 2rem 0; } .accordian_btn { width: 100%; background-color: #fff; color: #333; padding: 1rem; text-transform: capitalize; text-align: left; position: relative; border: 0.1rem solid #ccc; border-radius: 3rem; outline: none; cursor: pointer; font-size: 1.3rem; letter-spacing: 0.1rem; transition: all 0.15s; } .accordian_btn::after { content: "\25be"; width: 1rem; font-size: 2rem; position: absolute; top: 0.5rem; right: 1rem; transition: transform 0.15s; } .accordian_content { max-height: 0; overflow: hidden; padding: 0 1rem; opacity: 0; transition: all 0.3s ease; font-size: 1.2rem; } .change.accordian_btn { background-color: #e0f3ff; border-radius: 3rem; } .change.accordian_btn::after { transform: rotate(-90deg); } .change.accordian_btn+.accordian_content { max-height: 1000px; opacity: 1; padding: 1rem; box-shadow: 0 0.1rem 0.3rem #ccc; border-radius: 1rem; }
补充说明
max-height的取值只要大于你手风琴内容的最大实际高度即可,不需要设置过大的值,避免过渡速度和内容高度不匹配- 不需要淡入淡出效果可以删掉
opacity相关配置 - 给箭头的transform属性单独加了过渡,整体动画更连贯
内容的提问来源于stack exchange,提问作者WebDeveloper1213
相关产品推荐
相关产品推荐

