8. 浮动、定位、BFC及边距合并

2017-04-13  本文已影响0人  石林涛

浮动

特征:

浮动的元素会脱离文档流,向左或者向右移动至包含块内边缘或者同样浮动的元素外边缘。
文档流中的普通元素察觉不到浮动元素,但是其文本内容却能察觉到浮动元素,呈现出围绕浮动元素排列的表现方式。

影响:
清除浮动:

清除浮动是指消除浮动元素对其他元素因浮动元素造成的高度塌陷的问题。

清除浮动的方法:

  1. 在父元素的子元素最后添加一个空div,并对其设置样式:clear:both;
    由于在子元素最后添加了空div,并清除了浮动,因此父容器被撑开,实现了在视觉上包围浮动元素的效果。
  2. 利用BFC来清除浮动。
    因为BFC可以包含浮动,因此可以让父元素生成一个新的BFC从而包围浮动的子元素。
    可以对父元素设定以下样式之一生成新BFC。
float: left | right;
overflow: hidden | auto | scroll;
display: table-cell | table-caption | inline-block;
position: absolute | fixed;
  1. 结合CSS特性的通用清除浮动方案,其本质还是第1种方法。
.clearfix{*zoom: 1;}
.clearfix:after{content: ””; display: block; clear: both;}

定位

</br>

z-index

概念:z-index 属性设置元素的堆叠顺序。拥有更高堆叠顺序的元素总是会处于堆叠顺序较低的元素的前面。z-index 仅能在定位元素上奏效。

当页面上出现多个由绝对定位(position:absolute)或固定定位(position:fixed)所产生的浮动层时,必然就会产生一个问题,就是当这些层的位置产生重合时,谁在谁的上面呢?或者说谁看得见、谁看不见呢?这时候就可以通过设置z-index的值来解决,这个值较大的就在上面,较小的在下面。

z-index的意思就是在z轴的顺序,如果说网页是由x轴和y轴所决定的一个平面,那么z轴就是垂直于屏幕的一条虚拟坐标轴,浮动层就在这个坐标轴上,那么它们的顺序号就决定了谁上谁下了。

position:relative和负margin都可以使元素位置发生偏移,二者有什么区别?

</br>

BFC

BFC直译为"块级格式化上下文"。它是一块独立的区域,容器里面的子元素不会影响到外面的元素。

要促发BFC的生成,则满足以下其中一个条件:

  1. float属性不为none;
  2. position为absolute或fixed;
  3. display为inline-block, table-cell, table-caption, flex, inline-flex;
  4. overflow不为visible。

BFC可以清除内部浮动:BFC可以包含浮动,让父容器生成新的BFC可以使父容器在视觉上包围了浮动的子元素,因而清除了浮动。例子:清除浮动demo

防止margin重叠:属于同一个BFC的两个相邻Box的margin会发生重叠,我们可以把其中一个元素生成新的BFC,这样它们的边距就不会合并。
</br>

外边距合并

外边距合并指当两个垂直外边距相遇时,它们将形成一个外边距。合并后的外边距的高度等于两个发生合并的外边距的高度中的较大者。当两个外边距都为负数时,取其绝对值的较大者,当两个外边距为一正一负时,取两者的和。

父子外边距合并的需要满足父元素没有border和paddinng隔开。
只有普通文档流中块框的垂直外边距才会发生外边距合并。行内框、浮动框、绝对定位框(absolute或fixed)之间的外边距不会合并。

具体场景如下:
防止让相邻元素外边距合并的方法:

只有普通文档流中块框的垂直外边距才会发生外边距合并。行内框、浮动框、绝对定位框(absolute或fixed)之间的外边距不会合并。
所以把相邻元素的其中一个元素形成一个BFC,BFC就会阻止垂直外边距(margin-top,margin-bottom)的折叠。

防止父子外边距合并的方法:
  1. 外层padding;
  2. 透明边框border:1pxsolidtransparent;
  3. 绝对定位postion:absolute:
  4. 外层DIV overflow:hidden;
  5. 内层DIV 加display:inline-block(触发BFC);

例子如下:
父子外边距合并
padding解决
boroder解决
overflow解决
绝对定位解决

上一篇 下一篇

猜你喜欢

热点阅读