- From: David Hyatt <hyatt@apple.com>
- Date: Tue, 30 Jun 2009 17:42:08 -0500
- To: robert@ocallahan.org
- Cc: "L. David Baron" <dbaron@dbaron.org>, www-style@w3.org
- Message-id: <17333B98-1BDB-427A-89A6-55D58E047A1E@apple.com>
On Jun 29, 2009, at 4:25 PM, Robert O'Callahan wrote:
> On Tue, Jun 30, 2009 at 2:20 AM, David Hyatt <hyatt@apple.com> wrote:
> On Jun 28, 2009, at 10:57 PM, Robert O'Callahan wrote:
>> On Sun, Jun 28, 2009 at 9:37 AM, David Hyatt <hyatt@apple.com> wrote:
>> In WebKit, at the moment we do transitions on rendering objects
>> (and yes this means changes to display:none just kill
>> transitions). We don't allow transitions to occur on pseudo
>> elements. Not sure if this is the right decision though, but it's
>> what we have done so far.
>>
>> What if you have a <span> which fits on one line, a transition on
>> 'color' starts, but halfway through the container width changes so
>> the <span> breaks across two lines? The second box gets the final
>> color immediately? If this happened because the user resized the
>> window, I think it's clearly a bug.
>>
>
> Unlike Gecko, our "rendering objects" are not affected by changes in
> line structure. We create separate objects for lines. So what you
> describe is not an issue in WebKit.
>
> It's better to think of transitions as happening on nodes and on
> pseudo elements, since obviously the notion of a "rendering object"
> isn't the same in every engine.
>
> Defining transitions on 'first-line' have nearly the same set of
> issues as defining transitions in terms of boxes. ('before' and
> 'after' are obviously easy since they can be considered to create
> anonymous elements of their own.)
>
> So here's another version of my question:
> p { color:gray; }
> p::first-line { color:black; }
> a:hover { color:red; transition:3s color; }
> Suppose initially an <a> fits on the first line its parent <p>, then
> it gets hovered, and halfway through the transition <p>'s width
> changes so the <a> wraps to the next line. What should happen to the
> second line of <a>? Should it start a new transition from gray to
> red? Would the answers be different if the pseudo-element rule was
> p::first-line { letter-spacing:1px; } ?
At the moment in WebKit, we run transitions on the styles that aren't
pseudo-elements and that aren't affected by first-line (e.g., through
inheritance). In other words, it doesn't matter how many lines you
have or what the objects are... we will transition lines 2-n and
ignore line 1 in your example. Our line objects simply observe the
style on a master RenderObject (the master style caches the
subordinate first-line style if it is different), so that transition
would be running regardless of whether you actually had lines 2-n or
not.
It seems like first-line is the problem case, so the options are:
(1) First-line styles transition independently from the "master" style
you'd expect on all other lines.
(2) First-line styles just don't transition, but the other lines do
(i.e., we only transition on the "master" style of a DOM node)
(3) Don't run transitions at all on any lines if a first-line style is
specified.
I would object to (3), and would be fine with either (1) or (2) as
solutions. (2) is what is implemented in WebKit.
dave
(hyatt@apple.com)
Received on Tuesday, 30 June 2009 22:42:50 UTC