display:none和visibility:hidden两者的区别
一般在面试中问display:none和visibility:hidden两者区别,面试者都能回答出:两者都是隐藏元素,前者不会占据空间,后者隐藏了依然占据空间。记录这篇博客,想能够更深入或者更全面比较两者区别。
visibility:隐藏对应的元素但不挤占该元素原来的空间。
display:隐藏对应的元素并且挤占该元素原来的空间。
两者区别:
- visibility具有继承性,给父元素设置visibility:hidden;子元素也会继承这个属性。但是如果重新给子元素设置visibility: visible,则子元素又会显示出来。这个和display: none有着质的区别
- visibility: hidden不会影响计数器的计数,如图所示,visibility: hidden虽然让一个元素不见了,但是其计数器仍在运行。这和display: none完全不一样
- visibility用来设置元素的可见状态。
- display:none是会有回流,HTML元素(对象)的宽度、高度等各种属性值都将“丢失”。
- visibility: hidden; 不会有回流,HTML元素(对象)仅仅是在视觉上看不见(完全透明),而它所占据的空间位置仍然存在,也即是说它仍具有高度、宽度等属性值。
1 <!DOCTYPE html> 2 <html lang="en"> 3 4 <head> 5 <meta charset="UTF-8"> 6 <meta name="viewport" content="width=device-width, initial-scale=1.0"> 7 <meta http-equiv="X-UA-Compatible" content="ie=edge"> 8 <title>display:none和visibility:hidden两者的区别</title> 9 </head> 10 11 <body> 12 <div> 13 <strong>给元素设置visibility:hidden样式</strong> 14 <ol> 15 <li>元素1</li> 16 <li style="visibility:hidden;">元素2</li> 17 <li>元素3</li> 18 <li>元素4</li> 19 </ol> 20 </div> 21 <div> 22 <strong>给元素设置display:none样式</strong> 23 <ol> 24 <li>元素1</li> 25 <li style="display:none;">元素2</li> 26 <li>元素3</li> 27 <li>元素4</li> 28 </ol> 29 </div> 30 31 <strong>给元素设置visibility:hidden继承属性样式</strong> 32 <div style="visibility:hidden"> 33 <ol> 34 <li>元素1</li> 35 <li style="visibility:visible;">元素2</li> 36 <li>元素3</li> 37 <li>元素4</li> 38 </ol> 39 </div> 40 </body> 41 42 </html>
语法:
visibility : inherit | visible | collapse | hidden
参数可参考:https://developer.mozilla.org/zh-CN/docs/Web/CSS/visibility
display用来设定元素的显示状态。
语法:
display : block | none | inline | compact | marker | inline-table | list-item | run-in | table |table-caption | table-cell | table-column | table-column-group | table-footer-
group | table-header-group | table-row | table-row-group
参数:
block : CSS1 块对象的默认值。用该值为对象之后添加新行
none : CSS1 隐藏对象。与visibility属性的hidden值不同,其不为被隐藏的对象保留其物理空间
inline : CSS1 内联对象的默认值。用该值将从对象中删除行
compact : CSS2 分配对象为块对象或基于内容之上的内联对象
marker : CSS2 指定内容在容器对象之前或之后。要使用此参数,对象必须和:after及:before 伪元素一起使用
inline-table : CSS2 将表格显示为无前后换行的内联对象或内联容器
list-item : CSS1 将块对象指定为列表项目。并可以添加可选项目标志
run-in : CSS2 分配对象为块对象或基于内容之上的内联对象
table : CSS2 将对象作为块元素级的表格显示
table-caption : CSS2 将对象作为表格标题显示
table-cell : CSS2 将对象作为表格单元格显示
table-column : CSS2 将对象作为表格列显示
table-column-group : CSS2 将对象作为表格列组显示
table-header-group : CSS2 将对象作为表格标题组显示
table-footer-group : CSS2 将对象作为表格脚注组显示
table-row : CSS2 将对象作为表格行显示
table-row-group : CSS2 将对象作为表格行组显示
运用总结:
- 若用JQeury中的Show()来显示元素,则只对display:none有效,对于用visibility:hidden方式隐藏的元素是无效的
- display:none和visibility:hidden都是隐藏元素而不是删除元素。