- From: Bert Bos <bert@w3.org>
- Date: Wed, 14 Aug 2013 17:05:24 +0200
- To: www-style@w3.org
On Friday 09 August 2013 05:21:58 fantasai wrote:
> On 07/31/2013 06:18 PM, Bert Bos wrote:
> > That changes the meaning of 'letter-spacing' as it has been used
> > until now (and which I've been relying on).
>
> You're relying on the fact that UAs do not put gaps between
> Latin letters in order to justify the documents you've written.
> I don't think you need to worry: I'm pretty sure this will
> continue to be true as long as there as at least one space
> character within each line of your text. :)
I'm not so sure. Given that there are newspapers (even mainstream ones)
that squeeze or stretch the letter spacing rather than fall back to
ragged margins, and given that CSS was explicitly written to allow that,
I think there will be and very likely already are implementations of CSS
that vary the letter spacing as well as the word spacing.
It is difficult to specify limits on how much letter spacing and word
spacing may shrink or stretch. It depends on the line height and on how
much they stretch in the previous and next lines. And thus CSS2 didn't
provide such controls and instead expected implementations to seduce
users by the quality of their algorithms. There are many authors but few
typographers, and thus their expertise should go into the
implementations, to benefit all authors.
But with letter-spacing, unlike with word-spacing, there is also a
simple switch that is clear to everybody and whose effect is visible to
the untrained eye, and that is whether letter spacing is used for
justification at all or not. (I'm not talking about micro-adjustments,
such as the Zapf's Hz program does; letter-spacing is not meant to
forbid that.) Many people prefer a ragged margin over visibly squeezed
or spaced letters, and thus CSS provides that switch.
I often put 'letter-spacing: 0' in documents I care about. I don't know
what implementations people use (or will use in the future) to render
those documents, but I can express that in my chosen style correct
kerning is preferred over justified margins, in case such a conflict
arises.
And you say "as long as there is at least one space." But what about the
case that there is none? My preference of correctly kerned letters over
justification does not depend on how many word spaces there are.
I don't want
1) T h e p e n u l t i m a t e
impoverishment was not the
last one.
(non-zero letter spacing) nor
2) The penultimate
impoverishment was not the
last one.
(uneven word spacing) nor
3) T h e
impoverishment was not the
last one.
(letter spacing again) but rather
4a) The penultimate
impoverishment was not the
last one.
4b) The
impoverishment was not the
last one.
It is easy for people to recognize 1 and 3 and say they don't want it,
and that is why CSS2 provides 'letter-spacing: 0'. Exactly how bad 2 is
is difficult to express, and so I'd leave it to the implementations.
(Maybe implementations can provide knobs just for the user (not for the
author) to adjust details of the layout. That might be useful to fine-
tune the printing, e.g.)
>
> Are you concerned that you have lines of text without spaces
> that would suddenly start being letter-spaced for justification?
>
> > Besides, using inter-letter spacing for justification is something
> > you don't want to happen by default. If you have a really
> > difficult text, you may want to explicitly enable it, if there is
> > no other option.
>
> Non-Western texts will hit the "really difficult text" situation
> much more frequently, and the spec needs to allow for that.
The default in CSS is to allow automatic letter spacing (when the UA
decides it is suitable, e.g., based on the font). You're talking about
the case where you want to set a non-zero letter spacing and still want
to allow the letter spacing to vary (a little). That's a feature that is
not yet in CSS, but we can add it. E.g.:
a) Added to 'letter-spacing':
letter-spacing: 0.2em 0.3em 0.5em /* min/optimal/max */
b) Added to 'letter-spacing':
letter-spacing: 0.3em flexible /* leave to implementation */
letter-spacing: 0.3em normal /* same, re-using the keyword */
c) Added via a new property:
text-justify: distribute
(Option b might be best, see below.)
>
> > I propose explaining under the <length> value of 'letter-spacing'
> > that the space between letters may still be varied for the
> > purposes of
> >
> > justification if 'text-justify' is set to 'distribute':
> > User agents may not further increase or decrease the
> > inter-character space in order to justify text <ins>except if
> > 'text-justify' is 'distribute'</ins>.
>
> This isn't sufficient, because a lot of justification in CJK
> is not of the 'distribute' variety. The 'distribute' version
> distributes spaces equally between Latin letters as between
> CJK letters. But usually justification will distribute space
> between CJK letters on the line and *not* between Latin letters.
>
> Besides, it's confusing if the meaning of 'letter-spacing: 0'
> changes based on 'text-justify'!
The meaning of 'text-align' also changes based on 'text-justify', so I'm
wondering if what is confusing isn't the existence of 'text-justify'
as such.
Besides, the name is wrong, because it is not really the *justification*
algorithm you want to influence, but the line breaking one, because even
in text with ragged margins, you don't want the margins to be too
ragged, the last line too short or too long, two lines to start with the
same word, or "rivers" of white to occur.
What typographers expect, beyond letter spacing on or off, is a way to
set relative weights for the different aspects of justification. There
are almost no absolutes in typography, everything is interdependent.
Justification can be done in part by squeezing and stretching the spaces
between words. There is a lower limit, obviously, but no hard upper one;
it depends on the line height, the line should also not look too
different from the previous and the next and the whole paragraph should
not look darker than the previous and the next.
It can also be done by hyphenating words. Hyphenation should be avoided
unless the lines would look too full or too empty without it; and
several hyphenated lines in a row start looking like a pattern, so that
should be avoided even more; but again there is no hard limit.
You can also squeeze the letters closer together or space them out
(unless they are connected, such as in fonts that mimic handwriting, or
in Arabic). If you do that to a whole paragraph and only a very little
bit, it may be better than not having justification at all. Some
typographers in some contexts might even prefer justification over quite
bad letter spacing. My guess is that ideographs can be spaced more than
You can also change the letter shapes in small ways (Zapf's Hz program).
You can also change the font size. That can be done to a paragraph if it
is quite isolated (a heading, e.g.), or you can do it to the whole page.
You can try replacing words or phrases by synonyms, if the author
provided some. (That is a feature HTML should provide, I think.)
You can also allow the last line of the paragraph to be a bit shorter or
longer than is desirable to relieve the stress on the preceding lines.
Printers in past centuries also replaced words by abbreviations, but I
think in current practice it is better to leave it to the author to
explicitly provide an abbreviation as an alternative. (Maybe in Braille
there are standard abbreviations that can be applied automatically.)
And at some point you give up and just make the line short (or long, if
it cannot be broken).
TeX provides the notion of "badness" for this: each of the aspects (in
so far as TeX supports them; I actually hoped (some) CSS implementations
would do better than TeX, given that computers had become thousands of
times faster...) can be given a numeric value, which is meaningless in
itself, but can be compared with the values of the other aspects. And
there is another value that represents the maximum overall badness: if
you reach that value, you give up and let some line be short or long.
The problem is that it is quite difficult to express a policy through
those numbers. In practice, when line breaks turn out bad or
justification fails, you tweak things locally. And in fact, the first
thing you do is rewrite the text. Then, if justification is really
important in that paragraph, you might try to increase the maximum
allowed badness by a little bit. And then you give up, or do something
radical, like adding an extra image or put the whole paragraph in bold.
Letter spacing really makes the text look different, that's why CSS has
an explicit switch for that. Plus, with certain cursive fonts it cannot
be used at all. Font size is also quite visible, and I think that should
have an explicit switch as well. The other aspects (word spacing, glyph
squeezing, amount of hyphenation, number of hyphens in a row,
alternative content, min/max length of last line) are very gradual in
their effect, and how much you notice them depends not just on their own
magnitude, but also on how different they are from one line to the next
and from one paragraph to the next.
No doubt some typographers will want to have control over the balance
between these methods, but I think what they really want is not so much
to set the balance for a whole document as to use their own smarts
rather than the computer's to decide in each difficult case what the
best solution is: in one paragraph it may be an extra hyphenation and in
the next one a longer last line. That is because not just the visual
aspects, but also the meaning of the text and its function on the page
play a role in that decision.
Manual intervention is fine in print or PDF (there is only one rendering
and potentially thousands of readers will see it) but not when the line
breaks depend on the screen size, on the screen resolutions, on the
rendering software, on the speed of the hardware, on the available
fonts, on the user's preferences, etc.
I guess what I'm heading towards is
- Drop 'text-justify'
- Add 'letter-spacing: <length> && normal' to mean that <length> is
added between the letters, but that the UA may add a little more or
less if necessary to get acceptable line breaks.
- Add a <choose> element to HTML with <option> children and a CSS
property to say 'CHOOSE {display: alternatives}' or something like
that.
- Add something on 'font-size' to say that the actual font size may be
a bit more or a bit less in order to get better justification of the
paragraph, maybe 'font-size: 2em variable'.
Variable letter spacing may be different (a little bit) between
successive lines. Word spacing may also differ a bit between
successive lines. Font size should scale by the same factor for the
whole paragraph.
For the rest it is up to each renderer to do the best it can given
current technology and current hardware. (And that may be quite
different from one implementation to the next. As it already is, of
course. Or between now and five years from now. At least I hope it
will.)
W.r.t. variable font sizes, maybe there should be a distinction based on
whether the height (block progression direction) is fixed or not: if it
is and the font size is variable, then the font size should be as large
as possible so that the contents still fit in the box, and font size is
then not used for justification...
>
> I don't think what you're worried about -- excessive use of
> letter-spacing between Western letters -- is going to be a
> problem in practice. UAs will do sensible things for Western
> text: we just have to allow them to do sensible things for
> non-Western, texts, too!
CSS was designed more then 10 years after TeX and thus I expected many
implementations of CSS to deliver better layout than TeX, given the
advances in computers and algorithms. CSS was written so as to allow
implementations to do the best they could and improve as technology
advanced, without requiring changes in the style sheet, let alone in CSS
itself. E.g., avoiding "rivers" of white in a paragraph was too
expensive in 1982, but in 1998 I expected some browsers would add it.
But even in 2013 they still don't.
Anyway, css3-text describes some reasonable ways for implementations to
apply variable spacing and I'm not sure we need to give authors more
control than whether to allow/disallow variations in letter-spacing and
font-size.
In some cases, such as for high-volume printing, the typographer should
have ways to tweak individual paragraphs, because any automatic layout
will fail sometimes. But I'm not convinced it is useful to add those
tweaks to CSS.
>
> Also, on a consistency note, right now
> word-spacing: normal;
> and
> word-spacing: 0;
> both mean the same thing: the space between words is not altered
> from its default, but is allowed to justify. It's more consistent
> if
> letter-spacing: normal;
> and
> letter-spacing: 0;
> also meant the same thing: the space between letters is not
> altered from its default, but is allowed to justify.
> Don't you think that makes sense?
No, why should they be "consistent"? What is consistency in this case?
They are different properties with different functions in typography.
There are almost no use cases for 'word-spacing', but 'letter-spacing'
is quite common. 'Word-spacing: normal' was a mistake that I regretted
almost as soon as it became REC. There shouldn't have been such a
keyword. We also have 'line-height' with the values 'normal' and '0',
which is consistent with 'letter-spacing', because the two values do not
mean the same thing.
Bert
--
Bert Bos ( W 3 C ) http://www.w3.org/
http://www.w3.org/people/bos W3C/ERCIM
bert@w3.org 2004 Rt des Lucioles / BP 93
+33 (0)4 92 38 76 92 06902 Sophia Antipolis Cedex, France
Received on Wednesday, 14 August 2013 15:05:59 UTC