html - 内联元素的盒模型

标签 html css

W3C 的 CSS2.1 规范,章节 8.6 The box model for inline elements in bidirectional context ,状态:

For each line box, UAs must take the inline boxes generated for each element and render the margins, borders and padding in visual order (not logical order).

When the element's 'direction' property is 'ltr', the left-most generated box of the first line box in which the element appears has the left margin, left border and left padding, and the right-most generated box of the last line box in which the element appears has the right padding, right border and right margin.

问题

  • 它表示“最左边生成的框”,这表明行内级元素创建了多个行内级框。这是因为在每个换行符处都会创建一个新的匿名内联级框吗?
  • 为什么行内框的内边距/边框表现如下?如果能以 CSS 规范为基础深入了解它为何以这种方式显示,我们将不胜感激。

.test {
  margin: 0 10px;
  padding: 20px;
  border: 5px solid blue;
}
<span class="test">test2test2test2test2test2test2test2 test2test2test2test2test2test2test2test2test2test2 test2test2test2test2test2test2test2test2test2test2test2test2test2test2test2test2test2</span>

最佳答案

第二个问题可以引用this part of the specification :

The 'height' property does not apply. The height of the content area should be based on the font, but this specification does not specify how. A UA may, e.g., use the em-box or the maximum ascender and descender of the font. (The latter would ensure that glyphs with parts above or below the em-box still fall within the content area, but leads to differently sized boxes for different fonts; the former would ensure authors can control background styling relative to the 'line-height', but leads to glyphs painting outside their content area.)

The vertical padding, border and margin of an inline, non-replaced box start at the top and bottom of the content area, and has nothing to do with the 'line-height'. But only the 'line-height' is used when calculating the height of the line box.

.test {
  margin: 0 10px;
  padding: 20px;
  border: 5px solid blue;
}

div {
 border:1px solid red;
 margin:50px 0;
}
<div>
<span class="test">test2test2test2test2test2test2test2 test</span>
</div>

<div>
<span class="test">test2test2test2test2test2test2test2 test st2test2test2test2 test st2test2test2test2 test st2test2test2test2 test</span>
</div>



<div>
<span class="test" style="line-height:50px;">test2test2test2test2test2test2test2 test2test2</span>
</div>

<div>
<span class="test" style="line-height:50px;">test2test2test2test2test2test2test2 test2test2 test2test2test2test2test2test2test2 test2test2</span>
</div>

关于html - 内联元素的盒模型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50263377/

相关文章:

javascript - 使用 Jquery if 和 else 函数禁用按钮

html - Swift - 在 UiWebView 中加载本地 Html

html - 创建看起来像 bbc.co.uk 的 CSS slider 按钮

javascript - jQuery 帮助 : How can i select tr td nth row?

javascript - Jquery - 试图隐藏和显示一堆图像

javascript - HTML - 如何以前置方式插入行?

jquery - 使用 jQuery 在元素内包装文本

javascript - js表单填写检查

javascript - 在加载时根据 html 属性设置背景图像

javascript - 使用 chrome 扩展更改 div 中的样式表