求助:如何实现点击时.post__input--not-set元素的缩放效果
解决CSS Transform缩放动画不生效的问题
看起来你遇到的核心问题是jQuery的toggle()方法和CSS过渡不兼容,加上初始样式的设置逻辑不对,导致缩放动画完全没触发。我来帮你一步步修复:
问题根源分析
toggle()会直接切换元素的display属性(在none和默认显示值之间切换),而display: none的元素会脱离文档流,浏览器不会为它计算CSS过渡动画的中间帧,所以你的transform和transition完全没机会生效。- 你只给
.post__input--not-set设置了初始缩放状态,但没有定义激活后的目标状态,就算display没问题,动画也没有触发的依据。
修复方案
第一步:修改CSS样式,用CSS类控制显示与动画
把初始隐藏和动画状态都交给CSS类管理,彻底避开display:none的问题:
.btn-class { color: white; padding: 30px; background: blue; } .new { background-color: green } .post__input--not-set { /* 初始隐藏状态:缩放0+透明+不可见+不占空间 */ transform: scale(0); opacity: 0; visibility: hidden; height: 0; overflow: hidden; transition: all 0.5s ease; /* 这里把5s改成更合理的时长,你可以根据需求调回5s */ /* 保留你原来的其他样式,比如border、padding等 */ } /* 激活后的动画状态 */ .post__input--not-set.animate { transform: scale(1); opacity: 1; visibility: visible; height: 50px; /* 和你原来设置的height对应 */ }
第二步:修改jQuery代码,移除toggle()改用类切换
删掉原来的hide()和toggle(),用toggleClass()来触发动画逻辑:
// 删掉这行:$(".post__input--not-set").hide(); 因为CSS已经默认隐藏了元素 $('.btn-class').click(function() { $(this).toggleClass("new"); $(this).find('i').toggleClass('fa-check fa-pencil-alt'); $(".post__input--not-set").toggleClass('animate'); // 只需要切换animate类即可 });
为什么这样能生效?
- 用
visibility: hidden替代display:none,元素依然留在文档流中,浏览器会正常计算它的过渡动画帧。 transform: scale(0)到scale(1)的变化,加上opacity的过渡,能实现平滑的缩放淡入效果。height和overflow:hidden的组合,确保元素隐藏时不占据页面空间,显示时高度变化也能有过渡动画。
如果你非要保留toggle()的逻辑(不推荐),可以先让元素显示,再强制触发重绘后添加动画类,但这种方法不如上面的优雅,容易出现闪烁问题。
内容的提问来源于stack exchange,提问作者Kyle Underhill
相关产品推荐
相关产品推荐

