css - Chrome中带有字母间距的SVG绘制顺序
问题描述
在 SVG 中,绘制顺序允许我们“控制文本内容和形状的填充和描边的绘制顺序”,将描边放在填充后面非常有用。
但是,我刚刚发现在 Chrome 中,当更改letter-spacing
CSS 属性时,不是所有笔触都被绘制在所有填充后面,而是似乎每个字母都是单独绘制的。
例如,给定这个片段:
text {
font-size: 60px;
stroke: wheat;
stroke-width: 10px;
letter-spacing: -5px;
paint-order: stroke;
}
<svg width="500" height="120">
<text x="10" y="100">This is an example</text>
</svg>
这是它在 Chrome 中的样子:
虽然,例如在 Firefox 中,结果是我所期望的:
因此,在报告错误之前,我想问一下:这种行为真的是依赖于实现的(也就是说,每个浏览器都以他们喜欢的方式实现它)还是在 SVG 文档的某个地方指定了它?
解决方案
这是另一种解决方案:stroke: wheat
您可以使用过滤器 feMorphology 与operator="dilate"
.
text {
font-size: 60px;
letter-spacing: -5px;
}
<svg width="500" height="120">
<filter id="outline">
<feMorphology in="SourceAlpha" result="expanded"
operator="dilate" radius="3"/>
<feFlood flood-color="wheat" result="color" />
<feComposite in ="color" in2="expanded" operator="in" />
<feComposite in="SourceGraphic"/>
</filter>
<text filter="url(#outline)" x="10" y="100">This is an example</text>
</svg>
推荐阅读
- html - 如何更改包含 span 和 I(图标 Bootstrap)的导航链接 Bootstrap 中的悬停?
- kubernetes - 从使用 kubectl 创建的 kfserving github 示例中提供服务,但无法推断
- ubuntu - 在 64 位 Ubuntu (21.04) 上下载 32 位 lapack 库
- oracle - terraform 错误“调用函数“索引”失败:找不到项目。”
- git - Visual Studio Git-commit 显示太多更改
- python - 使用 pika 在 rabbitMQ 中批量发送消息
- recurrence - 有谁知道如何解决这个重复练习?T(1) = 2 T(n) = 2T(n − 1) + n.2^n 对于 n ≥ 2
- sharepoint - Microsoft Flow/Power Automate - 从 Sharepoint 列表中选择当前项目
- firebase - flutter firebase googlesign in 说-“GoogleSignInAccount”类型的值?不能分配给“GoogleSignInAccount”类型的变量
- mongodb - 使用 @react-google-maps/api 创建的应用程序中位置的猫鼬模式