浮动定位BFC边距合并

浮动元素有什么特征?对父容器、其他浮动元素、普通元素、文字分别有什么影响?#### 特征:浮动模型也是一种可视化格式模型,浮动的框可以左右移动(根据float属性值而定),直到它的外边缘碰到包含框或者另一个浮动元素的框的边缘。浮动元素不在文档的普通流中,文档的普通流中的元素表现的就像浮动元素不存在一样
对其他浮动元素的影响:包含框足够宽,与其他浮动元素同一水平方向依次排列。如果包含框太窄,无法容纳水平排列的3个浮动元素,那么其他浮动块向下移动,直到有足够空间的地方。如果浮动元素高度不同,那么当它们向下移动时可能会被其他浮动元素卡住。
对普通元素的影响:浮动元素之前的普通元素不受影响。浮动元素之后的普通元素因感知不到浮动元素的存在会被浮动元素覆盖。
对文字的影响:文字所在行框因为浮动元素的挤压而缩短,从而围绕浮动元素排列。
清除浮动指什么? 如何清除浮动? 两种以上方法#### 【浮动定位BFC边距合并】清除浮动是指,当设置浮动元素时,紧邻其后的元素会受到浮动元素的影响,且其父元素可能出现高度塌陷,这样可能会使布局错乱,所以我们需要想办法来清除浮动。

  • 通过在浮动元素末尾添加一个空的标签例如
  • 触发父元素生成BFC,例如添加 overflow:hidden;样式
  • 通用方法:
. .clearfix{ *zoom:1; } .clearfix:after{ content:""; display:block; clear:left; }

有几种定位方式,分别是如何实现定位的,参考点是什么,使用场景是什么?#### static 默认值。没有定位,元素出现在正常的流中(忽略 top, bottom, left, right 或者 z-index 声明)。
**relative **生成相对定位的元素,相对于其正常位置进行定位。还在文档流中,原来所占用的位不会被其它元素所占有。如,"left:20" 会向元素的 LEFT 位置添加 20 像素。
absolute生成绝对定位的元素,相对于 static 定位以外的第一个祖先元素进行定位。如果没有这样的祖先元素,则参照初始块即浏览器视口。
元素的位置通过 "left", "top", "right" 以及 "bottom" 属性进行规定。
fixed生成绝对定位的元素,相对于浏览器窗口进行定位。元素的位置通过 "left", "top", "right" 以及 "bottom" 属性进行规定。
CSS有三种基本的定位机制:普通流,相对定位和绝对定位。
普通流是默认定位方式,在普通流中元素框的位置由元素在html中的位置决定,元素position属性为static或继承来的static时就会按照普通流定位,这也是最常见的方式。
相对定位对应position属性的relative值,如果对一个元素进行相对定位,它将出现在他所在的位置上,然后可以通过设置垂直或水平位置,让这个元素相对于它自己移动,在使用相对定位时,无论元素是否移动,元素在文档流中占据原来空间,只是表现出来的位置会改变。相对定位可以看作特殊的普通流定位,元素位置是相对于它在普通流中位置发生变化。
绝对定位使元素的位置与文档流无关,也不占据文档流空间,普通流中的元素布局就像绝对定位元素不存在一样。绝对定位的元素的位置是相对于距离最近的非static祖先元素位置决定的。如果元素没有已定位的祖先元素,那么他的位置就相对于初始包含块html来定位。
z-index 有什么作用? 如何使用?#### z-index 属性设置元素的堆叠顺序。拥有更高堆叠顺序的元素总是会处于堆叠顺序较低的元素的前面。z-index 仅能在定位元素上奏效(例如 position:absolute; ),元素可拥有负的 z-index 属性值。用法:z-index:3; z-index:auto;
position:relative和负margin都可以使元素位置发生偏移?二者有什么区别#### position:relative是指相对于元素本身正常位置发生偏移,不影响其他普通流中元素的位置
margin除了让元素自身发生偏移还影响其它普通流中的元素
BFC 是什么?如何生成 BFC?BFC 有什么作用?举例说明#### BFC 即 Block Formatting Contexts (块级格式化上下文),它属于上述定位方案的普通流。具有 BFC 特性的元素可以看作是隔离了的独立容器,容器里面的元素不会在布局上影响到外面的元素,并且 BFC 具有普通容器所没有的一些特性。
能产生新的BFC的属性:float的值不为none;overflow的值不为visible;display的值为table-cell, table-caption, inline-block中的任何一个;position的值不为relative和static。
BFC的作用:
  1. 清除浮动,只要把父元素设为BFC就可以清理子元素的浮动了,最常见的用法就是在父元素上设置overflow: hidden样式。
  • 解决外边距合并问题,属于同一个BFC的两个相邻盒子的margin会发生重叠,那么我们创建不属于同一个BFC,就不会发生margin重叠了。
  • 实现多栏布局,BFC的区域不会与浮动盒子产生交集,而是紧贴浮动边缘。普通流体元素BFC后,为了和浮动元素不产生任何交集,顺着浮动边缘形成自己的封闭上下文。
在什么场景下会出现外边距合并?如何合并?如何不让相邻元素外边距合并?给个父子外边距合并的范例#### 外边距合并指的是,只有属于同一个BFC时,两个元素才有可能发生垂直margin的重叠,这个包括相邻元素和嵌套元素,只要他们之间没有阻挡,就会发生margin重叠。合并后的外边距的高度等于两个发生合并的外边距的高度中的较大者。
  • 上下相邻的元素会出现外边距(margin-bottom和margin-top)合并
    解决办法:为其中一个元素设置新的BFC,例如设置float或者display:inline-block
浮动定位BFC边距合并
文章图片
浮动定位BFC边距合并
文章图片
1234123.png
  • 父子元素的外边距合并
解决方法:给父元素添加border或者padding 或者把父元素设成新的BFC,这样子元素的margin就不会和父元素的margin重叠
浮动定位BFC边距合并
文章图片
设置border

浮动定位BFC边距合并
文章图片
添加overflow:auto;

浮动定位BFC边距合并
文章图片

    推荐阅读