css - 影子 DOM : how to apply CSS style only if the host element is <body>?

标签 css google-chrome css-selectors web-component shadow-dom

如果我的 Web 组件是 <body> 的直接子组件,我必须对其应用特殊的 CSS 样式。元素。这是我到目前为止所尝试过的:

/* applies even if the component isn't a direct child */
:host(body) {
    color: red;
}

/* never applies */
:host(body:host) {
    color: red;
}

/* never applies */    
:host(body:host > my-component) {
    color: red;
}

/* never applies */    
:host(body > my-component:host) {
    color: red;
}

浏览器:Chrome 稳定版 (32.0.1700.107)、Chrome Canary (34.0.1843.3)。

最佳答案

如果没有 CSS 中的父选择器,我认为目前这是不可能的。

您可以在 Chrome 32 中执行类似的操作:

/* @polyfill body > :host h1 */

这在 Chrome 32 中有效,因为 @polyfill 指令添加了一个文档级样式:body >polymer-foo h1。但是,这在 Chrome 34 中不起作用,因为 Shadow DOM 会忽略文档级样式。

此外,:host 现在仅匹配主机元素本身。如果你想尝试匹配祖先,你可以使用 :ancestor()。不幸的是 :ancestor(body) > :host h1 将不起作用。 :ancestor(body) 被转换为任何作为 body 后代的节点,因此上面的代码片段将被重写为 polymer-foo >polymer-foo h1

令人失望的是,这在今天是不可能的,但 Shadow DOM 样式仍处于起步阶段,希望我们将来能够更具表现力。

为了便于将来引用,可以在此处找到有关 Shadow DOM 样式的正在进行的规范:http://dev.w3.org/csswg/shadow-styling

关于css - 影子 DOM : how to apply CSS style only if the host element is <body>?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21834025/

相关文章:

android - Videoportal PWA(Progressive Web App)视频离线功能?

html - 从 DeviceOrientation Event API 计算罗盘航向

selenium - NoSuchElementException,Selenium 无法定位元素

css - 带有 ASP.NET 控件的 Selenium WebDriver

css - 背景封面不适用于移动设备

asp.net - 在母版页和 default.aspx 页面中带有链接的 ContentPlaceHolder

javascript - Chrome 控制台将对象属性显示为未定义

html - 通过类或从父 CSS/HTML 开始为元素设置样式更快

html - 如何将两个元素向右浮动以在视觉和语义上保持相同的顺序?

jquery - css 菜单在悬停链接下方显示隐藏的 div