这是我参与8月更文挑战的第9天,活动详情查看:8月更文挑战
Flex布局
使用flex布局之后行内和块都是有大小的
布局原理 弹性布局
任何一个容器都可以指定为flex布局
当父元素设置为flex布局之后,子元素的float/clear/vertical-align会失效
采用flex布局的元素,叫做flex容器,简称容器,他的所有子元素会自动称为容器成员,称为flex项目(flex item)
子容器可以横向排列(默认),也可以纵向排列
常见概念
主轴和侧轴,x轴和y轴 行和列,主轴侧轴是可变化的,flex-drection设置谁是主轴 剩余的就是侧轴,子元素是跟着主轴来排列的
flex布局父项常见属性
flex-drection
flex-drection 设置主轴的方向,实际就是控制子元素的排列,另一个就是侧轴
- row (行)默认从左到右
- row-reverse 从右向左
- column (列) 从上到下
- colunm-reverse 从下到上
justify-content
justify-content 设置主轴上的子元素排列方式,首先要确定好主轴是哪个,这里示例为x为主轴,如果是y为主轴就得反着用
- flex-start 默认从头部开始 如果主轴是x,则从左到右
- flex-end 从尾部开始排列
- center 在主轴居中对齐,如果主轴是x轴侧 水平居中
- space-around 平分剩余空间,每个盒子相当于都在自己那片空间的中间
- space-between 先两边贴边,再平分剩余空间
flex-wrap
设置子元素是否换行,比如说一行放不下了该怎么办
默认flex布局情况下,即使正常来讲父元素放不下子元素了,也会自动给你缩小子元素大小塞上去。因为默认就是放在一条线上,不换行的
默认 no-wrap 不换行
wrap 换行
align-items
align-items 设置侧轴上的子元素排列方式(子项为单行),如何既水平居中又垂直居中,那就是得主轴也居中对齐,侧轴也居中对齐,flex-start,flex-end,center和justify-content里的意思一样,只不过是针对侧轴的。
-
flex-start
-
flex-end
-
center
-
stretch 拉伸,沿着侧轴拉伸 记得得取消子元素的高度
align-content
align-content 设置侧轴上的子元素排列方式(换行,多行),单行下无法使用,会失效
- flex-start
- flex-end
- center
- space-around
- space-between
- stretch,记得得取消子元素的高度
flex-flow
flex-flow 复合属性,相当于同时设置flex-direction和flex-wrap
- flex-flow:column wrap;
- flex-direction:column;
- flex-wrap:wrap;
flex布局子项常见属性
flex:;
定义子项分配剩余空间 子项占有份数,数值越大分配的蛋糕越大
align-self
单独移动一个子项在侧轴的排列方式,可以使某个单个项目和别人的侧轴方式不同
order
order定义子项的排列顺序,数值越小越靠前,默认是0
用flex实现圣杯布局
CSS
/*清除基本样式*/
* {
margin: 0;
padding: 0;
}
body, html {
height: 100%;
}
section {
height: 100%;
display: flex;
flex-direction: column;
justify-content: space-between;
}
.child1 {
height: 100px;
background-color: blueviolet;
}
.child2 {
flex: 1;
display: flex;
background-color: #0dc3c3;
}
.child21 {
width: 100px;
background-color: lightgreen;
}
.child22 {
flex: 1;
background-color: skyblue;
}
.child23 {
width: 100px;
background-color: lightgreen;
}
.child3 {
height: 100px;
background-color: #007fff;
}
HTML
<section>
<div></div>
<div></div>
<div></div>
</section>
先给父元素section设置flex布局,这样子元素自然就变成了flex块。给section设置一个高度900px,
然后给父元素设置flex-direction: column;,代表让子元素class为div1,div2,div3按照竖向排列,分别对应的是头部中间和底部。div1和div3分别代表顶部和底部用height分别设置一个高度,div2相当于中间的内容部分,所以直接设置属性flex:1,意思就是不管父元素多高,div2的高度=父元素section的高度-div1和div3的高度和。
然后给div2再设置display:flex;主轴就是默认的从左到右,依次是div21,div22,div23,div21和div23设置一个固定的宽度,div22设置flex:1占满中间,这就是典型圣杯布局。