Flex布局
笔记来源:尚硅谷 Web 前端 HTML5&CSS3 初学者零基础入门全套完整版文章目录弹性盒简介1、基本概念弹性盒弹性容器弹性元素2、弹性容器的属性主轴属性排列方式:flex-direction自动换行:flext-wrap简写属性:flex-flow空白空间:justify-content辅轴属性辅轴对齐:align-items空白空间:align-content3、弹性元素的属性伸展
文章目录
弹性盒简介
1、基本概念
传统的布局方式:浮动、margin、vertical-align.padding…技术来完成页面
- 为了元素同行显示:浮动――影响:清除浮动
- 各种元素的对齐问题
弹性布局: css3提出的一个新的布局概念,以弹性容器为核心来进行页面设计,可以快捷、响应式的完成页面布局
弹性盒
flex
(弹性盒、伸缩盒)
- 是
css
中的又一种布局手段,它主要用来代替浮动来完成页面的布局 flex
可以使元素具有弹性,让元素可以跟随页面的大小的改变而改变
弹性容器
要使用弹性盒,必须先将一个元素设置为弹性容器
我们通过display
来设置弹性容器
display:flex
设置为块级弹性容器 (独占一行)display:inline-flex
设置为行内的弹性容器 (不独占一行)
/* 设置弹性容器 */
display: flex;
弹性容器特点
- 弹性容器里的子元素会同行显示
- 弹性容器里的子元素默认不会换行
- 弹性容器里的子元素会被修改为块级元素,并且同行显示,
- 如果子元素没有设置宽高,宽度由内容决定,高度默认沾满整个弹性容器
- 弹性容器只对直接子元素有效果,对孙子元素没有效果
- 弹性容器对兄弟元素没有影响,弹性容器在兄弟眼里就是一个普通的块级元素
弹性元素
弹性容器的直接子元素是弹性元素(弹性项)
弹性元素也可以同时是弹性容器
2、弹性容器的属性
主轴与侧轴
- 主轴:弹性元素的排列方向称为主轴
- 侧轴:与主轴垂直方向的称为侧轴
主轴属性
排列方式:flex-direction
flex-direction
指定弹性容器中弹性元素的排列方式
-
row
默认值,弹性元素在容器中水平排列(主轴自左向右) -
row-reverse
弹性元素在容器中反向水平排列(主轴自右向左) -
column
弹性元素纵向排列(主轴自上向下) -
column-reverse
弹性元素反向纵向排列(主轴自下向上) -
示例:column作为值
/* 设置弹性元素排列方式 */ flex-direction: column;
自动换行:flex-wrap
flex-wrap
设置弹性元素在一行容纳不下时,是否在弹性容器中自动换行
nowrap
默认值,元素不会自动换行wrap
元素沿着辅轴方向自动换行wrap-reverse
元素沿着辅轴反方向换行
/* 设置弹性元素排列方式 */
flex-direction: row;
/* 设置自动换行 */
flex-wrap: wrap;
简写属性:flex-flow
flex-flow
是wrap
和direction
的简写属性
/* 简写属性 */
flex-flow: row wrap;
空白空间:justify-content
justify-content
如何分配主轴上的空白空间(主轴上的元素如何排列)
(前提是主轴上还有空余空间,注意这与 弹性元素的伸展系数(默认是0) 有关噢,换句话说,如果有弹性元素设置了伸展,那么就会把空余空间都给占了的话,那就谈不上分配空余空间了)
取值 | 分配空白空间 |
---|---|
flex-start | 元素沿着主轴起边排列 |
flex-end | 元素沿着主轴终边排列 |
center | 元素居中排列 |
space-around | 空白分布到元素两侧(绝对均匀分布) |
space-between | 空白均匀分布到元素间(两侧贴边) |
space-evenly | 空白分布到元素的单侧(均匀分布) |
flex-start
元素沿着主轴起边排列
flex-end
元素沿着主轴终边排列
center
元素居中排列
space-around
空白分布到元素两侧
space-between
空白均匀分布到元素间
space-evenly
空白分布到元素的单侧
辅轴属性
辅轴对齐:align-items
align-items
元素在辅轴上如何对齐,设置的是弹性元素之间的对齐关系。换句话说:处理弹性项目所在的那一行的富余空间。
(align-items属性适用于所有的flex容器,它是用来设置每个flex元素在交叉轴上的默认对齐方式。align-items和align-content有相同的功能,不过 不同点是它是用来让每一个单行的容器居中,而不是让整个容器居中。)
取值 | 弹性元素在辅轴上的对齐方式 |
---|---|
stretch | 默认值,将元素的长度设置为相同的值(前提是元素没有设置高度) |
flex-start | 元素不会拉伸,沿着辅轴起边对齐 |
flex-end | 元素不会拉伸,沿着辅轴终边对齐 |
center | 居中对齐 |
baseline | 基线对齐 |
stretch
默认值,将元素的长度设置为相同的值
flex-start
元素不会拉伸,沿着辅轴起边对齐
flex-end
沿着辅轴的终边对齐
center
居中对齐
baseline
基线对齐
空白空间:align-content
align-content
如何分配辅轴上的空余空间(前提是辅轴上还有空余空间)。
换句话说:处理弹性项目在整个容器里侧轴的富余空间(只针对多行元素)。
(align-content属性只适用于多行的flex容器,并且当交叉轴上有多余空间使flex容器内的flex线对齐。所以对于只有一行的flex元素,align-content是没有效果的)
取值 | 分配空白空间 |
---|---|
flex-start | 元素沿着辅轴起边排列 |
flex-end | 元素沿着辅轴终边排列 |
center | 元素居中排列 |
space-around | 空白分布到元素两侧(绝对均匀分布) |
space-between | 空白均匀分布到元素间(两侧贴边) |
space-evenly | 空白分布到元素的单侧(均匀分布) |
flex-start
元素沿着辅轴起边排列
flex-end
元素沿着辅轴终边排列
center
元素居中排列
space-around
空白分布到元素两侧
space-between
空白均匀分布到元素间
space-evenly
空白分布到元素的单侧
3、弹性元素的属性
伸展系数:flex-grow
flex-grow
指定弹性元素的伸展系数,默认值为 0
- 当父元素有多余空间的时,子元素如何伸展
- 父元素的剩余空间,会按照比例进行分配
(父元素有剩余空间,才会按照flex-grow的比例进行分配剩余空间;如果没有剩余空间,此属性设置了没任何效果)
li:nth-child(1) {
background-color: #bfa;
flex-grow: 1;
}
li:nth-child(2) {
background-color: red;
flex-grow: 2;
}
li:nth-child(3) {
background-color: green;
flex-grow: 3;
}
缩减系数:flex-shrink
flex-shrink
指定弹性元素的收缩系数,默认值为 1 (0表示不收缩)
当弹性容器宽度不够时,去设置每一个弹性项目的收缩量。
- 当父元素中的空间不足以容纳所有的子元素时,如何对子元素进行收缩,
li:nth-child(1) {
background-color: #bfa;
flex-shrink: 1;
}
li:nth-child(2) {
background-color: red;
flex-shrink: 2;
}
li:nth-child(3) {
background-color: green;
flex-shrink: 3;
}
基础长度:flex-basis
flex-basis
指定的是元素在主轴上的基础长度(设置弹性项目的默认宽度)
它的初始值是 auto,此时浏览器会检查元素是否设置了 width 属性值。如果有,则使用 width 的值作为 flex-basis 的值;如果没有,则用元素内容自身的大小。如果 flex-basis 的值不是 auto,width 属性会被忽略。
- 如果主轴是横向的,则该值指定的就是元素的宽度
- 如果主轴是纵向的,则该值指定的就是元素的高度
- 默认值是
auto
,表示参考元素自身的高度或宽度 - 如果传递了一个具体的数值,则以该值为准(优先级:flex-basis > width)
li:nth-child(1) {
background-color: #bfa;
flex-basis: 200px;
}
简写属性:flex
flex
可以设置弹性元素所有的三个样式 flex: 增长 缩减 基础
initial
:flex: 0 1 auto
auto
:flex: 1 1 auto
none
:flex: 0 0 auto
弹性元素没有弹性
排列顺序:order
order
决定弹性元素的排列顺序(order数字越大,顺序越靠后,默认值为0,并且可以是负数)
li:nth-child(1) {
background-color: #bfa;
order: 2;
}
li:nth-child(2) {
background-color: red;
order: 3;
}
li:nth-child(3) {
background-color: green;
order: 1;
}
覆盖辅轴:align-self
align-self
用来覆盖当前弹性元素上的align-items
(相当于可单独指定 弹性元素 的 辅轴对齐 方式)
li:nth-child(1) {
background-color: #bfa;
align-self: flex-end;
}
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传
* 示例 - 弹性居中
利用弹性盒对元素进行水平垂直双方向居中
justify-content: center;
align-items: center;
更多推荐
所有评论(0)