display、float、position的关系

1,314 阅读4分钟

一起养成写作习惯!这是我参与「掘金日新计划 · 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-toppadding-bottom或者widthheight都是有效果的

4、display、float、position的关系

  • 如果display取值为none,那么positionfloat都不起作用,这种情况下元素的display不受影响。

  • 如果position取值为absolute或者fixed,框就是绝对定位的,float属性不生效,display根据下面的表格进行调整。

    设置值计算值
    inline-tabletable
    inline、inline-block、table-cell、
    table-row、table-column、table-caption、
    table-row-group、table-column-group、
    table-header-group、table-footer-group
    block
    其他值与设置值一样
  • 如果position不为absolute或者fixed,若float的值不为none,那么display转化的规则和上面一条一样。另外,如果position的值为relative并且float属性的值存在,则relative相对于浮动后的最终位置定位(先浮动生效再relative定位生效)。

  • 如果没有定位且float为none,则看是否为根元素。如果元素是根元素,display根据上面表格规则进行调整

  • 其他情况下display的值为指定值

总结起来:

  1. 绝对定位、浮动、根元素都需要调整display
  2. 可以把它看作是一个类似优先级的机制,"position:absolute"和"position:fixed"优先级最高,有它存在的时候,浮动不起作用,'display'的值也需要调整;
  3. 元素的'float'特性的值不是"none"的时候或者它是根元素 的时候,调整'display'的值;
  4. 最后,非根元素,并且非浮动元素,并且非绝对定位的元素,'display'特性值同设置值。