【问题标题】:Why does `color` affect shadow roots?为什么“颜色”会影响阴影根?
【发布时间】:2016-12-09 00:27:07
【问题描述】:

我注意到当我执行以下操作时 (note: this is Shadow DOM v1!)

let div = document.querySelector('div');
let root = div.attachShadow({mode: 'closed'});
let span = document.createElement('span');
span.textContent = 'Super hot!';
root.appendChild(span);
*{
  background: rgba(0,0,0,.1);
  color: rgba(0,0,0,.4);
}
<div></div>

color 属性会传播到影子根,而background 属性不会。规范的哪一部分定义了这种行为,为什么会这样?我的印象是影子根主要用于封装 DOM 树。

上面sn-p的截图:

没有background 和只有color: green 的上述sn-p 的屏幕截图

【问题讨论】:

  • 您能否添加一个屏幕截图来说明它的外观?我非常好奇,但懒得让 Chrome 运行这个^^"
  • @poke:已添加。这是Supersharp imgur.com/a/QYl7J的答案截图

标签: css shadow-dom


【解决方案1】:

这是一种视错觉,由于使用了* 和不透明度。

span 没有继承自 span CSS 规则,color 和 background 是从 div 元素传播的在阴影下。

请参见下面带有不同颜色的代码。使用 Chrome 开发工具检查 Styles 属性以查看适用的属性。

let div = document.querySelector('div')
let root = div.attachShadow({mode: 'closed'})
let span = document.createElement('span')
span.textContent = "Text in the SPAN, but colors from DIV"
root.appendChild(span)
div {
  /*background-color: rgba(0,255,0,.1);*/
  color: green;
}
span {
  background-color: rgba(255,0,0,.2);
  color: red;
}
<h4>SPAN in Shadow DOM:</h4>
<div id="v1">Text and colors from DIV</div>

<h4>No Shadow DOM:</h4>
<div>Text and colors from DIV<span>Text and colors from SPAN</span></div>

更新:正如@poke 所说:

shadow DOM 只关闭 CSS 规则,但不关闭文档中发生的继承。

这就是为什么“影子”这个名字富有表现力和意义的原因。

您对背景的体验也适用于普通 CSS 和 DOM(与 Shadow DOM 封装无关)。

【讨论】:

  • 尝试将颜色设置为绿色并移除背景;)
  • 可能我对shadow dom的理解有误,为什么div的颜色会影响第一种情况下的span?因为您也看到了绿色的“SPAN 中的文本”行?
  • 颜色,像font 等许多其他属性一样,是继承的。这使得 span 的文本与包含 shadow DOM 的 div 具有相同的颜色。现在,默认情况下不继承背景,但默认情况下是透明的。所以 span 的背景是透明的,这使得 span 本身没有背景。 shadow DOM 仅关闭 CSS 规则,但不会关闭文档中发生的继承。否则,如果不单独为每个组件指定字体,您将无法更改组件的字体。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-08-09
  • 2012-09-18
  • 1970-01-01
  • 2017-05-17
  • 1970-01-01
  • 2015-07-14
  • 2011-12-19
相关资源
最近更新 更多