- From: Cameron McCormack <cam@mcc.id.au>
- Date: Wed, 14 Mar 2012 11:01:28 +1100
- To: Dirk Schulze <dschulze@adobe.com>, SVG public list <www-svg@w3.org>
Hi Dirk, here are my comments on http://dev.w3.org/csswg/css3-transforms/#svg-transform for ACTION-3244. Substantive ----------- In 7. The SVG 'transform' attribute: This specification will also introduce the new presentation attributes ‘transform-origin’, ‘perspective’, ‘perspective-origin’, ‘transform-style’ and ‘backface-visibility’ in the SVG namespace. All new introduced presentation attributes are animateable. These attributes are not in the SVG namespace; rather they're in no namespace (or in the "null" namespace, not sure what's the preferred terminology). I think you can just drop "in the SVG namespace". In 7.2.1. Transform List: The value for the ‘transform’ attribute consists of a transform list with zero or more transform functions in the functional notation. If the transform list consists of more than one transform function, these functions are separated by either a comma (‘,’) with optional whitespace before and after the comma or one or more whitespaces. The transform list can have optional whitespaces before and after the list. So does this mean it's not allowed to have no white space between the transform functions? For example style="transform: scale(1)translate(10px,10px)" ? Just testing in Firefox, that kind of syntax seems to be acceptable. In 7.3. The SVG ‘gradientTransform’ and ‘patternTransform’ attributes: If we go ahead with the proposal to make the gradient mesh element be renderable as well as being a paint server, does that mean there is a conflict here between the gradient transform and the transform of that rendering? Or does it not matter that there would only be a single transform property that acts as the target for both the gradientTransform and transform presentation attributes? In 7.4. SVG transformation functions: User agents are just required to support the two optional arguments for translation on elements in the SVG namespace. It's unclear to me what this means. Does it mean that the three argument rotate() transform function is only supported in the transform, gradientTransform and patternTransform presentation attributes? If you are meaning to allow it in properties too then I don't think it makes sense to restrict it to SVG elements. You would at least need to parse it everywhere -- but would you want the behaviour to be different depending on which element it applied to? For example with: <!DOCTYPE html> <style> span, rect { transform: rotate(15deg, 100px, 100px) } </style> <p><span>hello <p><svg><rect width="100" height="100"/></svg> would the span be rotated around its centre point (due to its transform-origin) and would the rect be rotated around its bottom-right corner? In 7.5. SVG and 3D transformation functions: Transformable elements that are contained by one of these elements can have three-dimensional transform functions. <mask> is one of the elements on which 3D transform functions are ignored. But <mask> is also a transformable element, so the sentence above almost sounds contradictory for cases like: <mask> <mask/> </mask> In 7.7. SVG DOM interface for the ‘transform’ attribute: The ‘transform’ property contributes to the CSS cascade. According to SVG 1.1 user agents conceptually insert a new author style sheet for presentation attributes, which is the first in the author style sheet collection. What happens when you call getComputedStyle for the transform property where its value was determined by one of the SVG transform presentation attributes that uses syntax that is not allowed in properties? For example if you have <g transform="translate(100) rotate(1 2 3)"> then what does getComputedStyle return? I think the document needs to define exactly how the presentation attributes get mapped into the author style sheet. It might still be possible to get the ‘SVGMatrix’ by the attribute ‘matrix’. We should define exactly in which circumstances it is not possible to, and what the attribute should return in those cases. In 7.8.2. The SVG ‘attributeName’ attribute: For the presentation attributes ‘gradientTransform’ and ‘patternTransform’ it will also be possible to use the value ‘transform’. The same presentation attribute style will get animated. Why? I don't think there's really much need for this. Is there anything wrong with letting <linearGradient> <animate attributeName="transform" .../> </linearGradient> animate the transform property instead of making it animate the gradientTransform presentation attribute? In 7.8.3. The SVG ‘attributeType’ attribute: However, in the combination with the ‘transform’, ‘patternTransform’ and ‘gradientTransform’ presentation attributes, ‘attributeType’ can just be used to indicate the syntax rules used for the transform attribute values. Do you mean that attributeType for these three attributes now does not select between animating the presentation attribute and the property? If so, why? I'm not sure why we need to make this restriction. I think I would prefer it if the SVG transform syntax were allowed in SVG animation elements, regardless of whether it is targetting the attribute or the property. If it is targetting the property (which would be the default for auto) then we can use the same rules for converting that transform list into one suitable for the property that we do for the mapping of presentation attribute values into the author style sheet. In 7.8.4. The SVG ‘animateTransform’ element: The SVG ‘type’ attribute gets extended by all transform functions listed in 2D Transformation Functions, 3D Transformation Functions and SVG Transformation Functions. For all the new types that animateTransform supports, is the syntax for values just a comma-or-whitespace separated list of the values that appear within the parentheses of the functional notation? This should be defined. Editorial --------- In 7. The SVG 'transform' attribute: In order to improve the integration of SVG and HTML, this specification makes these SVG attributes to ‘presentation attributes’ and makes the ‘transform’ property one that applies to transformable elements in the SVG namespace. s/attributes to/attributes/ This specification will also introduce the new presentation attributes ‘transform-origin’, ‘perspective’, ‘perspective-origin’, ‘transform-style’ and ‘backface-visibility’ in the SVG namespace. All new introduced presentation attributes are animateable. s/animateable/animatable/ In 7.1. SVG ‘transform’ attribute specificity: Since the previously named SVG attributes become presentation attributes, their participation to the CSS cascade is determined by the specificity of presentation attributes, as explained in the SVG specification. s/participation to/participation in/ I'd get rid of those two spaces in "translate (200 200)" in the example. [Although later in the document you explicitly call that out -- I guess it's an example of syntax that you can use in the presentation attribute but which is not valid as the property?] The example markup feels a bit naked with <svg> at the root. Maybe you can change it to <svg xmlns="http://www.w3.org/2000/svg"> so it feels self contained. Because of the participation to the CSS cascade, the ‘transform’ style property overrides the ‘transform’ presentation attribute. Therefore the container gets translated by ‘100px’ in horizontal and vertical direction, instead of ‘200px’. s/participation to/participation in/ s/in horizontal and vertical direction/in both the horizontal and vertical directions/ In 7.2. Syntax of the SVG ‘transform’ attribute: To provide backward compatibility, the syntax of the ‘transform’ presentation attribute differs from the syntax of the ‘transform’ style property like shown in the example above. s/backward/backwards/ s/like/as/ In 7.2.1. Transform List: The value for the ‘transform’ attribute consists of a transform list with zero or more transform functions in the functional notation. If the transform list consists of more than one transform function, these functions are separated by either a comma (‘,’) with optional whitespace before and after the comma or one or more whitespaces. The transform list can have optional whitespaces before and after the list. s/in the functional notation/using functional notation/ s/whitespaces/whitespace characters/ s/optional whitespaces/optional whitespace/ (Whitespace can be an adjective or an uncountable noun, but not a countable noun.) The second sentence sounds a bit unclear. Maybe wording it like the following would help: If the transform list consists of more than one transform function, these functions are separated by either a comma (‘,’) with optional whitespace before and after the comma, or by one or more whitespace characters. In 7.2.2. Functional Notations: s/Notations/Notation/ The syntax starts with the name of the function followed by optional whitespaces followed by a left parenthesis followed by optional whitespace followed by the argument(s) to the notation followed by optional whitespace followed by a right parenthesis. If a function takes more than one argument, the arguments are either separated by a comma (‘,’) with optional whitespace before and after the comma or one or more whitespaces. s/optional whitespaces/optional whitespace/ s/one or more whitespaces/one or more whitespace characters/ s/comma or/comma, or by/ In 7.2.3. SVG Data Types: Arguments of transform functions consists of data types in the sense of CSS Values and Units Module. The definitions of data types in CSS Values and Units Module gets enhanced as follows: s/consists/consist/ s/gets/are/ In 7.2.3.1. The <translation-value> and <length> type: A translation-value or length can be a <number> without an unit identifier. In this case the number gets interpreted as "user unit". A user unit in the the initial coordinate system is equivalenced to the parent environment's notion of a pixel unit. s/equivalenced/equivalent/ In 7.2.3.3. The <number> type: SVG supports scientific notations for numbers. Therefore a number gets parsed like described in SVG Basic data types for SVG attributes. In 7.3. The SVG ‘gradientTransform’ and ‘patternTransform’ attributes: SVG specifies the attributes ‘gradientTransform’ and ‘patternTransform’. This specification makes both attributes to presentation attributes. Both attributes use the same syntax as the SVG ‘transform’ attribute. This specification won't introduce corresponding CSS style properties. Instead the style can be set by the ‘transform’ style property. s/to presentation attributes/presentation attributes/ s/won't/does not/ I think the last sentence could more directly state that gradientTransform and patternTransform are presentation attributes for the transform property. In 7.4. SVG transformation functions: For backward compatibility to existing SVG content, this specification must support all transform functions defined by The ‘transform’ attribute in SVG 1.1. Therefore the two-dimensional transform function ‘rotate(<angle>)’ gets extended as follows: s/backward compatibility to/backwards compatibility with/ s/must support/supports/ (otherwise it sounds like a conformance requirement) s/gets/is/ In 7.5. SVG and 3D transformation functions This specification explicitly allows to apply three-dimensional transform functions to the container elements: ‘a’, ‘g’, ‘svg’, all graphics elements, all graphics referencing elements and the SVG ‘foreignObject’ element. s/allows to apply three-dimensional transform functions/requires three-dimensional transform functions to apply/ The way the colon is used in the sentence makes it seem like graphics elements are container elements. In 7.6. Object bounding box units Percentage or fractional values in SVG are either relative to the elements viewport units or to the elements object bounding box units like specified in SVG 1.1. s/elements/element's/g s/like/as/ If an SVG element does not provide an object bounding box (like for the ‘pattern’, ‘mask’ or ‘clipPath’ elements), the bounding box is the same like if the position x, y and the dimensions width and height are zero. Percentage values or keywords won't affect the rendering and are treated as if zero was specified. s/the same like/treated as/ A SVG ‘pattern’ element doesn't have an object bounding box. s/A/An/ I think the terminology here is slightly off -- elements can have bounding boxes or not. "Object bounding box" is the name of the mode for which percentages and unitless values are resolved against the bounding box of the referencing element. The translation on the ‘transform’ property is in absolute coordinates and translate the coordinate system by 50 pixel in each direction. s/pixel/pixels/ In 7.7. SVG DOM interface for the ‘transform’ attribute: The SVG specification defines the ‘SVGAnimatedTransformList’ interface in SVG DOM to access the animated and the base value of the SVG transform attribute. s/in SVG DOM/in the SVG DOM/ s/access/provide access to/ s/transform attribute/transform, gradientTransform and patternTransform attributes/ To provide the necessary backward compatibility to SVG DOM, ‘baseVal’ must reflect the values of this author style sheet. All modifications to SVG DOM objects of ‘baseVal’ must affect this author style sheet immediately. s/backward compatibility to SVG DOM/backwards compatibility to the SVG DOM/ In 7.8. SVG Animation: The SVG 1.1 specification did not define animations of the ‘transform’ attribute for the SVG ‘animate’ element or the SVG ‘set’ element. s/define/allow/ s/for/using/ In 7.8.3. The SVG ‘attributeType’ attribute: However, in the combination with the ‘transform’, ‘patternTransform’ and ‘gradientTransform’ presentation attributes, ‘attributeType’ can just be used to indicate the syntax rules used for the transform attribute values. s/in the/in/
Received on Wednesday, 14 March 2012 00:02:05 UTC