「这是我参与11月更文挑战的第19天,活动详情查看:2021最后一次更文挑战」
css有很多不同的方法来隐藏一个元素,但是这些方法对布局、动画、事件绑定都有不同的影响。
1.opacity 和 filter: opacity()
opacity: N 和 filter: opacity(N) ,属性可以传递一个 0 到 1 之间的数字,或者 0% 到 100% 之间的百分比,相应地表示完全透明和完全不透明。在现代浏览器上,两者的表现几乎没什么区别,但如果同时应用多种效果(模糊、对比度、灰度等),则应使用filter。
.hide:hover .hide-item,
.hide:focus .hide-item {
opacity: 0;
/*
也可以写成:
opacity: 0%;
filter: opacity(0%);
*/
}
Opacity 可以设置动画并有出色的性能,但要注意页面上会保留完全透明的元素并可以绑定事件。
2.颜色 Alpha 透明度
opacity影响整个元素,我们也可以单独对color, background-color和border-color进行设置。使用 rgba(0,0,0,0) 或类似方法使元素完全透明:
.hide:hover .hide-item,
.hide:focus .hide-item {
color: rgba(0,0,0,0);
background-color: rgba(0,0,0,0);
}
上面的每个属性都可以单独设置动画以创建有趣的效果,这种隐藏元素的方式也能触发事件。
3.transform
transform属性可用于移动、缩放、旋转或倾斜元素。scale(0)或translate(-999px, 0px) 将隐藏元素:
.hide:hover .hide-item,
.hide:focus .hide-item {
transform: scale(0);
/*
也可以写成:
transform: translate(-999px, 0);
*/
}
transform有出色的性能,因为元素被移动到一个单独的层中,可以在2D或3D中进行动画处理。 虽然原始布局空间依然保留位置,但不能触发任何事件。
4.clip-path
clip-path属性创建一个裁剪区域,用于指定元素的哪些部分是可见的。 使用clip-path: circle(0); 将完全隐藏元素。
.hide:hover .hide-item,
.hide:focus .hide-item {
clip-path: circle(0);
}
clip-path为制作有趣的动画提供了灵感,不过它只能有用于现代浏览器中。这种方式隐藏的元素无法触发事件。
5.visibility
可见性属性可以设置为visible或hidden以显示和隐藏元素:
.hide:hover .hide-item,
.hide:focus .hide-item {
visibility: hidden;
}
被隐藏的元素依然保持原来的位置,但是这种隐藏元素的方式也是无法绑定事件的,如果使用visibility:collapse,则元素将不占有原来的位置。
6.display
display可能是最常用的元素隐藏方法。 none有效地删除元素,就好像它从未存在于DOM中一样。 然而,在大多数情况下,这不是一个好的方法,它无法实现动画效果也引起回流(重布局)。
.hide:hover .hide-item,
.hide:focus .hide-item {
display: none;
}
7.HTML hidden 属性
HTML hidden 属性可以添加到任何元素:
<p hidden>
Hidden content
</p>
这与 display:none 具有相同的优点和缺点,在使用不允许样式更改的cms系统时它可能比较有用。
8.绝对定位
position:absolute属性可以将元素从页面布局内的默认位置朝上下左右方向移动。 因此,绝对定位的元素可以用left: -999px或类似的方法移出屏幕:
.hide:hover .hide-item,
.hide:focus .hide-item {
position: absolute;
left: -999px;
}
9.元素覆盖
通过将另一个与背景颜色相同元素放置本元素在的顶部,可以在视觉上隐藏一个元素。 在下面例子中,一个::after伪元素覆盖在本元素上面:
.hide-item {
position: relative;
}
.hide-item::after {
position: absolute;
content: '';
top: 0;
bottom: 100%;
left: 0;
right: 0;
background-color: #fff;
}
.hide:hover .hide-item::after,
.hide:focus .hide-item::after {
bottom: 0;
}
虽然技术上可行,但此选项需要比其他方法更多的代码。该方法隐藏的元素也可以绑定事件。
10.缩小尺寸
可以通过使用宽度、高度、填充、边框宽度字体大小最小化其尺寸来隐藏元素。
.hide:hover .hide-item,
.hide:focus .hide-item {
height: 0;
padding: 0;
overflow: hidden;
}
该方式可以实现有趣的动画效果,但transform的性能明显更好。
总结
display: none 多年来一直是隐藏元素的首选解决方案,但在考虑性能时,transform 或 opacity 是更好的选择。
作者:Craig Buckler 译者:前端很美 来源:sitepoint