这是我参与「第五届青训营 」伴学笔记创作活动的第 3 天
CSS的布局
布局是什么?
是依据元素、内容、兄弟节点和内容等信息进行确定内容大小和位置的算法
布局相关技术
常规流
一个块级元素共由四部分组成:margin、border、padding、content
-
margin:外边距,当前元素与其它兄弟元素之间的距离
-
属性值:
- auto 水平居中
- 百分比,基于父元素
- 像素
-
-
border:元素的边框
- 属性:边框的粗细、边框的样式、边框的颜色
-
padding:元素边框与元素内容之间的距离
- 属性值与margin相同
-
content:元素中的内容部分,由width与height设置宽度与高度
除了content外,margin、border、padding又分为上下左右四部分
margin的collapse
简称:简称外边距合并,当上下两个兄弟元素各自设置了margin,元素上下之间的距离,将会由边距数值大的一方决定,如果相同则取和的一半
collapse的解决方案
1.通过设置border-sizing可以帮助我们解决很多常规流中的布局问题 属性值:
- initial 默认值
- content-box 块级元素的默认属性,块级元素的其他三部分会在content的宽高的基础上增加像素
- border-box 块级元素的四部分会共用content的宽高,比如:content高200px,设置margin-top为50px后,content就剩下了150px
2.通过设置overf可以帮助我们解决很多常规流中的布局问题 属性值:
行级元素与块级元素
-
行级
- 不可以设置宽高
- 常见标签:span、em、strong、cite、code
-
块级
- 可以设置宽高,独占一行
- 常见标签:body、article、div、p、ul、ol、h1~h6
在css中,可以通过设置display控制块级与行级的转换 属性值:
行级排版上下文(IFC)
只包含行级元素的容器会创建一个IFC IFC内的排版规则:
块级排版上下文(BFC)
某些元素会创建一个BFC BFC的特点:
- 根元素
- 浮动、绝对定位、inline-block
- flex子项或grid子项
- overflow不是visible的块级元素
- display:flow-root
BFC内的排版规则:
FlexBox
flex是什么?
-
一种新的排版上下文
-
它可以控制子级元素的
- 摆放流向(上下左右)
- 摆放顺序
- 盒子的宽高
- 水平和垂直方向的对齐
- 是否运行折行
-
通过display:flex;设置
在FlexBox中共分为主轴和侧轴两个方向,可以通过flex-direction设置默认排序顺序 属性:
- row 默认从主轴开始,且主轴从左往右排列
- row-reverse 默认从主轴开始,且主轴从右往左排列
- column 默认从侧轴开始,且侧轴由上至下排列
- column-reverse 默认从侧轴开始,且侧轴由下至上 排列
FlexBox中的其他属性
-
justify-content 设置内部元素在主轴上的水平排列方式
-
属性值:
- flex-start 从左开始
- flex-end 从右开始
- center 居中
- spacing-between 占满两边空间,元素之间均匀排列
- spacing-around 元素两边都有间距且相等
- spacing-evenly 均匀排列
-
-
align-items 设置内部元素在侧轴上的垂直排列方式
-
属性值:
- flex-start 从上开始
- flex-end 从下开始
- center 居中
- stretch 每列占满
- baseline 根据内容进行排列
-
-
align-self 内部元素设置自己垂直排列位置
-
属性值
- flex-start 从上开始
- flex-end 从下开始
-
-
order 设置权重,权重越高越靠后
-
flex-grow 有剩余空间的伸展能力
-
flex-shrink 容器空间不足的伸展能力
-
flex-basis 没有伸展或收缩时的基础长度
-
flex复合用法
GridBox
grid-template-columns/rows
-
作用:为容器划分区域
-
属性值:
- 像素
- 百分比
- auto 剩余空间自适应
- fr 对剩余空间进行份数均分
-
使用方式:
设置每个元素所占区域
浮动
浮动会脱离文档流,在使用时需要清除浮动
-
float
-
属性值
- left 从左至右浮动
- left 从右至左浮动
- both 清除浮动
-
清除浮动的其他方式
定位
position
-
属性值
学习CSS的建议
总结
对于不同的页面,使用不同的布局方式以达到令人满意的效果。