浮动定位BFC边距合并

2017-11-09  本文已影响0人  FLYSASA

1.浮动元素有什么特征?对父容器、其他浮动元素、普通元素、文字分别有什么影响?

浮动模型也是一种可视化格式模型,浮动的框可以左右移动(根据float属性值而定),直到它的外边缘碰到包含框或者另一个浮动元素的框的边缘。浮动元素不在文档的普通流中,文档的普通流中的元素表现的就像浮动元素不存在一样.

2.清除浮动指什么?如何清除浮动?两种以上方法

清理浮动:解决父容器高度坍塌问题

方法1

如果我们想让父元素在视觉上包围浮动元素可以在父元素最后添加一个空div,
<div style="clear:both;"></div>对它清理。缺点是增加了一个无意义的标签,如下例:

方法2

使父容器生成BFC,因为BFC可以包含浮动,从而达到“清除浮动”效果,如何形成浮动:

通用的清理浮动法案

 /*方法1*/
  .clearfix{
      *zoom:1;
  }
  .clearfix:after{
      content: "";
      display: block;
      clear: both;
  }


  /*方法2*/
  .clearfix{
    *zoom:1;
  }
  .clearfix:after{
    content:"";
      display:table;
      clear:both;
  }

3.有几种定位方式,分别是如何实现定位的,参考点是什么,使用场景是什么?

css定位方式有四种:默认定位(static)、相对定位(relative)、绝对定位(absolute)和固定定位(fixed)

其中的相对指的是相对于元素在默认流中的位置。元素偏移之后,他本来在默认文档流中占据的位置仍然存在,其紧挨其后的元素的定位依据它本来的位置定位
参考点:元素本身位置
使用场景:元素相对偏移
案例:


绝对定位的元素已经脱离了文档流,普通流中其他元素的布局就像绝对元素不存在一样;绝对定位的元素的位置是相对于最近的已定位的祖先元素,如果元素没有已定位的祖先元素,它的位置就相对于body根元素;绝对定位的框可以覆盖页面的其他元素。
参考点:距离最近的非static元素,否则为body
使用场景:垂直水平居中
案例:


top: 20px; left:20px 相对的值是看其父容器是否存在 position:relative;absolute;fixed;这三个值,如果有就是相对父容器的内边框。
当父容器里有 绝对定位 的子元素时,子元素设置width:100%实际上指的是相对于父容器的padding+content的宽度。当子元素是非绝对定位的元素时width:100%才是指子元素的 content 等于父元素的 content宽度查看范例http://js.jirengu.com/jatog/1/edit

注意只有position: relative; absolute; fixed;才能设置top left 等的值;

4.z-index有什么作用?如何使用?

z-index 属性设置元素的堆叠顺序。拥有更高堆叠顺序的元素总是会处于堆叠顺序较低的元素的前面。如果为正数,则离用户更近,为负数则表示离用户更远。Z-index 仅能在定位元素上奏效。

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

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

6.BFC 是什么?如何生成 BFC?BFC 有什么作用?举例说明

BFC特性:
1.BFC会阻止垂直外边距(margin-top、margin-bottom)折叠
按照BFC的定义,只有同属于一个BFC时,两个元素才有可能发生垂直Margin的重叠,这个包括相邻元素,嵌套元素,只要他们之间没有阻挡(例如边框,非空内容,padding等)就会发生margin重叠。
因此要解决margin重叠问题,只要让它们不在同一个BFC就行了,但是对于两个相邻元素来说,意义不大,没有必要给它们加个外壳,但是对于嵌套元素来说就很有必要了,只要把父元素设为BFC就可以了。这样子元素的margin就不会和父元素的margin发生重叠
2.BFC不会重叠浮动元素
3.BFC可以包含浮动

  • float为 left|right
  • overflow为 hidden|auto|scroll
  • display为 table-cell|table-caption|inline-block
  • position为 absolute|fixed

7.在什么场景下会出现外边距合并?如何合并?如何不让相邻元素外边距合并?给个父子外边距合并的范例

当块处于同一个文档流同一个BFC中,两个元素才有可能发生垂直Margin的重叠,这个包括相邻元素,嵌套元素,只要他们之间没有阻挡(例如边框,非空内容,padding等)就会发生margin重叠。对于父子元素,容器没有padding和border内部的margin会导致外边距合并。
相邻元素box1和box2的垂直外边距合并,如下例,


合并规则:
1.两个margin都是正值的时候,取两者的最大值;
2.当 margin 都是负值的时候,取的是其中绝对值较大的,然后,从0位置,负向位移;
3.当有正有负的时候,先取出负 margin 中绝对值中最大的,然后和正 margin 值中最大的 margin 相加。

如何不让相邻元素外边距合并:
1.被非空内容、padding、border 或 clear 分隔开。
2.不在一个普通流中或一个BFC中。
3.浮动元素、inline-block 元素、绝对定位元素的 margin 不会和垂直方向上其他元素的 margin 折叠(注意这里指的是上下相邻的元素)。

父子外边距合并见下例:



解决外边距合并,让父容器设为BFC就可以了。给父容器加入overflow: auto;包裹h1,使得h1的margin内部生效,从而不会margin合并。这样子元素的margin就不会和父元素的margin发生重叠。如下例:


参考http://blog.csdn.net/github_37037281/article/details/55505825

上一篇 下一篇

猜你喜欢

热点阅读