html - 什么是“不可替换的内联块”?
问题描述
背景
Cascading Style Sheets Level 2 Revision 1 (CSS 2.1) Specification,第9 章视觉格式化模型,指定:
并不是所有的块容器盒子都是块级盒子:非替换的内联块和非替换的表格单元格是块容器,但不是块级盒子。
问题
在第 9/10 章的其他任何地方都没有提到不可替换的内联块。有人可以帮我理解那些块框代表什么元素吗?
旁注
- 它们不是指不可替换的内联元素,这是最常见的内联元素
- 它们也不是指带有 的元素
display:inline-block
,因为它们是内联框
编辑
- 从上面的引用可以推断出未替换的内联块是块容器框。
我们也知道:
内联元素是源文档中不形成新内容块的元素;内容按行分布(例如,段落中强调的文本片段、内嵌图像等)。'display' 属性的以下值使元素成为内联级别:'inline'、'inline-table' 和 'inline-block'。内联级元素生成内联级框,即参与内联格式化上下文的框。
如果未替换的内联块是块容器盒
display:inline-block
,并且带有内联盒的元素(即不是块级盒,因此不是块容器盒),那么从逻辑上讲,未替换的内联块不能是元素的结果与display:inline-block
.- 换句话说,内联块不是来自带有
display:inline-block
.
其他注释
- 当唯一的定义是inline-block <-- 注意连字符时,我对 replace与non-replaced的概念感到满意,只是试图通过上面第一个引号中的inline 块来了解规范的含义。
解决方案
术语inline block和inline-block指的是同一个东西(一个 inline 级别的块容器框)并且是完全可以互换的。一个带有 的元素display: inline-block
确实会生成一个内联块框或内联块框(带有或不带有连字符)。只有连字符存在,因此 CSS 能够定义inline-block
为单个关键字值。
非连字符形式在 CSS2 的第 9 节中出现了多次,但在该规范的其他任何地方都没有出现(它在 css-display-3 中出现过一次,在一个句子中几乎逐字逐句地从 CSS2 中提升,所以它不算数)。我不知道为什么会这样,但非连字符形式不是指与连字符形式不同的东西。事实上,第 9 节本身可以互换使用这两种形式——请参阅第 9.2.4 节以获取使用连字符形式的示例:
inline-block
此值使元素生成内联级块容器。内联块的内部被格式化为块框,元素本身被格式化为原子内联级框。
不过,我明白为什么读者会感到困惑。幸运的是,CSS2 规范的其余部分和大多数 CSS3 规范(我已经检查过)在使用连字符形式方面都是一致的。
此外,“box”这个词的存在与否不会改变“inline-block”的含义。通常,规范将其省略,因为它不必要地冗长。格式化结构中不是文本运行的所有内容无论如何都是一个框,并且作为名词的“内联块”很好地从舌头上滚下来。
如果未替换的内联块是块容器盒
display:inline-block
,并且带有内联盒的元素(即不是块级盒,因此不是块容器盒),那么从逻辑上讲,未替换的内联块不能是元素的结果与display:inline-block
.
我认为这里有一些误解。上面的引用列出了 inline-blocks 作为非块级的块容器框的示例;该引用的目的是向读者传达并非所有的块容器都是块级盒子,也不是所有的块级盒子都是块容器——事实上,这两个概念是不同的,不应该混为一谈。从我对这个相关问题的回答:
块盒和内联块之间的唯一区别是前者是块级的,而后者是内联级的。因此显示值
display: block
和display: inline-block
分别。由于两者都是块容器,因此它们的内容的格式没有区别。
因此,同样,display: inline-block
确实会导致元素生成内联块(除非布局的其他部分强制将其格式化为块级或blockified,这完全是一个单独的主题)。这个 inline-block 是被替换还是不被替换取决于元素;例如,具有 的<img>
元素display: inline-block
生成一个替换的内联块,而具有 的<div>
元素display: inline-block
生成一个非替换的内联块。
替换的 inline-block 实际上不能形成块容器,因为它的内容是在 CSS 格式规则之外呈现的。这就是规范将不可替换的内联块区分为块容器的原因。真的没有比这更多的了。
推荐阅读
- lua - 从旧版 NodeMCU OTA 升级
- mongodb - 更新 ID 数组
- python - 即使设置了所需的标头,Python 请求也会返回 403 错误代码
- html - 使用 CSS: lang() 选择器来切换 div 的可见性
- c# - C# 的 While 循环语法,我做错了什么?
- swift - 有没有办法减少 Swift 代码行的数量?
- scala - 为什么 Spark DataFrame 转换为 RDD 需要完全重新映射?
- html - 如何删除表单域之间的垂直间距?
- javascript - Javascript Promise.all 增加这个函数的速度
- maven - Azure DevOps:将 Maven 工件从 Azure 工件导入发布时出错