搜索
首页web前端css教程CSS flex布局属性:align-items和align-content的区别

在用flex布局时,发现有两个属性功能好像有点类似:align-itemsCSS flex布局属性:align-items和align-content的区别,乍看之下,它们都是用于定义flex容器中元素在交叉轴(主轴为flex-deriction定义的方向,默认为row,那么交叉轴跟主轴垂直即为column,反之它们互调,flex基本的概念如下图所示)上的对齐方式,那么它们之间有什么区别呢?

CSS flex布局属性:align-items和align-content的区别

本文通过实例代码来对此展开研究(flex-direction默认为水平方向,环境为google浏览器:版本 72),主要分为三部分:

① 翻译stack overflow的好的回答。

② 自己代码实例展示差别。

③ 总结。

注:本文只限属性取值为center的情况,其他属性值请自己尝试。【学习视频分享:css视频教程web前端

CSS flex布局属性:align-items和CSS flex布局属性:align-items和align-content的区别的区别

1. stack overflow上的回答(翻译)

详见问题:https://stackoverflow.com/questions/31250174/css-flexbox-difference-between-align-items-and-CSS flex布局属性:align-items和align-content的区别

  • justfiy-content属性可应用于所有的flex容器,它的作用是设置flex子项(flex items)在主轴上的对齐方式。不同取值的效果如下所示:
    CSS flex布局属性:align-items和CSS flex布局属性:align-items和align-content的区别的区别
  • align-items属性可以应用于所有的flex容器,它的作用是设置flex子项在每个flex行的交叉轴上的默认对齐方式。不同取值的效果如下所示:
    CSS flex布局属性:align-items和CSS flex布局属性:align-items和align-content的区别的区别
  • CSS flex布局属性:align-items和align-content的区别 只适用多行的flex容器(也就是flex容器中的子项不止一行时该属性才有效果),它的作用是当flex容器在交叉轴上有多余的空间时,将子项作为一个整体(属性值为:flex-start、flex-end、center时)进行对齐。不同取值的效果如下所示:
    CSS flex布局属性:align-items和align-content的区别
    实际上,该说法并不是很准确(见第2.3的例子),以下我们通过实例代码来验证一下。

2. 自己动手实践

2.1 子项为单行的情况

初始代码(后面例子的代码中省略了与flex无关且不变的部分,这里使用React,所以是className)如下:

<div className=&#39;flex&#39;>
     <div className=&#39;i1&#39;>1</div>
     <div className=&#39;i2&#39;>2</div>
     <div className=&#39;i3&#39;>3</div>
     <div className=&#39;i4&#39;>4</div>
</div>

对应的CSS:

.flex {
	width: 500px;
	margin: 10px;
	text-align: center;
	border: 2px solid #9a9a9a;
	display: flex; /* 默认的flex-direction为row,则交叉轴方向为column,即垂直方向*/
}
.flex div {
	width: 100px;
	margin: 5px;
}
.i1 {
	background-color: #ffb685;
	height: 130px;
}
.i2 {
	background-color: #fff7b1;
	height: 50px;
	width: 120px;
}
.i3 {
	background-color: #b1ffc8;
	height: 100px;
}
.i4 {
	background-color: #b1ccff;
	height: 60px;
}

效果如下所示:

CSS flex布局属性:align-items和align-content的区别
结论:在所有的flex布局中,这里其实有浏览器默认的属性:align-items: normal;CSS flex布局属性:align-items和align-content的区别: normal;,效果为顶部对齐。

2.1.1 flex容器不设置高度

CSS flex布局属性:align-items和align-content的区别:

.flex {
	display: flex;
}

效果如下所示:
单行不设置高度的CSS flex布局属性:align-items和align-content的区别
结论:有默认的属性align-items: normal;,效果为顶部对齐。

  • 设置 align-items : center

.flex {
	display: flex;
	align-items: center;
}

效果如下所示:

单行不设置高度:align-items: center;
结论:可以看到容器的高度为最高子项的高度,在一行的所有子项全都在交叉轴上居中对齐,即子项的高度中线与flex交叉轴中线重合。

  • 设置 CSS flex布局属性:align-items和align-content的区别: center

.flex {
	display: flex; 
	CSS flex布局属性:align-items和align-content的区别: center;
}

效果如下所示:

单行不设置高度:CSS flex布局属性:align-items和align-content的区别: center;
结论:可以看到与CSS flex布局属性:align-items和align-content的区别并没有区别,即在flex容器不设置高度并且子项只有一行时,CSS flex布局属性:align-items和align-content的区别属性是不起作用的。

2.1.2 flex容器设置高度

CSS flex布局属性:align-items和align-content的区别:

.flex {
	height: 500px; /* 给flex容器添加一个高度 */
	display: flex;
}

效果如下所示:

CSS flex布局属性:align-items和align-content的区别
结论: 与flex容器不设置高度差不多,只是外层容器的高度增加而已。

  • 设置 align-items : center

.flex {
	height: 500px;
	display: flex;
	align-items: center;
}

