了解使用 Overflow:hidden 的内联块元素的换行行为

2024-04-29

我想要两个inline-block元素保留在同一行,无论它们如何width or margin.

快速解决方案是申请white-space: nowrap到容器。 Flex 和 float 是同样有效的替代方案。

我只是坚持找出特定的包装行为white-space: normal.

情况是这样的:

  1. 那里有两个inline-block块级容器中的元素。
  2. 容器的宽度固定为500px。
  3. 每个child的宽度固定为200px。
  4. 容器设置为overflow: hidden.

有还是没有white-space: nowrap,盒子 A 永远不会包装。其尺寸width or margin-left没关系;盒子A将会消失在虚空中overflow: hidden.

这是 A 框margin-left: 400px(容器有overflow: hidden; white-space: normal):

请注意上图中盒子 B 的包装方式。它did not消失在overflow: hidden.

这是 B 框margin-left: 250px(容器与上面相同;A 框重置):

这是 B 框margin-left: 400px:

与 A 区不同的是,B 区拒绝留在第一线并只是隐藏起来。

所以规则似乎是:

With white-space: normal,只有该行的第一个元素才会受到尊重overflow: hidden。后续元素将换行但尊重overflow: hidden在后续行中。

用第三个元素测试这个理论似乎证明它是正确的:

这是 B 框margin-left: 350px和一个新的 Box Cmargin-left: 350px:

所以看来一个元素不能强迫另一个元素尊重overflow: hidden他们共同的父母。

有人确切知道发生了什么,和/或在规范中定义了这种行为吗?

这是溢出、换行、内联块的问题,还是多种因素的组合?

我在这里检查过但没有找到任何东西:https://drafts.c​​sswg.org/css-text-3/#white-space-property https://drafts.csswg.org/css-text-3/#white-space-property

操场 https://jsfiddle.net/bgqshs0o/1/


从我的回答到这个相关问题 https://stackoverflow.com/questions/33395838/why-are-these-inline-block-divs-wrapping-to-the-next-line-inspite-of-their-paren/33396321#33396321:

一般来说,内联水平盒子会尽力避免容器溢出。[...]

的价值overflow在容器上不影响whether or when其内容溢出;它只会改变它及其内容在溢出时的呈现方式does occur.

并从spec https://www.w3.org/TR/CSS21/visufx.html#overflow-clipping:

通常,块框的内容仅限于框的内容边缘。在某些情况下,盒子可能会溢出,这意味着其内容部分或全部位于盒子之外,例如:

  • 一条线不能被打断,导致行框比块框宽。

这就是为什么,在white-space: normal,换行机会由空格提供,内联级框将在任何机会换行。这包括内联块。内联水平框只有在以下情况下才会溢出其容器:cannot出于任何原因包装。否则它们会包裹起来。

由于内联块具有与块容器盒相同的严格物理结构,因此当内联块是给定行盒上唯一的内联级盒时,它不可能“分解”或换行。这就是为什么当框由于任何原因(包括当它被水平边距偏移时)无法容纳其行框的边界时会发生溢出(即使当前行不是第一行)的原因。

奇怪的是,不间断空格相对于内联块的行为是跨浏览器不一致 https://stackoverflow.com/questions/25041857/why-do-inline-blocks-break-after-non-breaking-space/25043312#25043312。没有人知道为什么。

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

