花潮论坛

搜索
热搜: 活动 交友 discuz
查看: 6|回复: 1

SVG vector-effect 属性之禁用描边缩放

[复制链接]
  • TA的每日心情
    奋斗
    2026-7-26 23:43
  • 签到天数: 1881 天

    [LV.Master]伴坛终老

    3288

    主题

    13万

    回帖

    29万

    积分

    管理员

    Rank: 9Rank: 9Rank: 9Rank: 9Rank: 9Rank: 9Rank: 9Rank: 9Rank: 9

    花潮帅哥鼠牛虎兔龙蛇马羊猴鸡狗猪多彩人生星月交辉奔放热烈海样胸怀春风拂面火热情怀优雅迷人神秘浪漫相遇之美鹰傲苍穹花好月圆紫色情节飞龙在天王者至尊大将风范音画大师天籁妙音共看流星风雨同行我心永远幸福快乐喜乐安康侠骨柔肠心想事成开朗大方花潮管理

    发表于 2026-7-27 08:46 | 显示全部楼层 |阅读模式

    请马上登录,朋友们都在花潮里等着你哦:)

    您需要 登录 才可以下载或查看,没有账号?立即注册

    x
    <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>
    
  • TA的每日心情
    奋斗
    2026-7-26 23:43
  • 签到天数: 1881 天

    [LV.Master]伴坛终老

    3288

    主题

    13万

    回帖

    29万

    积分

    管理员

    Rank: 9Rank: 9Rank: 9Rank: 9Rank: 9Rank: 9Rank: 9Rank: 9Rank: 9

    花潮帅哥鼠牛虎兔龙蛇马羊猴鸡狗猪多彩人生星月交辉奔放热烈海样胸怀春风拂面火热情怀优雅迷人神秘浪漫相遇之美鹰傲苍穹花好月圆紫色情节飞龙在天王者至尊大将风范音画大师天籁妙音共看流星风雨同行我心永远幸福快乐喜乐安康侠骨柔肠心想事成开朗大方花潮管理

     楼主| 发表于 2026-7-27 08:47 | 显示全部楼层
    当我们在 viewBox 中绘制图形,图形的大小缩放看 svg 的宽高,具体依据的是 SVG 根元素的 width、height 和 viewBox 设定的 width、height 的比例关系。

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

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

    使用道具 举报

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

    本版积分规则

    小黑屋|手机版|Archiver|服务支持:DZ动力|huachaowang.com Inc. ( 蜀ICP备17032287号-1 )

    GMT+8, 2026-7-27 10:47 , Processed in 0.072215 second(s), 25 queries .

    Powered by Discuz! X3.4

    © 2001-2013 Comsenz Inc.

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