更改 SVG 背景图像的颜色(Bootstrap 4 轮播)

Posted

技术标签:

【中文标题】更改 SVG 背景图像的颜色(Bootstrap 4 轮播)【英文标题】:Change color of SVG background-image (Bootstrap 4 carousel) 【发布时间】:2018-04-17 18:49:13 【问题描述】:

我有一个带有下一个/上一个控件的 BS 4 轮播,目前可以使用。我有一个浅色背景,所以我想更改控件的颜色(当前为白色)。

html

<div id="carouselQuotes" class="carousel slide quotecaru" data-ride="carousel">
<ol class="carousel-indicators">
    <li data-target="#carouselQuotes" data-slide-to="0" class="active"></li>
    <li data-target="#carouselQuotes" data-slide-to="1"></li>
    <li data-target="#carouselQuotes" data-slide-to="2"></li>
</ol>
<div class="carousel-inner">
    ... carousel items ...
</div>
<a class="carousel-control-prev" href="#carouselQuotes" role="button" data-slide="prev">
    <span class="carousel-control-prev-icon" aria-hidden="true"></span>
    <span class="sr-only">Previous</span>
</a>
<a class="carousel-control-next" href="#carouselQuotes" role="button" data-slide="next">
    <span class="carousel-control-next-icon" aria-hidden="true"></span>
    <span class="sr-only">Next</span>
</a>

更改指示器的颜色很容易,因为只需将颜色设置为背景即可。但是为 prev/next 控件设置 background-color 或 color 并没有改变实际控件图标的颜色。

我发现图标是通过 background-image SVG 设置的。其中有一部分说明了填充颜色:

.carousel-control-prev-icon 
    background-image: url("data:image/svg+xml;charset=utf8,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='%23fff' viewBox='0 0 8 8'%3E%3Cpath d='M5.25 0l-4 4 4 4 1.5-1.5-2.5-2.5 2.5-2.5-1.5-1.5z'/%3E%3C/svg%3E");

我试过了

.carousel-control-prev-icon, .carousel-control-next-icon 
    fill: #000;

.carousel-control-prev-icon, .carousel-control-next-icon 
    fill: '#000';

.carousel-control-prev-icon, .carousel-control-next-icon 
    fill: '%23000';

有没有办法在不覆盖整个背景图像行的情况下更改图标的颜色?

谢谢

【问题讨论】:

【参考方案1】:

更改 SVG 背景图像的颜色

  .carousel-control-prev-icon 
        background-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' fill='%23ff0000' width='8' height='8' viewBox='0 0 8 8'%3e%3cpath d='M5.25 0l-4 4 4 4 1.5-1.5L4.25 4l2.5-2.5L5.25 0z'/%3e%3c/svg%3e");
    

【讨论】:

【参考方案2】:

您无法使用 CSS 规则设置该 SVG 背景图像的内容。它被解析和处理,并在解码时有效地转换为位图图像。

您需要更改 SVG 本身。改变

fill='%23fff'

fill='%23000'

或任何你想要的颜色。这里的“%23”只是“#”符号。在这样的数据 URI 中使用时,它必须是 URL-encoded。

div 
  background-color: black;


button 
  width: 24px;
  height: 24px;
  border: none;
  background-color: transparent;


.carousel-control-prev-icon 
  background-image: url("data:image/svg+xml;charset=utf8,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='%23fff' viewBox='0 0 8 8'%3E%3Cpath d='M5.25 0l-4 4 4 4 1.5-1.5-2.5-2.5 2.5-2.5-1.5-1.5z'/%3E%3C/svg%3E");



div.inverted 
  background-color: white;


.inverted .carousel-control-prev-icon 
  background-image: url("data:image/svg+xml;charset=utf8,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='%23000' viewBox='0 0 8 8'%3E%3Cpath d='M5.25 0l-4 4 4 4 1.5-1.5-2.5-2.5 2.5-2.5-1.5-1.5z'/%3E%3C/svg%3E");
<div>
  <button class="carousel-control-prev-icon"></button>
</div>

<div class="inverted">
  <button class="carousel-control-prev-icon"></button>
</div>

【讨论】:

以上是关于更改 SVG 背景图像的颜色(Bootstrap 4 轮播)的主要内容,如果未能解决你的问题,请参考以下文章

用作 base-64 背景图像数据时如何更改 svg 填充颜色?

如何在html对象元素中更改svg位置的背景颜色[重复]

Bootstrap 4 carousel-control-color 条件颜色 - SVG

更改 Bootstrap 4 轮播控件颜色

使用 CSS 更改 svg 图像的颜色 [重复]

如何将 SVG 的填充颜色更改为背景图像? [复制]