9. Текст

На этой странице:

Вверх Отступ в первой строке блока

Свойство text-indent устанавливает величину отступа первой строки текста в блоке (например, в параграфе). На остальные строки влияния не оказывается.

Создание красных строк в тексте — самый распространённый случай использование этого свойства.

Отступ

Допускаются отрицательные значения, поэтому можно создавать не только отступы, но и выступы.

Выступ

text-indent
Значения: <размер> | <проценты> | inherit
По умолчанию: 0
Область применения: блочные элементы
Наследование: да
Проценты: относительно ширины содержащего блока
Примечание: допускаются отрицательные значения
Файл style.css
  
P
{
  text-indent:1.5em;
  margin:0;
}
      
Посмотреть

Красные строки на экранных страницах лучше не использовать: межабзацные промежутки гораздо весомее сигналят о паузе, значит, больше дружат с читателем.

Файл index.htm
  

      

Вверх Горизонтальное выравнивание

Свойство text-align позволяет задавать выравнивание текста относительно границ блока для которого это свойство задано.

text-align:

Тестирование — это защитная сеть вокруг вашей программы, последняя и порой единственная надежда на серьёзное повышение её качества до того, как она выйдет в свет. (Лу Гринзоу, «Философия программирования»)

Свойство text-align предназначено только для выравнивания текста внутри блока, для которого задано. Блоки выравниваются по границе родителя заданием значения auto для внешних горизонтальных отступов.

text-align
Значения: left | center | right | justify | inherit
По умолчанию: зависит от браузера; обычно left для языков с написанием слева направо и right для языков с написанием справа налево
Область применения: блочные элементы
Наследование: да
Примечание: действует только на текст внутри блока и не выравнивает блочные элементы

Выравнивание текста по левому краю (text-align:left) является стандартным. Несмотря на рваный правый край, читать комфортнее, по сравнению с чтением текста выровненным справа и даже по ширине (в нешироких окнах).

При выравнивании справа (text-align:right), рваный левый край существенно затрудняет чтение. Это, конечно, справедливо только для текстов, которые читаются слева направо (глаз спотыкается на началах строк). Такое выравнивание можно использовать для очень небольших текстовых фрагментов (эпиграфов, позиций меню, заголовков).

Когда центрируются строки большого текста (text-align:center), то наряду с некомфортным чтением (как и при выравнивании справа), возникает ощущение беспорядка на экране: у текста нет ни одного ровного края, а строчки всё равно выравниваются не строго по центру — текст не имеет внятной осевой линии.

К сожалению, приятное значение justify (выравнивание по ширине) тоже имеет недостатки на текстах с длинными словами (русский, немецкий язык). Браузер “не умеет” пока переносить слова по слогам, поэтому на экране при выравнивании по ширине образуются “дыры”:

Пример выравнивания по ширине

Браузеры IE пятых версий по указанию text-align выравнивают не только текст (как требует стандарт), но и блоки. К счастью браузеры этих версий практически уже ушли со сцены.

Вверх Устройство текстовой строки

Уясним, как CSS определяет устройство строки. Эта информация, полезная сама по себе, поможет понять алгоритмы работы свойства line-height (высота строки) и свойства vertical-align (выравнивание по вертикали).

Размер шрифта

Прежде всего, давайте уточним, что понимается под размером шрифта.

Что понимать под размеров шрифта?

Если задано font-size:1cm, то какое именно расстояние будет равно одному сантиметру? Это высота самой большой буквы? Или расстояние между самым высоким кончиком и самым низким хвостиком в строке?

Ответ на этот вопрос, возможно, вас удивит: всё зависит от того, как это расстояние определяет разработчик шрифта. То есть в каждом конкретном шрифте это расстояния задаётся по-разному.

Под размером шрифта понимается кегль, то есть высота кегельной площадки — прямоугольника, который отводится под символ шрифта.

Литера

Исторически понятие кегельной площадки связано с металлическим набором, когда буквы отливались на брусках из сплава свинца, сурьмы и олова. Такие бруски назывались литерами.

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

Кегельная площадка

Высоту кегельной площадки или кегль традиционно считают размером шрифта.

Таким образом, размер шрифта определяется не высотой самого большого символа и не разницей между ушками и хвостиками в строке, а высотой прямоугольника, который отводится под символ.

