gpt4 book ai didi

html - 使用 CSS 将 SVG 样式作为内容标签加载到 HTML

转载 作者:太空宇宙 更新时间:2023-11-04 08:13:55 26 4
gpt4 key购买 nike

我有 3 个文件:

index.html

<!DOCTYPE html>
<html>
<head>
<link type="text/css" rel="stylesheet" href="style.css" />
</head>
<body>
<i class="logo myRed" aria-hidden="true"></i>
</body>
</html>

样式.css

.logo:before {
content: url("logo.svg");
}
.myRed {
color: #ff2000;
}

logo.svg

<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">

<svg version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"
width="300" height="100">
<rect id="logo" width="300" height="100" />
</svg>

如何设置 CSS content 属性中指出的 SVG 样式? (例如颜色、字体大小……)——就像在 FontAwesome 中一样。

最佳答案

你不能。

CSS content: url(image.ext)类似于在 <img> 中加载图像标签。并在 <img> 中加载图像在引擎盖下将它加载到一个孤立的文档中,任何人都无法访问,也无法访问任何内容。

FontAwesome 不会像那样加载图标,它们会构建字体,然后在 content 中调用相应的字符属性,例如 "\f07b" .
所以对于浏览器来说,FontAwesome 图标只是文本,你可以像其他文本一样设置它的样式。

要通过 CSS 设置 SVG 样式,它需要与您的样式表位于同一文档中(或通过 <use> 克隆)。



好吧,有一个 hack,可能对你有帮助,但我不知道它有多好,也不会得到支持:
Lea Verou demonstrated我们可以(滥用)使用 :target CSS 选择器以及 #elem_id用于显示 SVG 元素的特定节点或应用特定规则的片段标识符。

在你的 svg 中 <style>您可以创建如下规则:

#elem_id_1:target ~ #elem_to_color{
fill: red;
}
#elem_id_2:target ~ #elem_to_color{
fill: green;
}

然后在你的标记中,你只需要在 #elem_to_color 之前放置一些空元素。具有相应的 ID。

<g id="elem_id_1"></g>
<g id="elem_id_2"></g>
<rect id="elem_to_color"/>

现在,当您将 svg 加载为 yourfile.svg#elem_id_1 时, 第一条规则将适用并且 #elem_to_color会变红。如果将其加载为 yourfile.svg#elem_id_2 , 然后 #elem_to_color将是绿色的。

这个 hack 允许有一个 svg 文件,我们可以在其上外部控制呈现的样式。

/* a single file for all colors */

.logo::after {
content: url(https://dl.dropboxusercontent.com/s/2pkolmx0d9pebgl/logo.svg);
}

.logo.green::after {
content: url(https://dl.dropboxusercontent.com/s/2pkolmx0d9pebgl/logo.svg#green);
}

.logo.red::after {
content: url(https://dl.dropboxusercontent.com/s/2pkolmx0d9pebgl/logo.svg#red);
}
<!-- logo.svg content
<svg version="1.1" xmlns="http://www.w3.org/2000/svg" width="30" height="30">
<style>
#green:target ~ #elem_to_color{
fill: green;
}
#red:target ~ #elem_to_color{
fill: red;
}
</style>
<g id="red"></g>
<g id="green"></g>
<rect id="elem_to_color" width="30" height="30"/>
</svg>
-->

<i class="logo"></i>
<i class="logo green"></i>
<i class="logo red"></i>

关于html - 使用 CSS 将 SVG 样式作为内容标签加载到 HTML,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46045185/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com