浮动
元素浮动就像上浮到上一图层
假设块元素A是浮动的,如果A在DOM中的上一元素是普通流中元素,那么A的顶部和上一元素的底部对齐,也即A的相对垂直位置不变;如果A的上一元素也是浮动的,那么A会跟在上一元素的后面,一行放不下时放到下一行。
清除浮动时要记住:clear属性只能影响使用clear属性的元素本身
块元素在普通流中竖向排列,在浮动之后可理解为横向排列,清除浮动可理解为打破横向排列
浮动元素的原本目的是实现文本环绕,它没有高度不在普通流中,但表现得就像是多行的inline-blocks,占着宽度使文字和其他inline-block环绕。
闭合浮动
使浮动元素的父元素像只包含普通流那样高度表现正常。方法有两种:
- 给父元素添加
.clearfix
类,在.clearfix:after
伪元素上设置clear属性。这种方法更好
1 | .clearfix:after { |
clear属性表明该元素的哪一边不能有浮动元素
原理是:在元素的margin-top之上添加额外的clearance间隔,使元素盒子最终落在浮动元素的下方,并由这clearance撑起了父元素的高度。
上述方法第一个浮动元素的的top-margin,会越过父元素的border,与父元素前一元素的bottom-margin重合。要像下面的BFC方法那样使父元素表现为一个独立的盒子,可用这个版本:
1 | .clearfix:before, |
- 触发父元素的BFC来闭合浮动,比如设置父元素的
overflow:hidden
。这种方法总有副作用
BFC(Block Formatting Context
,css3中叫flow root
),就是个独立的盒子,BFC里面元素的布局不会影响外面的元素,而BFC自身是普通流的一部分。触发BFC可以通过设置:
- overflow: hidden|scroll|auto
- float:left|right 或 position: absolute|fixed
- display: inline-block|inline-table|tabel-cell|table-caption
BFC是个独立的盒子,具体包括:
- margin重叠不能跨越BFC内外
- float元素不能跨越BFC内外
定位
只有三种定位:普通流、浮动、绝对定位,浮动或绝对定位的元素都会脱离普通流
absolute定位的基准是最近的positioned祖先(position默认值static,非static值都认为元素已positioned)。所以一般在设置元素posotion:absolute
前,先找个祖先元素设置position:relative
。
relative定位不影响元素在普通流中占据的位置,相对于正常位置定位显示。
fixed定位是特殊的absolute定位,相对于浏览器视窗定位
行内元素
line-height
指文本行基线之间的距离
行框的构造:
- 非替换元素的
font-size
决定内容区高度,line-height
值减去font-size
值就是行间距,行间距的一半分别加到内容区的顶部和底部构成行内框;替换元素(如<img>
、<input>
等)的 height/padding/border/margin都加起来构成行内框高度 - 将各元素的基线与行基线对齐,替换元素的基线在其
margin-bottom
下边缘 - 指定了
vertical-align
的元素对其行内框作垂直偏移 - 最高行内框顶端和最低行内框底端之间构成行框
替换元素的padding/border/margin都起作用,影响行内框高,但line-height值不变(在垂直对齐时有用)。对非替换元素,左右方向的padding/border/margin起作用;上下padding/border尽管视觉上有影响,但不影响行内框的高度(=内容区高+行间距),不影响行框的构造;上下margin不起作用。
行内元素基本上会作为一行放置,然后分成多个部分。可以把行内元素想成是一个纸片,外围有一些塑料边。在多行上显示行内元素就像是把一个大纸片剪成一些小纸片,每个小纸片上不会增加额外的塑料边,所以看上去只是原来纸片(行内元素)的最前和最后两端出现塑料边。
inline-block
作为替换元素放在行中,默认是基线对齐的。用来布局时要用vertical-align:top|bottom|middle
显式对齐一下,否则内容不同将无法对齐:无文字时基线是容器的margin-bottom
下边缘,有文字时基线是最后一行文字的基线。
References
- CSS浮动(float,clear)通俗讲解
- Understanding the Humble Clearfix
- 学习css布局:position
- 这可能是史上最全的CSS自适应布局总结教程
- 《CSS权威指南(第3版)》 by Meyer