- From: François REMY <fremycompany_pub@yahoo.fr>
- Date: Fri, 22 Aug 2008 19:16:35 +0200
- To: "L. David Baron" <dbaron@dbaron.org>, "David Hyatt" <hyatt@apple.com>
- Cc: <www-style@w3.org>
> From: "L. David Baron" <dbaron@dbaron.org> > > On Monday 2008-07-28 17:56 -0500, David Hyatt wrote: >> >> In the next WebKit nightly you will be able to try out CSS variables >> whose values are declarations. Here is what the syntax looks like: >> >> @-webkit-variables { >> simpleVariable: 5px; >> complexVariable { >> width: 5em; >> height: 5em; >> } >> } >> >> div { >> background-color: green; >> -webkit-var(complexVariable); >> color: white; >> } > > So are these variables intended to be mutable later via script, or > intended to be constants? (If the latter, should they really be > called variables?) Yes, they are. Because if they are constant, how to support the disabling of a stylesheet that define a variable ? And what about two variable declaration on the same name ? This problem was debated and it was shown that a constant is more difficult to implements than a normal variable. But for complex variables, I suggest the use of a "extends" property. @define { bigText { font-size: 150% font-weight: bolder; color: black !important; }; } h1.bigText { font-size: 15pt; extends: $bigText; color: blue; } Computed values of a "h1.bigText" with no style : { font-size: 15pt; /* the h1.bigText rule have more importance than the extended one */ font-weight: bolder; /* this is the only one rule */ color: black; /* the rule that have !important have more important than the others */ } I've only one question : Will that be allowed or not : @define { var1 { color: blue; }; var2 { extends: $var1; color: red; }; } h1 { extends: $var2; } If it's allowed, what should be the result for H1 ? I propose 'red' because blue became redefined in var2 as they was if it was another style rule. > > If they're supposed to be variables, it seems like it's impossible > to get the following combination to work correctly: > * cascading order > * CSS object model, which only allows storing one value per > property per declaration block > * dynamic changes to complex variables. > > In particular, if the complex variable can be changed later, I'm not > sure how to reflect in the CSS object model that there's a > declaration block a declaration like: > > @define { > complexVariable { > color: blue; > } > } > > p { var(complexVariable); color: green; } > q { color: purple; var(complexVariable); } > > such that p elements are green, q elements are blue, but if we > dynamically change complexVariable to no longer declare the color > property, q elements would change to purple. (And consider > especially dynamic mutation of sheet.cssRules[i].style.color on the > p and q rules, which is already permitted.) > > Are these complex variables intended to be mutable, or are they > really constants? I suppose there are varibles. But if we follow the model I proposed before, it should works, no ? > >> As I stated in a previous post, WebKit also currently supports the >> double equals syntax and the dollar sign syntax for referencing >> variables, so =complexVariable= and $complexVariable also work. > > This seems a bit dangerous in case this syntax is not chosen for > variables, but is then used in CSS for something else later on. I agree with you. But it's for test-only and it's only available in alpha builds of WebKit. > > -David > > -- > L. David Baron http://dbaron.org/ > Mozilla Corporation http://www.mozilla.com/ >
Received on Friday, 22 August 2008 17:17:19 UTC