margin-block-start 和 margin-top 有什么区别?

MAR*_*MAR 17 html css margin

试图了解两者在用法上的核心区别,但我找不到详细介绍此类比较的文章或文档。以此处提供的示例为例,假设如下:

div {
  background-color: yellow;
  width: 120px;
  height: 120px;
}

.exampleText {
  writing-mode: vertical-lr;
  margin-block-start: 20px;
  background-color: #c8c800;
}
Run Code Online (Sandbox Code Playgroud)
<div>
  <p class="exampleText">Example text</p>
</div>
Run Code Online (Sandbox Code Playgroud)

此实例与其中margin-top 使用的实例之间的差异非常小(但可见)。

规格状态margin-block-start 取决于布局模型margin-top 指的是包含块的宽度。如果有人可以用外行的术语解释它,我会喜欢它。

Tem*_*fif 25

从官方1 规范中,您可以阅读:

这些属性对应于 margin-top、margin-bottom、margin-left 和 margin-right 属性。映射取决于元素的书写模式、方向和文本方向。

默认情况下,您将拥有以下映射:

margin-block-start = margin-top
margin-block-end = margin-bottom
margin-inline-start = margin-left
margin-inline-end = margin-right
Run Code Online (Sandbox Code Playgroud)

例子:

margin-block-start = margin-top
margin-block-end = margin-bottom
margin-inline-start = margin-left
margin-inline-end = margin-right
Run Code Online (Sandbox Code Playgroud)
.margin {
  margin-top:50px;
  margin-bottom:10px;
  margin-left:100px;
  margin-right:200px;
}

.margin-alt {
  margin-block-start:50px;
  margin-block-end:10px;
  margin-inline-start:100px; 
  margin-inline-end:200px; 
}

div {
  border:2px solid;
  padding:20px;
}
Run Code Online (Sandbox Code Playgroud)

现在,如果我们更改写入模式,您将看到我们将拥有不同的映射。

<div class="margin">
A
</div>
<hr>
<div class="margin-alt">
A
</div>
Run Code Online (Sandbox Code Playgroud)
.margin {
  margin-top:50px;
  margin-bottom:10px;
  margin-left:100px;
  margin-right:200px;
}

.margin-alt {
  margin-block-start:50px;
  margin-block-end:10px;
  margin-inline-start:100px; 
  margin-inline-end:200px; 
}

div {
  border:2px solid;
  padding:20px;
  writing-mode: vertical-lr;
}
Run Code Online (Sandbox Code Playgroud)

在上面,您会注意到当使用vertical-lr 映射等于

margin-block-start = margin-left
margin-block-end = margin-right
margin-inline-start = margin-top 
margin-inline-end = margin-bottom 
Run Code Online (Sandbox Code Playgroud)

并且在使用时 vertical-rl

margin-block-start = margin-right
margin-block-end = margin-left
margin-inline-start = margin-top 
margin-inline-end = margin-bottom
Run Code Online (Sandbox Code Playgroud)

我就不详细说所有的情况,但基本上每个margin-*-*属性将被映射到一个margin-*基于的价值属性writing-modedirectiontext-orientation

您可以使用不同的值来查看不同的情况。


您的示例有点复杂,因为您有边距折叠和应用的默认边距 p因此很难理解。

这是一个更好的:

<div class="margin">
A
</div>
<hr>
<div class="margin-alt">
A
</div>
<div class="margin-alt" style="writing-mode: vertical-rl;">
A
</div>
Run Code Online (Sandbox Code Playgroud)
margin-block-start = margin-left
margin-block-end = margin-right
margin-inline-start = margin-top 
margin-inline-end = margin-bottom 
Run Code Online (Sandbox Code Playgroud)

1 : 您使用的链接是 MDN 页面,这是一个很好的参考,但不是官方规范。