1、空间占据方面
display:none隐藏后不会占据原有空间,会产生回流和重绘
visibility:hidden和opacity:0元素隐藏,但仍然占据着原有空间,它们俩只会引起页面重绘。
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
<style>
.div1 {
width: 100px;
height: 100px;
background:red;
margin-top: 10px;
display: none;
}
.div2 {
width: 100px;
height: 100px;
background: red;
margin-top: 10px;
visibility: hidden;
}
.div3 {
width: 100px;
height: 100px;
background: red;
margin-top: 10px;
opacity: 0;
}
</style>
</head>
<body>
<div class="div1">
display:none
</div>
<div class="div2">
visibility:visible
</div>
<div class="div3">
opacity:0
</div>
</body>
</html>
注意这里找不到div1!
2、继承
display:none不会被子元素继承
visibility:hidden 会被子元素继承,可以通过设置子元素visibility:visible 使子元素显示出来
opacity: 0 会被子元素继承,但是不能通过设置子元素opacity: 0使其重新显示
3、事件绑定
display:none 元素已经不存在了,所以也就无法触发事件;
visibility:hidden 元素上绑定的事件也无法触发;
opacity: 0元素上面绑定的事件是可以触发的。
4、过渡动画
transition对display无效
transition对visibility无效
但transition对opacity是有效的