要想了解visibility: hidden与display:none的区别,我们还是先来看看他们各自的定义及用法。
visibility属性
定义:
visibility 属性规定元素是否可见
说明:
这个属性指定是否显示一个元素生成的元素框,它是仍然占据基本空间的,只是不可见而已。值设置成collapse在表格中用于从表格布局中删除列或行。
可能的值
visible | 默认值。元素是可见的。 |
hidden | 元素是不可见的。 |
collapse | 当在表格元素中使用时,此值可删除一行或一列,但是它不会影响表格的布局。被行或列占据的空间会留给其他内容使用。如果此值被用在其他的元素上,会呈现为 “hidden”。 |
inherit | 规定应该从父元素继承 visibility 属性的值。 |
浏览器支持:所有主流浏览器都支持 visibility 属性 任何的版本的 Internet Explorer (包括 IE8)都不支持 “inherit” 和 “collapse” 属性值。不过也没关系,可以忽略IE,现在IE都不叫IE了,叫Edge了。虽然它来得有点晚,但是总算来了。
display属性
定义:
display 属性规定元素应该生成的框的类型。
可能的值
none | 此元素不会被显示。 |
block | 此元素将显示为块级元素,此元素前后会带有换行符。 |
inline | 默认。此元素会被显示为内联元素,元素前后没有换行符。 |
inline-block | 行内块元素。(CSS2.1 新增的值) |
list-item | 此元素会作为列表显示。 |
run-in | 此元素会根据上下文作为块级元素或内联元素显示。 |
compact | CSS 中有值 compact,不过由于缺乏广泛支持,已经从 CSS2.1 中删除。 |
marker | CSS 中有值 marker,不过由于缺乏广泛支持,已经从 CSS2.1 中删除。 |
table | 此元素会作为块级表格来显示(类似 <table>),表格前后带有换行符。 |
inline-table | 此元素会作为内联表格来显示(类似 <table>),表格前后没有换行符。 |
table-row-group | 此元素会作为一个或多个行的分组来显示(类似 <tbody>)。 |
table-header-group | 此元素会作为一个或多个行的分组来显示(类似 <thead>)。 |
table-footer-group | 此元素会作为一个或多个行的分组来显示(类似 <tfoot>)。 |
table-row | 此元素会作为一个表格行显示(类似 <tr>)。 |
table-column-group | 此元素会作为一个或多个列的分组来显示(类似 <colgroup>)。 |
table-column | 此元素会作为一个单元格列显示(类似 <col>) |
table-cell | 此元素会作为一个表格单元格显示(类似 <td> 和 <th>) |
table-caption | 此元素会作为一个表格标题显示(类似 <caption>) |
inherit | 规定应该从父元素继承 display 属性的值。 |
浏览器支持:所有主流浏览器都支持 display 属性。
总结:如果想不可见的元素占据页面上的空间,那么请使用 “visibility” 属性来创建占据页面空间的不可见元素。如果想不可见的元素不占据页面上的空间,那么请使用 “display” 属性来创建不占据页面空间的不可见元素。