css3高度过渡不起作用

Posted

技术标签:

【中文标题】css3高度过渡不起作用【英文标题】:css3 height transition not working 【发布时间】:2011-08-30 16:18:23 【问题描述】:

我在使用 css3 过渡时遇到问题 我怎样才能使过渡平滑它立即出现 我希望 div 框在我将鼠标悬停在它上面时慢慢改变它的高度

html代码

<div id="imgs">

<img src="http://chat.ecobytes.net/img/emoticons/smile.png"  title=":)" />
<img src="http://chat.ecobytes.net/img/emoticons/sad.png"  title=":(" />
<img src="http://chat.ecobytes.net/img/emoticons/wink.png"  title=";)" />
<img src="http://chat.ecobytes.net/img/emoticons/razz.png"  title=":P" />
<img src="http://chat.ecobytes.net/img/emoticons/grin.png"  title=":D" />
<img src="http://chat.ecobytes.net/img/emoticons/plain.png"  title=":|" />
<img src="http://chat.ecobytes.net/img/emoticons/surprise.png"  title=":O" />
<img src="http://chat.ecobytes.net/img/emoticons/confused.png"  title=":?" />
<img src="http://chat.ecobytes.net/img/emoticons/glasses.png"  title="8)" />
<img src="http://chat.ecobytes.net/img/emoticons/eek.png"  title="8o" />
<img src="http://chat.ecobytes.net/img/emoticons/cool.png"  title="B)" />
<img src="http://chat.ecobytes.net/img/emoticons/smile-big.png"  title=":-)" />

</div>

jsfiddle

【问题讨论】:

robertnyman.com/2010/04/27/… 可以使用高度可变的元素和 CSS 过渡来实现打开/关闭效果,并使用一点 JS - 请参阅此处:***.com/a/18636883/93812 【参考方案1】:

我相信你需要设置一个指定的高度而不是自动。 http://jsfiddle.net/BN4Ny/ 这是一个平滑的扩展。不确定您是否想要那种小的关闭打开效果。我刚刚分叉了你的 jsfiddle 并添加了一个指定的高度。

【讨论】:

会有一个问题如果元素(表情)的数量是动态的,因为高度必须更新。 是否可以仅使用 css3 实现关闭打开效果 如果你添加更多,那将是一个问题,但请记住它仍然是 webkit ;)。也许您可以尝试使用 jquery 来帮助提高动态高度。 @nick,我自己刚开始玩 css3,但您可以考虑缩放转换。 遗憾的是,2015 年仍然如此。但是,有一个使用 max-height 的解决方法。更多信息:***.com/questions/3508605/…【参考方案2】:

此方案不需要javascript,或者存在需要事先为容器设置一个固定高度的问题。

这可以通过使用max-height 属性并将其值设置为高值来实现。

#imgs 
    border:1px solid #000;
    border-radius:3px;
    max-height:20px;
    width:100%;
    overflow:hidden;
    transition: 2s ease;

#imgs:hover 
    max-height:15em;
<div id="imgs">

  <img src="https://sslb.ulximg.com/image/405x405/artist/1346353449_4159240d68a922ee4ecdfd8e85d179c6.jpg/e96a72d63f272127d0b6d70c76fd3f61/1346353449_eminem.jpg" />
</div>

【讨论】:

【参考方案3】:

而不是在容器上使用设置高度或使用 JS(这两个都是尴尬的解决方案)...您可以将图像放在列表项中并在 li 上进行转换。

如果所有图像都达到相似的高度,则意味着容器内的内容仍然可以是动态的。比如……

/*
CLOSED
*/

div.container li 

  height:0px;

-webkit-transition: all 0.5s ease;
-moz-transition: all 0.5s ease;
-ms-transition: all 0.5s ease;
-o-transition: all 0.5s ease;
transition: all 0.5s ease;

/*
OPEN
*/

div.container:hover li 

  height:30px;

-webkit-transition: all 0.5s ease;
-moz-transition: all 0.5s ease;
-ms-transition: all 0.5s ease;
-o-transition: all 0.5s ease;
transition: all 0.5s ease;

【讨论】:

【参考方案4】:

您可以这样做:http://jsfiddle.net/minitech/hTzt4/

不幸的是,为了保持灵活的高度,JavaScript 是必需的。

【讨论】:

【参考方案5】:

我正在使用这种方法: 使用最大高度来过渡高度而不是直接使用高度... 例如:

div 
     height: auto;
     max-height:0;
 

   .toggle-above-div:hover div 
    max-height:0;
  

【讨论】:

以上是关于css3高度过渡不起作用的主要内容,如果未能解决你的问题,请参考以下文章

CSS3:为啥这个过渡不起作用,我该如何解决?

Firefox 的背景图像的 CSS3 过渡不起作用

CSS3颜色过渡在Chrome中不起作用

CSS3 过渡不起作用

悬停时不透明度的 CSS3 过渡不起作用

CSS3 垂直弹出菜单 + 过渡在 FF 中不起作用