- From: L. David Baron <dbaron@dbaron.org>
- Date: Sat, 20 Dec 2014 19:07:06 -0500
- To: Cameron McCormack <cam@mcc.id.au>
- Cc: "Tab Atkins Jr." <jackalmage@gmail.com>, www-style list <www-style@w3.org>
- Message-ID: <20141221000706.GA29471@crum.dbaron.org>
On Sunday 2014-12-21 10:22 +1100, Cameron McCormack wrote:
> (2) Here is a case where assigning to a shorthand gives you (what I
> think might be) unintuitive results:
>
> div { margin: 1px;
> margin-inline-start: 0px; margin-inline-end: 0px;
> margin-block-start: 0px; margin-block-end: 0px; }
>
> decl.style.margin = "2px";
>
> Since the declaration has all of the component longhands already, we
> just overwrite each one with either 2px (for the physical ones) or
> 0px (for the logical ones). The result is that you'll still have
> 0px margins, as the logical properties still appear after the
> physical ones.
Well, I wish setProperty always had append semantics (which I should
perhaps call remove-and-append semantics), but it may be too late to
go back to that.
I believe it had remove-and-append semantics in Gecko prior to:
https://bugzilla.mozilla.org/show_bug.cgi?id=288574 which switched
to replace-or-append, although we've since added additional
optimizations that depend on the replace-or-append semantics in:
https://bugzilla.mozilla.org/show_bug.cgi?id=498562 .
(By replace-or-append, I mean the algorithm in
http://dev.w3.org/csswg/cssom/#set-a-css-declaration .
Remove-or-append semantics would mean changing step 1 of that
algorithm to remove the existing declaration, and then dropping the
"Otherwise" from step 2.)
(This is related to the debate we had last year about !important,
http://lists.w3.org/Archives/Public/www-style/2013Sep/thread.html#msg201
http://lists.w3.org/Archives/Public/www-style/2013Oct/thread.html#msg2
in which I eventually gave in.)
> Should we make assigning to 'margin' move the physical properties to
> the end of the declaration? (And if we do so, we'll need to ensure
> that the empty string is returned when getting 'margin' if logical
> properties appear after physical ones.)
Well, it would probably need to move the physical and logical
properties, once the 'logical' keyword is introduced.
This is a bit of a mess; I don't see a good solution unless we can
switch to append semantics for setProperty instead of
replace-or-append. (I'm curious if the current replace-or-append is
fully interoperable. Gecko did once do remove-and-append.)
-David
--
𝄞 L. David Baron http://dbaron.org/ 𝄂
𝄢 Mozilla https://www.mozilla.org/ 𝄂
Before I built a wall I'd ask to know
What I was walling in or walling out,
And to whom I was like to give offense.
- Robert Frost, Mending Wall (1914)
Received on Sunday, 21 December 2014 00:07:52 UTC