16 Текст

Содержание

Свойства, описываемые в следующих разделах, влияют на визуальное представление символов, пробелов, слов и абзацев.

16.1 Отступы: свойство 'text-indent'

'text-indent'
Значение:  <длина> | <проценты> | inherit
Начальное значение:  0
Область применения:  элементы уровня блока, ячейки таблицы и строковые блоки
Наследование:  да
Процентное задание значений:  относительно ширины контейнера
Устройства:  визуальные
Вычисляемое значение:  процентное соотношение как определено, или абсолютная длина

Это свойство определяет отступ первой строки теста в блоке. Более точно говоря, оно определяет отступ первого блока, который входит в первый линейного блок блока. Блок смещается относительно левого (или правого при расположении текста справа налево) края линейного блока. Агентам пользователей следует представлять этот отступ как пустое пространство.

Значения имеют следующий смысл:

<длина>
Отступ является фиксированной величиной.
<проценты>
Отступ задается в процентах относительно ширины содержащего блока.

Значение свойства 'text-indent' может быть отрицательным, но в конкретных реализациях могут быть установлены ограничения на использование таких значений. Если значение свойства 'text-indent' является или отрицательным или превышает ширину блока, то первый блок, описанный выше, может переполнять блок. Значение свойства 'overflow' будет влиять на то, будет ли видим текст, переполняющий блок.

Пример(ы):

В следующем примере задается отступ текста, равный '3em'.


p { text-indent: 3em }

Примечание: Поскольку значение свойства 'text-indent' наследует, при определении в элементе блока, то оно будет оказывать влияние на дочерние элементы строковых блоков. Поэтому часто более полезно задавать 'text-indent: 0' для элементов, которые определены как 'display:inline-block'.

16.2 Выравнивание: свойство 'text-align'

'text-align'
Значение:  left | right | center | justify | inherit
Начальное значение:  безымянное значение, которое действует как 'left' если свойство 'direction' имеет значение 'ltr', 'right' если 'direction' – 'rtl'
Область применения:  элементы уровня блока, ячейки таблицы и строковые блоки
Наследование:  да
Процентное задание значений:  Н/Д
Устройства:  визуальные
Вычисляемое значение:  начальное значение или как определено

Это свойство определяет способ выравнивания строкового содержимого блока. Значения имеют следующий смысл:

left, right, center, justify
Влево, вправо, по центру и выравнивание текста в соответствии с описанным в разделе о форматировании строк.

Блок текста - это совокупность линейных блоков. При значениях 'left', 'right' и 'center' это свойство указывает способ выравнивания последовательных блоков в каждом линейном блоке относительно левой и правой стороны линейного блока; выравнивание производится не относительно области просмотра. В случае значения 'justify', данное свойство определяет то, как строковые блоки должны располагаться относительно обеих сторон блока. (См. также 'letter-spacing' и 'word-spacing'.)

Если вычисленным значением свойства 'text-align' является 'justify', и при этом вычисленное значение свойства 'white-space' равно 'pre' или 'pre-line', то фактическим значением свойства 'text-align' будет его начальное значение.

Пример(ы):

В этом примере обратите внимание на то, что значение 'text-align' наследуется, поэтому во всех элементах уровня блока, находящихся в элементе DIV и имеющих значение 'class=center', строковое содержимое будет выровнено по центру.


div.important { text-align: center }

Примечание. Фактический алгоритм выравнивания зависит от агента пользователя и языка/скрипта текста.

Соответствующие агенты пользователей могут интерпретировать значение 'justify' как 'left' или 'right', это зависит от основного направления написания элемента: слева направо или справа налево, соответственно.

16.3 Элементы декорирования

16.3.1 Подчеркивание, надстрочное подчеркивание, перечеркивание и мигание: свойство 'text-decoration'

'text-decoration'
Значение:  none | [ underline || overline || line-through || blink ] | inherit
Начальное значение:  none
Область применения:  все элементы
Наследование:  нет (см. описание)
Процентное задание значений:  Н/Д
Устройства:  визуальные
Вычисляемое значение:  как определено

Этим свойством описываются элементы декорирования текста элементов с помощью цветов элемента. Когда задается для строковых элементов, оно оказывает воздействие на все блоки, сгенерированные этим элементом; для всех остальных элементов, декорирование распространяется на безымянный строковый блок, который охватывает все in-flow строковые дочерние элементы этого элемента, и ко всем in-flow потомкам уровня блока. Однако, оно больше не распространяется ни на перемещаемых и абсолютно позиционированных потомков, ни на содержимое 'inline-table' и 'inline-block' потомков.