Кегельная площадка

Высоту кегельной площадки определяет разработчик шрифта по дизайнерским соображениям. На металлической литере кегль всегда больше высоты любого отдельного символа.

В цифровых шрифтах понятие кегельной площадки также сохранилось. Но цифровые дизайнеры имеют большую свободу: цифровая кегельная площадка может быть больше любого символа, может быть в точности равна разнице между ушками и хвостиками в строке, а может быть и такой, что хвостики выходят за её пределы.

Устройство строки

Кегельная площадка содержит один символ текста. Высота у всех кегельных площадок в строке одинакова — одна и есть кегль или размер шрифта, она же совпадает со значением свойства font-size.

Область содержимого

При записи текста кегельные площадки примыкают друг к другу и образуют область содержимого строки. Высота области содержимого равна font-size.

Строчный блок

К области содержимого сверху и снизу добавляется межстрочный интервал. Получается строчный блок. Высота строчного блока равна значению свойства line-height, то есть высоте строки.

Таким образом, line-height равно font-size плюс межстрочный интервал, поделенный на две части — снизу и сверху области содержимого.

Посмотрим на всё это ещё раз на одной общей схеме:

Устройство строки

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

Но это ещё не всё! Отдельные элементы в строке могут иметь собственный кегль и свою высоту строки. Прямоугольник, который охватывает все строчные блоки строки, называется контейнером строки.

Контейнер строки

Вот теперь мы готовы к рассмотрению свойств line-height и vertical-align.

Вверх Высота строки

Свойство line-height задаёт высоту строчного блока:

Строчный блок

Разница между line-height и font-size равна межстрочному интервалу (который делится на две части: сверху и снизу области содержимого). Другое название межстрочного интервала — интерлиньяж.

line-height
Значения: <размер> | <проценты> | <число> | normal | inherit
По умолчанию: normal
Область применения: все элементы
Наследование: да
Проценты: относительно размера шрифта элемента
Примечание: обычно в качестве normal браузеры берут число 1.2 (что соответствует 120%)

С помощью line-height можно управлять интерлиньяжем.

В этом абзаце высота строки задана равной размеру шрифта (20 пикселам). Получается, что межстрочный интервал равен нулю.

P
{
  font-size:20px;
  line-height:20px;
}           
           

В этом абзаце высота строки задана в виде числа 1.2 (обычное значение для normal). Число является множителем, на который умножается размер шрифта. В данном случае line-height равно 24 пикселам. Межстрочный интервал получается равным 4 пикселам, и он распределяется сверху и снизу по 2 пиксела.

P
{
  font-size:20px;
  line-height:1.2;
}           
           

В этом абзаце высота строки задана как 80%. Проценты вычисляются от размера шрифта. Получается: line-height равно 16 пикселам. Межстрочный интервал — отрицательный, символы соседних строк слегка наползают друг на друга.

P
{
  font-size:20px;
  line-height:80%;
}           
           

Вверх Вертикальное выравнивание текста

Сразу следует отметить, что свойство vertical-align предназначено для вертикального выравнивания элементов относительно частей строки, а не для выравнивания самих строк по отношению к содержащему их блоку (как обычно считают новички).

По умолчанию базовые линии всех элементов выравниваются по базовой линии строки, в которой они находятся. В рассмотренном ниже примере по базовой линии выровнены и элемент EM, для которого шрифт увеличен в два раза, и картинка:

В этом абзаце есть выделенный элемент, для которого шрифт увеличен в 2 раза, а также картинка: . Все элементы выровнены по базовым линиям строк.

Если у элемента нет базовой линии (как у картинки), то по базовой линии строки выравнивается его низ.

vertical-align
Значения: baseline | sub | super | top | text-top | middle | bottom | text-bottom | <проценты> | <размер> | inherit
По умолчанию: baseline
Область применения: строчные элементы и ячейки таблиц
Наследование: нет
Проценты: относительно line-height элемента
Примечание: если применяется к ячейкам таблицы, то распознаются только значения baseline, top, middle и bottom

Надстрочные и подстрочные индексы

Значение sub превращает элемент в подстрочный, то есть смещает его базовую линию ниже базовой линии строки. Значение super выполняет обратное — поднимает базовую линию элемента выше базовой линии строки.

