- From: Juergen Roethig <roethig@dhbw-karlsruhe.de>
- Date: Thu, 25 Jul 2013 16:41:49 +0200
- To: <www-svg@w3.org>
Sorry, but in my original posting, I forgot to mention a very important sentence from the standard ... I've put it in below ... Juergen Roethig wrote: > Hello world, > > I do have an issue with selectors which are made of several selectors > (especially class selectors) referring to outside and inside some > re-<use>d SVG <g>roup. > Just as an example, assume the following CSS selectors: > > circle.fgobj { stroke: blue; } > circle.bgobj { stroke: green; } > .fggrp circle.fgobj { fill: white; } > .fggrp circle.bgobj { fill: grey; } > .bggrp use { fill: yellow; } > .bggrp circle.bgobj { fill: red; } > .bggrp rect.fgobj { fill: red; } > > and the following SVG code: > > <g class="fggrp"> > <g id="theobj1"> > <circle cx="-25" cy="0" r="20" class="fgobj" /> > <circle cx="25" cy="0" r="20" class="bgobj" /> > </g> > </g> > > <g class="bggrp" transform="translate(-100 0)"> > <g id="theobj2"> > <circle cx="-25" cy="0" r="20" class="fgobj" /> > <circle cx="25" cy="0" r="20" class="bgobj" /> > </g> > </g> > > <g class="bggrp" transform="translate(100 0)"> > <use id="theuse" xlink:href="#theobj1" x="0" y="0" /> > </g> > > You might get this example (with a few additional components) online on > http://www.ladenkirche-senfkorn.de/test.svg > > According to the spec, SVG 1.1, especially "5.6 The ‘use’ element" on > http://www.w3.org/TR/SVG11/struct.html#UseElement > we read >> For user agents that support Styling with CSS, the conceptual deep >> cloning of the referenced element into a non-exposed DOM tree also >> copies any property values resulting from the CSS cascade ([CSS2], >> chapter 6) on the referenced element and its contents. CSS2 selectors >> can be applied to the original (i.e., referenced) elements because >> they are part of the formal document structure. CSS2 selectors cannot >> be applied to the (conceptually) cloned DOM tree because its contents >> are not part of the formal document structure. And additionally, in the next paragraph, the standard says: *** Property inheritance, however, works as if the referenced element had been textually included as a deeply cloned child of the ‘use’ element. The referenced element inherits properties from the ‘use’ element and the ‘use’ element's ancestors. An instance of a referenced element does not inherit properties from the referenced element's original parents. *** With that last sentence ("An instance of a referenced element does not inherit properties from the referenced element's original parents."), you need to read my following conclusion: > Am I right that for the <use> element in the above example (making the > two circles at the right side in the above example), the value of the > property "fill" should be "yellow" for both circles, and nothing else? > Neither a selector of ".fggrp circle.fgobj" nor ".fggrp circle.bgobj" > nor ".bggrp circle.bgobj" should fire in that case - only the selector > ".bggrp use" matches. So the color of the six circles should be (from > left to right): Black - red - white - grey - yellow - yellow. But the > result on various browsers is different (we will mention just the two > critical circles at the right side): > > Firefox (rather old "Iceweasel" 3.0.6 on rather old Debian, as well as > actual 2x.0 on Windows, MacOSX, Android 4.0) combines the classes from > outside the use and inside the g, making the right circle "red" which is > wrong. The left circle of the two is "yellow", which is correct. The bug > with the wrong inheritance of classes outside the <use> object had been > reported several times, before. > > Opera (rather old 12.02 on a rather old Debian, as well as actual 12.16 > on Windows, and 12.15 on MacOSX, as well as Opera mobile 12.10 on > Android 4.0.3) makes the two circles similar to the two original circles > in the middle from which it is a reuse of, making them "white" and > "grey". The same for IE 9 (9.0.8112.16421 on Windows, to be exact). So, > the browser inherits class information from outside the original <g> > which is then re<use>d elsewhere, and this is also a bug, according to > the spec. But I did not find information about this, so far. And lots of > browsers do it like that. > > Chrome 12.0.742.124 on a rather old Debian shows both circles "yellow", > thus behaving correct - hooray! But an actual Chrome 28.0.1500.72 m on > Windows, as well as Chrome 27.0.1453.116 on MacOSX, as well as Chrome on > Android 4.0.3, behave like the above group of Opera, IE9, and several > versions of other browsers ... > > Safari 5.1.7 on Windows behaves correct - hooray, again! But well, > Safari 6.0.5 on MacOSX as well as Safari on Ipad (iOS 6.1.3) has again > the "usual" wrong behaviour of Opera, IE9, and several versions of other > browsers ... > > And finally, another browser with correct behaviour - the built-in > browser of Android 4.0.3. > > That's all browsers I have hands on to check ... anyone else? And more > important: Is my understanding of "what should be correct" according to > the standard, correct at all? > > Opinions? Thoughts? Or even links to other sources with reference to > this problem? > > Best regards, > > Juergen Roethig > > P.S.: Hopefully I did not mention any circle or browser in a wrong way > ... to many circles are flickering in front of my eyes, now ;-) > . >
Received on Thursday, 25 July 2013 14:42:27 UTC