CSS3-伸缩盒模型
CSS3-伸缩盒模型
2009年,W3C提出了一种新的盒子模型——Flexible Box(伸缩盒模型,又称:弹性盒子)
传统布局:基于传统盒状模型,主要靠:display属性+position属性+float属性
flex布局目前在移动端应用比较广泛,因为传统布局不能很好的呈现在移动设备上
伸缩容器
- display: flex;:将容器变为伸缩容器
- display: inline-flex; :将容器变为伸缩容器的同时,将自己变为行内元素(很少使用)
可以给伸缩容器的父容器配置为伸缩容器,其伸缩容器本身就变成了伸缩项目
伸缩项目
伸缩容器中的子元素自动成为伸缩项目
注:这里只有子元素,其孙子元素和其他后代元素是无法成为伸缩项目的(只有一层级)
无论是哪种元素(块,行内块,行内),一档成为了伸缩项目,全部都会“块状化”
主轴方向
元素是根据主轴的方向排列的
- flex-direction: row; 主轴从左到右
- flex-direction: row-reverse; 主轴从右到左
- flex-direction: column; 主轴从上往下
- flex-direction: column-reverse; 主轴从下到上
主轴的换行方式
在主轴方向上排列的元素默认不允许换行,如果遇到元素超出的部分,就会自动缩小盒子排列
通过flex-wrap属性来调整主轴换行方式
- nowrap:不换行,默认值
- wrap:换行
- wrap-reverse:反转换行
注:CSS3提供了一个复合属性flex-flow,来同时配置主轴方向和主轴的换行方式
主轴的对齐方式
justify-content属性调整主轴的对齐方式
- flex-start:主轴的起始位置
- flex-end:主轴的结束位置
- center:主轴居中对齐
- space-content:项目均匀的分布在一行中,项目之间的距离是项目距离边缘的2倍
- space-between:项目均匀的分布在一行中,项目之间的距离是相等的,项目距离边缘没有距离
- space-evenly:项目均匀的分布在一行中
侧轴的对齐方式
align-items属性调整侧轴的对齐方式,仅适用于一行项目
- flex-start:侧轴的起始位置
- flex-end:侧轴的结束位置
- center:侧轴的居中对齐
- baseline:侧轴的基线对齐
- stretch:侧轴的拉伸对齐(当伸缩项目没有高度的时候,拉伸到伸缩容器的高度),默认值
align-content属性调整侧轴的对齐方式,适用于多行伸缩项目
- flex-start:侧轴的起始位置
- flex-end:侧轴的结束位置
- space-content:项目均匀的分布在一行中,项目之间的距离是项目距离边缘的2倍
- space-between:项目均匀的分布在一行中,项目之间的距离是相等的,项目距离边缘没有距离
- space-evenly:项目均匀的分布在一行中
- stretch:侧轴拉伸对齐,将多行项目拉伸到平均高度,默认值
利用flex布局实现水平居中对齐
/* 方案一 */
.outer{
display: flex;
justify-content: center;
align-items: crenter;
}
/* 方案二 */
.outer{
display: flex;
}
.inner{
margin: autp;
}
基准长度
使用flex-basis设置伸缩项目在主轴上的基准长度
若主轴为横向的,宽失效
若主轴为纵向的,长失效
此属性的默认值是auto,一般而言,我们也不会手动的设定主轴上的基准长度
伸缩
flex-grow定义伸缩项目的放大比例,默认为0,即主轴存在剩余空间,也不放大
- 当所有项目的值都为1时,如果有剩余空间,所有项目平分这些剩余空间
- 当三个伸缩项目的值为1,2,3时,分别瓜分到六分之一,六分之二,六分之三的剩余空间
flex-shrink定义伸缩项目的缩小比例,默认为1,即当伸缩容器的宽度小于伸缩项目时,伸缩容器自动缩小
这个属性在开发时很少使用,直接使用默认值1