- From: Lachlan Hunt <lachlan.hunt@iinet.net.au>
- Date: Sun, 02 May 2004 02:49:53 +1000
- To: W3C Style List <www-style@w3.org>
Hi,
In the past, there have been several suggestions for supporting
alternate and/or preferred style sheet mechanisms within CSS, using
rules such as @alternate and @preferred (or anything equivalent). The
most recent of which I found was the thread started by William
Birchenough [1].
However, there are some limitations with the alterate/preferred
stylesheet mechanisms that I will address here. Firstly, when providing
alternate stylesheets, the variation may only be a small change, such as
increasing the font size, changing colours, etc…, leaving everything
else the same. Also, alternate stylesheets are limited to having one
selected at a time. There are also other issues, but they're not really
relevant to this proposal and most have already been discussed in
previous threads. BTW, I'm not saying that we should completely forget
about those proposals, just that they're not appropriate in all situations.
*The Example*
To start with, the example site I'll use has 3 style sheets. One
persistant, one preferred and one alternate:
<link rel="stylesheet" type="text/css" href="style.css"/>
<link rel="stylesheet" type="text/css" href="desert.css" title="Desert"/>
<link rel="alternate stylesheet" type="text/css" href="ocean.css"
title="Ocean"/>
*The Problem*
If I wanted to provide the option of having variations of my alterate
style sheets, such as different font size/face, expanded abbreviations
or alterate heading images (for "Desert" Only in this example),
currently, I would have to create a new stylesheet and provide another
<link/> in all my documents.
<link rel="stylesheet" type="text/css" href="desert-largefont.css"
title="Desert - Larger Font">
<link rel="stylesheet" type="text/css" href="desert-expabbr.css"
title="Desert - Expanded Abbreviations">
<link rel="stylesheet" type="text/css" href="desert-altimg.css"
title="Desert - Alternate Heading Images">
Large Font and Expanded Abbreviations would have to be repeated for the
Ocean stylesheet and any other stylesheets added later.
However, there is still the limitation that only one option can be
selected, without providing more alternate stylesheets with all possible
combinations, creating a very messy and complicated set of stylesheets.
eg. All the Stylesheets could be (For "desert" only):
1. Large Font
2. Expanded Abbreviations
3. Alternate Heading images
4. Large Font + Expanded Abbreviations
5. Large Font + Alternate Heading Images
6. Expanded Abbreviations + Alternate Heading Images
7. Large Font + Expanded Abbreviations + Alternate Heading Images
That's 7 different style sheets to cover all possible combinations of
options, but that would all (except for the alt. heading images) have to
repeated again for the Ocean stylesheet, plus any other's that may be
added in the future.
*The Proposed Solution*
Provide a set of optional style rules that can be turned on or off by
the user and applied regardless of any other selected options. This can
done with an @option at-rule.
• Each option would need to have a title (if no title is given, the
block should either be ignored or given a default title by the UA)
• Options with the same title, in the same or different stylesheets
should be treated as the same option.
• Properties within option rules should override existing properties
when the option is selected.
• When properties within option rules are the same, normal cascading
rules should apply to determine which is used.
eg. font-size: is set in option rules for the same selector
in a persistant and an alteranate stylesheet, with both
options selected.
Correct me if I'm wrong, but normal cascading rules would let
the property in the alternate stylesheet be used over the
property in the persistant stylesheet.
• This could be nested within @media to provide media dependant options.
• Options within persistant stylesheets are available at any time.
• Options within preferred/alternate stylesheets are only available when
that style sheet is selected.
• And, best of all, existing UAs will ignore the rule, which doesn't
matter because they're optional anyway.
/The Syntax/
@option "Title" {
/* Styles */
}
/The Example/
Using @option, the example above could be reduced back to 3
stylesheets, yet still provide the same amount of flexibility with style
selection.
-- style.css --
/* Persistant Styles here */
@option "Expanded Abbreviations" {
abbr[title]:after, acronym[title]:after {
content: " (" attr(title) ")"
}
}
-- desert.css --
/* Normal Desert Styles here */
@option "Alternate Heading Images" {
h1#title { content: url("alt-desert-title"); }
h2#news { content: url("alt-desert-news"); }
/* etc... */
}
-- ocean.css --
/* Normal Ocean Styles here */
body { font-family: "xyz", fantasy; )
@option "Larger Font" {
/* The above font may be harder to read at larger font sizes */
body { font-family: "Verdana", sans-serif; }
}
/The Explanation/
• Expanded Abbreviations specified in style.css,
can be applied any time.
• Larger Font specified in style.css and ocean.css,
can be applied any time, however when Ocean is selected,
the font-family is also changed.
• Alternate Heading Images specified in desert.css,
can only be applied when Desert is selected.
The following ascii-art table shows which options can be applied
depending on the selected style sheet.
Stylesheet: | Desert | Ocean
--------------|--------|--------------------------------
Option: | |
Exp. Abbr. | Yes | Yes
Large Font | Yes | Yes, including font-face change
Alt. Images. | Yes | No
[1] http://lists.w3.org/Archives/Public/www-style/2004Feb/0421.html
--
Lachlan Hunt
Received on Saturday, 1 May 2004 12:50:09 UTC