Величина смещения не определяется CSS, она зависит от браузера. Значения sub и super не меняю размер шрифта элемента.

Рассмотрим пару примеров.

Масса электрона примерно равна 10-27г, она в 3700 раз меньше массы молекулы водорода, наименьшей из всех молекул.

...10<SPAN>-27</SPAN>г,...           
           
SPAN
{
  vertical-align:super;
  font-size:0.8em;
}           
           

Когда нужно уточнить, в какой системе записано число, к нему приписывают снизу основание системы: 8fd16.

...системы: 8fd<SPAN>16</SPAN>.           
           
SPAN
{
  vertical-align:sub;
  font-size:0.8em;
}           
           

Выравнивание по низу

Рассмотрим значения bottom и text-bottom.

Значение bottom

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

До выравнивания:

До выравнивания

До выравнивания базовая линия элемента совпадала с базовой линией строки.

После выравнивания:

После выравнивания

После выравнивания базовые линии не совпадают. Низ строчного блока элемента опустился до низа контейнера строки.

Текст и у нас расположены в одной строке.

Для картинки задано выравнивание bottom.

EM  /* для первого слова */
{
  font-size:2em;
  line-height:200%;
}           
IMG /* для картинки */
{
  vertical-align:bottom;
}           
           
Значение text-bottom

Выравнивает низ строчного блока элемента по нижней кромке текста строки.

До выравнивания:

До выравнивания

До выравнивания базовая линия элемента совпадала с базовой линией строки.

После выравнивания:

После выравнивания

Выравнивает низ строчного блока элемента по хвостикам основного текста строки. Основной текст — это текст без дополнительной разметки. На картинке слева к основному тексту относится слово “строка”, слово “это” имеет особую разметку и при выравнивании элемента в расчёт не берётся.

Текст и  у нас расположены в одной строке.

Для картинки задано выравнивание text-bottom.

EM  /* для первого слова */
{
  font-size:2em;
  line-height:200%;
}           
IMG /* для картинки */
{
  vertical-align:text-bottom;
}           
           

Выравнивание по верху

Значения top и text-top оказывают симметричные действия по отношению к значениям bottom и text-bottom.

Значение top

Выравнивает верх строчного блока элемента по верху контейнера строки.

До выравнивания:

До выравнивания

До выравнивания базовая линия элемента совпадала с базовой линией строки.

После выравнивания:

После выравнивания

После выравнивания базовые линии не совпадают. Верх строчного блока элемента поднялся до верха контейнера строки.

Текст и у нас расположены в одной строке.

Для картинки задано выравнивание top.

EM  /* для первого слова */
{
  font-size:2em;
  line-height:200%;
}           
IMG /* для картинки */
{
  vertical-align:top;
}           
           
Значение text-top

Выравнивает верх строчного блока элемента по верхней кромке текста строки.

До выравнивания:

До выравнивания

До выравнивания базовая линия элемента совпадала с базовой линией строки.

После выравнивания:

После выравнивания

Выравнивает верх строчного блока элемента по “макушкам” букв основного текста строки. Основной текст — это текст без дополнительной разметки. На картинке слева к основному тексту относится слово “большой”, слово “это” имеет особую разметку и при выравнивании элемента в расчёт не берётся.

Текст и . Они расположены в одной строке.

Для картинки задано выравнивание text-bottom. Мои браузеры поднимают картинку немного выше, чем того требует стандарт. Похоже, они поднимают её до верха области содержимого основного текста (то есть не до верха самой высокой буквы, а до верха кегельной площадки).

EM  /* для первого слова */
{
  font-size:2em;
  line-height:200%;
}           
IMG /* для картинки */
{
  vertical-align:text-top;
}           
           

Середина

Значение middle чаще всего применяют к изображениям, расположенным в строке.

До выравнивания:

До выравнивания

До выравнивания низ картинки совпадал с базовой линией строки.

После выравнивания:

После выравнивания

Браузеры по-разному вычисляют ex, чаще всего 1ex полагается равной 0.5em. Для таких браузеров середина элемента выравнивается по точке, на четверть выше базовой линии строки.

Выравнивает середину строчного блока элемента (середину картинки) по точке, которая лежит выше базовой линии строки на 0.5ex.

