相关疑难解决方法(0)

如何仅使用CSS过滤器将黑色转换为任何给定的颜色

我的问题是:给定目标RGB颜色,#000使用CSS滤镜将黑色()重新着色为该颜色的公式是什么?

为了接受答案,它需要提供一个函数(以任何语言)接受目标颜色作为参数并返回相应的CSS filter字符串.

对此的上下文是需要在a内重新着色SVG background-image.在这种情况下,它是支持KaTeX中的某些TeX数学特性:https: //github.com/Khan/KaTeX/issues/587.

如果目标颜色为#ffff00(黄色),则一个正确的解决方案是:

filter: invert(100%) sepia() saturate(10000%) hue-rotate(0deg)
Run Code Online (Sandbox Code Playgroud)

(演示)

非目标

  • 动画.
  • 非CSS过滤器解决方案.
  • 从黑色以外的颜色开始.
  • 关心黑色以外的颜色会发生什么.

结果到目前为止

  • 强力搜索固定过滤器列表的参数:https
    ://stackoverflow.com/a/43959856/181228缺点:效率低下,只生成一些16,777,216种可能的颜色(676,248 hueRotateStep=1).

  • 使用SPSA的更快的搜索解决方案:https : //stackoverflow.com/a/43960991/181228 Bounty奖励

  • 一个drop-shadow解决方案: /sf/answers/3077189741/
    缺点:不上边缘运行.需要非filterCSS更改和次要HTML更改.

您仍然可以通过提交非暴力解决方案获得接受的答案!

资源

javascript css math algebra css-filters

91
推荐指数
6
解决办法
1万
查看次数

如何在避免FOMI的同时在外部CDN上缓存SVG图标?

我知道如何在我的网站上加载SVG图标,但我无法弄清楚如何满足以下所有限制:

  1. 能够在CSS中使用SVG图标
  2. 没有丢失的图标(FOMI)
  3. 最小初始页面大小
  4. 缓存的SVG
  5. 能够使用CDN
  6. 必须能够fill: currentColor使图标与当前文本颜色匹配,就像图标字体一样
  7. 奖励:像素对齐SVG,使它们看起来总是很清晰

通过使用外部精灵映射可以满足1,2,3和4:

<svg viewBox="0 0 100 100">
    <use xmlns:xlink="http://www.w3.org/1999/xlink"
         xlink:href="/assets/sprite-4faa5ef477.svg#icon-asterisk-50af6"></use>
</svg>
Run Code Online (Sandbox Code Playgroud)

但是在浏览器修复CORS问题之前我们不能使用CDN .

我们可以修补对外部域的支持,但我很确定这对CSS不起作用,因为它只监视DOM(抱歉,尚未测试),并且它还会导致你的浏览器产生一大堆对无法获取的文件的请求失败(页面上每个图标一个).

我们可以使用CDN,而不是内联整个SVG(增加页面大小,没有缓存)或我们AJAX它(导致FOMI).

那么,有没有满足所有的解决方案 7个限制?

基本上我希望SVG和图标字体一样方便,或者没有切换点.SVG支持多种颜色,并且更容易访问,但我无法让它们看起来很好,或者加载效率很高.

html css ajax performance svg

12
推荐指数
1
解决办法
1774
查看次数

标签 统计

css ×2

ajax ×1

algebra ×1

css-filters ×1

html ×1

javascript ×1

math ×1

performance ×1

svg ×1