为什么百分比边距会导致换行?

2024-05-05

<div style = "float : left; background-color: #dd3fb8;">
    <a style = "margin-left : 10%;">a</a> 
    <a>b</a> 
    <a>c</a> 
</div>

在上面的示例中,字母“c”将在新行上,但如果我将“margin-left”设置为px单位,“c”将与“a”和“b”在同一行。为什么会发生这种情况?


不幸的是,CSS2.1 规范似乎对此没有明确的答案。事实上,我想说这完全属于未定义行为的范围。

以下是我能找到的相关要点:

  • 没有指定宽度的浮动将缩小以适应其内容 http://www.w3.org/TR/CSS21/visudet.html#float-width。对于仅包含内联内容的浮动,浮动需要足够宽以将其内容放在单行上(尽管有明确的换行符),仅此而已。

  • 计算利润百分比基于包含块的宽度 http://www.w3.org/TR/CSS21/box.html#margin-properties.

    请注意,它说:

    如果包含块的宽度取决于此元素,则生成的布局在 CSS 2.1 中未定义。

    ...但据我所知,所有浏览器的行为都是一致的。

    话虽如此,这条语句适用的原因是因为内联元素的边距落在浮动的内容范围内,可以说浮动的宽度(内联元素的包含块)取决于 this元素(具有边距的元素)。

这就是我能做的deduce基于以上几点:

  • 当边距指定为百分比时,计算浮动宽度时不考虑边距,因为无法计算边距until浮动的宽度已经确定。

    然后根据浮动的使用宽度计算边距,并且字母“c”由于被“a”上的边距向前推而换行。浮动的宽度不会改变。

    同样,这种行为根本没有被指定,因此从技术上讲,它并不违反规范。然而,这似乎是明智的。

  • 当边距指定为像素值时,首先计算边距。然后,考虑此边距来计算浮动的宽度(请记住,水平边距通常适用于内联元素)。根据收缩到适合算法,这是首选宽度:宽度足以包含单行上的所有内联元素。

    与百分比利润不同,这是非常明确的,因为实现首先计算计算利润的绝对值应该没有问题。

我很难将此称为任何浏览器中的错误,特别是因为它们的行为都是一致的。

最后,当然,您可以通过在可能的情况下为浮动提供明确的宽度来完全避免这种未定义的行为。它确实有助于理解why但是,您应该这样做。

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

为什么百分比边距会导致换行? 的相关文章

