Question: In [W3C's spec](http://www.w3.org/TR/SVG/coords.html), it says:

> 
> The value of the ‘transform’ attribute is a <transform-list>, which is defined as a list of transform definitions, which are applied in the order provided.
> 
> 
> ...
> 
> 
> If a list of transforms is provided, then the net effect is as if each transform had been specified separately in the order provided
> 
> 
> 

When I tried out the follow markups in firefox, chrome and IE10, all three rendered by doing translate first, then following by rotate! See the [codepen snippet](http://codepen.io/anon/pen/HGFbj). What have I missed here? Or the implementations from the 3 browsers are not W3C compliant?

```
<svg width="180" height="200"
  xmlns="http://www.w3.org/2000/svg" 
  xmlns:xlink="http://www.w3.org/1999/xlink">

  <!-- This is the element before translation and rotation are applied -->
  <rect x="0" y="0" height="100" width="100" style="stroke:#000; fill: #0086B2" fill-opacity=0.2 stroke-opacity=0.2></rect>

  <!-- Now we add a text element and apply rotate and translate to both -->
  <rect x="0" y="0" height="100" width="100" style="stroke:#000; fill: #0086B2" transform="rotate(45 100 50) translate(50)"></rect>
</svg>

```

Answer: 
[The specification](http://www.w3.org/TR/SVG/coords.html#TransformAttribute) is pretty clear about the order which is that the rightmost transform is applied first.

> 
> If a list of transforms is provided, then the net effect is as if each transform had been specified separately in the order provided.
> 
> 
> 

I.e,

```
<g transform="translate(-10,-20) scale(2) rotate(45) translate(5,10)">
  <!-- graphics elements go here -->
</g>

```

*is functionally equivalent to:*

```
<g transform="translate(-10,-20)">
  <g transform="scale(2)">
    <g transform="rotate(45)">
      <g transform="translate(5,10)">
        <!-- graphics elements go here -->
      </g>
    </g>
  </g>
</g>

```
```
If you want to sequentially change these transformations 
you have to try this one

<g transform="translate(-10,-20)  onmouseover=changeTransform(evt)">

function changeTransfrom(evt)
{
var id=evt.target;
id.setAttribute('transform',scale(0.5));
id.setAttribute('transform',rotate(30));
id.setAttribute('transform',skewY(45));
id.setAttribute('transform',matrix(2,2));
}

```