为什么弹性项目不会缩小到超过内容大小?

2024-01-10

我有 4 个 Flexbox 列,一切正常,但是当我向列中添加一些文本并将其设置为大字体大小时,由于 Flex 属性,它使列比应有的宽度更宽。

我尝试使用word-break: break-word它很有帮助,但是当我将列的大小调整到非常小的宽度时,文本中的字母被分成多行(每行一个字母),但列的宽度不会小于一个字母的大小。

看这个video http://screencast-o-matic.com/watch/cDetln1tyT(一开始,第一列是最小的,但是当我调整窗口大小时,它是最宽的列。我只想始终尊重 Flex 设置;Flex 大小 1 : 3 : 4 : 4)

我知道,将字体大小和列填充设置为较小会有所帮助......但是还有其他解决方案吗?

我不能使用overflow-x: hidden.

JSFiddle https://jsfiddle.net/78h8wv4o/3/

.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>

Flex 项目的自动最小尺寸

您遇到了弹性盒默认设置。

Flex 项目不能小于其内容沿主轴的大小。

默认值是...

  • min-width: auto
  • min-height: auto

...分别针对行方向和列方向的弹性项目。

您可以通过将弹性项目设置为来覆盖这些默认值:

  • min-width: 0
  • min-height: 0
  • overflow: hidden(或任何其他值,除了visible)

弹性盒规格

4.5.自动最小柔性柔性尺寸 项目 https://www.w3.org/TR/css-flexbox-1/#min-size-auto

为了为弹性项目提供更合理的默认最小尺寸,这 规范引入了新的auto值作为初始值 这min-width and min-heightCSS 2.1 中定义的属性。

关于auto价值...

在一个弹性项目上overflow is visible在主轴中,当在 Flex 项目主轴最小尺寸属性上指定时,指定一个自动最小尺寸。否则它计算为0.

换句话说:

  • The min-width: auto and min-height: auto仅当以下情况时才应用默认值overflow is visible.
  • If the overflow值不是visible,最小尺寸属性的值为0.
  • Hence, overflow: hidden可以替代min-width: 0 and min-height: 0.

and...

  • 最小尺寸算法仅适用于主轴。
  • 例如,行方向容器中的弹性项目不会获得min-height: auto默认情况下。
  • For a more detailed explanation see this post:
    • 最小宽度在 flex-direction: row 和 flex-direction: column 上呈现不同 https://stackoverflow.com/q/40407619/3597276

你已经应用了 min-width: 0 但项目仍然没有缩小?

嵌套 Flex 容器

如果您正在处理 HTML 结构的多个级别上的 Flex 项目,则可能需要覆盖默认值min-width: auto / min-height: auto在更高级别的项目上。

基本上,更高级别的弹性项目min-width: auto可以防止下面嵌套的项目收缩min-width: 0.

例子:

  • Flex 项目收缩时不会小于其内容 https://stackoverflow.com/q/47456839/3597276
  • 让孩子适应父母 https://stackoverflow.com/q/44826555/3597276
  • 空白 CSS 属性给 Flex 带来了问题 https://stackoverflow.com/q/49897730/3597276

