【问题标题】:Why can't CSS padding be partially inherited using shorthand?为什么不能使用速记部分继承 CSS 填充?
【发布时间】:2017-07-25 15:06:20
【问题描述】:

在浏览样式表时,我时常看到如下规则:

padding: 10px inherit;

我不知道这是否是有效的 CSS,所以我做了 3 个 JSFiddles。所有 3 个小提琴都有一个 <p> 父级的 <div> 子级(并在 Chrome 59.0 中进行了测试)。在first JSFiddle 中,子级继承父级填充(单个inherit 关键字),检查元素显示<p><div> 在x 和y 方向都有10px 的填充:

div {padding: 10px 10px}
p {padding: inherit}

second JSFiddle 中,子<p> 具有显式继承的x 和y 填充(1 个实际<length>,1 个inherit 关键字):

div {padding: 10px 10px}
p {padding: 10px inherit}

检查<p> 显示 CSS 已损坏(即没有继承填充);

third JSFiddle(为了完整性)中,子<p> 还具有显式继承的x 和y 填充,但在这种情况下有2 个单独的inherit 关键字:

div {padding: 10px 10px}
p {padding: inherit inherit}

而且这个 CSS 也因<p> 而中断(即,没有继承填充)

我假设这意味着子元素不能使用速记“部分”继承父属性值。 这是否正确,如果是,为什么不能部分继承?(即,W3C 文档是否在某处提到过这一点?)。

更新 - 如果您明确拆分填充属性(不要使用速记),您可以继承(参见 JSFiddle

考虑到我在几个样式表中看到案例 #2(第二小提琴),看起来其他开发人员也认为部分继承是有效的。

【问题讨论】:

  • W3C 文档是否在某处提到过这一点? - 是的。就在这里:paddingpaddingvalue 可以是 <padding-widht>{1,4}inherit 而不是 inherit{1,4}
  • 好的,所以这只是关于语法,因为您可以通过将速记拆分为普通手写来“部分继承”
  • 是的。这没什么大不了的。正如您可以想象的那样,混合速记和速记、继承和覆盖规则的可能性应该会给您很大的发挥空间。 ;)

标签: css inheritance


【解决方案1】:

规范为属性unsetallinherit https://www.w3.org/TR/css3-cascade/#propdef-all 提供了三个选项,它甚至说initial | inherit | unset。从字面上看,这意味着这些值。因为定义backround:url('url.png') inherit; 没有意义。这是引擎如何在内部工作的硬编码示例。这有点像定义部分重要性,如padding:20px !important 10px;。不,你必须这样做padding:!important 10px;

【讨论】:

  • 但是你实际上可以按照我建议的方式继承,只是不使用速记:见jsfiddle.net/Lrf922ff/3。我会更新我的问题
  • @TheOneandOnlyChemistryBlob 是的,但出于类似原因,您也不能在 !important 语法上使用速记。
  • 所以换句话说,你不能使用速记部分继承 - 为什么?继承、取消设置等的 W3C 文档状态是否仅适用于整个父属性?
  • @TheOneandOnlyChemistryBlob 是的,基本上inheritunsetall 工作方式相同 developer.mozilla.org/en-US/docs/Web/CSS/inherit 不使用速记
  • OK - 级联文档中的这一行为我做了这件事:“将速记属性声明为 !important 等同于将其所有子属性声明为 !important。” - 足够接近
【解决方案2】:

虽然我不知道为什么会这样,但您可以使用以下技巧:

div {padding: 10px 10px}
p {
  padding: inherit;
  padding-bottom: 20px;
  padding-top: 20px;
}

【讨论】:

  • 不回答部分继承的问题
猜你喜欢
  • 2011-01-06
  • 1970-01-01
  • 2018-03-12
  • 2010-09-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多