Correcting teacher:PHPz
Correction status:qualified
Teacher's comments:下次记得在“我的课程作业”中提交作业
flex:Flexible Box 模型,通常被称为 flexbox,是一种一维的布局模型。它给 flexbox 的子元素之间提供了强大的空间分布和对齐能力。
flexbox 是一种一维的布局,是因为一个 flexbox 一次只能处理一个维度上的元素布局,一行或者一列。作为对比的是另外一个二维布局 CSS Grid Layout,可以同时处理行和列上的布局。
flex布局常用属性,分为容器属性和项目属性:
display:flex
或display:inline-flex
的元素;概念1:主轴:主轴由 flex-direction 定义,交叉轴垂直于它,布局的方向有行和列,例如
flex-direction:row
,那么row
就是主轴,垂直于row
的column
就是交叉轴。
概念2:交叉轴:垂直于flex-direction
属性值定义的主轴的轴就是交叉轴概念3:起始线、终止线:
start/end
。主轴是row
的情况下,起始线是容器的最左边,终止线是容器的最右边;主轴是column
的情况下,默认,起始线是容器的顶部,终止线是容器的底部。
display:flex
:块容器dispaly:inline-flex
:行内容器flex-direction:row/column/row-reverse/column-reverse
flex:wrap/nowrap
重点记忆一:
flex-flow
flex-direction
和flex-wrap
可以由一个属性flex-flow
代替row
,不换行,代码表示为flex-flow:row nowrap
;row
:无论是否设置宽高,都能看到效果;column
:只有设置容器和项目的宽高才能看到效果justify-content:stretch
:所有项目元素沿主轴自动拉伸排列justify-content:flex-start
:所有项目元素沿主轴起始线排列(默认值)justify-content:flex-end
:所有项目元素沿主轴终止排列justify-content:center
:所有项目元素排列在主轴中间位置justify-content:space-around
:每个项目元素的左右空间相等。justify-content:space-between
:项目元素排列好之后的剩余空间拿出来,项目在容器的两端对齐justify-content:evenly
:容器的剩余空间平均分配到元素之间,所以所有元素之间间隔相等align-items
属性设置所有项目元素在交叉轴上的对齐方式,其属性值主要有4个。align-itemes
align-items:stretch
align-items:flex-start
:(默认值)align-items:flex-end
align-items:center
为了与
grid
布局同步记忆,我们可以:将上述5中的
justify-content
可用place-content
来代替;
将上述5中的align-items
可用place-items
来代替;
通过以上分析,我们可以将flex布局中主要的容器属性归纳如下
display
: 容器类型(块或行内)flex-flow
: 主轴方向与是否换行place-content
: 项目在”主轴”上的排列方式place-items
: 项目在”交叉轴”上的排列方式为了更好地控制单个flex项目
元素的排列方式,有5个属性可以作用于它们:
min-width > || max-width > width > Content Size
.flex
代替,主要有以下几种形式flex:0 1 auto
默认值,也就是部分响应;flex:1 1 auto
完全响应;flex:0 0 auto
完全不响应align-items
或place-items
是设置全部的,而place-self
是局部也就是单个项目元素的设置order
属性主要用来设置单个项目元素的显示顺序,数值越大越靠后排列;**我们可以将flex项目元素的属性概括如下
flex
: 项目在”主轴”上的缩放比例与宽度place-self
某项目在”交叉轴”上的排列方式order
: 项目在”主轴”上的排列顺序
<!DOCTYPE html>
<html lang="zh-CN">
<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>主轴与交叉轴的互换:align-contents与align-items</title>
<style>
.box {
display:flex;
flex-direction:row-reverse;
background-color: lightblue;
width:500px;
height:300px;
/* 1.项目的主轴为row时 */
/* flex-flow:row nowrap; */
/* 所有项目元素起始线对齐 */
/* justify-content:start; */
/* 所有项目元素终止线对齐 */
/* justify-content:end; */
/* 所有项目主轴线中间对齐 */
/* justify-content:center; */
/* 两端对齐 */
/* justify-content:space-between; */
/* 每个元素左右分配同样的空间 */
/* justify-content:space-around; */
/* 每个间距左右空间大小相等,间距相等 */
/* justify-content:space-evenly; */
/* 2.项目的主轴为column时 */
flex-flow:row nowrap;
/* 所有项目元素起始线对齐 */
justify-content:start;
/* 所有项目元素终止线对齐 */
justify-content:end;
/* 所有项目主轴线中间对齐 */
justify-content:center;
/* 两端对齐 */
justify-content:space-between;
/* 每个元素左右分配同样的空间 */
justify-content:space-around;
/* 每个间距左右空间大小相等,间距相等 */
justify-content:space-evenly;
/* 3.项目在交叉轴上的对齐 */
align-items:start;
align-items:end;
align-items:center;
/* 交叉轴上的这三个属性不能用,无论交叉轴是横向的row还是纵向的column */
/* align-items:space-between;
align-items:space-around;
align-items:space-evenly; */
}
.one,.two,.three {
width:100px;
height:100px;
background-color: lightgreen;
border:1px solid #000;
/* flex-grow:1; */
flex-shrink:1;
flex-basis:1;
}
.three {
order:2;
place-self:center;
}
.two {
order:1;
}
.one {
order:3;
place-self:end;
place-self:start;
place-self:center;
}
</style>
</head>
<body>
<div class="box">
<div class="one">One</div>
<div class="two">Two</div>
<div class="three">Three
<br>has
<br>extra
<br>text
</div>
</div>
</body>
</html>