Поиск

Выбор шрифта

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

Существуют четыре возможных варианта выбора шрифта: сопоставление по имени, интеллектуальное сопоставление, синтез и загрузка.

Сопоставление по имени шрифта

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

Интеллектуальное сопоставление шрифтов

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

Синтез шрифтов

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

загрузка шрифтов

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

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

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

Описания шрифтов и правило @font-face

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

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

Можно выделить три типа дескрипторов шрифтов:

  1. дескрипторы, устанавливающие связь между использованием конкретного шрифта в CSS и его описанием (имена этих дескрипторов совпадают с названиями соответствующих свойств шрифтов в CSS);
  2. URI, устанавливающие местоположение данных о шрифте;
  3. дескрипторы, устанавливающие дополнительные характеристики шрифта для обеспечения связи между его описанием и данными об этом шрифте.

Все дескрипторы определяются с использованием правила at @font-face. Общая форма его записи имеет вид:

@font-face { <font-description> }

где <font-description> имеет следующую форму:

дескриптор: значение;
дескриптор: значение;
[...]
дескриптор: значение;

Каждое правило @font-face явным или неявным образом определяет значение для каждого дескриптора шрифта. Дескрипторы, значения которых в этом правиле не были заданы явно, принимают свои начальные значения, определенные в данной спецификации для каждого дескриптора. Дескрипторы используются исключительно в контексте правила @font-face, в котором они и определяются, и не применяются к элементам языка документа. Более того, не существует точного представления о том, к каким элементам могут применяться дескрипторы, и наследуются ли их значения дочерними элементами.

Доступные дескрипторы шрифтов описаны в следующих разделах данной спецификации.

В следующем примере шрифт 'Robson Celtic' определяется и вызывается в рамках таблицы стилей, содержащейся в HTML-документе.

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN">
<HTML>
<HEAD>
<TITLE>Тестирование шрифтов</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> Этот заголовок отображается шрифтом Robson Celtic</H1>
</BODY>
</HTML>

Таблица стилей (в элементе STYLE) содержит правило CSS, которое устанавливает для всех элементов H1 гарнитуру шрифтов 'Robson Celtic'.

Приложение, использующее CSS1, выполнит в системе пользователя поиск шрифта, название гарнитуры которого и другие свойства соответствуют 'Robson Celtic'. Если такой шрифт не будет найден, то будет использован подстановочный антиквенный шрифт (который по определению обязательно существует), определенный пользовательским агентом.

Пользовательский агент, поддерживающий CSS2, в первую очередь проверяет правила @font-face на наличие описания шрифта 'Robson Celtic'. В данном примере такое правило имеется. Несмотря на то, что это правило содержит не так много данных о шрифте, оно содержит URI, который позволит загрузить его для последующего отображения документа. Загружаемые шрифты не должны становиться доступными для других приложений. Если ни одного подходящего правила @font-face не найдется, то будет использована стратегия, реализуемая пользовательским агентом, поддерживающим CSS1.

Заметьте, что если бы шрифт 'Robson Celtic' был установлен в системе клиента, то пользовательский агент добавил бы соответствующую запись в базу данных шрифтов, как это описано в разделе "Алгоритм сопоставления шрифтов". В представленном выше примере установленная копия была бы выбрана раньше, чем загружаемый шрифт.

В реализациях CSS1, не поддерживающих правило @font-face, все, что содержится между открывающей и закрывающей фигурными скобками тела данного правила, игнорируется. Это правило at отвечает требованиям совместимости с будущими версиями грамматического анализатора CSS. Поэтому грамматические анализаторы могут спокойно игнорировать это правило, не вызывая при этом никаких ошибок.

Хранение дескрипторов отдельно от данных о шрифтах предоставляет определенные преимущества, которые оказываются гораздо шире, чем просто возможность выбора и/или подстановки шрифтов. Требования, касающиеся защищенности и вопросов воспроизведения, для дескрипторов шрифтов могут быть гораздо менее строгими, чем для всего массива данных о шрифтах. Поэтому не исключено, что описание шрифта может устанавливаться локально или, в крайнем случае, храниться в локальном кэше, если оно используется в таблице стилей, к которой осуществляются частые обращения. Благодаря этому для каждого шрифта достаточно только однажды обратиться к его полному описанию, хранящемуся в сети.

