html - 内联元素的盒子模型
问题描述
W3C 的 CSS2.1 规范,第8.6 章 The box model for inline elements in bidirectional context指出:
对于每个 line box,UA 必须采用为每个元素生成的内联框,并按视觉顺序(不是逻辑顺序)呈现边距、边框和填充。
当元素的'direction'属性为'ltr'时,元素出现的第一行box的最左边生成的box有左边距、左边框和左边padding,最后一行的最右边生成的box元素出现的框有右内边距、右边框和右外边距。
问题
- 它说“最左边的生成框”,这表明内联级元素创建了多个内联级框。那是因为在每个换行符处它都会创建一个新的匿名行内级框吗?
- 为什么内联框的填充/边框表现如下?深入了解它为什么会以 CSS 规范为基础,将不胜感激。
.test {
margin: 0 10px;
padding: 20px;
border: 5px solid blue;
}
<span class="test">test2test2test2test2test2test2test2 test2test2test2test2test2test2test2test2test2test2 test2test2test2test2test2test2test2test2test2test2test2test2test2test2test2test2test2</span>
解决方案
回答第一个问题:
它说“最左边的生成框”,这表明内联级元素创建了多个内联级框。那是因为在每个换行符处它都会创建一个新的匿名行内级框吗?
是的,但这只是一个原因。一个内联级元素可以创建零个、一个或多个内联级框。因此,没有内容或水平填充、边框或边距的内联元素将创建零内联级框。一个元素可以创建多个内联级框的另一种方式是该元素是否包含子元素。
因此,如果我们有<span>foo <b>bar</b> baz</span>
,那么即使所有内容都在一行上,span 也会为 创建一个内联级框foo
,它将获得左边距、左边框和左填充,以及一个单独的内联级框baz
,这将获得右边距,右边框和右填充。
b 元素为 创建内联级框bar
,它可能有自己的边距、边框和内边距。
请参阅 Temani 对您的第二个问题的回答。
推荐阅读
- spring-boot - RestController 集成测试 Junit5 错误
- docker - 无法从公共 docker hub 拉取图像
- php - 发送密码重置电子邮件并收到错误
- mysql - 如何从 .ibd、ibdata1、ib_logfile0 或 mysql.ibd 文件恢复 mysql 数据库
- r - 最初不在下拉列表中显示值
- flutter - 传递参数而不显示在颤动的 Web 应用程序 url 中
- javascript - .getBoundingClientRect()、each() 和 $(this) 之间的关系 - 获取循环中多个元素的 getBoundingClientRect
- javascript - 选择器解决为隐藏 - 剧作家和带显示:无。谁能知道如何使它工作?
- javascript - expressjs req.url 路径如何成为另一个url?
- mysql - 如何在 MySQL 数据库的存储过程中传递参数?