align-items和align-content之间的区别是什么?
当前回答
对齐项目和对齐内容的效果都是沿着交叉轴。
如果弯曲方向是行,那么主轴就是从左到右的,如果弯曲方向是列,那么主轴就是从上到下的。
在下面的例子中,我们假设弯曲方向是行,即主轴是从左到右,交叉轴是从上到下。
Align-content只有在有flex-wrap: wrap和容器中有多个flex-line时才有效。
如果有多个柔线,对齐内容的优先级高于对齐项。
什么是专线?
伸缩容器中伸缩项的每一行或每一列都是一条伸缩行。当容器中没有足够的空间时,就会出现多行,而flex项目将使用下一行(在flex方向:row;)来放入。在flex-direction:列中,它会将伸缩项添加到下一行。
例子
默认情况下,flex是一个灵活的容器,即它可以容纳任意数量的元素,除非我们指定了flex-wrap: wrap。如果没有wrap, flex-items将溢出容器(如果flex-direction为row)。
align-content例子
.container{ border: 5px solid #000; height: 100vh; display: flex; flex-wrap: wrap; align-content: flex-end; } .box{ height:100px; font-size: 2rem; width: 33.33%; } .box1{ background: purple; } .box2{ background: #ff8c00; } .box3{ background: lime; } .box4{ background: #008080; } .box5{ background-color: red; } <div class="container"> <div class="box box1">box 1</div> <div class="box box2">box 2</div> <div class="box box3">box 3</div> <div class="box box4">box 4</div> <div class="box box5">box 5</div> </div>
在上面的例子中,如果有flex-wrap: no-wrap,那么align-content不会影响我们的布局。
对齐项目例子
align-items属性确定伸缩项如何沿交叉轴在伸缩线内定位。
.container{ border: 5px solid #000; height: 100vh; display: flex; flex-wrap: wrap; align-items: flex-end; } .box{ height:100px; font-size: 2rem; width: 33.33%; } .box1{ background: purple; } .box2{ background: #ff8c00; } .box3{ background: lime; } .box4{ background: #008080; } .box5{ background-color: red; } <div class="container"> <div class="box box1">box 1</div> <div class="box box2">box 2</div> <div class="box box3">box 3</div> <div class="box box4">box 4</div> <div class="box box5">box 5</div> </div>
如果align-content和align-items被声明在具有flex-wrap: wrap属性的容器上,如果有多个flex-line,则align-content属性的优先级高于align-items。
align-content and align-items priority example .container{ border: 5px solid #000; height: 100vh; display: flex; flex-wrap: wrap; align-content: flex-end; align-items: flex-start; } .box{ height:100px; font-size: 2rem; width: 33.33%; } .box1{ background: purple; } .box2{ background: #ff8c00; } .box3{ background: lime; } .box4{ background: #008080; } .box5{ background-color: red; } <div class="container"> <div class="box box1">box 1</div> <div class="box box2">box 2</div> <div class="box box3">box 3</div> <div class="box box4">box 4</div> <div class="box box5">box 5</div> </div>
其他回答
第一部分
对齐项目只适用于单行的盒子。假设容器内的一行中有4个盒子。然后,align-items将应用于将这些框对齐到一行中。如果flex-direction是row(默认值),那么align-items将垂直排列框,如果它的column则水平排列框。
第二部分
继续上面的单行盒子,如果我们再增加一行4个盒子,现在有8个盒子,每行4个。这里align-content出现在画面中,如果我们对容器应用align-content,它将被应用到总共有8个盒子的两行。如果我们应用align-content:center,它将在容器中居中。在这种意义上,align-content用于排列多行灵活的盒子。
Align-items:居中,align-content: flex-start
根据我在这里的理解:
当您使用align-item或justify-item时,您正在分别沿列轴或行轴调整网格项中的内容。
但是: 如果使用align-content或justify-content,则是沿着列轴或行轴设置网格的位置。当你在一个更大的容器中有一个网格,宽度或高度是固定的(使用px)时,就会发生这种情况。
首先,align-items用于单行中的项目。因此,对于主轴上的单行元素,align-items会将这些元素各自对齐,并从下一行的新视角开始。
现在,align-content不会干扰一行中的项,而是会干扰行本身。因此,align-content将尝试根据彼此和flex容器对齐行。
检查这个小提琴:https://jsfiddle.net/htym5zkn/8/
来自flexboxfroggy.com的例子:
这将花费你10-20分钟,在21级你会找到你的问题的答案。
Align-content决定行与行之间的间距 Align-items决定在容器中如何将项目作为一个整体进行对齐。 当只有一行时,align-content没有作用
在阅读了一些答案后,他们正确地识别出,如果flex内容没有被包装,对齐内容不会产生影响。然而,他们不理解的是,当有包装内容时,对齐项仍然发挥着重要作用:
在下面的两个示例中,align-items用于将每行中的项居中,然后我们更改align-content以查看其效果。
示例1:
align-content: flex-start;
示例2:
align-content: flex-end;
代码如下:
<div class="container">
<div class="child" style="height: 30px;">1</div>
<div class="child" style="height: 50px;">2</div>
<div class="child" style="height: 60px;">3</div>
<div class="child" style="height: 40px;">4</div>
<div class="child" style="height: 50px;">5</div>
<div class="child" style="height: 20px;">6</div>
<div class="child" style="height: 90px;">7</div>
<div class="child" style="height: 50px;">8</div>
<div class="child" style="height: 30px;">9</div>
<div class="child" style="height: 40px;">10</div>
<div class="child" style="height: 30px;">11</div>
<div class="child" style="height: 60px;">12</div>
</div>
<style>
.container {
display: flex;
width: 300px;
flex-flow: row wrap;
justify-content: space-between;
align-items: center;
align-content: flex-end;
background: lightgray;
height: 400px;
}
.child {
padding: 12px;
background: red;
border: solid 1px black;
}
</style>