更新:
事实上,我之前的回答确实回答了这个问题!但不是绝对明确。这就像:“嘿,想法就在这里,只要将它应用到任何你想要的地方”。我认为解决方案的本质很清楚,任何人都可以使用它......但无论如何,我会以最清晰的方式公开整个想法,并将解决方案应用于简单的表(因为 OP 没有显示任何结构)。
解决方案:
短版:
使用 Div 将内容包装到单元格中,我们可以使用 max-height 属性以及 max-height 过渡。通过自定义过渡曲线,我们可以“屏蔽”使用高 max-height 的延迟。
在这里演示:http://jsfiddle.net/1rnc9bbm/4/
加长版:
整个问题是表格单元格的高度是适合其内容的最小值,而表格行的高度是所有单元格所需的最小高度(因此,表格行的高度是它最高的单元格)。
从 W3(关于表格单元格高度):
在 CSS 2.1 中,单元格框的高度是内容所需的最小高度。
从 W3(关于表格行高度):
“table-row”元素框的高度是在用户代理获得该行中的所有单元格后计算的:它是该行计算的“高度”中的最大值,每个单元格的计算“高度”行,以及单元格所需的最小高度 (MIN)。
在这种情况下,我们唯一的选择是使用内部标记(通常是 div 元素)间接限制高度。因为 Div 元素尊重最大高度,它会拉伸我们的内容,并且我们的表格单元格也会尊重“div 的最大高度”,因为这是它所需要的所有高度。
最大高度转换的问题只是延迟,由转换的计算方式引起。在表格中,通常您显示的动态内容具有动态且不可预测的长度(变为表格单元格高度),因此我们不知道我们的表格需要精确的最大高度才能完全适合展开的内容。因此,我们需要设置一个更高的最大高度,这将超过某些单元格的需要。当它发生时,我们的过渡计算错误(基于最大高度而不是将显示/动画的总高度),并且动画变得奇怪和不精确。为了向用户展示一个漂亮而平滑的过渡,我找到了一个使用自定义过渡曲线的绝妙解决方案。有关此问题及其解决方案的更多详细信息在此答案的末尾。
嗯,我们有我们的“最大高度尊重元素”,我们的最大高度动画的平滑过渡,以及我们的桌子......现在是时候把所有东西放在一起了:
HTML:
<table>
<tr>
<td>
<div>
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Mauris ac lorem ante. Vestibulum quis magna pretium, lacinia arcu at, condimentum odio. Ut ultrices tempor metus, sit amet tristique nibh vestibulum in. Pellentesque vel velit eget purus mollis placerat sed sit amet enim. Sed efficitur orci sapien, ac laoreet erat fringilla sodales.
</div>
</td>
</tr>
</table>
CSS:
table{
border: 1px solid #ddd;
}
div{
background-color: #ddd;
width: 400px;
overflow: hidden;
-webkit-transition: max-height 1.5s cubic-bezier(0, 1.05, 0, 1);
-moz-transition: max-height 1.5s cubic-bezier(0, 1.05, 0, 1);
transition: max-height 1.5s ease cubic-bezier(0, 1.05, 0, 1);
max-height: 38px;
}
div:hover{
-webkit-transition: max-height 2s ease;
-moz-transition: max-height 2s ease;
transition: max-height 2s ease;
max-height: 400px;
}
这里有一个简单的演示(上面显示的代码):http://jsfiddle.net/1rnc9bbm/3/,还有一个更完整(和常见)的表格演示:http://jsfiddle.net/1rnc9bbm/4/
我认为否决票不公平,但我同意这个版本现在更加完整,并且确实以明确的方式回答了 OP 的问题。 如果您有任何问题或需要我澄清的观点,您无需投反对票(请),只需在上方提问/评论即可。如果可以的话,我很乐意提供帮助。
Obs:OP没有提供Html,也没有提供他想要扩展的表格的详细信息,所以我的整个解决方案都是基于通常的表格使用。
上一个(原始)答案:
我刚刚在这里的另一个问题中回答了这个确切的情况。在我的具体情况下,我需要完全按照你所说的去做。我有一张表格,当用户将鼠标悬停在表格上时,我想展开表格行。
同样的答案也适用于您的问题:
https://stackoverflow.com/a/27773588/3395460
链接答案(Max-Height 值高于容器所需的平滑过渡):
正如@maskacovnik 所指出的,如果它还包含我的第一个答案的代码,以及解释我更新答案的部分解决方案的代码,它将是一个更完整(和完整)的答案。就是这样:
[...] 当用户悬停单元格时,我需要在单元格表中显示产品描述的模式详细信息。在没有用户悬停的情况下,最多只显示 2 行描述。一旦用户悬停它,所有行(文本可以是 1 到 8 行,动态且不可预测的长度)必须以某种高度动画显示。
我遇到了同样的困境,并选择使用最大高度过渡(设置一个高最大高度,我确信这不会削减我的文本),因为这种方法在我看来是最干净的解决方案为高度设置动画。
但我对“上滑”动画的延迟不满意,就像你一样。
那时我在这里找到了关于过渡曲线的评论:http://css3.bradshawenterprises.com/animating_height/。
这家伙的idea很牛逼,但是单单这个方案就“截断”了“滑下”动画的效果。所以稍微思考了一下,我就得出了最终的解决方案。
所以这是我使用 Rhys 的想法的解决方案(上面链接的人):
向下滑动动画(悬停),带有“平滑增长”,向上滑动动画没有(实际上)“延迟”:
div {
background-color: #ddd;
width: 400px;
overflow: hidden;
-webkit-transition: max-height 1.5s cubic-bezier(0, 1.05, 0, 1);
-moz-transition: max-height 1.5s cubic-bezier(0, 1.05, 0, 1);
transition: max-height 1.5s cubic-bezier(0, 1.05, 0, 1);
max-height: 38px;
}
div:hover {
-webkit-transition: max-height 2s ease;
-moz-transition: max-height 2s ease;
transition: max-height 2s ease;
max-height: 400px;
}
<div>
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Mauris ac lorem ante. Vestibulum quis magna pretium, lacinia arcu at, condimentum odio. Ut ultrices tempor metus, sit amet tristique nibh vestibulum in. Pellentesque vel velit eget purus mollis
placerat sed sit amet enim. Sed efficitur orci sapien, ac laoreet erat fringilla sodales.
</div>
这是一个完美的(在我看来)菜单、描述和一切不是非常不可预测的解决方案,但正如您之前指出的那样,需要设置一个较高的最大高度,并且可能会被截断一个惊人的高动态内容。在这种特定情况下,我将使用 jQuery/JavaScript 来为高度设置动画。由于内容的更新已经使用某种 JavaScript 完成,所以我看不出使用 Js 动画方法有什么坏处。
希望我能帮上忙!