- From: Ben Curtis <bcurtis@bivia.com>
- Date: Fri, 13 May 2005 12:34:40 -0700
- To: www-style@w3.org
Forgive me for resurrecting an old thread. Recent work has brought up a
situation that should be considered alongside these thoughts.
On Mar 15, 2005, at 5:10 AM, Bert Bos wrote:
> On Monday 07 March 2005 21:32, David R wrote:
>> what is the current state of "ECMAScript in CSS" aka
>> "Expressions" (as a recommendation put forward to the W3C by
>> Microsoft)
>
> Not quite sure if this is what you mean, but the working group recently
> decided to investigate the implications of allowing simple, linear
> expressions as values. For example:
>
> width: expr(50% + 5px);
> font-size: expr(2em / 3 + 2px);
> padding-right: expr(1px + 1ex - 5%);
One should also consider some of the possibilities if a means were
available to adjust values rather than only specifically define them.
For example:
div.secondaryContent {
width:150px;
padding:5px;
border-width:0;
}
div.subNav {
padding:2px;
border-width:2px;
}
div.subNav.secondaryContent {
width:142px;
padding:7px;
}
If we know that there will be some secondaryContent that is also a
subNav, we can plan for it as per the third rule. But it might be
easier, more forward-flexible, and better for team development if the
subNav rule could merely adjust the calculated values that would have
been applied had the subNav rule not existed.
div.secondaryContent {
width:150px;
padding:5px;
border-width:0;
}
div.subNav {
width: expr( asis - 148px);
padding: expr( asis + 2px);
border-width: expr( asis + 2px);
}
Someone more creative than me can likely come up with a better
reference keyword or a syntax without a keyword, but I believe this
illustrates my case. In this version of the subNav style rule, any div
of any style can have the subNav class applied and combined with any
other class to achieve a layout that is easily observed by the viewer
as consistent, even when each such div has different values.
One awkward bit is that it creates chains of rules that do not override
each other, requiring more work from the agent. However, this extra
work seems minor if the order of items in that chain is well defined
(as per cascade and specificity rules), so I think it's fine. I think
the benefits outweigh this extra effort.
Moreover, and as a complete side note, it lends scriptors a means to
remove a script-set style and allow it to revert to what the value
would be before scripting took place. Right now, for example, there is
no means (AFAIK) for ECMAScript to assign a style value and then remove
it and have the CSS take over again; reading the value prior to the
change and storing it for restoration works in most cases, but is not
the same if conditions change after the value is stored. Consider this:
1. ".foo" and ".foo:target" both define a display value, so that a
block is displayed if the browser is linked to that target, but
display:none otherwise.
2. A script to aid accessibility allows people to toggle the visibility
of blocks based on keypresses.
3. A visitor views a page, toggles the visibility on (script sets var
PrevDisplay = foo.style.display;), then off (script sets
foo.style.display = PrevDisplay; -- that is, "none")
4. the visitor then clicks the link that sends him to that target;
since the script value is more specific and lower in the in the cascade
than the .foo:target rule, the block remains display:none.
If instead the scriptor were able to set foo.style.display = "block";
to make it visible, and then foo.style.display = "asis"; to return it
to it's non-scripted state, then these types of problems go away.
--
Ben Curtis : webwright
bivia : a personal web studio
http://www.bivia.com
v: (818) 507-6613
Received on Friday, 13 May 2005 19:39:04 UTC