- From: Håkon Wium Lie <howcome@opera.com>
- Date: Thu, 3 Jun 2010 22:33:56 +0200
- To: Boris Zbarsky <bzbarsky@mit.edu>
- Cc: www-style list <www-style@w3.org>
Also sprach Boris Zbarsky:
> It sounds like we're more or less in agreement on how this could work,
Yes, I think so, too.
> > So, I'm trying to see if it's possible to support "margin-start: 10px"
> > without adding *-source properties. Also, I'd like for implementations
> > to forget about direction-dependent properties/aliases as soon as
> > possible. Ideally, this should be done at parse-time, but at that
> > point we don't know what the value of 'writing-mode' will end up
> > being. So, I think we need to hold only them until the computed value
> > of 'writing-mode' is known.
>
> But there's no "the" computed value of writing-mode for a given
> direction-dependent property declaration; that's my problem.
True, not for a declaration, but each element will have a computed
value for 'writing-mode' (or, in fact, its individual properties).
> Again:
>
> * { margin-start: 20px; }
>
> Supporting this requires keeping track of the fact that "margin-start"
> was used indefinitely in at least the data structure representing the
> style rule, since for each element we have to redo the writing-mode
> computation and will in general get different answers for different
> elements.
Yes, we need to remember that declaration until the value of
'writing-mode' is known for all elements.
> > At that point, we should be able to map settings from
> > direction-dependent settings to physical seetings. So, e.g., we can
> > map:
> >
> > margin-start: 10px
> >
> > to one of these:
> >
> > margin-left: 10px
> > margin-top: 10px
> > margin-right: 10px
> >
> > and forget about "margin-start: 10px".
>
> We can't forget about it completely. We can forget about it _for that
> element_. That's what Gecko does, for example. But you can't forget
> about it entirely.
You should be able to forget about it when the value of 'writing-mode'
is known for all elements, I believe.
> > As you have pointed out in the past [3], specified values need a lot less
> > memory than computed values. So, it may be that we can keep them
> > around so that scripts can get to them. But, this, may have limited
> > value. For example:
> >
> > margin-start: 20px;
> > margin-left: 10px;
> >
> > In the example above, knowing the 'margin-start' declaration has
> > limited value as it is overridden by the subsequent 'margin-left'
> > declaration (assuming ltr).
>
> But "assuming ltr" depends on knowledge of the entire cascade and on
> rules other that this one.... and can differ for different elements the
> rule applies to.
With "assuming ltr", I only meant that 'margin-start' would be an
alias for 'margin-left' only in ltr.
I agree that we have to do these computations for each element.
> Maybe the issue is that there are more sets of values than we've really
> been talking about. The complete list, as I see it, is:
>
> 1) Specified values (tied to style rules).
> 2) Cascaded values (tied to elements).
> 3) Computed values (tied to elements).
> 4) Used values (tied to elements).
That's not the terminology used in the specs. In the specs, the
"specified value" is not tied to style rules. Rather, for every
property/element combination there is a specified value.
http://dev.w3.org/csswg/css3-cascade/
http://www.w3.org/TR/CSS2/cascade.html#specified-value
And for the properties in question ('direction' and 'block-flow',
which 'writing-mode' is a shorthand for) the specified value is the
same as the computed value.
http://dev.w3.org/csswg/css3-text-layout/#direction
http://dev.w3.org/csswg/css3-text-layout/#block-flow
I think one should convert DDAs before they turn into specfied values.
That is, DDAs should not have specified values -- only properties that
also have computed/used/actual values should have specified values.
To describe how/when DDAs should be resolved, a new step should
probably be added to the pseudo-algorithm described here:
http://dev.w3.org/csswg/css3-cascade/#input-to-and-output-from-this-module
Something like: "if a property has an alias, resolve it and let it
fight its way through cascading...". Hmm.
> > Therefore, the computed value is more interesting. In David Baron's
> > model, 'margin-start' has its own computed value [4].
>
> I'm not sure what in that mail makes you think margin-start has its own
> computed value.
You're right, there's nothing in the example that implies this.
> In Gecko's current implementation, there is no separate
> computed value for margin-start, as was mentioned earlier in this thread.
Ok, good.
> > I think it's possible to avoid that by mapping the direction-dependent
> > properties/aliases to physical properties. So, only the physical
> > properties would have computed values -- the direction-dependent
> > properties/aliases could be computed in a lazy fashion based on the
> > values of the physical properties and 'writing-mode'.
>
> Agreed. This is what Gecko does (and what Webkit seems to do, if I
> understand hyatt correctly).
Ok. But you remember the declarations, it seems. Consider this example:
http://people.opera.com/howcome/2010/tests/log.html
When I press "rtl", the padding on the elements switch side. For this
to work, you need to go back to the declarations. I guess you do this.
Ideally, I would have liked to resolve the aliases once and for all.
-h&kon
Håkon Wium Lie CTO °þe®ª
howcome@opera.com http://people.opera.com/howcome
Received on Thursday, 3 June 2010 20:34:39 UTC