Если дескриптор шрифта повторяется несколько раз, то учитывается только последнее его вхождение, а остальные игнорируются.

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

Дескрипторы, используемые для выбора шрифта: 'font-family', 'font-style', 'font-variant', 'font-weight', 'font-stretch' и 'font-size'

Рассматриваемые дескрипторы имеют имена, совпадающие с именами соответствующих свойств шрифтов, определенных в CSS2, и принимают одно или несколько (разделенных друг с другом запятой) значений.

Если не делается явных оговорок, то в списке принимаемых дескриптором значений фигурируют значения, определенные для соответствующего свойства CSS2. Если в списке содержится только одно значение, то оно выступает в качестве объекта, по которому осуществляется сопоставление. В случае многоэлементного списка сопоставление осуществляется по всем значениям, содержащимся в нем. Если в правиле @font-face некоторый дескриптор не упоминается, то ему присваивается его начальное значение.

'font-family' (Дескриптор)

Значение: [ <family-name> | <generic-family> ] [, [<family-name> | <generic-family> ]]*
Начальное значение: зависит от агента пользователя
Ассоциированные устройства: устройства визуального форматирования

Это дескриптор имени гарнитуры шрифта. Его значения совпадают со значениями свойства 'font-family'.

'font-style' (Дескриптор)

Значение: all | [ normal | italic | oblique ] [, [normal | italic | oblique] ]*
Начальное значение: all
Ассоциированные устройства: устройства визуального форматирования

Это дескриптор стиля шрифта. Его значения совпадают со значениями свойства 'font-style', за исключением того, что в нем разрешено использование списка разделенных запятыми значений.

'font-variant' (Дескриптор)

Значение: [normal | small-caps] [,[normal | small-caps]]*
Начальное значение: normal
Ассоциированные устройства: устройства визуального форматирования

Этот дескриптор CSS определяет, является ли данное начертание капителью. Его значения совпадают со значениями свойства 'font-variant', за исключением того, что в нем разрешено использование списка разделенных запятыми значений.

Примечание. Для обеспечения лучшей совместимости латинских и кириллических шрифтов два типа начертания pryamoĭ и Kursiv последнего могут быть помечены дескрипторами 'font-variant' и 'font-style', принимающими значения 'small-caps' и 'italic', соответственно.

'font-weight' (Дескриптор)

Значение: all | [normal | bold | 100 | 200 | 300 | 400 | 500 | 600 | 700 | 800 | 900] [, [normal | bold | 100 | 200 | 300 | 400 | 500 | 600 | 700 | 800 | 900]]*
Начальное значение: all
Ассоциированные устройства: устройства визуального форматирования

Это дескриптор насыщенности шрифта, определяемой относительно шрифтов той же гарнитуры. Его значения совпадают со значениями свойства 'font-weight', за исключением следующего:

  1. запрещается использование относительных ключевых слов (bolder, lighter);
  2. для шрифтов, имеющих несколько градаций насыщенности, разрешается использование списка разделенных запятыми значений;
  3. разрешается использование дополнительного ключевого слова 'all', которое означает, что этот шрифт либо сопоставляется всем возможным значениям насыщенности, либо отображается с использованием нескольких градаций насыщенности, либо отображается с использованием только одной градации насыщенности.
'font-stretch' (Дескриптор)

Значение: 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', за исключением следующего:

  1. запрещается использование относительных ключевых слов (wider, narrower);
  2. допускается использование списка разделенный запятыми значений;
  3. допускается использование ключевого слова 'all'.
'font-size' (Дескриптор)

Значение: all | <length> [, <length>]*
Начальное значение: all
Ассоциированные устройства: устройства визуального форматирования

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

Начальное значение 'all' подходит для большинства масштабируемых шрифтов. Поэтому данный дескриптор прежде всего предназначен для использования в правиле @font-face для растровых шрифтов или масштабируемых шрифтов, разработанных для растрового представления в ограниченном диапазоне значений своих размеров.

Дескрипторы, используемые для оценки данных о шрифте: 'unicode-range'

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

'unicode-range' (Дескриптор)

Значение: <urange> [, <urange>]*
Начальное значение: U+0-7FFFFFFF
Ассоциированные устройства: устройства визуального форматирования