随机推荐

  • ASP.NET MVC 中的异步控制器

    我检查了 MVC 4 0 中的 System Web Mvc AsyncController 它有注释 提供与 ASP NET MVC 3 的向后兼容性 这是否意味着 MVC 4 中有异步控制器的新实现 MVC 4 0 启用异步控制器以便将
  • DDD 聚合和值对象

    我想问一下关于DDD功能的问题 假设我们有两个聚合 每个聚合都包含值对象地址 根据 Eric Evans DDD 我们应该将聚合彼此隔离 因此第一个聚合的聚合根不能有指向 Address 的链接 坦白说 这对我来说似乎没有意义 所以问题是如
  • 在 Android 的 Exoplayer 中使用 flac 扩展

    我正在尝试使用 ExoPlayer 库FLAC 扩展 https github com google ExoPlayer tree release v2 extensions flac在我的安卓应用程序中 我面临以下问题 并非所有文件都可以
  • 将pillow Image对象转换为JpegImageFile对象

    我裁剪了一张 jpeg 图像 但裁剪后的图像类型是
  • 在保存对话框wxpython中实现“另存为”

    我有一个保存例程 应通过以下方式提示用户 如果当前选择的文件名存在 则提示覆盖 如果当前选择的文件名为空 即 则设置一个对话框要求用户插入文件名 如果当前选择的文件名不存在 则保存 我的代码目前如下所示 但我觉得应该有更好的方法来做到这一点
  • TRESTRequest:是否可以在 POST 请求中使用自定义媒体类型?

    例如 我们有一个 API 需要我们自己的供应商特定内容类型application vnd xxxx custom custom data json但查看 REST Client 的源代码 它似乎总是默认为 REST Types 中的 Con
  • 如何使 TypeScript 输出有效的 ES6 模块导入语句?

    所有主流浏览器 http caniuse com feat es6 module支持 ES6 模块已有一段时间了 这些方法与许多服务器端方法的不同之处在于 它们需要指定要从中导入的确切文件 它们无法使用文件发现 这是有道理的 在 Node
  • 从 React Native 中的数组映射函数动态渲染内容

    我正在尝试从数组中获取数据并使用映射函数来呈现内容 看着 this lapsList 以及相关的 lapsList 函数来理解我想要做什么 结果是没有显示任何内容 视图下的视图等 这是我的简化代码 class StopWatch exten
  • 如何检查函数参数的类型?

    我有一个正在构建功能的应用程序 marshal and apply 它调用一些其他函数 或函子 f有一些论据 marshal and apply的工作是根据参数的类型对参数应用一些特殊的编组f的参数 如果其中之一f的参数是特殊类型 mars
  • 动态调整文本区域大小以适应内容

    这是我使用 netbeans 放入程序中的文本区域 第一张图片显示了我运行程序时文本区域的样子 第二张图片显示了我按下按钮后的文本区域 该按钮将大约 50 个 Hello world 字符串添加到文本区域 仅显示前 6 个 我需要动态增加文
  • 为什么位图图像在 Retina 显示屏上看起来很模糊?

    我没有视网膜设备 但我在网上看到了这个讨论 我读过有关为具有 Retina 显示屏的设备提供 2 倍图像尺寸的解决方案 以确保位图不会变得模糊 但是 我不明白这是如何工作的 首先 正如我所读到的 我假设视网膜显示器的像素密度是四倍 二的平方
  • 如何从 SQLAlchemy 引擎实例获取连接 URL?

    我通过生成一个程序来开始一个程序URL http docs sqlalchemy org en rel 1 0 core engines html highlight url sqlalchemy engine url URL对象并将其传递
  • NoMethodError:未定义的方法“调用”

    运行以下测试套件时 require spec helper describe User do before user User name Example User email email protected cdn cgi l email
  • 有没有办法一次重新编码多个变量?

    我有一个学生成绩单分数的数据集 范围从 D 到 A 我想将它们重新编码为 1 12 的范围 即 D 1 D 2 A 11 A 12 现在我正在起诉revalue函数于plyr 我有几列想要重新编码 有没有比运行更短的方法来做到这一点reva
  • 如何允许用户对列表中的项目重新排序?

    我有一个 Android 应用程序 用户可以在其中将项目添加到列表中 并且我希望他们能够按照自己的意愿对列表中的项目进行重新排序 而不是仅仅向他们提供不同的排序顺序 为项目添加位置设置 它们来自数据库 很容易 但是用户可以使用哪种 UI 元
  • 如何制作全屏java小程序?

    我正在用 Java 小程序设计一个心理学实验 我必须让我的 java 小程序全屏显示 执行此操作的最佳方法是什么以及我该如何执行此操作 由于我已经 3 年没有使用 java applet 我上次使用它是为了课程作业 我已经忘记了大部分概念
  • 如何在android sdk中从图库中获取图像并将其显示到屏幕上

    我想知道如何从图库中获取预先保存的图像 然后将其显示到屏幕上 任何教程 有用的链接和信息将不胜感激 如果您希望我进一步解释任何内容 请询问 Intent photoPickerIntent new Intent Intent ACTION
  • 使用 @abstractproperty 和 @abstractmethod 实现/覆盖的实际差异

    考虑一个抽象基类 它具有您希望每个后续子类重写的函数 使用 abc 模块和 ABCMeta 装饰有 abstractproperty or abstractmethod实际上强制子类 开发人员实现创建装饰器指定的函数类型 根据我的实验 您可
  • opencv如何使用compareHist函数

    img cv2 imread mandrill png histg cv2 calcHist img 0 None 256 0 256 if len sys argv lt 2 print gt gt sys stderr Usage sy
  • 为什么百分比边距会导致换行?

    div style background color dd3fb8 a style margin left 10 a a a b a a c a div 在上面的示例中 字母 c 将在新行上 但如果我将 margin left 设置为px单