- From: Coises <Randy@Coises.com>
- Date: Mon, 28 Apr 2003 04:59:25 -0700
- To: www-style@w3.org
[Sun, 27 Apr 2003 18:57:59 -0700 (PDT)] Ian Hickson: >So far, though, nobody has suggested any way of expressing the "simple" >constraints that Coises gave in his e-mail. The truth is that these are >actually incredibly complicated, both to specify and implement Indeed... which, in a way, is one of my points. One of the things a good computer language does is map what is elementary in "design space" to straightforward expressions in "language space." The design and implementation of a language that does that may not be simple at all. Why are "object-oriented" languages (like C++, ECMAScript or Visual Basic) an improvement on "structured programming" languages (like Algol or PL/1)? They allow us to express the ideas behind our programs in terms that are more akin to the ideas themselves. They also tend to lead us to formulate our ideas in more robust terms than do structured languages. Following, I'll try to make some preliminary stabs at how the problems I suggested might be made manageable by a web page formatting language. These are not well-researched, and doubtless contain many flaws... this is just a jumping-off point. || 1. If the centered title at the beginning of this page will fit on one || line, it should be shown on one line; if it requires two lines, the break || between lines should be such that the two parts are approximately equal || in horizontal measure. There are two approaches to this, depending on the degree of control desired. The simple approach --- taking the problem statement literally --- would be to have a rule such as: H1 {!minimize: height, width} indicating that, after initially laying out the block, the width should be minimized without changing the height, or any other CSS-2 properties that are implicitly or explicitly specified. (Height is minimized by the standard layout algorithm; it is mentioned explicitly since it would usually *not* be specified, either implicitly or explicitly --- "auto" really doesn't count as a specification in this sense, as it effectively indicates the absence of a specification. Great care would be needed to assure such details would result in behavior that is both consistent and useful.) In practice, the problem is likely to be more complex. Usually there are "good" and "bad" places to break a short sequence of words, like a title or a heading --- as a page designer, I'd like to be able to specify what sets of breaks are preferred. For example, suppose I have this title: The care and feeding of foo-bar and its place in a non-bar world to be placed at the top of a page. I don't know if it will fit on one line. I know I don't want to see this: The care and feeding of foo-bar and its place in a non-bar world (which hopefully everyone can see is just plain ugly). If I had to have two lines, I'd probably want: The care and feeding of foo-bar and its place in a non-bar world but if I needed three lines, I'd probably want: The care and feeding of foo-bar and its place in a non-bar world (and certainly not some travesty like: The care and feeding of foo- bar and its place in a non-bar world which, again, is just ugly). Now, were I working in a WYSIWYG medium, this would be easy: I'd just /look/ at the result and add "hard returns" if I didn't like it. That won't work on the web, though: because what I see isn't what my viewers will see. I have to step back a level and write my design logic --- not my conclusions under a particular environment --- into the page. The answer to this problem, it seems to me, must be the ability to specify different levels of "comfort" for line breaks. I know that even when writing plain text prose like this, I frequently add hard returns just to avoid bad line breaks --- as in this text, in which my mail program would have separated "to" from "avoid": that would have made the sentence subtly harder to read. At present, we have only three options: <BR> --- always break --- never break space --- optional break Suppose I could write something like this: <H1> The care and feeding <*BR PRIO=2> of foo-bar <BR PRIO=1> and its place <*BR PRIO=2> in a non-bar world </H1> to say that I'd prefer no break; but if a break is needed, between "foo-bar" and "and" is the best place to put it; and if more than one break is needed, the "PRIO=2" places should be tried first? That would let me express the same logic I'd use to format a WYSIWYG page in an environment where IDKWYWG ("I don't know what you will get"). (Yes, I know that's not CSS. I'm not convinced the answer to all problems of web page design lies in CSS. I do think it *must* lie in HTML+CSS that degrades gracefully under older browsers, or else it's no answer at all. The code above is meant to degrade to a forced break into two lines --- hoping that will cover most cases reasonably well under browsers that don't support the contemplated syntax.) || 2. The section headings on this page should be distinctly larger than the || paragraph text that follows them, but visibly smaller than the main page || heading. They should all be the same size. Within those constraints, the || section heading size should be chosen so that as many of the headings as || possible fit on a single line. Taking the statement of the problem literally, the last condition could be replaced by the statement that the font size should be as small as possible to satisfy the prior constraints (it doesn't say that's what's wanted, but it doesn't say it isn't, either): H2 {!range font-size: P.text:font-size++, H1:font-size--} H2 {!minimize: font-size} If we take the problem statement to mean that the section heading size should be (perceptually, not mathematically) about midway between the text size and the main page heading size, but yet should "give" a bit to try to squeeze all the sections headings onto one line each, things definitely get more complicated. (I think I'll pass on that one for the moment... but I do think it represents a reasonable bit of design logic.) || 3. I have a graphic to be set left, with a couple paragraphs of text set || to the right. There is a caption for the graphic. If the caption will || fit at the right --- beneath the other text and not extending below the || bottom of the graphic --- it should be set right and aligned with the || bottom of the graphic; if it will not fit, it should be set /below/ the || graphic. In no case should it be to the right yet extend below the || graphic, nor should it wrap with some of the caption to the right of the || graphic and some of the caption below it. There are several ideas I have to introduce here. First is that it would be helpful to be able to specify that some blocks should never be wrapped around images, floats, etc. This is not the same as "clear" --- it's okay if they fit beside something else: they just should never be wrapped around something else. They need to be in a solid rectangular block. I certainly could have missed it, but I don't think any CSS2 property or CSS3 module allows me to specify that. Alas, there is a second, trickier element to this problem: if the caption is placed beneath the picture, it should be no wider than the picture; but if it's placed to the right of the picture, it should use the available space (which could be more or less than the width of the picture). I can think of two ways to solve this... but I must say, I hope someone comes up with something better than either of them, because I really don't like either of my own ideas. One option would be to use a TABLE for the layout, but have a way to specify that an element in one <TD> could be moved to another <TD> under certain conditions. For example: <TABLE> <TR> <TD><IMG ...></TD> <TD> <DIV>The main text beside the image.</DIV> <DIV NOFITROW="move: #captionunder">The caption</DIV> </TD> </TR> <TR><TD ID="captionunder"></TD><TD></TD></TR> </TABLE> to indicate that the row containing "The caption" cannot be enlarged to contain that element: if it's not already big enough, the caption must be moved to become the first (in this case, only) element in the cell that has "captionunder" as its ID. The other solution would be a kind of conditional HTML: <IF COND="#caption:content-bottom <= #image.content-bottom"> <IMG ... ID="image" ALIGN=LEFT> <DIV>The main text beside the image.</DIV> <DIV ID="caption" VALIGN=BOTTOM>The caption</DIV> <!--ELSE <TABLE> <TR> <TD><IMG ...></TD> <TD>The main text beside the image.</DIV> </TR> <TR> <TD>The caption</TD> <TD></TD> </TR> </TABLE> ENDIF--> (Of course, VALIGN=BOTTOM doesn't work on DIV, but I trust we all see that's not the major issue here. I hate both of these solutions. Something better is needed, but it's not to be found in my head just now.) || 4. I have three classes of text to set on my web page: || a. Running Text in Paragraphs: this should be of a size that is the || best compromise between being large enough that the user can read || it easily, and small enough to keep from making the user page down || more than necessary. || b. Section Titles: these should be clearly distinguishable from the || running text, but not so large as to be jarring. They should be || convenient guides for the skimming reader to find the parts of the || text that are most interesting. || c. Legal and Technical Notices: these should be as small and || unobtrusive as possible without being illegible. || What "font-size" should I specify for each class? The problem here is that no useful meanings are assigned to the font-size keywords. What the heck does "medium" mean (other than "larger than small and smaller than large")? If the user has a preferred size for running text (text in paragraphs that goes on at some length), I want to know what to specify to get that size. (And I want it to adjust to the font --- some fonts look huge at, say, 12pt, while script fonts may be barely legible at the same size. The font-size-adjust property apparently tries to get at that, but in practice I can't see how to use it. Most often, I care about the subjective appearance of text, not the actual metrics. How do I say, "Show this in the user's preferred script font at a size that matches the surrounding text in appearance"?) What I'd like to see here is a set of font-size keywords that have normative meanings related to their use in page design. For example: running-text: the user's preferred size for text in paragraphs (recommended where ease of reading should be maximized balancing the size of text with the required space) fine-print: the smallest size in which the font remains legible (recommended for legal notices, etc., which are normally not read by anyone but need to be present) small-text: a size recognizably smaller than running-text but still easily legible (recommended for captions, quoted material, footnotes, etc.) key-text: the user's preferred size for text that should be maximally legible in short phrases, where space is not generally a consideration (recommended for quotes from a following paragraph, "teasers," section headings, etc.) headline: the largest font-size the user would generally prefer to see (recommended for <H1> elements) If one needed <H1>-<H4> elements plus key quotes, a definition something like this: H1 {font-size: headline} H2 {font-size: percept(2/3,key-text,headline)} H3 {font-size: percept(1/3,key-text,headline)} H4 {font-size: key-text; font-weight: bold} P.quot {font-size: key-text; font-style: italic} P.text {font-size: running-text} might do the trick. (The "percept(m/n,x,y)" notation is meant to indicate some way of saying "a value which has the perceptual effect of being about m parts in n from x towards y. The above distributes the font sizes for the four heading types between the headline size and the key-text size so as to appear to be an even gradation to the viewer.) The standard would /not/ define the numeric relationships between these sizes: it would be up to the user agent to support definition of these by the user, and to supply reasonable defaults where the user has not made individual selections. The values might be different for different fonts. What the standard /would/ indicate is how they should normally be used, so that users can set values for each and expect that properly-authored pages will use the sizes they find most comfortable. (In practice it might be desirable to have a level of qualification that would let the author be sure that the H1 and H4 sizes chosen are far enough apart to make the intermediate levels distinguishable, and possibly to scale down the H2 and H3 sizes if the headline size is too much larger than the key-text size. Once again, I'm going to pass on constructing an illustration of that at the moment.) -- Randall Joseph Fellmy aka Randy@Coises.com
Received on Monday, 28 April 2003 07:59:32 UTC