Подчеркивание, надстрочное подчеркивание, перечеркивание применяется только к тексту (включая пустое пространство, межбуквенные интервалы и интервалы между словами): поля, границы и отступы – пропускаются. Если элемент не содержит текст, то агент пользователя должен воздержаться от представления этого декорирования текста в элементе. Например, рисунок не может быть подчеркнут.

Свойство 'text-decoration' в дочерних элементах не способно оказать никакого влияния на декорирование предка. В определении позиции и толщины декорированных текстовых строк, агенты пользователя могут принимать во внимание размеры шрифта и доминирующие базовые линии потомков, но должны использовать эту же базовую линию и толщину на каждой строке. Относительно позиционированный потомок перемещает все декорирование текста, затрагивая его наряду с текстом потомка; он не влияет на вычисление начальной позиции декорирования на этой строке.

Значения имеют следующий смысл:

none
Текст не декорируется.
underline
Каждая строка текста подчеркивается.
overline
Над каждой строкой текста располагается черта.
line-through
Каждая строка текста перечеркивается по середине.
blink
Текст мерцает (становится то видимым, то невидимым). Соответствующие агенты пользователей могут просто не осуществлять мерцание текста. Примите во внимание, что немерцающий текст – это один из методов, удовлетворяющих WAI-UAAG checkpoint 3.3.

Цвет(а), требуемый для декорирования текста, должен быть определен значением свойства 'color' элемента, для которого устанавливается свойство 'text-decoration'. Цвет элементов декорирования всегда должен оставаться прежним, даже если последующие элементы имеют другие значения свойства 'color'.

Некоторые агенты пользователей реализуют декорирование текста путем распространения декорирования на дочерние элементы в противоположность сохранению постоянной толщины и позиции строки, как это описано выше. Это, возможно, позволяла более свободная формулировка в CSS2. Агенты пользователей соответствующие SVG1, только CSS1 и только CSS2 могут реализовывать такую старую модель и все еще считаться соответствующими данной части CSS 2.1. (Это не применимо к агентам пользователей, разработанным после выхода данной спецификации.)

Пример(ы):

В следующем примере для HTML текстовое содержимое всех элементов A, действующих как гиперссылки (посещенные или не посещенные), будет подчеркнуто:


a:visited,a:link { text-decoration: underline }

Пример(ы):

В следующем фрагменте таблицы стилей и документа:


   blockquote { text-decoration: underline; color: blue; }
   em { display: block; }
   cite { color: fuchsia; }

   <blockquote>
    <p>
     <span>
      Help, help!
      <em> I am under a hat! </em>
      <cite> —GwieF </cite>
     </span>
    </p>
   </blockquote>

... подчеркивание для элемента blockquote распространено на безымянный строковый элемент, который окружает элемент span, в результате чего текст "Help, help!" будет синим, с синим подчеркиванием от безымянного строкового элемента, расположенного под ним, цвет был взят от элемента blockquote. Фрагмент <em>текст</em> в блоке em также будет подчеркнут, так как он является in-flow блоком, на который распространяется подчеркивание. Цвет текста последней строки будет фуксия, но подчеркивание под ним – все еще синее подчеркивание от безымянного строкового элемента.

Пример представления вышеизложенного примера подчеркивания

Данный рисунок показывает блоки, затронутые в примере выше. Закругленная линия цвета аква представляет безымянный строковый элемент, окружающий строковое содержимое элемента абзаца, закругленная синяя линия представляет элемент span, а оранжевые линии – представляют блоки.

16.4 Расстояние между буквами и словами: свойства 'letter-spacing' и 'word-spacing'

'letter-spacing'
Значение:  normal | <длина> | inherit
Начальное значение:  normal
Область применения:  все элементы
Наследование:  да
Процентное задание значений:  Н/Д
Устройства:  визуальные
Вычисляемое значение:  'normal' или абсолютная длина

Это свойство определяет расстояние между символами текста. Значения имеют следующий смысл:

normal
Стандартное расстояние для текущего шрифта. Это значение позволяет агентам пользователей менять расстояние между символами для выравнивания текста.
<длина>
Это значение позволяет задать межсимвольное расстояние в дополнение к расстоянию между символами, принятому по-умолчанию. Значения могут быть отрицательными, но могут быть ограничения, налагаемые реализациями. Для выравнивания по обоим краям агенты пользователей могут не увеличивать или не уменьшать расстояние между символами.

Алгоритмы определения расстояния между символами зависят от агента пользователя.

Пример(ы):

В данном примере расстояние между символами в элементах BLOCKQUOTE увеличено на '0.1em'.


blockquote { letter-spacing: 0.1em }

