css - 如何过渡高度: 0; to height: auto; using CSS?

标签 css css-transitions

我正在尝试制作一个 <ul>使用 CSS 过渡向下滑动。

<ul>height: 0; 开始。悬停时,高度设置为 height:auto; 。然而,这导致它只是出现,而不过渡,

如果我从 height: 40px; 执行此操作至height: auto; ,那么就会滑动到 height: 0; ,然后突然跳到正确的高度。

如果不使用 JavaScript,我还能如何做到这一点?

#child0 {
  height: 0;
  overflow: hidden;
  background-color: #dedede;
  -moz-transition: height 1s ease;
  -webkit-transition: height 1s ease;
  -o-transition: height 1s ease;
  transition: height 1s ease;
}
#parent0:hover #child0 {
  height: auto;
}
#child40 {
  height: 40px;
  overflow: hidden;
  background-color: #dedede;
  -moz-transition: height 1s ease;
  -webkit-transition: height 1s ease;
  -o-transition: height 1s ease;
  transition: height 1s ease;
}
#parent40:hover #child40 {
  height: auto;
}
h1 {
  font-weight: bold;
}
The only difference between the two snippets of CSS is one has height: 0, the other height: 40.
<hr>
<div id="parent0">
  <h1>Hover me (height: 0)</h1>
  <div id="child0">Some content
    <br>Some content
    <br>Some content
    <br>Some content
    <br>Some content
    <br>Some content
    <br>
  </div>
</div>
<hr>
<div id="parent40">
  <h1>Hover me (height: 40)</h1>
  <div id="child40">Some content
    <br>Some content
    <br>Some content
    <br>Some content
    <br>Some content
    <br>Some content
    <br>
  </div>
</div>

最佳答案

在过渡中使用max-height,而不是height。并将 max-height 的值设置为比您的盒子更大的值。

参见JSFiddle demo由 Chris Jordan 在另一个 answer 中提供在这里。

#menu #list {
    max-height: 0;
    transition: max-height 0.15s ease-out;
    overflow: hidden;
    background: #d5d5d5;
}

#menu:hover #list {
    max-height: 500px;
    transition: max-height 0.25s ease-in;
}
<div id="menu">
    <a>hover me</a>
    <ul id="list">
        <!-- Create a bunch, or not a bunch, of li's to see the timing. -->
        <li>item</li>
        <li>item</li>
        <li>item</li>
        <li>item</li>
        <li>item</li>
    </ul>
</div>

关于css - 如何过渡高度: 0; to height: auto; using CSS?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32134922/

相关文章:

jquery - 使用 CSS 和 JQuery 在页面之间创建滑动

css - 复合透视与 CSS 3d 转换

javascript - 在 contenteditable div 中为 div 启用调整大小

html - 使用CSS对象适合:contain on image leaves blank spaces around it

jquery - 使用向上/向下箭头选择 div

css - div 重叠固定 div - CSS 不透明度/过渡

html - Css3 过渡 - 悬停覆盖元素

javascript - 旋转瓷砖;悬停后如何延迟过渡

jquery - CSS3/jQuery 转换在 Firefox 中不起作用?

html - 无序列表和有序列表未与列对齐