svg - 在 SVG1.1 中可能有类似于 vector-effect="non-scaling-stroke" 的结果
问题描述
想象一下,我们有一个很长的实例列表(作为示例,请参见下面的两个这样的实例 (INSTANCE1
和INSTANCE2
)),它们都依赖于一些#DEFINED_RECTANGLE_WHITE
在其定义中不包含笔画信息的预定义。
如您所见,一些实例将被缩放(参见例如scale(1 2)
)。我想知道现在抚摸所有这些实例的最佳方式是什么(所有这些实例都应该具有相同的笔划宽度,我不希望笔划在缩放对象的任何维度上都更宽)。
<use id="INSTANCE1"
xlink:href="#DEFINED_RECTANGLE_WHITE"
transform="rotate(90, 1, 1) translate(10,-400) scale(1 2)">
</use>
<use id="INSTANCE2"
xlink:href="#DEFINED_RECTANGLE_WHITE"
transform="translate(10,140)">
</use>
如果没有 SVG1.2 功能,如何做到这一点?
解决方案
您可以使用滤镜来创建轮廓效果吗?您必须将您的 use 元素包含在一个组或另一个 svg 中,然后对其应用过滤器。
此外,扩张运算符可能会产生不希望的结果,例如最后一个旋转矩形中的斜角效果。
<svg xmlns="http://www.w3.org/2000/svg" width="200px" height="200px" viewBox="0 0 100 100">
<defs>
<rect id="rectangle" width="10" height="10" fill="rgb(200,220,120)"/>
<filter id="outline">
<feMorphology operator="dilate" radius="4" result="result1"/>
<feFlood flood-color="rgb(51,51,51)" result="result2"/>
<feComposite in="result2" in2="result1" operator="in" result="result3"/>
<feComposite in="SourceGraphic" in2="result3"/>
</filter>
</defs>
<g filter="url(#outline)">
<use href="#rectangle" transform="translate(50,10) scale(4 1) rotate(90,1,1)"/>
<use href="#rectangle" transform="translate(40,30)"/>
<use href="#rectangle" transform="translate(20,50) scale(6 0.5)"/>
<use href="#rectangle" transform="translate(60,70) rotate(45,1,1)"/>
</g>
</svg>
编辑:哦,快!@Kaiido 在我写我的时候发布了完全相同的答案。对不起,偷了你的雷=(
推荐阅读
- javascript - 将道具添加到作为道具传递的 React 组件?
- python - 设置 nan 值数据框时的警告
- javascript - 显示表数据时不断获取“未定义的地图”,React 挂钩
- python - 如何使用 Pyinstaller 创建的可执行 python 解决“jinja2.exceptions.TemplateNotFound: html.tpl”
- html - svg 无限波动画
- amazon-web-services - 使用 Twilio 从 S3 发送 VCard 时出错
- google-cloud-platform - 谷歌负载均衡器 www 到非 www 重定向
- c# - 邮递员转换为 C# 代码的问题
- python-3.x - 将可读的 GUID 转换为 IFC-GUID(22 个字符长度的字符串) - Python
- javascript - npm run 找不到模块 graceful-fs