You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

求助:如何实现点击时.post__input--not-set元素的缩放效果

解决CSS Transform缩放动画不生效的问题

看起来你遇到的核心问题是jQuery的toggle()方法和CSS过渡不兼容,加上初始样式的设置逻辑不对,导致缩放动画完全没触发。我来帮你一步步修复:

问题根源分析

  1. toggle()会直接切换元素的display属性(在none和默认显示值之间切换),而display: none的元素会脱离文档流,浏览器不会为它计算CSS过渡动画的中间帧,所以你的transform和transition完全没机会生效。
  2. 你只给.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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.26 10:14:08