【问题标题】:CSS variables not working in dialog::backdropCSS 变量在 dialog::backdrop 中不起作用
【发布时间】:2020-03-08 03:22:13
【问题描述】:

我正在尝试使用自定义 CSS 属性更改 dialog 元素的 backdrop 的背景颜色,但它不会。这是 Chrome 中的错误还是有原因?

document.querySelector('dialog').showModal();
:root {
  --color-backdrop: red;
}

dialog::backdrop {
  background: var(--color-backdrop);
}
<dialog><p>This is a dialog. My backdrop should be red.</p></dialog>

【问题讨论】:

    标签: dialog modal-dialog css-variables


    【解决方案1】:

    spec 声明以下关于 ::backdrop 伪元素:

    它不继承自任何元素,也不继承自。对该伪元素应用哪些属性也没有限制。

    关于 CSS 自定义属性,致 WHATWG 成员 quote Xindorn Quan

    CSS 变量通过继承传播到后代,所以如果一个伪元素不继承任何东西,那么没有直接为伪元素定义的 CSS 变量对伪元素没有影响。

    最后,这是针对此类问题的一种解决方案:

    document.querySelector('dialog').showModal();
    ::backdrop {
      --color-backdrop: red;
    }
    
    dialog::backdrop {
      background: var(--color-backdrop);
    }
    <dialog><p>This is a dialog. My backdrop should be red.</p></dialog>

    它似乎对带有::backdrop 的多个模式很有用,可以说是组织它们的“根”的一种方式。

    【讨论】:

    • 哦,我明白了,所以它根本不会继承 :root 上设置的自定义属性...这有点烦人,因为我们将所有“配置”都保存在一个文件中,它们都是设置在:root。必须在::backdrop(以及:root,因为它也被其他东西使用)设置一个特定的配置变量会有点烦人。
    • :root, ::backdrop { --color-backdrop: red; } 然后它对双方都可用
    猜你喜欢
    • 2023-01-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-12-10
    • 2017-01-28
    • 2023-04-02
    • 1970-01-01
    相关资源
    最近更新 更多