本文探讨常用的css布局各种实现方式,其中float
、position
的实现方式兼容性较好,flex
、grid
兼容性较差甚至各种浏览器有不同的语法,可以通过caniuse搜索查看。
左右布局
按比例自适应布局
按比例自适应布局很少用得到,下面给出的代码都是等比例分两列的,多列不同比例的布局也是使用同样的方法。
- 使用float实现
使用float配合百分比宽度
- 使用绝对定位实现
使用绝对定位
left
、bottom
、top
、right
定位
- 使用flex实现
flex项目设置
flex-grow
在flex容器中自适应宽度
- 使用grid实现
定义grid为一行两列
1fr
即可
左固定宽度右自适应布局
左侧固定宽度是经常使用的布局方式,下面给出的代码都是左侧固定,右侧同理。
- 使用float实现
左侧浮动使用
width
设置固定宽度,右侧不设置浮动且不清除浮动便会与左侧同行,此时使用margin-left
空开左侧的距离即可。
- 使用绝对定位实现
使用绝对定位
left
、bottom
、top
、right
定位,左侧不设置right
使用width
固定宽度
- 使用flex实现
flex项目设置
flex-grow
在flex容器中自适应宽度,如果设置宽度,则不设宽度的均分剩余宽度
- 使用grid实现
定义grid为一行两列分别为
50px`
1fr`即可
左中右布局
按比例自适应布局
左中右按比例自适应布局很少用得到,其原理与左右布局相同,就不给出代码演示了。
左右固定中自适应布局
左右固定经常使用,下面是代码实现方式。
- 使用float实现
左侧左浮动,右侧右浮动,中间不设置浮动且不清除浮动即可,然后设置左右
margin
避开左右侧内容。一定要注意在HTML中middle要在left和right的后面,否则将挤掉right的空间。
- 使用绝对定位实现
使用绝对定位
left
、bottom
、top
、right
定位,左右使用width
设置宽度
- 使用flex实现
flex项目设置
flex-grow
在flex容器中自适应宽度,左右侧设置width
中间设置flex-grow
即可
- 使用grid实现
定义grid为一行三列
50px 1fr 50px
即可,HTML中必须按顺序写,否则需要在css中设置占用的格子
居中
居中非常非常非常常用,也是面试中的必问题,一定要掌握好。
水平居中
- 通过text-align实现
行内元素只需要设置text-algin即可,非行内元素可以通过display转换为行内元素,此方法可以多个元素居中
- 通过margin实现
块级元素只需要设置
margin: 0 auto
, 此方法很常用但只可以居中一个元素
- 通过绝对定位实现
任何种类的元素都可以,通过绝对定位与
left:50%
,如果是固定宽度的话使用margin负值,如果不固定宽度使用transform:translateX(-50%)即可
- 通过flex实现
可以但没有必要,多个块级元素可以使用,不过一般都通过嵌套实现
- 通过grid实现
同上,可以但没必要,而且只可以居中一个元素,多个还需要嵌套
垂直居中
- 通过line-height实现
行内元素只需要设置line-height即可,非行内元素可以通过display转换为行内元素,一定要将父元素的font-size设为0,否则因为不同字体baseline不同的原因可能会跑偏,可以居中多个元素
- 通过绝对定位实现
任何种类的元素都可以,通过绝对定位与
top:50%
,如果是固定高度的话使用margin负值,如果不固定高度使用transform:translateY(-50%)即可,只可以居中一个元素
- 通过table实现
table中的行内元素很容易设置居中,多行也可以,不过需要多嵌套一层table-cell
- 通过flex实现
非常好用,只需要设置父元素
align-items: center
即可,如果多行还可以通过aligin-content: center
居中
- 通过grid实现
不太推荐,适用于单列或多列元素的居中,没有flex灵活
水平垂直都居中
通过水平居中和垂直居中的组合可以实现完全居中,以下各情况都是通过前面提到的方法组合而成,就不给代码演示了。
- line-height与text-align实现
内联元素只需要同时使用line-height垂直居中和text-align水平居中即可,适用于单行多个元素
- text-align与table实现
不同于上面的第一种,此种方法可以行内元素多行也保持居中
- margin与line-height实现
inline-block可以通过margin水平居中和line-height垂直居中组合,只适用于一个元素的情况,不推荐使用
- 绝对定位实现
没什么好说的,垂直水平都用绝对定位居中就好了,只适用于一个任何种类元素
- flex实现
同上,最灵活的方式居中,可以多个元素甚至可以多行
- grid实现
不推荐使用,垂直水平都用grid居中就好了,但只能一个元素居中,兼容性又差
CSS小技巧
其他的多种小技巧可以通过css-tricks搜索
总结
一种布局是可以通过多种方式实现的,每种布局方式都有各自的优点与缺点,flex、grid虽然简洁好用但兼容性较差适合较晚起步的移动端使用,行内块和绝对定位兼容性好但相对麻烦,居中时有单个元素、多个元素甚至多行的需求可以使用相对简单的方式来解决,较老的平台为了兼容性问题则可以使用嵌套的形式来布局。
本文链接:CSS常用布局
版权声明:本文章采用CC BY-NC-SA 3.0 CN许可协议进行许可。转载请注明出处!