- From: Brent Boyer <brentboyer@hotmail.com>
- Date: Sat, 12 Oct 2002 22:42:02 +0200
- To: www-style@w3.org
A lot of style sheets have styles with much duplication. For instance, you may have something like: .normalText { text-align: left; text-decoration: none; vertical-align: baseline; font-family: "Times New Roman", "Times", serif; font-size: 1em; font-style: normal; font-weight: normal; color: inherit; background-color: inherit; } .large1Text { text-align: left; text-decoration: none; vertical-align: baseline; font-family: "Times New Roman", "Times", serif; font-size: 1.2em; font-style: normal; font-weight: normal; color: inherit; background-color: inherit; } .large2Text { text-align: left; text-decoration: none; vertical-align: baseline; font-family: "Times New Roman", "Times", serif; font-size: 1.44em; font-style: normal; font-weight: normal; color: inherit; background-color: inherit; } In the above, everything is duplicated except the font-size. Duplication like this is generally bad on several levels: --takes up a lot of extra space --if want to make a common change to several related styles, you have to go in and change all of them individually; this is especially bad if the styles are defined in several files --it fundamentally reflects the fact that current css style sheet syntax offers no way to express parent-child relationships among styles What I propose for CSS is that it allow inheritance of styles -on the stylesheet itself-. (I am well aware of how styles inherit down the document structure hierarchy; that is a separate issue; the discussion below will also touch on it.) Specificly, you should be able to define a parent style, and have child styles of that parent inherit all its properties unless explicitly overriden. The mechanism that I am proposing is simply that which is done in Object Oriented programming. I propose that every style be allowed to extend from from one parent (single inheritance, just as in Java). So, the above could be condensed to: .normalText { text-align: left; text-decoration: none; vertical-align: baseline; font-family: "Times New Roman", "Times", serif; font-size: 1em; font-style: normal; font-weight: normal; color: inherit; background-color: inherit; } .large1Text extends normalText { font-size: 1.2em; } .large2Text extends normalText { font-size: 1.44em; } Unless I have missed something in the CSS spec (or a new proposal), there is currently no way to achieve the above. Before submitting this proposal, I first went onto Usenet and started a discussion; for details, see: http://groups.google.com/groups?hl=en&lr=&ie=UTF-8&threadm=6221807f.02 09201302.6ac39f93%40posting.google.com&rnum=1&prev=/groups%3Fq%3DCan%2B inheritance%2Bof%2Bstyles%2Bbe%2Bachieved%2Bin%2Bthe%2Bstylesheet%2Bits elf%253F%26hl%3Den%26lr%3D%26ie%3DUTF-8%26selm%3D6221807f.0209201302.6a c39f93%2540posting.google.com%26rnum%3D1 The most relevant suggestions, along with my rebuttals below, are: 1) As far as I am aware, there is no way, and it does seem a strange omission. The way I get round it is to encode what you call the "parent styles" as macros, then call those macros in the "child styles". I've written a macro processor similar to the C preprocessor, and it's what I use to handle all the repetitive bits of my site, including chunks of CSS. ---------- A macro processor as in C could do a lot of powerful stuff, but can also add much complexity (as it sometimes does in C). For the purposes defined here, the proposed inheritance mechanism is much cleaner and clearer; it really does allow you to define parent-child relationships 2) You probably want something like this: p { font-family: Arial, serif; } .large, .large-i, .large-b, .large-br { font-size: 200%; } .large-b, .large-br { font-weight: bold; } .large-i { font-style: italic; } .large-br { color: red; } ---------- That multi-line definition syntax strikes me as horrible, and I am puzzled as to why it was ever allowed in CSS in the first place. It says that it is valid to define a style in multiple and obscure places all over your style sheet. I cannot imagine how this is a robust way of doing things in any but trivial examples, like the above, where the author was nice enough to define related things in one spot. But imagine that you have a more complex style sheet, and somebody else started adding features to your style in different parts of the sheet, and then a third person had to come along and debug why things were not working. So, I argue that it is an unscalable approach. It also is not actually defining parent-child relationships among the styles. 3) Use the parents to manipulate the children [i.e. use document structure, since styles inherit down the chain?] ---------- If I understood the poster correct, he was suggesting something like: [in style sheet:] .style1 {...[some base styles]...} .style2 {...[some additional styles]...} [in html file:] <div class="style1"> <div class="style2"> blah blah blah... </div> </div> so that document structure is used to accumulate styles on content. I strenuously object to corrupting document structure (which should only have semantic meaning) to support styles. As far as I am concerned, it is a hack in CSS of low moral equivalence to all the table manipulation crap in old style html documents. _________________________________________________________________ MSN Photos is the easiest way to share and print your photos: http://photos.msn.com/support/worldwide.aspx
Received on Saturday, 12 October 2002 16:42:05 UTC