浏览器渲染注释

  • Chrome 与 Firefox / Edge

    至少自 2017 年以来,Chrome 似乎要么 (1) 恢复到min-width: 0 / min-height: 0默认值,或 (2) 自动应用0基于神秘算法在某些情况下默认。 (这可能就是他们所说的干涉 https://github.com/WICG/interventions.)因此,许多人看到他们的布局(尤其是所需的滚动条)在 Chrome 中按预期工作,但在 Firefox / Edge 中却不然。这个问题在这里有更详细的介绍:Firefox 和 Chrome 之间的 flex-shrink 差异 https://stackoverflow.com/q/49575838/3597276

  • IE11

    如规范中所述,auto的值min-width and min-height属性是“新的”。这意味着某些浏览器可能仍会呈现0默认值,因为他们在值更新之前实现了弹性布局,并且因为0是初始值min-width and min-height in CSS 2.1 http://www.w3.org/TR/CSS2/visudet.html#min-max-widths. IE11 就是这样的浏览器之一。 https://stackoverflow.com/questions/40052987/flexbox-flex-basis-0px-in-chrome其他浏览器已更新至较新版本auto中定义的值弹性盒规格 http://www.w3.org/TR/css-flexbox-1/#min-size-auto.


修改后的演示

.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>

jsFiddle https://jsfiddle.net/78h8wv4o/4/

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

为什么弹性项目不会缩小到超过内容大小? 的相关文章

  • 如何解决此错误:属性 rel 的原始源值错误

    我正在尝试使用 w3c 验证我的网站 但出现错误 Bad value original source for attribute rel on element link The string original source is not a
  • 古老的“字幕”标签的替代品?

    marquee 标签的标准等效项是什么 我正在寻找 HTML C asp NET 或 ASPX jquery java 脚本的解决方案 marquee 标签未包含在标准中 因为它是 视觉 标签 而不是 语义 标签 因此 您想要的任何语言都没
  • 链接无效

    我正在尝试使用以下命令创建一组指向页面中特定部分的链接 a href 符号 但它似乎不起作用 点击链接似乎没有任何反应right click gt open in a new tab更改 url 但不会移动到页面的其他部分 我使用的是火狐浏
  • save_and_open_page 已停止提供我的 CSS

    我的测试设置工作得很好 每当我打电话时 都能提供正确格式的 css 页面save and open page从测试中 然后 我设置了一些 javascript 测试 并对我的设置进行了一些更改 抱歉 我无法详细说明所有内容 我没有足够详细地
  • 在 Android 上禁用标注(上下文菜单)

    在网络应用程序中 我需要禁用移动浏览器在触摸并按住 长按 触摸目标 例如 img 或链接 我已经在使用了 webkit touch callout none 它在 iPhone 和 iPad 上运行良好 但似乎不适用于 Android 在
  • 使用 python 在一个 html 页面中显示分割数据框的 HTML 代码

    我是 html css 新手 所以对以 html 格式显示的数据有疑问 我有一个很长的列表 我想将其拆分并以 html 格式显示为两个单独的列 例如 而不是 Col1 Col2 1 a 2 a 3 a 4 a 5 b 6 b 7 b 8 b
  • jQuery mobile 中的文本区域高度和宽度?

    我修复了 jQuery mobile 中文本区域元素的高度 并且在纵向中得到了完美的高度和宽度 但在横向中宽度没有放大 谁能帮我 提前致谢 HTML
  • 在 Angular html 模板中访问常量枚举

    假设我有一个常量枚举 export const enum MyConstEnum Value1 Value1 Value2 Value2 Value3 Value3 现在我想在我的 Angular 模板中使用它 span This has
  • 将鼠标悬停在原点时会触发translateY()

    当您将光标移动到按钮底部时 是否可以无限期地不触发动画 它看起来是这样的 gif https i stack imgur com QwdHW gif and codepen https codepen io jaeyson pen GwwJ
  • Sass:@use 出错,未定义变量

    我正在使用 Sass 并且想要使用 use关键字而不是 import 因为 import有很多问题 另外只有dart sass支持这个功能 我将node sass改为dart sass 然而 问题出现了 我原来的代码 import carb
  • 如何在其他div id的悬停中使用div显示块

    如何打开div悬停时标记href tag 这是我在悬停 href 标签上显示 div 标签的代码 Services is id of href tag Services is id of div tag Service hover Serv
  • 导航栏下拉菜单(折叠)在 Bootstrap 5 中不起作用

    我在尝试使用以下命令创建响应式菜单或下拉按钮时遇到问题Bootstrap 5一切似乎都正常 导航图标和下拉图标出现 但它不起作用 当我单击nav图标或dropdown按钮 无dropdown menu apears 我想特别提到的是 我还包
  • javascript 选择自定义光标 (svg)

    我正在动态地将光标更改为悬停时的本地 svg element on mouseover function this css cursor url svgs pointer svg 9 30 auto 工作正常 但我想选择该 svg 来操纵其
  • 如何使使用 css 调整大小的图像在 IE 中看起来不错?

    当使用 css 宽度 高度或属性宽度 高度缩放图像时 IE6 和 IE7 无法很好地缩放网页中的图像 我不确定它默认使用哪种算法 但这不好 在这些浏览器中缩放时 缩放图像会显示锯齿伪影 幸运的是 有一种方法可以通过简单的 css 规则强制
  • 如何使用角度材料在具有可扩展行的表格中创建嵌套垫表

    我有以下数据 id c9d5ab1a subdomain wing domain aircraft part id c9d5ab1a info mimetype application json info dependent parent
  • CSS 到底如何计算相对尺寸

    我想更好地理解某些 CSS 行为 这与具体问题无关 我只是在调试网站时遇到的 让我们在固定位置的 div 中放置一个全宽图像 div img style width 100 src https via placeholder com 150
  • 如何在模态打开时防止主体滚动

    我在用着W3schools 模态脚本 https www w3schools com howto tryit asp filename tryhow css modal我想添加一个功能 防止模型打开时整个主体滚动 我根据我的需要对原始脚本做
  • 如何使用 JavaScript 或 jQuery 克隆 HTML 元素的样式对象?

    我正在尝试克隆元素的样式对象 这应该允许我在更改后重置所述元素的样式 例如 el style left 50px curr style left 50px Modify the elements style The cloned style
  • 使用 CSS 折叠和展开元素

    我正在尝试构建一个页面 加载时仅可见标题 并且 当用户单击标题时 每个标题下方的表格会在隐藏和显示状态之间切换 我的限制是只能在 CSS 中执行此操作 这是我到目前为止想到的 https jsfiddle net Argoron c1ypx
  • 禁用允许文本选择的

    残疾人可以吗

随机推荐