水平居中
margin + 定宽
1 | <div class="parent"> |
- 适用定宽
table + margin
1 | <div class="parent"> |
display: table
表现类似block
,但是宽度为内容宽无需设置父元素样式(支持IE8及其以上版本,IE8以下则需要嵌入
<table>
inline-block + text-align
1 | <div class="parent"> |
- 兼容IE6
absolute + margin-left
1 | <div class="parent"> |
固定宽度
相比
transform
,兼容性更好
absolute + transform
1 | <div class="parent"> |
绝对定位脱离文档流,不会对后续布局造成影响
transform
为CSS3属性,存在兼容问题
flex + justify-content
1 | <div class="parent"> |
只需要设置父节点
flex
有兼容问题
垂直居中
table-cell + vertical-align
1 | <div class="parent"> |
- 兼容性好,IE8以下版本需要调整页面结构
table
absolute + transform
1 | <div class="parent"> |
绝对定位脱离文档流,但绝对定位元素师唯一的元素则父元素会失去高度
transform
有兼容问题同水平居中也可以使用
margin-top实现
flex + align-items
1 | <div class="parent"> |
flex
有兼容问题
top + margin(-height / 2)
1 | <div class="content"> Content goes here</div> |
绝对定位且固定高度
若content太多则会出现溢出,
overflow:auto
则会出现滚动条虽然适用所有浏览器,但是假如没有足够的空间,content则会消失
height:50% + margin-bottom: -contentheight
1 | <div id="floater"> |
适用所有浏览器
没有足够空间时(例如:窗口缩小) content 不会被截断,滚动条出现
margin:auto + top & bottom
1 | <div id="content"> Content here</div> |
同样若空间小,则 content 会消失
存在 IE 不兼容的问题
line-height
1 | <div id="content"> Content here</div> |
只对文本有效
多行时,断词比较糟糕
水平垂直居中
absolute + transform
1 | <div class="parent"> |
绝对定位脱离文档流
transform
有兼容问题
inline-block + text-align + table-cell + vertical-align
1 | <div class="parent"> |
- 兼容好
flex + justify-content + align-items
1 | <div class="parent"> |
只需要设置父节点
flex
有兼容问题
一列定宽,一列自适应
float + margin
1 | <div class="parent"> |
- IE 6 有3像素的BUG,解决可以在
.left
加入margin-left:-3px
,当然也有其他的解决方法,如下:
1 | <div class="parent"> |
此方法不会存在IE 6中3像素的问题,但.left
不可选择,需要设置.left {position: relation}
来提高层级。
float + overflow
1 | <div class="parent"> |
设置overflow: hidden
会触发BFC块级格式上下文,就是无论在BFC里面做什么操作,外面都不会受影响。但是此方法不被IE 6支持。
table
1 | <div class="paren"> |
table
的显示特性为每列的单元格宽度和一定等与表格宽度。 table-layout: fixed
可加速渲染,也是设定布局优先。table-cell
中不可以设置 margin
但是可以通过 padding
来设置间距
flex
1 | <div class="parent"> |
- 兼容问题
等分布局
float
1 | <div class="parent"> |
- 兼容IE 8 以上版本
flex
1 | <div class="parent"> |
table
1 | <div class="parent-fix"> |
等高布局
table
1 | <div class="parent"> |
table
的特性为每列等宽,每行等高可以用于解决此需求
flex
1 | <div class="parent"> |
注意这里实际上使用了align-items: stretch
,flex 默认的 align-items
的值为 stretch
float
1 | <div class="parent"> |
- 此方法只有背景显示高度相等,左右真实高度其实不想等,但兼容性较好。
参考资料: