代码之家  ›  专栏  ›  技术社区  ›  ashish singh

为什么转换会移动整个cordinate系统,而不是移动SVG中的元素?

  •  0
  • ashish singh  · 技术社区  · 7 年前

    我认为在canvas和CSS中,它的行为是相同的,所以标记javascript和CSS也是一样的。

    1 回复  |  直到 6 年前
        1
  •  0
  •   ccprog    7 年前

    我不确定我是否理解你的问题,但让我试试:

    1. 转换后的元素可能不是grafics元素,而是容器,例如 <g> 要素在这种情况下,所有子图元都将继承变换后的坐标系。
    2. 元素可能具有关联的绘制服务器(例如,图案或渐变),或者具有自己的大小和定位机制的过滤器、遮罩或剪裁路径。这些机构在变换后的坐标系中工作。

      这里有一个例子来说明。第一个矩形具有线性渐变,其渐变向量在用户空间中定义。第二个矩形相同,但旋转并平移到一侧。然后将渐变与矩形一起移动。

    <svg width="200" height="150">
      <defs>
        <linearGradient id="gradient" gradientUnits="userSpaceOnUse"
            x1="0" y1="50" x2="100" y1="50">
          <stop stop-color="red" offset="0"/>
          <stop stop-color="blue" offset="1"/>
        </linearGradient>
      </defs>
      <rect x="0" y="20" width="100" height="30" fill="url(#gradient)" />
      <rect x="0" y="20" width="100" height="30" fill="url(#gradient)" transform="translate(200, 20) rotate(90)" />
    </svg>
    1. transform 属性仅采用用户空间坐标,即无单位数字、定位和大小属性(如x、y、宽度和高度等)可能具有单位标识符(如百分比、, em 或其他CSS单元标识符。这使我们能够进行更灵活的定位。

      例如,下面的矩形将始终出现在SVG中间的相同大小,而不管它是否被调整大小:

    <svg width="100%" height="100%">
      <rect x="50%" y="50%" width="60" height="60" transform="translate(-30, -30)" />
    </svg>