目录
1. stack overflow上的回答(翻译)
2. 自己动手实践
2.2.1 flex容器不设置高度
2.2.2 flex容器设置高度
3. 总结
首页 web前端 css教程 CSS flex布局属性:align-items和align-content的区别

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

Oct 24, 2022 am 09:26 AM
javascript

在用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 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 className=&#39;i5&#39;>5</div>
     <div className=&#39;i6&#39;>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中文网其他相关文章!

本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

热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 尊渡假赌尊渡假赌尊渡假赌

热工具

记事本++7.3.1

记事本++7.3.1

好用且免费的代码编辑器

SublimeText3汉化版

SublimeText3汉化版

中文版,非常好用

禅工作室 13.0.1

禅工作室 13.0.1

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

Dreamweaver CS6

Dreamweaver CS6

视觉化网页开发工具

SublimeText3 Mac版

SublimeText3 Mac版

神级代码编辑软件(SublimeText3)

如何使用WebSocket和JavaScript实现在线语音识别系统 如何使用WebSocket和JavaScript实现在线语音识别系统 Dec 17, 2023 pm 02:54 PM

如何使用WebSocket和JavaScript实现在线语音识别系统引言:随着科技的不断发展,语音识别技术已经成为了人工智能领域的重要组成部分。而基于WebSocket和JavaScript实现的在线语音识别系统,具备了低延迟、实时性和跨平台的特点,成为了一种被广泛应用的解决方案。本文将介绍如何使用WebSocket和JavaScript来实现在线语音识别系

WebSocket与JavaScript:实现实时监控系统的关键技术 WebSocket与JavaScript:实现实时监控系统的关键技术 Dec 17, 2023 pm 05:30 PM

WebSocket与JavaScript:实现实时监控系统的关键技术引言:随着互联网技术的快速发展,实时监控系统在各个领域中得到了广泛的应用。而实现实时监控的关键技术之一就是WebSocket与JavaScript的结合使用。本文将介绍WebSocket与JavaScript在实时监控系统中的应用,并给出代码示例,详细解释其实现原理。一、WebSocket技

如何利用JavaScript和WebSocket实现实时在线点餐系统 如何利用JavaScript和WebSocket实现实时在线点餐系统 Dec 17, 2023 pm 12:09 PM

如何利用JavaScript和WebSocket实现实时在线点餐系统介绍:随着互联网的普及和技术的进步,越来越多的餐厅开始提供在线点餐服务。为了实现实时在线点餐系统,我们可以利用JavaScript和WebSocket技术。WebSocket是一种基于TCP协议的全双工通信协议,可以实现客户端与服务器的实时双向通信。在实时在线点餐系统中,当用户选择菜品并下单

如何使用WebSocket和JavaScript实现在线预约系统 如何使用WebSocket和JavaScript实现在线预约系统 Dec 17, 2023 am 09:39 AM

如何使用WebSocket和JavaScript实现在线预约系统在当今数字化的时代,越来越多的业务和服务都需要提供在线预约功能。而实现一个高效、实时的在线预约系统是至关重要的。本文将介绍如何使用WebSocket和JavaScript来实现一个在线预约系统,并提供具体的代码示例。一、什么是WebSocketWebSocket是一种在单个TCP连接上进行全双工

JavaScript和WebSocket:打造高效的实时天气预报系统 JavaScript和WebSocket:打造高效的实时天气预报系统 Dec 17, 2023 pm 05:13 PM

JavaScript和WebSocket:打造高效的实时天气预报系统引言:如今,天气预报的准确性对于日常生活以及决策制定具有重要意义。随着技术的发展,我们可以通过实时获取天气数据来提供更准确可靠的天气预报。在本文中,我们将学习如何使用JavaScript和WebSocket技术,来构建一个高效的实时天气预报系统。本文将通过具体的代码示例来展示实现的过程。We

简易JavaScript教程:获取HTTP状态码的方法 简易JavaScript教程:获取HTTP状态码的方法 Jan 05, 2024 pm 06:08 PM

JavaScript教程:如何获取HTTP状态码,需要具体代码示例前言:在Web开发中,经常会涉及到与服务器进行数据交互的场景。在与服务器进行通信时,我们经常需要获取返回的HTTP状态码来判断操作是否成功,根据不同的状态码来进行相应的处理。本篇文章将教你如何使用JavaScript获取HTTP状态码,并提供一些实用的代码示例。使用XMLHttpRequest

javascript中如何使用insertBefore javascript中如何使用insertBefore Nov 24, 2023 am 11:56 AM

用法:在JavaScript中,insertBefore()方法用于在DOM树中插入一个新的节点。这个方法需要两个参数:要插入的新节点和参考节点(即新节点将要被插入的位置的节点)。

如何在JavaScript中获取HTTP状态码的简单方法 如何在JavaScript中获取HTTP状态码的简单方法 Jan 05, 2024 pm 01:37 PM

JavaScript中的HTTP状态码获取方法简介:在进行前端开发中,我们常常需要处理与后端接口的交互,而HTTP状态码就是其中非常重要的一部分。了解和获取HTTP状态码有助于我们更好地处理接口返回的数据。本文将介绍使用JavaScript获取HTTP状态码的方法,并提供具体代码示例。一、什么是HTTP状态码HTTP状态码是指当浏览器向服务器发起请求时,服务

See all articles