Flexbox 均匀大小的元素而不考虑内容
Flexbox evenly sized elements regardless of contents
如何让每个正方形的大小都一样???
Preview Issue on JSBIN | View Issue Code on JSBIN
我正在使用 flexbox 创建网格布局。大多数网格单元没有内容,一些网格单元有内容。当一个单元格有内容时,它会丢弃所有内容。 无论内容如何,如何确保所有单元格均匀?
HTML
我有三行,每行有三个单元格。只有中心单元格的中心行包含子项。
<div>
<div></div>
<div></div>
<div></div>
</div>
<div>
<div></div>
<div><span>contains span</span></div>
<div></div>
</div>
<div>
<div></div>
<div></div>
<div></div>
</div>
CSS
在 css 中,中心 space 比其他方块大。
body, html {
height: 100%;
}
body {
margin: 0;
padding: 0;
display: flex;
flex-direction: column;
}
body>div {
display: flex;
}
body>div>div {
border: solid 1px blue;
}
div {
flex-grow: 1;
}
body>div:nth-child(2)>div:nth-child(2) {
display: flex;
align-items: center;
justify-content: center;
}
您应该使用flex-basis
来指定弹性项目的初始长度。
body, html {
height: 100%;
}
body {
margin: 0;
padding: 0;
display: flex;
flex-direction: column;
}
body>div {
display: flex;
}
body>div>div {
border: solid 1px blue;
}
div {
flex-grow: 1;
flex-basis: 80px; /*set the initial length*/
}
body>div:nth-child(2)>div:nth-child(2) {
display: flex;
align-items: center;
justify-content: center;
}
<div>
<div></div>
<div></div>
<div></div>
</div>
<div>
<div></div>
<div><span>contains span asdsa asd asd asd asdsad ads asd sad</span></div>
<div></div>
</div>
<div>
<div></div>
<div></div>
<div></div>
</div>
您正在使用 flex-grow: 1
。这意味着 flex 项目的初始宽度将是其内容的宽度,然后可用 space 将平均分配。
但是,您希望弹性项目具有相同的宽度,因此您希望忽略其内容的宽度。您可以使用
实现此目的
flex: 1;
另外,Flexbox引入auto
作为min-width
的初始值。这在某些情况下可能会产生不同的宽度,因此为了安全起见,最好添加 min-width: 0
或将 overflow
设置为除 visible
之外的任何内容
body,
html {
height: 100%;
}
body {
margin: 0;
padding: 0;
display: flex;
flex-direction: column;
}
body > div {
display: flex;
}
body > div > div {
border: solid 1px blue;
}
div {
flex: 1;
min-width: 0;
}
body > div:nth-child(2) > div:nth-child(2) {
display: flex;
align-items: center;
justify-content: center;
}
<div>
<div></div>
<div></div>
<div></div>
</div>
<div>
<div></div>
<div><span>contains span</span></div>
<div></div>
</div>
<div>
<div></div>
<div></div>
<div></div>
</div>
设置33%而已flex-basis
body>div>div {
border: solid 1px blue;
flex: 0 0 33%;
}
body, html {
height: 100%;
}
body {
margin: 0;
padding: 0;
display: flex;
flex-direction: column;
}
body>div {
display: flex;
}
body>div>div {
border: solid 1px blue;
flex: 0 0 33%;
}
div {
flex-grow: 1;
}
body>div:nth-child(2)>div:nth-child(2) {
display: flex;
align-items: center;
justify-content: center;
}
<div>
<div></div>
<div><span>contains span</span></div>
<div></div>
</div>
<div>
<div></div>
<div></div>
<div></div>
</div>
<div>
<div></div>
<div></div>
<div></div>
</div>
如何让每个正方形的大小都一样???
Preview Issue on JSBIN | View Issue Code on JSBIN
我正在使用 flexbox 创建网格布局。大多数网格单元没有内容,一些网格单元有内容。当一个单元格有内容时,它会丢弃所有内容。 无论内容如何,如何确保所有单元格均匀?
HTML
我有三行,每行有三个单元格。只有中心单元格的中心行包含子项。
<div>
<div></div>
<div></div>
<div></div>
</div>
<div>
<div></div>
<div><span>contains span</span></div>
<div></div>
</div>
<div>
<div></div>
<div></div>
<div></div>
</div>
CSS
在 css 中,中心 space 比其他方块大。
body, html {
height: 100%;
}
body {
margin: 0;
padding: 0;
display: flex;
flex-direction: column;
}
body>div {
display: flex;
}
body>div>div {
border: solid 1px blue;
}
div {
flex-grow: 1;
}
body>div:nth-child(2)>div:nth-child(2) {
display: flex;
align-items: center;
justify-content: center;
}
您应该使用flex-basis
来指定弹性项目的初始长度。
body, html {
height: 100%;
}
body {
margin: 0;
padding: 0;
display: flex;
flex-direction: column;
}
body>div {
display: flex;
}
body>div>div {
border: solid 1px blue;
}
div {
flex-grow: 1;
flex-basis: 80px; /*set the initial length*/
}
body>div:nth-child(2)>div:nth-child(2) {
display: flex;
align-items: center;
justify-content: center;
}
<div>
<div></div>
<div></div>
<div></div>
</div>
<div>
<div></div>
<div><span>contains span asdsa asd asd asd asdsad ads asd sad</span></div>
<div></div>
</div>
<div>
<div></div>
<div></div>
<div></div>
</div>
您正在使用 flex-grow: 1
。这意味着 flex 项目的初始宽度将是其内容的宽度,然后可用 space 将平均分配。
但是,您希望弹性项目具有相同的宽度,因此您希望忽略其内容的宽度。您可以使用
实现此目的flex: 1;
另外,Flexbox引入auto
作为min-width
的初始值。这在某些情况下可能会产生不同的宽度,因此为了安全起见,最好添加 min-width: 0
或将 overflow
设置为除 visible
body,
html {
height: 100%;
}
body {
margin: 0;
padding: 0;
display: flex;
flex-direction: column;
}
body > div {
display: flex;
}
body > div > div {
border: solid 1px blue;
}
div {
flex: 1;
min-width: 0;
}
body > div:nth-child(2) > div:nth-child(2) {
display: flex;
align-items: center;
justify-content: center;
}
<div>
<div></div>
<div></div>
<div></div>
</div>
<div>
<div></div>
<div><span>contains span</span></div>
<div></div>
</div>
<div>
<div></div>
<div></div>
<div></div>
</div>
设置33%而已flex-basis
body>div>div {
border: solid 1px blue;
flex: 0 0 33%;
}
body, html {
height: 100%;
}
body {
margin: 0;
padding: 0;
display: flex;
flex-direction: column;
}
body>div {
display: flex;
}
body>div>div {
border: solid 1px blue;
flex: 0 0 33%;
}
div {
flex-grow: 1;
}
body>div:nth-child(2)>div:nth-child(2) {
display: flex;
align-items: center;
justify-content: center;
}
<div>
<div></div>
<div><span>contains span</span></div>
<div></div>
</div>
<div>
<div></div>
<div></div>
<div></div>
</div>
<div>
<div></div>
<div></div>
<div></div>
</div>