最近,在复习flex的内容,看了coderwhy老师的flex讲解豁然开朗,于是,就将它整理成一个笔记来记录学习成果,方便日后查阅。
Flex布局(Flexible布局,弹性布局),一维布局模型。目前特别在移动端用的最多,目前PC端也使用越来越多了。
将一个元素设置为display:flex;flex元素会变成一个flex容器。
这里有一个设置为Flex布局的案例,代码如下所示:
DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<meta http-equiv="X-UA-Compatible" content="IE=edge" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>Documenttitle>
<style>
/* Flex容器 */
.container {
width: 500px;
height: 400px;
background-color: orange;
display: flex;
}
/* Flex项目 */
.item {
width: 100px;
height: 100px;
text-align: center;
color: white;
line-height: 100px;
}
.item1 {
background-color: red;
}
.item2 {
background-color: #0f0;
}
.item3 {
background-color: rgb(0, 38, 255);
}
style>
head>
<body>
<div class="container">
<div class="item item1">item1div>
<div class="item item2">item2div>
<div class="item item3">item3div>
div>
body>
html>
- flex-direction 决定主轴的方向
- justify-content 决定flex items在主轴上的对齐方式
- align-items 决定flex items在交叉轴上的对齐方式
- flex-wrap 决定了flex container是单行还是多行
- flex-flow flex-direction与flex-wrap的缩写属性
- align-content 决定了多行flex items 在cross axis交叉轴上的对齐方式
1.flex-direction属性:决定主轴的方向(即项目的排列方向)。它有4个取值:
row(默认值)、row-reverse、column、column-reverse。
设置 flex-direction: row;
设置flex-direction: row-reverse;
设置flex-direction: column;
设置flex-direction: column-reverse;
2.justify-content属性决定了flex items在主轴main axis上的对齐方式。(水平对齐的方式)
flex-start(默认值):左对齐,与main start 对齐
flex-end:右对齐
center: 居中
space-between:两端对齐,项目之间的间隔都相等。
Space-evenly:flex items之间的间距相等,flex items与main start、main end之间的距离等于flex items之间的距离。
space-around:每个项目两侧的间隔相等。所以,项目之间的间隔比项目与边框的间隔大一倍。
它可能取5个值,具体对齐方式与轴的方向有关,下面假设主轴为从左到右。
/* Flex容器 */
.container {
width: 500px;
height: 400px;
background-color: orange;
/* 开启Flex布局 */
display: flex;
/*
flex-direction 绝对主轴的方向
row:默认值,主轴为水平方向,起点在左端。
*/
flex-direction: row;
justify-content: flex-start;
/* justify-content: flex-end; */
/* justify-content: center; */
/* justify-content: space-between; */
/* justify-content: space-around; */
}
/* Flex项目 */
.item {
width: 100px;
height: 100px;
text-align: center;
color: white;
line-height: 100px;
}
① flex-start默认值:左对齐 设置 justify-content: flex-start;
② flex-end:右对齐 设置 justify-content: flex-end;
③ Center:居中对齐 设置 justify-content: center;
④ Space-between:两端对齐,项目之间的间隔都相等。 设置 justify-content: space-between;
⑤ Space-evenly:flex items之间的间距相等,flex items与main start、main end之间的距离等于flex items之间的距离。 设置 justify-content: space-evenly;
⑥ Space-around:每个项目两侧的间隔相等。所以,项目之间的间隔比项目与边框的间隔大一倍。 设置 justify-content: space-around;
flex items之间的间距相等,flex items与main start、main end之间的距离是flex items之间距离的一半。
3. align-items 项目在交叉轴的对齐方式
/* Flex容器 */
.container {
width: 500px;
height: 400px;
background-color: orange;
/* 开启Flex布局 */
display: flex;
align-items: flex-start;
}
/* Flex项目 */
.item {
width: 100px;
height: 100px;
text-align: center;
color: white;
/* line-height: 100px; */
}
.item1 {
background-color: red;
height: 60px;
}
.item2 {
background-color: #0f0;
height: 150px;
}
.item3 {
background-color: rgb(0, 38, 255);
height: 120px;
}
有高度的情况下,flex-end是底部对齐(交叉轴的终点)对齐;align-items: flex-end;
有高度的情况下,center是中心点对齐;align-items: center;
有高度的情况下,baseline是flex items的第一行文字的基线对齐;align-items: baseline;
4. flex-wrap 决定了flex container是单行还是多行。
DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<meta http-equiv="X-UA-Compatible" content="IE=edge" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>Documenttitle>
<style>
/* Flex容器 */
.container {
width: 550px;
height: 400px;
background-color: orange;
/* 开启Flex布局 */
display: flex;
/* 不换行,默认 */
/* flex-wrap: nowrap; */
/* 换行 */
/* flex-wrap: wrap; */
}
/* Flex项目 */
.item {
width: 100px;
height: 100px;
text-align: center;
color: white;
/* line-height: 100px; */
}
.item1 {
background-color: red;
/* height: 60px; */
}
.item2 {
background-color: #0f0;
/* height: 150px; */
}
.item3 {
background-color: rgb(0, 38, 255);
/* height: 120px; */
}
style>
head>
<body>
<div class="container">
<div class="item item1">item1div>
<div class="item item2">item2div>
<div class="item item3">item3div>
<div class="item item1">item4div>
<div class="item item2">item5div>
<div class="item item3">item6div>
<div class="item item1">item7div>
<div class="item item2">item8div>
<div class="item item3">item9div>
div>
body>
html>
① 默认是收缩的,所有的flex items 都会在同一行显示(收缩显示)。flex-wrap: nowrap;
② Wrap:换行。flex-wrap: wrap;
③ Wrap-reverse(用的很少!) flex-wrap: wrap-reverse;
5. flex-flow
flex-flow属性是flex-direction属性和flex-wrap属性的简写形式,默认值为row nowrap。
6. align-content
align-content决定了多行flex items 在cross axis交叉轴上的对齐方式,用法与justify-content类似。如果项目只有一根轴线,该属性不起作用。
stretch用得很少,了解即可。
flex-start:从交叉轴上依次排布多行,两行会紧挨着。align-content: flex-start;
align-content: flex-end;
align-content: center;
align-content: space-between;
align-content: space-around;
- order
- align-self
- flex-grow
- flex-shrink
- flex-basis
- flex
.item1 {
background-color: #f00;
order: 10;
}
.item2 {
background-color: #0f0;
order: 6;
}
.item3 {
background-color: #00f;
order: 100;
}
可以看到item2在最前面,因为它的order数值最小。
2.align-self:flex项目的对齐方式(auto|flex-start|flex-end|center|baseline|stretch) 默认值为auto,表示继承父元素的align-items属性。
它是给flex项目设置的,允许单个项目有与其他项目不一样的对齐方式,可覆盖align-items属性。
这里,父级的align-items是center的,设置为auto
5.flex-basis:主轴排列为宽度,交叉轴排列为宽度,设置px,默认值是auto。(就是设置宽度)
根据它作为可用空间留下的空间来定义该项目的大小 不常用。
flex:综合上面三个样式。默认值为0 1 auto,设三个值,分别是flex-grow, flex-shrink, flex-basis,由于后面两个不常用,所以,常用的写法为:flex:1。
flex属性的简写值:flex-grow, flex-shrink, flex-basis。
1.利用flex布局:
将右侧设置flex:1即可。
2.利用grid布局:
还是能实现左侧固定,右侧自适应的两栏布局。