Это дескриптор набора символов из стандарта ISO 10646, содержащихся в данном шрифте.

Значения <urange> задаются с помощью префикса "U+", следом за которым выписывается шестнадцатеричное число, которое является кодом символа в системе ISO 10646 ([ISO10646]).

Например, U+05D1 кодирует символ 'Еврейская буква bet' в системе ISO 10646. К значениям, выходящим за рамки основной многоязыковой базы (Basic Multilingual Plane), спереди добавляется дополнительное шестнадцатеричное число, соответствующие уровню базы. Например U+A1234 представляет символ в базе десятого уровня с шестнадцатеричным кодом, равным 1234. Во время написания за пределами основной многоязыковой базы не было определено ни одного символа. Использование нулей вначале кода (например, 0000004D) допускается, но не желательно.

Начальное значение данного дескриптора покрывает не только всю основную многоязыковую базу, выраженную значением U+0-FFFF, но и весь набор символов из ISO 10646. Таким образом, начальное значение указывает на то, что шрифт может содержать глифы для любого символа из ISO 10646. Присваиваемое дескриптору 'unicode-range' значение задает ограниченный набор символов, для которых в шрифте найдется соответствующий глиф, и тем самым предоставляет информацию, позволяющую увеличить эффективность поиска глифов. При этом отпадает всякая необходимость выполнения поиска глифов для символов, находящихся за пределами указанного диапазона.

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

unicode-range: U+20A7

нет универсальных символов - указывается на код одного символа (испанской денежной единицы, писеты)

unicode-range: U+215?

один универсальный символ - охватываются символы (дроби), код которых лежит в диапазоне от 2150 до 215F

unicode-range: U+00??

два универсальных символа - охватываются символы (Latin-1), код которых лежит в диапазоне от 0000 до 00FF

unicode-range: U+E??

два универсальных символа - охватываются символы (шрифт Lao), код которых лежит в диапазоне от 0E00 до 0EFF

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

unicode-range: U+AC00-D7FF

охватывается диапазон от AC00 до D7FF (область символов Hangul Syllables)

Существует возможность создания множества прерывистых диапазонов, разделенных запятыми. При этом так же, как и в других списках CSS, элементы которых разделены запятыми, любой символ пробела, расположенный до и после запятой, игнорируется. Например:

unicode-range: U+370-3FF, U+1F??

охватывается диапазон от 0370 до 03FF (современный греческий язык) и от 1F00 до 1FFF (старинный политонический греческий язык).

unicode-range: U+3000-303F, U+3100-312F, U+32??, U+33??, U+4E00-9FFF, U+F9000-FAFF, U+FE30-FE4F

Если исходить из количества требуемых пояснений, то эта запись представляет один из самых наихудших случаев, в котором с большой точностью указано, что этот (чрезмерно большой) шрифт содержит исключительно китайские символы (не включает никаких символов, происходящих из японского или корейского языка), принадлежащие стандарту ISO 10646. Диапазоном включает значения, заключенные в интервале от 3000 до 303F (китайско-корейско-японские символы и знаки пунктуации), от 3100 до 312F (Bopomofo), от 3200 до 32FF (китайско-корейско-японские вложенные буквы и обозначения месяцев), от 3300 до 33FF (область китайско-корейско-японской совместимости), от 4E00 до 9FFF (обобщенные китайско-корейско-японские идеограммы), от F900 до FAFF (совместимые китайско-корейско-японские идеограммы) и от FE30 до FE4F (совместимые китайско-корейско-японские формы).

Более простое представление типичного китайского шрифта задается следующим диапазоном:

unicode-range: U+3000-33FF, U+4E00-9FFF
unicode-range: U+11E00-121FF
Этот шрифт покрывает область, которую предлагается использовать для пиктограмм ацтеков, охватывая диапазон от 1E00 до 21FF в базе первого уровня.
unicode-range: U+1A00-1A1F
Этот шрифт покрывает область, которую предлагается использовать для одного из Ирландских диалектов (Ogham), охватывая диапазон от 1A00 до 1A1F

Дескриптор единиц измерения: 'units-per-em'

