【问题标题】:Styling shadow-dom elements in audio element on webkit / chrome在 webkit / chrome 上的音频元素中设置 shadow-dom 元素的样式
【发布时间】:2021-07-06 18:51:33
【问题描述】:

背景:我正在尝试修复 Chrome 中音频元素外观的两个烦恼,在尝试这样做时,我遇到了两个我想更好地理解的问题。这是关于 MacOS 上的 Chrome 89。我很好地使用伪选择器在音频元素内部设置样式。当使用 dom 检查器查看 shadow dom 内部时,找出伪选择器的名称非常有用。例如,以下两条规则完全符合预期:

::-webkit-media-controls-timeline {background-color:pink;} audio::-webkit-media-controls-time-remaining-display {background-color:lightgrey;}

问题:但是,有两件事没有按预期工作,我想了解原因。

问题 1: 对剩余显示 div 中的第一个字母进行样式设置不起作用。以下规则无效。

audio::-webkit-media-controls-time-remaining-display:first-letter {color:white;}

这太神奇了,因为浏览器会显示这个

<style>div:first-letter {color:red;}</style> ... <div>e xample</div>

正如预期的那样。为什么我无法设置第一个字母的样式? (这样做的想法是去掉剩余时间显示中最烦人的前导/符号)。

问题 2:

为什么我不能在 shadow DOM 的不同部分使用不同的伪属性设置元素的样式。更准确地说,以下规则无效:

::-internal-track-segment-highlight-before {background-color: blue;}

我认为颜色样式的工作与上述其他情况没有区别。 (这样做的想法是增加轨道段的两个部分之间过小的对比度。)

补充:我设法提高了对比度使用

audio::-webkit-media-controls-timeline {-webkit-filter: brightness(2.5);}

但问题仍然是为什么一种方法有效而另一种方法无效。

【问题讨论】:

    标签: html css google-chrome shadow-dom


    【解决方案1】:

    您正在使用 Chrome,并开启了“显示用户代理影子 DOM”

    shadowDOM 有 2 种类型

    • 我们称之为 "userland" shadowDOM,
      由(第 3 方开发人员)自定义元素/Web 组件创建的(打开或关闭的)shadowDOM

      自 W3C Web 组件标准 实施以来,此类型可用

    • user-agent 每个浏览器(供应商)创建的 shadowDOM,
      实现inputaudiovideoselect等标签
      但是每个浏览器可以有不同的实现。

      只有在浏览器供应商启用了访问权限的情况下才能访问此 shadowDOM 内容。 (使用 shadowParts 或相关技术) 而且一般无法访问。

      WebKit 确实有一些 选择器来更改 一些 设置
      见:Is it possible to style html5 audio tag?

      但它们不是 CSS 选择器,无法通过创建复杂的选择器让您完全访问 shadowDOM。

      一些字体和样式设置级联到 shadowDOM 只是为了在整个页面中具有一致的样式。
      见:https://lamplightdev.com/blog/2019/03/26/why-is-my-web-component-inheriting-styles/

    这就是为什么您的 color:red 有效,而 :first-letter 无效的原因

    这就是filter 起作用的原因;而background-color 没有

    替代方案

    https://github.com/dascritch/cpu-audio 是一个不错的 Web 组件替换了标准的 ,它可以让您在所有浏览器中设置样式

    注意符号:(open) not (user-agent)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-08-28
      • 2013-08-21
      • 2019-04-25
      • 1970-01-01
      • 2019-04-15
      • 2015-05-08
      • 2019-02-27
      • 2015-04-25
      相关资源
      最近更新 更多