- From: Shane Stephens <shans@google.com>
- Date: Wed, 16 Jul 2014 11:13:24 +1000
- To: Dean Jackson <dino@apple.com>
- Cc: Dirk Schulze <dschulze@adobe.com>, www-style list <www-style@w3.org>
- Message-ID: <CAGTfzwSvz=FY0sjUuG+Qixb54e=NVVz3eC02+KQ_QOD1qo8=Hg@mail.gmail.com>
>
> FWIW I oppose this proposal as well. I think it will be more confusing, if
> *only* because people will have to remember the transform order. I
> understand that some people will think it is simpler, because in their
> cases they will only need to write one of the functions e.g. rotate.
>
I think this proposal will be *less* confusing, based on the experience of
library vendors like GSAP.
> However, do you think a new developer would instinctively know what
> happens here?
>
> el {
> rotate: 10deg;
> transform: rotate(-20deg);
> translate: 10px;
> }
>
Ignoring the 'transform' component for a minute:
el {
rotate: 10deg;
translate: 10px;
}
This does exactly what you would expect - treating rotation and translation
as separate channels, it rotates by 10 degrees and it translates in the X
direction by 10 pixels. So does this:
el {
translate: 10px;
rotate: 10deg;
}
That's the point of the resolution order Tab has suggested. In particular,
this neatly avoids the surprise many new developers encounter when they
specify a transform property with the components in the 'wrong' order.
Mixing transform component properties and a transform property should be
considered an advanced use, and at any rate is no more complex than the
transform property already is.
>
> That is certainly not simple. (And if you're not going to include all the
> 3d forms, then people will likely get into these situations... and if you
> do include them, does rotateY come before or after rotateX? - How do you
> remember the order of everything?)
>
I agree that we need sensible behavior for how the 3D and 2D properties
interact.
"How do you remember the order of everything?" - it's just normal CSS
resolution, isn't it? This doesn't seem like it's an issue.
>
> Furthermore, the platonic property you're trying to modify is the
> transform. It's really all or nothing (with the disappointing issue of
> transform-origin as a pre+post transform). Splitting it up into
> sub-properties doesn't make sense. Longhands create a lot of authoring
> confusion, due to resetting.
>
Splitting up the transform property into non-interacting translation,
rotation and scale components has been a pretty big request from web
developers (again, as demonstrated by libraries like GSAP). It is true that
doing this is less general than a transform property - but it's also much
simpler to reason about, especially if you've never encountered non-abelian
groups before. The beauty of Tab's proposal is that we can do both.
> Tab's impossible example is much better solved by allowing additive CSS
> animations i.e. two independent animations on the same property to combine
> with either addition or multiplication.
>
Once you bring additive CSS animations into the mix, being able to add
animations on individual transform components again gives you a set of
abilities that you can't do with a single transform property - for example
having multiple animations contribute to a translation on the screen
without impacting the rotation or scale of the element.
>
> Lastly, I think transforms have been a pretty huge success, as have
> animations. I'm not sure this syntax issue is holding anyone back.
>
Transforms and animations have been successful because they let developers
do something they couldn't do before - use a different thread to the UI
thread for animation. Don't confuse successful with well-designed or even
feature-complete.
Cheers,
-Shane
Received on Wednesday, 16 July 2014 01:13:51 UTC