В следующем примере агенту пользователя запрещено изменять расстояние между символами:


blockquote { letter-spacing: 0cm }   /* То же, что и '0' */

Если итоговое расстояние между двумя символами отлично от принятого по-умолчанию, то агентам пользователей не следует использовать лигатуры.

'word-spacing'
Значение:  normal | <длина> | inherit
Начальное значение:  normal
Область применения:  все элементы
Наследование:  да
Процентное задание значений:  Н/Д
Устройства:  визуальные
Вычисляемое значение:  для 'normal' – значение '0'; в остальных случаях – абсолютная длина

Это свойство определяет расстояние между словами. Значения имеют следующий смысл:

normal
Стандартное расстояние между словами, определяемое текущим шрифтом и/или агентом пользователя.
<длина>
Данное значение указывает расстояние между словами добавляемое к расстоянию между словами, принятому по-умолчанию. Значения могут быть отрицательными, но могут быть ограничения, налагаемые реализациями.

Алгоритмы определения расстояния между словами зависят от агента пользователя. На расстояние между словами также влияет выравнивание по обоим краям (см. свойство 'text-align'). На расстояние между словами влияет каждый пробел (U+0020), неразрывный пробел (U+00A0) и идеографический пробел (U+3000) оставленный в тексте после того, как были применены правила обработки пустого пространства.

Пример(ы):

В данном примере расстояние между всеми словами в элементе H1 увеличивается на '1em'.


h1 { word-spacing: 1em }

16.5 Выделение заглавными буквами: свойство 'text-transform'

'text-transform'
Значение:  capitalize | uppercase | lowercase | none | inherit
Начальное значение:  none
Область применения:  все элементы
Наследование:  да
Процентное задание значений:  Н/Д
Устройства:  визуальные
Вычисляемое значение:  как определено

Это свойство управляет эффектом выделения заглавными буквами текста элемента. Значения имеют следующий смысл:

capitalize
Каждое слово начинается с заглавной буквы; остальные символы остаются без изменения.
uppercase
Все буквы каждого слова станут заглавными.
lowercase
Все буквы каждого слова станут строчными.
none
Нет эффекта выделения заглавными буквами.

Фактическое преобразование в заглавные или строчные буквы зависит от используемого языка написания. О том, как определить язык элемента, см. в RFC 3066 ([RFC3066]).

Соответствующие агенты пользователей могут считать значение свойства 'text-transform' равным 'none' для написания скриптов, которые они не преобразуют.

Пример(ы):

В данном примере весь текст в элементе H1 будет выделен заглавными буквами.


h1 { text-transform: uppercase }

16.6 Пустое место: свойство 'white-space'

'white-space'
Значение:  normal | pre | nowrap | pre-wrap | pre-line | inherit
Начальное значение:  normal
Область применения:  все элементы
Наследование:  да
Процентное задание значений:  Н/Д
Устройства:  визуальные
Вычисляемое значение:  как определено

Данное свойство описывает способ обработки пустого пространства внутри элемента. Значения имеют следующий смысл:

normal
Если установлено это значение, агенты пользователей должны сжимать последовательность символов пустого пространства и разбивать строки для вмещения линейных блоков.
pre
Если установлено это значение, агенты пользователей не могут сжимать последовательность символов пустого пространства. Строки разбиваются только в местах начала новой строки, обозначенных в исходном тексте, или в генерируемом содержимом при наличии "\A".
nowrap
Это значение сжимать последовательность символов пустого пространства как и при значении 'normal', но запрещает образовывать разрывы строк в текста.
pre-wrap
Если установлено это значение, агенты пользователей не могут сжимать последовательность символов пустого пространства. Строки разбиваются в местах начала новой строки, обозначенных в исходном тексте, в генерируемом содержимом при наличии "\A", и для вмещения линейных блоков.
pre-line
Это значение предписывает агентам пользователей сжимать последовательность символов пустого пространства. Строки разбиваются в местах начала новой строки, обозначенных в исходном тексте, в генерируемом содержимом при наличии "\A", и для вмещения линейных блоков.

Пример(ы):

В следующих примерах показано ожидаемое поведение пустого пространства в элементах PRE и P, атрибута "nowrap" в HTML.


pre        { white-space: pre }
p          { white-space: normal }
td[nowrap] { white-space: nowrap }
:before,:after { white-space: pre-line }

Дополнительно, в следующем примере продемонстрирован эффект HTML элемента PRE с нестандартным атрибутом "wrap":


pre[wrap]  { white-space: pre-wrap }

16.6.1 Модель обработки 'white-space'

Любой текст, непосредственно содержащий внутри элементы уровня блока (не внутри строкового элемента), следует обрабатывать как безымянный строковый элемент.

