Conditional application of style hints
Steven Grimm writes:
> There needs to be a way to tell the browser, "only apply attribute X if
> you can apply attribute Y too." Otherwise we'll run into situations where
> documents will be unreadable because a particular browser (perhaps due to
> platform limitations) can only present half the style hints, and the half
> that *are* presented don't make sense without the others.
You bring up an important issue. Up to now, I have avoided the issue
- complexity: the syntax and implementation can get quite
complex. And we want to keep things simple, right?
- chance for abuse: authors may be tempted to group everything by
default, i.e. "Unless you take all my hints, you won't get
any". A visually impaired reader may be denied double-sized fonts
due to this.
- hard to define: how do you define when a hint has succeded? If a
browser uses the color #F00 instead of the requested #E00, is that
a success or failure?
> For example, I was playing around with style sheets in Arena 0.97 and
> tried to put a background image in my document as described in the draft
> spec. "back.image" doesn't seem to be implemented yet. Unfortunately,
> font.color is, and my colors assumed that the background image would be
Your example is a good one. I think there are some simple alternatives
to introducing a new grouping mechanism; these don't solve the
problem, but will make it easier to live with:
- fallback values: When the "back.image" fails, "back.color" will
- if the user has the ability to easily turn various style sheets on
and off, he can correct obvious legibility problems when they
- Some heuristics could be built into the browser to avoid the
obvious problem of no-contrast text.
These alternatives only address your specific example. What other
real-life situations do we have where the notion of cascading style
sheets will fail?
Hakon W Lie, W3C/INRIA, Sophia-Antipolis, France
> I'm not sure what the best syntax for this would be. Maybe something like:
> hasred := em.lightred: font.color = #FF0000
> hasred -> em.darkred: font.color = #800000
> hasred -> (a(em.lightred, (em.lightred(a: font.color = #00FF00
> Where we allow an additional name to be assigned to a style element, and
> allow other style elements to depend on the success of the first one. Sort
> of a dependency tree, if you will, which I think is an appropriate way to
> think about this problem. The above example would cause <em class=darkred>
> to produce dark red text, and <em class=lightred><a> to produce green text,
> only if the browser is able to render <em class=lightred> as requested.
> A slight extension of this would also allow fallback behavior to be
> specified. For instance, if you want a black background on machines that
> can't display your dark background image, you might do:
> didbg := *: back.image = "http://www.xyz.com/mygif.gif"
> !didbg -> didbg := *: back.color = #000000
> didbg -> *: font.color = #FFFF00
> I'm sure someone else can come up with a better syntax! Does anyone agree
> that this is something that needs to be addressed?
> An aside: when URLs are specified in a style sheet, what should they look
> like? Just the raw address? The angle-bracketed URL: format? Can they be
> relative, and if so, are they relative to the URL of the original document
> or the style sheet's URL? That should all probably be addressed in the