![]() |
||
|
aranea.ru || Спецификация CSS2 | 15.3. Выбор шрифтов.
15.3. Выбор шрифтов.15.3.1. Описания шрифтов и @font-face.15.3.2. Дескрипторы для выбора шрифта: 'font-family', 'font-style', 'font-variant', 'font-weight', 'font-stretch' и 'font-size'. 15.3.3. Дескрипторы для квалификаций шрифтовых данных: 'unicode-range'. 15.3.4. Дескриптор для числовых значений: 'unitd-per-em'. 15.3.5. Дескриптор для обращения: 'src'. 15.3.6. Дескрипторы для выравнивания: 'panose-1', 'stemv', 'stemh', 'slope', 'cap-height', 'x-height', 'ascent' и 'descent'. 15.3.7. Дескрипторы для синтеза: 'widths', 'bbox' и 'definition-src'. 15.3.8. Дескрипторы для выравнивания: 'baseline', 'centerline', 'mathline' и 'topline'. 15.3.9. Примеры. Вторая фаза механизма шрифтов CSS2 касается выбора устройством вывода шрифта, основанного на свойствах шрифтов, определенных автором, или на доступных шрифтах, и т.д. Подробности алгоритма согласования шрифтов предоставлены ниже. Есть четыре действия по выбору шрифта: согласование имени, интеллектуальное согласование, синтез и загрузка.
Прогрессивная визуализация является комбинацией загрузки и какого-то другого метода; она предоставляет временно заменяемый шрифт (используя согласование имени, интеллектуальное согласование или синтез) для возможности прочитать содержание во время загрузки нужного шрифта. Как только необходимый шрифт успешно загрузится, он заменяет временный шрифт, как правило без необходимости обновления. Обратите внимание. Прогрессивная визуализация запрашивает метрическую информацию о шрифте для того, чтобы избежать изменения разметки содержания, когда фактический шрифт загрузится и визуализируется. Эта метрическая информация является достаточно многословной, так как она должна определяться для более чем одного шрифта в документе. 15.3.1. Описания шрифтов и @font-face.Описание шрифта - это мост между авторскими спецификациями шрифта и данными самого шрифта, которые необходимы для форматирования текста и для визуализации абстрактных глифов, к которым преобразуются символы (фактические масштабируемые контуры или растровые изображения). Шрифты ссылаются на свойства стилевых таблиц. Описание шрифта добавляется к базе данных шрифтов, а затем используется для выбора подходящих данных шрифта. Описание шрифта содержит дескрипторы: размещение данных шрифта в Сети и характеристики данных такого шрифта. Дескрипторы шрифта тоже нуждаются в согласовании со свойствами шрифтов стилевых таблиц для частного шрифта. Уровень подробности описания шрифта может варьировать от имени шрифта до списка ширин глифов. Дескрипторы шрифта могут быть классифицированы в три типа:
Все описания шрифта определяются через правило (at-rule) @font-face. Общая форма: @font-face { <font-description> } где <font-description> имеет форму: descriptor: value; descriptor: value; [...] descriptor: value; Каждое правило @font-face определяет значения для каждого дескриптора шрифта явным или неявным способом. Если точные значения в правиле отсутствуют, то берется начальное значение, указанное в списке для каждого дескриптора в этой спецификации. Эти дескрипторы применяются только вместе с содержанием правила, в котором они определяются, и не применяются к элементам языка документа. Таким образом, нет записи, к каким элементам дескрипторы обращаются, или какие значения наследовались бы дочерними элементами. Доступные дескрипторы шрифтов описаны в следующих разделах этой спецификации. Например, шрифт 'Robson Celtic' определяется в стилевой таблице, лежащей в документе HTML. <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN"> <HTML> <HEAD> <TITLE>Font test</TITLE> <STYLE TYPE="text/css" MEDIA="screen, print"> @font-face { font-family: "Robson Celtic"; src: url("http://site/fonts/rob-celt") } H1 { font-family: "Robson Celtic", serif } </STYLE> </HEAD> <BODY> <H1> This heading is displayed using Robson Celtic</H1> </BODY> </HTML> Стилевая таблица (в элементе STYLE) содержит правило CSS, которое устанавливает, что все элементы Н1 используют семейство шрифта 'Robson Celtic'. Выполнение CSS1 будет искать клиентский шрифт, чье имя семейства и другие свойства соответствуют 'Robson Celtic', и если шрифт не найден, то будет использоваться шрифт с серифами, определяемый устройством вывода, для исправления ситуации (шрифт, который установлен, как существующий). Устройства вывода, выполняющие правила CSS2, будут сначала экзаменовать правило @font-face для поиска описания шрифта, определяемого как 'Robson Celtic'. Хотя это правило не содержит много данных о шрифте, оно имеет адрес URI, откуда можно извлечь шрифт для визуализации данного документа. Загруженный шрифт не должен быть доступен для других применений. Если не обнаружено соответствие для @font-face, то устройство вывода будет пытаться осуществлять согласование, как это выполнялось бы в CSS1. Обратите внимание на то, что если шрифт 'Robson Celtic' был бы установлен на клиентской системе, то это привело бы к тому, что устройство вывода добавило бы ввод в базу данных шрифтов для установленной копии, как описано в разделе по алгоритму согласования шрифтов. Установленная копия будет согласовываться перед загрузкой шрифта, как в примере, указанном выше. Выполнение правил CSS1, которые не понимают @font-face, будет наталкиваться на открывающие фигурные скобки и игнорировать все до появления закрывающих фигурных скобок. Это правило at-rule согласуется с требованиями CSS по синтаксическому анализу совместимости. Анализ может игнорировать эти правила без ошибки. Наличие дескрипторов шрифта отдельно от данных шрифтов имеет преимущество для его выбора и/или замены. Ограничения для защиты и дублирования шрифтов в дескрипторах могут быть гораздо слабее, чем в полных данных о шрифтах. Таким образом, можно установить определение шрифта локально, или, по крайней мере, иметь его в локальном кешировании, если он появляется в обычной стилевой таблице, и все это не потребует доступа к полному определению шрифта во Всемирной сети более чем один раз для названного шрифта. Если дескриптор шрифта продублирован, то дескриптор, появляющийся последним, выигрывает, а другой должен игнорироваться. Таким же образом, любые дескрипторы, которые не распознаются или бесполезны для устройства вывода, должны игнорироваться. Будущие версии CSS могут позволить дополнительные дескрипторы для лучшей замены шрифта, согласования или синтеза. 15.3.2. Дескрипторы для выбора шрифта: 'font-family', 'font-style', 'font-variant', 'font-weight', 'font-stretch' и 'font-size'.Следующие дескрипторы имеют те же имена, что и соответствующие свойства шрифтов в CSS2, и принимают одно значение или перечень значений, разделенных запятой. Значения внутри такого списка за исключением случаев, когда точно указано другое, те же, что и значения для соответствующего свойства CSS2. Если значение одно, то это значение, которое должно согласовываться. Если дан список, то любой пункт списка осуществляет согласование. Если дескриптор в @font-face опущен, то используется начальное значение дескриптора. 'font-family' (Descriptor) Тип значения: [ <family-name> | <generic-family> ] [, [<family-name> | <generic-family> ]]* Начальная величина: зависит от устройства вывода Медиа: визуальные Это – дескриптор для имен семейств шрифтов, и он принимает те же значения, что и свойство 'font-family'. 'font-style' (Descriptor) Тип значения: all | [ normal | italic | oblique ] [, [normal | italic | oblique] ]* Начальная величина: all Медиа: визуальные Это – дескриптор для стиля шрифта, и он принимает те же значения, что и свойство 'font-style' за исключением того, что разрешен список значений, разделенных запятой. 'font-variant' (Descriptor) Тип значения: [normal | small-caps] [,[normal | small-caps]]* Начальная величина: normal Медиа: визуальные Это – указание CSS на случай, когда эта гарнитура является вариантом маленьких прописных букв шрифта. Он принимает те же значения, что и свойство 'font-variant' за исключением того, что разрешается список значений, разделенных запятой. Обратите внимание. Кириллическая прямая гарнитура может помечаться в 'font-variant' как small-caps (маленькие прописные буквы), что дает большую совместимость с латинскими гарнитурами (и сравниваемая гарнитура kursiv, помечается 'font-style', как italic в том же смысле). 'font-weight' (Descriptor) Тип значения: all | [normal | bold | 100 | 200 | 300 | 400 | 500 | 600 | 700 | 800 | 900] [, [normal | bold | 100 | 200 | 300 | 400 | 500 | 600 | 700 | 800 | 900]]* Начальная величина: ко всем Медиа: визуальные Это – дескриптор для установки жирности гарнитуры шрифта относительно других в том же семействе шрифта. Он принимает те же значения, что и свойство 'font-weight' с тремя исключениями:
'font-stretch' (Descriptor) Тип значения: all | [ normal | ultra-condensed | extra-condensed | condensed | semi-condensed | semi-expanded | expanded | extra-expanded | ultra-expanded ] [, [ normal | ultra-condensed | extra-condensed | condensed | semi-condensed | semi-expanded | expanded | extra-expanded | ultra-expanded] ]* Начальная величина: normal Медиа: визуальные Это – указание CSS на сжатую или расширенную природу гарнитуры шрифта относительно других в том же семействе шрифта. Он принимает те же значения, что и свойство 'font-stretch' за исключением следующего:
'font-size' (Descriptor) Тип значения: all | <length> [, <length>]* Начальная величина: all Медиа: визуальные Это – дескриптор для размеров, предоставляемых этим шрифтом. Разрешены только абсолютные значения размеров, в противоположность свойству 'font-size', которое позволяет оба типа значений, относительные и абсолютные. Разрешен список значений абсолютных значений, разделенных запятой. Начальное значение 'all' можно использовать для большинства масштабируемых шрифтов, так что этот дескриптор первоначально используется в @font-face для растровых шрифтов или масштабируемых шрифтов, разработанных как растровые в ограниченном диапазоне размеров. 15.3.3. Дескрипторы для квалификаций шрифтовых данных: 'unicode-range'.Следующий дескриптор является факультативным внутри определения шрифта, но он используется для избегания проверки или загрузки шрифта, который не имеет достаточно глифов для визуализации определенного символа. 'unicode-range' (Descriptor) Тип значения: <urange> [, <urange>]* Начальная величина: U+0-7FFFFFFF Медиа: визуальные Это – дескриптор для определения диапазона символов ISO 10646 конвертируемых шрифтов. Значение <urange> выражает использование шестнадцатиричных чисел с префиксом "U+", в соответствии с кодовым положением символа в ISO 10656. Например, U+05D1 является символом ISO 10646 для 'Hebrew letter bet'. Для значений вне the Basic Multilingual Plane (BMP), добавляются дополнительные ведущие числа в соответствии с числом матрицы, а также в шестнадцатиричным, как это: U+A1234, которое является символом Plane 10 в шестнадцатиричной кодовой позиции 1234. Во время написания ни один символ не назначается вне BMP. Ведущие нули (например, 0000004D) корректны, но не требуются. Начальное значение дескриптора охватывает не только полностью Basic Multilingual Plane (BMP), который будет выражаться как U+0-FFFF, но также целый набор ISO 10646. Таким образом, начальное значение говорит о том, что шрифт может иметь глифы для символов в диапазоне ISO 10646. Определение значения для 'unicode-range' предоставляет информацию для создания эффективного поиска, декларируя ограничительный диапазон, в котором шрифт может иметь глифы для символов. Шрифту не нужно искать символ вне этого диапазона. Значения могут быть написаны с любым числом. Для единичных чисел символ '?', предполагается, означает 'any value' (любое значение), которое создает диапазон позиций символов. Таким образом, единичное число:
Пара чисел в этом формате может комбинироваться с символом черты для указания большего диапазона. Например:
Множество, не соприкасающихся диапазонов, можно определить, разделяя их запятой. Как с другими списками значений, разделенных запятыми в CSS, любой пробельный символ перед или после запятой игнорируется. Например:
15.3.4. Дескриптор для числовых значений: 'units-per-em'.Следующий дескриптор определяет число "единиц" ("units") на em; эти единицы могут базироваться на нескольких других дескрипторах для выражения различных размеров. Таким образом, требуется 'units-per-em', если другие дескрипторы зависят от него. 'units-per-em' (Descriptor) Тип значения: <number> Начальная величина: не определено Медиа: визуальные Это – дескриптор для ряда координатных единиц по квадрату em, размеру проектной решетки, в которой размещаются глифы. 15.3.5. Дескриптор для обращения: 'src'.Этот дескриптор требуется для ссылки на фактические данные шрифта, либо загружаемые, либо установленные локально. 'src' (Descriptor) Тип значения: [ <uri> [format(<string> [, <string>]*)] | <font-face-name> ] [, <uri> [format(<string> [, <string>]*)] | <font-face-name> ]* Начальная величина: не определено Медиа: визуальные Это - приоритетный, разделенный запятыми список внешних ссылок и/или имен локально установленных гарнитур шрифтов. Внешняя ссылка указывает на данные шрифта во Всемирной сети. Это необходимо, если загружается WebFont. Ресурс шрифта может являться подмножеством шрифта источника, например, он может содержать только глифы, необходимые для текущей страницы или для ряда страниц. Внешняя ссылка состоит из URI, с последующим факультативным указанием формата источника шрифта, которой будет обнаружен на этом URI, и эта информация должна использоваться для избегания связей со шрифтами в форматах, которые не пригодны для использования. Подобно гипертекстовым ссылкам, доступен другой формат, но клиенты имеют представление о том, что лучше в более надежном способе, чем пытаться анализировать расширения имен файлов в URI. Объяснение формата содержит разделенный запятыми список форматных строк, которые указывают на хорошо известные форматы. Устройство вывода будет распознавать имя шрифтовых форматов, которые оно поддерживает, и будет избегать загрузки шрифтов с форматами, которые оно не распознает. Начальный список форматных строк, определенный этими спецификациями, и представление форматов, которые возможно будут использоваться в выполнениях на различных платформах:
Как и с другими адресами URI в CSS, URI может быть частичный, в этом случае он решается относительно местоположения стилевой таблицы, содержащей @font-face. Локально установленное свойство <font-face-name> является полным именем шрифта, установленного локально. Полное имя шрифта является именем, которое сообщается операционной системой, и является именем, наиболее возможным для использования в читательской стилевой таблице в Интранете. Украшения, подобно bold (жирный), italic (наклонный) и underline (подчеркнутый), часто используются для различения гарнитур внутри семейства шрифта. Для более подробной информации обратитесь к тексту ниже. Запись для <font-face-name> является полным именем шрифта, которое должно заключаться в кавычки, так как оно может содержать любой символ, включая пробелы и пунктуацию, а также оно должно заключаться внутри "local(" и ")".
Доступ к локально установленному шрифту осуществляется через <font-face-name>. Имя гарнитуры шрифта в действительности не уникально, нет независимой платформы или независимого формата шрифта, но в данном случае это является наилучшим способом для идентификации данных локально установленного шрифта. Использование имени гарнитуры шрифта можно сделать более точно, предоставив указания на дополнительный необходимый глиф. Это можно также сделать указанием диапазона позиций символов ISO 10646, для которых шрифт предоставляет какие-то глифы (смотрите 'unicode-range'). 15.3.6. Дескрипторы для выравнивания: 'panose-1', 'stemv', 'stemh', 'slope', 'cap-height', 'x-height', 'ascent' и 'descent'.Эти дескрипторы являются факультативными для CSS2, но они могут использоваться, если автор желает осуществить интеллектуальное согласование шрифтов или регулировку размеров шрифтов. 'panose-1' (Descriptor) Тип значения: [<integer>]{10} Начальная величина: 0 0 0 0 0 0 0 0 0 0 Медиа: Визуальные Это – дескриптор для числа Panose-1 и состоит из десяти десятичных целых чисел, разделенных пробелами. Для этого дескриптора список значений, разделенных запятыми, не разрешается, так как система Panose-1 может указывать на то, что диапазон значений согласуется. Начальное значение – ноль, оно означает "any" (любой) для каждой цифры PANOSE; все шрифты будут согласовываться с числом Panose, если используется это значение. Использование дескриптора Panose-1 строго рекомендуется для латинских шрифтов. 'stemv' (Descriptor) Тип значения: <number> Начальная величина: не определена Медиа: визуальные Это – дескриптор для ширины вертикального стебелька шрифта. Если значение не определено, то дескриптор не используется для согласования. Если этот дескриптор используется, то должен применяться дескриптор 'units-per-em'. 'stemh' (Descriptor) Тип значения: <number> Начальная величина: не определена Медиа: визуальные Это – дескриптор для горизонтальной ширины стебелька шрифта. Если значение не определено, то дескриптор не используется для согласования. Если дескриптор используется, то должен применяться дескриптор 'units-per-em'. 'slope' (Descriptor) Тип значения: <number> Начальная величина: 0 Медиа: визуальные Это – дескриптор для вертикального угла штриха шрифта. 'cap-height' (Descriptor) Тип значения: <number> Начальная величина: не определена Медиа: визуальные Это – дескриптор для значения высоты глифов верхнего регистра шрифта. Если значение не определенно, то дескриптор не используется для согласования. Если дескриптор используется, то должен применяться дескриптор 'units-per-em'. 'x-height' (Descriptor) Тип значения: <number> Начальная величина: не определена Медиа: визуальные Это – дескриптор для высоты глифов нижнего регистра шрифта. Если значение не определено, то дескриптор не используется для согласования. Если дескриптор используется, то должен применяться дескриптор 'units-per-em'. Этот дескриптор может быть очень полезным, когда используется свойство 'font-size-adjust', так как расчет величины кандидатных шрифтов требует и размер шрифта, и значение x-height; поэтому, рекомендуется включать этот дескриптор. 'ascent' (Descriptor) Тип значения: <number> Начальная величина: не определена Медиа: визуальные Это - дескриптор для максимальной высоты неударного шрифта. Если значение не определено, то дескриптор не используется для согласования. Если этот дескриптор используется, то должен применяться дескриптор 'units-per-em'. 'descent' (Descriptor) Тип значения: <number> Начальная величина: undefined Медиа: визуальные Это – дескриптор для максимальной глубины неударного шрифта. Если значение не определено, то дескриптор не используется для согласования. Если этот дескриптор используется, то должен применяться дескриптор 'units-per-em'. 15.3.7. Дескрипторы для синтеза: 'widths', 'bbox' и 'definition-src'.Синтез шрифта означает, как минимум, согласование метрических размеров определенного шрифта. Поэтому, для синтеза должна быть доступна метрическая информация. Похожим образом, прогрессивная визуализация требует метрических размеров для избегания переформатирования содержания, когда загрузится нужный шрифт. Хотя следующие дескрипторы являются факультативными для CSS2, они необходимы, если автор требует синтезирование (или прогрессивной визуализации свободного переформатирования). Становится ли нужный шрифт доступным или нет, в любом случае должна осуществляться замена на требуемый шрифт. Любой из этих дескрипторов будет использоваться для лучшей или быстрой аппроксимации запланированного шрифта. Из всех этих дескрипторов наиболее важные: 'widths' и 'bbox', которые используются для предохранения текста от переформатирования, когда фактический шрифт становится доступным. Дополнительно, дескрипторы в наборе, используемом для согласования, могут применяться для предоставления лучшего синтеза внешнего вида нужного шрифта. 'widths' (Descriptor) Тип значения: [<urange> ]? [<number> ]+ [,[<urange> ]? <number> ]+] Начальная величина: не определенна Медиа: визуальные Это – дескриптор для ширины глифов. Значение – это список со значениями <urange>, разделенными запятыми, каждое из них сопровождается одной или больше ширинами глифов. Если этот дескриптор используется, то должен применяться дескриптор 'units-per-em'. Если <urange> опускается, то принимается диапазон U+0-7FFFFFFF, который охватывает все символы и их глифы. Если дано не достаточно ширин глифов, то последнее значение в списке заменяется для включения такого urange. Если дано слишком много ширин, то лишние игнорируются. Например: widths: U+4E00-4E1F 1736 1874 1692 widths: U+1A?? 1490, U+215? 1473 1838 1927 1684 1356 1792 1815 1848 1870 1492 1715 1745 1584 1992 1978 1770 В первом примере дается диапазон из 32 символов от 4E00 до 4E1F. Глиф, соответствующий первому символу (4E00), имеет ширину 1736, второй имеет ширину 1874, а третий - 1692. Так как было предоставлено недостаточно ширин, то последняя ширина реплицируется для охвата остального значения. Второй пример устанавливает единичную ширину 1490, для полного диапазона 256 глифов, а затем точные ширины для диапазона 16 глифов. Этот дескриптор не может описывать множественные глифы в соответствии с единичным символом или с лигатурами множества символов. Таким образом, этот дескриптор можно использовать только для документов, которые не имеют контекстуальной формы или обязательных лигатур. Документы, которые требуют преобразование символов к глифам от одного ко многим или от многих ко многим, не могут в настоящее время использовать этот дескриптор для синтеза шрифта, хотя они могут все еще использовать загрузку шрифта или интеллектуальное согласование. 'bbox' (Descriptor) Тип значения: <number>, <number>, <number>, <number> Начальная величина: не определенна Медиа: визуальные Это – дескриптор для максимального охватывающего блока шрифта. Значение является списком значений, разделенных запятой, из четырех чисел, определяющихся в порядке: низкий левый x, низкий левый y, верхний правый x и верхний правый y угол охватывающего блока для шрифта. 'definition-src' (Descriptor) Тип значения: <uri> Начальная величина: не определенна Медиа: визуальные Дескриптор шрифтов может быть либо внутри определения шрифтов в стилевой таблице, либо внутри отдельного источника для установления шрифта, идентифицированного адресом URI. Последний подход может уменьшить сетевой трафик, когда множественные стилевые таблицы ссылаются на те же шрифты. 15.3.8. Дескрипторы для выравнивания: 'baseline', 'centerline', 'mathline' и 'topline'.Эти факультативные дескрипторы используются для выравнивания различных частей текстов. 'baseline' (Descriptor) Тип значения: <number> Начальная величина: 0 Медиа: визуальные Это – дескриптор для базовой линии шрифта. Если этот дескриптор дается со значением не по умолчанию (не ноль), то должен применяться дескриптор 'units-per-em'. 'centerline' (Descriptor) Тип значения: <number> Начальная величина: не определена Медиа: визуальные Это – дескриптор для центральной базовой линии шрифта. Если величина не определена, то устройство вывода может использовать различные эвристические методы, например, средняя линия между высокими и низкими значениями. Если дескриптор используется, то должен применяться дескриптор 'units-per-em'. 'mathline' (Descriptor) Тип значения: <number> Начальная величина: не определено Медиа: визуальные Это – дескриптор для математической базовой линии шрифта. Если не определен, то устройство вывода может использовать центральную базовую линию. Если этот дескриптор используется, то должен применяться дескриптор 'units-per-em'. 'topline' (Descriptor) Тип значения: <number> Начальная величина: не определено Медиа: визуальные Это – дескриптор для верхней базовой линии шрифта. Если он не определен, то устройство вывода может использовать аппроксимированное значение, такое как подъем. Если этот дескриптор используется, то должен применяться дескриптор 'units-per-em'. 15.3.9. Примеры.Ниже дан список шрифтов:
Следующие описания шрифтов могу использоваться для доступности их во время загрузки. @font-face { font-family: "Swiss 721"; src: url("swiss721lt.pfr"); /* Swiss 721 light */ font-style: normal, italic; font-weight: 200; } @font-face { font-family: "Swiss 721"; src: url("swiss721.pfr"); /* The regular Swiss 721 */ } @font-face { font-family: "Swiss 721"; src: url("swiss721md.pfr"); /* Swiss 721 medium */ font-style: normal, italic; font-weight: 500; } @font-face { font-family: "Swiss 721"; src: url("swiss721hvy.pfr"); /* Swiss 721 heavy */ font-style: normal, italic; font-weight: 700; } @font-face { font-family: "Swiss 721"; src: url("swiss721blk.pfr"); /* Swiss 721 black */ font-style: normal, italic; font-weight: 800,900; /* note the interesting problem that the 900 weight italic doesn't exist */ } @font-face { font-family: "Swiss 721"; src: url(swiss721.pfr); /* The condensed Swiss 721 */ font-stretch: condensed; } @font-face { font-family: "Swiss 721"; src: url(swiss721.pfr); /* The expanded Swiss 721 */ font-stretch: expanded; } |