CSS – display, visibility, opacity, transparent 的区别
前言
要让一个元素"消失", 有 3 种做法. 它们有一点点的不同. 在实战时要清楚什么时候用什么哦.
例子说明
<div class="abc">
<div class="xyz"></div>
</div>
CSS Style
.abc {
border: 1px solid red;
width: max-content;
.xyz {
width: 100px;
height: 100px;
background-color: red;
}
}
效果

opacity: 0
opacity 是让元素透明. 虽然看不到, 但是占据空间, 同时可被触碰 (e.g. hover).
.xyz {
opacity: 0;
&:hover {
opacity: 1;
}
}
效果

虽然看不见, 但是占据空间, 而且可以 hover.
冷知识 – Transform, Opacity 也会让元素飘起来
visibility: hidden
它比 opacity 厉害一点, 看不见, 同时也触碰不到了, 但依然占据空间.
.xyz {
visibility: hidden;
&:hover {
visibility: visible;
}
}
效果

已经 hover 不到了, 但它依然占据空间.
display: none
它才是真正让元素消失的, 看不见, 不占空间, hover 不到.
.xyz {
display: none;
&:hover {
display: block;
}
}
效果

由于不占据空间了, 只剩下 container 的 1px border. 所以只看见小红点.
另外不占空间也意味着 dimension 是 0,比如 element.offsetWidth 会返回 0,还要 getBoundingClientRect top, left, width, height 都会返回 0。
总结
opacity 看不见, 占空间, 能触碰 (re-paint)
visibility 看不见, 占空间, 不能触碰 (re-paint)
display: 看不见, 不占空间, 不能触碰 (re-flow)
fade in 效果
display none 转换 display: block 是没有 transition 效果的.
所以通常用 visibility + opacity 来实现 fade in. 但要注意空间的问题, 因为 visibility 是占据空间的.
有时候会用 height: 0 来帮助消失空间. 但也要注意 height: 0 的冷知识 哦.
hamburger menu 的消失 (transparent)

中间是一个 div / span, 然后加上 ::before, ::after 就成了 hamburger
打开的 menu 的时候会变成 X 中间那一条会消失. 上面 3 种方式都做不到这个效果. 因为 opacity 会把整个 div 消失掉. 也包括了里面的 ::before, ::after.
正确的做法是通过 background-color: transparent, 这样中间就消失了, 但是 "内容" ::before 和 ::after 则依然在.
CSS – display, visibility, opacity, transparent 的区别的更多相关文章
- CSS隐藏元素 display visibility opacity的区别
{ display: none; /* 不占据空间,无法点击 */ } { visibility: hidden; /* 占据空间,无法点击 */ } { position: absolute; ...
- CSS(三)背景 list-style display visibility opacity vertical cursor
背景background 1.background-color:'' 背景颜色 2.background-image:'' 背景图片 background-repeat:'' 背景图片是否平铺 取 ...
- css display visibility
当visibility被设置为"hidden"的时候,元素虽然被隐藏了,但它仍然占据它原来所在的位置.注意,当元素被隐藏之后,就不能再接收到其它事件了. display属性就有一点 ...
- css隐藏元素display:none,opacity:0;filter:alpha(opacity=0-100;,visibility:hidden的区别
在CSS中,让元素隐藏(指屏幕范围内肉眼不可见)的方法很多,有的占据空间,有的不占据空间:有的可以响应点击,有的不能响应点击.我们一般有三种方式:display:none, opacity:0;fil ...
- CSS display:none和visibility:hidden区别
你知道CSSdisplay:none和visibility:hidden的区别吗,这里和大家分享一下,使用CSS display:none属性后,HTML元素(对象)的宽度.高度等各种属性值都将&qu ...
- 两种隐藏元素方式【display: none】和【visibility: hidden】的区别
此随笔的灵感来源于上周的一个面试,在谈到隐藏元素的时候,面试官突然问我[display: none]和[visibility: hidden]的区别,我当时一愣,这俩有区别吗,好像有,但是忘记了啊,因 ...
- 关于 transparent rgba display:none; opacity visiblity 关于em
关于 transparent rgba display:none; opacity visiblity display 之后不会占位. 其余都会占位 opacity 还会继承,子元素也会 ...
- display:none和visibility:hidden两者的区别
display与元素的隐藏 如果给一个元素设置了display: none,那么该元素以及它的所有后代元素都会隐藏,它是前端开发人员使用频率最高的一种隐藏方式.隐藏后的元素无法点击,无法使用屏幕阅读器 ...
- [转]CSS Display(显示) 与 Visibility(可见性)
CSS Display(显示) 与 Visibility(可见性) display属性设置一个元素应如何显示,visibility属性指定一个元素应可见还是隐藏. 隐藏元素 - display:non ...
- CSS display:inline和float:left两者区别探讨
本文和大家重点讨论一下CSS display:inline和float:left两者的区别,CSS display是指显示状态,inline表示内联,特点是紧贴着前一个内联元素,通常默认的内联元素有 ...
随机推荐
- PowerBuilder现代编程方法X11:PB程序完全跨平台方案
PB可能要支持Windows.macOS.Linux.iOS.Android与鸿蒙操作系统和X86.ARM.RISC-V与国产龙芯CPU的原生应用了! PowerBuilder现代编程方法X11:PB ...
- JAVA私有构造函数---java笔记
在Java中,构造函数是一种特殊的方法,它用于初始化新创建的对象.当我们创建一个类的实例时,构造函数会自动被调用. 构造函数可以有不同的访问修饰符,如public.protected.default( ...
- NAS使用
openwrt下的samba设置 - 百度文库 (baidu.com) openwrt下 samba设置 (wjhsh.net) opkg updateopkg install shadow-user ...
- C#开源、简单易用的Dapper扩展类库 - Dommel
前言 今天大姚给大家分享一个C#开源(MIT License).免费.简单易用的Dapper扩展类库,帮助.NET开发者使用Dapper的CRUD操作变得更简单:Dommel. 项目特性 Dommel ...
- BTC 地址
比特币地址(Bitcoin Address)是用于接收和发送比特币的唯一标识符,类似于传统金融系统中的银行账号.一个比特币地址由一串字母和数字组成,通常以1.3或bc1开头,具体长度为26至35个字符 ...
- openGL之多线程渲染
随着Vulkan的引入,我们的图形技术的发展到达了一个新的顶点,但是呢,我们的老干爹OpenGL作为落日余晖,他在一些Vulkan才有的新功能上,也提供了一些支持,现在我们来讨论一下OpenGL之多线 ...
- Linux环境 yum,apt-get,rpm,wget 区别
Linux环境 yum,apt-get,rpm,wget 区别 一般来说linux系统基本上分两大类:cat /etc/issue查看linux系统版本RedHat系列:Redhat.Centos.F ...
- 11、SpringMVC之文件下载和上传
创建名为spring_mvc_file的新module,过程参考9.1节和9.5节 11.1.文件下载 11.1.1.创建图片目录并放置图片 11.1.2.页面请求示例 <a th:href=& ...
- 【Web】 通过浏览器打开本地应用程序
首先需要编写注册表: 以Steam为例: "C:\Program Files (x86)\Steam\Steam.exe" 然后编写注册表: Windows Registry Ed ...
- 【Web】 抓包工具Charles
官方软件包下载 https://www.charlesproxy.com/download/ 在线生成激活码: https://www.zzzmode.com/mytools/charles/ 代理设 ...