搜索
首页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删除
@KeyFrames vs CSS过渡:有什么区别?@KeyFrames vs CSS过渡:有什么区别?May 14, 2025 am 12:01 AM

@keyframesandCSSTransitionsdifferincomplexity:@keyframesallowsfordetailedanimationsequences,whileCSSTransitionshandlesimplestatechanges.UseCSSTransitionsforhovereffectslikebuttoncolorchanges,and@keyframesforintricateanimationslikerotatingspinners.

使用页面CMS进行静态站点内容管理使用页面CMS进行静态站点内容管理May 13, 2025 am 09:24 AM

我知道,我知道:有大量的内容管理系统选项可用,而我进行了几个测试,但实际上没有一个是一个,y&#039;知道吗?怪异的定价模型,艰难的自定义,有些甚至最终成为整个&

链接HTML中CSS文件的最终指南链接HTML中CSS文件的最终指南May 13, 2025 am 12:02 AM

链接CSS文件到HTML可以通过在HTML的部分使用元素实现。1)使用标签链接本地CSS文件。2)多个CSS文件可通过添加多个标签实现。3)外部CSS文件使用绝对URL链接,如。4)确保正确使用文件路径和CSS文件加载顺序,优化性能可使用CSS预处理器合并文件。

CSS Flexbox与网格:全面评论CSS Flexbox与网格:全面评论May 12, 2025 am 12:01 AM

选择Flexbox还是Grid取决于布局需求:1)Flexbox适用于一维布局,如导航栏;2)Grid适合二维布局,如杂志式布局。两者在项目中可结合使用,提升布局效果。

如何包括CSS文件:方法和最佳实践如何包括CSS文件:方法和最佳实践May 11, 2025 am 12:02 AM

包含CSS文件的最佳方法是使用标签在HTML的部分引入外部CSS文件。1.使用标签引入外部CSS文件,如。2.对于小型调整,可以使用内联CSS,但应谨慎使用。3.大型项目可使用CSS预处理器如Sass或Less,通过@import导入其他CSS文件。4.为了性能,应合并CSS文件并使用CDN,同时使用工具如CSSNano进行压缩。

Flexbox vs Grid:我应该学习两者吗?Flexbox vs Grid:我应该学习两者吗?May 10, 2025 am 12:01 AM

是的,youshouldlearnbothflexboxandgrid.1)flexboxisidealforone-demensional,flexiblelayoutslikenavigationmenus.2)gridexcelstcelsintwo-dimensional,confffferDesignssignssuchasmagagazineLayouts.3)blosebothenHancesSunHanceSlineHancesLayOutflexibilitibilitibilitibilitibilityAnderibilitibilityAndresponScormentilial anderingStruction

轨道力学(或我如何优化CSS KeyFrames动画)轨道力学(或我如何优化CSS KeyFrames动画)May 09, 2025 am 09:57 AM

重构自己的代码看起来是什么样的?约翰·瑞亚(John Rhea)挑选了他写的一个旧的CSS动画,并介绍了优化它的思维过程。

CSS动画:很难创建它们吗?CSS动画:很难创建它们吗?May 09, 2025 am 12:03 AM

CSSanimationsarenotinherentlyhardbutrequirepracticeandunderstandingofCSSpropertiesandtimingfunctions.1)Startwithsimpleanimationslikescalingabuttononhoverusingkeyframes.2)Useeasingfunctionslikecubic-bezierfornaturaleffects,suchasabounceanimation.3)For

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脱衣机

Video Face Swap

Video Face Swap

使用我们完全免费的人工智能换脸工具轻松在任何视频中换脸!

热门文章

热工具

MinGW - 适用于 Windows 的极简 GNU

MinGW - 适用于 Windows 的极简 GNU

这个项目正在迁移到osdn.net/projects/mingw的过程中,你可以继续在那里关注我们。MinGW:GNU编译器集合(GCC)的本地Windows移植版本,可自由分发的导入库和用于构建本地Windows应用程序的头文件;包括对MSVC运行时的扩展,以支持C99功能。MinGW的所有软件都可以在64位Windows平台上运行。

安全考试浏览器

安全考试浏览器

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

DVWA

DVWA

Damn Vulnerable Web App (DVWA) 是一个PHP/MySQL的Web应用程序,非常容易受到攻击。它的主要目标是成为安全专业人员在合法环境中测试自己的技能和工具的辅助工具,帮助Web开发人员更好地理解保护Web应用程序的过程,并帮助教师/学生在课堂环境中教授/学习Web应用程序安全。DVWA的目标是通过简单直接的界面练习一些最常见的Web漏洞,难度各不相同。请注意,该软件中

Dreamweaver Mac版

Dreamweaver Mac版

视觉化网页开发工具

EditPlus 中文破解版

EditPlus 中文破解版

体积小,语法高亮,不支持代码提示功能