CSS转换不适用于百分比高度?

Pat*_*ick 44 css webkit

我有以下CSS定义:

.detailsCollapsed
{
   display:none;
   height:0%;
   width:100%;
   -webkit-transition:height 40s ease-in-out;
}

.detailsExpanded
{
    display:block;
    visibility:visible;
    height:100%;
    width:100%;
    -webkit-transition:height 40s ease-in-out;
}
Run Code Online (Sandbox Code Playgroud)

这些应用于包含其中一些内容的div.

我也有一些javascript,当单击div时,它会更改元素上的类名.这适用于扩展和折叠,但iPhone上没有动画?(我试过的所有其他过渡都适用于流畅的动画)任何想法?

kbt*_*tzr 64

到目前为止(纯CSS)解决方案

如果您离开height:auto;并使用固定值,max-height您可以模拟转换:

.details-expanded {
    max-height: 300px; /* try to guess a max-height for your content */
}

.details-collapsed {
    height: auto;
    max-height: 0;
    transition: max-height 500ms linear; /* pick a proportional duration */
}
Run Code Online (Sandbox Code Playgroud)

注意转换持续时间以及max-height元素扩展的时间.玩这些值,直到你得到想要的行为.

这样,您可以在两个定义的值之间进行转换(在上面的示例中,从0到300),而height属性将"跟随" max-height转换并增长直到获得内容的大小.


演示

演示1 - 此解决方案的一个工作示例

演示2 - 只是演示了DEMO 1中发生的事情


意见

目前,转换仅在预定义值之间实现,我认为这是因为在某些情况下引擎无法猜测初始值或最终值.如果你有一个高度转换,它的最终值是50%但转换本身会影响父母的身高怎么办?可能需要对每个帧进行多次回流计算,从而导致性能问题.

就像fabb所说的那样,CSS转换的规范决定了应该支持百分比值,因此引擎决定使用动态值点支持转换的情况可能只是时间问题.尽管如此,我不确定什么可以被认为是auto值得思考的正确行为.

  • 请注意(从我的测试中),以这种方式设置max-height动画将导致不准确的转换时间. (10认同)
  • Grumble ...输入不应该提交我的评论.cvsguimaraes通过给示例提供40秒的转换时间来补偿这一点,并且**显示*以正确设置动画.然而,就像你告诉它的那样,它实际上是从0到9999px的动画.我建议你设置一个理智的最大高度每个情况. (5认同)
  • 这是一个有效的例子:http://jsfiddle.net/gryzzly/n5XfG/3/ (2认同)
  • 过渡延迟是疯狂的。 (2认同)

fab*_*abb 17

根据关于CSS3过渡W3C规范,应该允许长度百分比进行属性高度的过渡.所以我想在浏览器中支持提供百分比只是时间问题.

  • 这是2017年,仍然不支持! (17认同)
  • 2020年仍然不支持 (7认同)
  • 2018年仍未获得支持. (5认同)
  • 2018年中期仍未获得支持 (5认同)
  • 2019猜猜是什么 (3认同)

Nic*_*las 1

正是从 display:none 到 display:block 的更改停止了转换。尝试将折叠样式设置为 display:block; 高度:0;溢出:隐藏;

注意:auto 的扩展高度也会停止转换。如果包含块上没有设置高度,则 100% 的高度等于 auto 的高度。