- From: Andrew Fedoniouk <news@terrainformatica.com>
- Date: Sat, 10 Feb 2007 00:54:41 -0800
- To: <www-style@w3.org>
Disclaimer: this is not a proposal, just an explanation of some idea I am using. First of all about origins of the problem. I've implemented <input type="calendar"> in htmlayout (as many other non-standard input elements) ( see: http://www.terrainformatica.com/htmlayout/images/datetime.jpg ) In my case input elements and their content are styleable DOM elements so given calendar has some DOM structure inside. This way calendar can be styled by using CSS for various use cases and designs. Imagine that such calendar has following structure: <input type="calendar"> <button class="prior">←</button> ... <button class="next">→</button> <table class="month">...</table> </input> Problems with such "aggregate controls" 1) their style system has to be isolated from outside, so style with selector "td" defined in the outer document will not match <td>'s inside <input type="calendar">. 2) It is highly desirable that system of styles be assignable as a whole system - either all styles either none of them. 3) Such compound input elements can introduce pretty large number of rules needed to define default appearance so it should be some mechanism that allow to reduce computational complexity of style resolving. To solve these problems I've implemented feature what I name "style sets". Style set is a named block of styles similar to media block in current CSS: @set std-calendar /* name of the style block*/ { :root { ... } /* :root matches element this set applied to */ table { .... } button { ... } } I've also added new property "style-set" to the list of CSS attributes, so assignment of the style set to the DOM elements happens again in CSS: input[type="calendar"] { ... style-set: "std-calendar"; /* name of style set above */ } Having "style-set" as an attribute allows to assign different stylesets using normal CSS cascading rules: #myblog .right-sidebar input[type="calendar"] { style-set: "my-calendar"; } style set establishes local and closed style system for the element it is applied to. Inside the style set block :root selector matches element this style system applied to. One style set can be derived from another one: @set my-calendar < std-calendar { :root { color: blue; } } if this new style system needs to override just some of styles/attributes. Primary purpose of style sets in htmlayout engine is to be used in "master style sheet" (a.k.a. intrinsic style table) See: http://www.terrainformatica.com/wiki/h-smile:built-in-behaviors:master_style_sheet And this is it, terribly sorry for the long message. Hope someone will find this idea useful one day. Andrew Fedoniouk. http://terrainformatica.com
Received on Saturday, 10 February 2007 09:25:30 UTC