Следующий дескриптор задает число "единиц измерения", приходящихся на одну кегельную шпацию. Впоследствии эти единицы могут быть использованы другими дескрипторами для определения различных поперечных размеров. Таким образом, дескриптор 'units-per-em' нужен только тогда, когда он используется другими дескрипторами.

'units-per-em' (Дескриптор)

Значение: <number>
Начальное значение: не определено
Ассоциированные устройства: устройства визуального форматирования

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

Дескриптор, используемые для обращения: 'src'

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

'src' (Дескриптор)

Значение: [ <uri> [format(<string> [, <string>]*)] | <font-face-name> ] [, <uri> [format(<string> [, <string>]*)] | <font-face-name> ]*
Начальное значение: не определено
Ассоциированные устройства: устройства визуального форматирования

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

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

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

Ниже приведен определенный в рамках данной спецификации исходный список описаний форматов, которые могут быть реализованы на различных платформах:Описание Формат шрифта Примеры типичных расширений

"truedoc-pfr" TrueDoc™ Portable Font Resource .pfr
"embedded-opentype" Embedded OpenType .eot
"type-1" PostScript™ Type 1 .pfb, .pfa
"truetype" TrueType .ttf
"opentype" OpenType, including TrueType Open .ttf
"truetype-gx" TrueType with GX extensions
"speedo" Speedo
"intellifont" Intellifont

Подобно всякому URI, используемому в CSS, рассматриваемый URI может быть относительным. В этом случае он доопределяется относительно местоположения таблицы стилей, содержащей правило @font-face.

В качестве полного имени локально установленного шрифта выступает локально определенное значение <font-face-name>. Полным именем шрифта является имя шрифта в том виде, в котором оно задано в операционной системе, в котором оно вероятнее всего будет использоваться в таблицах стилей пользователя или разработчика, имеющего доступ к внутренней сети, а также в таблицах стилей, установленных в браузерах по умолчанию. Такие элементы оформления текста, как насыщенность, курсив и подчеркивание, часто используются для различения типов начертания шрифтов в пределах одной гарнитуры. Более подробную информацию о полных именах шрифтов можно найти ниже.

Запись <font-face-name> является полным именем шрифта, которое должно быть заключено в кавычки, т.к. оно может содержать любой символ, включая пробелы и знаки пунктуации, а также должно быть заключено в "local(" и ")".

src: url("http://foo/bar")
полный URI без информации о доступных форматах шрифтов
src: local("BT Century 751 No. 2 Semi Bold Italic")
ссылка на определенный тип начертания локально установленного шрифта
src: url("../fonts/bar") format("truedoc-pfr")
относительный URI, указывающий на шрифт, доступный в формате TrueDoc
src: url("http://cgi-bin/bar?stuff") format("opentype", "intellifont")
полный URI, указывающий в данном случае на шрифт, который может представляться
в двух различных форматах - OpenType и Intellifont
src: local("T-26 Typeka Mix"), url("http://site/magda-extra") format("type-1")
заданы два варианта: первый - локально установленный шрифт, и второй -
загружаемый шрифт, доступный в формате Type 1.

Обращение к локально установленным шрифтам осуществляется посредством значения <font-face-name>. Не смотря на то, что имя начертания шрифта не является абсолютно уникальным также, как и абсолютно независимым от платформы и формата шрифта, оно, тем не менее, на данный момент предоставляет наилучший способ идентификации локально установленных данных о шрифтах. Использование этого имени может стать более корректным, если учитывать информацию об отображении символов в глифы. Последнее может быть достигнуто путем перечисления кодов символов из ISO 10646, для которых данный шрифт предоставляет соответствующие глифы (см. 'unicode-range').

Дескрипторы, используемые для сопоставления: 'panose-1', 'stemv', 'stemh', 'slope', 'cap-height', 'x-height', 'ascent' и 'descent'

Использование этих дескрипторов в определениях, осуществляемых в рамках CSS2, не обязательно, хотя может оказаться полезным, если разработчику понадобится выполнить интеллектуальное сопоставление шрифтов или настройку их размеров.

'panose-1' (Дескриптор) Значение: [<integer>]{10}
Начальное значение: 0 0 0 0 0 0 0 0 0 0
Ассоциированные устройства: устройства звукового воспроизведения

