当前位置: 首页 > 知识库问答 >
问题:

在webkit/chrome上设计音频元素中的shadow-dom元素

麹鸿煊
2023-03-14

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

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

问题:然而,有两件事并不像预期的那样起作用,我想知道为什么。

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

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

这是令人吃惊的,因为浏览器会显示

...

E Xample

正如所料。为什么我不能给第一个字母打字?(这样做的想法是为了去掉剩余时间显示中最烦人的前导/符号)。

问题2:

为什么我不能在阴影DOM的不同部分为具有不同伪属性的元素设置样式。更确切地说,以下规则是无效的:

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

我看不出与上面的另一个情况有什么不同,在这里颜色样式起作用。(这样做的想法是为了增加轨道段两部分之间太小的对比度。)

补充一下:我设法改进了一点对比度,使用

音频::-webkit-media-controls-timeline{-webkit-filter:brightence(2.5);}

但问题仍然是为什么一种方法有效而另一种方法不起作用。

共有1个答案

狄彬彬
2023-03-14

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

有两种类型的暗影场

>

  • 让我们将其称为“用户区”shadowDOM,
    由(第三方开发人员)自定义元素/Web组件创建的(打开或关闭的)shadowDOM

    自从W3C Web组件标准实现以来,这种类型就可用了

    由每个浏览器(供应商)创建的“用户代理”shadowDOM,
    实现输入音频视频选择等标记,但每个浏览器可以有不同的实现。

    只有浏览器供应商启用了访问,才能访问此shadowDOM内容。(使用暗影部件或相关技术),而且一般情况下它是无法访问的。

    WebKit确实有一些伪选择器来更改一些设置
    请参见:是否有可能对html5音频标记进行样式化?

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

    某些字体和样式设置会级联到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组件,它取代了标准的

    请注意符号:(打开)而不是(用户代理)

  •  类似资料:
    • 我试图计算select元素中的选项数,以及DOM中某个类的元素数。 我需要比较这两个总数来得出赛普拉斯的断言。 我可以选择所需的选项,并使用each()对它们进行迭代,然后以这种方式递增一个计数器。然而,它是异步的,也是一个笨拙的解决方案。我确信我的cy.get()生成的对象有一个length属性,我就是看不懂它。 这是我期望的事情之一。它将未定义的日志记录到控制台。 我知道我的别名很好,并且我的

    • 我在使用媒体​流式录制API,用于录制用户的麦克风。该代码在chrome windows上运行良好,但在android上,它只会在录制哔哔声后立即停止录制。 如何使API在android设备上工作 我是否遗漏了什么,或者这是Web音频API的错误? 代码如下: 然后我就用这些台词开始录音: 还有这个要停下来玩:

    • 问题内容: 量角器1.7.0引入了一项新功能:新的定位器,可帮助您在 影子DOM中 查找元素。 它涵盖哪些用例?您什么时候想要到达影子DOM中的元素? 我问这个问题的原因是,我在事情的动机部分上不见了- 我想到量角器主要是作为一个有助于模仿实际用户交互的高级框架。访问影子树听起来像是一项非常深入的技术工作,为什么您要这样做却使我感到困惑。 问题答案: 为了回答您的问题,这里有一个相关的问题:“ s

    • 量角器1.7.0引入了一个新特性:一个新的定位器,它有助于查找阴影DOM中的元素。 它涵盖哪些用例?您希望何时访问阴影DOM中的元素? 我问这个问题的原因是我错过了这个问题的动机部分——我认为量角器主要是一个有助于模仿真实用户交互的高级框架。访问阴影树听起来像是一件非常深入的技术事情,你为什么要这么做让我困惑。

    • 我有一个来自服务器的响应,我想把它放到列表中。但是当列表为空时,我需要隐藏这个div容器。例如,如果不在数组中-我想隐藏div。但是我想在ng之后使用bird重复,所以我不能使在上。我可以检查li是否为空,然后隐藏div吗? 普朗克例子 AngularJS ng-重复处理空列表大小写-这是不一样的。如果li是空的,我不想隐藏li,我想在li是空的时候隐藏父元素h1。

    • 问题内容: 这个问题更针对于用户创建的影子DOM元素,但是为了可访问性,我将使用此问题的输入类型: 举例来说,我在页面上输入了内容。修改了几位后,此阴影DOM标记(使用Chrome)看起来像: 与输入关联的方法和属性似乎根本没有引用影子DOM(JSFiddle),所以我想知道如何(如果有的话)访问这些影子DOM元素? 问题答案: 根据定义,@ int32_t在该ShadowDOM中是正确的,它是一