效果如下所示:

CSS flex布局属性:align-items和align-content的区别:align-items: center;
结论:可以看到在一行的所有子项全都在交叉轴上居中对齐,与flex容器高度不设置时的效果一样(只不过此时高度最大的子项也居中对齐了)。

  • 设置 CSS flex布局属性:align-items和align-content的区别: center

.flex {
	display: flex;
	CSS flex布局属性:align-items和align-content的区别: center;
}

效果如下所示:

CSS flex布局属性:align-items和align-content的区别:CSS flex布局属性:align-items和align-content的区别: center;
结论:可以看到,此时CSS flex布局属性:align-items和align-content的区别: center;并没有起作用,效果与CSS flex布局属性:align-items和align-content的区别一样。

2.2 子项为多行的情况

CSS flex布局属性:align-items和align-content的区别:

<div>
     <div>1</div>
     <div>2</div>
     <div>3</div>
     <div>4</div>
     <div>5</div>
     <div>6</div>
</div>

对应的CSS:

.flex {
	width: 500px;
	margin: 10px;
	border: 2px solid #9a9a9a;
	text-align: center;
	display: flex;
	flex-wrap: wrap; /* 使flex容器一行放不下子项换行*/
}
.i5 {
	background-color: #c8b1ff;
	height: 40px;
}
.i6 {
	background-color: #ffb1e5;
	height: 80px;
}

效果如下所示:

多行不设置高度的CSS flex布局属性:align-items和align-content的区别
结论:同单行一样,这里也有浏览器默认的属性:align-items: normal;CSS flex布局属性:align-items和align-content的区别: normal;,效果为顶部对齐。

2.2.1 flex容器不设置高度

CSS flex布局属性:align-items和align-content的区别:

.flex {
	display: flex;
	flex-wrap: wrap; 
}

效果如下所示:
多行不设置高度的CSS flex布局属性:align-items和align-content的区别
结论:默认顶部对齐,每一行的高度为该行子项中高度最大的那个值。

  • 设置 align-items : center

.flex {
	display: flex;
	flex-wrap: wrap; 
	align-items: center;
}

效果如下所示:

多行不设置高度:align-items : center;
结论:可以看到各行的子项都在各自行上居中对齐(各行的高度由高度最高的子项决定,flex容器的高度为所有行的高度最高的子项高度之和)。

  • 设置 CSS flex布局属性:align-items和align-content的区别: center

.flex {
	display: flex;
	flex-wrap: wrap; 
	CSS flex布局属性:align-items和align-content的区别: center;
}

效果如下所示:
多行不设置高度:CSS flex布局属性:align-items和align-content的区别: center;
结论:与CSS flex布局属性:align-items和align-content的区别一样,CSS flex布局属性:align-items和align-content的区别: center并没有起作用,因为此时是以所有子项作为一个整体,而flex容器并没有指定高度(flex容器的高度即为子项整体的最大高度),所以flex容器在交叉轴上没有多余的空间,那么子项整体自然而然也就没有在交叉轴上对齐的说法了。

2.2.2 flex容器设置高度

CSS flex布局属性:align-items和align-content的区别:

.flex {
	height: 500px;
	display: flex;
	flex-wrap: wrap; 
}

效果如下所示:
多行设置高度CSS flex布局属性:align-items和align-content的区别
结论:由浏览器的默认值确定。

  • 设置 align-items : center

.flex {
	height: 500px;
	display: flex;
	flex-wrap: wrap; 
	align-items: center;
}

效果如下所示:

多行设置高度:CSS flex布局属性:align-items和align-content的区别: center;
结论:这里我们可以看出,子项分为2行,flex容器将交叉轴上的多余空间按行数平均分给每行,然后每行各自按自己所在的行居中对齐(此时的单行效果跟2.1.2中的例子1效果一样)

  • 设置 CSS flex布局属性:align-items和align-content的区别: center

.flex {
	height: 500px;
	display: flex;
	flex-wrap: wrap; 
	CSS flex布局属性:align-items和align-content的区别: center;
}

效果如下所示:
多行设置高度:CSS flex布局属性:align-items和align-content的区别: center;
结论:我们可以看到,在flex容器指定高度并且子项为多行时,CSS flex布局属性:align-items和align-content的区别: center是将子项作为一个整体,然后这个整体在flex容器的交叉轴上居中对齐的。

2.3 补充

以上为什么要区分flex容器是否有固定高度是因为有一种特殊的情况,即:当子项为单行,flex容器具有固定的高度并且设置了flex-wrap: wrap;时,CSS flex布局属性:align-items和align-content的区别: center;对单行的子项也有作用。

<div className=&#39;flex&#39;>
     <div className=&#39;i1&#39;>1</div>
     <div className=&#39;i2&#39;>2</div>
     <div className=&#39;i3&#39;>3</div>
     <div className=&#39;i4&#39;>4</div>
</div>
.flex {
	height: 500px;
	display: flex;
	flex-wrap: wrap; 
	CSS flex布局属性:align-items和align-content的区别: center;
}

