Flexbox - 如何在两个元素之间拆分行 50/50 并在宽度低于最小宽度时换行?
Flexbox - How to split row 50/50 between two elements and wrap if width falls below min-width?
我有一个简单的 div,其中包含两张垫卡。以下是 div 和 div 内卡片的 CSS 属性:
.cards {
display: flex;
flex-wrap: wrap;
align-content: center;
justify-content: center;
}
mat-card {
margin: 10px;
width: 45%;
min-width: 300px;
}
这里是重现问题的示例 HTML 模板:
<div class="cards">
<mat-card>
<mat-card-header>
<mat-card-title> Card 1 </mat-card-title>
</mat-card-header>
<mat-card-content>
Name: Test 1 <br />
Type: Type 1 <br />
Property 1: 1 <br />
Property 2: 2 <br />
Property 3: 3 <br />
</mat-card-content>
</mat-card>
<mat-card>
<mat-card-header>
<mat-card-title> Card 2 </mat-card-title>
</mat-card-header>
<mat-card-content>
Name: Test 2 <br />
Type: Type 2 <br />
Property 1: 1 <br />
Property 2: 2 <br />
Property 3: 3 <br />
</mat-card-content>
</mat-card>
</div>
我希望每张卡片占该行的 50%。如果卡片的最小宽度太大,无法将两张卡片都放入行中,则 div 内容应该换行,因此卡片现在彼此下方。环绕后,每张卡片应填充可用宽度的 100%。
在我当前的 CSS 布局中,内容换行的方式太早了,而且我似乎也无法将每张卡片的宽度设置为 50%,因为这会导致它立即换行。这是一个说明问题的stackblitz:
StackBlitz
如何获得所需的行为?
只需将width: 45%
更改为flex-grow: 1
,弹性项目将尝试占据整行。 flex-basis
控制它们相对于彼此的大小,默认情况下它们将尝试保持相同的大小。由于 16px
的填充,目前它们在 332px
换行。
mat-card {
margin: 10px;
min-width: 300px;
flex-grow: 1;
}
我有一个简单的 div,其中包含两张垫卡。以下是 div 和 div 内卡片的 CSS 属性:
.cards {
display: flex;
flex-wrap: wrap;
align-content: center;
justify-content: center;
}
mat-card {
margin: 10px;
width: 45%;
min-width: 300px;
}
这里是重现问题的示例 HTML 模板:
<div class="cards">
<mat-card>
<mat-card-header>
<mat-card-title> Card 1 </mat-card-title>
</mat-card-header>
<mat-card-content>
Name: Test 1 <br />
Type: Type 1 <br />
Property 1: 1 <br />
Property 2: 2 <br />
Property 3: 3 <br />
</mat-card-content>
</mat-card>
<mat-card>
<mat-card-header>
<mat-card-title> Card 2 </mat-card-title>
</mat-card-header>
<mat-card-content>
Name: Test 2 <br />
Type: Type 2 <br />
Property 1: 1 <br />
Property 2: 2 <br />
Property 3: 3 <br />
</mat-card-content>
</mat-card>
</div>
我希望每张卡片占该行的 50%。如果卡片的最小宽度太大,无法将两张卡片都放入行中,则 div 内容应该换行,因此卡片现在彼此下方。环绕后,每张卡片应填充可用宽度的 100%。
在我当前的 CSS 布局中,内容换行的方式太早了,而且我似乎也无法将每张卡片的宽度设置为 50%,因为这会导致它立即换行。这是一个说明问题的stackblitz: StackBlitz
如何获得所需的行为?
只需将width: 45%
更改为flex-grow: 1
,弹性项目将尝试占据整行。 flex-basis
控制它们相对于彼此的大小,默认情况下它们将尝试保持相同的大小。由于 16px
的填充,目前它们在 332px
换行。
mat-card {
margin: 10px;
min-width: 300px;
flex-grow: 1;
}