If we take each row in the SVG 1.1 Attribute Table appendix that is marked as animatable, we start with 184 attributes. This includes separate entries for, say, width on rect to width on image, since they have different definitions in the specification. On the other hand, transform has a single definition which many other elements reference, so there is only a single row for it.
The only animatable attribute I can see we definitely want to exclude from promoting to a property is class.
I'll start here with a fairly blind mapping of attributes to properties, unifying only where it is really obvious.
| Attribute | Elements | Property |
|---|---|---|
| filter-specific attributes: | ||
| filterRes | filter | filter-res |
| filterUnits | filter | filter-units |
| primitiveUnits | filter | filter-primitive-units |
| in | feBlend, feColorMatrix, etc. | filter-input |
| in2 | feBlend, feComposite, feDisplacementMap | filter-input-2 |
| result | feBlend, feColorMatrix, etc. | filter-result |
| mode | feBlend | blend-mode |
| type | feColorMatrix | color-matrix-type |
| values | feColorMatrix | color-matrix-values |
| k1 | feComposite | composite-arithmetic-constant-1 |
| k2 | feComposite | composite-arithmetic-constant-2 |
| k3 | feComposite | composite-arithmetic-constant-3 |
| k4 | feComposite | composite-arithmetic-constant-4 |
| operator | feComposite | composite-operator |
| bias | feConvolveMatrix | convolve-bias |
| divisor | feConvolveMatrix | convolve-divisor |
| edgeMode | feConvolveMatrix | convolve-edge-mode |
| kernelMatrix | feConvolveMatrix | convolve-kernel-matrix |
| kernelUnitLength | feConvolveMatrix | convolve-kernel-unit-length |
| order | feConvolveMatrix | convolve-order |
| preserveAlpha | feConvolveMatrix | convolve-preserve-alpha |
| targetX | feConvolveMatrix | convolve-target-x |
| targetY | feConvolveMatrix | convolve-target-y |
| diffuseConstant | feDiffuseLighting | lighting-diffuse-constant |
| kernelUnitLength | feDiffuseLighting, feSpecularLighting | lighting-kernel-unit-length |
| surfaceScale | feDiffuseLighting, feSpecularLighting | lighting-surface-scale |
| specularConstant | feSpecularLighting | lighting-specular-constant |
| specularExponent | feSpecularLighting | lighting-specular-exponent |
| scale | feDisplacementMap | displacement-map-scale |
| xChannelSelector | feDisplacementMap | displacement-map-x-channel |
| yChannelSelector | feDisplacementMap | displacement-map-y-channel |
| stdDeviation | feGaussianBlur | gaussian-blur-standard-deviation |
| operator | feMorphology | morphology-operator |
| radius | feMorphology | morphology-radius |
| dx | feOffset | offset-dx |
| dy | feOffset | offset-dy |
| baseFrequency | feTurbulence | turbulence-frequence |
| numOctaves | feTurbulence | turbulence-octaves |
| seed | feTurbulence | turbulence-seed |
| stitchTiles | feTurbulence | turbulence-stitch-tiles |
| type | feTurbulence | turbulence-type |
| type | feFuncA, etc. | transfer-function-type |
| amplitude | feFuncA, etc. | transfer-function-slope |
| exponent | feFuncA, etc. | transfer-function-exponent |
| intercept | feFuncA, etc. | transfer-function-intercept |
| offset | feFuncA, etc. | transfer-function-offset |
| slope | feFuncA, etc. | transfer-function-slope |
| tableValues | feFuncA, etc. | transfer-function-table |
| azimuth | feDistantLight | light-azimuth |
| elevation | feDistantLight | light-elevation |
| limitingConeAngle | feSpotLight | light-limiting-cone-angle |
| pointsAtX | feSpotLight | light-points-at-x |
| pointsAtY | feSpotLight | light-points-at-y |
| pointsAtZ | feSpotLight | light-points-at-z |
| specularExponent | feSpotLight | light-specular-exponent |
| x | feSpotLight, fePointLight | light-position-x |
| y | feSpotLight, fePointLight | light-position-y |
| z | feSpotLight, fePointLight | light-position-z |
| gradient-specific attributes: | ||
| gradientTransform | linearGradient, radialGradient | gradient-transform |
| gradientUnits | linearGradient, radialGradient | gradient-units |
| spreadMethod | linearGradient, radialGradient | gradient-spread-method |
| xlink:href | linearGradient, radialGradient | gradient-parent |
| x1 | linearGradient | gradient-start-x |
| y1 | linearGradient | gradient-start-y |
| x2 | linearGradient | gradient-end-x |
| y2 | linearGradient | gradient-end-y |
| cx | radialGradient | gradient-center-x |
| cy | radialGradient | gradient-center-y |
| fx | radialGradient | gradient-focus-x |
| fy | radialGradient | gradient-focus-y |
| r | radialGradient | gradient-radius |
| remaining attributes: | ||
| clipPathUnits | clipPath | clip-path-units |
| cx | circle, ellipse | center-x |
| cy | circle, ellipse | center-y |
| d | path | path-data |
| dx | altGlyph, text, tref, tspan | glyph-offset-x |
| dy | altGlyph, text, tref, tspan | glyph-offset-y |
| width | filter, foreignObject, image, mask, pattern, rect, svg, use, feBlend (and other filter primitives) | width |
| markerWidth | marker | width |
| height | filter, foreignObject, image, mask, pattern, rect, svg, use, feBlend (and other filter primitives) | height |
| markerHeight | marker | height |
| lengthAdjust | text, textPath, tref, tspan | text-length-adjust |
| markerUnits | marker | marker-units |
| maskContentUnits | mask | mask-content-units |
| maskUnits | mask | mask-units |
| method | textPath | text-path-method |
| offset | stop | stop-offset |
| orient | marker | marker-orient |
| pathLength | path | path-length |
| patternContentUnits | pattern | pattern-content-units |
| patternTransform | pattern | pattern-transform |
| patternUnits | pattern | pattern-units |
| points | polygon, polyline | poly-points |
| preserveAspectRatio | feImage, image, marker, etc. | preserve-aspect-ratio |
| r | circle | circle-radius |
| refX | marker | marker-reference-point-x |
| refY | marker | marker-reference-point-y |
| rotate | altGlyph, text, tref, tspan | glyph-rotate |
| rx | ellipse | ellipse-radius-x |
| ry | ellipse | ellipse-radius-y |
| rx | rect | rect-corner-radius-x |
| ry | rect | rect-corner-radius-y |
| spacing | textPath | text-path-spacing |
| startOffset | textPath | text-path-start-offset |
| target | a | link-target |
| textLength | text, textPath, tref, tspan | text-length |
| transform | a, circle, etc. | transform |
| viewBox | marker, pattern, etc. | viewbox |
| x | altGlyph, text, tref, tspan | glyph-position-x |
| y | altGlyph, text, tref, tspan | glyph-position-y |
| x | cursor | cursor-reference-point-x |
| y | cursor | cursor-reference-point-y |
| x | filter, foreignObject, image, mask, pattern, rect, svg, use, feBlend (and other filter primitives) | left |
| y | filter, foreignObject, image, mask, pattern, rect, svg, use, feBlend (and other filter primitives) | top |
| x1 | line | line-start-x |
| y1 | line | line-start-y |
| x2 | line | line-end-x |
| y2 | line | line-end-y |
| xlink:href | a | link-href |
| xlink:href | cursor | cursor-image |
| xlink:href | feImage | image-href |
| xlink:href | filter | filter-parent |
| xlink:href | image | image-href |
| xlink:href | pattern | pattern-parent |
| xlink:href | textPath | text-path-reference |
| xlink:href | use | used-content |
| xlink:href | tref | text-content |
That is new properties.
The names I chose for properties are certainly up for discussion. I tried not to be constrained by the existing names of the SVG attributes and instead chose names that look more like real CSS properties.
Since it still seems to be open whether we want to promote the filter and gradient attributes just yet, because they will have more specialised/usable syntax in CSS, I separated them out. As Robert mentioned, though, it is prudent to look at how all of the attributes would be promoted, even if we are avoiding doing so for some of them initially.
The unifications I made in the above table are:
I am uneasy about promoting xlink:href and target on a to properties. Every other property is simply about the visual display of elements, but these ones affect an element's interactive behaviour. (Maybe that's OK.)
We can consider some more property unification:
Applying the above, we get the following table of attribute to property mappings:
| Attribute | Elements | Property |
|---|---|---|
| filter-specific attributes: | ||
| filterRes | filter | filter-res |
| filterUnits | filter | element-units |
| primitiveUnits | filter | content-units |
| in | feBlend, feColorMatrix, etc. | filter-input |
| in2 | feBlend, feComposite, feDisplacementMap | filter-input-2 |
| result | feBlend, feColorMatrix, etc. | filter-result |
| mode | feBlend | blend-mode |
| type | feColorMatrix | color-matrix-type |
| values | feColorMatrix | color-matrix-values |
| k1 | feComposite | composite-arithmetic-constant-1 |
| k2 | feComposite | composite-arithmetic-constant-2 |
| k3 | feComposite | composite-arithmetic-constant-3 |
| k4 | feComposite | composite-arithmetic-constant-4 |
| operator | feComposite | composite-operator |
| bias | feConvolveMatrix | convolve-bias |
| divisor | feConvolveMatrix | convolve-divisor |
| edgeMode | feConvolveMatrix | convolve-edge-mode |
| kernelMatrix | feConvolveMatrix | convolve-kernel-matrix |
| kernelUnitLength | feConvolveMatrix | convolve-kernel-unit-length |
| order | feConvolveMatrix | convolve-order |
| preserveAlpha | feConvolveMatrix | convolve-preserve-alpha |
| targetX | feConvolveMatrix | convolve-target-x |
| targetY | feConvolveMatrix | convolve-target-y |
| diffuseConstant | feDiffuseLighting | lighting-diffuse-constant |
| kernelUnitLength | feDiffuseLighting, feSpecularLighting | lighting-kernel-unit-length |
| surfaceScale | feDiffuseLighting, feSpecularLighting | lighting-surface-scale |
| specularConstant | feSpecularLighting | lighting-specular-constant |
| specularExponent | feSpecularLighting | lighting-specular-exponent |
| scale | feDisplacementMap | displacement-map-scale |
| xChannelSelector | feDisplacementMap | displacement-map-x-channel |
| yChannelSelector | feDisplacementMap | displacement-map-y-channel |
| stdDeviation | feGaussianBlur | gaussian-blur-standard-deviation |
| operator | feMorphology | morphology-operator |
| radius | feMorphology | morphology-radius |
| dx | feOffset | offset-dx |
| dy | feOffset | offset-dy |
| baseFrequency | feTurbulence | turbulence-frequence |
| numOctaves | feTurbulence | turbulence-octaves |
| seed | feTurbulence | turbulence-seed |
| stitchTiles | feTurbulence | turbulence-stitch-tiles |
| type | feTurbulence | turbulence-type |
| type | feFuncA, etc. | transfer-function-type |
| amplitude | feFuncA, etc. | transfer-function-slope |
| exponent | feFuncA, etc. | transfer-function-exponent |
| intercept | feFuncA, etc. | transfer-function-intercept |
| offset | feFuncA, etc. | transfer-function-offset |
| slope | feFuncA, etc. | transfer-function-slope |
| tableValues | feFuncA, etc. | transfer-function-table |
| azimuth | feDistantLight | light-azimuth |
| elevation | feDistantLight | light-elevation |
| limitingConeAngle | feSpotLight | light-limiting-cone-angle |
| pointsAtX | feSpotLight | light-points-at-x |
| pointsAtY | feSpotLight | light-points-at-y |
| pointsAtZ | feSpotLight | light-points-at-z |
| specularExponent | feSpotLight | light-specular-exponent |
| x | feSpotLight, fePointLight | light-position-x |
| y | feSpotLight, fePointLight | light-position-y |
| z | feSpotLight, fePointLight | light-position-z |
| gradient-specific attributes: | ||
| gradientTransform | linearGradient, radialGradient | transform |
| gradientUnits | linearGradient, radialGradient | element-units |
| spreadMethod | linearGradient, radialGradient | gradient-spread-method |
| xlink:href | linearGradient, radialGradient | reference-parent |
| x1 | linearGradient | start-point-x |
| y1 | linearGradient | start-point-y |
| x2 | linearGradient | end-point-x |
| y2 | linearGradient | end-point-y |
| fx | radialGradient | start-point-x |
| fy | radialGradient | start-point-y |
| cx | radialGradient | end-point-x |
| cy | radialGradient | end-point-y |
| r | radialGradient | radius |
| remaining attributes: | ||
| clipPathUnits | clipPath | element-units |
| cx | circle, ellipse | point-x |
| cy | circle, ellipse | point-y |
| refX | marker | point-x |
| refY | marker | point-y |
| x | cursor | point-x |
| y | cursor | point-y |
| d | path | shape |
| dx | altGlyph, text, tref, tspan | glyph-offset-x |
| dy | altGlyph, text, tref, tspan | glyph-offset-y |
| width | filter, foreignObject, image, mask, pattern, rect, svg, use, feBlend (and other filter primitives) | width |
| markerWidth | marker | width |
| height | filter, foreignObject, image, mask, pattern, rect, svg, use, feBlend (and other filter primitives) | height |
| markerHeight | marker | height |
| lengthAdjust | text, textPath, tref, tspan | text-length-adjust |
| markerUnits | marker | element-units |
| maskContentUnits | mask | content-units |
| maskUnits | mask | element-units |
| method | textPath | text-path-method |
| offset | stop | stop-offset |
| orient | marker | marker-orient |
| pathLength | path | path-length |
| patternContentUnits | pattern | content-units |
| patternTransform | pattern | transform |
| patternUnits | pattern | element-units |
| points | polygon, polyline | shape |
| preserveAspectRatio | feImage, image, marker, etc. | preserve-aspect-ratio |
| r | circle | radius |
| rotate | altGlyph, text, tref, tspan | glyph-rotate |
| rx | ellipse | radius-x |
| ry | ellipse | radius-y |
| rx | rect | radius-x |
| ry | rect | radius-y |
| spacing | textPath | text-path-spacing |
| startOffset | textPath | text-path-start-offset |
| target | a | link-target |
| textLength | text, textPath, tref, tspan | text-length |
| transform | a, circle, etc. | transform |
| viewBox | marker, pattern, etc. | viewbox |
| x | altGlyph, text, tref, tspan | glyph-position-x |
| y | altGlyph, text, tref, tspan | glyph-position-y |
| x | filter, foreignObject, image, mask, pattern, rect, svg, use, feBlend (and other filter primitives) | left |
| y | filter, foreignObject, image, mask, pattern, rect, svg, use, feBlend (and other filter primitives) | top |
| x1 | line | start-point-x |
| y1 | line | start-point-y |
| x2 | line | end-point-x |
| y2 | line | end-point-y |
| xlink:href | a | link-href |
| xlink:href | cursor, filter, pattern | reference-parent |
| xlink:href | feImage, image, use, tref | referenced-content |
| xlink:href | textPath | text-path-reference |
That's now new properties, or 33 if we are only looking at the non-filter, non-gradient attributes.
— Cameron McCormack, 31 March 2011