javascript - 显示/隐藏带有 CSS 过渡的可变高度面板不起作用

标签 javascript html css

我的 HTML 有一部分一次显示一个“ Pane ”。这些“ Pane ”的高度各不相同。我有一个按钮 - 单击时 - 隐藏一个 Pane 并显示另一个 Pane 。我想做的是仅使用 CSS 实现平稳过渡,而不会出现任何抖动。如果 Pane 小于或大于其容器,容器应平滑折叠或展开以适应新 Pane 所需的高度。

到目前为止,我有以下内容:

JS:

$("button").click(function(){
  $("#get-started").addClass("hiddenFade");
  $("#get-started-2").removeClass("hiddenFade");
}) 

HTML:

<div class="container">

<div id="get-started" class="box fadeInOut">
  TEST
</div>
<div id="get-started-2" class="box fadeInOut hiddenFade">
  NEWTEST
</div>
</div>
<button>
  go
</button>

减少:

.box{
  background: red;
  width: 100%;
  height: 200px;
  text-align: center;
  color: white;
}  

.container{
  border: 1px solid green;
  width: 400px;
  margin:auto;
}

.fadeInOut {
        transition-duration: 0, 200ms;
        transition-property: visibility, opacity, height;
        transition-delay: 0;
        height: auto;
        opacity: 1; 

        &.hiddenFade {
            visibility: hidden;
            opacity: 0;
            transition-duration: 200ms, 0;
            transition-property: opacity, visibility, height;
            transition-delay: 0, 200ms;
            height: 0 !important;
        }
    }

#get-started-2{
  height: 300px;
  background: green;
}

但是,所有转换似乎都不起作用。我做错了什么?

代码笔:https://codepen.io/anon/pen/jxPXZv

最佳答案

对于 transition-... 属性,即使您使用 0,您也必须指定测量单位。

transition-duration: 0ms, 200ms;

代替

transition-duration: 0, 200ms;

transition-delay 也是如此。

在解决这个问题之后,它似乎按预期工作:

$("button").click(function(){
  $("#get-started, #get-started-2").toggleClass("hiddenFade");
}) 
.box{
  background: red;
  width: 100%;
  height: 200px;
  text-align: center;
  color: white;
}  

.container{
  border: 1px solid green;
  width: 400px;
  margin:auto;
}

.fadeInOut {
        transition-duration: 0ms, 200ms;
        transition-property: visibility, opacity, height;
        transition-delay: 0ms;
        height: auto;
        opacity: 1; 
}
        .fadeInOut.hiddenFade {
            visibility: hidden;
            opacity: 0;
            transition-duration: 200ms, 0ms;
            transition-property: opacity, visibility, height;
            transition-delay: 0ms, 200ms;
            height: 0 !important;
        }
    

#get-started-2{
  height: 300px;
  background: green;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div class="container">

<div id="get-started" class="box fadeInOut">
  TEST
</div>
<div id="get-started-2" class="box fadeInOut hiddenFade">
  NEWTEST
</div>
</div>
<button>
  go
</button>

关于javascript - 显示/隐藏带有 CSS 过渡的可变高度面板不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49951212/

相关文章:

javascript - 在 React 中如何更新映射元素数组中元素的状态?

JavaScript 创建元素然后添加一个事件

html - 为什么 "overflow: hidden"会导致文本改变大小和形状?

html - 用于交替嵌套元素背景颜色的循环 css 规则

javascript - 使用 jquery 更改 css 值

html - header 100% 宽度内包装

javascript - Express Passport.js 成功重定向不加载页面,请求保持挂起

javascript - 页面通过表单验证后未重定向到 strip 结帐

javascript - 从多个 JSON 文件、Javascript、AJAX 进行实时搜索

html - 快捷方式图标 - 它们隐藏在 html 代码中的什么位置?