<!doctype html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport"
content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<title>FLEX 弹性盒模型</title>
<style>
/**********************对弹性容器进行规则设置整体控制子弹性元素**************************************/
/*弹性盒子里面会放弹性元素,我们为弹性盒子定义的规则会影响里面的弹性元素*/
/*flex-flow: row wrap; 水平方向的轴是主轴,换行后垂直方向的轴是水平交叉轴*/
/*flex-flow: column wrap; 垂直方向的轴是主轴,换行后水平方向的轴是垂直交叉轴*/
/*主轴*/
/*水平主轴(row),垂直主轴(column)*/
/*justify-content用于控制元素在主轴上的排列方式*/
/*flex-start 元素紧靠主轴起点*/
/*flex-end 元素紧靠主轴终点*/
/*center 元素从弹性容器中心开始*/
/*space-between 第一个元素靠起点,最后一个元素靠终点,余下元素平均分配空间*/
/*space-around 每个元素两侧的间隔相等。所以,元素之间的间隔比元素与容器的边距的间隔大一倍*/
/*space-evenly 元素间距离平均分配*/
/*交叉轴*/
/*水平交叉轴(row),垂直交叉轴(column)*/
/*align-items用于控制容器元素在交叉轴上的排列方式,适用于单行显示的弹性容器*/
/*stretch 元素被拉伸以适应容器(默认值);水平交叉轴,元素不能设置高;垂直交叉轴,元素不能设置宽;*/
/*center 元素位于容器的中心*/
/*flex-start 元素位于容器的交叉轴开头*/
/*flex-end 元素位于容器的交叉轴结尾*/
/*align-content只适用于多行显示的弹性容器,用于控制行(而不是元素)在交叉轴上的排列方式*/
/*stretch 多行元素被拉伸以适应容器(默认值);水平交叉轴,元素不能设置高;垂直交叉轴,元素不能设置宽;*/
/*flex-start 多行元素紧靠交叉轴起点*/
/*flex-end 多行元素紧靠交叉轴终点*/
/*center 多行元素从弹性容器中心开始*/
/*space-between 第一行元素靠起点,最后一行元素靠终点,余下行元素平均分配空间*/
/*space-around 每个行元素两侧的间隔相等。所以,行元素之间的间隔比行元素与容器的边距的间隔大一倍*/
/*space-evenly 多行元素间距离平均分配*/
/*弹性盒模型内的弹性元素挤在一起,通过box-sizing: border-box;固定弹性元素盒子的大小,再通过padding将弹性元素之
间分隔。*/
html {
padding: 0;
margin: 0;
}
/*1.声明弹性盒子的几种方式*/
/*块级盒子,定义宽、子元素自动撑开高*/
/*article {*/
/* display: flex;*/
/* background-color: black;*/
/* width: 50%;*/
/*}*/
/*行级块盒子,定义高,子元素自动撑开宽*/
/*article {*/
/* display: inline-flex;*/
/* background-color: black;*/
/* height: 400px;*/
/*}*/
/*2.改变弹性元素方向*/
/*body {*/
/* padding-left: 100px;*/
/* padding-top: 100px;*/
/*}*/
/*article {*/
/* border: 5px solid blueviolet;*/
/* width: 500px;*/
/* display: flex;*/
/* !*改变弹性元素的方向为行排列(默认)*!*/
/* !*flex-direction: row;*!*/
/* !*flex-direction: row-reverse;*!*/
/* !*改变弹性元素的方向为竖排列*!*/
/* !*flex-direction: column;*!*/
/* flex-direction: column-reverse;*/
/*}*/
/*article div {*/
/* width: 100px;*/
/* height: 100px;*/
/* background-color: red;*/
/* margin: 10px;*/
/* font-size: 20px;*/
/*}*/
/*3. 控制弹性元素溢出换行处理*/
/*body {*/
/* padding-left: 100px;*/
/* padding-top: 100px;*/
/*}*/
/*article {*/
/* border: 5px solid silver;*/
/* !*改变弹性盒子宽度为200px小于所有弹性元素宽度300px,导致弹性盒子装不下弹性元素,*/
/* 默认收缩弹性元素*!*/
/* width: 200px;*/
/* !*弹性盒子装不下弹性元素时弹性元素换行*!*/
/* !*flex-wrap: wrap;*!*/
/* flex-wrap: wrap-reverse;*/
/* display: flex;*/
/* flex-direction: row;*/
/* !*flex-direction: row; flex-wrap: wrap; <=> flex-flow: row wrap*!*/
/*}*/
/*article div {*/
/* !*每个div盒子的大小控制在100px * 100px*!*/
/* width: 100px;*/
/* height: 100px;*/
/* background-color: blueviolet;*/
/* background-clip: content-box;*/
/* padding: 10px;*/
/* box-sizing: border-box;*/
/* font-size: 20px;*/
/* color: white;*/
/*}*/
/*4.主轴与交叉轴*/
/*body {*/
/* padding-left: 100px;*/
/* padding-top: 100px;*/
/*}*/
/*article {*/
/* border: 5px solid silver;*/
/* width: 200px;*/
/* display: flex;*/
/* !*水平方向的轴是主轴,换行后垂直方向的轴是水平交叉轴*!*/
/* flex-flow: row wrap;*/
/* !*垂直方向的轴是主轴,换行后水平方向的轴是垂直交叉轴*!*/
/* !*height: 200px;*!*/
/* !*flex-flow: column wrap;*!*/
/*}*/
/*article div {*/
/* width: 100px;*/
/* height: 100px;*/
/* background-color: blueviolet;*/
/* background-clip: content-box;*/
/* padding: 10px;*/
/* box-sizing: border-box;*/
/* font-size: 20px;*/
/* color: white;*/
/*}*/
/*5.主轴元素的多种排列方式*/
/*这里以水平主轴为例,垂直主轴同理*/
/*body {*/
/* padding-left: 100px;*/
/* padding-top: 100px;*/
/*}*/
/*article {*/
/* border: 5px solid silver;*/
/* width: 500px;*/
/* display: flex;*/
/* flex-direction: row;*/
/* !*弹性元素对齐到水平主轴的开始*!*/
/* !*justify-content: flex-start;*!*/
/* !*弹性元素对齐到水平主轴的末尾*!*/
/* !*justify-content: flex-end;*!*/
/* !*注意: 设置flex-direction: row-reverse;时水平主轴的开始和结尾反转*!*/
/* !*弹性元素在水平主轴上居中*!*/
/* !*justify-content: center;*!*/
/* !*弹性元素在水平主轴上平均分配*!*/
/* justify-content: space-evenly;*/
/*}*/
/*article div {*/
/* width: 100px;*/
/* height: 100px;*/
/* background-color: blueviolet;*/
/* background-clip: content-box;*/
/* padding: 10px;*/
/* box-sizing: border-box;*/
/* font-size: 20px;*/
/* color: white;*/
/*}*/
/*6.交叉轴元素的多种排列方式*/
/*这里以水平交叉轴为例、垂直交叉轴同理*/
/*body {*/
/* padding-left: 100px;*/
/* padding-top: 100px;*/
/*}*/
/*article {*/
/* border: 5px solid silver;*/
/* width: 400px;*/
/* height: 400px;*/
/* display: flex;*/
/* flex-direction: row;*/
/* flex-wrap: wrap;*/
/* !*弹性元素对齐到水平交叉轴的开始*!*/
/* !*align-items: flex-start;*!*/
/* !*弹性元素对齐到水平交叉轴的末尾*!*/
/* !*align-items: flex-end;*!*/
/* !*注意: 设置flex-wrap: wrap-reverse;时水平交叉轴的开始和结尾反转*!*/
/* !*弹性元素对齐到水平交叉轴的中心*!*/
/* !*align-items: center;*!*/
/* !*弹性元素在水平交叉轴上拉伸*!*/
/* !*align-items: stretch;*!*/
/* !*弹性元素在水平主轴和水平交叉轴上居中*!*/
/* align-items: center;*/
/* justify-content: center;*/
/*}*/
/*article div {*/
/* width: 100px;*/
/* !*弹性元素在水平交叉轴上拉伸时需要注释掉此行,因为该元素的权重较高*!*/
/* height: 100px;*/
/* background-color: blueviolet;*/
/* background-clip: content-box;*/
/* padding: 10px;*/
/* box-sizing: border-box;*/
/* font-size: 20px;*/
/* color: white;*/
/*}*/
/*7.多行元素在交叉轴的排列方式*/
/*这里以水平交叉轴为例、垂直交叉轴同理*/
/*body {*/
/* padding-left: 100px;*/
/* padding-top: 100px;*/
/*}*/
/*article {*/
/* border: 5px solid silver;*/
/* width: 200px;*/
/* height: 400px;*/
/* display: flex;*/
/* flex-direction: row;*/
/* flex-wrap: wrap;*/
/* !*多行元素在水平交叉轴的开始处*!*/
/* !*align-content: flex-start;*!*/
/* !*多行元素在水平交叉轴的结尾处*!*/
/* !*align-content: flex-end;*!*/
/* !*多行元素在水平交叉轴的中心*!*/
/* align-content: center;*/
/* !*多行元素间距离平均分配*!*/
/* !*align-content: space-evenly;*!*/
/*}*/
/*article div {*/
/* width: 100px;*/
/* height: 100px;*/
/* background-color: blueviolet;*/
/* background-clip: content-box;*/
/* padding: 10px;*/
/* box-sizing: border-box;*/
/* font-size: 20px;*/
/* color: white;*/
/*}*/
/*8.弹性布局操作文本节点*/
/*这里以水平主轴为例,垂直主轴同理*/
/*文本节点也在弹性布局操作范围内。*/
/*body {*/
/* padding-left: 100px;*/
/* padding-top: 100px;*/
/*}*/
/*article {*/
/* border: 5px solid silver;*/
/* width: 500px;*/
/* height: 500px;*/
/* display: flex;*/
/* flex-direction: row;*/
/* align-items: center;*/
/* justify-content: space-between;*/
/*}*/
/**********************对弹性容器内的弹性元素单独设置规则**************************************/
/*1.弹性元素交叉轴控制*/
/*这里以水平交叉轴为例、垂直交叉轴同理*/
/*body {*/
/* padding-left: 100px;*/
/* padding-top: 100px;*/
/*}*/
/*article {*/
/* border: 5px solid silver;*/
/* width: 400px;*/
/* height: 400px;*/
/* display: flex;*/
/* flex-direction: row;*/
/* flex-wrap: wrap;*/
/* align-items: flex-end;*/
/*}*/
/*!*控制单个元素*!*/
/*article div:nth-of-type(1) {*/
/* !*第一个弹性元素对齐到水平交叉轴的开始处*!*/
/* !*align-self: flex-start;*!*/
/* !*第一个弹性元素对齐到水平交叉轴的结尾处*!*/
/* !*align-self: flex-end;*!*/
/* !*第一个弹性元素对齐到水平交叉轴的中间*!*/
/* !*align-self: center;*!*/
/* !*第一个弹性元素在水平交叉轴上拉伸,由于拉伸不能设置高度,所以将弹性元素的高度设置为auto*!*/
/* align-self: stretch;*/
/* height: auto;*/
/*}*/
/*article div {*/
/* width: 100px;*/
/* height: 100px;*/
/* background-color: blueviolet;*/
/* background-clip: content-box;*/
/* padding: 10px;*/
/* box-sizing: border-box;*/
/* font-size: 20px;*/
/* color: white;*/
/*}*/
/*2.主轴元素可用空间分配*/
/*这里以水平主轴为例,垂直主轴同理*/
/*body {*/
/* padding-left: 100px;*/
/* padding-top: 100px;*/
/*}*/
/*article {*/
/* border: 5px solid silver;*/
/* width: 500px;*/
/* display: flex;*/
/* flex-direction: row;*/
/* justify-content: flex-start;*/
/*}*/
/*article div:nth-of-type(1){*/
/* !*第一个弹性元素不占可用空间平均等份,弹性元素大小保持不变*!*/
/* flex-grow: 0;*/
/*}*/
/*article div:nth-of-type(2){*/
/* !*第二个弹性元素占可用空间平均1等份*!*/
/* flex-grow: 1;*/
/*}*/
/*article div:nth-of-type(3){*/
/* !*第三个弹性元素占可用空间平均2等份*!*/
/* flex-grow: 2;*/
/*}*/
/*article div {*/
/* !*每一个弹性元素占可用空间平均1等份*!*/
/* !*flex-grow: 1;*!*/
/* width: 100px;*/
/* height: 100px;*/
/* background-color: blueviolet;*/
/* background-clip: content-box;*/
/* padding: 10px;*/
/* box-sizing: border-box;*/
/* font-size: 20px;*/
/* color: white;*/
/*}*/
/*3.布局小米移动端页面结构*/
/*body {*/
/* height: 100vh;*/
/* display: flex;*/
/* flex-direction: column;*/
/* justify-content: space-between;*/
/*}*/
/*header {*/
/* height: 60px;*/
/* background-color: blueviolet;*/
/*}*/
/*main {*/
/* flex-grow: 1;*/
/* background-color: #ccc;*/
/*}*/
/*footer {*/
/* height: 60px;*/
/* background-color: #383881;*/
/*}*/
/*4.主轴元素动态缩小的处理技巧*/
/*这里以水平主轴为例,垂直主轴同理*/
/*body {*/
/* padding-left: 100px;*/
/* padding-top: 100px;*/
/*}*/
/*article {*/
/* border: 5px solid silver;*/
/* !*弹性盒子空间不足且不设置换行时里面的弹性元素默认会缩小*!*/
/* width: 200px;*/
/* display: flex;*/
/* flex-direction: row;*/
/* justify-content: flex-start;*/
/*}*/
/*article div:nth-of-type(1) {*/
/* !*第1个弹性元素比例不缩小*!*/
/* flex-shrink: 0;*/
/*}*/
/*article div:nth-of-type(2) {*/
/* !*第2个弹性元素比例缩小一倍*!*/
/* flex-shrink: 1;*/
/*}*/
/*article div:nth-of-type(3) {*/
/* !*第3个弹性元素比例缩小2倍*!*/
/* flex-shrink: 2;*/
/*}*/
/*article div {*/
/* !*弹性盒子里的所有弹性元素都不缩小,弹性元素溢出弹性盒子*!*/
/* !*flex-shrink: 0;*!*/
/* width: 100px;*/
/* height: 100px;*/
/* background-color: blueviolet;*/
/* background-clip: content-box;*/
/* padding: 10px;*/
/* box-sizing: border-box;*/
/* font-size: 20px;*/
/* color: white;*/
/*}*/
/*5.主轴的基准尺寸的定义*/
/*这里以水平主轴为例,垂直主轴同理*/
/*body {*/
/* padding-left: 100px;*/
/* padding-top: 100px;*/
/*}*/
/*article {*/
/* border: 5px solid silver;*/
/* width: 500px;*/
/* display: flex;*/
/* flex-direction: row;*/
/* justify-content: flex-start;*/
/*}*/
/*article div {*/
/* !*主轴基准尺寸的优先级大于弹性元素的宽度(row)或高度(column)*!*/
/* flex-basis: 100px;*/
/* !*width: 100px;*!*/
/* flex-grow: 1;*/
/* height: 100px;*/
/* background-color: blueviolet;*/
/* background-clip: content-box;*/
/* padding: 10px;*/
/* box-sizing: border-box;*/
/* font-size: 20px;*/
/* color: white;*/
/*}*/
/*补充: 组合属性
flex-grow: 1; 主轴弹性元素放大比例,用于将弹性盒子的可用空间,分配给弹性元素。
flex-shrink: 2; 主轴弹性元素缩小比例,与 flex-grow 相反 flex-shrink 是在弹性盒子装不下元素时定义的缩小值。
flex-basis: 100px; 主轴基准尺寸,flex-basis 属性定义了在分配多余空间之前,项目占据的主轴空间(main size)。
上面3行可以设置为: flex: 1 2 100px;
*/
/*6.主轴控制弹性元素的排序*/
/*这里以水平主轴为例,垂直主轴同理*/
/*body {*/
/* padding-left: 100px;*/
/* padding-top: 100px;*/
/*}*/
/*article {*/
/* border: 5px solid silver;*/
/* width: 500px;*/
/* display: flex;*/
/* flex-direction: row;*/
/* justify-content: flex-start;*/
/*}*/
/*!*order用于控制弹性元素的位置,默认为 order:0 数值越小越在前面,可以负数或整数。*!*/
/*article div:nth-of-type(1) {*/
/* order: 3*/
/*}*/
/*article div:nth-of-type(2) {*/
/* order: 2*/
/*}*/
/*article div:nth-of-type(3) {*/
/* order: 1*/
/*}*/
/*article div {*/
/* width: 100px;*/
/* height: 100px;*/
/* background-color: blueviolet;*/
/* background-clip: content-box;*/
/* padding: 10px;*/
/* box-sizing: border-box;*/
/* font-size: 20px;*/
/* color: white;*/
/*}*/
/*7.定位元素在弹性布局中的表现*/
/*绝对定位的弹性元素不参与弹性布局,相对定位可以*/
/*这里以水平主轴为例,垂直主轴同理*/
/*body {*/
/* padding-left: 100px;*/
/* padding-top: 100px;*/
/*}*/
/*article {*/
/* border: 5px solid silver;*/
/* width: 500px;*/
/* display: flex;*/
/* flex-direction: row;*/
/* justify-content: flex-start;*/
/* !*父级设置相对定位*!*/
/* position: relative;*/
/*}*/
/*article div:nth-of-type(1) {*/
/* !*第1个弹性元素设置绝对定位,丢失空间位,第2个弹性元素占据第一个弹性元素的位置*!*/
/* !*background-color: blue;*!*/
/* !*position: absolute;*!*/
/* !*第1个弹性元素设置相对定位,不丢失空间位,对后面的弹性元素不产生影响*!*/
/* background-color: blue;*/
/* position: relative;*/
/* left: 400px;*/
/* top: 120px;*/
/*}*/
/*article div {*/
/* width: 100px;*/
/* height: 100px;*/
/* background-color: blueviolet;*/
/* background-clip: content-box;*/
/* padding: 10px;*/
/* box-sizing: border-box;*/
/* font-size: 20px;*/
/* color: white;*/
/*}*/
/**********************flex弹性盒模型使用案例**************************************/
/*弹性盒模型内的任何弹性元素都可以使用弹性来布局*/
/*1.弹性布局移动端通用菜单、多级菜单的弹性布局*/
* {
padding: 0;
margin: 0;
}
body {
height: 100vh;
display: flex;
flex-direction: column;
}
main {
flex-grow: 1;
background-color: #f3f3f3;
}
footer {
height: 50px;
background-color: #eee;
display: flex;
flex-direction: row;
justify-content: space-between;
border-top: solid 1px #ccc;
border-bottom: solid 1px #ccc;
}
footer section {
flex-grow: 1;
border-right: 1px solid #ccc;
display: flex;
flex-direction: column-reverse;
}
footer section:last-child {
border-right: none;
}
footer section h4 {
/*border: solid 1px red;*/
flex: 1 0 50px;
display: flex;
flex-direction: column;
justify-content: center;
text-align: center;
cursor: pointer;
}
footer section ul {
display: flex;
flex-direction: column;
border: solid 1px #ccc;
text-align: center;
/*margin-bottom: 5px;*/
border-radius: 10px;
margin: 5px;
}
footer section ul li {
flex: 1 0 50px;
display: flex;
flex-direction: column;
justify-content: center;
border-bottom: solid 1px #ccc;
cursor: pointer;
}
footer section ul li:last-child {
border-bottom: none;
}
/*footer section ul {*/
/* display: none;*/
/*}*/
/*footer section:hover ul {*/
/* display: block;*/
/*}*/
nav {
height: 60px;
background-color: #aaa;
box-shadow: 0 0 5px rgba(0, 0, 0, 0.5);
/*margin: 0 auto;*/
display: flex;
flex-direction: row;
}
nav ul {
list-style: none;
display: flex;
flex-direction: row;
align-items: center;
}
nav ul:nth-of-type(1) {
display: flex;
flex-direction: row;
margin-right: auto;
}
nav ul:nth-of-type(1)>li {
margin: 0 10px;
}
nav ul:nth-of-type(2)>li {
background-color: blueviolet;
border-radius: 5px;
}
</style>
</head>
<body>
<!----------------------------对弹性容器进行规则设置整体控制子弹性元素-------------------------------------->
<!--1.声明弹性盒子的几种方式-->
<!--<article>-->
<!-- <div>html</div>-->
<!-- <div>css</div>-->
<!-- <div>go</div>-->
<!--</article>-->
<!--2.改变弹性元素方向-->
<!--<article>-->
<!-- <div>1</div>-->
<!-- <div>2</div>-->
<!-- <div>3</div>-->
<!--</article>-->
<!--3. 控制弹性元素溢出换行处理-->
<!--<article>-->
<!-- <div>1</div>-->
<!-- <div>2</div>-->
<!-- <div>3</div>-->
<!--</article>-->
<!--4.主轴与交叉轴-->
<!--<article>-->
<!-- <div>1</div>-->
<!-- <div>2</div>-->
<!-- <div>3</div>-->
<!--</article>-->
<!--5.主轴元素的多种排列方式-->
<!--<article>-->
<!-- <div>1</div>-->
<!-- <div>2</div>-->
<!-- <div>3</div>-->
<!--</article>-->
<!--6.交叉轴元素的多种排列方式-->
<!--<article>-->
<!-- <div>1</div>-->
<!-- <div>2</div>-->
<!-- <div>3</div>-->
<!--</article>-->
<!--7.多行元素在交叉轴的排列方式-->
<!--<article>-->
<!-- <div>1</div>-->
<!-- <div>2</div>-->
<!-- <div>3</div>-->
<!-- <div>4</div>-->
<!-- <div>5</div>-->
<!--</article>-->
<!--8.弹性布局操作文本节点-->
<!--<article>-->
<!-- go语言-->
<!-- <span>html超文本标记语言</span>-->
<!-- css层叠样式表-->
<!--</article>-->
<!----------------------------对弹性容器内的弹性元素单独设置规则-------------------------------------->
<!--1.弹性元素交叉轴控制-->
<!--<article>-->
<!-- <div>1</div>-->
<!-- <div>2</div>-->
<!-- <div>3</div>-->
<!--</article>-->
<!--2.主轴元素可用空间分配-->
<!--<article>-->
<!-- <div>1</div>-->
<!-- <div>2</div>-->
<!-- <div>3</div>-->
<!--</article>-->
<!--3.布局小米移动端页面结构-->
<!--<header></header>-->
<!--<main></main>-->
<!--<footer></footer>-->
<!--4.主轴元素动态缩小的处理技巧-->
<!--<article>-->
<!-- <div>1</div>-->
<!-- <div>2</div>-->
<!-- <div>3</div>-->
<!--</article>-->
<!--5.主轴的基准尺寸的定义-->
<!--<article>-->
<!-- <div>1</div>-->
<!-- <div>2</div>-->
<!-- <div>3</div>-->
<!--</article>-->
<!--6.主轴控制弹性元素的排序-->
<!--<article>-->
<!-- <div>1</div>-->
<!-- <div>2</div>-->
<!-- <div>3</div>-->
<!--</article>-->
<!--7.定位元素在弹性布局中的表现-->
<!--<article>-->
<!-- <div>1</div>-->
<!-- <div>2</div>-->
<!-- <div>3</div>-->
<!--</article>-->
<!-----------------------------flex弹性盒模型使用案例------------------------------------->
<!--1.弹性布局移动端通用菜单、多级菜单的弹性布局-->
<nav>
<ul>
<li>首页</li>
<li>视频教程</li>
<li>文档</li>
</ul>
<ul>
<li>头像</li>
</ul>
</nav>
<main></main>
<footer>
<section>
<h4>教程</h4>
<ul>
<li>PHP</li>
<li>CSS</li>
</ul>
</section>
<section>
<h4>直播</h4>
<ul>
<li>Go</li>
<li>JavaScript</li>
</ul>
</section>
<section>
<h4>软件</h4>
<ul>
<li>WebStorm</li>
<li>GoLand</li>
</ul>
</section>
</footer>
</body>
</html>
弹性布局移动端通用菜单、多级菜单的弹性布局