Для каждого строкового элемента (включая безымянные строковые элементы), выполняются следующие шаги, обрабатывая символы, отформатированные как двунаправленные, как будто их там нет:

  1. Каждый символ табуляции (U+0009), возврата каретки (U+000D) или пробела (U+0020) вокруг символа перевода строки (U+000A) удаляется если значение свойства 'white-space' установлено равным 'normal', 'nowrap' или 'pre-line'.
  2. Если значение свойства 'white-space' установлено равным 'pre' или 'pre-wrap', то последовательность пробелов (U+0020), не разбитая границей элемента, обрабатывается как последовательность неразрывных пробелов. Однако, для значения 'pre-wrap', возможность разрыва строки находится в конце последовательности.
  3. Если значение свойства 'white-space' установлено равным 'normal' или 'nowrap', то для целей представления символы перевода строки преобразуются в один из следующих символов: символ пробела, символ пробела с нулевой шириной (U+200B) или без символа (т.е. ничего не представляется), в соответствии с алгоритмами, определенными в агенте пользователя основываясь на скрипте содержимого.
  4. Если значение свойства 'white-space' установлено равным 'normal', 'nowrap' или 'pre-line',
    1. каждый символ табуляции (U+0009) преобразуется в пробел (U+0020)
    2. любой пробел (U+0020), следующий за другим пробелом (U+0020) — даже пробел перед строковым элементом, если этот пробел также имеет значение свойства 'white-space' равным 'normal', 'nowrap' или 'pre-line' – удаляется.

Затем весь блок представляется. Строки размещаются принимая во внимание переупорядочивание двунаправленного текста, и заключая как определено свойством 'white-space'.

Поскольку каждая строка размещается,

  1. Если пробел (U+0020), расположенный в начале строки, имеет свойство 'white-space' со значением 'normal', 'nowrap' или 'pre-line', он удаляется.
  2. Все символы табуляции (U+0009) представляются как горизонтальный сдвиг, который начинается от начального края следующего глифа и заканчивается на следующей позиции табуляции. Позиции табуляции находятся в точках, которые отстоят друг от друга на расстоянии, равном 8-ми кратной ширине символа пробела (U+0020), предоставленного в шрифте блока, начиная от начального края содержимого блока.
  3. Если пробел (U+0020), расположенный в конце строки, имеет свойство 'white-space' со значением 'normal', 'nowrap' или 'pre-line', он так же удаляется.
  4. Если пробелы (U+0020) или символы табуляции (U+0009), расположенные в конце строки, имеет свойство 'white-space' со значением 'pre-wrap', агенты пользователей могут визуально их свернуть.

В перемещаемом объекте не следует предоставлять возможность разрыва строки.

Примечание. CSS 2.1 полностью не определяет то, где возможно осуществлять разрывы строк. В перемещаемых и абсолютно позиционированных элементах не предоставлена возможность осуществления разрывов строк.

16.6.2 Пример двунаправленного текста с перекрытием пустого пространства

Задан следующий фрагмент разметки, сделаны специальные пометки для пробелов (с различными фонами и границами для акцентирования и идентификации):


 
     <ltr>A <rtl> B </rtl> C</ltr>

...где элемент <ltr> представляет вставку с направлением слева-направо, а элемент <rtl> представляет вставку с направлением справа-налево, и подразумевается, что значение свойства 'white-space' установлено в 'normal', то в результате применения вышеизложенной модели обработки получится следующее:

Останется два пробела – один после А на уровне вложения с направлением слева-направо, и один после В на уровне вложения с направлением справа-налево. Затем это будет представлено в соответствии с алгоритмом двунаправленного вывода Unicode, и в результате примет вид:


     A  BC

Примите во внимание, что имеется два пробела между A и B, и нет ни одного между B и C. Этого иногда можно избежать при использовании естественной двунаправленности символов вместо подобных уровней вложенности. Кроме того, хорошо избегать применения пробелов непосредственно внутри начальных и конечных тегов, поскольку они имеют тенденцию делать непредсказуемые вещи, имея дело со сворачиванием пустого пространства.

16.6.3 Особенности управления и комбинирования символов

Управление символами, отличными от U+0009 (табуляция), U+000A (перевод строки), U+0020 (пробел) и U+202x (символ, форматированный как двунаправленный), осуществляется как символами для представления так же, как и управление любыми обычными символами.

Комбинированные символы следует обрабатывать как часть символа с которым они состоят в комбинации. Например, :first-letter разрабатывает весь глиф, если содержимое подобно "o<span>̈</span>"; это только не соответствует базовому символу