如果在通用选择器中声明,框大小是否会继承?

Log*_*Lee 8 css reset

这是否适用于每个元素?

示例“A”:

*
{
    box-sizing: border-box;
}
Run Code Online (Sandbox Code Playgroud)

我认为 box-sizing 不是继承的?

这是关于盒子大小重置的:

示例“B”:

*, *::before, *::after
{
    box-sizing: inherit;
}

html
{
    box-sizing: border-box;
}
Run Code Online (Sandbox Code Playgroud)

这两个例子会有同样的效果吗?

Tem*_*fif 6

我认为 box-sizing 不是继承的?

不,这不对。你可以检查一下规范,你会发现继承是NO。在示例 A 中,您只需使用通用选择器来选择所有元素并应用于box-sizing:border-box它们,但它不针对伪元素,因此默认情况下不会box-sizing:border-box设置它们。

这两个例子会有同样的效果吗?

不,他们不会。即使我们认为它是应用于文档的唯一 CSS,示例 B 也会以伪元素为目标,使它们继承 ,box-sizing并且如果我们遵循父子结构,它们将在逻辑上得到,box-sizing:border-box因为html具有box-sizing:border-box

另一个区别是,使用inherit将考虑父样式,这与示例 A 中显式设置值不同。在示例 A 中,box-sizing如果您想覆盖示例 B 中代码设置的元素,则必须对每个元素进行更改,对元素或任何祖先的更改box-sizing将覆盖您正在使用的代码。


一个基本的例子来说明差异。

用一个:

* {
  box-sizing: border-box;
}



/* my code*/
body {
  box-sizing: content-box;
}
.box {
  width:100px;
  height:100px;
  border:10px solid;
  padding:10px;
}

p {
  padding:5px;
  border:2px solid red;
}
Run Code Online (Sandbox Code Playgroud)
<div class="box">
  <p></p>
</div>
Run Code Online (Sandbox Code Playgroud)

使用B:

*,
*::before,
*::after {
  box-sizing: inherit;
}

html {
  box-sizing: border-box;
}


/* my code*/

body {
  box-sizing: content-box;
}

.box {
  width: 100px;
  height: 100px;
  border: 10px solid;
  padding: 10px;
}

p {
  padding: 5px;
  border: 2px solid red;
}
Run Code Online (Sandbox Code Playgroud)
<div class="box">
  <p></p>
</div>
Run Code Online (Sandbox Code Playgroud)


Den*_*que 0

是的。通过测试确认:

* {
  box-sizing: border-box;
}

.example {
  border: 1px solid red;
  background: blue;
  width: 100px;
  height: 100px;
  padding: 20px;
}

.border-box {
  box-sizing: border-box;
}

.content-box {
  box-sizing: content-box;
}
Run Code Online (Sandbox Code Playgroud)
<body>
  <div class="example"></div>
  <div class="example content-box"></div>
  <div class="example border-box"></div>
<body>
Run Code Online (Sandbox Code Playgroud)

div没有类的仍然.border-box继承box-sizing自它body