Это дескриптор числа Panose-1. Он состоит из десяти разделенных пробелом десятичных целых чисел. В качестве значений данного дескриптора не допускается использовать списки, элементы которых разделены запятыми, т.к. система Panose-1 может проинтерпретировать его как диапазон значений, предназначенный для сопоставления. Начальным значением является совокупность нулей, каждый из которых означает возможность появления "любой" цифры на месте, отведенном для нее в PANOSE. Если используется это значение, то с числом Panose будет сопоставим любой шрифт. Для латинских шрифтов настоятельно рекомендуется использовать дескриптор Panose-1. Дополнительную информацию можно получить в Приложении В.

'stemv' (Дескриптор)

Значение: <number>
Начальное значение: не определено
Ассоциированные устройства: устройства визуального форматирования

Это дескриптор ширины вертикального штамба шрифта. Если его значение не определено, то он не используется при осуществлении сопоставления. В противном случае наряду с ним должен использоваться дескриптор 'units-per-em'.

'stemh' (Дескриптор)

Значение: <number>
Начальное значение: не определено
Ассоциированные устройства: устройства визуального форматирования

Это дескриптор ширины горизонтального штамба шрифта. Если его значение не определено, то он не используется при осуществлении сопоставления. В противном случае наряду с ним должен использоваться дескриптор 'units-per-em'.

'slope' (Дескриптор)

Значение: <number>
Начальное значение: 0
Ассоциированные устройства: устройства визуального форматирования

Это дескриптор угла наклона вертикального штриха шрифта.

'cap-height' (Дескриптор)

Значение: <number>
Начальное значение: не определено
Ассоциированные устройства: устройства визуального форматирования

Это дескриптор высоты глифов заглавных букв шрифта. Если его значение не определено, то он не используется при осуществлении сопоставления. В противном случае наряду с ним должен использоваться дескриптор 'units-per-em'.

'x-height' (Дескриптор)

Значение: <number>
Начальное значение: не определено
Ассоциированные устройства: устройства визуального форматирования

Это дескриптор высоты глифов строчных букв шрифта. Если его значение не определено, то он не используется при осуществлении сопоставления. В противном случае наряду с ним должен использоваться дескриптор 'units-per-em'. Дескриптор 'x-height' рекомендуется использовать вместе со свойством 'font-size-adjust', т.к. при вычислении значения z для потенциально подходящих шрифтов требуется знание их размера и высоты их строчных букв.

'ascent' (Дескриптор)

Значение: <number>
Начальное значение: неопределено
Ассоциированные устройства: устройства визуального форматирования

Это дескриптор максимальной высоты не акцентированных букв шрифта. Если его значение не определено, то он не используется при осуществлении сопоставления. В противном случае наряду с ним должен использоваться дескриптор 'units-per-em'.

'descent' (Дескриптор)

Значение: <number>
Начальное значение: не определено
Ассоциированные устройства: устройства визуального форматирования

Это дескриптор максимальной глубины посадки не акцентированных букв шрифта. Если его значение не определено, то он не используется при осуществлении сопоставления. В противном случае наряду с ним должен использоваться дескриптор 'units-per-em'.

Дескрипторы, используемые для синтеза: 'widths', 'bbox' и 'definition-src'

При синтезе шрифта предполагается, что, как минимум, ширина его глифов будет в точности сопоставлена ширине глифов заданного шрифта. Поэтому в процессе синтеза должны быть доступны метрические данные. Эта информация также необходима и при динамическом отображении для того, чтобы избежать повторного вывода содержимого после загрузки запрошенного шрифта. Использование нижеописанных дескрипторов в определениях, осуществляемых в рамках CSS2, не обязательно, хотя может оказаться полезным, если разработчику необходимо осуществить синтез (или динамическое отображение, не требующее повторного вывода). Запрошенный шрифт станет доступным только тогда, когда он заменит шрифт, который подставлялся вместо него. Все представленные здесь дескрипторы могут использоваться для улучшения и повышения быстродействия процессов аппроксимации требуемых шрифтов.

Среди этих дескрипторов наиболее важными являются 'widths' и 'bbox', которые позволяют избежать повторного вывода текста после активизации запрошенного шрифта. Помимо этого, для улучшения внешнего вида синтезируемого шрифта могут быть использованы дескрипторы, применяемые при сопоставлении.

'widths' (Дескриптор)

