文本正在调整 flexbox 子项的大小而不是换行(使用 flex-grow)[重复]
Posted
技术标签:
【中文标题】文本正在调整 flexbox 子项的大小而不是换行(使用 flex-grow)[重复]【英文标题】:Text is resizing flexbox children instead of wrapping (with flex-grow) [duplicate] 【发布时间】:2019-07-01 22:32:12 【问题描述】:我正在使用 flex-grow 和媒体查询来尝试创建一个简单且响应迅速的网站。但是,文本似乎不是换行,而是调整其所在的包含 div 的大小并抵消其他所有内容。有谁知道为什么会这样?
我认为这种行为与我使用 flex-grow 的事实有关。我尝试过设置最小/最大宽度,还尝试了各种不同的自动换行属性,但都没有运气。
这是我的代码:
jsFiddle
<div id="container">
<div id="title">
<h1>Title</h1>
</div>
<div class="work" id="motion">
<h2>Sub</h2>
</div>
<div class="work" id="print">
<h2>Sub</h2>
</div>
<div class="work" id="interaction">
<h2>Sub</h2>
</div>
</div>
*
margin: 0;
padding: 0;
html,
body
height: 100%;
width: 100%;
h1,
h2,
h3,
h4,
h5,
h6,
p
font-family: sans-serif;
font-weight: normal;
max-width: 100%;
#container h1,
h2
padding: 1rem;
#container
height: 100%;
display: flex;
flex-direction: row;
#title
background-color: red;
flex-grow: 2;
margin: 1em;
min-height: 15em;
.work
margin: 1em;
flex-grow: 1;
background-color: gray;
min-width: 4em;
#motion,
#print,
#title
margin-right: 0;
margin-bottom: 1em;
#interaction
@media only screen and (max-width: 1020px)
body
background-color: blue;
#container
flex-direction: column;
flex-wrap: wrap;
height: 100%;
#motion,
#print
margin-right: 1em;
margin-bottom: 0;
.work
min-height: 10em;
#title
height: 100%;
@media only screen and (max-width: 600px)
body
background-color: yellow;
#motion,
#print,
#title
margin-right: 1em;
margin-bottom: 0;
#container
flex-wrap: nowrap;
【问题讨论】:
【参考方案1】:您的 flexbox 子级没有设置任何宽度,因此当您拥有更多文本内容时,这些 div 会增长。
jsFiddle
您可以添加如下内容:
#container > div
width: calc(25% - 2em); /* Minus 2 em for the 1em margin on left and right */
@media only screen and (max-width: 1020px)
#container>div
width: calc(33% - 2em);
@media only screen and (max-width: 600px)
#container>div
width: calc(100% - 2em);
*
margin: 0;
padding: 0;
html,
body
height: 100%;
width: 100%;
h1,
h2,
h3,
h4,
h5,
h6,
p
font-family: sans-serif;
font-weight: normal;
max-width: 100%;
#container h1,
h2
padding: 1rem;
#container
height: 100%;
display: flex;
flex-direction: row;
#container>div
width: calc(25% - 2em);
#title
background-color: red;
flex-grow: 2;
margin: 1em;
min-height: 15em;
.work
margin: 1em;
flex-grow: 1;
background-color: gray;
min-width: 4em;
#motion,
#print,
#title
margin-right: 0;
margin-bottom: 1em;
#interaction
@media only screen and (max-width: 1020px)
body
background-color: blue;
#container
flex-direction: column;
flex-wrap: wrap;
height: 100%;
#container>div
width: calc(33% - 2em);
#motion,
#print
margin-right: 1em;
margin-bottom: 0;
.work
min-height: 10em;
#title
height: 100%;
@media only screen and (max-width: 600px)
body
background-color: yellow;
#motion,
#print,
#title
margin-right: 1em;
margin-bottom: 0;
#container
flex-wrap: nowrap;
#container>div
width: calc(100% - 2em);
<div id="container">
<div id="title">
<h1>Title</h1>
</div>
<div class="work" id="motion">
<h2>Sub Sub Sub Sub Sub Sub Sub Sub Sub Sub </h2>
</div>
<div class="work" id="print">
<h2>Sub</h2>
</div>
<div class="work" id="interaction">
<h2>Sub</h2>
</div>
</div>
【讨论】:
当然,我犯了明显的错误。这如何与 flex-grow 一起使用?我还能用它把整个身体分成几部分吗? flex-grow 将指示在孩子之间分配多少 剩余 空间。 fromthis guide on flexbox"如果所有项目的 flex-grow 设置为 1,则容器中的剩余空间将平均分配给所有子项。如果其中一个子项的值为 2,则剩余空间将占用空间是其他空间的两倍(或者它会尝试,至少)。”。在您的情况下,您不应该有任何剩余空间,因为我们已经为您的 flex 子项设置了一个基于百分比的宽度,该百分比将等于 100%。 太棒了,谢谢 - 澄清一下:我应该完全删除flex-grow
并将每个子 div 设置为 % 以便它们等于 100% 吗?另外,如何在我设置的 %s 中设置每个因素的边距?只要我使用calc()
包含它们就可以了吗?
边距不应计入百分比宽度。如果您在元素上设置了 box-sizing: border-box;
(通常是 CSS 框架和重置样式表的一部分),则填充将。如果您不喜欢使用 calc
函数并且希望使用像 width: 25%;
这样的大小,您可以这样做 - 只需添加一个内部 div 包装器并将其填充设置为 flex 子级的边距,然后删除边距从孩子们那里。我将用一个例子来更新我的答案。此时您可以移除 flex grow。当您没有设置明确的宽度并且您的内容不是 100% 时,flex-grow 很重要以上是关于文本正在调整 flexbox 子项的大小而不是换行(使用 flex-grow)[重复]的主要内容,如果未能解决你的问题,请参考以下文章