一起养成写作习惯!这是我参与「掘金日新计划 · 4 月更文挑战」的第19天,点击查看活动详情。
1、display的值及作用
block
转换成块状元素。inline
转换成行内元素。none
设置元素不可见(该种方法的不可见是使得整个dom元素从文档流中去掉,而不只是单纯的样式上的隐藏)。inline-block
具备了行内元素不换行的特征,同时也有块元素可以设置宽高的特征list-item
象块类型元素一样显示,并添加样式列表标记。table
此元素会作为块级表格来显示inherit
规定应该从父元素继承display
属性的值
在CSS布局中,如果我们想要将一些元素在同一行显示,其中的一种方法就是把要同行显示的元素设置display属性为inline-block,但是你会发现这些同行显示的inline-block元素之间经常会出现一定的空隙,这就是【换行符/空格间隙问题】。
display:inline-block 什么时候不会显示间隙?
- 移除空格
- 使用
margin
负值 - 使用
font-size:0
letter-spacing
word-spacing
2、定位position的值及作用
static
默认值。没有定位,元素出现在正常的流中。absolute
:生成绝对定位的元素,相对于定位值是static
以外的第一个父辈元素进行定位fixed
:生成绝对定位的元素,相对于浏览器窗口进行定位relative
:生成相对定位的元素,相对于其正常位置进行定位inherit
规定从父元素继承position
属性的值
relative相对于自身定位,可以设置位置偏移,但是自身原本在正常文档流中的位置还保留,所以**relative
是不脱离文档流的**。
定位值为absolute、fixed的时候,原本自身在正常文档流中的位置不保留,代码中后面的元素会顶上,absolute、fixed定位是脱离正常文档流的。
3、浮动
浮动的元素也会使其脱离正常文档流。浮动的框可以向左float: left
或向右float: right
移动,直到他的外边缘碰到包含框或另一个浮动框的边框为止。由于浮动框不在文档的普通流中,所以文档的普通流的块框表现得就像浮动框不存在一样。浮动的块框会漂浮在文档普通流的块框上。
行内元素float:left后是否变为块级元素?
行内元素设置成浮动之后变得更加像是inline-block
(行内块级元素,设置成这个属性的元素会同时拥有行内和块级的特性,最明显的不同是它的默认宽度不是100%
),这时候给行内元素设置padding-top
和padding-bottom
或者width
、height
都是有效果的
4、display、float、position的关系
-
如果
display
取值为none
,那么position
和float
都不起作用,这种情况下元素的display不受影响。 -
如果
position
取值为absolute
或者fixed
,框就是绝对定位的,float属性不生效,display
根据下面的表格进行调整。设置值 计算值 inline-table table inline、inline-block、table-cell、
table-row、table-column、table-caption、
table-row-group、table-column-group、
table-header-group、table-footer-groupblock 其他值 与设置值一样 -
如果
position
不为absolute
或者fixed
,若float
的值不为none
,那么display转化的规则和上面一条一样。另外,如果position的值为relative
并且float属性的值存在,则relative相对于浮动后的最终位置定位(先浮动生效再relative
定位生效)。 -
如果没有定位且float为none,则看是否为根元素。如果元素是根元素,
display
根据上面表格规则进行调整 -
其他情况下
display
的值为指定值
总结起来:
- 绝对定位、浮动、根元素都需要调整
display
- 可以把它看作是一个类似优先级的机制,"position:absolute"和"position:fixed"优先级最高,有它存在的时候,浮动不起作用,'display'的值也需要调整;
- 元素的'float'特性的值不是"none"的时候或者它是根元素 的时候,调整'display'的值;
- 最后,非根元素,并且非浮动元素,并且非绝对定位的元素,'display'特性值同设置值。