首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么“配色方案:深色”会导致<object>s在Chrome中有白色背景?

为什么“配色方案:深色”会导致<object>s在Chrome中有白色背景?
EN

Stack Overflow用户
提问于 2021-12-14 17:11:14
回答 1查看 125关注 0票数 2

我有一个使用<object>渲染外部SVGs的站点,其中很多都有透明的背景。我添加了CSS属性color-scheme: dark,表示它是“可使用操作系统深色方案呈现”。但是,在Chrome/Blink中,这会导致<object>元素具有白色的背景!这是一个最小的演示:

代码语言:javascript
复制
:root {
  background-color: blue;
  
  /*
    In Chrome/Edge, the following makes the <object> have a white background!
    In Firefox/Safari, it stays transparent.
  */
  color-scheme: dark;
}
body {
  margin: 0;
}
代码语言:javascript
复制
<object
  type="image/svg+xml"
  data="data:image/svg+xml,%3Csvg version='1.1' width='300' height='200' xmlns='http://www.w3.org/2000/svg'%3E%3Ccircle cx='150' cy='100' r='80' fill='green' /%3E%3C/svg%3E%0A">
  SVG not supported
</object>

这里发生了什么事?这是铬的缺陷吗?或者,<object>、SVG或color-scheme是否有我误解的地方?

EN

回答 1

Stack Overflow用户

发布于 2022-06-04 16:24:40

我也遇到了这个问题,这篇文章是我唯一能找到的关于这个具体问题的东西。发布半修复以帮助他人。如果你的背景颜色是实心的(不是渐变或图像),我就能找到一个解决方案。

我直接向SVG添加了背景色样式--在我的例子中,是通过标记添加的,通过ID标记引用SVG本身。所述颜色与我的SVG对象标记中包含的背景色相匹配。此样式是通过暗模式媒体查询来限定范围的。顺便提一句,我不得不缓存<object>标记的数据src。添加查询字符串可以做到这一点。例:?v.22.4.6

下面是我如何绕过这个bug的一个例子:

中对象中的SVG(它是一个徽标,请注意缓存破坏查询是可选的)

代码语言:javascript
复制
<header style="background-color:#00053E">
  <object type="image/svg+xml" data="../the/link/to-your.svg?v22.6.3">
      ...

SVG对象嵌入:

代码语言:javascript
复制
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" id="SVG-ID-HERE" viewBox="0 0 291 31"  preserveAspectRatio="xMidYMid meet">
    <style type="text/css">
        @media (prefers-color-scheme: dark)
        {
            #SVG-ID-HERE{ background-color: #00053E }
        }
    </style>
...
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/70352898

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档