Величина ex определяется по отношению к основному тексту строки. На картинке слева к основному тексту относится слово “б/y”, слово “это” имеет особую разметку и в расчёт не берётся.

Текст и б/у расположены в одной строке.

Для картинки задано выравнивание middle.

Центр картинки располагается примерно в середине основного текста строки.

EM  /* для первого слова */
{
  font-size:2em;
  line-height:200%;
}           
IMG /* для картинки */
{
  vertical-align:middle;
}           
           

Проценты

Значения vertical-align, заданные в процентах, поднимают или опускают базовую линию элемента (или нижний край картинки) относительно базовой линии основного текста строки.

Проценты вычисляются от line-height самого элемента, а не от line-height строки, в которой он находится. Для картинки line-height совпадает с её высотой.

Если процентное значение положительное, элемент поднимается, если отрицательное — опускается.

До выравнивания:

До выравнивания

До выравнивания базовая линия элемента совпадала с базовой линией строки.

vertical-align:50%:

После выравнивания

Базовая линия элемента поднимается над базовой линией строки на величину x, равную половине h (величина свойства line-height элемента).

vertical-align:-50%:

После выравнивания

Базовая линия элемента опускается ниже базовой линии строки на величину x, равную половине h (величина свойства line-height элемента).

Текст и б/у расположены в одной строке.

Для картинки задано выравнивание vertical-align:50%.

EM  /* для первого слова */
{
  font-size:2em;
  line-height:200%;
}           
IMG /* для картинки */
{
  vertical-align:50%;
}           
           

Текст и б/у расположены в одной строке.

Для картинки задано выравнивание vertical-align:-50%.

EM  /* для первого слова */
{
  font-size:2em;
  line-height:200%;
}           
IMG /* для картинки */
{
  vertical-align:-50%;
}           
           

Размер

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

До выравнивания:

До выравнивания

До выравнивания базовая линия элемента совпадала с базовой линией строки.

vertical-align:100px:

После выравнивания

Элемент смещается вверх на 100 пикселов.

vertical-align:-100px:

После выравнивания

Элемент смещается вниз на 100 пикселов.

Текст и б/у расположены в одной строке.

Для картинки задано выравнивание vertical-align:2em.

EM  /* для первого слова */
{
  font-size:2em;
  line-height:200%;
}           
IMG /* для картинки */
{
  vertical-align:2em;
}           
           

Текст и б/у расположены в одной строке.

Для картинки задано выравнивание vertical-align:-2em.

EM  /* для первого слова */
{
  font-size:2em;
  line-height:200%;
}           
IMG /* для картинки */
{
  vertical-align:-2em;
}           
           

Вверх Расстояние между словами

Значение свойства word-spacing добавляется к стандартному расстоянию между словами, то есть свойство word-spacing служит для изменения расстояния между словами. Допускаются положительные и отрицательные значения.

word-spacing:

Тестирование — это защитная сеть вокруг вашей программы, последняя и порой единственная надежда на серьёзное повышение её качества до того, как она выйдет в свет. (Лу Гринзоу, «Философия программирования»)

Слово — это любая последовательность символов, не содержащая разделителей и ограниченная разделителями с обеих сторон. Разделитель — это пробел, знак табуляции, начало или конец строки.

word-spacing
Значения: <размер> | normal | inherit
По умолчанию: normal
Область применения: все элементы
Наследование: да
Примечание: значение добавляется к стандартному расстоянию между словами, normal соответствует нулю

Вверх Расстояние между буквами

Значение свойства letter-spacing добавляется к стандартному расстоянию между символами, то есть свойство letter-spacing служит для изменения расстояния между символами. Допускаются положительные и отрицательные значения.

letter-spacing:

Тестирование — это защитная сеть вокруг вашей программы, последняя и порой единственная надежда на серьёзное повышение её качества до того, как она выйдет в свет. (Лу Гринзоу, «Философия программирования»)

letter-spacing
Значения: <размер> | normal | inherit
По умолчанию: normal
Область применения: все элементы
Наследование: да
Примечание: значение добавляется к стандартному расстоянию между символами, normal соответствует нулю

Вверх Преобразование текста

Свойство text-transform позволяет изменять в тексте регистр букв.

text-transform:

