6.7 The skewX and skewY Transformations

SVG also has two other transformations: skewX and skewY, which let you skew one of the axes.

Example 1

skewX skewY
   <svg width="200px" height="200px" viewBox="0 0 200 200" xmlns="http://www.w3.org/2000/svg">
  <rect x="0" y="0" width="100" height="50"
      style="fill:none; stroke:gray; stroke-width:2; stroke-dasharray:5 2"/>
  <g transform="skewX(10)" style="fill:none; stroke:#00aaaa; stroke-width:1;">
      <rect x="0" y="0" width="100" height="50"
      />
      <text x="5" y="50">skewX</text>
  </g>
  <g transform="skewY(20)" style="fill:none; stroke:#c00; stroke-width:1;">
      <rect x="0" y="0" width="100" height="50"
      />
      <text x="20" y="10">skewY</text>
  </g>
</svg>;

Example 2

transform="skewX(10)" results in vertical grid lines skewed by $10^{\circ}$

<svg width="200px" height="200px" viewBox="0 0 100 100" xmlns="http://www.w3.org/2000/svg">
    <g transform="skewX(10)" style="fill:none; stroke:red; stroke-width:1;">
          <!-- horizontal grid -->
          <line x1="0" y1="10" x2="100" y2="10" stroke="gray"/>
          <line x1="0" y1="20" x2="100" y2="20" stroke="gray"/>
          <line x1="0" y1="30" x2="100" y2="30" stroke="gray"/>
          <line x1="0" y1="40" x2="100" y2="40" stroke="gray"/>
          <line x1="0" y1="50" x2="100" y2="50" stroke="gray"/>
          <line x1="0" y1="60" x2="100" y2="60" stroke="gray"/>
          <line x1="0" y1="70" x2="100" y2="70" stroke="gray"/>
          <line x1="0" y1="80" x2="100" y2="80" stroke="gray"/>
          <line x1="0" y1="90" x2="100" y2="90" stroke="gray"/>
          <!-- verticaal grid is skewed-->
          <line y1="0" x1="10" y2="100" x2="10" stroke="gray"/>
          <line y1="0" x1="20" y2="100" x2="20" stroke="gray"/>
          <line y1="0" x1="30" y2="100" x2="30" stroke="gray"/>
          <line y1="0" x1="40" y2="100" x2="40" stroke="gray"/>
          <line y1="0" x1="50" y2="100" x2="50" stroke="gray"/>
          <line y1="0" x1="60" y2="100" x2="60" stroke="gray"/>
          <line y1="0" x1="70" y2="100" x2="70" stroke="gray"/>
          <line y1="0" x1="80" y2="100" x2="80" stroke="gray"/>
          <line y1="0" x1="90" y2="100" x2="90" stroke="gray"/>
          <!-- shapes -->
          <rect x="10" y="10" width="40" height="40" />
          <circle cx="50" cy="50" r="20"/>
  </g>
</svg>

Example 3

transform="skewY(10)" results in horizontal grid lines skewed by $10^{\circ}$

<svg width="200px" height="200px" viewBox="0 0 100 100" xmlns="http://www.w3.org/2000/svg">
    <g transform="skewY(10)" style="fill:none; stroke:red; stroke-width:1;">
          <!-- horizontal grid -->
          <line x1="0" y1="10" x2="100" y2="10" stroke="gray"/>
          <line x1="0" y1="20" x2="100" y2="20" stroke="gray"/>
          <line x1="0" y1="30" x2="100" y2="30" stroke="gray"/>
          <line x1="0" y1="40" x2="100" y2="40" stroke="gray"/>
          <line x1="0" y1="50" x2="100" y2="50" stroke="gray"/>
          <line x1="0" y1="60" x2="100" y2="60" stroke="gray"/>
          <line x1="0" y1="70" x2="100" y2="70" stroke="gray"/>
          <line x1="0" y1="80" x2="100" y2="80" stroke="gray"/>
          <line x1="0" y1="90" x2="100" y2="90" stroke="gray"/>
          <!-- verticaal grid is skewed-->
          <line y1="0" x1="10" y2="100" x2="10" stroke="gray"/>
          <line y1="0" x1="20" y2="100" x2="20" stroke="gray"/>
          <line y1="0" x1="30" y2="100" x2="30" stroke="gray"/>
          <line y1="0" x1="40" y2="100" x2="40" stroke="gray"/>
          <line y1="0" x1="50" y2="100" x2="50" stroke="gray"/>
          <line y1="0" x1="60" y2="100" x2="60" stroke="gray"/>
          <line y1="0" x1="70" y2="100" x2="70" stroke="gray"/>
          <line y1="0" x1="80" y2="100" x2="80" stroke="gray"/>
          <line y1="0" x1="90" y2="100" x2="90" stroke="gray"/>
          <!-- shapes -->
          <rect x="10" y="10" width="40" height="40" />
          <circle cx="50" cy="50" r="20"/>
  </g>
</svg>

Example 4

transform="skewX(10) skewXY(10)" results in vertical and horizontal grid lines skewed by $10^{\circ}$

<svg width="200px" height="200px" viewBox="0 0 100 100" xmlns="http://www.w3.org/2000/svg">
    <g transform="skewX(10) skewY(10)" style="fill:none; stroke:red; stroke-width:1;">
          <!-- horizontal grid -->
          <line x1="0" y1="10" x2="100" y2="10" stroke="gray"/>
          <line x1="0" y1="20" x2="100" y2="20" stroke="gray"/>
          <line x1="0" y1="30" x2="100" y2="30" stroke="gray"/>
          <line x1="0" y1="40" x2="100" y2="40" stroke="gray"/>
          <line x1="0" y1="50" x2="100" y2="50" stroke="gray"/>
          <line x1="0" y1="60" x2="100" y2="60" stroke="gray"/>
          <line x1="0" y1="70" x2="100" y2="70" stroke="gray"/>
          <line x1="0" y1="80" x2="100" y2="80" stroke="gray"/>
          <line x1="0" y1="90" x2="100" y2="90" stroke="gray"/>
          <!-- verticaal grid is skewed-->
          <line y1="0" x1="10" y2="100" x2="10" stroke="gray"/>
          <line y1="0" x1="20" y2="100" x2="20" stroke="gray"/>
          <line y1="0" x1="30" y2="100" x2="30" stroke="gray"/>
          <line y1="0" x1="40" y2="100" x2="40" stroke="gray"/>
          <line y1="0" x1="50" y2="100" x2="50" stroke="gray"/>
          <line y1="0" x1="60" y2="100" x2="60" stroke="gray"/>
          <line y1="0" x1="70" y2="100" x2="70" stroke="gray"/>
          <line y1="0" x1="80" y2="100" x2="80" stroke="gray"/>
          <line y1="0" x1="90" y2="100" x2="90" stroke="gray"/>
          <!-- shapes -->
          <rect x="10" y="10" width="40" height="40" />
          <circle cx="50" cy="50" r="20"/>
  </g>
</svg>