1 position
-
+
- position 的可选值有四个:static、relative、absolute、fixed,tricky +
- 是被定位的元素层次(z-index)会得到提高 +
1.1 static
-
+
- 如果元素 position 属性值为 static(或者未设 position 属性),该元素出现在正常的流中(忽略 top, bottom, left, right 或者 z-index 声明)。 +
1.2 relative
-
+
- 首先按默认方式(static)生成一个元素。 +
- 然后相对于static生成的位置位置移动,移动的方向和幅度由 left、right、top、bottom 属性确定,其他的元素的位置则不会受该元素的影响发生位置改变来弥补它偏离后剩下的空隙(即保持文档流)。 +
1.3 absolute
-
+
绝对定位的元素使用 left、right、top、bottom 属性相对于其最接近的一个具有定位属性的父元素祖先类的 border 进行绝对定位。
+
+如果不存在这样的父元素,则相对于 body 元素,即相对于浏览器窗口。
+
+- 脱离标准文档流。 +
++Note : 绝对(absolute)定位对象在可视区域之外会导致滚动条出现。而放置相对(relative)定位对象在可视区域之外,滚动条不会出现。
+relative和
+static
方式在最外层时是以< body> 标签为定位原点的,而absoulte
方式在无父级是position
非static
定位时是以 作为原点定位。
1.3 fixed
-
+
fixed 生成绝对定位的元素,该元素相对于浏览器窗口进行定位。
+
+固定定位的元素不会随浏览器窗口的滚动条滚动而变化,也不会受文档流动影响,而是始终位于浏览器窗口内视图的某个位置。
+
+- 一个固定定位元素不会保留它原本在页面应有的空隙(脱离文档流) +
2 float
2.1 使用 float
-
+
- 置了float属性的元素会从普通文档流中脱离,相当于不占据任何空间。 +
- 让block元素无视float元素,让inline元素像流水一样围绕着float元素实现浮动布局。 +
父元素高度塌陷问题,子元素为浮动,则脱离了文档流,父元素不会把该元素在包括在边界内。(解决:在父元素内部末尾添加一个块级元素 or 使父元素成为BFC)
+
+一旦元素float的属性不为none,则其display计算值就是block或者table。块状化意思是可以像block元素一样设置宽和高,并不是真正的块元素。
+
+
2.2 清除float
1 使用 clear 规定元素的哪一侧不允许其他浮动元素。
1 | clear: none | left | right | both |
-
+
- none:默认值,允许两边都有浮动对象; +
- left:不允许左侧有浮动对象; +
- right:不允许右侧有浮动对象; +
- both:两侧不允许有浮动对象。 +
2 利用伪元素
1 | <div class="topDiv clearfix"> |
1 | .clearfix:after { |
2 BFC 块级格式化上下文
将父元素设定为BFC可以消除浮动带来的影响
-
+
- 块级格式化上下文是CSS可视化渲染的一部分。是一个独立的渲染区域,只有block-level box参与,规定了内部block-level box的渲染方式,以及浮动相互之间的影响关系。 +
- BFC有自己的一套内部子元素渲染的规则,不影响外部渲染,也不受外部渲染影响。 +
BFC的区域不会和外部浮动盒子的外边距区域发生叠加(故BFC的区域不会与float的元素区域重叠)。但BFC内部的margin会发生重叠。
+
+BFC在计算高度的时候,内部浮动元素的高度也要计算在内(而position为absolute的元素可以超出它的包含块边界)
+
+以下声明都可以创建BFC
+-
+
- 根元素 +
- float的值不为none; +
- overflow的值不为visible; +
- display的值为inline-block、table-cell、table-caption(table会默认生成一个匿名的table-cell也可以生成BFC); +
- position的值为absolute或fixed; +
+