CSS [attribute="value"] 规则不适用于 jquery-svg 图像
CSS with [attribute="value"] rules not applying to jquery-svg image
我已经用 jquery-svg 加载了一个 inkscape SVG 文件,我正在尝试应用一堆 CSS 选择器以确保特定层的项目都是统一的颜色,并允许在某些层上产生鼠标悬停效果。它似乎没有遵守 SVG 上的标准 CSS 规则的问题,但完全忽略了带有 [attribute="value"]
选择器的任何内容,例如:
svg g path:hover {
fill: yellow !important;
stroke-width: 4px !important;
}
将在鼠标悬停时应用这些效果,如预期的那样:
svg g[inkscape\:label="footprint"] * {
fill: white !important;
pointer-events: none;
}
完全忽略这一点,导致 :hover 事件仍然适用于它们。我还设置了 CSS 样式以将规则应用于图例 div 和 SVG,如下所示:
svg g[inkscape\:label="social"] *,
div#legend div.legendEntry[name="social"] div.legendColor {
fill: orange !important;
background-color: orange;
}
这将毫无问题地匹配 div#legend div.legendEntry[name="social"] div.legendColor
,但似乎不适用于 svg g[inkscape\:label="social"] *
选择器。
我假设这与 jquery-svg 或 jQuery 在页面加载后更改 DOM 有关 - 虽然这不是我的问题直接将 SVG 数据加载到页面中,无需 jquery-svg。我可以通过 jquery-svg 直接应用样式,但是如果能够告诉它在加载 SVG 文件后应用现有样式会更好。
SVG 是一种基于 XML 的格式,因此,inkscape:label
不是名称中包含冒号的 inkscape:label
属性,而是 label
inkscape
XML 命名空间中的属性。
SVG 很可能被加载为 XML,这意味着您需要正确声明和引用 XML 命名空间,而不是将冒号视为属性名称的文字部分在你的选择器中。您可以使用样式表顶部的 @namespace
statement 执行此操作:
@namespace inkscape 'http://www.inkscape.org/namespaces/inkscape';
而不是 [inkscape\:label="..."]
,使用 [inkscape|label="..."]
,用竖线而不是转义冒号来表示 namespace prefix:
svg g[inkscape|label="footprint"] * {
fill: white !important;
pointer-events: none;
}
svg g[inkscape|label="social"] *,
div#legend div.legendEntry[name="social"] div.legendColor {
fill: orange !important;
background-color: orange;
}
我已经用 jquery-svg 加载了一个 inkscape SVG 文件,我正在尝试应用一堆 CSS 选择器以确保特定层的项目都是统一的颜色,并允许在某些层上产生鼠标悬停效果。它似乎没有遵守 SVG 上的标准 CSS 规则的问题,但完全忽略了带有 [attribute="value"]
选择器的任何内容,例如:
svg g path:hover {
fill: yellow !important;
stroke-width: 4px !important;
}
将在鼠标悬停时应用这些效果,如预期的那样:
svg g[inkscape\:label="footprint"] * {
fill: white !important;
pointer-events: none;
}
完全忽略这一点,导致 :hover 事件仍然适用于它们。我还设置了 CSS 样式以将规则应用于图例 div 和 SVG,如下所示:
svg g[inkscape\:label="social"] *,
div#legend div.legendEntry[name="social"] div.legendColor {
fill: orange !important;
background-color: orange;
}
这将毫无问题地匹配 div#legend div.legendEntry[name="social"] div.legendColor
,但似乎不适用于 svg g[inkscape\:label="social"] *
选择器。
我假设这与 jquery-svg 或 jQuery 在页面加载后更改 DOM 有关 - 虽然这不是我的问题直接将 SVG 数据加载到页面中,无需 jquery-svg。我可以通过 jquery-svg 直接应用样式,但是如果能够告诉它在加载 SVG 文件后应用现有样式会更好。
SVG 是一种基于 XML 的格式,因此,inkscape:label
不是名称中包含冒号的 inkscape:label
属性,而是 label
inkscape
XML 命名空间中的属性。
SVG 很可能被加载为 XML,这意味着您需要正确声明和引用 XML 命名空间,而不是将冒号视为属性名称的文字部分在你的选择器中。您可以使用样式表顶部的 @namespace
statement 执行此操作:
@namespace inkscape 'http://www.inkscape.org/namespaces/inkscape';
而不是 [inkscape\:label="..."]
,使用 [inkscape|label="..."]
,用竖线而不是转义冒号来表示 namespace prefix:
svg g[inkscape|label="footprint"] * {
fill: white !important;
pointer-events: none;
}
svg g[inkscape|label="social"] *,
div#legend div.legendEntry[name="social"] div.legendColor {
fill: orange !important;
background-color: orange;
}