了解使用 Overflow:hidden 的内联块元素的换行行为 的相关文章

  • alignas() 对 sizeof() 的影响 - 强制吗?

    这个程序 struct alignas 4 foo int main return sizeof foo 返回 4 其中 GCC 10 1 和 clang 10 1 以及 icc 19 0 1 这让我想知道 这是强制性的alignas 影响
  • 播放选定的音频,同时暂停/重置其他音频

    我有两个通过按钮的单击事件播放的音频元素 如果选择了另一个元素 我已成功地暂停其中一个元素 但还需要将暂停元素设置回 0 0 秒 即暂停和重置 我知道 Javascript 目前没有stop 导致的方法假设这将通过设置其来完成current
  • 如何将模糊屏幕设置为整页并在点击页面时转到顶部

    CSS1 有效 parentDisable z index 2000 width 100 height 100 display none position absolute left 0 background url images btra
  • 如何在 Safari 上打开本地 html 文件?

    我想打开本地 html 文件Safari集成到我的Swift 3应用 我知道如何使用网址来做到这一点 这是我用来执行此操作的代码 let encodedString url addingPercentEncoding withAllowed
  • 使 css nth-child() 只影响可见

    有没有办法用这个CSS只影响可见元素 table grid tr alt nth child odd background ebeff4 table grid tr alt nth child even background ffffff
  • 带有右侧固定侧边栏的 Bootstrap 响应式网格

    我想创建一个带有类似引导程序的模板 它尊重网格的响应系统 在图中 导航栏和右侧 包含两个按钮 是粘性的 始终显示在视图上 我的问题是右侧 因为在引导网格系统中 右侧块将被视为单行 而主要内容包含多行 我怎样才能做到这一点 围绕整个 Boot
  • 将数组数据从 html 表单传递到 php 数组变量

    我有一张表格来记录一组项目的工作时间 该表单使用项目 ID 小时数和注释字段的数组 表单行是项目数量的循环 该表单将数据传递给 PHP 脚本进行处理 PHP 脚本没有看到数组中的值 它只是给我 Array 作为输出 文档和其他示例让我想知道
  • 是否可以将整个“卡片”包装在 标记中?

    在我的网站中 我有 卡片 每张卡片都包含许多元素 图像 文本 日期等 这有点像 Twitter 中的推文卡 我希望整个卡片都是可点击的 应该是到另一个页面的链接 目前 我有顶级元素作为 a 标记和使用aria label and aria
  • 不要让最终用户保存密码[重复]

    这个问题在这里已经有答案了 可能的重复 禁用浏览器 保存密码 功能 https stackoverflow com questions 32369 disable browser save password functionality 是否
  • 从 Bootstrap 4 网格中删除装订线

    在 Bootstrap 4 中 我被要求自定义桌面的默认网格系统 如下所示 其中 容器 桌面断点为1280px 我尝试过的例子是 body margin top 3rem l wrap max width 1280px margin rig
  • Mobile Safari (iPhone) CSS 垂直居中/行高 CSS 问题

    有一个问题 我一直试图在各个项目中解决 但运气不佳 我有一些divs 内的文本以 CSS 为中心 使用display block and line height 我也尝试过padding和固定的高度 通常 这些设置要么只是标题 要么有时是按
  • 如何在css3中制作曲线风格的菜单?

    是否可以用css3制作曲线 圆弧样式的菜单 我可以使用canvas或HTML5中的其他东西来实现这一点吗 预先感谢 洛根 不幸的是 我不知道有什么优雅的解决方案 特别是当涉及到菜单项时 但弧线本身应该可以在纯 css 和几个 html 元素
  • 以 HTML 格式发送电子邮件

    我想发送 HTML 格式的电子邮件 如下图所示 我怎样才能做到这一点 请帮我 提前致谢 String body new String table tr td br header td tr br br Get b Best Score b
  • Gmail 和 Google Chrome 12+ 中的“从剪贴板粘贴图像”功能如何工作?

    我注意到一个来自 Google 的博文 http gmailblog blogspot com 2011 06 pasting images into messages just got html其中提到 如果您使用的是最新版本的 Chro
  • 加载背景图像的图像不显示

    我真的很困惑 我正在尝试创建一个带有图标和一些按钮的登陆页面 但我无法设法使我正在使用的背景图像显示出来 即使它是根据 Chrome 的开发工具包加载的 我只有这些行 索引 html div class row div class tryh
  • 如何更改元素的 CSS 类并在单击时删除所有其他类

    我如何处理 AngularJS 2 中的一种情况 即单击一个元素需要更改其自己的样式 并且如果其他元素具有该样式 则需要将其删除 最好在一个函数中 如同Angular js 如何在单击时更改元素 css 类并删除所有其他元素 https s
  • 如何在不设置动画的情况下突然更改 CSS 动画中的属性

    这是我试图弄清楚的 但没有使用 51 关键帧作为实现更改的黑客方法transform origin 这里有一个小提琴演示 http jsfiddle net p7pswnpq keyframes spin 0 transform origi
  • CSS 动画自定义属性/变量

    一段时间以来我一直在努力让它发挥作用 关键是内部 div 将具有某种形状 并且可能会不止一个 这就是为什么我使用nth child选择器 这个内部 div 应该显示然后再次隐藏一段时间 问题是 我想在一个动画中为所有 后来的 多个内部 di
  • 带缩略图的轮播和 bootstrap v4

    我看到了带有缩略图的轮播演示bootstrap 3 here http jsfiddle net talmand JS6JV 我正在尝试为 bootstrap v4 实现相同的功能 但无法弄清楚如何修复一些 UI 细节 例如左 右阴影覆盖整
  • 优化 CSS 交付 - Google 的建议

    谷歌建议在 head 中使用非常重要的 CSS 内联 并在内部使用其他 CSS

随机推荐