Значения: [<urange> ]? [<number> ]+ [,[<urange> ]? <number> ]+]
Начальное значение: не определено
Ассоциированные устройства: устройства визуального форматирования

Это дескриптор ширины глифов. В качестве его значения выступает список разделенных запятыми параметров <urange>, после каждого из которых следует одно или несколько значений ширины глифов. Если используется этот дескриптор, то наряду с ним должен использоваться дескриптор 'units-per-em'.

Если параметр <urange> пропущен, то предполагается, что в качестве его значения используется диапазон U+0-7FFFFFFF, который охватывает все символы и их глифы. Если задано недостаточное количество значений ширины глифов, то последнее значение в этом списке дублируется, чтобы охватить все их множество. Если задано слишком много значений, то лишние игнорируются.

Например:

значения ширины: U+4E00-4E1F 1736 1874 1692
значения ширины: 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. Т.к. задано недостаточное количество значений, то последнее из них повторяется столько раз, сколько необходимо, чтобы охватить оставшуюся часть указанного диапазона. Во втором примере для диапазона из 256 глифов устанавливается одно значение ширины, равное 1490, а затем для каждого из следующих 16 глифов значения ширины задаются явно.

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

'bbox' (Дескриптор)

Значение: <number>, <number>, <number>, <number>
Начальное значение: не определено
Ассоциированные устройства: устройства визуального форматирования

Это дескриптор максимального ограничивающего блока шрифта. Принимаемые им значения состоят из четырех разделенных запятыми чисел, которые в порядке своего следования определяют нижнюю левую координату x, нижнюю левую координату y, верхнюю правую координату x и верхнюю правую координату y ограничивающего блока всего шрифта.

'definition-src' (Дескриптор)

Значение: <uri>
Начальное значение: не определено
Ассоциированные устройства: устройства визуального форматирования

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

Дескрипторы, используемые для выравнивания: 'baseline', 'centerline', 'mathline' и 'topline'

Эти дескрипторы не являются обязательными и используются для выравнивания различных шрифтов относительно друг друга.

'baseline' (Дескиптор)

Значение: <number>
Начальное значение: 0
Ассоциированные устройства: устройства визуального форматирования

Это дескриптор нижней базовой линии шрифта. Если ему присваивается ненулевое значение, отличное от используемого по умолчанию, то наряду с ним должен использоваться дескриптор 'units-per-em'.

'centerline' (Дескриптор)

Значение: <number>
Начальное значение: не определено
Ассоциированные устройства: устройства визуального форматирования

Это дескриптор центральной базовой линии шрифта. Если его значение не определено, то в качестве него пользовательский агент может использовать различные эвристики, такие, например, как срединная точка между уровнями верхних и нижних выносных знаков. Если этот дескриптор используется, то наряду с ним должен использоваться дескриптор 'units-per-em'.

'mathline' (Дескриптор)

Значение: <number>
Начальное значение: не определено
Ассоциированные устройства: устройства визуального форматирования

Это дескриптор математической базовой линии шрифта. Если эго значение не определено, то в качестве него пользовательский агент может использовать уровень центральной базовой линии. Если этот дескриптор используется , то наряду с ним должен использоваться дескриптор 'units-per-em'.

'topline' (Дескриптор)

Значение: <number>
Начальное значение: не определено
Ассоциированные устройства: устройства визуального форматирования

Это дескриптор верхней базовой линии шрифта. Если его значение не определено, то в качестве него пользовательский агент может использовать приблизительное значение, такое, например, как высота уровня верхних выносных знаков. Если этот дескриптор используется, то наряду с ним должен использоваться дескриптор 'units-per-em'.

Примеры

Рассмотрим следующий список шрифтов:

Swiss 721 light light & light italic
Swiss 721 roman, bold, italic, bold italic
Swiss 721 medium medium & medium italic
Swiss 721 heavy heavy & heavy italic
Swiss 721 black black, black italic, & black #2
Swiss 721 Condensed roman, bold, italic, bold italic
Swiss 721 Expanded roman, bold, italic, bold italic

Чтобы они стали доступными для загрузки, можно использовать следующие описания шрифтов:

@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; /* отметьте очень интересный факт, что для курсива */
/* насыщенность, равная 900, не существует */
}
@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;