目录:
1.准备工作
2.属性解析: align-items
3.属性解析: align-content
4.弹性元素的属性
一、准备工作
我们在前面的基础上,修改代码,把ul的高度定下来,设置800px, li的高度不定。
然后,body里面添加div.
代码如下:
<style>*{margin: 0;padding: 0;list-style: none;}ul{width: 800px;height: 800px;border: 10px red solid;/* 设置ul为弹性元素 */display: flex;}li{width: 200px;text-align: center;font-size: 28px;line-height: 100px;/* 让所有的li伸缩系数为0,即他们都不会伸缩,该超出边框的就超出 */flex-shrink: 0;}li:nth-child(1){background-color: #bfa;}li:nth-child(2){background-color: pink;}li:nth-child(3){background-color: orange;}</style>
<body><ul><li>1</li><li>2<div>2</div></li><li>3<div>3</div><div>3</div></li></ul></body>
二、属性解析: align-items
- align-items
- 元素在辅轴上如何对齐
- 元素间的关系(比如上面的1和2, 2和3 这些元素之间的对齐方式)
- 可选值:
- stretch 默认值,将元素的长度设置为相同的值
<style>*{margin: 0;padding: 0;list-style: none;}ul{width: 600px;height: 800px;border: 10px red solid;/* 设置ul为弹性元素 */display: flex;/* 元素之间的关系 */align-items: stretch;/* 多的li进行换行 */flex-flow: row wrap;}li{width: 200px;text-align: center;font-size: 28px;line-height: 100px;/* 让所有的li伸缩系数为0,即他们都不会伸缩,该超出边框的就超出 */flex-shrink: 0;}li:nth-child(1){background-color: #bfa;}li:nth-child(2){background-color: pink;}li:nth-child(3){background-color: orange;}li:nth-child(4){background-color: yellow;}li:nth-child(5){background-color: chocolate;}</style>
<body><ul><li>1</li><li>2<div>2</div></li><li>3<div>3</div><div>3</div></li><li>1</li><li>2<div>2</div></li></ul></body>
这个第一行的高度一样,第二行的高度一样,这就是stretch 定义的相同的值。 是行与行之间的高度,并不是所有元素高度都一样。
本来1他内容撑开的高度很矮,设置了stretch后,他会为了匹配大家相同的高度,把自己的高度拉长
- flex-start :元素不会拉伸,而是沿着辅轴起边对齐
比如目前我们的主轴是水平方向,辅轴就是垂直方向,所以这里的起边,就是顶部上方。
ul{width: 600px;height: 800px;border: 10px red solid;/* 设置ul为弹性元素 */display: flex;/* 因为辅轴是纵向,所以起边就是顶部上方,因此这里控制他是每行元素顶部对齐 */align-items: flex-start;/* 多的li进行换行 */flex-flow: row wrap;}
- flex-end :元素不会拉伸,而是沿着辅轴的终边对齐
同理
ul{width: 600px;height: 800px;border: 10px red solid;/* 设置ul为弹性元素 */display: flex;/* 因为辅轴是纵向,所以终边就是底部,因此这里控制他是每行元素底部对齐 */align-items: flex-end;/* 多的li进行换行 */flex-flow: row wrap;}
- center :元素不会拉伸,而是居中对齐
同理
ul{width: 600px;height: 800px;border: 10px red solid;/* 设置ul为弹性元素 */display: flex;/* 因为辅轴是纵向,每行元素的中心对齐*/align-items: center;/* 多的li进行换行 */flex-flow: row wrap;}
应用:需求是要求元素li,在元素ul里面垂直水平,双方向对齐居中。
ul{width: 600px;height: 800px;border: 10px red solid;/* 设置ul为弹性元素 */display: flex;/* ul里面的元素li,水平垂直方向都居中,关键是这两行代码。justify-content: center; align-items: center;*/justify-content: center;align-items: center;/* 多的li进行换行 */flex-flow: row wrap;}li{width: 200px;text-align: center;font-size: 28px;line-height: 100px;/* 让所有的li伸缩系数为0,即他们都不会伸缩,该超出边框的就超出 */flex-shrink: 0;}
<ul><li>1</li></ul>
- baseline :基线对齐 (用的不多,主要针对文字,沿着文字的基线对齐)
三、属性解析: align-content
- align-content:设置辅轴上的空白空间分布。
我们知道主轴上有空白空间,辅轴上也有空白空间。
align-items是控制横向,元素之间的对齐的, 对应的align-content是对齐元素之间的空白的。
- 可选值:
- align-content: center; :让辅轴上下的空白相等,元素在中间
<style>*{margin: 0;padding: 0;list-style: none;}ul{width: 600px;height: 800px;border: 10px red solid;/* 设置ul为弹性元素 */display: flex;/* 辅轴上,元素之间是顶部对齐 */align-items: flex-start;/* 辅轴上,上下空白相等 */align-content: center;/* 多的li进行换行 */flex-flow: row wrap;}li{width: 200px;text-align: center;font-size: 28px;line-height: 100px;/* 让所有的li伸缩系数为0,即他们都不会伸缩,该超出边框的就超出 */flex-shrink: 0;}li:nth-child(1){background-color: #bfa;}li:nth-child(2){background-color: pink;}li:nth-child(3){background-color: orange;}li:nth-child(4){background-color: yellow;}li:nth-child(5){background-color: chocolate;}</style>
<ul><li>1</li><li>2<div>2</div></li><li>3<div>3</div><div>3</div></li><li>1</li><li>2<div>2</div></li></ul>
- align-content: flex-start; :让辅轴上空白在下面,元素在辅轴的上方
- align-content: flex-end :让辅轴上空白在上方,元素在辅轴的下方
- align-content: space-around :让辅轴上空白在环顾在每行的上下两边
- align-content: space-between :让辅轴上空白在中间
总的来说,就是通过指定空白的位置,来对齐两行元素。
四、弹性元素的属性
- align-self:用来覆盖当前弹性元素上的align-items
本来我们在ul 统一设置了 align-items: flex-start; 也就是说ul下的子元素li都有这个属性,但是现在我想针对第一个li,单独设置他的align-items, 此时我们就用align-self 来覆盖。
- 关键代码:
li:nth-child(1){/* align-self:用来覆盖当前弹性元素上的align-items这li的第一个元素,设置了这个后,会把原来设置过的align-items样式覆盖掉*/align-self:stretch;}
- 完整代码:
<style>*{margin: 0;padding: 0;list-style: none;}ul{width: 600px;height: 800px;border: 10px red solid;/* 设置ul为弹性元素 */display: flex;/* 辅轴上,元素之间是顶部对齐 */align-items: flex-start;align-content: space-between;/* 多的li进行换行 */flex-flow: row wrap;}li{width: 200px;text-align: center;font-size: 28px;line-height: 100px;/* 让所有的li伸缩系数为0,即他们都不会伸缩,该超出边框的就超出 */flex-shrink: 0;}li:nth-child(1){/* align-self:用来覆盖当前弹性元素上的align-items这li的第一个元素,设置了这个后,会把原来设置过的align-items样式覆盖掉*/align-self: stretch;background-color: #bfa;}li:nth-child(2){background-color: pink;}li:nth-child(3){background-color: orange;}li:nth-child(4){background-color: yellow;}li:nth-child(5){background-color: chocolate;}</style>
<body><ul><li>1</li><li>2<div>2</div></li><li>3<div>3</div><div>3</div></li><li>1</li><li>2<div>2</div></li></ul></body>