- From: Cameron McCormack <cam@mcc.id.au>
- Date: Thu, 21 May 2015 16:48:56 +1000
- To: Amelia Bellamy-Royds <amelia.bellamy.royds@gmail.com>
- Cc: www-svg <www-svg@w3.org>, "public-fx@w3.org" <public-fx@w3.org>
Amelia Bellamy-Royds: > - CSS transforms allows transformations on everything! However, CSS > doesn't have a coordinate system like SVG, so they introduced > transform-origin and set the default for non-SVG content to be the center > of the element. SVG content would by default still use the coordinate > system origin. > > - But this was weird for inline SVG in HTML, since it behaved > differently from all the rest of HTML. So, they came up with a more > specific language: > "The initial used value for SVG elements without associated CSS layout > box is 0 0." [4] I thought this was just about defining the default transform-origin for (non-outer) SVG elements, regardless of whether they are in an HTML document. Also I think the concept of an “initial used value” doesn’t make sense. A used value can be defined based on the computed value of the property plus some other conditions (other property values, perhaps what element it’s on). But I don’t think it’s possible to say that the used value becomes 0 0 if the computed value came from the initial value (which is 50% 50%), unless you wanted all occurrences of 50% 50% – even explicit ones – to be treated as 0 0 on these SVG elements. Instead the spec should define this using a UA style sheet rule. In Firefox we have: @namespace url(http://www.w3.org/2000/svg); *:not(svg), *:not(foreignObject) > svg { transform-origin: 0 0; } I feel like we discussed this recently, but I’m not sure whether foreignObject should get this rule applied to it too. Does it have an associated CSS layout box? > - CSS transforms also gives more general guidance on how transformations > on the root element should work. E.g., the canvas as a whole is > transformed inside the viewport made by the browser window or frame. The > canvas is infinite, and any parts that move into view because of the > transformation should be painted. [5] > > > The question: > > - Does the root element of a stand-alone <svg> have an "associated CSS > layout box"? If so, transformations on the root SVG should > rotate/skew/scale relative to the center of the canvas. > - I argue yes, since borders & backgrounds (part of CSS layout) apply in > all web browsers and the WG has resolved to make that part of the spec. Yes I agree. > Current Behavior on the latest stable major browsers available on Windows > (additional tests appreciated): > > - When the transformation is specified as a style property > (see the attached svgRootTransformOrigin.svg, which uses a transform > style rule to rotate the root element of an SVG): > - Firefox & Internet Explorer rotate around the center of the SVG > element's drawing box (e.g., treat it as a CSS layout box) > - Chrome rotates around the top left corner of the drawing box (*not* > the origin created by the SVG viewBox) > - In all browsers tested, translation units are calculated before > viewBox scaling > > - When the transformation is specified as an attribute > (see svgRootTransformOriginAttribute.svg) > - Firefox transforms the internal content using the coordinate system > created by the viewBox, but does not transform the SVG's layout box > - None of the other browsers tested currently apply any transform Is this just because the other browsers don’t yet support the transform="" attribute on <svg> elements in general? Since the CSS Transforms spec defines transform="" as being a presentation attribute for the ‘transform’ property, that should make its behaviour identical to svgRootTransformOrigin.svg. > - When the transformation is specified using the svgView spec > (see svgViewTransform.html) > - None of the browsers transform the SVG layout box (note that the > inner thin black border is from the <svg> element) > - Firefox applies the transformation after the viewBox > - Chrome and Internet Explorer apply the transformation before the > viewBox > > - Things get even more complicated when you use an svgView on an > element that already has a transformation. See my previous email. I’ll echo my sentiment from a telcon a couple of weeks ago and say that I think the svgView transformation should be applied after the viewBox, root transform property value, and the transfrom from currentScale, etc. > - In other words, whatever we decide, everyone's going to have to fix > their implementations somewhere. > > > What part of the SVG spec needs to be cleared up? > > - Somewhere it should state that the SVG root element is a CSS layout > box for the purposes of transformations. Probably in the same place where > we state that backgrounds, borders, and other properties apply on the root > element. Sounds good. > - In the SVG view spec (linking chapter), it should state that an > svgView transformation applies in the same way as a transformation on the > root element. What does in the same way mean? Although we discussed not extending the svgView syntax with the four other transform-related properties, would they (e.g. transform-origin) affect the transform given in svgView syntax? If not, what would be the “assumed” transform-origin value – i.e., would it be 50% 50% because we are still applying a transform to an element that has a CSS layout box? > - In the SVG view spec, it should clarify whether the transformation > - is in addition to the transformation defined in the SVG file (e.g., > take whatever would normally be drawn, and transform it) > - OR, a replacement for it, as if it was an !important style override > (all the other svgView parameters override values specified in > the SVG file) IMO it should be additional. -- Cameron McCormack ≝ http://mcc.id.au/
Received on Thursday, 21 May 2015 06:49:25 UTC