- From: Simon Pieters <simonp@opera.com>
- Date: Thu, 12 Sep 2013 21:52:58 +0200
- To: "Zack Weinberg" <zackw@panix.com>
- Cc: "www-style list" <www-style@w3.org>
On Thu, 12 Sep 2013 18:36:15 +0200, Zack Weinberg <zackw@panix.com> wrote: > Yes. It was repeatedly stated as a key issue, by me and others. > However, as far as I can tell, this point was ignored in the actual > decision-making process, which seems to have been mostly about choosing > between two internal algorithms based on perceived elegance and > desirable side effects for other scenarios. I reiterate that no amount > of internal elegance excuses inconsistent behavior in the visible API. I wouldn't say it was ignored since it was known by the people in the discussion. > No. With the alternative proposal (always removeProperty first), there > is only one possible outcome: the value and priority passed to > setProperty are always applied. Fair enough. >> That would mean that the set declarations are always moved to the end, >> which is different to what all implementations do today. > > Always moving a set declaration to the end is exactly what the spec was > just changed to require! No. > setProperty is now defined in terms of "append a CSS declaration", > which, like the name implies, _appends_ the declaration; that may or may > not cause an old declaration to be superseded, depending on their > relative priorities. (Close reading of the new text suggests that the > new wording may not actually entail this, but - for reasons given below > - I think the _intent_ was always-move-to-end.) My intent is what the requirements say. > Further, my understanding of dbaron's issue with "always replace in > place" semantics for setProperty is that it _doesn't_ always move set > declarations to the end. From related discussion with him offline, I am > under the impression that the main thing he cares about is > > selector { > margin-left: 10px; > margin-start: 5px; > } > > being rewritten as > > selector { > margin-start: 5px; > margin-left: 10px; > } > > after `setProperty("margin-left", "10px", "")`, so that order can > control which of these related properties actually applies. I haven't seen this being stated as a requirement, but maybe I've missed it. It would be good if David could clarify his position here. >>> This is >>> consistent with the current Gecko/Presto behavior, >> >> Not quite, as Gecko/Presto don't move the declaration to the end if one >> is already in the list. > > For Gecko, true but irrelevant, as _at present_ there is no semantic > dependence on the order of declarations; the logical box properties > (specifically, the explosion in the number of logical box properties due > to vertical writing, rendering our current method of disambiguation > impractical) are about to change that. (In the six-months-to-a-year > timeframe, AIUI.) Gecko currently supports -moz-margin-start. Since the order is observable in scripts even without margin-start, I don't think it's quite irrelevant. >>> and still permits in-place update where browsers can >>> prove it is semantically equivalent. >> >> I don't follow. > > If moving an existing declaration to the end of the property has no > effect on the rendering (== if moving the declaration to the end does > not change whether it is trumped by a related property, as in the case > of the physical/logical box property pairs), then browsers can avoid > doing so; it's a pure optimization. Ah. I think we should require one or the other since it is observable for all properties in the API. >>> For avoidance of doubt, I do not object to setProperty(prop, value) >>> === setProperty(prop, value, "") nor to the addition of >>> setPropertyPriority and setPropertyValue with always-update-in-place >>> semantics. >> >> Understood. David Baron objects to setProperty(prop, value, "") >> overriding an !important declaration, as I understand it. > > This is the crux of the issue. > > 1) I specifically object to setProperty(prop, value, "") > _not_ overriding an !important declaration. All else is negotiable. > > 2) I don't think David's position is actually incompatible with mine. > I don't wish to put words in his mouth, but as I said above, I am > under the impression that what he actually cares about is the > always-move-the-new-declaration-to-the-end side effect. Hence my > alternative proposal of behaving as if removeProperty() were always > called first. > > I think we need to hear directly from David at this point. I agree. -- Simon Pieters Opera Software
Received on Thursday, 12 September 2013 19:53:30 UTC