I just sent a proposal to www-style about having css3-transitions
describe a clearer model for how transitions and animations interact
and how transitions are started:
http://lists.w3.org/Archives/Public/www-style/2013Mar/0297.html
This would hopefully clear up a bunch of areas where there's
significant lack of interoperability between implementations of
transitions and animations, and where the spec is very unclear.
I wanted to write a bit more here about how I see this being
implemented in Gecko. I think the big pieces would be:
(1) Removing the concepts of "style with animation" and "style
without animation" that we have, which I think has proven not to
meet the goals I originally intended them to meet (providing sane
behavior for requirements (3) and (5) in the above message). This
would be replaced with what I propose in item (A) in that message,
which is essentially the miniflush concept that we have implemented
for suppressing the main thread style updates for animations that
are running on the compositor, but which we don't currently use
beyond that code. I think this removal will end up being a pretty
substantial code simplification, and the performance cost of the
miniflush will be roughly the same as the performance cost of the
current dual-style setup.
(2) Changing how animations and transitions work in the cascade.
Note that currently compositor-driven animations have different
cascading behavior than animations not running on the compositor,
which is a relatively serious bug (847287). I admit I don't have a
completely concrete idea about how to do this, but I think it's not
going to be all that hard; at a concrete level it might come down
to having nsIStyleRules in the cascade at two different places
(both at the top of the cascade and at the official location) in
order to let the rule safely record which properties the animation
or transition is the winning rule for, and then recording that
information so that we can use it for the compositor-driven
animations. I don't think this is too hard, though; I just haven't
implemented it yet.
I wanted to call this out both because it implies some somewhat
significant changes coming in code that we're depending on pretty
heavily, and to encourage others to comment either here about the
Gecko-specific parts or on www-style about the standard bits.
-David
--
𝄞 L. David Baron
http://dbaron.org/ 𝄂
𝄢 Mozilla
http://www.mozilla.org/ 𝄂