我有4个flexbox列,一切都很好,但当我向列添加一些文本并将其设置为大字体大小时,它会使列比它应该的更宽,这是由于flex属性。
我尝试使用word-break:break-word
,它很有用,但当我将列的大小调整为非常小的宽度时,文本中的字母会被分成多行(每行一个字母),而列的宽度不会小于一个字母的大小。
观看此视频(在开始时,第一列是最小的,但当我调整窗口大小时,它是最宽的列。我只是想始终尊重flex的设置;flex的大小为1:3:4:4)
我知道,将字体大小和列填充设置为较小会有帮助。。。 但是有没有其他的解决办法呢?
我不能使用溢出-x:hidded
。
JSFiddle
null
.container {
display: flex;
width: 100%
}
.col {
min-height: 200px;
padding: 30px;
word-break: break-word
}
.col1 {
flex: 1;
background: orange;
font-size: 80px
}
.col2 {
flex: 3;
background: yellow
}
.col3 {
flex: 4;
background: skyblue
}
.col4 {
flex: 4;
background: red
}
<div class="container">
<div class="col col1">Lorem ipsum dolor</div>
<div class="col col2">Lorem ipsum dolor</div>
<div class="col col3">Lorem ipsum dolor</div>
<div class="col col4">Lorem ipsum dolor</div>
</div>
null
您将遇到flexbox默认设置。
flex项不能小于其内容沿主轴的大小。
默认值是。。。
最小宽度:自动
最小高度:自动
。。。分别用于行方向和列方向的柔性项。
您可以通过将flex项设置为:
最小宽度:0
最小高度:0
溢出:隐藏
(或除可见
之外的任何其他值)4.5. 弹性项目的自动最小大小
为了为flex项提供更合理的默认最小大小,本规范引入了一个新的auto
值,作为CSS 2.1中定义的min-width
和min-height
属性的初始值。
关于自动
值。。。
对于溢出
在主轴中为可见
的flex项,当在flex项的主轴最小尺寸属性上指定时,将指定自动最小尺寸。 否则计算为0
。
换句话说:
min-width:auto
和min-height:auto
默认值仅在overflow
为可见
时应用。溢出
值不是可见
,则min-size属性的值为0
。溢出:隐藏
可以替代min-width:0
和min-height:0
。然后。。。
min-height:auto
。嵌套Flex容器
如果要在HTML结构的多个级别上处理flex项,则可能需要覆盖较高层项的默认min-width:auto
/min-height:auto
。
基本上,具有min-width:auto
的高级flex项可以防止下面嵌套的具有min-width:0
的项收缩。
示例:
>
Chrome与Firefox/Edge
至少自2017年以来,Chrome似乎要么(1)恢复到min-width:0
/min-height:0
默认值,要么(2)基于神秘算法在某些情况下自动应用0
默认值。 (这可能就是他们所谓的干预。) 因此,很多人都看到他们的布局(尤其是想要的滚动条)在Chrome中如预期的那样工作,但在Firefox/Edge中却并非如此。 Firefox和Chrome之间的伸缩差异将在这里得到更详细的讨论
IE11
如规范中所述,min-width
和min-height
属性的auto
值是“new”。 这意味着某些浏览器可能在默认情况下仍然呈现0
值,因为它们在值更新之前就实现了flex布局,并且因为0
是CSS 2.1中min-width
和min-height
的初始值。 IE11就是这样一种浏览器。 其他浏览器已更新到flexbox规范中定义的较新的auto
值。
null
.container {
display: flex;
}
.col {
min-height: 200px;
padding: 30px;
word-break: break-word
}
.col1 {
flex: 1;
background: orange;
font-size: 80px;
min-width: 0; /* NEW */
}
.col2 {
flex: 3;
background: yellow
}
.col3 {
flex: 4;
background: skyblue
}
.col4 {
flex: 4;
background: red
}
<div class="container">
<div class="col col1">Lorem ipsum dolor</div>
<div class="col col2">Lorem ipsum dolor</div>
<div class="col col3">Lorem ipsum dolor</div>
<div class="col col4">Lorem ipsum dolor</div>
</div>