- From: Bert Bos <bert@w3.org>
- Date: Tue, 15 Sep 2009 21:23:50 +0200
- To: www-style@w3.org
I was thinking a bit about how to achieve certain visual effects with
rotated letters. They only involve 90° turns, so some of them might be
possible with the Text Layout module rather than with Transforms. Just
brainstorming...
1) Single rotated letter
Sometimes found in books or poems, a single letter that looks like it
has fallen over:
m... m... m... ᴟ
(Sorry for the Unicode abuse.) One would hope it could be as simple as
span.fallen {transform: rotate(90deg)}
Using Text Layout, it might be
span.fallen {block-flow: rl}
but that only rotates glyphs that are sensitive to the writing mode
(the "m" is, but CJK ideographs are not), so this is not a generally
applicable method.
As for the alignment to the baseline: The 'block-flow' property is
almost certainly going to specify that the element is handled like an
inline-block, which in this case would sit on the baseline and look
pretty much right without any further properties, such
as 'vertical-align'.
The 'transform' property would probably need to say something similar.
See below.
2) Rotated word
Rotating a whole word is not much different:
After the collision, one of the cars was uʍopǝp̣ı̣sdn
With 'transform', this should be as simple as
span.fallen {transform: rotate(180deg)}
I'm not sure it can be done with properties from the Text Layout module.
There will certainly be combinations of 'block-flow'
and 'glyph-orientation' (or some such property) to make letters appear
upright, turned right and turned left, but maybe not upsidedown.
(Upsidedown writing appears in very old inscriptions, but not in any
current writing system.)
The correct alignment is not going to be automatic. I think the behavior
will be as follows: an inline element with a transform is implicitly
turned into an inline-block first, then transformed, and the bottom of
the bounding box of the result is put on the baseline. (Splitting the
inline element over several lines first and then rotating each box
seems not necessary. It is already unreadable enough on a single line.)
The result then has to be aligned correctly with 'vertical-align' (or
with relative positioning):
span.fallen {transform: rotate(180); vertical-align: -0.25em}
A problem is that the size of a font's ascender is not available to CSS.
If we assume a new unit 'ht' ("height") that corresponds to the
ascender, we could align the rotated text properly:
span.fallen
{ transform: rotate(180)
; line-height: 1em
; vertical-align: calc(1ex - 1ht)
}
3) Rotated heading
A 90° rotated header, displayed to the side of the text to which it
applies:
The opposite of stereo ᴟ
is mono. It has fewer ᴑ
letters and thus needs ᴝ
fewer loudspeakers as ᴑ
well, of course.
I expect this can be done with
h2 {transform: rotate(270deg); float: right}
The definition of 'transform' will probably be such that the resulting
box will have a height equal to the width it would have without
rotation. So it may be necessary to add an explicit width:
h2 {width: 10em}
or, if we know the heading won't be very long:
h2 {width: max-content}
This example might also work well, if not better, with the properties
from Text Layout, because in this case keeping ideographs upright is
probably what you want, unlike in case 1 above.
h2 {block-flow: rl; float: right}
In this case the heading is a block and adding a 'transform' or
a 'block-flow' doesn't turn it into an inline-block, but keeps it a
block. There is a question what its width and height is, but there is a
good chance that it not necessary to use the 'width' or 'height'
properties explicitly.
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 Tuesday, 15 September 2009 19:24:28 UTC