- objective-c - iOS 5 : Can you override UIAppearance customisations in specific classes?
- iphone - 如何将 CGFontRef 转换为 UIFont?
- ios - 以编程方式关闭标记的信息窗口 google maps iOS
- ios - Xcode 5 - 尝试验证存档时出现 "No application records were found"
有没有办法取消或删除fill: currentColor
?
.svg-icon * {
/* Targets all sub-elements so we can deliver icons with a color override of our choice */
fill: currentColor;
}
.svg-icon.iconLogoGlyph * {
/* How do I negate fill: currentColor further down the cascade? */
fill: inherit;
/* I want the natural colors from the SVG */
}
<svg role="icon" class="svg-icon iconLogoGlyph" width="25" height="30" viewBox="0 0 25 30"><g fill="none"><path fill="#BCBBBB" d="M21 27v-8h3v11H0V19h3v8z"></path><path fill="#F48024" d="M5.402 19.101l13.561 1.96.164-2.38-13.256-2.547-.469 2.967zM7.2 12.3l12 5.6 1.1-2.4-12-5.6-1.1 2.4zm3.4-5.9l10.2 8.5 1.7-2-10.2-8.5-1.7 2zM17.1.2L15 1.8l7.9 10.6 2.1-1.6L17.1.2zM5 25h14v-3H5v3z"></path></g></svg>
我有一组使用 SVG 创作的图标。其中一些图标包含带有颜色信息的内联样式。最常见的用例是忽略这些内联填充,并通过在 CSS 中声明 fill: currentColor
让它们继承父级的 color
。但是,在某些情况下,例如我们的 Logo ,我们希望显示这些嵌入的颜色。在其他地方,比如页脚,我们想用我们选择的单一颜色覆盖颜色。
出于原因™,我坚持使用库中的这些类。每个图标都有类 svg-icon
和一个更具体的类,在本例中为 iconLogoGlyph
。
如果我无法触及类,如何仅使用 CSS 来否定 fill: currentColor
?我已经尝试使用 :not
来选择除 .iconLogoGlyph
之外的所有内容,但这不会让我在实际需要时使用 fill: currentColor
fill: currentColor
的反义词是什么?它不是 fill: inherit
或 fill: none
。我需要类似 fill 的东西:只需捕获 SVG 中的内容,哟
🤔
最佳答案
如果您对 SVG 稍作修改,就有一种方法可以使它正常工作。如果你不是这样:
<path fill="#BCBBBB" d="..."></path>
这样做:
<g fill="#BCBBBB"><path d="..."></path></g>
即将所有填充的形状包裹在组中,并在组而不是路径本身上指定填充,然后会发生以下情况:
根据 the spec ,
fill
不适用于 <g>
元素,因此在组上设置此属性不会造成伤害(例如,您不会突然得到一个填充的矩形),并且
fill
是继承的,因此 <g>
的 fill
将适用于 <path>
.
接下来,如果不是*
你用*:not(g)
在您的 CSS 中(在您的特定示例中,仅使用 path
也可以),然后在默认情况下,fill: currentColor
将告诉路径使用当前颜色(并忽略父组的填充值)。在覆盖情况下,您设置 fill: inherit
,您告诉路径返回以继承父项的填充值。
.svg-icon *:not(g) {
fill: currentColor;
}
.svg-icon.iconLogoGlyph *:not(g) {
fill: inherit;
}
<!-- these two SVGs are identical except that the
first one doesn't have the `iconLogoGlyph` class -->
<div style="color: green">
<svg role="icon" class="svg-icon" width="25" height="30" viewBox="0 0 25 30"><g fill="none"><g fill="#BCBBBB"><path d="M21 27v-8h3v11H0V19h3v8z"></path></g><g fill="#F48024"><path fill="#F48024" d="M5.402 19.101l13.561 1.96.164-2.38-13.256-2.547-.469 2.967zM7.2 12.3l12 5.6 1.1-2.4-12-5.6-1.1 2.4zm3.4-5.9l10.2 8.5 1.7-2-10.2-8.5-1.7 2zM17.1.2L15 1.8l7.9 10.6 2.1-1.6L17.1.2zM5 25h14v-3H5v3z"></path></g></g></svg>
<svg role="icon" class="svg-icon iconLogoGlyph" width="25" height="30" viewBox="0 0 25 30"><g fill="none"><g fill="#BCBBBB"><path d="M21 27v-8h3v11H0V19h3v8z"></path></g><g fill="#F48024"><path fill="#F48024" d="M5.402 19.101l13.561 1.96.164-2.38-13.256-2.547-.469 2.967zM7.2 12.3l12 5.6 1.1-2.4-12-5.6-1.1 2.4zm3.4-5.9l10.2 8.5 1.7-2-10.2-8.5-1.7 2zM17.1.2L15 1.8l7.9 10.6 2.1-1.6L17.1.2zM5 25h14v-3H5v3z"></path></g></g></svg>
</div>
您只需将此 SVG 更改为您希望使用原生颜色的图标。始终应该用当前颜色填充的图标不需要更改。
关于css - 否定填充 :currentColor,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44295540/
是否有像 currentcolor 这样的关键字可以让我们在默认状态下获取类的颜色? 例如,我正在尝试创建一个可重复使用的按钮样式,在我尝试创建 :hovered 状态之前,currentcolor
有没有办法取消或删除fill: currentColor? .svg-icon * { /* Targets all sub-elements so we can deliver icons wi
我自定义链接。我希望 border-color 取决于 color。为此,我使用 CurrentColor。 如何制作不透明度为 0.5 的border-bottom? a { text-deco
我从 font awesome 为 android 中的应用程序下载了一个 svg 图标,当我创建矢量 Assets 时我导入了我的 svg,但是当我尝试编译它时出现以下错误 error: 'curr
当通过自定义属性将 color 设置为 currentColor 时,它不起作用。 无论属性是在 :root 还是 .selector 范围内设置。 但是当它被直接设置为 currentColor 时
当我用不同的颜色值属性动态设置元素的类时,渐变 currentColor 值保持不变。现场示例:http://codepen.io/neilhem/pen/jbWRZZ div { width:
与 How do I have an SVG image inherit colors from the HTML document? 相同的问题, 但特别是当应用于用作 :before 伪元素内容的
我正在尝试使用 CSS currentColor作为边框颜色使用 :after content 生成 CSS 三 Angular 形。这在我试过的所有浏览器中都很好用,除了一个:Safari 似乎从它
如果 currentWidth 存在就好了。规范中是否还有其他类似 currentColor 的内容? 最佳答案 您正在请求一个值列表,其计算值与其他值相关。 而且这个列表很短。如果我们梳理 CSS
请看这个最小的例子 .inherit { color: red; } .inherit p { color: inherit; } .currentColor { color: red;
我不经常使用 currentColor,但当我使用时,它非常有用。 所以我对 CSS 变量的到来感到有点兴奋。 让我们以红绿灯为例。 注意日本交通灯会从红色变为琥珀色再变为蓝色,请相信我。我知道这很难
在最新的 Chrome 版本 (49) 中有一个错误,其中 CSS 就像...... background: linear-gradient(currentColor, green); …当元素的 c
background: linear-gradient(7deg, currentColor 50%, transparent 50%) 元素的颜色是 一旦您在 IE 中检查该元素,它就会显示特异性
假设我有以下 HTML: Link 1 Link 2 以及以下 CSS: a { color: white; } a:hover { color: green; } #link1 span { col
长话短说 这是一个 fiddle (谢谢@NicoO):在 Safari 中,初始的“红色”颜色会应用于 currentColor 的所有其他实例。 . 如何使用 CSS 修复 currentColo
我正在尝试使用 Tailwind CSS 让 SVG 在暗模式下更改颜色。这意味着我必须使用像 text-white 这样的类来设置 SVG 的填充颜色(转换为 --tw-text-opacity:
我是一名优秀的程序员,十分优秀!