gpt4 book ai didi

css - 使用 css3 转换显示/隐藏表格行

转载 作者:技术小花猫 更新时间:2023-10-29 10:14:07 24 4
gpt4 key购买 nike

在我页面的一部分,我使用 css3 转换来显示/隐藏一些具有很好滑动效果的 div

.service_status {
max-height: 0;
-webkit-transition: max-height 1s ease-in-out;
-moz-transition: max-height 1s ease-in-out;
-ms-transition: max-height 1s ease-in-out;
-o-transition: max-height 1s ease-in-out;
transition: max-height 1s ease-in-out;
}

.service_status.open {
max-height: 500px;
-webkit-transition: max-height 1s ease-in-out;
-moz-transition: max-height 1s ease-in-out;
-ms-transition: max-height 1s ease-in-out;
-o-transition: max-height 1s ease-in-out;
transition: max-height 1s ease-in-out;
}

我想在某些表格行上使用相同的技术,但 max-height 和 height 没有任何影响(我猜是由于表格的 CSS 规范)。有没有办法只使用 CSS3 过渡而不使用 js 来显示/隐藏带有动画的表格行?

最佳答案

更新:

事实上,我之前的回答确实回答了这个问题!但不是绝对明确。就像:“嘿,创意就在这里,随心所欲地应用它”。我以为解决方案的本质是明确的,任何人都可以使用它......但无论如何,我会以最清晰的方式暴露整个想法,并将解决方案应用于一个简单的表(因为 OP 没有显示任何结构)。

解决方案:

短版:

使用 Div 将内容包装到单元格中,我们可以使用 max-height 属性,以及 max-height 过渡。使用自定义过渡曲线,我们可以“屏蔽”使用高最大高度的延迟。

演示在这里:http://jsfiddle.net/1rnc9bbm/4/

长版:

整个问题是表格单元格的高度是适合其内容的最小值,表格行的高度是所有单元格所需的最小高度(因此,表格行的高度是其最高单元格所需的最小高度)。

从 W3(关于表格单元格高度):

In CSS 2.1, the height of a cell box is the minimum height required by the content.



从 W3(关于表格行高度):

The height of a 'table-row' element's box is calculated once the user agent has all the cells in the row available: it is the maximum of the row's computed 'height', the computed 'height' of each cell in the row, and the minimum height (MIN) required by the cells.



在这些情况下,我们唯一的选择是使用内部标记间接限制高度,通常是一个 div 元素。因为 Div 元素尊重最大高度,它会拉伸(stretch)我们的内容,我们的表格单元也会尊重“div 的最大高度”,因为这是它所需要的全部高度。

最大高度过渡的问题只是一个延迟,由过渡的计算方式引起。在表格中,通常您会显示具有动态且不可预测的长度(即表格单元格高度)的动态内容,因此我们不知道我们的表格需要精确适应扩展内容的精确最大高度。因此,我们需要设置更高的最大高度,这将超过某些单元格所需的高度。当它发生时,我们的过渡计算错误(基于最大高度而不是将显示/动画的总高度),并且动画变得奇怪和不精确。为了向用户展示一个漂亮而平滑的过渡,我找到了一个使用自定义过渡曲线的绝妙解决方案。有关此问题及其解决方案的更多详细信息,请参见本答案的末尾。

好吧,我们有我们的“最大高度尊重元素”,我们的最大高度动画的平滑过渡和我们的 table ......现在是时候把所有东西放在一起了:

网址:
<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,也没有关于他想要扩展的表格的详细信息,所以我的整个解决方案基于通常的表格使用。

上一个(原)答案:

我刚刚在另一个问题中回答了这种情况。在我的具体情况下,我需要完全按照你说的去做。我有一张 table ,想 展开表格行 当用户悬停它时。

同样的答案适用于您的问题:
https://stackoverflow.com/a/27773588/3395460

链接答案(最大高度值高于容器需求的平滑过渡):

正如@maskacovnik 所指出的,如果它还包含我的第一个答案的代码,以及解释我更新的答案的部分解决方案的代码,它将是一个更完整(和完整)的答案。就这个:

[...] I needed to show mode details of a product description inside a cell-table when user hovers the cell. Without user hovering, only the maximum of 2 lines of description are shown. Once user hovers it, all lines (text can be since 1 to 8 lines, dynamic and unpredictable length) must be show with some kind of height animation.

I come to the same dilemma, and choose to use the max-height transition (setting a high max-height, which I was sure that will not cut my text), because this approach appears to me to be the cleanest solution to animate the height.

But I couldn't be satisfied with the delay on the "slide up" animation, just like You. That's when I found a commentary about transition curve here: http://css3.bradshawenterprises.com/animating_height/ .

The Idea of this guy is brilliant, but just this solution alone "cut-off" the effect of "slide down" animation. So thinking a little I just come to a final solution.

So here is my solution using the Rhys's Idea (Guy of link above):

Slide Down Animation (Hover), with a "smooth grow", and Slide Up Animation without (virtually) "delay":


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>

This is a perfect (in my opinion) solution for menu, descriptions and everything that isn't extremely unpredictable, but as You pointed before, there is the need to set up a high max-height, and may cut-off a surprisingly tall dynamic content. In this specific situation, I'll use jQuery/JavaScript to animate the height instead. Since the update of the content will be done using some sort of JavaScript already, I can't see any harm using a Js approach to animation.



希望我有所帮助!

关于css - 使用 css3 转换显示/隐藏表格行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10207176/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com