Correcting teacher:天蓬老师
Correction status:qualified
Teacher's comments:
a.任何元素都可以通过添加`display:flex`属性,转为弹性盒元素
b.转为flex元素后,它的内部的‘子元素’就支持flex布局了
c.容器中的项目会自动转为“行内块元素”(不管之前是什么类型的。)
a.容器:具有`display:flex`属性的元素
b.项目:flex容器的子元素
c.主轴:项目排列的轴线
d.交叉轴:与主轴垂直的轴线
序号 | 属性 | 描述 |
---|---|---|
1 | flex-flow |
主轴方向与换行方式 |
2 | justify-content |
项目在主轴上的对齐方式 |
3 | align-item |
项目在交叉中上的对齐方式 |
4 | align-content |
项目在多行容器中的对其方式 |
序号 | 属性 | 描述 |
---|---|---|
1 | flex |
项目的缩放比例与基准宽度 |
2 | align-self |
单个项目在交叉轴上的对其方式 |
3 | order |
项目在主轴上的排列顺序 |
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>初识flex(常用属性的介绍)PS:附三种实现水平和垂直居中的方式</title>
<style>
/* 将flex容器与项目的常用属性全部进行实例演示,并理解属性的常用值的显示效果 */
*{
margin: 0;
padding: 0;
box-sizing: border-box;
}
/* 附:三种实现水平和垂直居中的方式 */
/* 1.传统方式实现水平和垂直居中 */
/*
header{
height: 3em;
background-color: cadetblue;
}
footer{
height: 2em;
background-color: darkkhaki;
}
.container{
position: relative;
min-height: 40em;
margin: 0.5em 0;
background-color: cornsilk;
}
aside{
width: 15em;
min-height: inherit;
background-color: cyan;
}
.container aside:first-of-type{
position: absolute;
left: 0;
}
.container aside:last-of-type{
position: absolute;
right: 0;
}
.container main{
min-height: inherit;
position: absolute;
left: 15.5em;
right: 15.5em;
background-color: darkseagreen;
} */
/* 2.用flex快速实现水平和垂直居中 */
/* body中除了container这个类,设置全部元素的属性 */
/* body *:not(.container){
background-color: khaki;
}
header,footer{
height: 8vh;
}
.container{
height: calc(84vh - 2em);
display: flex;
margin: 1em 0;
}
aside{
min-width: 15em;
}
main{
min-width: calc(100% - 30em - 1em);
margin: 0 0.5em;
} */
/* 3.用grid快速实现水平和垂直居中 */
/* body{
height: 100vh;
display: grid;
整个板块为三行三列
grid-template-rows: 8vh 1fr 8vh;行,高度:上面8vh 中间自适应 下面8vh
grid-template-columns: 15em 1fr 15em;列,宽度:左侧15em 中间自适应 右侧15em
gap:0.5em;间隙
}
页眉和页脚应该是通栏的,所以应该设置占据三列
header,footer{
grid-column: span 3;
}
body > *{
background-color: khaki;
}
grid虽然强大无比 很简洁,但是不代表到处都要用到它,它更适合整天(宏观)布局,而flex更适合细节处理。 */
.container{
display: flex;
height: 15em;
}
.container .item{
width: 5em;
/* height: 3em; */
}
/* 工作中会存在大量的flex容器的嵌套布局 */
.container > .item:nth-child(9){
display: flex;
}
.container > .item:nth-child(9) > div{
background-color: lawngreen;
border: 1px solid #000;
}
.container{
/* 1.弹性项目在主轴的排列方式 */
/* a.单行容器:当一行放不下的时候会压缩到内容宽度,不会换行 */
/* flex-direction: row;主轴方向(默认为行模式) */
/* flex-wrap: nowrap;项目的换行(默认不换行) */
/* flex-flow: row nowrap; 上面两个的简写*/
/* b.多行容器:一行显示不下的时候,允许沿着交叉轴换行显示 */
/* flex-flow: row wrap; 默认为行显示*/
/* flex-flow: column nowrap; 修改为列显示、不换行*/
/* flex-flow: column wrap;列显示、换行 */
/* 2.弹性项目在主轴的对齐方式 (设置项目在单行容器中对齐方式的前提是主轴上存在剩余空间)
空间分配的两种方案:a.将所有项目视为一个整体,在项目组两边进行分配;b.将项目视为一个个主体,在项目之间进行分配。
*/
/* 默认为左对齐
justify-content: flex-start; */
/* 右对齐
justify-content: flex-end; */
/* 居中对齐
justify-content: center; */
/* 两端对齐(在除了首尾处,其他项目之前平均分配)
justify-content: space-between; */
/* 分散对齐(每个项目两边的空间一致)
justify-content: space-around; */
/* 平均对齐(剩余空间在每个项目中间平均分配)
justify-content: space-evenly; */
/* 3.单行容器中交叉轴上的对齐方式 */
/* 默认拉伸(没设置高度的时候会将项目拉伸至容器的高度)
align-items: stretch;*/
/* 顶部对齐
align-items: flex-start;*/
/* 底部对齐
align-items: flex-end;*/
/* 居中对齐
align-items: center;*/
/* 3.多行容器中主轴上的对齐方式 */
/* flex-flow: row wrap;沿主轴方向换行
align-content: stretch;
align-content: flex-start;
align-content: flex-end;
align-content: center;
align-content: space-between;
align-content: space-around;
align-content: space-evenly; */
}
.container .item{
/* 4.项目属性flex */
/* flex:flex-grow flex-shrink flex-basis */
/* flex:放大因子 收缩因子 项目在主轴上的基准宽度 */
/* 默认值:不放大 自动收缩 取容器中的width属性 */
/* flex: 0 1 auto;
flex:initial;
*/
/* 允许放大和收缩 */
flex:1 1 auto;
flex:auto;
/* 禁止放大和收缩 */
flex: 0 0 auto;
flex: none;
/* flex: 1或者2或者3;等于flex:1 1 auto; */
/* flex通常不会用来设置所有项目的默认选项,通常用来设置某一个项目的特征 */
}
/* 第二个项目和第三个项目是第一个项目和第四个项目的二倍 */
/* .container .item:first-of-type,.container .item:last-of-type{
flex: 1;
}
.container .item:nth-of-type(2), .container .item:nth-of-type(2)+ *{
flex: 2;
} */
/* 让第二个项目和其他项目的对其方式不一样 */
/* .container>.item:nth-of-type(2){
align-self: stretch;
align-self: flex-start;
align-self: flex-end;
align-self: center;
position: relative;定位也可以用
left: -2em;
} */
/* 5.设置项目在主轴上的显示顺序
显示顺序默认按照书写的源码顺序,默认序号越小越靠前,序号学大学靠后
*/
.container .item:first-of-type{
order: 2;
background-color: lawngreen;
}
.container .item:nth-of-type(2){
order: 3;
background-color: lightseagreen;
}
.container .item:nth-of-type(3){
order: -1; /* 支持负值 */
background-color: magenta;
}
.container .item:last-of-type{
background-color: lightcoral;
}
</style>
</head>
<body>
<!-- 1.flex简介:弹性盒布局,这是第一个针对布局的技术;在flex眼中,所有的元素都是行内块;flex中,页面存在两个布局的参考轴,一个叫主轴(控制元素的排列方向),一个是交叉轴(控制元素的换行方向)。 -->
<div class="container">
<div class="item">item1</div>
<div class="item">item2</div>
<div class="item">item3</div>
<div class="item">item4</div>
<!-- <div class="item">item5</div>
<div class="item">item6</div>
<div class="item">item7</div>
<div class="item">item8</div>
<div class="item">item9</div>
<div class="item">item10</div>
<div class="item">item11</div>
<div class="item">item12</div>
<div class="item">item13</div>
<div class="item">item14
<div>1</div>
<div>2</div>
<div>3</div>
</div> -->
</div>
<!-- 附:三种实现水平和垂直居中的方式 -->
<!-- 常规和flex布置版快
<header>页眉</header>
<div class="container">
<aside>左侧</aside>
<main>主体</main>
<aside>右侧</aside>
</div> -->
<!-- grid布置板块
<header>页眉</header>
<aside>左侧</aside>
<main>主体</main>
<aside>右侧</aside>
<footer>页脚</footer> -->
</body>
</html>