具有 CSS 个变量的 SVG 半径或位置
SVG radius or position with CSS variables
是否可以在 SVG 中使用 CSS 变量来操纵元素的“属性样式”中的半径或位置等值?
例如,在下面的代码中,我添加了一个 CSS 颜色变量 - --dark-text-clr
和一个半径变量 --radius
。当我使用 时,它渲染得很好 - 第一个圆,但使用 radius 变量不会渲染元素 - 第二个圆。
:root{
--dark-text-clr: blue;
--radius: 12;
}
<svg xmlns="http://www.w3.org/2000/svg" width="300px" height="100px" viewBox="0 0 300 100">
<circle cx="9" cy="9" fill="var(--dark-text-clr)" mask="url(#moon-mask)" r=9 ></circle>
<circle cx="36" cy="20" fill="var(--dark-text-clr)" mask="url(#moon-mask)" r="var(--radius)" ></circle>
</svg>
是的,但是 CSS must have units 用于非零值。
:root{
--dark-text-clr: blue;
--radius: 12px;
}
<svg xmlns="http://www.w3.org/2000/svg" width="300px" height="100px" viewBox="0 0 300 100">
<circle cx="9" cy="9" fill="var(--dark-text-clr)" mask="url(#moon-mask)" r=9 ></circle>
<circle cx="36" cy="20" fill="var(--dark-text-clr)" mask="url(#moon-mask)" r="var(--radius)" ></circle>
</svg>
根据 MDN Docs“从 SVG2 开始,r 是一个几何体 属性,这意味着该属性也可以用作圆的 CSS 属性。”
半径值有3种设置方式
- 作为属性
<circle ... r=10>
- 通过 class 和样式表
circle {
r: 10px;
}
- 内联 'style' 属性
<circle... style="r: 10px;" ></circle>
最后一种方式出现的次数最多。看一下这个示例,其中所有圆圈元素都将 r 设置为属性,它被样式表(第二个圆圈)覆盖,它再次被内联样式属性(第三个圆圈)覆盖
(这三种方式不必同时使用,只是组合起来说明哪一种出现率更高,覆盖掉已经设置的值)
:root {
--dark-text-clr: purple;
--radius: 20px;
}
.circle {
r: 10px;
}
<svg xmlns="http://www.w3.org/2000/svg" width="300px" height="300px" viewBox="0 0 300 300">
<circle cx="10" cy="10" fill="var(--dark-text-clr)" mask="url(#moon-mask)" r=5></circle>
<circle cx="30" cy="30" fill="var(--dark-text-clr)" mask="url(#moon-mask)" r=5 class="circle"></circle>
<circle cx="60" cy="60" fill="var(--dark-text-clr)" mask="url(#moon-mask)" r=5 class="circle" style="r: var(--radius);" ></circle>
</svg>
用属性上的变量设置 r 似乎在 firefox 中有效,但 在 chrome/edge
中无效
<circle ... r="var(--radius);" ></circle>
所以最好在样式属性上设置
<circle ... style="r: var(--radius);" ></circle>
是否可以在 SVG 中使用 CSS 变量来操纵元素的“属性样式”中的半径或位置等值?
例如,在下面的代码中,我添加了一个 CSS 颜色变量 - --dark-text-clr
和一个半径变量 --radius
。当我使用
:root{
--dark-text-clr: blue;
--radius: 12;
}
<svg xmlns="http://www.w3.org/2000/svg" width="300px" height="100px" viewBox="0 0 300 100">
<circle cx="9" cy="9" fill="var(--dark-text-clr)" mask="url(#moon-mask)" r=9 ></circle>
<circle cx="36" cy="20" fill="var(--dark-text-clr)" mask="url(#moon-mask)" r="var(--radius)" ></circle>
</svg>
是的,但是 CSS must have units 用于非零值。
:root{
--dark-text-clr: blue;
--radius: 12px;
}
<svg xmlns="http://www.w3.org/2000/svg" width="300px" height="100px" viewBox="0 0 300 100">
<circle cx="9" cy="9" fill="var(--dark-text-clr)" mask="url(#moon-mask)" r=9 ></circle>
<circle cx="36" cy="20" fill="var(--dark-text-clr)" mask="url(#moon-mask)" r="var(--radius)" ></circle>
</svg>
根据 MDN Docs“从 SVG2 开始,r 是一个几何体 属性,这意味着该属性也可以用作圆的 CSS 属性。”
半径值有3种设置方式
- 作为属性
<circle ... r=10>
- 通过 class 和样式表
circle {
r: 10px;
}
- 内联 'style' 属性
<circle... style="r: 10px;" ></circle>
最后一种方式出现的次数最多。看一下这个示例,其中所有圆圈元素都将 r 设置为属性,它被样式表(第二个圆圈)覆盖,它再次被内联样式属性(第三个圆圈)覆盖
(这三种方式不必同时使用,只是组合起来说明哪一种出现率更高,覆盖掉已经设置的值)
:root {
--dark-text-clr: purple;
--radius: 20px;
}
.circle {
r: 10px;
}
<svg xmlns="http://www.w3.org/2000/svg" width="300px" height="300px" viewBox="0 0 300 300">
<circle cx="10" cy="10" fill="var(--dark-text-clr)" mask="url(#moon-mask)" r=5></circle>
<circle cx="30" cy="30" fill="var(--dark-text-clr)" mask="url(#moon-mask)" r=5 class="circle"></circle>
<circle cx="60" cy="60" fill="var(--dark-text-clr)" mask="url(#moon-mask)" r=5 class="circle" style="r: var(--radius);" ></circle>
</svg>
用属性上的变量设置 r 似乎在 firefox 中有效,但 在 chrome/edge
中无效<circle ... r="var(--radius);" ></circle>
所以最好在样式属性上设置
<circle ... style="r: var(--radius);" ></circle>