你的前端框架要被 Web 组件取代了(7)
:host { display: block;}
这样你也能使用上下文样式了。例如,如果要在组件具有 disabled 属性定义时将其显示为灰色,可以使用:
:host([disabled]) { opacity: 0.5;}
默认情况下,自定义元素会从周围的 CSS 继承一些属性,例如 color 和 font 等。但是如果你希望以纯净状态开始并将所有 CSS 属性重置为组件内的默认值,请使用:
:host { all: initial;}
要注意的是,从外部对组件本身定义的样式优先于 Shadow DOM 中使用:host 定义的样式。所以如果你要定义:
my-element { display: inline-block;}
它会覆盖:
:host { display: block;}
无法从外部设置自定义元素内的任何节点的样式。但是如果你希望用户能够设置组件的(部分)样式,则可以暴露 CSS 变量来做到这一点。例如,如果你希望用户能够选择组件的背景颜色,则可以暴露一个名为–background-color 的 CSS 变量。
假设组件中 Shadow DOM 的根节点是<div id =“container”>:
#container { background-color: var(--background-color);}
现在,组件的用户可以从外部设置其背景颜色:
my-element { --background-color: #ff0000;}
如果用户未定义组件,则应在组件内为其设置默认值:
:host { --background-color: #ffffff;} #container { background-color: var(--background-color);}
当然,你可以为 CSS 变量选择任何名称。 CSS 变量的唯一要求是它们要以“–”开头。
通过提供作用域 CSS 和 HTML,Shadow DOM 解决了 CSS 的全局特性所带来的特殊性问题,并且通常会产生巨大的仅添加样式表,其包含越来越多的特定选择器和覆盖。Shadow DOM 可以将标签和样式捆绑到独立的组件中,而无需任何工具或命名约定。你永远不必再担心新的类或 ID 是否会与现有的类冲突。