简介
display 属性依赖于称为相对定位( relative positioning )的概念,它意味着元素将相对于页面上的其它元素进行定位。 CSS 还支持绝对定位( absolute positioning ),它允许独立于其它元素把一个元素放在页面上的精确位置。
display 用来定义元素的显示类型。其中,第二行为列表项目或是表格类项目,在网页设计中不常用:
- display : none | inline | block | inline-block
- display : list-item | table | inline-table | table-caption | table-cell | table-row | table-row-group | table-column-group | table-column | table-footer-group| table-header-group
- display : run-in | box | inline-box | flexbox | inline-flexbox | flex | inline-flex
第三行为 css 3 新增属性。
- inline 行内元素
- block 块级元素
- inline-block 行内块
父元素 { font-size: 0; } 。
由于 img 元素也是 inline-block 元素,因此我们也能使用" font-size:0 "来去除图片之间的间距。
-
none 隐藏
-
display:none
的元素被隐藏之后,不占据原来的位置。也就是说彻底地消失了,看不见也摸不着 -
visibility:hidden
的元素被隐藏之后,依然占据原来的位置。也就是说并没有彻底消失,看不见但摸得着 -
table 表
-
table-caption 表头
-
table-row 表行
-
table-cell 表格
-
图片垂直居中于元素
-
等高布局
-
自动平均划分元素,并且在一行显示
run-in
将 CSS 属性 display 定义为 run-in 后,会根据周围元素来决定盒子类型,它有以下三个特点。
- 如果定义为 run-in 的元素包含一个块级元素,那么它也可被理解为块级元素
- 定义为 run-in 的元素的相邻兄弟元素(位于元素后面的兄弟元素)如果是块级元素,那么这个兄弟元素会变成行内元素
- 如果是其它情况,那么 run-in 元素可理解为块级元素
块级元素和内联元素
块元素具有如下特点
- 独占一行,排斥其它元素跟其位于同一行,包括块元素和行内元素
- 块元素内部可以容纳其它块元素或行元素
- 可以定义高度( height ),也可以定义宽度( width )
- 可以定义四个方向的 margin 属性
行内元素具有如下特点
- 可以与其它行内元素位于同一行
- 行内内部可以容纳其它行内元素,但不可以容纳块元素,不然会出现无法预知的效果
- 无法定义高度( height ),也无法定义宽度( width
- 可以定义 margin-left 和 margin-right ,无法定义 margin-top 和 margin-bottom
浮动
float : none | left | right
-
浮动空间
-
元素定义了宽高,则以设置的值显示
-
包含其它对象,则紧紧包裹对象或内容区
-
如果未设置且不包含,则缩为一个点
-
浮动位置
-
left
-
right
-
浮动环绕
浮动影响
-
如果一个元素设置了浮动,则不管这个元素是什么类型,都会转化为块元素,也就是 display 属性值为 block
-
如果一个元素设置了浮动,它会脱离正常文档流。如果浮动元素的高度 height 大于父元素的高度 height ,或者父元素没有定义高度 height ,此时浮动元素会脱离父元素。这就是我们常见的"父元素高度塌陷"
-
当一个浮动元素碰到同一个方向的兄弟元素时,这些元素会从左到右、从上到下,一个接着一个紧挨着排列
-
当一个浮动元素碰到同一个方向的兄弟元素时,这两个元素会移向两边(如果父元素宽度足够的话)
-
在实际开发中我们使用了浮动之后,尽量清除浮动,不然会有预想不到的后果
-
当父元素同时也是一个浮动元素的时候,这个父元素会自适应地包含该子元素
浮动的负作用
- 父元素高度塌陷,从而导致边框不能撑开,背景色无法显示。
- 页面布局错乱
清除浮动
常见的清除浮动的方法有三种。
- clear:both
- overflow:hidden
- ::after 伪元素 使用" ::after 伪元素"结合" clear:both "来实现
clear : none | left | right | both
清除不是清除别的元素浮动,而是清除自己。如果左右两侧存在浮动元素,则把当前元素清除到下一行显示,而不是将前面的浮动元素清走,或者上一行显示。根据 HTML 解析规则,当前元素前面的对象不会受后面的影响
浮动嵌套
- 浮动包含框
- 包含浮动对象