Тестирование — это защитная сеть вокруг вашей программы, последняя и порой единственная надежда на серьёзное повышение её качества до того, как она выйдет в свет. (Лу Гринзоу, «Философия программирования»)

text-transform
Значения: uppercase | lowercase | capitalize | none | inherit
По умолчанию: none
Область применения: все элементы
Наследование: да

Значения:

  • uppercase — в верхний регистр;
  • lowercase — в нижний регистр;
  • capitalize — прописной становится первая буква каждого слова;
  • none — не оказывает на текст влияния.

Вверх Оформление текста

Свойство text-decoration позволяет проводить линию под, над и через текст.

text-decoration:

Тестирование — это защитная сеть вокруг вашей программы, последняя и порой единственная надежда на серьёзное повышение её качества до того, как она выйдет в свет. (Лу Гринзоу, «Философия программирования»)

text-decoration
Значения: none | [underline || overline || line-through] | inherit
По умолчанию: none
Область применения: все элементы
Наследование: нет

Значения:

  • underline — подчёркивание;
  • overline — надчёркивание;
  • line-through — перечёркивание.

Вверх Обработка пробелов

Свойство white-space позволяет влиять на то, как браузер обрабатывает пробелы и концы строк в документе.

white-space:

Тестирование — это защитная сеть вокруг вашей программы, последняя и порой единственная надежда на серьёзное повышение её качества до того, как она выйдет в свет. (Лу Гринзоу, «Философия программирования»)

HTML-код:

  <P>
Тестирование&nbsp;&#8212; 
это защитная сеть вокруг 
вашей программы, последняя 
и порой единственная 
надежда на серьёзное 
повышение её качества до 
того, как она выйдет в свет.

(<EM>Лу Гринзоу, 
&laquo;Философия 
программирования&raquo;/EM)
            
white-space
Значения: normal | nowrap | pre | inherit
По умолчанию: normal
Область применения: все элементы
Наследование: нет

Значения свойства:

  • normal — обычное форматирование текста: конец строки равнозначен пробелу, лишние пробелы игнорируются;
  • nowrap — запрещает перенос текста на другие строки (за исключением применения элемента BR);
  • pre — текст отображается как в HTML-коде: с дополнительными пробелами и обработкой концов строк (как в элементе PRE, но без смены шрифта на моноширинный).

Вверх Псевдоэлементы

Псевдоэлементы вводят в документ фиктивные элементы, что позволяет связывать с ними стилевые правила. Визитная карточка псевдоэлемента — двоеточие перед его названием.

Первая буква

Псевдоэлемент :first-letter обозначает первую букву элемента.

P:first-letter {color:red}

Это первый абзац.

Второй абзац.

А это абзац с номером три.

Согласно правилу слева, первая буква каждого абзаца будет окрашена в красный цвет.

Выражение :first-letter можно комбинировать с любым элементом. Например, запись .lf:first-letter относится к первой букве элемента с классом lf.

Первая строка

Псевдоэлемент :first-line обозначает первую строку блока.

P:first-line {text-transform:uppercase}

Это первый абзац. Он достаточно длинный для того чтобы занять более одной строки.

Второй абзац. Он короче первого, но всё же не слишком мал.

Третий абзац.

Согласно правилу слева, первая строка каждого абзаца будет переведена в верхний регистр.

Выражение :first-line можно комбинировать с любым блоком. Например, запись .fline:first-line относится к первой строке блока с классом fline.

Ограничения

Псевдоэлемент :first-letter можно использовать со всеми элементами, :first-line — только с блоками.

В приведенной ниже таблице приведены свойства, которые можно использовать при написании стилевых правил для псевдоэлементов :first-letter и :first-line.

:first-letter :first-line
Все свойства font Все свойства font
color color
Все свойства background Все свойства background
Все свойства margin Все свойства margin
Все свойства padding Все свойства padding
Все свойства border Все свойства border
text-decoration text-decoration
vertical-align(но не для плавающих блоков) vertical-align
text-transform text-transform
line-height line-height
float  
letter-spacing letter-spacing
word-spacing word-spacing

Псевдоэлементы должны размещаться в самом конце селектора. Например, запись P:first-line EM неверная, а запись BLOCKQUOTE P:first-line — правильная.