找回密码
 立即注册
搜索
查看: 5|回复: 2

SVG vector-effect 属性之禁用描边缩放 转自马黑教程专版

[复制链接]

1490

主题

3178

回帖

1万

积分

管理员

积分
12789
发表于 昨天 14:13 | 显示全部楼层 |阅读模式

1490

主题

3178

回帖

1万

积分

管理员

积分
12789
 楼主| 发表于 昨天 14:15 | 显示全部楼层
<style>
    .pa {
        width: 400px;
        min-width: 200px;
        height: auto;
        aspect-ratio: 2/1; /* 保持2:1宽高比 */
        border: 1px solid gray;
        overflow: hidden; /* 拖曳改变元素尺寸支持 */
        resize: horizontal; /* 横向拖曳 */
        margin: 30px auto 0;
    }
</style>

<div class="pa">
    <svg width="100%" height="100%" viewBox="0 0 100 50">
        <!-- 路径 :设置为描边不缩放 -->
        <path
          d="M 2 25 A1 0.4,0 0 0, 98 25"
          fill="none"
          stroke="red"
          stroke-width="2"
          vector-effect="non-scaling-stroke"
        />
        <!-- 圆 :不禁止描边缩放(缺省默认) -->
        <circle
          cx="10"
          cy="10"
          r="5"
          fill="lightgreen"
          stroke="orange"
          stroke-width="1"
        />
        <!--矩形 :描边不缩放 -->
        <rect
          x="50"
          y="25"
          width="10"
          height="10"
          fill="tan"
          stroke="red"
          stroke-width="4"
          vector-effect="non-scaling-stroke"
        >
            <animateTransform
              attributeName="transform"
              type="rotate"
              from="0 55 30"
              to="360 55 30"
              dur="8s"
              vector-effect="non-rotation"
              repeatCount="indefinite"
            />
        </rect>
    </svg>
</div>

1490

主题

3178

回帖

1万

积分

管理员

积分
12789
 楼主| 发表于 昨天 14:17 | 显示全部楼层

当我们在 viewBox 中绘制图形,图形的大小缩放看 svg 的宽高,具体依据的是 SVG 根元素的 width、height 和 viewBox 设定的 width、height 的比例关系。

而 SVG 子元素如果存在描边(stroke)属性,默认情况下,描边的厚度(stroke-width)也会自动跟随上述二者的比例缩放。某些场景下,可能不希望描边变细或变粗,这时候就得用上 vector-effect 属性,该属性可以翻译为“矢量效果”,其可选值中有一个 non-scaling-stroke,基于矢量图形的缩放效果,该值意为不缩放描边厚度。

一楼示例,圆缺省默认缩放描边厚度,A指令绘制的路径、旋转的矩形则禁用缩放。预览效果时可以拖曳方框右下角水平改变方框的尺寸,方框内的 SVG 会跟随改变大小,SVG 内的 子元素尺寸会自适应场景产生缩放变化,变化过程中的观察对象为三个子元素的 stroke-width。


您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

协同嘉业科技有限公司 ( 京ICP备2024053108号-1 )

GMT+8, 2026-8-2 05:08 , Processed in 0.078770 second(s), 29 queries .

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

快速回复 返回顶部 返回列表