CSS 中的过渡高度
本文将介绍几种在 CSS 中将过渡应用于元素高度的方法。
在 CSS 中使用 transition
属性与 max-height
和 overflow
属性来转换高度
transition
是一种广泛使用的属性,可以在给定的持续时间内平滑地更改属性值。过渡也可以命名为动画。
转换具有某些属性,例如 transition-property
、transition-duration
、transition-timing-function
和 transition-delay
。transition-property
定义了使用过渡效果更改的 CSS 属性。
transition-duration
定义了完成转换需要多长时间,即以秒为单位的时间。transition-timing-function
定义了过渡应该如何发生,即对过渡产生什么影响。
transition-timing-function
可以有 ease
, ease-in
, ease-out
, linear
, ease-in-out
等。transition-delay
属性指定了多少时间应该需要开始过渡。
我们可以组合这些属性并使用转换简写属性,如下所示。
transition: height 2s linear 1s;
这里,height
表示 transition-property
,2s
定义 transition-duration
,linear
指定 transition-timing-function
,1s
定义 transition-delay
。
我们可以使用 transition
和 max-height
属性将元素的高度从 0
设置为 auto
。我们可以将鼠标悬停在文本上以更改特定 HTML 元素的高度。
当 max-height
设置为 0
时,我们可以使用 overflow:hidden
属性隐藏溢出的项目。
例如,创建一个 div
并给它一个 main
的 id。在那个 div
中,创建一个段落标签 p
并写下 Hover Me
。
接下来,创建一个带有 ul
标签的无序列表,并给它一个 ID 为 items
。使用 li
标签,在 ul
中创建一些列表项。
在 CSS 中,选择 items
id 并将 max-height
设置为 0
。它确保不显示 ul
内的项目。
接下来,将 background
属性设置为 gray
。将 overflow
属性设置为 hidden
。
当 max-height
为 0 时,它将隐藏溢出的 ul
项目。之后,将 transition
属性设置为 max-height 0.15s ease-out
。
当鼠标光标悬停时,它将为列表项提供缓出
效果。
使用 :hover
选择器选择 main
id,然后选择 items
id。然后,将 max-height
的值设置为 500px
。
因此,当屏幕尺寸小于 500px 时,它会根据 ul
项自动调整其高度。然后,将过渡属性设置为 transition: max-height 0.25s ease-in;
。
这将在 0.25
秒内将 ul
的高度设置为自动并具有 ease-in
效果。
下面的示例显示了在将鼠标悬停在具有效果的文本时显示无序列表。悬停在文本之外时,无序列表会淡出。
<div id="main">
<p>Hover Me</p>
<ul id="items">
<li>item1</li>
<li>item2</li>
<li>item3</li>
<li>item4</li>
</ul>
</div>
#main #items {
max-height: 0;
transition: max-height 0.15s ease-out;
overflow: hidden;
background: gray;
}
#main:hover #items {
max-height: 500px;
transition: max-height 0.25s ease-in;
}
在 CSS 中使用带有 transition
的 transform
属性来转换高度
transform
属性用于元素的 2D 或 3D 转换。该属性可以具有诸如 rotate
、scale
、skew
、move
、translate
等值。
在本教程中,我们将使用 scale
来更改元素的高度。我们还将使用 transition
属性在高度发生变化时创建动画。
scale
属性用于调整元素的大小。我们可以使用 scaleX
在 X 轴上使用 scale
,并使用 scaleY
在 Y 轴上进行缩放。
在这里,我们将使用 scaleY
来调整元素的高度,这应该是垂直的(沿 Y 轴)。scaleY(1)
值表示元素的高度为 100%,值 scaleY(0)
表示元素的高度为 0%。
有一个属性叫做 transform-origin
。它的值告诉我们应该从哪里开始转换。
由于我们想通过将高度从 0
增加到 auto
来从上到下扩展高度,我们可以将 transform-origin
的值设置为 top
。当我们悬停一个元素时,我们可以将 transform
的值设置为 scaleY(1)
以将其高度设置为 auto。
我们将使用与第一种方法相同的 HTML 模板进行演示。
例如,选择 #main #items
的 items
id 并应用样式。将背景颜色
设置为灰色
。
接下来,将 transform
属性设置为 scaleY(0)
。这会将元素的高度设置为 0
。
然后将 transform-origin
属性设置为 top
,因为我们希望转换从上到下开始。然后为 transition
属性应用样式 transform 0.3s ease
。
这里的 transform
表示我们希望在悬停时发生动画的属性。0.3
s 表示完成动画所需的时间。
ease
表示 transition-timing-function
,表示动画应该发生。最后,使用 : hover
选择器将 transform
属性设置为 scaleY(1)
。
当我们悬停 div
时,ul
的高度随着变换值从 scaleY(0)
变为 scaleY(1)
而增加。
示例代码:
<div id="main">
<p>Hover Me</p>
<ul id="items">
<li>item1</li>
<li>item2</li>
<li>item3</li>
<li>item4</li>
</ul>
</div>
#main #items {
background-color: gray;
transform: scaleY(0);
transform-origin: top;
transition: transform 0.3s ease;
}
#main:hover #items {
transform: scaleY(1);
}