Sebastian Spaeth wrote:
On 2010-07-07, Richard Fairhurst wrote:
Sebastian Spaeth wrote:
[things about z-index]
Well, the z-index inheritance stuff is probably the thing I got most wrong with the original spec. :)

Pfeww, I was doubting my sanity, so happy to hear that :). Yes, let's work it 
out.
My current thinking is that we start with:
   way[highway=footway]::highlight  { width: 3; z-index: 2; }
   way[highway=footway]::centreline { width: 2; z-index: 3; }
   way[highway=footway]::centreline { color: green; }
In other words, you can define a new stroke(/fill) using the CSS subpart (double colon) syntax.

Arrg, that is another part that I did not get and wanted to postpone to
another day (life?) :-). OK, so subparts we have. Are the names for
subparts arbitrary labels? If yes, things are much clearer again.

Here we have two strokes. One (highlight) is width 3, z-index 2, green; the other (centreline) is width 2, -index 3, green.

Hold on, why is highlight green? It is not defined above, right? Green
only applies to "centreline". Would that work as intended?

    way[highway=footway]::highlight  { width: 3; z-index: 2; }
    way[highway=footway]::centreline { width: 2; z-index: 3; }
    way[highway=footway] { color: green; }

Let's say we want to apply opacity 0.5 to all the ways above. Should we say
way[highway=footway] { opacity: 0.5; }
way[highway=footway]::* { opacity: 0.5; }
I'm tempted towards the latter.

I see your point, but I would lean towards the first option, I see these
as filters in a hierarchical stack that filter elements gradually out. So each 
of
the bullet points below is a superset of elements to the next:

- way
- way|z12
- way|z12 [highway=footway]
- way|z12 [highway=footway][horse=yes]
- way|z12 [highway=footway][horse=yes]::centreline

Your proposal would make the second last line behave different from all
the others. It would make sense to support only __unnamed__ subparts
somehow, but that could happen with
way [highway=footway]:: {color: strawberry;}

I would agree that supporting "::*" would make sense and is very
intuitive. In the end, I am fine with both, but find your preferred
solution a bit awkward for the above reason.

It might be a good idea to stick to the css spec for the most part [1] and introduce new syntax and semantic only where it is needed. The canonical example for subpart is

  p::first-letter {...}

which addresses the first letter of the paragraph, but you can still style the entire paragraph (including the first letter) with

  p {...}.

This would suggest to use the interpretation favoured by Sebastian Speath.

The difference here: The first letter of the paragraph is always visible, but a highlight of a way is an optional/exceptional feature.


For simplicity, I would prefer to write

  way[highway=footway] {width:3; color: orange; antialiasing:none}
  way[highway=footway][bicycle=yes] {dashes: 2, 2}
  way[highway=footway][bicycle=yes]::highlight {width:5; color: blue}

This should draw non-antialiased orange way for normal footway. If it has the tag bicycle=yes, it should be dashed and have a blue highlight (also not antialiased).

So my interpretation would be: way[highway=footway] applies to the way element itself (whatever that is) and all its subparts (::centerline, ::highlight, ...) However, some subparts are defined as default (::centerline) and others as optional (::highlight, ... the rest).

Optional subparts are not rendered unless they are declared. (I.e. there exists at least one selector for them.) Each subpart can have a different default value. (E.g. default z-index should be lower for ::highlight than for ::centerline.)

Does this make sense? Basically, I'm fine with any solution that removes the "magic" from z-index property. This would make stacked rules (way {...} {...}) obsolete, right?


[1] <http://www.w3.org/TR/2005/WD-css3-selectors-20051215/#pseudo-elements>

--
Sebastian

_______________________________________________
Mapcss mailing list
[email protected]
http://lists.openstreetmap.org/listinfo/mapcss

Reply via email to