- From: Matt Patenaude <MattPat@mattpat.net>
- Date: Mon, 6 Oct 2008 22:21:16 -0400
- To: www-style@w3.org
Hi all,
I was working on a project today, and I thought of something that
might be a useful and powerful addition to CSS: aliases.
It happens all too often that I want to completely duplicate a style
definition for a class to another class, in order to have a better
semantic name for the data I'm styling. For instance, lets say I have
the class "product" and the class "service." On my page, I would like
these to be style similarly. If I have an existing declaration for
"product" like so...
.product {
font-weight: bold;
...
}
... it isn't a problem, I can just change the selector to
".product, .service". However, let's say my rules get a little more
complex:
div.product:first-child > h3 + p {
font-weight: bold;
}
Contrived example? Absolutely. But just to make the point, the
selector would now have to become "div.product:first-child > h3 + p,
div.service:first-child > h3 + p", which is more than a little
redundant. And let's say I have several rules, all of which
contain .product in some permutation or another. Isn't it an awful lot
of work to have to duplicate those selectors across the board (along
with being difficult to maintain), just to add a little extra semantic
goodness?
My proposal: CSS Aliases. CSS should allow you to map one selector as
an alias as another selector, that works intelligently across the
board. In a simple example, imagine something like this:
@alias selector(.product) selector(.service)
In this example, any element with the class of "service" would inherit
all styles of the class "product" automatically. Let's make it a bit
more complex:
@alias selector(.alternateRow) selector(#myTable tr.oddRow)
Essentially, something intelligent like this would make it much easier
to adapt CSS styles to pages regardless of the semantic naming of
their elements. In the example above, the styles for anything with
class "alternateRow" is also applied to rows with class "oddRow" in
the table identified as "myTable".
The beauty here is that the selectors can be as complex as desired.
For instance, let's say that, through inherited styles, the first
paragraph of every "product" has styling I want to apply to the
entirety of every "client." Even if I don't have a rule definition
called ".product p:first-child", this should still work:
@alias selector(.product p:first-child) selector(.client)
If I tried really hard, I could come up with a more complex example
that would show even more benefit to something like this, but I think
what I've come up with is sufficient. ;) It may be superfluous, but
personally I think it would be a great language feature to have.
Thanks!
Sincerely,
Matt Patenaude
Received on Tuesday, 7 October 2008 02:22:04 UTC