效果如下所示:
CSS flex布局属性:align-items和align-content的区别,flex-wrap: wrap; CSS flex布局属性:align-items和align-content的区别: center;
结论:可以看到此时,CSS flex布局属性:align-items和align-content的区别: center;将单行的子项作为一个整体在交叉轴居中了。

3. 总结

如下表:

条件 属性(是否有效果)
子项 flex容器 align-items CSS flex布局属性:align-items和align-content的区别
单行 不指定高度
固定高度 否(但是有设置flex-wrap:wrap;时,有效果)
多行 不指定高度
固定高度

结论:从上表可知,对于align-itemsCSS flex布局属性:align-items和align-content的区别的区别,我们只需要记住以下两点,

  • align-items属性是针对单独的每一个flex子项起作用,它的基本单位是每一个子项,在所有情况下都有效果(当然要看具体的属性值)。

  • CSS flex布局属性:align-items和align-content的区别属性是将flex子项作为一个整体起作用,它的基本单位是子项构成的行,只在两种情况下有效果:①子项多行且flex容器高度固定 ②子项单行,flex容器高度固定且设置了flex-wrap:wrap;

这里有个flex布局的小教程,感兴趣的同学可以玩玩:http://flexboxfroggy.com/

注:这里的高度固定的意思实际上是让flex容器在交叉轴上有多余的空间。

更多编程相关知识,请访问:编程视频!!

以上是CSS flex布局属性:align-items和align-content的区别的详细内容。更多信息请关注PHP中文网其他相关文章!

声明
本文转载于:csdn。如有侵权,请联系admin@php.cn删除
CSS自定义属性的范围的功率(和乐趣)CSS自定义属性的范围的功率(和乐趣)Apr 14, 2025 am 11:11 AM

您可能至少已经对CSS变量有点熟悉了。如果没有,这是两秒钟的概述:它们真的称为自定义属性

我们是程序员我们是程序员Apr 14, 2025 am 11:04 AM

构建网站正在编程。编写HTML和CSS正在编程。我是程序员,如果您在这里阅读CSS-Tricks,那么您很有可能是您

您如何从网站上删除未使用的CSS?您如何从网站上删除未使用的CSS?Apr 14, 2025 am 10:59 AM

在这里,我想预先知道的是:这是一个很难的问题。如果您降落在这里,因为您希望指向您可以运行的工具

图片中的图片网络API简介图片中的图片网络API简介Apr 14, 2025 am 10:57 AM

图片中的图片在2016年发行了Macos Sierra,在Safari浏览器中首次出现在网络上。这使用户可以弹出

使用Gatsby组织和准备图像以使图像模糊效果的方法使用Gatsby组织和准备图像以使图像模糊效果的方法Apr 14, 2025 am 10:56 AM

盖茨比(Gatsby)进行了出色的处理和处理图像。例如,它可以帮助您节省图像优化的时间,因为您不必手动

哦,嘿,填充百分比基于父元素的宽度哦,嘿,填充百分比基于父元素的宽度Apr 14, 2025 am 10:55 AM

今天,我学到了一些有关基于百分比的(%)填充的知识,我脑海中完全错了!我一直认为百分比填充是基于

何时使用SVG与何时使用帆布何时使用SVG与何时使用帆布Apr 14, 2025 am 10:43 AM

SVG和画布都是可以在网络浏览器中绘制东西的技术,因此它们值得比较和理解何时更合适

一个超级怪异的CSS错误,影响文本选择一个超级怪异的CSS错误,影响文本选择Apr 14, 2025 am 10:41 AM

您知道如何(在某种程度上)使用::选择的文本样式?好吧,杰夫·斯塔尔(Jeff Starr)发现了一个怪异的CSS错误。

See all articles

热AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover

AI Clothes Remover

用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool

Undress AI Tool

免费脱衣服图片

Clothoff.io

Clothoff.io

AI脱衣机

AI Hentai Generator

AI Hentai Generator

免费生成ai无尽的。

热门文章

R.E.P.O.能量晶体解释及其做什么(黄色晶体)
3 周前By尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.最佳图形设置
3 周前By尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.如果您听不到任何人,如何修复音频
3 周前By尊渡假赌尊渡假赌尊渡假赌
WWE 2K25:如何解锁Myrise中的所有内容
4 周前By尊渡假赌尊渡假赌尊渡假赌

热工具

VSCode Windows 64位 下载

VSCode Windows 64位 下载

微软推出的免费、功能强大的一款IDE编辑器

Dreamweaver CS6

Dreamweaver CS6

视觉化网页开发工具

WebStorm Mac版

WebStorm Mac版

好用的JavaScript开发工具

安全考试浏览器

安全考试浏览器

Safe Exam Browser是一个安全的浏览器环境,用于安全地进行在线考试。该软件将任何计算机变成一个安全的工作站。它控制对任何实用工具的访问,并防止学生使用未经授权的资源。

禅工作室 13.0.1

禅工作室 13.0.1

功能强大的PHP集成开发环境