Содержание
Установка свойств шрифта является одним из наиболее частых использований таблиц стилей. К сожалению, не существует хорошо разработанной и общедоступной системы классификации шрифтов и, более того, термины, используемые для одной гарнитуры шрифтов, могут не подойти для другой. Например, термин 'italic' ('курсив') обычно используется для обозначения наклонного текста, который также может обозначаться англоязычными терминами Oblique, Slanted, Incline, Cursive или Kursiv. Поэтому это не простая проблема отобразить типичные свойства выбора шрифта для определения шрифта.
Поскольку нет общепринятой, универсальной таксономии свойств шрифта, сопоставление свойств глифам шрифта должно быть выполнено тщательно. Процесс сопоставления свойств выполняется в строго определенном порядке, что призвано обеспечить его максимально возможную согласованность в рамках структуры агента пользователя (в предположении, что при сопоставлении и работе агента используются одинаковые библиотеки начертаний шрифтов).
(Представленный выше алгоритм может быть оптимизирован, во избежание повторной проверки свойств CSS 2.1 для каждого символа в отдельности.)
Правила сопоставления свойств, используемые на шаге 2 вышеприведенного алгоритма:
| Значение: | [[ <family-name> | <generic-family> ] [, <family-name>| <generic-family>]* ] | inherit |
| Начальное значение: | зависит от агента пользователя |
| Область применения: | все элементы |
| Наследование: | да |
| Процентное задание значений: | Н/Д |
| Устройства: | визуальные |
| Вычисляемое значение: | как определено |
Это значение задает список имен гарнитур шрифтов и/или имен общедоступных гарнитур в порядке их приоритета. В отличие от большинства других свойств CSS, для того, чтобы показать, что они являются альтернативными, значения отделяются запятой:
body { font-family: Gill, Helvetica, sans-serif }
Несмотря на то, что многие шрифты содержат глиф "недостающего символа", в качестве которого обычно выступает пустой квадрат, как следует из его названия, его не следует сопоставлять символам, которые не могут быть найдены в шрифте. (Его следует, однако, сопоставлять с U+FFFD, кодом символа "недостающий символ").
Существует два типа имен гарнитур шрифтов:
Разработчикам таблиц стилей желательно в качестве последней альтернативы использовать общедоступную гарнитуру шрифтов. Имена общедоступных гарнитур шрифтов являются ключевыми словами и НЕ должны заключаться в кавычки.
Если не взятое в кавычки имя шрифта содержит круглые скобки, скобки, и/или фигурные скобки, они должны прерываться в соответствии с правилами грамматики CSS. Аналогично, кавычки (и одинарные и двойные), точка с запятой, восклицательный знак, запятые и предшествующие слэши в имени семейства шрифтов, не взятом в кавычки, должны прерываться. Имена шрифтов, содержащие любой из таких символов или пробелов, следует брать в кавычки:
body { font-family: "New Century Schoolbook", serif }
<BODY STYLE="font-family: 'My own font', fantasy">
Если кавычки опущены, то все пустое пространство, располагающееся до и после имени шрифта, игнорируется, а все последовательности пустых символов внутри названия шрифта преобразуется в один пробел. Имена гарнитур шрифтов, которые окажутся такими же, как и значения ключевых слов (например, 'initial', 'inherit', 'default', 'serif', 'sans-serif', 'monospace', 'fantasy' и 'cursive') должны быть заключены в кавычки для исключения их случайного сопоставления с ключевыми словами, имеющими то же самое имя. Агенты пользователей не должны сопоставлять эти ключевые слова с типом '<family-name>'.
Общедоступные гарнитуры шрифтов используются для предотвращения сбоев. Даже в самом наихудшем случае, когда все шрифты, указанные автором таблиц стилей, оказывается недоступными, общедоступные гарнитуры шрифтов, тем не менее, позволяют ему реализовать хотя бы некоторую часть своих намерений. Для оптимального управления типографическим оформлением в таблицах стилей помимо упомянутых следует использовать и другие виды шрифтов.
Все пять существующих общедоступных гарнитур по определению должны использоваться во всех реализациях CSS (при этом вовсе не обязательно, чтобы они представлялись пятью различными реально доступными шрифтами.) Для каждой общедоступной гарнитуры шрифтов агентам пользователей следует осуществлять адекватный выбор ее представителя, который в дальнейшем мог бы использоваться по-умолчанию и наилучшим образом отражал специфику своей гарнитуры в пределах тех возможностей, которые предоставляются ему используемыми технологиями.
Желательно, чтобы агенты пользователей предоставляли пользователям возможность альтернативного выбора общедоступных гарнитур шрифтов.
Глифы антиквенных шрифтов в соответствии с тем, как этот термин используется в CSS, имеют концевые штрихи, расширяющиеся и сужающиеся окончания, а также явно засекаемые концы (включая брусковые засечки). Символы антиквенных шрифтов обычно отстоят друг от друга на одинаковом расстоянии. В антикве различие между толстыми и тонкими штрихами обычно выражено намного сильнее, чем в гротесках ('sans-serif'). В CSS термин 'serif' ('антиква') используется для обращения к шрифтам любого начертания в то время, как для некоторых частных типов начертаний могут существовать свои собственные имена, такие, как Mincho (японский), Sung или Song (китайский), Totum или Kodig (корейский). Любой шрифт, обозначенный одним из этих терминов, может использоваться в качестве представителя общедоступной гарнитуры 'serif'.
Примерами шрифтов, подходящих под это описание, могут быть:
| Латинские шрифты | Times New Roman, Bodoni, Garamond, Minion Web, ITC Stone Serif, MS Georgia, Bitstream Cyberbit |
| Греческие шрифты | Bitstream Cyberbit |
| Кириллические шрифты | Adobe Minion Cyrillic, Excelcior Cyrillic Upright, Monotype Albion 70, Bitstream Cyberbit, ER Bukinst |
| Еврейские шрифты | New Peninim, Raanana, Bitstream Cyberbit |
| Японские шрифты | Ryumin Light-KL, Kyokasho ICA, Futo Min A101 |
| Арабские шрифты | Bitstream Cyberbit |
| Шрифты Cherokee | Lo Cicero Cherokee |
Глифы в гротесках (рубленных шрифтах) в соответствии с тем, как этот термин используется в CSS, имеют простые окончания – без каких-либо расширений, штрихов или других орнаментов. Символы рубленных шрифтов обычно отстоят друг от друга на одинаковом расстоянии. В гротесках различие между толстыми и тонкими штрихами обычно выражено намного слабее, чем в гарнитуре 'serif'. В CSS термин 'sans-serif' используется для обращения к шрифтам любого начертания в то время, как для некоторых частных типов начертаний могут существовать свои собственные имена, такие, как Gothic (японский), Kai (китайский) или Pathang (корейский). Любой шрифт, обозначенный одним из этих терминов, может использоваться в качестве представителя общедоступной гарнитуры 'sans-serif'.
Примерами шрифтов, подходящих под это описание, могут быть:
| Латинские шрифты | MS Trebuchet, ITC Avant Garde Gothic, MS Arial, MS Verdana, Univers, Futura, ITC Stone Sans, Gill Sans, Akzidenz Grotesk, Helvetica |
| Греческие шрифты | Attika, Typiko New Era, MS Tahoma, Monotype Gill Sans 571, Helvetica Greek |
| Кириллические шрифты | Helvetica Cyrillic, ER Univers, Lucida Sans Unicode, Bastion |
| Еврейские шрифты | Arial Hebrew, MS Tahoma |
| Японские шрифты | Shin Go, Heisei Kaku Gothic W5 |
| Арабские шрифты | MS Tahoma |
Глифы в курсивных шрифтах в соответствии с тем, как этот термин используется в CSS, имеют либо соединяющие штрихи, либо другие отличительные элементы курсива, кроме тех, которые присущи наклонным шрифтам. Глифы курсива частично или полностью соединены друг с другом, в результате чего они напоминают больше рукописный, нежели печатный текст. Некоторые шрифты, например, арабские, почти всегда отображаются курсивом. В CSS термин 'cursive' используется для обращения к шрифтам любого начертания, несмотря на то, что другие названия, такие, как Chancery, Brush, Swing и Script также используются в названиях шрифтов данной гарнитуры.
Примерами шрифтов, подходящих под это описание, могут быть:
| Латинские шрифты | Caflisch Script, Adobe Poetica, Sanvito, Ex Ponto, Snell Roundhand, Zapf-Chancery |
| Кириллические шрифты | ER Architekt |
| Еврейские шрифты | Corsiva |
| Арабские шрифты | DecoType Naskh, Monotype Urdu 507 |
Аллегорические шрифты, используемые в CSS, в большей степени являются декоративными, хотя они по-прежнему отображают буквы алфавита (в отличие от специальных шрифтов, которые не отображают буквы алфавита). Примерами могут служить:
| Латинские шрифты | Alpha Geometrique, Critter, Cottonwood, FB Reactor, Studz |
Единственным отличительным признаком моноширинного (monospace) шрифта является то, что все его глифы имеют одинаковую фиксированную ширину. (Это придает больше оригинальности некоторым шрифтам, например, арабским.) При использовании этих шрифтов возникает впечатление, что текст был напечатан на печатной машинке. Они часто используются для отображения примеров компьютерного кода.
Примерами шрифтов, подходящих под это описание, могут быть:
| Латинские шрифты | Courier, MS Courier New, Prestige, Everson Mono |
| Греческие шрифты | MS Courier New, Everson Mono |
| Кириллические шрифты | ER Kurier, Everson Mono |
| Японские шрифты | Osaka Monospaced |
| Шрифты Cherokee | Everson Mono |
| Значение: | normal | italic | oblique | inherit |
| Начальное значение: | normal |
| Область применения: | все элементы |
| Наследование: | да |
| Процентное задание значений: | Н/Д |
| Устройства: | визуальные |
| Вычисляемое значение: | как определено |
Свойство 'font-style' определяет выбор нормального (прямого ("roman" или "upright")), курсивного или наклонного типа начертания в рамках одной гарнитуры шрифтов.
Значение 'normal' выбирает шрифт, который классифицируется в наборе шрифтов агента пользователя как 'normal', тогда как 'oblique' выбирает шрифт, помеченный как 'oblique'. Значение 'italic' выбирает шрифт, помеченный как 'italic', или, если он не доступен, то помеченный как 'oblique'.
Шрифт, обозначенный в базе шрифтов агента пользователя словом 'oblique', может быть сгенерирован путем обычного наклона нормального шрифта.
Шрифты, содержащие в своих именах слова Oblique, Slanted или Incline, в базе данных шрифтов агента пользователя обычно обозначаются одним словом 'oblique'. Шрифты, содержащие в своих именах слова Italic, Cursive или Kursiv, обычно обозначаются одним словом 'italic'.
h1, h2, h3 { font-style: italic }
h1 em { font-style: normal }
В приведенном выше примере, акцентированный текст в пределах элемента 'H1' будет представлен обычным шрифтом.
| Значение: | normal | small-caps | inherit |
| Начальное значение: | normal |
| Область применения: | все элементы |
| Наследование: | да |
| Процентное задание значений: | Н/Д |
| Устройства: | визуальные |
| Вычисляемое значение: | как определено |
Другим типом варианта написания в пределах гарнитуры шрифта является капитель. В шрифтах, обладающих капителью, строчные буквы выглядят аналогично прописным, но имеют при этом меньший размер и немного другие пропорции. Свойство 'font-variant' выбирает такой шрифт.
Значение 'normal' выбирает шрифт, который не является капителью, 'small-caps' – выбирает шрифт с капителью. В CSS 2.1 возможно (но не требуется) создание капители из нормального шрифта путем замены строчных букв масштабированными заглавными. В крайнем случае, заглавные буквы будут использоваться для замены капители.
В следующем примере элемент 'H3' отображается капителью, любые акцентированные слова отображаются наклонным шрифтом, а акцентированные слова в элементе 'H3' отображаются наклонной капителью:
h3 { font-variant: small-caps }
em { font-style: oblique }
Могут быть и другие варианты в гарнитуре шрифта, например, шрифты с цифрами старого стиля, капительными цифрами, сжатыми или расширенными символами, и т.д. CSS 2.1 не имеет свойств для их выбора.
Примечание: Поскольку данное свойство приводит к преобразованию всех букв текста в заглавные, то к нему применимы все замечания, относящиеся к свойству 'text-transform'.
| Значение: | normal | bold | bolder | lighter | 100 | 200 | 300 | 400 | 500 | 600 | 700 | 800 | 900 | inherit |
| Начальное значение: | normal |
| Область применения: | все элементы |
| Наследование: | да |
| Процентное задание значений: | Н/Д |
| Устройства: | визуальные |
| Вычисляемое значение: | см. описание |
Свойство 'font-weight' задает вес шрифта. Значения от '100' до '900' представляют упорядоченную последовательность, каждое число в которой обозначает вес в порядке его возрастания. Ключевое слово 'normal' аналогично '400', а 'bold' – аналогично '700'. Ключевые слова, отличные от 'normal' и 'bold' ошибочно ассоциировались бы с именами шрифта, и числовой масштаб был поэтому выбран для списка с 9 значениями.
p { font-weight: normal } /* 400 */
h1 { font-weight: 700 } /* bold */
Значения 'bolder' и 'lighter' выбирают вес шрифта который определяется относительно веса шрифта, унаследованного от родительского элемента:
strong { font-weight: bolder }
Дочерние элементы наследуют конечное значение веса, а не значение ключевого слова.
Шрифты (данные шрифтов) обычно имеют одно или более свойств, значений которых названы для описания "насыщенности" шрифта. Нет общепринятой, универсальной системы для этих имен, обозначающих насыщенность шрифта. Их первичная роль – это различать начертания с различной насыщенностью в пределах одной гарнитуры шрифтов. Использование названий гарнитур шрифтов весьма разнообразно; например, шрифт, который, должен быть жирным, может оказаться названным как Regular, Roman, Book, Medium, Semi- или DemiBold, Bold, или Black, в зависимости от того, насколько темным был задан "нормальный" тип начертания шрифта в процессе его разработки. Поскольку нет стандарта использования имен, значения свойств насыщенности в CSS 2.1 задаются в числовом формате, в котором значение '400' (или 'normal') соответствует "нормальному" начертанию шрифта данной гарнитуры. В качестве названия насыщенности, связанной с данным начертанием, обычно используются слова Book, Regular, Roman, Normal или иногда Medium.
Ассоциация названий градаций насыщенности внутри гарнитуры с их числовыми значениями осуществляется только для сохранения порядка этих градаций внутри гарнитуры. Однако, набор следующих эвристических правил иллюстрирует наиболее типичный способ отображения:
В следующих двух примерах показаны типичные отображения.
Допустим, что в гарнитуре "Rattlesnake" существует четыре градации насыщенности, от самой светлой и до самой темной: Regular, Medium, Bold, Heavy.
| Доступные шрифты | Числовое значение насыщенности | Заполнение пробелов |
|---|---|---|
| "Rattlesnake Regular" | 400 | 100, 200, 300 |
| "Rattlesnake Medium" | 500 | |
| "Rattlesnake Bold" | 700 | 600 |
| "Rattlesnake Heavy" | 800 | 900 |
Допустим, что в гарнитуре "Ice Prawn" существует шесть градаций насыщенности: Book, Medium, Bold, Heavy, Black, ExtraBlack. Обратите внимание, что в данном примере пользовательский агент решил не задавать числовое значение для градации "Ice Prawn ExtraBlack".
| Доступные шрифты | Числовое значение насыщенности | Заполнение пробелов |
|---|---|---|
| "Ice Prawn Book" | 400 | 100, 200, 300 |
| "Ice Prawn Medium" | 500 | |
| "Ice Prawn Bold" | 700 | 600 |
| "Ice Prawn Heavy" | 800 | |
| "Ice Prawn Black" | 900 | |
| "Ice Prawn ExtraBlack" | (нет) |
Так как относительные ключевые слова 'bolder' и 'lighter' предназначены для того, чтобы затемнить или осветлить начертание в пределах гарнитуры, и потому что гарнитура, возможно, не имеет начертаний, выровненных по всем символическим значениям насыщенности, то 'bolder' соответствует следующему более темному начертанию, доступному в клиенте в пределах гарнитуры, а 'lighter' – следующему более светлому начертанию в пределах гарнитуры. Чтобы быть точным, значение относительных ключевых слов 'bolder' и 'lighter' следующие:
Существование более темного шрифта для каждого значения свойства 'font-weight' не гарантировано; например, некоторые шрифты имеют только обычное и жирное начертание, в то время как другие шрифты могут иметь восемь различных градаций насыщенности. Нет никаких точных сведений о том, как в пределах гарнитуры агент пользователя будет сопоставлять начертания шрифта значениям их насыщенности. Гарантируется только то, что начертание, соответствующее заданному значению не будет более темным, чем начертания, соответствующие более светлым значениям.
Вычисляемое значение свойства "font-weight" это:
CSS 2.1 не определяет, как представляется вычисленное значение насыщенности шрифта – внутренне или внешне.
| Значение: | <абсолютный размер> | <относительный размер> | <длина> | <проценты> | inherit |
| Начальное значение: | medium |
| Область применения: | все элементы |
| Наследование: | да |
| Процентное задание значений: | относительно размера шрифта родительского элемента |
| Устройства: | визуальные |
| Вычисляемое значение: | абсолютная длина |
Размер шрифта соответствует кегельной шпации – концепции, используемой в типографии. Примите во внимание, что определенные глифы могут выступать за пределы кегельной шпации. Значения имеют следующий смысл:
[ xx-small | x-small | small | medium | large | x-large | xx-large ]
В следующей таблице приводятся рекомендации для агента пользователя по сопоставлению абсолютного размера заголовкам HTML и абсолютным размерам шрифтов. Значение 'medium' – это определяемый пользователем размер шрифта, который используется как эталонное среднее значение.
| Значения абсолютных размеров CSS | xx-small | x-small | small | medium | large | x-large | xx-large | |
|---|---|---|---|---|---|---|---|---|
| Размер шрифта HTML | 1 | 2 | 3 | 4 | 5 | 6 | 7 |
Примечание: опыт реализаций показал, что фиксированное соотношение между смежными ключевыми словами абсолютного размера вызывает проблемы, и эта спецификация НЕ рекомендует такое фиксированное соотношение, в отличие от предыдущих спецификаций (CSS1 suggested 1.5, и CSS2 suggested 1.2).
Создателям реализаций следует строить таблицу масштабных коэффициентов для ключевых слов абсолютного размера относительно размера шрифта 'medium' и специфичности устройства и его характеристик (например, разрешающая способность устройства).
Для разных устройств требуются разные масштабирующие коэффициенты. Кроме того, при вычислении элементов таблицы агент пользователя должен учитывать качество и доступность шрифтов. Эта таблица может изменяться в зависимости от гарнитуры шрифтов.
Примечание 1. Чтобы сохранить разборчивость текста, агенту пользователя, применяющему эти рекомендации, следует, однако, избегать создания размера шрифта, который на мониторе компьютера имел бы менее 9 пикселей на единицу измерения EM.
Примечание 2. В CSS1 было предложено при переходе между двумя соседними индексами использовать масштабирующий коэффициент 1.5, который оказался для агентов пользователей слишком большим. В CSS2 было предложено при переходе между двумя соседними индексами использовать масштабирующий коэффициент 1.2, который все еще создавал проблемы при отображении маленьких размеров шрифтов. Новый масштабирующий коэффициент изменяется между каждым индексом, чтобы обеспечить лучшую разборчивость текста.
При вычислении размера шрифта элемента, заданного значением длины или процентным соотношением, не следует принимать во внимание таблицу размеров шрифта.
Отрицательные значения не допускаются.
Для всех остальных свойств, значения длины единиц 'em' и 'ex' определяется относительно вычисляемого значения размера шрифта текущего элемента. Для свойства 'font-size' масштаб этих единиц измерения определяется относительно вычисляемого значения размера шрифта родительского элемента.
Примите во внимание, что в зависимости от контекста приложение может дать иное толкование явно заданному размеру. Например, в VR-сцене шрифт может получить другой размер из-за перспективного искажения.
Примеры:
p { font-size: 16px; }
@media print {
p { font-size: 12pt; }
}
blockquote { font-size: larger }
em { font-size: 150% }
em { font-size: 1.5em }
| Значение: | [ [ <'font-style'> || <'font-variant'> || <'font-weight'> ]? <'font-size'> [ / <'line-height'> ]? <'font-family'> ] | caption | icon | menu | message-box | small-caption | status-bar | inherit |
| Начальное значение: | см. каждое свойство в отдельности |
| Область применения: | все элементы |
| Наследование: | да |
| Процентное задание значений: | см. каждое свойство в отдельности |
| Устройства: | визуальные |
| Вычисляемое значение: | см. каждое свойство в отдельности |
За исключением некоторых аспектов, которые будут описаны ниже, свойство 'font', являясь стенографическим, используется для определения значений свойств 'font-style', 'font-variant', 'font-weight', 'font-size', 'line-height' и 'font-family' в одном месте таблицы стилей. Синтаксис этого свойства основан на традиционной типографической сокращенной записи различных свойств шрифтов.
Всем свойствам шрифтов, включая те, которые были описаны в предыдущем абзаце, присваиваются их начальные значения. Затем те свойства, значения которых в стенографическом свойстве 'font' заданы явно, принимают эти значения. Для определения допустимых и начальных значений следует обратиться к вышеизложенному описанию свойств.
p { font: 12px/14px sans-serif }
p { font: 80% sans-serif }
p { font: x-large/110% "New Century Schoolbook", serif }
p { font: bold italic large Palatino, serif }
p { font: normal small-caps 120%/120% fantasy }
Процентное соотношение ('80%'), используемое во втором правиле для определения размера шрифта, задается относительно размера шрифта родительского элемента. Процентное соотношение, используемое в третьем правиле для определения высоты строки, задается относительно размера шрифта самого элемента.
В первых трех приведенных выше правилах, свойства 'font-style', 'font-variant' и 'font-weight' явно не заданы, и в связи с этим все эти три свойства принимают свои начальные значения ('normal'). В четвертом правиле свойству 'font-weight' присваивается значение 'bold', свойству 'font-style' – значение 'italic', а свойству 'font-variant' явно присваивается значение 'normal'.
В пятом правиле определяются значения свойств 'font-variant' ('small-caps'), 'font-size' (120% от размера шрифта родительского элемента), 'line-height' (120% от размера шрифта) и 'font-family' ('fantasy'). Из этого следует, что ключевое слово 'normal' применяется к двум оставшимся свойствам: 'font-style' и 'font-weight'.
Следующие значения относятся к системным шрифтам:
Параметры системных шрифтов могут быть описаны только все целиком, т.е. гарнитура шрифтов, размер, насыщенность, стиль и прочие параметры определяются одновременно. При желании эти значения могут быть затем изменены отдельно. Если на данной платформе нет шрифта с указанными характеристиками, то агент пользователя должен либо выполнить адекватную подстановку (например, шрифт 'caption' с меньшим размером букв может быть использован для шрифта 'small-caption'), либо подставить свой шрифт, используемый им по-умолчанию. Как и в случае обычных шрифтов, если операционная система не предоставляет пользователю доступа к отдельным свойствам системных шрифтов, то следует этим свойствам присвоить их начальные значения.
По этой причине рассматриваемое свойство является свойством "почти" сокращенной записи: самого по себе свойства 'font-family' недостаточно для описания системных шрифтов, которые могут быть заданы только с использованием свойства 'font', предоставляющего авторам возможности, не сводящиеся к простому суммированию включенных в него свойств. Тем не менее, значения отдельных свойств системных шрифтов, таких, как 'font-weight', могут по-прежнему изменяться в индивидуальном порядке.
button { font: 300 italic 1.3em/1.7em "FB Armada", sans-serif }
button p { font: menu }
button p em { font-weight: bolder }
Если бы в некоторой системе для выпадающих меню был задан, например, шрифт Charcoal размером в 9 пунктов и насыщенностью, равной 600, то элементы P, являющиеся дочерними элементами элемента BUTTON, отображались бы так, как если бы действовало следующее правило:
button p { font: 600 9px Charcoal }
Т.к. стенографическое свойство 'font' возвращает начальное значение всем свойствам, для которых значение не было задано явно, то равносильным этой записи является действие следующего объявления:
button p {
font-family: Charcoal;
font-style: normal;
font-variant: normal;
font-weight: 600;
font-size: 9px;
line-height: normal;
}