Курс построен по спецификации, которая определяет язык каскадных таблиц стилей CSS2.
Данная спецификация поддерживает позиционирование содержимого, загружаемые шрифты, отображение таблиц, возможности интернационализации, автоматические счётчики и нумерацию и некоторые свойства, относящиеся к пользовательскому интерфейсу.
Дается общая информация о спецификации, статусе документа и его структуре.Даются начальные сведения о CSS, описываются модели процесса и адресации, а также принципы дизайна.Описываются базовые понятия формальной спецификации CSS2.В этом разделе описывается грамматика и правила разбора, общие для любой версии CSS. Описываются селекторы, их синтаксис, а также псевдоэлементы и псевдоклассы.Описываются механизмы присвоения значений элементам, наследования значения потомками, импорт стилевых правил и порядок каскадирования.Даются спецификации таблиц стилей, зависимых от типа носителя и описания этих типов.Описывается модель бокса, свойства полей бокса, заполнения бокса и его рамок.Описывается модель визуального форматирования: то как пользовательские агенты обрабатывают дерево документа для визуального носителя.Описываются детали модели визуального форматирования.Описываются визуальные эффекты, механизмы переполнения и сжатия.Описываются механизмы генерации содержимого.Описываются механизмы форматирования страничной модели CSS.Дается информация о спецификациях цвета и фона, их синтаксис и свойства.Описываются механизмы спецификации и выбора шрифта, общие (родовые) семейства шрифтов, их характеристики и алгоритмы совпадения.Описываются механизмы представления символов, пробелов, слов и параграфов. Описывается табличная модель CSS и ее визуальное форматирование.Описываются виды курсоров, способы установки предпочтительных цветов и шрифтов пользователя.Описываются спецификации звукового представление документа.Автор:
Название: Спецификация CSS2
Лекция 3. Соответствие: Требования и Рекомендации
Лекция 4. Синтаксис CSS2 и базовые типы данных
Лекция 6. Установка значений свойств. Каскадирование и Наследование
Лекция 9. Модель визуального форматирования
Лекция 10. Модель визуального форматирования. Детали
Лекция 12. Генерируемое содержимое, автоматическая нумерация и списки
Лекция 13. Страничные носители
Лекция 18. Интерфейс пользователя
Лекция 19. Звуковые таблицы стилей
Дополнение. Приложение A. Образец таблицы стиля для HTML 4.0
Дополнение. Приложение B. Изменения по сравнению с CSS1
Дополнение. Приложение C. Замечания по реализации и выполнению для шрифтов
Дополнение. Приложение D. Грамматика CSS2
Лекция 1. О спецификации CSS2
Эта спецификация определяет Каскадные таблицы Стилей, уровень 2 (CSS2). CSS2 - это язык таблиц стилей, позволяющий авторам и пользователям подключать стили (например, шрифты, пробелы и звуковые сигналы) в структурированные документы (например, документы HTML и приложения XML). CSS2 упрощает создание и обслуживание Web-сайта путём разделения структуры и стиля представления документов.
CSS2 построен на основе CSS1, и, с очень небольшими исключениями, все таблицы стилей CSS1 остаются действующими в CSS2. CSS2 поддерживает таблицы для конкретных носителей, так что авторы могут создавать представление своих документов для визуальных браузеров, звуковых устройств, принтеров, брайль-устройств, ручных портативных устройств и т.д. Данная спецификация поддерживает также позиционирование содержимого, загружаемые шрифты, отображение таблиц, возможности интернационализации, автоматические счётчики и нумерацию и некоторые свойства, относящиеся к пользовательскому интерфейсу.
Этот документ был просмотрен Членами W3C и другими заинтересованными сторонами и одобрен Директором как Рекомендации W3C. Это неизменяемый документ, он может использоваться как справочный материал или цитироваться в других документах. Задачей W3C является привлечение внимания к Рекомендациям и этой спецификации и её широкое распространение. Это расширит функциональные возможности Web.
Список текущих Рекомендаций W3C и другую техническую документацию можно найти на: http://www.w3.org/TR.
Публичная дискуссия о возможностях CSS проходит на: www-style@w3.org.
Спецификация CSS2 доступна в следующем формате:
HTML: http://www.w3.org/TR/1998/REC-CSS2-19980512 и в других форматах на W3C.
В случае разночтений между различными формами спецификации, http://www.w3.org/TR/1998/REC-CSS2-19980512 имеет приоритет.
Список ошибок и опечаток, найденных в этой спецификации (в английской версии), находится в http://www.w3.org/Style/css2-updates/REC-CSS2-19980512-errata.html
Об ошибках, замеченных Вами в этом документе, сообщайте, пожалуйста, по адресам: css2-editors@w3.org и a_pyramidin@yahoo.com (переводчик русской версии).
Внимание!
Официальная нормативная версия этой спецификации возможна только на английском языке и находится по адресу: http://www.w3.org/TR/1998/REC-CSS2-19980512.
Данный перевод НЕ является официальным документом W3C.
Все Авторские Права Принадлежат W3C.
Данный документ может содержать ошибки перевода и опечатки.
Данная спецификация написана в расчёте на читателей двух типов: CSS-авторов и CSS-разработчиков. Мы надеемся, что эта спецификация снабдит авторов средствами, необходимыми для создания эффективных, привлекательных и доступных документов без излишнего углубления в детали реализации CSS. Разработчики к тому же смогут найти всё необходимое для создания соответствующих пользовательских агентов (ПА).
Спецификация начинается общим представлением CSS и постепенно всё более углубляется в технические подробности и специфику. Для быстрого доступа к информации служат общие и специализированные оглавления в начале каждого раздела и индексы - в электронном и печатном виде.
Спецификация создана в расчёте на два типа представления: электронное и печатное. Хотя эти два типа, без сомнения, похожи, читатели могут заметить и некоторые отличия. Например, ссылки не будут работать в печатной версии (естественно), а номера страниц будут отсутствовать в электронной версии. В случае возникновения противоречий, электронная версия должна считаться определяющей.
Эта спецификация содержит следующие разделы:
Раздел 2: Введение в CSS2
Введение содержит краткий учебник по CSS2 и обсуждение принципов дизайна вне CSS2.
Раздел 3 - 20: Справочник-учебник CSS2
Основу составляет справочник языка CSS2. Этот справочник определяет, что может входить в таблицы стилей CSS2 (синтаксис, свойства, значения свойств) и как ПА обязаны интерпретировать эти таблицы стилей, чтобы претендовать на соответствие.
Приложения:
Содержат образцы таблиц стилей для HTML 4.0, изменения относительно CSS1, замечания по реализации и выполнению, грамматике CSS2, список нормативных и информативных ссылок и три индекса: Свойства, Дескрипторы и Общий индекс.
[x]. В CSS имена свойств, дескрипторов и псевдоклассов ограничиваются одиночными кавычками.
[x]. Значения в CSS ограничиваются одиночными кавычками.
[x]. Элементы языка документа записываются буквами в верхнем регистре.
[x]. Имена атрибутов языка документа записываются в нижнем регистре и ограничиваются двойными кавычками.
Каждое определение свойства CSS начинается общей ключевой информацией:
'property-name'
Значение: действительные значения & синтаксис
Начальное: начальное значение
Применяется: к соответствующим элементам
Наследуется: если свойство наследуется
Процентное: интерпретация процентных значений
Носитель: к каким группам носителей применяется свойство
Определяет набор действительных значений свойства. Типы значений могут обозначаться по-разному:
1ключевые слова (например, auto, disc и т.д.);
2базовые типы данных, вводимые между символами "<" и ">" (например, <length>, <percentage> и т.д.). В электронной версии документа каждый объект базового типа данных связан со своим определением;
3типы, имеющие те же диапазоны значений, что и свойство, имеющее то же имя (например, <'border-width'>, <'background-attachment'> и т.д.). В данном случае имя типа является именем свойства (заключённым в кавычки) между символами "<" и ">" (например, <'border-width'>). В электронной версии документа каждый объект такого типа не-терминала ссылается на соответствующее определение свойства;
4не-терминалы, не использующие имя свойства. В данном случае имя не-терминала выводится между символами "<" и ">", например, <border-width>. Заметьте разницу между <border-width> и <'border-width'>; последнее определено в терминах предыдущего. Определение не-терминала размещается поблизости от его первого вхождения в данной спецификации. В электронной версии документа каждый объект этого типа ссылается на соответствующее определение значения.
Другие слова в этих определениях являются ключевыми словами, которые обязаны появляться буквально, без кавычек (например, red). Слэш (/) и запятая (,) также обязаны появляться буквально.
Значения должны быть организованы так:
[x]. Несколько соседних слов означают, что все они должны появляться в указанном порядке.
[x]. Вертикальная линия (|) разделяет две или более альтернативы: только одна из них должна быть записана.
[x]. Двойная вертикальная черта (||) разделяет две или более опции: одна или более из них должны быть записаны в любом порядке.
[x]. Скобки ([ ]) служат для группирования.
Соседство является более строгим, чем двойная вертикальная черта, а двойная вертикальная черта - строже, чем одинарная. Таким образом, следующие строки эквивалентны:
a b | c || d e
[ a b ] | [ c || [ d e ]]
За каждым типом, ключевым словом или группой в скобках может следовать один из модификаторов:
[x]. Звёздочка (*) - означает, что предыдущий тип, слово или группа появляется ноль или более раз.
[x]. Плюс (+) - означает, что предыдущий тип, слово или группа появляется один или более раз.
[x]. Знак вопроса (?) - означает, что предыдущий тип, слово или группа являются необязательными.
[x]. Пара чисел в фигурных скобках ({A,B}) - означает, что предыдущий тип, слово или группа появляется не менее А и не более В раз.
Следующий пример иллюстрирует различные значения типов:
Value\Значение: N | NW | NE
Value: [ <length> | thick | thin ]{1,4}
Value: [<family-name> , ]* <family-name>
Value: <uri>? <color> [ / <color> ]?
Value: <uri> || <color>
Специфицирует начальное значение свойства. Если свойство наследуется, это значение, данное корневому элементу дерева документа. См. в разделе Каскад информацию о взаимодействии между значениями - начальными, унаследованными и специфицированными в таблице стилей.
Перечисляет элементы, к которым применяется данное свойство. Предполагается, что все элементы имеют все свойства, но некоторые свойства не имеют действия на представление элементов определённых типов. Например, 'white-space' действует только на элементы уровня блока (block-level elements).
Обозначает, может ли свойство наследоваться от элемента-предка. См. в разделе Каскад информацию о взаимодействии между значениями - начальными, унаследованными и специфицированными в таблице стилей.
Указывает, как должны интерпретироваться процентные значения, если они появляются в значении свойства. Если появляется "N/A", это значит, что свойство не принимает процентных значений.
Обозначает группы носителей, к которым свойство применяется. Условия соответствия определяют, что ПА обязаны поддерживать это свойство, если они поддерживают представление в типах носителя, включённых в эти группы носителей.
Некоторые свойства являются сокращёнными свойствами, что означает, что они позволяют авторам специфицировать значения нескольких свойств в одном свойстве.
Например, свойство 'font' является сокращением для одновременной установки 'font-style', 'font-variant', 'font-weight', 'font-size', 'line-height' и 'font-family'.
Если в сокращённом свойстве значения опущены (отсутствуют), каждое "отсутствующее" свойство устанавливается в своё начальное значение (см. раздел Каскад).
Несколько правил стиля в этом примере:
H1 {
font-weight: bold;
font-size: 12pt;
line-height: 14pt;
font-family: Helvetica;
font-variant: normal;
font-style: normal;
font-stretch: normal;
font-size-adjust: none
}
можно записать с помощью одного сокращённого свойства:
H1 { font: bold 12pt/14pt Helvetica }
В этом примере 'font-variant', 'font-stretch', 'font-size-adjust' и 'font-style' получают свои начальные значения.
Все примеры, иллюстрирующие неправильное использование, явно помечены - "НЕПРАВИЛЬНОЕ ИСПОЛЬЗОВАНИЕ".
Все примеры HTML соответствуют Строгому Определению Типа Документа HTML 4.0/Strict DTD, (определённом в [HTML40]), если иное не указано в объявлении типа документа.
Все примечания являются исключительно информативными.
Примеры и примечания промаркированы в коде HTML, чтобы ПА данной и CSS1 спецификаций представляли их особым образом.
Большинство изображений в электронной версии данной спецификации сопровождаются "полными описаниями" того, что изображено. Ссылка на полное описание обозначена "[D]" внизу под изображением.
Изображения и полные описания являются исключительно информативными.
Данная спецификация является продуктом работы W3C Working Group над Cascading Style Sheets (Каскадными Таблицами Стилей) и Formatting Properties (Свойствами Форматирования).
Помимо редакторов данной спецификации, членами Working Group являются:
Brad Chase (Bitstream), Chris Wilson (Microsoft), Daniel Glazman (Electricite de France), Dave Raggett (W3C/HP), Ed Tecot (Microsoft), Jared Sorensen (Novell), Lauren Wood (SoftQuad), Laurie Anna Kaplan (Microsoft), Mike Wexler (Adobe), Murray Maloney (Grif), Powell Smith (IBM), Robert Stevahn (HP), Steve Byrne (JavaSoft), Steven Pemberton (CWI), Thom Phillabaum (Netscape), Douglas Rand (Silicon Graphics), Robert Pernett (Lotus), Dwayne Dicks (SoftQuad) и Sho Kuwamoto (Macromedia).
Мы благодарим их всех.
Свой вклад внесли приглашённые эксперты Working Group: George Kersher, Glenn Rippel (Bitstream), Jeff Veen (HotWired), Markku T. Hakkinen (The Productivity Works), Martin Durst (W3C, до этого - Universitat Zurich), Roy Platon (RAL), Todd Fahrner (Verso), Tim Boland (NIST), Eric Meyer (Case Western Reserve University) и Vincent Quint (W3C).
Раздел Web Fonts разрабатывали Brad Chase (Bitstream), David Meltzer (Microsoft Typography) и Steve Zilles (Adobe).
Следующие сотрудники в разной степени участвовали в разработке разделов, относящихся к шрифтам: Alex Beamon (Apple), Ashok Saxena (Adobe), Ben Bauermeister (HP), Dave Raggett (W3C/HP), David Opstad (Apple), David Goldsmith (Apple), Ed Tecot (Microsoft), Erik van Blokland (LettError), Francois Yergeau (Alis), Gavin Nicol (Inso), Herbert van Zijl (Elsevier), Liam Quin, Misha Wolf (Reuters), Paul Haeberli (SGI) и, наконец, Phil Karlton (Netscape).
Раздел Paged Media (Страничные Носители) в значительной части авторизовали Robert Stevahn (HP) и Stephen Waters (Microsoft).
Robert Stevahn (HP), Scott Furman (Netscape) и Scott Isaacs (Microsoft) являлись ключевыми сотрудниками при разработке CSS Positioning (Позиционирование CSS).
Mike Wexler (Adobe) был редактором рабочих проектов, описавшим многие из новых возможностей CSS2.
T.V. Raman (Adobe) сделал основные разработки, относящиеся к Aural Cascading Style Sheets (ACSS)/Звуковым Таблицам Стилей/ и к концепции звукового представления, на базе своей работы в AsTeR (Audio System For Technical Readings). Он участвовал в разработке начального проекта спецификации ACSS, которая содержится в данной спецификации. Значения звуковых свойств для примера таблицы стилей HTML 4.0 разработаны им же; в настоящее время он использует всё это в каждодневной работе над своим audio desktop, в соединении с Emacspeak и браузером Emacs W3 (авторизованными William'ом Perry, разработавшим также звуковые расширения, ожидаемые W3).
Todd Fahrner (Verso) исследовал современные и предшествующие браузеры для разработки образцов таблиц стилей в Приложении.
Благодарим Jan Karrman, автора html2ps, за большую помощь, оказанную при создании PostScript версии спецификации.
Преодолевая электронные и физические проблемы, следующие люди сотрудничали в разработке CSS2:
Alan Borning, Robert Cailliau, Liz Castro, James Clark, Dan Connolly, Donna Converse, Daniel Dardailler, Al Gilman, Daniel Greene, Scott Isaacs, Geir Ivarsoy, Vincent Mallet, Kim Marriott, Brian Michalowski, Lou Montulli, Henrik Frystyk Nielsen, Jacob Nielsen, Eva von Pepel, William Perry, David Siegel, Peter Stuckey и Jason White.
Дискуссия на www-style@w3.org обсуждала многие ключевые вопросы CSS. Особо мы хотели бы поблагодарить участников:
Bjorn Backlund, Todd Fahrner, Lars Marius Garshol, Sue Jordan, Ian Hickson, Susan Lesch, Andrew Marshall, MegaZone, Eric Meyer, Russell O'Connor, David Perrell, Liam Quinn, Jon Seymour, Neil St. Laurent, Taylor, Brian Wilson и Chris Wilson.
Особая благодарность Web Accessibility Initiative Protocols и Formats Technical Review Working Group (WAI PF) за помощь в повышении доступности CSS2.
Благодарим Philippe Le Hegaret, чей проверщик CSS помогал выверить корректность примеров и правописания.
Особая благодарность Arnaud Le Hors, чья инженерная работа сделала этот документ рабочим.
Adam Costello улучшил эту спецификацию, выполнив детальную ревизию.
Наконец, благодарим Tim Berners-Lee, без которого всё это вообще было бы невозможно.
Copyright c 1997 World Wide Web Consortium, (Massachusetts Institute of Technology, Institut National de Recherche en Informatique et en Automatique, Keio University). Все Права Зарезервированы.
Документы на сайте W3C предоставляются для копирования на основе следующей лицензии.
Получая, используя и/или копируя этот документ или документ W3C, на который в данном документе имеется ссылка, Вы согласны с тем, что Вы прочитали, поняли и согласны со следующими положениями и условиями:
Разрешение на использование, копирование и распространение содержания этого документа или документа W3C, на который в данном документе имеется ссылка, на любых носителях для любых целей и без оплаты или арендной платы даётся с условием, что Вы включите нижеследующую информацию во ВСЕ копии документа или его части, которые Вы используете:
1Ссылка URI на оригинальный документ W3C.
2Уведомление о предшествующих авторских правах оригинального автора, если они отсутствуют, в форме: "Copyright c World Wide Web Consortium, (Massachusetts Institute of Technology, Institut National de Recherche en Informatique et en Automatique, Keio University). Все Права Зарезервированы."
3Если они указаны, СТАТУС документа W3C.
Если место позволяет, необходимо включать полный текст этого УВЕДОМЛЕНИЯ.
Дополнительно должны быть приписаны заверения для владельцев авторских прав на любое программное обеспечение, документы или другие объекты или продукты, которые Вы создали в соответствии с выполнением содержимого данного документа или любой его части.
Вы не имеете права, в соответствии с данной лицензией, создавать модификации или выдержки.
ЭТОТ ДОКУМЕНТ ДАЁТСЯ "AS IS\КАК ЕСТЬ" И ВЛАДЕЛЬЦЫ АВТОРСКИХ ПРАВ НЕ ДАЮТ НИКАКИХ УКАЗАНИЙ ИЛИ ГАРАНТИЙ, ЯВНЫХ ИЛИ КОСВЕННЫХ, ВКЛЮЧАЯ, НО НЕ ОГРАНИЧИВАЯ, ГАРАНТИИ РЕАЛИЗУЕМОСТИ, ПРИГОДНОСТИ ДЛЯ КОНКРЕТНЫХ ЦЕЛЕЙ, НЕНАРУШЕНИЕ ЗАКОНА ИЛИ ИМЕНОВАНИЕ, - ЧТО СОДЕРЖИМОЕ ДАННОГО ДОКУМЕНТА ПОДХОДИТ ДЛЯ ЛЮБЫХ ЦЕЛЕЙ, НИ ЧТО ВЫПОЛНЕНИЕ ТАКОГО СОДЕРЖИМОГО НЕ ВЫЗОВЕТ НАРУШЕНИЯ ПАТЕНТОВ КАКОЙ-ЛИБО ТРЕТЬЕЙ СТОРОНЫ, АВТОРСКИХ ПРАВ, ТОРГОВЫХ МАРОК И ДРУГИХ ПРАВ.
ВЛАДЕЛЬЦЫ АВТОРСКИХ ПРАВ НЕ НЕСУТ ОТВЕТСТВЕННОСТИ ЗА ЛЮБОЙ ПРЯМОЙ, КОСВЕННЫЙ, СПЕЦИАЛЬНЫЙ ИЛИ ВОЗМОЖНЫЙ ВРЕД, НАНЕСЁННЫЙ ИЗ-ЗА КАКОГО-ЛИБО ИСПОЛЬЗОВАНИЯ ДАННОГО ДОКУМЕНТА ИЛИ ВЫПОЛНЕНИЯ ИЛИ РЕАЛИЗАЦИИ ЕГО СОДЕРЖИМОГО.
Имена и торговые марки владельцев авторских прав НЕ могут использоваться для публичных целей и рекламы данного документа или его содержимого без специального письменного разрешения. Наименование авторских прав в данном документе всегда остаётся за их владельцами.
Лекция 2. CSS2. Введение
В этом пособии мы покажем, как можно быстро создать простые таблицы стилей.
Для использования этого пособия необходимо немного знать HTML (см. [HTML40]) и некоторые базовые термины настольных публикаций.
Вот небольшой документ HTML:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN">
<HTML>
<HEAD>
<TITLE>Bach's home page</TITLE>
</HEAD>
<BODY>
<H1>Bach's home page</H1>
<P>Johann Sebastian Bach was a prolific composer.
</BODY>
</HTML>
Чтобы установить голубой цвет текста элемента H1, можно написать такое правило CSS:
H1 { color: blue }
Правило CSS состоит из двух главных частей: селектора ('H1') и объявления ('color: blue'). Объявление имеет две части: свойство ('color') и значение ('blue'). Поскольку в предыдущем примере делается попытка использовать только одно из свойств, необходимое для отображения документа HTML, он может быть квалифицирован как таблица стилей. В комбинации с другими таблицами стилей (возможность комбинировать таблицы стилей является одним из фундаментальных свойств CSS) оно (свойство) определит конечный вид документа.
Спецификация HTML 4.0 определяет, как правила таблиц стилей могут быть специфицированы для документов HTML: или внутри документа HTML, или в таблицах стилей. Чтобы поместить в документ таблицу стилей, используйте элемент STYLE:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN">
<HTML>
<HEAD>
<TITLE>Bach's home page</TITLE>
<STYLE type="text/css">
H1 { color: blue }
</STYLE>
</HEAD>
<BODY>
<H1>Bach's home page</H1>
<P>Johann Sebastian Bach was a prolific composer.
</BODY>
</HTML>
Для максимальной гибкости мы рекомендуем, чтобы авторы специфицировали внешние таблицы стилей; они могут быть изменены без модификации документа-источника HTML, а также могут раздельно использоваться несколькими документами. Чтобы сослаться на внешнюю таблицу стилей, Вы можете использовать элемент LINK:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN">
<HTML>
<HEAD>
<TITLE>Bach's home page</TITLE>
<LINK rel="stylesheet" href="bach.css" type="text/css">
</HEAD>
<BODY>
<H1>Bach's home page</H1>
<P>Johann Sebastian Bach was a prolific composer.
</BODY>
</HTML>
Элемент LINK специфицирует:
[x]. тип гиперссылки: "stylesheet";
[x]. размещение таблицы стилей: в атрибуте "href";
[x]. тип таблицы стилей, на которую ссылаются: "text/css".
Чтобы продемонстрировать тесную взаимосвязь между таблицей стилей и структурной разметкой, мы продолжим использовать элемент STYLE в этом пособии. Давайте добавим больше цветов:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN">
<HTML>
<HEAD>
<TITLE>Bach's home page</TITLE>
<STYLE type="text/css">
BODY { color: red }
H1 { color: blue }
</STYLE>
</HEAD>
<BODY>
<H1>Bach's home page</H1>
<P>Johann Sebastian Bach was a prolific composer.
</BODY>
</HTML>
Таблица стилей теперь содержит два правила: первое устанавливает цвет элемента BODY в 'red', а второе - цвет элемента H1 в 'blue'. Поскольку для элемента P не специфицирован цвет, он будет наследовать цвет от своего элемента-предка, а именно - от BODY. Элемент H1 является также дочерним элементом элемента BODY, но второе правило переопределяет наследуемое значение. В CSS часто возникают такие конфликты между различными значениями, и данная спецификация описывает, как их разрешить.
В CSS2 имеется более 100 различных свойств, в том числе - 'color'. Рассмотрим некоторые другие:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN">
<HTML>
<HEAD>
<TITLE>Bach's home page</TITLE>
<STYLE type="text/css">
BODY {
font-family: "Gill Sans", sans-serif;
font-size: 12pt;
margin: 3em;
}
</STYLE>
</HEAD>
<BODY>
<H1>Bach's home page</H1>
<P>Johann Sebastian Bach was a prolific composer.
</BODY>
</HTML>
Первое, что нужно отметить, это несколько объявлений, сгруппированных внутри блока, заключённого в фигурные скобки ({...}) и разделённых знаком точка с запятой, хотя последнее объявление может также заканчиваться точкой с запятой.
Первое объявление элемента BODY устанавливает семейство шрифтов "Gill Sans". Если этот шрифт недоступен, ПА (часто называемый "браузер") будет использовать семейство шрифтов 'sans-serif', которое является одним из пяти семейств шрифтов, известных всем ПА. Дочерние элементы элемента BODY унаследуют значение свойства 'font-family'.
Второе объявление устанавливает размер шрифта элемента BODY в 12 пунктов. Единица измерения "пункт" используется обычно в типографской печати для обозначения размеров шрифта и других размеров. Это пример абсолютных единиц измерения, которые не определяются относительно окружения.
Третье объявление использует относительные единицы измерения, которые определяются относительно своего окружения. Единица "em" относится к размеру шрифта элемента. В нашем случае поля вокруг элемента BODY шире размера шрифта в три раза.
CSS может использоваться с любым структурированным форматом документа, например, с приложениями eXtensible Markup Language [XML10]. На самом деле XML намного больше зависит от таблиц стилей, чем HTML, поскольку авторы могут создавать свои собственные элементы, которые не известны ПА и не могут ими выводиться.
Вот простой фрагмент XML:
<ARTICLE>
<HEADLINE>Fredrick the Great meets Bach</HEADLINE>
<AUTHOR>Johann Nikolaus Forkel</AUTHOR>
<PARA>
One evening, just as he was getting his
<INSTRUMENT>flute</INSTRUMENT> ready and his
musicians were assembled, an officer brought him a list of
the strangers who had arrived.
</PARA>
</ARTICLE>
Чтобы вывести данный фрагмент в виде документа, мы обязаны сначала объявить, какие элементы являются элементами инлайн-уровня (т.е. не вызывают разрывов строк) и какие - уровня блока (т.е. вызывают разрывы строк).
INSTRUMENT { display: inline }
ARTICLE, HEADLINE, AUTHOR, PARA { display: block }
Первое правило объявляет INSTRUMENT как инлайн, а второе правило с его списком разделённых запятыми селекторов объявляет все другие элементы как элементы уровня блока.
Одним из вариантов связи таблицы стилей с документом XML является использование инструкций процесса:
<?xml-stylesheet type="text/css" href="bach.css"?>
<ARTICLE>
<HEADLINE>Fredrick the Great meets Bach</HEADLINE>
<AUTHOR>Johann Nikolaus Forkel</AUTHOR>
<PARA>
One evening, just as he was getting his
<INSTRUMENT>flute</INSTRUMENT> ready and his
musicians were assembled, an officer brought him a list of
the strangers who had arrived.
</PARA>
</ARTICLE>
Визуальный ПА может отформатировать вышеприведённый пример так:
Обратите внимание, что слово "flute" остаётся внутри параграфа, поскольку это содержимое инлайн-элемента INSTRUMENT.
Тем не менее, текст ещё не выглядит так, как Вы могли бы ожидать. Например, шрифт заголовка должен быть крупнее, чем остальной текст, и Вам может понадобиться вывести имя автора курсивом:
INSTRUMENT { display: inline }
ARTICLE, HEADLINE, AUTHOR, PARA { display: block }
HEADLINE { font-size: 1.3em }
AUTHOR { font-style: italic }
ARTICLE, HEADLINE, AUTHOR, PARA { margin: 0.5em }
Визуальный ПА может сформатировать этот пример так:
Добавление других правил в таблицу стилей позволить Вам сделать представление документа ещё более интересным.
Этот раздел представляет одну из возможных моделей того, как работают ПА, поддерживающие CSS. Это лишь концептуальная модель; конкретные реализации могут варьироваться.
ПА в этой модели обрабатывает источник, выполняя следующие шаги:
1Разбирает документ-источник и создаёт дерево документа.
2Идентифицирует тип носителя.
3Запрашивает все таблицы стилей, ассоциированные с документом, которые специфицированы для целевого типа носителя.
4
Помечает каждый элемент дерева документа назначением одиночного значения каждому свойству, которое может быть применено к целевому типу носителя. Значения свойств устанавливаются в соответствии с механизмами, описанными в разделе каскадирование и наследование.
Частично расчёт значений зависит от алгоритма форматирования, соответствующего целевому типу носителя. Например, если целевой носитель - это экран, то ПА применяют модель визуального форматирования. Если целевой носитель - это страница для печати, то ПА применяют страничную модель. Если целевой носитель - это устройство звукового вывода (например, речевой синтезатор), то ПА применяют модель звукового представления.
5
На базе размеченного дерева документа генерирует структуру форматирования. Часто структура форматирования напоминает дерево документа, но может также и слегка отличаться, особенно если авторы используют псевдоэлементы и генерируемое содержимое. Во-первых, структура форматирования вообще не должна иметь "очертания дерева" - природа структуры зависит от реализации. Во-вторых, структура форматирования может содержать информации больше или меньше, чем дерево документа. Например, если элемент дерева документа имеет значение 'none' для свойства 'display', то этот элемент не будет ничего генерировать в структуре форматирования. Элемент list, с другой стороны, может генерировать больше информации в структуре форматирования: содержимое элемента list и стилевую информацию (например, изображение для маркёра).
Обратите внимание, что ПА CSS не изменяет дерево документа на этом этапе. И особенно, что содержимое, генерируемое в связи с таблицой стилей, не возвращается процессору языка документа (например, для повторного разбора).
6Переносит структуру форматирования на целевой носитель (например, печатает результат, отображает его на экране, представляет в виде речевого потока и т.д.).
Шаг 1 находится вне пределов действия данной спецификации (см., например, [DOM]).
Шаги 2-5 адресуются основным объёмом данной спецификации.
Шаг 6 находится вне пределов действия данной спецификации.
Для всех носителей термин канва описывает "пространство, где выводится сформатированная структура".
Селекторы и свойства CSS2 позволяют обращаться из таблиц стилей к следующим частям документа или ПАгента:
[x]. Элементам дерева документа и определённым их взаимоотношениям (см. раздел селекторы).
[x]. Атрибутам элементов дерева документа и значениям этих атрибутов (см. раздел селекторы атрибутов).
[x]. Некоторым частям содержимого элемента (см. псевдоэлементы :first-line и :first-letter.
[x]. Элементам дерева документа, находящимся в определённом состоянии (см. раздел псевдоклассы).
[x].
Некоторым аспектам
[x]. Некоторой системной информации (см. раздел интерфейс пользователя).
CSS2, а до них - CSS1, базируются на наборе принципов дизайна:
[x]. Совместимость вперёд и обратная. ПА CSS2 понимают таблицы стилей CSS1. ПА CSS1 могут читать таблицы стилей CSS2 и отбрасывать те части, которые они не понимают. Также ПА, не поддерживающие CSS, могут отображать документы со стилями. Конечно, стилистические приёмы, возможные в CSS, не будут выводиться, но всё содержимое будет представлено.
[x]. Дополнение структурированных документов. Таблицы стилей дополняют структурированные документы (например, приложения HTML и XML), предоставляя стилистическую информацию для размеченного текста. Должна иметься возможность легко изменять таблицы стилей без или с минимальным влиянием на разметку.
[x]. Независимость от изготовителя, платформы и устройства. Таблицы стилей делают возможным создание документов, не зависящих от изготовителя, платформы и устройства. Таблицы стилей сами по себе также не зависят от изготовителя, платформы и устройства, но CSS2 позволяют Вам назначить таблицу стилей группе устройств (например, принтеров).
[x]. Удобство обслуживания. Ссылаясь из документа на таблицы стилей, web-мастера могут упростить обслуживание сайта и добиться целостного вида и содержания всего сайта. Например, если изменяется цвет фона сайта организации, нужно будет изменить лишь один файл.
[x]. Простота. CSS2 сложнее, чем CSS1, но остаётся простым языком стилей, доступным для чтения и понимания человеком. Свойства CSS не зависят одно от другого, чтобы иметь в будущем возможности для расширения, и поэтому обычно имеется лишь один способ для достижения определённого эффекта.
[x]. Скорость работы сети. CSS предоставляют компактные способы представления содержимого. По сравнению с файлами изображений или аудиофайлами, которые часто используются авторами для получения определённых эффектов представления, таблицы стилей чаще всего уменьшают объёмы содержимого. Требуется также меньше сетевых соединений, что увеличивает пропускную способность сети.
[x]. Гибкость. CSS может применяться в содержимом разными способами. Ключевым является возможность каскадирования стилевой информации, специфицированной в таблице стилей по умолчанию(в ПА), пользовательских таблицах стилей, связанных таблицах стилей, шапке документа и атрибутах элементов, формирующих тело документа.
[x]. Богатство возможностей. Предоставление авторам большого набора эффектов отображения увеличивает разнообразие Web. Дизайнерам была необходима функциональность, которая уже использовалась в настольных приложениях и слайд-презентациях. Некоторые из требуемых эффектов конфликтуют с независимостью от конкретных устройств, но CSS2 явился дальнейшим шагом на пути удовлетворения запросов дизайнеров.
[x]. Связи с другими языками. Набор свойств CSS, описанный в этой спецификации, образует последовательную модель форматирования для визуального и звукового представления. Эта модель форматирования может быть доступна из языка CSS, но возможны также связи с другими языками. Например, программа JavaScript может динамически изменить значение свойства 'color' определённого элемента.
[x]. Доступность. Некоторые возможности CSS сделают Web более доступным для пользователей с физическими проблемами:
[x]. Свойства для управления выводом шрифта позволяют авторам исключить недоступность растрированных текстовых изображений.
[x]. Свойства позиционирования позволяют авторам исключить трюки с разметкой (например, невидимые изображения) для целей изменения вывода.
[x]. Семантика правил !important означает, что пользователи с особыми требованиями к представлению могут переопределять установки авторских таблиц стилей.
[x]. Новое значение 'inherit' для всех свойств улучшает каскадирование и даёт возможность более лёгкой и точной настройки стиля.
[x]. Улучшенная поддержка носителей, включая группы носителей и брайль-носители, рельефные и tty типы носителей, позволит пользователям и авторам создавать страницы для данных устройств.
[x]. Звуковые свойства дают возможность управлять речевым и аудиовыводом.
[x]. Селекторы атрибутов, функция 'attr()' function и свойство 'content' дают возможность доступа к альтернативному содержимому.
[x]. Счётчики и нумерация разделов/параграфов может улучшить навигацию по документам и сохранить пространство отступов (важно для брайль-устройств). Свойства 'word-spacing' и 'text-indent' исключают надобность в излишнем свободном пространстве в документе.
Примечание. За дополнительной информацией о разработке доступных документов с использованием CSS и HTML обратитесь, пожалуйста, на [WAI-PAGEAUTH].
Лекция 3. Соответствие: Требования и Рекомендации
В этом разделе мы начинаем формальную спецификацию CSS2 с соглашения между авторами, пользователями и исполнителями.
Ключевые слова "ОБЯЗАН", "НЕ ОБЯЗАН", "НЕОБХОДИМ", "БУДЕТ", "НЕ БУДЕТ", "ДОЛЖЕН", "НЕ ДОЛЖЕН", "МОЖЕТ", "РЕКОМЕНДУЕТСЯ" И "НЕОБЯЗАТЕЛЕН" в этом документе интерпретируются так, как описано в [RFC2119].
Однако, для удобства чтения эти слова не употребляются в этой спецификации со всеми буквами в верхнем регистре.
Время от времени авторы этой спецификации дают практические рекомендации для авторов и
Набор операторов, специфицирующих представление документа.
Таблицы стилей могут иметь три различных источника: автор, пользователь и
Действующие таблицы стилей
Статус таблицы стилей зависит от уровня CSS, используемого в таблице стилей. Все действующие таблицы стилей CSS1 являются действующими и в CSS2. Однако некоторые изменения по сравнению с CSS1 указывают, что некоторые таблицы стилей CSS1 будут иметь несколько другую семантику в CSS2.
Документ, на который ссылается одна или более таблиц стилей. Он кодирован в том же языке, в котором документ представлен как дерево элементов. Каждый
Язык кодировки документа-источника (например, HTML или XML).
(Термин SGML, см. [ISO8879].) Первичные синтаксические конструкции языка документа. Большинство правил таблиц стилей CSS используют имена
Ширина и высота, определённые самим элементом, а не его окружением. В CSS2 принято, что все замещаемые элементы - и только замещаемые элементы - появляются с внутренними размерами.
Значение, ассоциированное с элементом, состоящее из названия и ассоциированного значения.
Дерево элементов, кодированных в документе-источнике. Каждый
Автор
Тот, кто пишет документы и ассоциированные таблицы стилей.
Авторская утилита генерирует документы и ассоциированные таблицы стилей.
Пользователь
Тот, кто взаимодействует с пользовательским агентом (
Это какая-либо программа, интерпретирующая документ, написанный на определённом языке документов, и ассоциированную с ним таблицу стилей в соответствии с терминами данной спецификации.
Это пример документа-источника, кодированного в HTML:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN">
<HTML>
<TITLE>My home page</TITLE>
<BODY>
<H1>My home page</H1>
<P>Welcome to my home page! Let me tell you about my favorite
composers:
<UL>
<LI> Elvis Costello
<LI> Johannes Brahms
<LI> Georges Brassens
</UL>
</BODY>
</HTML>
Это дерево данного документа:
В соответствии с определением HTML, элементы HEAD будут вставлены во время разбора и станут частью дерева документа, даже если тэги HEAD отсутствовали в документе-источнике. Таким же образом, разборщик "знает", где заканчиваются элементы P и LI, даже если они не имеют тэгов </P> и </LI> в источнике.
Этот раздел определяет
В общем, следующие пункты обязательно должны учитываться
1Он обязан поддерживать один или более типов носителя CSS2.
2Для каждого документа-источника он обязан запросить все ассоциированные таблицы стилей, подходящие для поддерживаемых типов носителя. Если он не может запросить все ассоциированные таблицы стилей (к примеру, из-за ошибок в сети), он обязан вывести документ с использованием тех таблиц, которые он может запросить.
3Он обязан разобрать таблицы стилей в соответствии с данной спецификацией.
В частности, он обязан распознавать все at-правила, блоки, объявления и селекторы (см. грамматику CSS2).
Если
4В каждом элементе дерева документа
5Если
Не каждый
[x].
[x].
[x].
Невозможность для
Данная спецификация рекомендует, чтобы
В общем, данный документ не специфицирует для
Однако
Поскольку
Таблицы стилей CSS, находящиеся во внешнем файле, пересылаются по Internet как последовательность байтов, сопровождаемая информацией о кодировании (см. [HTML40] , гл. 5). Структура переноса, называемая
Лекция 4. Синтаксис CSS2 и базовые типы данных
В этом разделе описывается грамматика (и правила вперёд-совместимого разбора), общие для любой версии CSS (включая CSS2). Будущие версии CSS будут придерживаться этого ядра синтаксиса, хотя и могут ввести дополнительные синтаксические ограничения.
Эти описания являются нормативными. Они также дополняются нормативными грамматическими правилами в Приложении D.
Все уровни CSS - уровень 1, уровень 2 и любые будущие уровни - используют одно ядро синтаксиса. Это позволяет
На лексическом уровне таблицы стилей CSS состоят из последовательности лексем (грамматических единиц). Список лексем CSS2 приведён ниже. Определения используют общепринятые выражения в стиле Lex. Восьмеричные коды относятся к ISO 10646 ([ISO10646]). Как и в Lex, в случае нескольких одновременных совпадений, самое длинное совпадение определяет лексему.
| Лексема | Определение |
|---|---|
| IDENT | |
| ATKEYWORD | |
| STRING | |
| HASH | |
| NUMBER | |
| PERCENTAGE | |
| DIMENSION | |
| URI | |
| UNICODE-RANGE | |
| CDO | |
| CDC | |
| ; | |
| { | |
| } | |
| ( | |
| ) | |
| [ | |
| ] | |
| S | |
| COMMENT | |
| FUNCTION | |
| INCLUDES | |
| DASHMATCH | |
| DELIM | любой другой символ, не совпавший с вышеприведёнными правилами |
Вышеприведённые макросы в фигурных скобках ({}) определены так:
| Макрос | Определение |
|---|---|
| ident | |
| name | |
| nmstart | |
| nonascii | |
| unicode | |
| escape | |
| nmchar | |
| num | |
| string | |
| string1 | |
| string2 | |
| nl | |
| w |
Ниже дан синтаксис ядра CSS. В последующих разделах описывается, как этот синтаксис использовать. Приложение D описывает более ограниченный набор грамматических правил исключительно для уровня 2 языка CSS.
stylesheet : [ CDO | CDC | S | statement ]*;
statement : ruleset | at-rule;
at-rule : ATKEYWORD S* any* [ block | ';' S* ];
block : '{' S* [ any | block | ATKEYWORD S* | ';' ]* '}' S*;
ruleset : selector? '{' S* declaration? [ ';' S* declaration? ]* '}' S*;
selector : any+;
declaration : property ':' S* value;
property : IDENT S*;
value : [ any | block | ATKEYWORD S* ]+;
any : [ IDENT | NUMBER | PERCENTAGE | DIMENSION | STRING
| DELIM | URI | HASH | UNICODE-RANGE | INCLUDES
| FUNCTION | DASHMATCH | '(' any* ')' | '[' any* ']' ] S*;
Лексемы КОММЕНТАРИЕВ в грамматике отсутствуют (для сохранения читабельности), но некоторое количество этих лексем может появляться где-либо среди других лексем.
Лексема S в вышеприведённой грамматике стоит вместо пробела. Только символы "space" (Unicode code 32), "tab" (9), "line feed" (10), "carriage return" (13) и "form feed" (12) могут служить пробелами. Другие "пробелоподобные" символы, такие как "em-space" (8195) и "ideographic space" (12288), никогда не могут быть пробелами.
Ключевые слова имеют форму
red
это ключевое слово, а
"red"
- нет (это
width: "auto";
border: "none";
font-family: "serif";
background: "red";
Следующие правила всегда соблюдаются:
[x].
Все таблицы стилей CSS нечувствительны к регистру, за исключением тех частей, которые не контролируются CSS. Например,
[x].
В CSS2 идентификаторы (включая имена элементов, классы и ID в селекторах) могут содержать только символы [A-Za-z0-9] и символы ISO 10646 от 161 и выше и дефис (-); они не могут начинаться с дефиса или цифры. Они могут также содержать
Заметьте, что Unicode это покодовый эквивалент ISO 10646 (см. [UNICODE] и [ISO10646]).
[x].
В CSS2 символ обратного слэша (\) обозначает три типа символов - escape-последовательностей.
1В строке обратный слэш, после которого идёт
2Отменяет
3
Escape-последовательности с обратным слэшем позволяют авторам обращаться к символам, которые не могут быть напрямую помещены в документ. В таких случаях используется обратный слэш, после которого идут не более шести 16-ричных цифр (0..9A..F), что соответствует символам ISO 10646 ( [ISO10646] ) с этим числом. Если после 16-ричного числа идёт цифра или буква, то конец числа должен быть очищен. Есть два способа сделать это:
1пробел (или иной символ пробела): "\26 B" ("&B")
2предоставление точного 16-ричного числа из шести цифр: "\000026B" ("&B")
Фактически эти два метода можно комбинировать. Только один символ пробела игнорируется после 16-ричной
[x].
Таблица стилей любой версии CSS состоит из списка
В данной спецификации выражения "непосредственно перед" или "сразу после" означают отсутствие пробелов или комментариев.
В CSS2 ПА обязан игнорировать любое правило '@import' , которое появляется внутри
Предположим, например, что разборщик CSS2 обрабатывает такую таблицу стилей:
@import "subs.css";
H1 { color: blue }
@import "list.css";
Второе '@import', в соответствии с CSS2, недопустимо. Разборщик CSS2 игнорирует всё
@import "subs.css";
H1 { color: blue }
Здесь второе правило '@import' - неверное, поскольку появляется внутри
@import "subs.css";
@media print {
@import "print-main.css";
BODY { font-size: 10pt }
}
H1 {color: blue }
Это пример
{ causta: "}" + ({7} * '\'') }
Заметьте, что это неверное правило CSS2, образующее, тем не менее,
Набор правил (называемый также "правило") состоит из
Cелектор (см. также раздел Селекторы) состоит из чего-либо, предшествующего первой скобке (но не включая) ({). Cелектор всегда идёт вместе с {}-блоком. Если ПА не может разобрать
В CSS2 запятая (,) имеет специальное
Например, поскольку "&" это неверная лексема в селекторе CSS2, ПА CSS2 обязан игнорировать всю вторую строку и не устанавливать красный цвет в H3:
H1, H2 {color: green }
H3, H4 & H5 {color: red }
H6 {color: black }
Это более сложный пример. Первые две пары фигурных скобок находятся внутри строки
и не обозначают конец cелектора.
Это - верный оператор CSS2.
P[example="public class foo\
{\
private int x;\
\
foo(int x) {\
this.x = x;\
}\
\
}"] { color: red }
В зависимости от способа работы
Таким образом, следующие правила:
H1 { font-weight: bold }
H1 { font-size: 12pt }
H1 { line-height: 14pt }
H1 { font-family: Helvetica }
H1 { font-variant: normal }
H1 { font-style: normal }
эквивалентны:
H1 {
font-weight: bold;
font-size: 12pt;
line-height: 14pt;
font-family: Helvetica;
font-variant: normal;
font-style: normal
}
Cвойства это идентификаторы. Между ними могут находиться любые символы, кроме скобок (( )), квадратных скобок ([ ]) и фигурных скобок ({ }), которые обязаны всегда использоваться в паре, а точка с запятой вне
Синтаксис значений специфицируется отдельно для каждого
ПА обязан игнорировать
Предположим, что разборщик CSS2 обрабатывает такую таблицу стилей:
H1 { color: red; font-style: 12pt } /* Неверное значение: 12pt */
P { color: blue; font-vendor: any; /* Неверное свойство: font-vendor */
font-variant: small-caps }
EM EM { font-style: normal }
Второе
H1 { color: red; }
P { color: blue; font-variant: small-caps }
EM EM { font-style: normal }
CSS допускает также SGML-ограничители комментариев ("<!--" и "-->") в определённых местах, но это не
В некоторых случаях ПА обязан игнорировать часть неверной таблицы стилей. В этой спецификации игнорирует означает, что ПА разбирает неверную часть (чтобы определить её начало и конец), но действует так, как будто её нет.
Для гарантий того, что новые
[x].
Неизвестные
H1 { color: red; rotation: 70minutes }
ПА будет рассматривать это, как если бы в таблице было:
H1 { color: red }
[x].
Неверные значения. ПА обязан игнорировать
" IMG { float: left } /* корректно в CSS2 */
" IMG { float: left here } /* "here" это неверное значение для 'float' */
" IMG { background: "red" } /* ключевые слова CSS2 не могут вводиться в кавычках */
" IMG { border-width: 3 } /* для размеров должны быть указаны единицы измерения */
Разборщик CSS2 примет первое правило и проигнорирует остальные, как если бы таблица была такой:
IMG { float: left }
IMG { }
IMG { }
IMG { }
ПА, соответствующий будущим спецификациям CSS, может учитывать также одно или более из следующих правил.
[x].
Неверные at-ключевые слова. ПА обязаны игнорировать неверные ключевые слова at- вместе с тем, что следует после них до (;) включительно или до
" @three-dee {
" @background-lighting {
" azimuth: 30deg;
" elevation: 190deg;
" }
" H1 { color: red }
" }
H1 { color: blue }
Правило от- '@three-dee' не входит в CSS2. Следовательно, всё
H1 { color: blue }
Значения некоторых типов могут принимать целые (обозначенные <integer>) или реальные числа (обозначенные <number>). Реальные и целые числа специфицируются только в десятеричной нотации. <integer> состоит из одной или более цифр от "0" до "9". <number> может быть
Заметьте, что многие
Размеры имеют отношение к горизонтальным и вертикальным измерениям.
Формат значения размера (обозначаемого в этой спецификации <length>) - это необязательный символ знака ('+' или '-', с '+' по умолчанию), после которого сразу идёт
Некоторые
Есть два типа единиц измерения: относительные и абсолютные. Относительные размеры специфицируют
Относительные единицы измерения являются:
[x]. em: 'font-size' соответствующего шрифта;
[x].
ex:
[x]. px: пикселы, относительно устройства просмотра.
H1 { margin: 0.5em } /* em */
H1 { margin: 1ex } /* ex */
P { font-size: 12px } /* px */
Единицы измерения 'em' эквивалентны вычисленному значению
Единицы
Правило:
H1 { line-height: 1.2em }
означает, что высота строки элементов H1 будет на 20% больше,
чем размер шрифта элементов H1.
С другой стороны:
H1 { font-size: 1.2em }
означает, что размер шрифта элементов H1 будет на 20% больше,
чем размер шрифта, наследуемый из элементов H1.
Если они специфицированы для корня дерева документа (например, "HTML" в HTML),
Пикселы относительны к разрешению устройства просмотра, т.е. чаще всего - дисплея компьютера. Если плотность пикселов выводного устройства сильно отличается от плотности типичного компьютерного дисплея, ПА должен перемасштабировать пикселные значения. Рекомендуется, чтобы пиксел в качестве точки отсчёта был визуальным углом одного пиксела на устройстве с плотностью
При чтении с расстояния вытянутой руки 1px соответствует примерно 0.28 мм (1/90 дюйма). При печати на лазерном принтере, рассчитанном на чтение с несколько меньшего расстояния, чем вытянутая рука, (55 см, 21 дюймов), 1px составляет около 0.21 мм. На принтере с разрешением 300 точек на дюйм (dpi) это можно округлить до 3 точек (0.25 мм); на принтере с 600 dpi это можно округлить до 5 точек.
Два нижеследующих изображения иллюстрируют эффект при просмотре размера пиксела с расстояния и эффект разрешения устройства. На первом рисунке расстояние чтения 71 см (28 дюймов) даёт пиксел 0.28 мм, а с расстояния 3.5 м (12 футов) требуется пиксел 1.4 мм.
На втором рисунке область 1px на 1px закрывается одной точкой устройства с низким разрешением (экран компьютера), и та же самая область покрывается 16-ю точками на устройстве с высоким разрешением (как лазерный принтер 400 dpi).
Дочерние элементы не наследуют относительные значения, специфицированные для их родителя; они (обычно) наследуют вычисленные значения.
В следующих правилах вычисленное значение 'text-indent' элементов H1 будет 36pt,
а не 45pt, если H1 является дочерним относительно элемента BODY:
BODY {
font-size: 12pt;
text-indent: 3em; /* т.е. 36pt */
}
H1 { font-size: 15pt }
[x]. in: inches/дюймы -- 1 дюйм равен 2.54 сантиметра.
[x]. cm: сантиметры
[x]. mm: миллиметры
[x]. pt: points/пункты - пункт, используемый в CSS2, равен 1/72 дюйма.
[x]. pc: picas/пики -- 1 пика равна 12 пунктам.
H1 { margin: 0.5in } /* дюймы */
H2 { line-height: 3cm } /* сантиметры */
H3 { word-spacing: 4mm } /* миллиметры */
H4 { font-size: 12pt } /* пункты */
H4 { font-size: 1pc } /* пики */
В тех случаях, когда специфицированные размеры не могут поддерживаться, ПА обязаны давать
Формат процентного значения (обозначаемого в этой спецификации <percentage>) - это необязательный знак ('+' или '-', с '+' по умолчанию), сразу за которым следует
Процентные значения всегда относительны к другому значению, например, размеру. Каждое свойство, допускающее процентные значения, определяет также
Поскольку дочерние элементы (обычно) наследуют вычисленные значения своих родителей,
в следующем примере дочерние от P элементы унаследуют значение в 12pt для 'line-height',
а не процентное значение (120%):
P { font-size: 10pt }
P { line-height: 120% } /* 120% от 'font-size' */
URL (Uniform Resource Locator, см. [RFC1738] и [RFC1808] ), предоставляет адрес ресурса Web. Ожидается появление нового способа
Значения URI в этой спецификации обозначаются <uri>. Функциональное обозначение URI в значениях свойств - "url()", как здесь:
BODY { background: url("http://www.bg.com/pinkish.gif") }
Формат значения URI таков: 'url(' с последующим необязательным пробелом, с последующей необязательной одинарной кавычкой (') или двойной кавычкой ("), с последующим собственно URI, с последующей необязательной одинарной кавычкой (') или двойной кавычкой ("), с последующим необязательным пробелом с последующей ')'. Знаки кавычек должны быть одинаковыми (двойными или одинарными).
Пример без кавычек:
LI { list-style: url(http://www.redballs.com/redball.png) disc }
Скобки, запятые, пробельные символы, одинарные (') и двойные (") кавычки в URI обязаны вводиться с помощью escape-последовательностей с обратным слэшем: '\(', '\)', '\,'.
В зависимости от типа URI, может иметься возможность также записывать вышеуказанные символы как URI-
Для того, чтобы создать модульные таблицы стилей, не зависящие от абсолютного размещения ресурса, авторы могут использовать относительные URI. Относительные URI (как определено в [RFC1808] ) расширяются до полного URI с использованием базового URI. RFC 1808, раздел 3 определяет нормативный алгоритм этого процесса. В таблицах стилей CSS базовый URI это URI таблицы стилей, а не документа-источника.
Предположим, имеется такое правило:
BODY { background: url("yellow") }
размещённое в таблице стилей с URI:
http://www.myorg.org/style/basic.css
Фон элемента BODY в документе-источнике будет заполнен каким-нибудь изображением,
обозначенный ресурсом URI:
http://www.myorg.org/style/yellow
ПА могут по-разному обрабатывать URI, обозначающие несуществующий или необрабатываемый ресурс
Счётчики обозначаются
Чтобы обратиться к последовательности вложенных счётчиков с одним именем, обозначение будет: 'counters(<identifier>, <string>)' или 'counters(<identifier>, <string>, <list-style-type>)'. См. "Вложенные счётчики и область видимости" в главе о генерируемом содержимом.
В CSS2 к значениям счётчиков можно обратиться только из
Вот таблица стилей, нумерующая параграфы (P) для каждой главы (H1).
Параграфы нумеруются римскими цифрами с последующими точкой и пробелом:
P {counter-increment: par-num}
H1 {counter-reset: par-num}
P:before {content: counter(par-num, upper-roman) ". "}
Счётчики вне области видимости какого-либо 'counter-reset', считаются сброшенными в 0 в 'counter-reset' корневого элемента.
<color> это или предопределённое слово, или числовая спецификация RGB.
Список названий цветов: aqua, black, blue, fuchsia, gray, green, lime, maroon, navy, olive, purple, red, silver, teal, white и yellow. Эти 16 цветов определены в HTML 4.0 ([HTML40]). Пользователь может дополнительно специфицировать ключевые слова, соответствующие цветам, используемым определёнными объектами в среде пользователя. Дополнительную информацию см. в системных цветах.
BODY {color: black; background: white }
H1 { color: maroon }
H2 { color: olive }
Модель цветов RGB используется в числовых спецификациях цвета. Во всех данных примерах специфицируется один и тот же цвет:
EM { color: #f00 } /* #rgb */
EM { color: #ff0000 } /* #rrggbb */
EM { color: rgb(255,0,0) } /* диапазон целых чисел 0 - 255 */
EM { color: rgb(100%, 0%, 0%) } /* диапазон чисел с плавающей точкой 0.0% - 100.0% */
Формат значения RGB в 16-ричной записи - '#' за которым сразу идут три или шесть 16-ричных символов. Трёхсимвольная запись RGB (#rgb) конвертируется в шестисимвольную форму (#rrggbb) путём дублирования цифр, но не дополнением нулями. Например, #fb0 расширяется до #ffbb00. Это гарантирует, что белый (#ffffff) можно специфицировать сокращённой записью (#fff) и удалить зависимость от глубины цвета на дисплее.
Формат значения RGB в функциональной записи - 'rgb(' за которым идёт список разделённых запятыми трёх числовых значений (или трёх целых, или трёх процентных) с последующей ')'. Целое
Все цвета RGB специфицированы в цветовом пространстве sRGB (см. [SRGB] ). ПА могут различаться в том, насколько точно они представляют эти цвета, но использование sRGB предоставляет недвусмысленное и объективно измеряемое определение того, каким должен быть цвет, соответствующий международным стандартам (см. [COLORIMETRY] ).
Соответствующие ПА могут ограничивать свои возможности вывода цвета для выполнения коррекции гаммы цветов. sRGB специфицирует гамму дисплея в 2.2 от специфицированных условий просмотра. ПА должны уточнить цвет, заданный в CSS, так чтобы в сочетании с 'натуральной' гаммой дисплея выводного устройства воспроизводилась эффективная гамма дисплея в 2.2. См. дополнительные детали в разделе коррекция гаммы. Обратите внимание, что воздействие производится только на цвета, специфицированные в CSS; например, от изображений ожидается сопровождающая их собственная цветовая информация.
Значения вне гаммы устройства должны усекаться: значения red, green и blue обязаны измениться, чтобы войти в рамки диапазона, поддерживаемого устройством. Для типичного CRT-монитора, чья гамма устройства - та же самая, что и sRGB, следующие три правила эквивалентны:
EM { color: rgb(255,0,0) } /* диапазон целых 0 - 255 */
EM { color: rgb(300,0,0) } /* усекается до rgb(255,0,0) */
EM { color: rgb(255,-10,0) } /* усекается до rgb(255,0,0) */
EM { color: rgb(110%, 0%, 0%) } /* усекается до rgb(100%,0%,0%) */
Другие устройства, такие как принтеры, имеют гаммы, отличные от sRGB;
некоторые цвета вне диапазона 0..255 sRGB будут презентабельными
(в пределах гаммы устройства), в то время как другие цвета в пределах
диапазона 0..255 sRGB будут вне гаммы устройства и будут, таким образом, усечены.
Примечание. Хотя цвета могут добавить значительное количество информации в документы и сделать их более читабельными, необходимо учитывать, что определённые сочетания цветов могут вызвать проблемы у людей, страдающих нарушениями восприятия цвета. Если Вы используете фоновое изображение или устанавливаете цвет фона, подбирайте, пожалуйста, подходящий цвет переднего плана.
Угловые значения (обозначаемые в тексте <angle>) используются со звуковыми таблицами стилей.
Их формат - необязательный знак ('+' или '-', с '+' по умолчанию), сразу за которым следует
Единицами измерения углов являются:
[x]. deg: градусы
[x]. grad: грады
[x]. rad: радианы
Угловые значения могут быть негативными. Они должны быть нормализованы ПАгентом до диапазона 0-360deg. Например, -10deg и 350deg эквивалентны.
Для примера, правый угол - '90deg' или '100grad', или '1.570796326794897rad'.
Временные значения (обозначаемые в тексте <time>) используются со звуковыми таблицами стилей.
Их формат:
[x]. ms: миллисекунды
[x]. s: секунды
Значения времени не могут быть негативными.
Значения частот (обозначаемые в тексте <frequency>) используются со звуковыми каскадными таблицами стилей.
Их формат: <number>, сразу за которым идёт
[x]. Hz: герцы
[x]. kHz: килогерцы
Значения частоты не могут быть негативными.
Например, 200Hz (или 200hz) - это басовый звук, а 6kHz (или 6khz) - средний регистр.
"this is a 'string'"
"this is a \"string\""
'this is a "string"'
'this is a \'string\''
Можно разбивать
A[TITLE="a not s\
o very long title"] {/*...*/}
A[TITLE="a not so very long title"] {/*...*/}
Таблица стилей CSS это последовательность символов из Universal Character Set/Универсального Набора Символов (см. [ISO10646] ). Для передачи и хранения эти символы обязаны кодироваться в
Если таблица стилей встроена в другой документ, например, элемент STYLE или атрибут "style" в HTML, таблица стилей разделяет использование
Если таблица стилей находится в отдельном файле, ПА обязаны учитывать следующий приоритет при определении
1Параметр HTTP "charset" в поле "Content-Type".
2
3Механизмы языка обращающегося документа (например, в HTML атрибут "charset" элемента LINK).
Не более одного правила
@charset "ISO-8859-1";
В данной спецификации не определено, какие
Обратите внимание, что опора на конструкцию
Таблице стилей может понадобиться обратиться к символам, которые невозможно представить в текущей
Escape-механизм символов должен использоваться только тогда, когда необходимо вывести таким способом только несколько символов. Если большая часть документа требует этого, авторы должны кодировать документ в более подходящей кодировке (например, если документ содержит много греческих символов, автор может использовать "ISO-8859-7" или "UTF-8").
Процессоры-посредники, использующие другие
Соответствующие ПА обязаны корректно отображать в Unicode все символы любой кодировки, которые они могут распознать (или они обязаны вести себя так, как будто они это делают).
Например, документ, передаваемый как ISO-8859-1 (Latin-1), не может содержать напрямую греческую букву: "κουρος" (по-гречески: "kouros"), которая должна быть записана как "\3BA\3BF\3C5\3C1\3BF\3C2".
Примечание. В HTML 4.0 числовые мнемоники интерпретируются в значениях атрибута "style", но не в содержимом элемента STYLE. Из-за этой асимметрии мы рекомендуем, чтобы авторы использовали escape-механизм CSS вместо числовых мнемоник и для атрибута "style", и для элемента STYLE. Например, мы рекомендуем:
<SPAN style="voice-family: D\FC rst">...</SPAN>
вместо:
<SPAN style="voice-family: Dürst">...</SPAN>
Лекция 5. Селекторы
В CSS правила совпадения символов определяют, какое правило стиля применить к элементам дерева документа. Такие блоки символов (патэрн), называемые селекторами, могут иметь диапазон имён от простых имён элементов до сложных контекстуальных блоков. Если все условия в патэрн верны для конкретного элемента, селектор
Чувствительность к регистру имён элементов в
В этой таблице суммирован синтаксис селекторов CSS2:
| Патэрн | Смысл | Описан в разделе |
|---|---|---|
| * | ||
| E | Типы селекторов | |
| E F | Селекторы-потомки | |
| E > F | Дочерние селекторы | |
| E | Псевдокласс | |
E E:visited | ||
E E E | Динамические | |
| E:lang(c) | ||
| E + F | Смежные селекторы | |
| E[foo] | Селекторы атрибутов | |
| E[foo="warning"] | Селекторы атрибутов | |
E [foo~="warning"] | Селекторы атрибутов | |
E [lang|="en"] | Селекторы атрибутов | |
| DIV.warning | Только в HTML. То же, что DIV[class~="warning"]. | Селекторы классов |
| E#myid | Селекторы ID |
Простой селектор -
Селектор это цепь из одного или более простых селекторов, разделённых
Элементы дерева документов, совпадающие с селектором, называются субъектами селектора.
Один псевдоэлемент может быть присоединён к последнему простому селектору в цепи, и в этом случае информация стиля применяется к подразделу каждого субъекта.
Если несколько селекторов используют общие объявления, то они могут быть сгруппированы в список с разделением запятыми.
Здесь три правила с идентичными объявлениями собраны в одно. Таким образом,
H1 { font-family: sans-serif }
H2 { font-family: sans-serif }
H3 { font-family: sans-serif }
эквивалентно:
H1, H2, H3 { font-family: sans-serif }
CSS предлагает также другие механизмы "сокращений", включая множественные объявления и
[x].
[x].
[x].
Cелектор типа
Следующее правило совпадает со всеми элементами H1 в дереве документа:
H1 { font-family: sans-serif }
Авторам может понадобиться, чтобы селекторы совпадали с элементом, который является потомком другого элемента в дереве документа (например, "Совпадать с теми элементами EM, которые содержатся в элементе H1"). Cелекторы потомков выражают следующие взаимоотношения в патэрн. Селектор потомков состоит из двух или более селекторов, разделённых пробелами. Селектор потомков "A B"
Рассмотрим следующие правила:
H1 { color: red }
EM { color: red }
Хотя смысл этих правил в том, чтобы выделять текст путём изменения его цвета, в следующем случае эффект не будет достигнут:
<H1>This headline is <EM>very</EM> important</H1>
В этом случае мы дополняем предыдущие правила правилом, которое устанавливает голубой цвет текста, если EM появляется где-либо внутри H1:
H1 { color: red }
EM { color: red }
H1 EM { color: blue }
Третье правило совпадёт с элементом EM в следующем фрагменте:
<H1>This <SPAN class="myclass">headline
is <EM>very</EM> important</SPAN></H1>
Следующий селектор:
DIV * P
совпадает с элементом P, который является внуком, или позднейшим потомком, элемента DIV.
Обратите внимание на пробелы с каждой стороны от "*".
Селектор в следующем правиле, сочетающий селекторы потомка и атрибута, совпадает с любым элементом, имеющим (1) установленный атрибут "href" и (2) находящимся внутри P, который сам находится внутри DIV:
DIV P *[href]
Это правило устанавливает стиль всех элементов P, являющихся дочерними относительно BODY:
BODY > P { line-height: 1.3 }
Здесь сочетаются селекторы потомков и селекторы дочерних элементов:
DIV OL>LI P
Здесь селектор совпадает с элементом P, являющимся потомком LI; элемент LI обязан быть дочерним относительно элемента OL; элемент OL обязан быть потомком DIV. Обратите внимание, что необязательные пробелы вокруг комбинатора ">" опущены.
Информацию о выборе первого дочернего элемента данного элемента см. ниже в разделе о псевдоклассе
Смежные селекторы-родственники имеют следующий синтаксис: E1 + E2, где E2 является субъектом
В определённых контекстах смежные элементы генерируют форматированные объекты, чьё представление обрабатывается автоматически (например, сжатие вертикальных полей между смежными боксами).
Так, следующее правило указывает, что если элемент P следует непосредственно за элементом MATH, то он не должен учитываться:
MATH + P { text-indent: 0 }
Следующий пример уменьшает вертикальное пространство, разделяющее H1 и H2:
H1 + H2 { margin-top: -5mm }
CSS2 позволяет авторам специфицировать правила, которые определяют
Селекторы атрибутов могут совпадать четырьмя способами:
Если элемент устанавливает атрибут "att" с каким-либо значением атрибута.
Если значение атрибута "att" элемента - точно "val".
Если значение атрибута "att" элемента - список разделённых пробелами "слов", одно из которых - "val". Если используется данный
Если значения атрибута "att" элемента -
Значением атрибута обязана быть строка или идентификатор. Чувствительность к регистру имён атрибутов и значений в
Следующий селектор атрибута совпадает со всеми элементами H1, которые специфицировали атрибут "title" с любым значением:
H1[title] { color: blue; }
Здесь селектор совпадает со всеми элементами SPAN, чей атрибут "class" имеет значение "example":
SPAN[class=example] { color: blue; }
Несколько селекторов атрибута могут использовать для обращения к различным атрибутам элемента, или даже несколько раз к одному и тому же атрибуту.
Здесь селектор совпадает со всеми элементами SPAN, чей атрибут "hello" имеет значение "Cleveland" и чей атрибут "goodbye" имеет значение "Columbus":
SPAN[hello="Cleveland"][goodbye="Columbus"] { color: blue; }
Следующие селекторы иллюстрируют разницу между "=" и "~=". первый селектор совпадает, к примеру, со значением "copyright copyleft copyeditor" атрибута "rel". Второй селектор совпадает только тогда, когда атрибут "href" имеет значение "http://www.w3.org/".
A[rel~="copyright"]
A[href="http://www.w3.org/"]
Следующее правило скрывает все элементы, у которых атрибут "lang" имеет значение "fr" (т.е. язык - французский).
*[LANG=fr] { display : none }
Следующее правило совпадает для значений атрибута "lang", начинающихся с "en", включая "en", "en-US" и "en-cockney":
*[LANG|="en"] { color : red }
Таким же образом, следующие правила звуковой таблицы стилей позволяют громко читать скрипт различными для каждой роли голосами:
DIALOGUE[character=romeo]
{ voice-family: "Lawrence Olivier", charles, male }
DIALOGUE[character=juliet]
{ voice-family: "Vivien Leigh", victoria, female }
Рассмотрим элемент EXAMPLE с атрибутом "notation", имеющим значение по умолчанию "decimal".
Фрагмент ОТД может быть таким:
<!ATTLIST EXAMPLE notation (decimal,octal) "decimal">
Если таблица стилей содержит правила
EXAMPLE[notation=decimal] { /*... установки по умолчанию для свойства ...*/ }
EXAMPLE[notation=octal] { /*... другие установки ...*/ }
тогда, чтобы отобрать случаи, когда атрибут установлен по умолчанию, а не явно, можно добавить следующее правило:
EXAMPLE { /*... значения по умолчанию для свойства ...*/ }
Поскольку этот селектор менее специфичен, чем селектор атрибута, он будет использоваться только для случаев установки значения по умолчанию.
Это делается для того, чтобы все другие значения атрибута, не получающие тот же стиль, что и стиль по умолчанию, были охвачены явно.
В таблицах стилей, используемых в HTML, авторы могут употреблять точку (.) как альтернативу "~=" при совпадении с атрибутом "class". Таким образом, в HTML "DIV.value" и "DIV[class~=value]" имеют одно значение. Значение атрибута обязано следовать сразу за ".".
Мы можем назначить стилевую информацию всем элементам class~="pastoral" следующим образом:
*.pastoral { color: green } /* все элементы с class~=pastoral */
или просто
.pastoral { color: green } /* все элементы с class~=pastoral */
Следующее - назначает стиль только элементам H1 с class~="pastoral":
H1.pastoral { color: green } /* элементы H1 с class~=pastoral */
При назначении этих правил первое вхождение H1 ниже не имеет зелёного цвета текста, а второе - имеет:
<H1>Not green</H1>
<H1 class="pastoral">Very green</H1>
Чтобы совпасть с поднабором значений "class", каждое значение обязано иметь предшествующую ".".
Следующее правило совпадает с любым элементом P, чей атрибут "class" сопоставлен списку разделённых пробелами значений "pastoral" и "marine":
P.pastoral.marine { color: green }
Правило совпадает, если class="pastoral blue aqua marine", но не совпадает
class="pastoral blue".
Примечание. CSS даёт такую мощь атрибуту "class", что авторы могут создавать свои собственные "языки документа" на базе элементов с почти не ассоциированным представлением (таких как DIV и SPAN в HTML) и назначать стилевую информацию через атрибут "class". Авторам следует избегать такой практики, поскольку структурные элементы языка документа часто имеют распознаваемые и принимаемые значения, а классы, определённые авторами - не могут.
Языки документов могут содержать атрибуты, которые объявлены как имеющие тип ID. Особенностью атрибутов типа ID является то, что они могут иметь одно значение; независимо от языка документа, атрибут ID может использоваться для уникальной идентификации элемента. В HTML все атрибуты ID именуются "id"; приложения XML могут именовать атрибуты ID по-разному, но с применением одинаковых ограничений.
Атрибут ID языка документа позволяет авторам назначать идентификатор объекту элемента в дереве документа. В CSS ID-селекторы совпадают с объектом элемента на базе идентификатора. ID-селектор CSS содержит "#" непосредственно перед значением ID.
Следующий ID-селектор совпадает с элементом H1, чей атрибут ID имеет значение "chapter1":
H1#chapter1 { text-align: center }
В следующем пример правило таблицы стилей устанавливает совпадение с элементом, чьё значение ID - "z98y".
Правило, таким образом, совпадает для элемента P:
<HEAD>
<TITLE>Match P</TITLE>
<STYLE type="text/css">
*#z98y { letter-spacing: 0.3em }
</STYLE>
</HEAD>
<BODY>
<P id=z98y>Wide text</P>
</BODY>
В следующем пример, однако, правило стиля совпадает только с тем элементом H1, который имеет значение ID - "z98y".
Правило в этом примере не совпадает с элементом P:
<HEAD>
<TITLE>Match H1 only</TITLE>
<STYLE type="text/css">
H1#z98y { letter-spacing: 0.5em }
</STYLE>
</HEAD>
<BODY>
<P id=z98y>Wide text</P>
</BODY>
ID-селекторы имеют более высокий приоритет, чем селекторы атрибутов. Например, в HTML
Примечание. В XML 1.0 [XML10] информация о том, какой атрибут содержит ID-ы элемента, находится в ОТД. При разборе XML, ПА не всегда читают ОТД и поэтому могут не знать, какой ID у элемента. Если дизайнер таблицы стилей знает или предполагает, что это именно данный случай, он должен использовать нормальные селекторы атрибутов: [name=p371] вместо #p371. Однако каскадный порядок нормальных селекторов атрибутов отличается от ID-селекторов. Может понадобиться добавить приоритет "!important" в объявления: [name=p371] {color: red ! important}. Конечно, элементы в документах XML 1.без ОТД не имеют ID-ов вообще.
В CSS2 стиль обычно присоединяется к элементу на базе его позиции в дереве документа. Этой простой модели во многих случаях достаточно, но некоторые обычные сценарии могут оказаться недоступными из-за структуры дерева документа. Например, в HTML 4.0 (см. [HTML40]) нет элементов, относящихся к первой строке параграфа, и, следовательно,
CSS вводит
[x].
Псевдоэлементы создают абстракции дерева документа наряду с абстракциями, специфицированными языком документа. Например, языки документа не имеют механизмов для доступа к первой букве или первой строке содержимого элемента .
[x].
Псевдоклассы классифицируют элементы не по их именам, атрибутам или содержимому, а по другим характеристикам ; по характеристикам, которые в принципе не могут быть получены из дерева документа. Псевдоклассы могут быть динамическими в предположении, что элемент может получить или потерять псевдокласс, пока пользователь взаимодействует с документом. Исключением является
Ни
Имена псевдоэлементов и псевдоклассов нечувствительны к регистру.
Некоторые
ПА, соответствующие HTML могут игнорировать все правила с
Псевдокласс :first-child
Здесь селектор совпадает с любым элементом P, являющимся первым дочерним элементом элемента DIV. Правило подавляет отступ для первого параграфа DIV:
DIV > P:first-child { text-indent: 0 }
Следующий селектор может совпасть с элементом P внутри DIV в следующем фрагменте:
<P> Последний P перед note.
<DIV class="note">
<P> Первый P внутри note.
</DIV>
но не совпадёт со вторым P в следующем фрагменте:
<P> Последний P перед note.
<DIV class="note">
<H2>Note</H2>
<P> Первый P внутри note.
</DIV>
Следующее правило устанавливает вес шрифта 'bold' для любого элемента EM, являющегося каким-либо потомком элемента P, который, в свою очередь, является первым дочерним элементом:
P:first-child EM { font-weight : bold }
Заметьте, что анонимные боксы не являются частью дерева документа, они не учитываются при вычислении первого дочернего элемента.
Например, EM в:
<P>abc <EM>default</EM>
является первым дочерним элементом от P.
Следующие два раздела эквивалентны:
* > A:first-child /* первый дочерний элемент любого элемента */
A:first-child /* То же самое */
ПА обычно отображают непосещённые гиперссылки иначе, чем посещённые. CSS
[x].
[x].
Примечание. По истечении некоторого времени ПА могут вернуть посещённую гиперссылку к первоначальному состоянию (непосещённому) ':link'.
Эти два состояния взаимоисключающи.
Язык документа определяет, какие элементы являются якорями ссылки на ресурс. Например, в HTML 4.0
A:link { color: red }
:link { color: red }
Если следующая ссылка:
<A class="external" href="http://out.side/">external link</A>
будет посещена, то данное правило:
A.external:visited { color: blue }
сделает её голубой.
Интерактивные ПА иногда изменяют представление в ответ на действия пользователя. CSS имеет три псевдокласса для общих случаев:
[x].
[x].
[x].
Эти
CSS не определяет, какие элементы могут быть в вышеуказанных состояниях и как осуществляется вход и выход из этих состояний. Сценарий может меняться в зависимости от того, реагирует элемент на действия пользователя или нет, и различные устройства и ПА могут иметь разные способы указания на элементы (их активации).
От ПА не требуется перерисовывать отображаемый в данный момент документ из-за переносов псевдоклассов. Например, таблица стилей может специфицировать, что 'font-size' гиперссылки
A:link { color: red } /* непосещённые ссылки */
A:visited { color: blue } /* посещённые ссылки */
A:hover { color: yellow } /* пользователь провёл над */
A:active { color: lime } /* активные ссылки */
Заметьте, что A:hover обязан размещаться после правил A:link и A:visited, поскольку иначе правила каскадирования спрячут свойство 'color' правила A:hover. Аналогично, поскольку A:active размещено после A:hover, цвет активной ссылки (lime) будет применён, когда пользователь и активирует и проведёт над элементом A.
Пример комбинации динамических псевдоклассов:
A:focus { background: yellow }
A:focus:hover { background: white }
Последний селектор совпадает с элементами A, которые входят в псевдоклассы :focus и :hover.
О представлении контуров фокуса см. раздел динамические контуры фокуса.
Примечание. В CSS1 псевдокласс ':active' взаимно исключался с
Если язык документа специфицирует, как определяется
Следующие правила устанавливают знаки кавычек для документа HTML на французском или немецком языке:
HTML:lang(fr) { quotes: '« ' ' »' }
HTML:lang(de) { quotes: '»' '«' '\2039' '\203A' }
:lang(fr) > Q { quotes: '« ' ' »' }
:lang(de) > Q { quotes: '»' '«' '\2039' '\203A' }
Вторая пара правил в действительности устанавливает свойство 'quotes' элементов Q в соответствии с языком его предка.
Так делается, потому что выбор знаков кавычек обычно базируется на языке элемента, окружающего кавычки, а не самих кавычек, и кусок французского текста "a l'improviste" в середине английского текста использует английские знаки кавычек.
P:first-line { text-transform: uppercase }
Это правило говорит: "Перевести буквы первой строки каждого параграфа в верхний регистр". Однако
Заметьте, что длина первой строки зависит от нескольких факторов, включая ширину страницы, размер шрифта и т.д. Таким образом, обычный параграф HTML:
<P>This is a somewhat long HTML
paragraph that will be broken into several
lines. The first line will be identified
by a fictional tag sequence. The other lines
will be treated as ordinary lines in the
paragraph.</P>
строки которого могут быть разбиты так:
THIS IS A SOMEWHAT LONG HTML PARAGRAPH THAT
will be broken into several lines. The first
line will be identified by a fictional tag
sequence. The other lines will be treated as
ordinary lines in the paragraph.
может быть "переписан" ПАгентами с включением последовательности фиктивных тэгов для
<P><P:first-line> This is a somewhat long HTML
paragraph that will </P:first-line> be broken into several
lines. The first line will be identified
by a fictional tag sequence. The other lines
will be treated as ordinary lines in the
paragraph.</P>
Если псевдоэлемент разрывает реальный элемент, то желаемый эффект может часто быть описан последовательностью фиктивных тэгов, которая закрывает и затем снова открывает элемент. Таким образом, если мы разметим предыдущий параграф с использованием элемента SPAN:
<P><SPAN class="test"> This is a somewhat long HTML
paragraph that will be broken into several
lines.</SPAN> The first line will be identified
by a fictional tag sequence. The other lines
will be treated as ordinary lines in the
paragraph.</P>
ПА сможет сгенерировать соответствующие начальный и конечный тэги для SPAN при вставке последовательности фиктивных тэгов для
<P><P:first-line><SPAN class="test"> This is a
somewhat long HTML
paragraph that will </SPAN></P:first-line><SPAN class="test"> be
broken into several
lines.</SPAN> The first line will be identified
by a fictional tag sequence. The other lines
will be treated as ordinary lines in the
paragraph.</P>
Вот свойства, применимые к
Следующий CSS2 сделает начальную заглавную зависающую букву, захватывающую две строки:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN">
<HTML>
<HEAD>
<TITLE>Drop cap initial letter</TITLE>
<STYLE type="text/css">
P { font-size: 12pt; line-height: 12pt }
P:first-letter { font-size: 200%; font-style: italic;
font-weight: bold; float: left }
SPAN { text-transform: uppercase }
</STYLE>
</HEAD>
<BODY>
<P><SPAN>The first</SPAN> few words of an article
in The Economist.</P>
</BODY>
</HTML>
Этот пример может быть сформатирован так:
Последовательность фиктивных тэгов такова:
<P>
<SPAN>
<P:first-letter>
T
</P:first-letter>he first
</SPAN>
few words of an article in the Economist.
</P>
Обратите внимание, что тэги псевдоэлемента :first-letter примыкают к содержимому (т.е. к начальному символу), поскольку начальный тэг псевдоэлемента :first-line вставлен справа после начального тэга элемента, к которому он присоединён.
Чтобы выполнить форматирование традиционных зависающих заглавных букв, ПА могут выровнять размеры шрифта, например, по базовой линии. Также и контуры глифов могут быть приняты в расчёт при форматировании.
Пунктуация (т.е. символы, определённые в Unicode [UNICODE] в классах пунктуации "open" (Ps), "close" (Pe) и "other" (Po)), которая предшествует первой букве, должна включаться, как в этом примере:
В некоторых языках могут быть специфические правила рассмотрения определённых сочетаний букв. В датском языке, например, если комбинация "ij" появляется в начале слова, обе буквы должны рассматриваться
Следующий пример иллюстрирует, как может действовать перекрывание псевдоэлементов. Первые буквы каждого элемента P будут зелёными и размером '24pt'. Остаток первой форматированной строки будет 'blue', а остаток параграфа - 'red'.
P { color: red; font-size: 12pt }
P:first-letter { color: green; font-size: 200% }
P:first-line { color: blue }
<P>Какой-нибудь текст не менее двух строк.</P>
Если предположить, что разрыв строки появится перед словом "не", последовательность фиктивных тэгов для этого фрагмента может быть такой:
<P>
<P:first-line>
<P:first-letter>
К
</P:first-letter>акой-нибудь текст
</P:first-line>
не менее двух строк.
</P>
Заметьте, что элемент :first-letter находится внутри элемента :first-line. Свойства, установленные в :first-line, наследуются в :first-letter, но переопределяются, если то же самое свойство установлено в :first-letter.
H1:before {content: counter(chapno, upper-roman) ". "}
Если
P.special:before {content: "Special! "}
P.special:first-letter {color: #ffd800}
Это выведет "S" в слове "Special!" золотом.
Лекция 6. Установка значений свойств. Каскадирование и Наследование
После того, как ПА разобрал документ и сконструировал дерево документа, он обязан назначить каждому элементу дерева значение для каждого свойства, применимое для целевого типа носителя.
Конечное значение свойства является результатом трёхступенчатого процесса вычисления: значение определяется по спецификации (
ПА обязаны сначала назначить свойству
1Если
2Иначе, если свойство унаследовано, использовать значение элемента-предка, обычно -
3Иначе, использовать
Не имея предков, корневой элемент дерева документа не может использовать значения, унаследованные от элемента-предка; в этом случае используется, если необходимо,
Специфицированные значения могут быть абсолютными (т.е. не специфицированными относительно других значений: 'red' или '2mm') или относительными (т.е. специфицированными относительно других значений: 'auto', '2em', '12%'). Для абсолютных значений не требуется никаких вычислений, чтобы найти
Относительные значения, с другой стороны, обязаны быть трансформированы в вычисленные значения: процентные рассчитываются относительно данного значения-ссылки (каждое свойство определяет соответствующее значение), значения с указанием единиц измерения (em, ex, px) должны быть сделаны абсолютными путём применения подходящих по размеру шрифтов или в пикселах, значения 'auto' должны высчитываться по формулам, данным для каждого свойства, ключевые слова ('smaller', 'bolder',
В большинстве случаев элементы наследуют вычисленные значения. Однако есть некоторые свойства, чьи специфицированные значения могут наследоваться (например, числовое значение свойства 'line-height'). В тех случаях , когда дочерние элементы не наследуют вычисленные значения, это описывается в определении свойства.
Некоторые значения наследуются потомками элемента в дереве документа. Каждое свойство определяет, наследуется оно или нет.
Предположим, имеется элемент H1 с выделенным элементом (EM) внутри:
<H1>The headline <EM>is</EM> important! </H1>
Если цвет элементу EM не назначен, выделенное "is" будет наследовать цвет элемента-предка, и, поскольку H1 имеет голубой цвет, элемент EM будет, соответственно, голубым.
Чтобы установить свойство стиля "по умолчанию" в документе, авторы могут установить это свойство в корне дерева документа. В HTML, например, эту функцию могут выполнить элементы HTML или BODY. Заметьте, что это будет работать, даже если автор опустит тэг BODY в тексте HTML, поскольку разборщик HTML вставит отсутствующие тэги.
Например, поскольку свойство 'color' наследуется, все потомки элемента BODY будут наследовать цвет 'black':
BODY { color: black; }
Специфицированные процентные значения не наследуются, а вычисленные значения - наследуются.
В данной таблице:
BODY { font-size: 10pt }
H1 { font-size: 120% }
и в этом фрагменте документа:
<BODY>
<H1>A <EM>large</EM> heading</H1>
</BODY>
свойство 'font-size' элемента H1 будет иметь вычисленное значение'12pt' (120% от 10pt, значения-предка). Поскольку значение свойства 'font-size' наследуется, элемент EM также получит вычисленное значение '12pt'. Если ПА не имеет доступного шрифта в 12pt, реальное значение 'font-size' и для H1, и для EM может быть, например, '11pt'.
Каждое свойство может иметь специфицированное значение 'inherit', которое означает, что для данного элемента свойство принимает то же самое
В следующем примере свойства 'color' и 'background' установлены в элементе BODY. Во всех других элементах значение 'color' будет наследоваться, а фон будет прозрачным. Если эти правила являются частью пользовательской таблицы стилей, чёрный текст на белом фоне будет форсирован по всему документу.
BODY {
color: black !important;
background: white !important;
}
* {
color: inherit !important;
background: transparent;
}
Правило
Следующие строки эквивалентны по значению и обе иллюстрируют синтаксис '@import' (одно с "url()", а другое - с простой строкой):
@import "mystyle.css";
@import url("mystyle.css");
Поскольку ПА могут исключать запрос ресурсов неподдерживаемых типов носителя, авторы могут специфицировать
Следующие правила имеют такой же эффект, как если бы импортированная таблица стилей была перенесена в правило @media для того же типа, но данные правила позволят исключить бесполезную нагрузку на ПА.
@import url("fineprint.css") print;
@import url("bluish.css") projection, tv;
При отсутствии любых типов носителя, импорт является безусловным. Спецификация 'all' для носителя имеет тот же эффект.
Таблицы стилей могут иметь три независимых источника: автор, пользователь и ПА.
[x]. Автор. Специфицирует таблицы стилей для документа-источника в соответствии с соглашениями о языке документа. К примеру, в HTML таблицы стилей могут быть включены в документ или иметь внешнюю связь.
[x]. Пользователь. Может иметь возможность специфицировать стилевую информацию для определённого документа. Например, пользователь может специфицировать файл, содержащий таблицу стилей, или ПА может предоставить интерфейс, генерирующий пользовательскую таблицу стилей (или вести себя так, как если бы предоставлял).
[x].
Пользовательский агент. Соответствующие ПА обязаны применять
Учтите, что
Области видимости таблиц стилей из этих трёх источников будут перекрываться и взаимодействовать в соответствии с
По умолчанию правила авторской таблицы стилей имеют больший вес, чем правила таблицы стилей пользователя. Преимущество зарезервировано, однако, для правил
Импортируемые таблицы стилей также каскадируются, и их вес зависит от порядка импортирования. Правила, специфицированные в имеющейся таблице стилей, переопределяют правила, импортируемые из других таблиц. Импортированные таблицы стилей сами могут импортировать и переопределять другие таблицы стилей рекурсивно, и тогда применяются те же правила приоритета.
Чтобы найти значение для комбинации элемент/свойство, ПА обязаны применять следующий порядок сортировки:
1Найти все объявления, применяемые в запросе к элементу и свойству, для целевого типа носителя. Объявления применяются, если ассоциированный селектор подбирает элемент в запросе.
2Сначала объявления сортируются по весу и источнику: для нормальных объявлений - авторские таблицы стилей переопределяют пользовательские, которые, в свою очередь, переопределяют
3Вторая сортировка производится по специфике селектора: более специфические селекторы переопределяют более общие. Псевдоэлементы и псевдоклассы обсчитываются как нормальные элементы и классы соответственно.
4Наконец, идёт сортировка по специфицированному порядку: если два правила имеют одинаковые вес, источник и специфику, выбирается специфицированное позже. Правила в импортируемых таблицах стилей рассматриваются перед любыми правилами имеющейся таблицы стилей.
Независимо от установок
CSS пытается создать баланс между авторскими и пользовательскими таблицами стилей. По умолчанию правила авторской таблицы стилей переопределяют правила пользовательской таблицы (см. каскадное правило 3).
Однако, для баланса, объявление
Примечание. Это семантическое изменение в сравнении с CSS1. В CSS1 авторские правила
Объявление
Первое правило пользовательской таблицы стилей в данном примере содержит объявление "!important", которое переопределяет соответствующее объявление в авторской таблице стилей. Второе объявление также будет иметь приоритет как помеченное "!important".
Однако третье правило пользовательской таблицы стилей - не "!important" - и поэтому будет отброшено в пользу второго правила авторской таблицы стилей (которое устанавливает стиль сокращённого свойства). Таким образом, третье авторское правило будет отброшено в пользу второго авторского правила, поскольку второе правило - "!important". Это показывает, что объявления "!important" имеют действие также и внутри авторских таблиц стилей.
/* Из пользовательской таблицы стилей */
P { text-indent: 1em ! important }
P { font-style: italic ! important }
P { font-size: 18pt }
/* Из авторской таблицы стилей */
P { text-indent: 1.5em !important }
P { font: 12pt sans-serif !important }
P { font-size: 24pt }
Специфика селектора высчитывается так:
[x]. вычисляется количество атрибутов ID в селекторе (= a)
[x]. вычисляется количество других атрибутов и псевдоклассов в селекторе (= b)
[x]. вычисляется количество имён элементов в селекторе (= c)
[x]. игнорируются псевдоэлементы.
Конкатенация трёх чисел a-b-c (в числовой системе с большой базой) дают специфику.
* {} /* a=0 b=0 c=0 -> специфика = 0 */
LI {} /* a=0 b=0 c=1 -> специфика = 1 */
UL LI {} /* a=0 b=0 c=2 -> специфика = 2 */
UL OL+LI {} /* a=0 b=0 c=3 -> специфика = 3 */
H1 + *[REL=up]{} /* a=0 b=1 c=1 -> специфика = 11 */
UL OL LI.red {} /* a=0 b=1 c=3 -> специфика = 13 */
LI.red.level {} /* a=0 b=2 c=1 -> специфика = 21 */
#x34y {} /* a=1 b=0 c=0 -> специфика = 100 */
В HTML значения атрибута "style" элемента являются правилами таблицы стилей. Эти правила не имеют селекторов, но для целей шага 3 каскадного алгоритма они рассматриваются как имеющие селектор ID (специфика: a=1, b=0, c=0). Для целей шага 4 они рассматриваются после всех других правил.
<HEAD>
<STYLE type="text/css">
#x97z { color: blue }
</STYLE>
</HEAD>
<BODY>
<P ID=x97z style="color: red">
</BODY>
В данном примере цвет элемента P будет красным. Хотя специфика - одна и та же для обоих объявлений, объявление атрибута "style" переопределит объявление в элементе STYLE в соответствии с каскадным правилом 4.
ПА могут предпочесть подсказки (hints) из других источников, а не из таблиц стилей, например, элемент FONT или атрибут "align" в HTML. Если это так, не-CSS подсказки обязаны быть переведены в соответствующие правила CSS со спецификой=0. Принимается, что правила находятся в начале авторской таблицы стилей и могут быть переопределены последующими правилами таблиц стилей.
Примечание. В фазе переноса эта политика облегчит сосуществование стилистических атрибутов с таблицами стилей.
Примечание. В CSS1 не-CSS подсказки получали специфику=1, а не 0. Это изменение сделано из-за введения универсального селектора, имеющего специфику 0.
Лекция 7. Типы носителя
Одним из важнейших свойств таблиц стилей является то, что они специфицируют представление документа на различных носителях информации: на экране, бумаге, в речевом синтезаторе, в брайль-устройстве и т.п.
Некоторые свойства CSS созданы для конкретных
В настоящее время есть два способа специфицировать зависимость от типа носителя в таблицах стилей:
[x].
Специфицировать целевой
@import url("loudvoice.css") aural;
@media print {
/* здесь идёт таблица стилей для печати */
}
[x].
Специфицировать целевой
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN">
<HTML>
<HEAD>
<TITLE>Link to a target medium</TITLE>
<LINK rel="stylesheet" type="text/css"
media="print, handheld" href="foo.css">
</HEAD>
<BODY>
<P>Тело документа...
</BODY>
</HTML>
Правило @import определено в главе о каскадах.
Правило
@media print {
BODY { font-size: 10pt }
}
@media screen {
BODY { font-size: 12pt }
}
@media screen, print {
BODY { line-height: 1.2 }
}
Имена для типов носителя в CSS отражают целевое устройство, на которое соответствующие свойства оказывают действие. В следующем списке типов носителя CSS описания в скобках не являются нормативными. Они лишь дают представление о том, к каким устройствам относится данный
все
Для всех устройств.
Предполагается для использования в речевых синтезаторах. См. детали в разделе звуковые таблицы стилей.
брайль-устройство
Для брайль-устройств.
брайль-принтер
Для страничных брайль-принтеров.
портативный
Для портативных устройств (обычно с маленьким экраном, монохромных, с ограниченной пропускной способностью).
печатный
Предполагается для страничных непрозрачных материалов и для документов, просматриваемых на экране в режиме предварительного просмотра для печати. Информацию о вопросах форматирования, специфичных для страничных
проектор
Предполагается для проецируемых презентаций, например, проекторов или печати на прозрачные носители. Информацию о вопросах форматирования, специфичных для страничных
экран
Прежде всего - для компьютерного цветного экрана.
tty
Для
tv
Для устройств типа телевизора (низкое разрешение, цвет, ограниченная возможность прокрутки экрана, звуковые возможности).
Названия типов носителя нечувствительны к регистру.
Из-за быстрых изменений технологий, CSS2 не специфицирует определительный список типов носителя, которые могут быть значениями для
Примечание. Будущие версии CSS могут расширить этот список. Авторы не должны ссылаться на названия типов носителя, ещё не определённых в спецификации CSS.
Каждое определение свойства CSS специфицирует типы носителя, для которых свойство обязано выполняться на соответствующих ПА. Поскольку свойства обычно применяются для различных
CSS2 определяет следующие
[x]. непрерывные или страничные. "Оба" означает, что свойство применяется к обеим группам носителей.
[x]. визуальные, звуковые или осязательные.
[x].
[x]. интерактивные (для устройств, взаимодействующих с пользователем или статичные (для не взаимодействующих). "Оба" означает, что свойство применяется к носителям обеих групп.
[x]. все (включает все типы носителей).
В следующей таблице показаны соотношения между группами носителей и типами носителя:
| Типы носителя | Группы носителей | |||
|---|---|---|---|---|
| N/A | оба | |||
| брайль-устройство | оба | |||
| брайль-принтер | оба | |||
| портативный | оба | оба | оба | |
| печатный | ||||
| проектор | ||||
| экран | оба | |||
| tty | оба | |||
| tv | оба | оба | ||
Лекция 8. Модель бокса
Модель бокса CSS описывает прямоугольный бокс, который генерируется для элементов дерева документа и располагается в соответствии с моделью визуального форматирования. Страничный бокс это особый вид бокса, детально описанный в разделе страничный носитель.
Каждый бокс имеет область содержимого(например, текст, изображение и т.п.) и необязательное окружение - области
Периметр каждой из четырёх областей (содержимого,
content edge/
padding edge/
Окружает
border edge/
Окружает
margin edge/
Окружает поле бокса. Если поле имеет ширину 0, то
Каждый
Размеры области содержимого бокса -
Ширина бокса выводится как сумма левого и правого
Стиль фона различных областей бокса определяется так:
[x]. Область содержимого: свойство 'background' генерирующего элемента.
[x].
Область
[x]. Область рамки: свойства рамки генерирующего элемента.
[x].
Область
Этот пример документа HTML показывает, как
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN">
<HTML>
<HEAD>
<TITLE>Пример полей, заполнения и рамок</TITLE>
<STYLE type="text/css">
UL {
background: green;
margin: 12px 12px 12px 12px;
padding: 3px 3px 3px 3px;
/* Рамки не установлены */
}
LI {
color: black; /* цвет текста - чёрный */
background: gray; /* Содержимое, заполнение будет серым */
margin: 12px 12px 12px 12px;
padding: 12px 0px 12px 12px; /* Заметьте, что заполнение справа 0px */
list-style: none /* перед элементом списка нет никаких глифов */
/* Рамки не установлены */
}
LI.withborder {
border-style: dashed;
border-width: medium; /* устанавливает ширину рамок всех сторон */
border-color: black;
}
</STYLE>
</HEAD>
<BODY>
<UL>
<LI>Первый элемент списка
<LI class="withborder">Второй элемент списка длиннее,
чтобы показать перенос.
</UL>
</BODY>
</HTML>
и даёт дерево документа с (помимо других соотношений) элементом UL, в котором есть два дочерних LI.
Первая диаграмма иллюстрирует, что этот пример даст в результате.
Вторая иллюстрирует взаимоотношения между
Обратите внимание, что:
[x].
[x].
[x].
Правое
[x].
[x].
Второй элемент LI специфицирует пунктирную рамку (свойство
Свойства
Свойства, определённые в этом разделе, относятся к типу значений
<length>
Специфицирует фиксированную ширину.
<percentage>
Процентное значение высчитывается относительно ширины содержащего блока сгенерированного бокса. Это верно для
auto
Негативные значения свойств полей допускаются, но могут существовать ограничения, специфичные для конкретных реализаций.
Значение: <margin-width> | inherit
Начальное: 0
Применяется: ко всем элементам
Наследуется: нет
Процентное: относительно ширины содержащего блока
Носитель: визуальный
Это свойство устанавливает верхнее, нижнее, правое и левое
H1 { margin-top: 2em }
Значение:
Начальное: не определено для сокращённого свойства
Применяется: ко всем элементам
Наследуется: нет
Процентное: относительно ширины содержащего блока
Носитель: визуальный
Если имеется одно значение, то оно применяется ко всем сторонам. Если дано два значения, верхнее и нижнее
BODY { margin: 2em } /* все поля установлены в 2em */
BODY { margin: 1em 2em } /* верхнее и нижнее = 1em, правое и левое = 2em */
BODY { margin: 1em 2em 3em } /* верхнее=1em, правое=2em, нижнее=3em, левое=2em */
Последнее правило эквивалентно следующему:
BODY {
margin-top: 1em;
margin-right: 2em;
margin-bottom: 3em;
margin-left: 2em; /* копируется из противоположной стороны (из правой) */
В этой спецификации выражение сжатие полей означает, что смежные
В CSS2
[x].
Два или более смежных
[x].
[x].
См. иллюстрацию сжимаемых полей в примере полей,
Свойства обтекания специфицируют ширину области заполнения бокса. Сокращённое свойство 'padding' устанавливает
Свойства, определённые в этом разделе, относятся к типу значений
<length>
Специфицирует фиксированную ширину.
<percentage>
Процентное, высчитывается относительно ширины содержащего блока, генерирующего бокс, в том числе и для
В отличие от свойств полей, значения
Значение:
Начальное: 0
Применяется: ко всем элементам
Наследуется: нет
Процентное: относительно ширины содержащего блока
Носитель: визуальный
Эти свойства устанавливают верхнее, правое, нижнее и левое
BLOCKQUOTE { padding-top: 0.3em }
Значение:
Начальное: не определено для сокращённого свойства
Применяется: ко всем элементам
Наследуется: нет
Процентное: относительно ширины содержащего блока
Носитель: визуальный
Свойство 'padding' - это сокращённое свойство для установки
Если имеется одно значение, то оно применяется ко всем сторонам. Если дано два значения, верхнее и нижнее
Цвет поверхности области
H1 {
background: white;
padding: 1em 2em;
}
Вышеприведённый пример специфицирует вертикальное заполнение '1em' ('padding-top' и 'padding-bottom') и горизонтальное заполнение '2em' ('padding-right' и 'padding-left'). Единицы измерения 'em' относительны к размеру шрифта элемента: '1em' эквивалентно размеру используемого шрифта.
Свойства рамки специфицируют ширину, цвет и стиль области рамки бокса. Эти свойства применимы ко всем элементам.
Примечание. Особенно в HTML, ПА могут отображать рамки определённых элементов (например, кнопок, меню и т.п.) иначе, чем у "обычных" элементов.
Свойства ширины рамки специфицируют ширину области рамки. Свойства, определённые в этом разделе, относятся к типу значений
thin
Тонкая
medium
Средняя
thick
Толстая
<length>
Толщина рамки имеет точное значение. Это значение не может быть негативным.
Интерпретация первых трёх значений зависит от ПА. Следующие соотношения, однако, обязаны выдерживаться:
'thin' <='medium' <= 'thick'.
К тому же эти значения ширины обязаны быть константными в пределах документа.
Значение:
Начальное: medium
Применяется: ко всем элементам
Наследуется: нет
Процентное: N/A
Носитель: визуальный
Эти свойства устанавливают верхнюю, правую, нижнюю и левую линии рамки для бокса.
Значение:
Начальное: см. индивидуальные свойства
Применяется: ко всем элементам
Наследуется: нет
Процентное: N/A
Носитель: визуальный
Это сокращённое свойство для установки
Если имеется одно значение, то оно применяется ко всем сторонам. Если дано два значения, верхняя и нижняя линии рамки устанавливаются в первое, а правая и левая линии рамки - во второе значение. Если дано три значения, верхняя линия рамки устанавливается в первое, левая и правая - во второе, а нижняя линия рамки - в третье значение. Если задано четыре значения, они применяются к верхней, правой, нижней и левой линиям рамки соответственно.
Комментарии в данном примере поясняют результаты установки ширины верхней, правой, нижней и левой линий рамки:
H1 { border-width: thin } /* thin thin thin thin */
H1 { border-width: thin thick } /* thin thick thin thick */
H1 { border-width: thin thick medium } /* thin thick medium thick */
Эти свойства специфицируют цвет рамки бокса.
Значение:
Начальное: значение свойства 'color'
Применяется: ко всем элементам
Наследуется: нет
Процентное: N/A
Носитель: визуальный
Значение:
Начальное: см. индивидуальные свойства
Применяется: ко всем элементам
Наследуется: нет
Процентное: N/A
Носитель: визуальный
Свойство
Специфицирует значение цвета.
transparent
Свойство
Если цвет рамки элемента не специфицирован в свойстве рамки, ПА обязаны использовать значение свойства 'color' элемента как вычисленное значение цвета рамки.
В этом примере рамка будет сплошной и чёрной:
P {
color: black;
background: white;
border: solid;
}
Свойства
none
Нет рамки. Форсирует вычисленное значение
hidden
То же, что и 'none', за исключением разрешения конфликтов рамок для элементов таблицы.
dotted
dashed
solid
double
Двойная сплошная линия. Сумма двух линий и пространства между ними равна значению
groove
ridge
Противоположно
inset
Весь бокс выглядит вдавленным в канву.
outset
Противоположно
Все рамки прорисовываются на поверхности фона бокса. Цвет рамок со значениями
Соответствующие пользовательские агенты (ПА) HTML могут интерпретировать
Значение:
Начальное: none
Применяется: ко всем элементам
Наследуется: нет
Процентное: N/A
Носитель: визуальный
Значение:
Начальное: см. индивидуальные свойства
Применяется: ко всем элементам
Наследуется: нет
Процентное: N/A
Носитель: визуальный
Свойство
#xy34 { border-style: solid dotted }
В этом примере горизонтальные линии рамки будут 'solid', а вертикальные - 'dotted'.
Поскольку начальное значение
Значение: [ <
Начальное: см. индивидуальные свойства
Применяется: ко всем элементам
Наследуется: нет
Процентное: N/A
Носитель: визуальный
Это сокращённое свойство для установки ширины, стиля и цвета верхней, правой, нижней и левой сторон рамки.
H1 { border-bottom: thick solid red }
Это правило устанавливает ширину, стиль и цвет рамки после элемента H1. Опущенные значения установлены в свои начальные значения.
Поскольку нижеследующее правило не специфицирует цвет рамки, рамка будет иметь цвет, определённый свойством 'color':
H1 { border-bottom: thick solid }
Значение: [ <
Начальное: см. индивидуальные свойства
Применяется: ко всем элементам
Наследуется: нет
Процентное: N/A
Носитель: визуальный
Свойство 'border' - это сокращённое свойство для установки одинаковых значений ширины, цвета и стиля для всех четырёх сторон рамки бокса. В отличие от сокращённых свойств
Первое правило эквивалентно установке четырёх последующих значений:
P { border: solid red }
P {
border-top: solid red;
border-right: solid red;
border-bottom: solid red;
border-left: solid red
}
Поскольку, в некоторой степени, свойства могут перекрываться, порядок, в котором правила специфицированы, имеет важное значение.
BLOCKQUOTE {
border-color: red;
border-left: double;
color: black
}
В приведённом примере цвет левой линии рамки - чёрный, а других линий - красный. Это потому, что в 'border-left' установлены ширина, стиль и цвет. Поскольку значение цвета в свойстве 'border-left' не установлено, оно будет взято из свойства 'color'. Фактически свойство 'color', установленное после свойства 'border-left', не имеет к этому никакого отношения.
Лекция 9. Модель визуального форматирования
Эта и последующие главы описывают модель визуального форматирования: то как пользовательские агенты (ПА) обрабатывают дерево документа для визуального носителя.
В модели визуального форматирования каждый элемент дерева документа генерирует ноль или более боксов в соответствии с моделью боксов. Структура этих боксов управляется:
[x]. размерами боксов и типом.
[x]. схемой позиционирования (нормальное позиционирование, всплывание и абсолютное).
[x]. взаимоотношениями между элементами в дереве документа.
[x]. внешней информацией (например, размером порта просмотра, внутренними размерами изображений и т.д.).
Свойства, определённые в этой и следующих главах, применяются и к непрерывным носителям, и к страничным носителям. В то же время, значения свойств полей варьируются при использовании со страничным носителем (см. в страничной модели).
модель визуального форматирования не определяет все аспекты форматирования (например, она не специфицирует алгоритм расстояний между буквами). Поведение соответствующих ПА может отличаться в вопросах форматирования.
ПА для непрерывных носителей обычно предлагают пользователю порт просмотра (окно или другую область просмотра на экране), в котором пользователь видит документ. ПА могут изменять внешний вид документа, если порт просмотра изменил размеры (см.
В CSS2 многие варианты позиционирования и размеры вычисляются относительно кромки прямоугольного бокса, называемого содержащий блок. Обычно генерируемые боксы действуют как содержащие блоки для боксов-потомков; мы говорим, что бокс "устанавливает" содержащий блок для своих потомков. Фраза "блок, содержащий бокс" означает "блок, в котором бокс находится", а не блок, генерирующий бокс.
Каждый бокс имеет позицию относительно содержащего блока, но не ограничен этим блоком и может вызвать переполнение.
Корневой элемент дерева документа генерирует бокс, который служит начальным содержащим блоком для последующего вывода.
Ширина начального содержащего блока может быть специфицирована свойством 'width' корневого элемента. Если это свойство имеет значение 'auto', ПА предоставляет начальное значение ширины (например, ПА использует текущую ширину порта просмотра).
Высота начального содержащего блока может быть специфицирована свойством 'height' корневого элемента. Если это свойство имеет значение 'auto', высота содержащего блока увеличивается, чтобы приспособиться к содержимому документа.
Детали того, как высчитываются размеры содержащего блока, описаны в следующей главе.
Последующие разделы описывают типы боксов, которые могут генерироваться в CSS2. Тип бокса воздействует отчасти на его (бокса) поведение в модели визуального форматирования. Свойство
Элементы уровня блока это элементы документа-источника, визуально отформатированные как блоки (например, параграфы). Различные значения свойства
Некоторые
В этом документе:
<DIV>
Some text
<P>More text</P>
</DIV>
(и приняв, что и DIV, и P оба имеют 'display: block'), DIV имеет содержимое и инлайн-уровня, и уровня блока. Чтобы легче было определить форматирование, мы примем, что вокруг "Some text" имеется
На диаграмме изображены три бокса, один из которых анонимный, в примере - верхний.
[D]Другими словами: если
Эта модель будет применена в следующем примере, если данные правила:
/* Примечание: ПАгенты HTML могут не рассматривать эти правила */
BODY { display: inline }
P { display: block }
будут использованы в данном документе HTML:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<HEAD>
<TITLE>Анонимный текст, прерываемый блоком. </TITLE>
</HEAD>
<BODY>
Анонимный текст до P.
<P>Содержимое элемента P. </P>
Анонимный текст после P.
</BODY>
Элемент BODY содержит отрывок (C1) анонимного текста, после которого идут элемент уровня блока и второй отрывок анонимного текста (C2). В результате получим анонимный бокс блока> для BODY, содержащий анонимный бокс блока вокруг C1, бокс блока P и второй анонимный бокс блока вокруг C2.
Свойства анонимных боксов наследуются из содержащего неанонимного бокса (в примере: из DIV). Ненаследуемые свойства имеют свои начальные значения. Например, шрифт анонимного бокса наследуется из DIV, но поля имеют значения 0.
Инлайн-элементы это те элементы документа-источника, которые не образуют новых блоков содержимого; содержимое определяется в строке (на месте) (например, выделенные участки текста внутри параграфа, инлайн-изображения и т.п.). Различные значения свойства
[x]. Внутри бокса блока инлайн-бокс участвует в инлайн-контексте форматирования.
[x].
[x]. Боксы-маркёры имеют позицию также вне бокса блока.
В таком документе:
<p>Некоторый <em>выделенный</em> текст.</P>
элемент P генерирует
Такие анонимные инлайн-боксы наследуют наследуемые свойства своего родительского бокса уровня блока. Ненаследуемые свойства получают свои начальные значения. В примере - цвет анонимных начальных боксов наследуется из P, но фон остаётся прозрачным.
Если из контекста ясно, какой тип анонимных боксов подразумевается, то и боксы инлайн, и боксы уровня блока называются в данной спецификации анонимными боксами.
Имеются и другие типы анонимных боксов, возникающие при форматировании таблиц.
[x].
Если
[x].
В ином случае
Элемент, который не может быть отформатирован в пределах одной строчки, не может размещаться в поле последующего блока. Например, элемент
Следующий пример иллюстрирует compact-бокс:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN">
<HTML>
<HEAD>
<TITLE>A compact box example</TITLE>
<STYLE type="text/css">
DT { display: compact }
DD { margin-left: 4em }
</STYLE>
</HEAD>
<BODY>
<DL>
<DT>Short
<DD><P>Description goes here.
<DT>too long for the margin
<DD><P>Description goes here.
</DL>
</BODY>
</HTML>
Этот пример может выглядеть после форматирования так:
short Description goes here
too long for the margin
Description goes here
Свойство 'text-align' можно использовать для выравнивания compact-элемента внутри поля: у левого края поля (
Информацию о том, как
[x].
Если
[x].
Иначе
Бокс 'run-in' используется для run-in-заголовков, как в этом примере:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN">
<HTML>
<HEAD>
<TITLE>Пример бокса run-in</TITLE>
<STYLE type="text/css">
H3 { display: run-in }
</STYLE>
</HEAD>
<BODY>
<H3>Заголовок run-in. </H3>
<P>И параграф текста,
следующий за ним.
</BODY>
</HTML>
Этот пример может форматироваться так:
Заголовок run-in. И
параграф текста,
следующий за ним.
Свойства run-in-элемента наследуются от родителя в дереве-источнике, а не от бокса блока, частью которого он визуально является.
Информацию о том, как
'display'
Значение: inline | block | list-item | run-in | compact | marker | table | inline-table | table-row-group | table-header-group | table-footer-group | table-row | table-column-group | table-column | table-cell | table-caption | none | inherit
Начальное: inline
Применяется: все элементы
Наследуется: нет
Процентное: N/A
Носитель: все
Значения этого свойства имеют следующий смысл:
block
Элемент генерирует основной
inline
Элемент генерирует один или более инлайн-боксов.
list-item
Элемент (например, LI в HTML) генерирует основной
marker
Объявляет генерируемое содержимое до или после бокса-маркёра. Это значение должно использоваться только вместе с псевдоэлементами :before и :after, присоединёнными к элементам уровня блока. В других случаях это значение интерпретируется как
none
Элемент не генерирует боксы в структуре форматирования (т.е. элемент не влияет на вид документа). Элементы-потомки не генерируют никаких боксов; это поведение не может быть переопределено установкой у потомков свойства
Обратите внимание, что отображение 'none' не создаёт невидимый бокс; боксы вообще не создаются. CSS содержит механизмы, делающие возможным генерацию элементом бокса в структуре форматирования, который влияет на структуру форматирования, но невидим. См. детали в разделе Видимость.
run-in и compact
Эти значения создают боксы блока и инлайн, в зависимости от контекста. Свойства, применяемые к боксам run-in и compact, базируются на окончательном статусе боксов (уровень инлайн или блока). Например, свойство 'white-space' применяется только тогда, когда бокс получает уровень блока.
table, inline-table, table-row-group, table-column, table-column-group, table-header-group, table-footer-group, table-row, table-cell и table-caption
При установке этих значений, элемент ведёт себя как элемент таблицы (ограничения описаны в главе Таблицы).
Заметьте, что, хотя начальное значение
Несколько примеров свойства 'display':
P { display: block }
EM { display: inline }
LI { display: list-item }
IMG { display: none } /* Не выводить изображения */
Соответствующие ПА HTML могут игнорировать свойство
В CSS2 бокс может находиться в разных слоях в соответствии со
1Normal flow/Нормальное расположение. В CSS2 нормальное расположение включает форматирование блока для боксов блока, инлайн-форматирование для инлайн-боксов,
2Floats/Поплавки. В модели поплавка бокс сначала накладывается в соответствии с нормальным расположением, затем изымается из расположения и сдвигается влево или вправо, насколько возможно. Содержимое может обтекать по стороне "всплывания" поплавка.
3Абсолютное позиционирование. В модели абсолютного позиционирования бокс удаляется из нормального расположения полностью (это не действует на последующие родственные элементы) и получает позиционирование относительно содержащего блока.
Примечание. Схемы позиционирования CSS2 помогают авторам сделать документы более доступными, позволяя избегать трюков разметки (например, невидимых изображений), используемых для создания эффектов отображения.
Свойства
'position'
Значение: static | relative | absolute | fixed | inherit
Начальное: static
Применяется: ко всем элементам, но не к генерируемому содержимому
Наследуется: нет
Процентное: N/A
Носитель: визуальный
Значения имеют следующий смысл:
static
Бокс является нормальным боксом, расположенным в соответствии с нормальным расположением. Свойства
relative
Позиция бокса высчитывается в соответствии с нормальным расположением. Затем бокс смещается относительно нормального расположения. Если бокс В позиционирован относительно, расположение последующего бокса вычисляется так, как если бы бокс В не имел смещения.
absolute
Позиция бокса (и возможные размеры) определяется свойствами
fixed
Позиция бокса вычисляется в соответствии с моделью 'absolute', но, в дополнение к этому, бокс фиксируется в соответствии с некоторой ссылкой. В случае с непрерывными носителями, бокс фиксируется относительно порта просмотра (и не перемещается при прокрутке). В случае со страничными носителям, бокс фиксируется относительно страницы, даже если страница просматривается через порт просмотра (в случае просмотра перед печатью, например). Авторам может понадобиться специфицировать 'fixed' способом, не зависящим от носителя. Например, автор может захотеть, чтобы бокс оставался в верхней части порта просмотра экрана, но не вверху каждой печатаемой страницы. Две такие спецификации можно разделить, используя правило @media, как здесь:
@media screen {
H1#first { position: fixed }
}
@media print {
H1#first { position: static }
}
Элемент называется позиционированным, если его свойство
'top'
Значение: <length> | <percentage> | auto | inherit
Начальное: auto
Применяется: к позиционируемым элементам
Наследуется: нет
Процентное: относительно высоты содержащего блока
Носитель: визуальный
Это свойство специфицирует, насколько смещён вниз верхний край содержимого бокса относительно верхнего края содержащего блока.
'right'
Значение: <length> | <percentage> | auto | inherit
Начальное: auto
Применяется: к позиционируемым элементам
Наследуется: нет
Процентное: относительно ширины содержащего блока
Носитель: визуальный
Это свойство специфицирует, насколько смещён влево правый край содержимого бокса относительно правого края содержащего блока.
'bottom'
Значение: <length> | <percentage> | auto | inherit
Начальное: auto
Применяется: к позиционируемым элементам
Наследуется: нет
Процентное: относительно высоты содержащего блока
Носитель: визуальный
Это свойство специфицирует, насколько смещён вверх нижний край содержимого бокса относительно низа содержащего блока.
'left'
Значение: <length> | <percentage> | auto | inherit
Начальное: auto
Применяется: к позиционируемым элементам
Наследуется: нет
Процентное: относительно ширины содержащего блока
Носитель: визуальный
Это свойство специфицирует, насколько смещён вправо левый край содержимого бокса относительно левого края содержащего блока.
Значения для этих четырёх свойств имеют следующий смысл:
<length>
Смещением является расстояние от соответствующего края.
<percentage>
Смещением является процент ширины содержащего блока (для
auto
Действие этого значения зависит от того, какое из соответствующих свойств также имеет значение 'auto'. См. также разделы ширина и высота абсолютно позиционируемых, незамещаемых элементов.
Для абсолютно позиционируемых боксов - смещения являются относительными к содержащему блоку бокса. Для относительно позиционируемых боксов - смещения являются относительными к внешним краям самого бокса (т.е. боксу задаётся нормальное расположение, а затем - смещение от этой позиции в соответствии с вышеуказанными свойствами).
Боксы при нормальном обтекании относятся к контексту форматирования, который может быть уровня блока и инлайн, но не тем и другим одновременно. Боксы блока находятся в
В
В
Информацию о разрывах страниц в страничных носителях см. в разделе допустимые разрывы страниц.
В контексте инлайн-форматирования боксы устанавливаются по горизонтали, один за другим, начиная от верха содержащего блока. Горизонтальные поля, рамки и заполнение рассматриваются как отношения между боксами. Боксы могут быть выровнены по вертикали несколькими способами: могут быть выровнены их нижние или верхние края или базовые линии текста внутри них. Прямоугольная область, содержащая боксы, которые образуют строку, называется строчный бокс.
Ширина
Если несколько инлайн-боксов не входят по горизонтали в один
Вообще, левый край
Если суммарная ширина инлайн-боксов в строке меньше, чем ширина
Поскольку инлайн-бокс не может превысить ширину
Вот пример конструкции инлайн-боксов. Следующий параграф (созданный элементом Р уровня блока в HTML) содержит анонимный текст, распределённый между элементами EM и STRONG:
<P>Several <EM>emphasized words</EM> appear
<STRONG>in this</STRONG> sentence, dear.</P>
Элемент P генерирует бокс блока, содержащий пять инлайн-боксов, три из которых - анонимные:
[x]. Anonymous: "Several"
[x]. EM: "emphasized words"
[x]. Anonymous: "appear"
[x]. STRONG: "in this"
[x]. Anonymous: "sentence, dear."
Чтобы сформатировать параграф, ПА вставляет пять боксов в cтрочный бокс. В этом примере бокс, генерируемый для элемента P, устанавливает содержащий блок для строчных боксов. Если содержащий блок достаточно широк, все инлайн-боксы войдут в один cтрочный бокс:
Several emphasized words appear in this sentence, dear.
если нет, инлайн-боксы будут разделены и распределены по нескольким строчным боксам. Предыдущий параграф может быть разделён так:
Several emphasized words appear
in this sentence, dear.
или так:
Several emphasized
words appear in this
sentence, dear.
В предыдущем примере бокс EM был разделён на два бокса EM (назовём их "split1" и "split2"). Поля, рамки, заполнение или текстовый орнамент не имеют видимого эффекта после split1 или до split2.
Рассмотри следующий пример:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN">
<HTML>
<HEAD>
<TITLE>Example of inline flow on several lines</TITLE>
<STYLE type="text/css">
EM {
padding: 2px;
margin: 1em;
border-width: medium;
border-style: dashed;
line-height: 2.4em;
}
</STYLE>
</HEAD>
<BODY>
<P>Several <EM>emphasized words</EM> appear here.</P>
</BODY>
</HTML>
В зависимости от ширины P, боксы могут распределиться так:
[x]. Поле вставлено до "emphasized" и после "words".
[x]. Заполнение вставлено до, сверху и снизу от "emphasized" и после, сверху и снизу от "words". Пунктирная рамка отображается с трёх сторон в каждом случае.
После того, как бокс расположен в соответствии с нормальным расположением, он может быть сдвинут относительно этой позиции. Это называется относительным позиционированием. Смещение бокса (B1) таким способом не окажет воздействия на бокс (B2), следующий за ним: B2 получит такую позицию, как будто B1 не смещён и B2 не перемещается после применения смещения B1. Это предполагает, что
Относительно позиционированные боксы сохраняют свои нормальные размеры и прорисовку, включая разрывы строк и заполнение, первоначально зарезервированные за ними. Относительно позиционированный бокс устанавливает новый содержащий блок для нормальной прорисовки дочерних и позиционированных потомков.
Относительно позиционированный бокс генерируется, когда свойство
Динамическое перемещение боксов, позиционированных относительно, может создавать эффекты анимации в среде скриптов (см. также свойство 'visibility').
Примеры относительного позиционирования есть в разделе Сравнение нормального позиционирования, поплавков и абсолютного позиционирования.
Поплавок это бокс, который "всплывает" (смещается) влево или вправо на текущей строке. Самое интересное в поведении поплавка (или "всплывающего", или "плавающего" бокса) то, что содержимое может обтекать его по сторонам (или это может быть запрещено свойством
Далее следует введение в позиционирование поплавков и обтекание содержимого; точные правила, управляющие поведением поплавков, даны в описании свойства
Всплывающий бокс обязан иметь явно установленную ширину (назначенную свойством 'width', или свою внутреннюю ширину - в случае замещаемых элементов). Любой всплывающий бокс становится боксом блока, который сдвигается влево или вправо, пока его внешний край не коснётся края содержащего блока или внешнего края другого поплавка. Верх всплывающего бокса выравнивается с верхом текущего
Пока поплавок не всплыл, непозиционированные боксы блока, созданные до и после всплывающего бокса, всплывают вертикально, как будто поплавка не существует. Однако строчные боксы, созданные сразу после поплавка, уменьшаются, чтобы дать пространство для всплывающего бокса. Любое содержимое на текущей строке до всплывающего бокса перерисовывается на первой доступной строке с противоположной стороны поплавка.
Несколько поплавков могут быть смежными, и эта модель применяется также к смежным поплавкам на той же строке.
Следующее правило вызывает всплывание влево всех боксов IMG с class="icon" (и устанавливает левое поле в '0'):
IMG.icon {
float: left;
margin-left: 0;
}
Рассмотрим следующие HTML и таблицу стилей:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN">
<HTML>
<HEAD>
<TITLE>Float example</TITLE>
<STYLE type="text/css">
IMG { float: left }
BODY, P, IMG { margin: 2em }
</STYLE>
</HEAD>
<BODY>
<P><IMG src=img.gif alt="This image will illustrate floats">
Some sample text that has no other...
</BODY>
</HTML>
IMG-бокс всплывает влево. Последующее содержимое форматируется справа от поплавка, начиная с той же строки, где находится поплавок. Строчные боксы справа от поплавка укорачиваются из-за присутствия поплавка, но имеют свою "нормальную" ширину (как в содержащем блоке, установленном элементом P) после поплавка. Этот документ может быть сформатирован так:
Форматирование могло бы быть точно таким же, если бы документ был следующим:
<BODY>
<P>Some sample text
<IMG src=img.gif alt="This image will illustrate floats">
that has no other...
</BODY>
поскольку содержимое слева от поплавка замещается поплавком и обтекает его вниз по его правой стороне.
Поля всплывающих боксов никогда не сжимаются полями смежных боксов. Таким образом, в предыдущем примере вертикальные поля не сжимаются между боксом P и всплывающим IMG-боксом.
Поплавок может перекрывать другие боксы при нормальном позиционировании (например, когда нормально позиционированный бокс, следующий за поплавком, имеет отрицательные поля). Когда инлайн-бокс перекрывается поплавком, содержимое, фон и рамки инлайн-бокса отображаются впереди поплавка. Если блок бокса перекрывается, фон и рамки бокса блока отображаются позади поплавка и видны только там, где бокс прозрачен. Содержимое бокса блока отображается спереди от поплавка.
Вот другая иллюстрация, показывающая, что происходит, когда поплавок перекрывает рамки элемента с нормальным всплыванием.
Всплывающее изображение скрывает рамки перекрываемого бокса блока.
[D]Следующий пример иллюстрирует использование свойства
При таком правиле:
P { clear: left }
форматирование может выглядеть так:
Оба параграфа установлены в 'clear: left', что "выталкивает вниз" второй параграф в положение под поплавком - его верхнее поле растягивается, чтобы выполнить это (см. свойство 'clear').
[D]'float
Значение: left | right | none | inherit
Начальное: none
Применяется: ко всему, кроме позиционированных элементов и генерируемого содержимого
Наследуется: нет
Процентное: N/A
Носитель: визуальный
Это свойство специфицирует, должен ли бокс всплывать влево, вправо или не всплывать вообще. Оно может быть установлено для элементов, генерирующих боксы, которые не позиционированы абсолютно.
Значения этого свойства имеют следующий смысл:
left
Элемент генерирует
right
То же, что
none
Бокс не всплывает.
Вот точные правила, управляющие поведением поплавка:
1Левый внешний край всплывающего влево бокса не может быть слева от левого края его содержащего блока. Аналогичное правило действует для элементов, всплывающих вправо.
2Если текущий бокс всплывает влево и имеются другие всплывающие влево боксы, сгенерированные элементами в документе-источнике ранее, тогда для каждого такого предшествующего бокса или левый внешний край текущего бокса обязан быть справа от правого внешнего края предшествующего бокса, или его верх обязан быть ниже, чем низ предшествующего бокса. Аналогичное правило действует для боксов, всплывающих вправо.
3Правый внешний край всплывающего влево бокса не может быть справа от левого внешнего края какого-либо всплывающего вправо бокса, находящегося справа от него. Аналогичные правила действуют для элементов, всплывающих вправо.
4Верхний внешний край всплывающего бокса не может быть выше, чем верх его содержащего блока.
5Верхний внешний край всплывающего бокса не может быть выше, чем верхний внешний край любого всплывающего бокса блока, сгенерированного элементом ранее в документе-источнике.
6Верхний внешний край всплывающего бокса элемента не может быть выше, чем верх любого
7Всплывающий влево бокс, имеющий слева от себя другой всплывающий влево бокс, не может иметь свой правый внешний край справа от правого края своего содержащего блока. (Говоря шире: левый поплавок не может находиться у правого края, если только он уже не находится слева так далеко, насколько это возможно.)Аналогичное правило действует для элементов, всплывающих вправо.
8Всплывающий бокс должен быть размещён так высоко, насколько это возможно.
9Всплывающий влево бокс обязан быть размещён так далеко влево, насколько это возможно, а всплывающий вправо бокс обязан быть размещён так далеко вправо, насколько это возможно. Более высокая позиция имеет преимущество перед позицией, идущей далее влево/вправо.
'clear'
Значение: none | left | right | both | inherit
Начальное: none
Применяется: к элементам уровня блока
Наследуется: нет
Процентное: N/A
Носитель: визуальный
Это свойство указывает, какие стороны бокса(ов) элемента не могут быть смежными с ранее всплывшим боксом. (Может быть такое, что элемент сам имеет всплывающих потомков; свойство
Это свойство может быть специфицировано только для элементов уровня блока (включая поплавки). Для компактных и втягивающихся боксов это свойство применяется к окончательному боксу блока, к которому компактный или втягивающийся бокс принадлежит.
Значения имеют следующий смысл при применении к невсплывающим боксам блока:
left
Верхнее поле генерируемого бокса увеличивается настолько, чтобы верхний край рамки был ниже нижнего внешнего края любого всплывающего влево бокса, являющегося результатом действия предыдущих элементов в документе-источнике.
right
Верхнее поле генерируемого бокса увеличивается настолько, чтобы верхний край рамки был ниже нижнего внешнего края любого всплывающего вправо бокса, являющегося результатом действия предыдущих элементов в документе-источнике.
both
Генерируемый бокс перемещается ниже всех всплывающих боксов элементов, появившихся ранее в документе-источнике.
none
Нет ограничений на позицию бокса относительно поплавков.
Если свойство установлено на всплывающие элементы, результатом будет модификация правил позиционирования поплавка. Прибавляется дополнительное условие (#10):
[x]. Верхний внешний край поплавка обязан быть ниже нижнего внешнего края всех ранее всплывающих влево боксов (если 'clear: left'), или всех ранее всплывающих вправо боксов (если 'clear: right'), или обоих ('clear: both').
В модели абсолютного позиционирования бокс смещается явно относительно своего содержащего блока. Он полностью удаляется из нормального позиционирования (не влияет на последующих родственников). Абсолютно позиционированный бокс устанавливает новый содержащий блок для нормально позиционируемых дочерних боксов и позиционируемых потомков. В то же время, содержимое абсолютно позиционированных элементов не всплывает вокруг других боксов. Эти элементы могут или могут не закрывать собой содержимое другого бокса, в зависимости от уровней в стэке у перекрываемых боксов.
Ссылки в данной спецификации на
Фиксированное позиционирование это подкатегория абсолютного позиционирования. Единственное отличие в том, что для фиксированно позиционированного бокса содержащий блок устанавливается портом просмотра. Для непрерывных носителей фиксированные боксы не перемещаются при прокрутке документа. В этом смысле они похожи на фиксированные фоновые изображения. Для страничных носителей боксы с фиксированной позицией повторяются на каждой странице. Это используется для размещения, к примеру, подписи внизу каждой страницы.
Авторы могут использовать фиксированное позиционирование для создания фрэймоподобных презентаций. Рассмотрим следующую структуру фрэймов:
Этого можно добиться с помощью такого документа HTML и таблицы стилей:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN">
<HTML>
<HEAD>
<TITLE>Документ с фрэймами в CSS2</TITLE>
<STYLE type="text/css">
BODY { height: 8.5in } /* Необходим далее для процентной высоты */
#header {
position: fixed;
width: 100%;
height: 15%;
top: 0;
right: 0;
bottom: auto;
left: 0;
}
#sidebar {
position: fixed;
width: 10em;
height: auto;
top: 15%;
right: auto;
bottom: 100px;
left: 0;
}
#main {
position: fixed;
width: auto;
height: auto;
top: 15%;
right: 0;
bottom: 100px;
left: 10em;
}
#footer {
position: fixed;
width: 100%;
height: 100px;
top: auto;
right: 0;
bottom: 0;
left: 0;
}
</STYLE>
</HEAD>
<BODY>
<DIV id="header"> ... </DIV>
<DIV id="sidebar"> ... </DIV>
<DIV id="main"> ... </DIV>
<DIV id="footer"> ... </DIV>
</BODY>
</HTML>
Три свойства, влияющие на генерацию и структуру бокса --
1Если
2Иначе, если
3Иначе, если
4Иначе, оставшиеся свойства
Примечание. CSS2 не специфицирует поведение структуры, если значения этих свойств изменяются скриптами. Например, что произойдёт, если элемент, имеющий 'width: auto' изменит позицию? Будет ли перерисовано содержимое или форматирование останется первоначальным? Ответ находится за пределами данного документа, и похоже, что такое поведение отличалось для ранних реализаций CSS2.
Чтобы проиллюстрировать разницу между нормальным и относительным позиционированием, поплавками и
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN">
<HTML>
<HEAD>
<TITLE>Сравнение схем позиционирования</TITLE>
</HEAD>
<BODY>
<P>Beginning of body contents.
<SPAN id="outer"> Start of outer contents.
<SPAN id="inner"> Inner contents.</SPAN>
End of outer contents.</SPAN>
End of body contents.
</P>
</BODY>
</HTML>
Для этого документа мы принимаем следующие правила:
BODY { display: block; line-height: 200%;
width: 400px; height: 400px }
P { display: block }
SPAN { display: inline }
Окончательные позиции боксов, генерируемых внешними и внутренними элементами, различны в каждом примере. В каждой иллюстрации числа слева от иллюстрации обозначают позицию нормального позиционирования строк. (Примечание: иллюстрации используют различные горизонтальные и вертикальные масштабы.)
Рассмотрим следующие объявления CSS для
#outer { color: red }
#inner { color: blue }
Элемент P содержит всё инлайн-содержимое:
Чтобы увидеть действие относительного позиционирования, мы специфицируем:
#outer { position: relative; top: -12px; color: red }
#inner { position: relative; top: 12px; color: blue }
Текст расположен нормально до элемента
Содержание
Обратите внимание, что на содержимое, следующее после
Заметьте также, что, имея смещение для
Теперь рассмотрим эффект от всплывания текста элемента
#outer { color: red }
#inner { float: right; width: 130px; color: blue }
Текст нормально расположен до бокса
Чтобы увидеть действие свойства
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN">
<HTML>
<HEAD>
<TITLE>Сравнение схем позиционирования II</TITLE>
</HEAD>
<BODY>
<P>Beginning of body contents.
<SPAN id=outer> Start of outer contents.
<SPAN id=inner> Inner contents.</SPAN>
<SPAN id=sibling> Sibling contents.</SPAN>
End of outer contents.</SPAN>
End of body contents.
</P>
</BODY>
</HTML>
Следующие правила:
#inner { float: right; width: 130px; color: blue }
#sibling { color: red }
заставляют бокс
Однако, если свойство
#inner { float: right; width: 130px; color: blue }
#sibling { clear: right; color: red }
Наконец, мы рассмотрим действие абсолютного позиционирования. Вот объявления CSS для
#outer {
position: absolute;
top: 200px; left: 200px;
width: 200px;
color: red;
}
#inner { color: blue }
которые позиционируют верх бокса
#outer {
position: relative;
color: red
}
#inner {
position: absolute;
top: 200px; left: -100px;
height: 130px; width: 130px;
color: blue;
}
В результате получится примерно так:
Если мы не позиционируем бокс outer:
#outer { color: red }
#inner {
position: absolute;
top: 200px; left: -100px;
height: 130px; width: 130px;
color: blue;
}
содержащий блок для
Относительное и абсолютное позиционирование может использоваться для выполнения смены баннеров, как показано в следующем примере. Такой документ:
<P style="position: relative; margin-right: 10px; left: 10px;">
I used two red hyphens to serve as a change bar. They
will "float" to the left of the line containing THIS
<SPAN style="position: absolute; top: auto; left: -1em; color: red;">--</SPAN>
word.</P>
может дать в результате примерно это:
Сначала параграф (стороны содержащего блока которого показаны на иллюстрации) расположен нормально. Затем он смещается на '10px' от левого края содержащего блока (таким образом, правое поле в '10px' резервируется для предполагаемого смещения). Два дефиса, работающие как сменяющиеся баннеры, изымаются из расположения и позиционируются на текущей строке (поскольку 'top: auto'), на '-1em' от левого края своего содержащего блока (установленного P в свою окончательную позицию). В результате сменяющиеся баннеры "всплывают" слева от текущей строки.
В последующих разделах выражение "спереди от" означает ближе к пользователю, смотрящему на экран.
В CSS2 каждый бокс имеет позицию в трёх измерениях. В дополнение к позиции относительно вертикали и горизонтали, боксы расположены вдоль "z-axis/оси z" и форматируются один над другим. Позиции по оси z обычно рассматриваются, когда боксы перекрываются визуально. В этом разделе обсуждается, как боксы можно позиционировать относительно оси z.
Каждый бокс принадлежит к
Корневой элемент создаёт
Элемент, устанавливающий
Бокс элемента имеет тот же
'z-index'
Значение: auto | <integer> | inherit
Начальное: auto
Применяется: к позиционированным элементам
Наследуется: нет
Процентное: N/A
Носитель: визуальный
Для позиционированных боксов свойство
1
2Устанавливает ли бокс
Значения имеют следующий смысл:
<integer>
Это целое число -
auto
В следующем примере уровни стэка боксов (именованных своими атрибутами "id"): "text2"=0, "image"=1, "text3"=2 и "text1"=3. Уровень стэка для "text2" наследуется от корневого бокса. Остальные - специфицируются свойством 'z-index'.
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN">
<HTML>
<HEAD>
<TITLE>Z-позиционирование</TITLE>
<STYLE type="text/css">
.pile {
position: absolute;
left: 2in;
top: 2in;
width: 3in;
height: 3in;
}
</STYLE>
</HEAD>
<BODY>
<P>
<IMG id="image" class="pile"
src="butterfly.gif" alt="A butterfly image"
style="z-index: 1">
<DIV id="text1" class="pile"
style="z-index: 3">
This text will overlay the butterfly image.
</DIV>
<DIV id="text2">
This text will be beneath everything.
</DIV>
<DIV id="text3" class="pile"
style="z-index: 2">
This text will underlay text1, but overlay the butterfly image
</DIV>
</BODY>
</HTML>
Этот пример демонстрирует понятие прозрачности. Поведение по умолчанию бокса - позволять боксам, находящимся сзади, быть видимыми сквозь прозрачные области своего содержимого. В примере каждый бокс прозрачно накладывается на боксы ниже себя. Это поведение может быть переопределено путём использования одного из существующих свойств фона.
Символы в некоторых видах письма записываются справа налево. В некоторых документах, особенно на арабском и еврейском, и в некоторых контекстах смешивания языков текст в одиночном (визуально отображаемом) блоке может появляться со смешанным направлением письма. Этот феномен называется bidirectionality\двунаправленность, или сокращённо -
Стандарт Unicode ( [UNICODE] , раздел 3.11) даёт сложный алгоритм определения направления текста. Этот алгоритм состоит из подразумеваемой части, базирующейся на свойствах символов, а также явной, контролирующей внедрения и переопределения. CSS2 обращается к этому алгоритму для достижения соответствующего двунаправленного отображения. Свойства
Если документ содержит символы справа-налево и если ПА отображает эти символы соответствующими глифами (а не произвольно замещающими, такими как знак кавычки, 16-ричный код, чёрный бокс и т.п.), то ПА обязан применять двунаправленный алгоритм. Это кажущееся односторонним требование отражает тот факт, что, хотя не каждый еврейский или арабский документ содержит текст разных направлений, велика вероятность того, что эти документы могут содержать текст слева-направо (например, числа, текст из других языков).
Поскольку направление текста зависит от структуры и семантики документа, эти свойства должны в большинстве случаев использоваться только дизайнерами описания типа документа (ОТД) или авторами специальных документов. Если таблица стилей по умолчанию специфицирует эти свойства, то авторы и пользователи не должны специфицировать правила для их переопределения. Типичным исключением будет переопределение bidi-поведения в ПА, если этот ПА производит транслитерацию идиша (обычно записанного буквами иврита) на латиницу по запросу пользователя.
Спецификация HTML 4.0 ( [HTML40] , раздел 8.2) определяет двунаправленное поведение для элементов HTML. Соответствующие HTML ПАгенты могут поэтому игнорировать свойства
'direction'
Значение: ltr | rtl | inherit
Начальное: ltr
Применяется: ко всем элементам, но см. текст
Наследуется: да
Процентное: N/A
Носитель: визуальный
Это свойство специфицирует базовое направление письма блоков и направление внедрений и переопределений (см. 'unicode-bidi') для двунаправленного алгоритма Unicode. Дополнительно оно специфицирует направление для столбца таблицы, направление горизонтального переполнения и позицию неполной последней строки блока в том случае, если 'text-align: justify'.
Значения этого свойства имеют следующий смысл:
ltr
Направление слева направо.
rtl
Справа налево.
Чтобы свойство
Примечание. Свойство
'unicode-bidi'
Значение: normal | embed | bidi-override | inherit
Начальное: normal
Применяется: ко всем элементам, но см. текст
Наследуется: нет
Процентное: N/A
Носитель: визуальный
Значения этого свойства имеют следующий смысл:
normal
Элемент не открывает дополнительный уровень внедрения относительно двунаправленного алгоритма. Для элементов инлайн-уровня неявное переупорядочивание работает вне границ элемента.
embed
Если элемент - инлайн-уровня, это значение открывает дополнительный уровень внедрения относительно двунаправленного алгоритма. Направление в этом уровне внедрения задаётся свойством
bidi-override
Если элемент - уровня блока или инлайн и содержит только элементы инлайн-уровня, это значение создаёт переопределение. Это означает, что внутри элемента переупорядочивание выполняется строго в соответствии со свойством
Окончательный порядок символов в каждом элементе уровня блока - такой, как если бы bidi-код управления был добавлен так, как описано выше, разметка была бы вырезана, а результирующая последовательность символов - передана в двунаправленный алгоритм Unicode в обычный текст, который производил бы те же самые разрывы строк, что и стилизованный текст. В этом процессе нетекстуальные объекты, такие как изображения, рассматриваются как нейтральные символы, если только их свойство 'unicode-bidi' не имеет значений, отличных от 'normal', тогда они рассматриваются как полужирные (strong) символы в
Пожалуйста, обратите внимание, что, для того чтобы иметь возможность разместить инлайн-боксы в одном направлении (все слева-направо или все справа-налево), может понадобиться создание дополнительных инлайн-боксов (включая анонимные инлайн-боксы), и понадобится разделить и переупорядочить некоторые инлайн-боксы до размещения.
Поскольку алгоритм Unicode имеет предел - 15 уровней внедрения, лучше не использовать 'unicode-bidi' со значениями, отличными от 'normal', если отсутствуют подходящие. Значение 'inherit' должно использоваться особенно осторожно. Однако для элементов, которые обычно предполагается отображать как блоки, установка 'unicode-bidi: embed' предпочтительнее для удержания элементов вместе в том случае, когда дисплей изменяется на инлайн (см. пример ниже).
В следующем примере показан документ XML с двунаправленным текстом. Он иллюстрирует важный принцип дизайна: дизайнеры ОТД должны принимать в расчёт bidi и в собственно языке (элементы и атрибуты), и в сопровождающих таблицах стилей. Таблицы стилей должны быть разработаны так, чтобы правила bidi были отделены от других правил стиля. Правила bidi не должны переопределяться другими таблицами стилей, чтобы сохранить поведение bidi языка и ОТД.
Здесь буквы нижнего регистра присущи символам слева-направо, а буквы верхнего регистра - символам справа-налево:
<HEBREW>
<PAR>HEBREW1 HEBREW2 english3 HEBREW4 HEBREW5</PAR>
<PAR>HEBREW6 <EMPH>HEBREW7</EMPH> HEBREW8</PAR>
</HEBREW>
<ENGLISH>
<PAR>english9 english10 english11 HEBREW12 HEBREW13</PAR>
<PAR>english14 english15 english16</PAR>
<PAR>english17 <HE-QUO>HEBREW18 english19 HEBREW20</HE-QUO></PAR>
</ENGLISH>
Поскольку это - XML, таблица стилей отвечает за направление письма. Это таблица стилей:
/* Правила для bidi */
HEBREW, HE-QUO {direction: rtl; unicode-bidi: embed}
ENGLISH {direction: ltr; unicode-bidi: embed}
/* Правила для представления */
HEBREW, ENGLISH, PAR {display: block}
EMPH {font-weight: bold}
Элемент HEBREW это блок с базовым направлением справа-налево, элемент ENGLISH это блок с базовым направлением слева-направо. PARы - это блоки, наследующие базовое направление от своих родителей. Таким образом, первые два PARа готовы начаться справа сверху, а последние три готовы начаться слева сверху. Обратите внимание, пожалуйста, что HEBREW и ENGLISH выбраны как имена элементов лишь для ясности; обычно имена элементов должны относиться к структуре, без ссылок на языки.
Элемент EMPH - уровня инлайн, и, поскольку его значение для 'unicode-bidi' - 'normal' (начальное значение), он не оказывает воздействия на порядок расположения текста. Элемент HE-QUO, напротив, создаёт внедрение.
Если длина строки достаточно большая, форматирование текста может выглядеть примерно так:
5WERBEH 4WERBEH english3 2WERBEH 1WERBEH
8WERBEH 7WERBEH 6WERBEH
english9 english10 english11 13WERBEH 12WERBEH
english14 english15 english16
english17 20WERBEH english19 18WERBEH
Заметьте, что внедрение HE-QUO заставляет HEBREW18 находиться справа от english19.
Если строки должны быть разбиты, то выглядеть будет примерно так:
2WERBEH 1WERBEH
-EH 4WERBEH english3
5WERB
-EH 7WERBEH 6WERBEH
8WERB
english9 english10 en-
glish11 12WERBEH
13WERBEH
english14 english15
english16
english17 18WERBEH
20WERBEH english19
Поскольку HEBREW18 обязан быть прочитан до english19, он находится в строке над english19. Простой разрыв строки из предыдущего форматирования не должен сработать.
Заметьте также, что первый слог из english19 может войти на предыдущую строку, но перенос слов слева-направо в контекст справа-налево и наоборот обычно подавляется, чтобы исключить отображение знака переноса в середине строки.
Лекция 10. Модель визуального форматирования. Детали
Позиция и размер бокса(ов) элемента иногда вычисляются относительно определённого прямоугольника, называемого
1
2Для других элементов, если только элемент не позиционирован абсолютно,
3Если элемент имеет 'position: fixed', то
4
Если элемент имеет 'position: absolute', то
1Если предок - уровня блока,
2Если предок - инлайн-уровня,
1Если 'direction' - 'ltr', верхний и левый края содержащего блока являются верхним и левым краями первого бокса, генерируемого предком, а нижний и правый края являются нижним и правым краями содержимого последнего бокса предка.
2Если 'direction' - 'rtl', верхний и правый края содержащего блока являются верхним и правым краями первого бокса, генерируемого предком, а нижний и левый края являются нижним и левым краями содержимого последнего бокса предка.
Если такого предка нет, край содержимого бокса корневого элемента устанавливает
Содержащие блоки (СБ) без позиционирования в этом документе:
<HTML>
<HEAD>
<TITLE>Illustration of containing blocks</TITLE>
</HEAD>
<BODY id="body">
<DIV id="div1">
<P id="p1">This is text in the first paragraph...</P>
<P id="p2">This is text <EM id="em1"> in the
<STRONG id="strong1">second</STRONG> paragraph.</EM></P>
</DIV>
</BODY>
</HTML>
устанавливаются так:
| Для бокса, генерируемого | СБ устанавливается |
|---|---|
| body | начальным СБ (зависит от ПА) |
| div1 | body |
| p1 | div1 |
| p2 | div1 |
| em1 | p2 |
| strong1 | p2 |
Если позиция "div1":
#div1 { position: absolute; left: 50px; top: 50px }
то его содержащий блок - уже не <body>; им становится начальный содержащий блок (поскольку отсутствуют другие позиционированные боксы предка).
Также, если позиция "em1":
#div1 { position: absolute; left: 50px; top: 50px }
#em1 { position: absolute; left: 100px; top: 100px }
таблица содержащих блоков будет:
| Для бокса, генерируемого | СБ устанавливается |
|---|---|
| body | начальным СБ |
| div1 | начальным СБ |
| p1 | div1 |
| p2 | div1 |
| em1 | div1 |
| strong1 | em1 |
При позиционировании "em1", его содержащим блоком становится ближайший позиционированный бокс предка (т.е. тот, который сгенерирован "div1").
'width'
Значение: <length> | <percentage> | auto | inherit
Начальное: auto
Применяется: ко всем элементам, кроме незамещаемых инлайн-элементов, рядов таблиц и групп рядов
Наследуется: нет
Процентное: относительно ширины содержащего блока
Носитель: визуальный
Это свойство специфицирует ширину содержимого боксов, генерируемых элементами уровня блока и замещаемыми элементами.
Это свойство не применяется к незамещаемым элементам инлайн-уровня. Ширина боксов незамещаемых инлайн-элементов, это ширина отображаемого внутри них содержимого (до любого относительного смещения дочерних элементов). Напоминаем, что инлайн-боксы всплывают внутри строчных боксов. Ширина строчных боксов задаётся их содержащим блоком, Но может быть уменьшена при наличии поплавков.
Ширина бокса замещаемого элемента является внутренней и может масштабироваться ПА, если значение этого свойства отличается от 'auto'. Значения имеют следующий смысл:
<length>
Специфицирует фиксированную ширину.
<percentage>
Специфицирует ширину в процентах. Проценты вычисляются относительно ширины содержащего блока генерируемого бокса.
auto
Ширина зависит от значений других свойств. См. следующие разделы.
Отрицательные значения для
Это правило фиксирует ширину содержимого параграфа в 100 пикселов:
P { width: 100px }
Вычисленные значения свойств
1инлайн, незамещаемые элементы
2инлайн, замещаемые элементы
3уровень блока, незамещаемые элементы при нормальном всплывании
4уровень блока, замещаемые элементы при нормальном всплывании
5всплывание, незамещаемые элементы
6всплывание, замещаемые элементы
7абсолютно позиционированные незамещаемые элементы
8абсолютно позиционированные замещаемые элементы
Пункты 1-6 включают относительное позиционирование.
Свойство
Специфицированное значение 'auto' для 'left', 'right', 'margin-left' или 'margin-right' становится вычисленным значением '0'. Специфицированное значение 'auto' для
Если 'left' или 'right' заданы как 'auto', их вычисленное значение - '0'. Следующее условие обязано соблюдаться между свойствами:
'margin-left' + 'border-left-width' + 'padding-left' +
(Если стиль рамки - 'none', используйте '0' как ширину рамки.) Если все вышеуказанные имеют специфицированные значения, отличные от 'auto', то говорят, что значения "переограниченны", и одно из вычисленных значений должно будет получить значение, отличное от своего специфицированного. Если свойство 'direction' имеет значение 'ltr', специфицированное значение 'margin-right' игнорируется и новое значение вычисляется так, чтобы сделать равенство верным. Если значение 'direction' - 'rtl', то же самое выполняется для 'margin-left'.
Если имеется только одно значение, специфицированное как 'auto', его вычисленное значение является результатом уравнения.
Если
Если и 'margin-left', и 'margin-right' - 'auto', их вычисленные значения равны.
Если 'left' или 'right' - 'auto', их вычисленное значение - '0'. Если
Если 'left', 'right',
Если 'left', 'right', 'margin-left' или 'margin-right' специфицированы как 'auto', их вычисленное значение - '0'. Если
Условие, определяющее вычисленные значения для этих элементов:
'left' + 'margin-left' + 'border-left-width' + 'padding-left' +
(Если стиль рамки - 'none', используется '0' как значение ширины рамки.) Решение данного условия достигается серией замен в следующем порядке:
1Если 'left' имеет значение 'auto' при 'direction' - 'ltr', 'auto' заменяется расстоянием от левого края содержащего блока до края левого поля гипотетического бокса, который мог бы быть первым боксом элемента, если его свойство 'position' было бы 'static'. (Но вместо того, чтобы действительно рассчитать этот бокс, ПА свободны предполагать о его возможной позиции.) Значение является отрицательным, если гипотетический бокс находится слева от содержащего блока.
2Если 'right' имеет значение 'auto' при 'direction' - 'rtl', 'auto' заменяется расстоянием от правого края содержащего блока до края правого поля того же гипотетического бокса, что и выше. Значение является положительным, если гипотетический бокс находится слева от края содержащего блока.
3Если
4Если 'left', 'right' или
5Если в данной точке 'margin-left' и 'margin-right' всё ещё 'auto', уравнение решается с дополнительным условием: что эти два поля обязаны получить одинаковые значения.
6Если в данной точке осталось только одно 'auto', уравнение решается с этим значением.
7Если в данной точке значения переограниченны, игнорируется значение 'left' (если 'direction' - 'rtl') или 'right' (если 'direction' - 'ltr') и уравнение решается с этим значением.
Ситуация напоминает предыдущую, за исключением того, что элемент имеет внутреннюю ширину. Последовательность замен теперь:
1Если
2Если 'left' имеет значение 'auto' при 'direction' - 'ltr', 'auto' замещается расстоянием от левого края содержащего блока до края левого поля гипотетического бокса, который мог бы быть первым боксом элемента, если его свойство 'position' было бы 'static'. (Но вместо того, чтобы действительно рассчитать этот бокс, ПА свободны предполагать о его возможной позиции.) Значение является отрицательным, если гипотетический бокс находится слева от содержащего блока.
3Если 'right' имеет значение 'auto' при 'direction' - 'rtl', 'auto' заменяется расстоянием от правого края содержащего блока до края правого поля того же гипотетического бокса, что и выше. Значение является положительным, если гипотетический бокс находится слева от края содержащего блока.
4Если 'left' или 'right' - 'auto', любое 'auto' для 'margin-left' или 'margin-right' замещается на '0'.
5Если в данной точке 'margin-left' и 'margin-right' всё ещё 'auto', уравнение решается с дополнительным условием: что эти два поля обязаны получить одинаковые значения.
6Если в данной точке осталось только одно 'auto', уравнение решается с этим значением.
7Если в данной точке значения переограниченны, игнорируется значение 'left' (если 'direction' - 'rtl') или 'right' (если 'direction' - 'ltr') и уравнение решается с этим значением.
'min-width'
Значение: <length> | <percentage> | inherit
Начальное: зависит от ПА
Применяется: ко всем элементам, за исключением незамещаемых инлайн элементов и элементов таблицы
Наследуется: нет
Процентное: относительно ширины содержащего блока
Носитель: визуальный
'max-width'
Значение: <length> | <percentage> | none | inherit
Начальное: none
Применяется: ко всем элементам, за исключением незамещаемых инлайн элементов и элементов таблицы
Наследуется: нет
Процентное: относительно ширины содержащего блока
Носитель: визуальный
Эти два свойства позволяют авторам ограничить ширину бокса определёнными рамками.
Значения имеют следующий смысл:
<length>
Специфицирует фиксированную минимальную и максимальную вычисленную ширину.
<percentage>
Специфицирует проценты для определения вычисленного значения. Проценты высчитываются относительно ширины содержащего блока генерируемого бокса.
none
(Только для 'max-width') Нет ограничений на ширину бокса.
Следующий алгоритм описывает, как эти два свойства воздействуют на вычисленное значение свойства
1Ширина вычисляется (без 'min-width' и 'max-width') по вышеприведённым правилам "Вычисление ширины и полей".
2Если вычисленное значение 'min-width' больше, чем значение 'max-width', то 'max-width' устанавливается в значение 'min-width'.
3Если вычисленная ширина больше, чем 'max-width', вышеприведённые правила применяются вновь, но на этот раз с использованием значения 'max-width' как специфицированного для
4Если вычисленная ширина меньше, чем 'min-width', вышеприведённые правила применяются вновь, но на этот раз с использованием значения 'min-width' как специфицированного для
ПА может определить неотрицательное минимальное значение для свойства 'min-width', которое (значение) может варьироваться от элемента к элементу и даже зависеть от других свойств. Если 'min-width' выходит за нижнюю границу этого лимита из-за того, что было установлено явно, или из-за того, что оно 'auto' и вышеприведённые правила сделают его слишком маленьким, ПА может использовать минимальное значение как вычисленное значение.
'height'
Значение:
Начальное: auto
Применяется: ко всем элементам, кроме незамещаемых инлайн-элементов, столбцов и групп столбцов таблицы
Наследуется: нет
Процентное: см. текст
Носитель: визуальный
Свойство определяет высоту содержимого боксов, генерируемых элементами уровня блока и замещаемыми элементами.
Это свойство не применяется к незамещаемым элементам инлайн-уровня. Высота боксов незамещаемых инлайн-элементов задаётся значением (возможно, наследуемым) 'line-height' элемента.
Значения имеют следующий смысл:
<length>
Специфицирует фиксированную высоту.
<percentage>
Специфицирует высоту в процентах. Проценты высчитываются относительно высоты содержащего блока генерируемого бокса. Если высота содержащего блока не специфицирована явно (т е. зависит от высоты содержимого), значение интерпретируется как 'auto'.
auto
Высота зависит от значений других свойств. См. ниже.
Отрицательные значения
Следующее правило фиксирует высоту параграфа в 100 пикселов:
P { height: 100px }
Параграф, требующий высоты более 100 пикселов, будет вызывать переполнение в соответствии со свойством 'overflow'.
Для вычисления значений 'top', 'margin-top',
1инлайн, незамещаемые элементы
2инлайн, замещаемые элементы
3уровень блока, незамещаемые элементы при нормальном всплывании
4уровень блока, замещаемые элементы при нормальном всплывании
5всплывание, незамещаемые элементы
6всплывание, замещаемые элементы
7абсолютно позиционированные незамещаемые элементы
8абсолютно позиционированные замещаемые элементы
Пункты 1-6 включают относительное позиционирование.
Если 'top', 'bottom', 'margin-top' или 'margin-bottom' установлены в 'auto', их вычисленное значение будет '0'. Свойство
Если 'top', 'bottom', 'margin-top' или 'margin-bottom' установлены в 'auto', их вычисленное значение будет '0'. Если
Если 'top', 'bottom', 'margin-top' или 'margin-bottom' - 'auto', их вычисленное значение - '0'. Если
Для абсолютно позиционированных элементов вертикальные размеры должны удовлетворять следующему условию:
'top' + 'margin-top' + 'border-top-width' + 'padding-top' +
(Если стиль рамки - 'none', '0' используется как значение ширины рамки.) Решение данного уравнения достигается путём проведения ряда замен в следующем порядке:
1Если 'top' имеет значение 'auto', оно заменяется расстоянием от верхнего края содержащего блока до края верхнего поля гипотетического бокса, который мог бы быть первым боксом элемента, если его свойство 'position' было бы 'static'. (Но вместо того, чтобы действительно рассчитать этот бокс, ПА свободны предполагать о его возможной позиции.) Значение является отрицательным, если гипотетический бокс находится сверху от содержащего блока.
2Если и
3Если 'bottom' или
4Если в данной точке и 'margin-top', и 'margin-bottom' - всё ещё 'auto', уравнение решается с помощью дополнительного условия: что эти два поля обязаны получить одинаковые значения.
5Если в данной точке имеется только одно значение 'auto', уравнение решается с этим значением.
6Если в данной точке значения переограничены, игнорируется значение 'bottom', и уравнение решается с этим значением.
Ситуация подобна предыдущей, за исключением того, что элемент имеет внутреннюю высоту. Последовательность замен теперь:
1Если
2Если 'top' имеет значение 'auto', оно заменяется расстоянием от верхнего края содержащего блока до края верхнего поля гипотетического бокса, который мог бы быть первым боксом элемента, если его свойство 'position' было бы 'static'. (Но вместо того, чтобы действительно рассчитать этот бокс, ПА свободны предполагать о его возможной позиции.) Значение является отрицательным, если гипотетический бокс находится сверху от содержащего блока.
3Если 'bottom' - 'auto', 'auto' в 'margin-top' или 'margin-bottom' заменяется на '0'.
4Если в данной точке и 'margin-top', и 'margin-bottom' - всё ещё 'auto', уравнение решается с помощью дополнительного условия: что эти два поля обязаны получить одинаковые значения.
5Если в данной точке имеется только одно значение 'auto', уравнение решается с этим значением.
6Если в данной точке значения переограничены, игнорируется значение 'bottom', и уравнение решается с этим значением.
Иногда необходимо ограничить высоту элементов определёнными рамками. Два свойства выполняют эту функцию:
'min-height'
Значение: <length> | <percentage> | inherit
Начальное: 0
Применяется: ко всем элементам, за исключением незамещаемых инлайн-элементов и элементов таблицы
Наследуется: нет
Процентное: относительно высоты содержащего блока
Носитель: визуальный
'max-height'
Значение: <length> | <percentage> | none | inherit
Начальное: none
Применяется: ко всем элементам, за исключением незамещаемых инлайн-элементов и элементов таблицы
Наследуется: нет
Процентное: относительно высоты содержащего блока
Носитель: визуальный
Эти два свойства позволяют авторам ограничить высоту боксов определённым диапазоном. Значения имеют следующий смысл:
<length>
Специфицирует фиксированный минимум и максимум вычисленной высоты.
<percentage>
Специфицирует проценты для определения вычисленного значения. Проценты высчитываются относительно высоты содержащего блока генерируемого бокса. Если высота содержащего блока не специфицирована явно (т.е. зависит от высоты содержимого), процентные значения интерпретируются так же, как 'auto'.
none
(Только для 'max-height') Высота бокса не ограничена.
Следующий алгоритм описывает, как эти два свойства вводят вычисленное значение свойства
1Высота вычисляется (без 'min-height' и 'max-height') по вышеприведённым правилам в "Вычислении высоты и полей".
2Если вычисленное значение 'min-height' больше значения 'max-height', 'max-height' устанавливается в значение 'min-height'.
3Если вычисленная высота больше, чем 'max-height', вновь применяются вышеприведённые правила, но на этот раз с использованием значения 'max-height' как специфицированного значения для
4Если вычисленная высота меньше, чем 'min-height', вновь применяются вышеприведённые правила, но на этот раз с использованием значения 'min-height' как специфицированного значения для
Как описано в разделе о контекстах инлайн-форматирования, ПА заполняют инлайн-боксами вертикальный стэк строчных боксов. Высота инлайн-бокса определяется так:
1Вычисляется высота каждого инлайн-бокса в строчном боксе (см. "Вычисление высоты и полей" и свойство 'line-height').
2Инлайн-боксы выравниваются по вертикали в соответствии с их свойствами
3Высота строчного бокса - это расстояние между верхом самого верхнего бокса и низом самого нижнего бокса.
Пустые инлайн-элементы генерируют пустые инлайн-боксы, но эти боксы всё же имеют поля, заполнение, рамки и высоту строки и, таким образом, вычисления выполняются как с элементами, имеющими содержимое.
Заметьте, что если все боксы в строчном боксе выровнены по своему низу, то строчный бокс будет иметь точно такую же высоту, как и самый высокий бокс. Если, однако, боксы выровнены по общей базовой линии, верх и низ строчного бокса могут не касаться верха и низа самого высокого бокса.
Поскольку высота инлайн-бокса может отличаться от размера шрифта текста бокса (например, 'line-height' > 1em), может иметься некоторое пространство сверху и снизу от выводимых глифов. Разница между размером шрифта и вычисленным значением 'line-height' называется leading\габарит. Половина габарита называется полугабарит.
ПА центрирует глифы по вертикали в инлайн-боксе, добавляя полугабарит сверху и снизу. Например, если блок текста имеет высоту '12pt' и значение 'line-height' - '14pt', должно быть добавлено 2pts дополнительного пространства: 1pt сверху и 1pt снизу от букв. (Это применимо также и к пустым боксам, как если бы пустой бокс содержал бесконечно узкую букву.)
Если значение 'line-height' меньше размера шрифта, окончательная высота инлайн-бокса будет меньше, чем размер шрифта, и выводимые глифы будут "просачиваться" за пределы бокса. Если такой бокс касается края строчного бокса, выводимые глифы будут также "просачиваться" в смежный строчный бокс.
Хотя поля, рамки и заполнение незамещаемых элементов не учитываются при подсчёте высоты инлайн-бокса (и, следовательно, высоты строчного бокса), они всё же отображаются вокруг инлайн-боксов. Это значит, что если высота строчного бокса короче внешних краёв содержащихся в нём боксов, то фон и цвета заполнения и рамок могут "просачиваться" в смежные строчные боксы. Однако в этом случае некоторые ПА могут использовать строчный бокс для "обрезки" областей заполнения и рамок (т.е. - не выводить их).
'line-height'
Значение: normal | <number> | <length> | <percentage> | inherit
Начальное: normal
Применяется: ко всем элементам
Наследуется: да
Процентное: относительно размера шрифта самого элемента
Носитель: визуальный
Если это свойство установлено в элементе уровня блока, который (элемент) имеет содержимое, составленное из элементов инлайн-уровня, оно специфицирует минимальную высоту каждого генерируемого инлайн-бокса.
Если это свойство установлено в элементе инлайн-уровня, оно специфицирует точную высоту каждого бокса, генерируемого элементом (за исключением замещаемых инлайн-элементов, когда высота бокса задаётся свойством
Значения этого свойства имеют следующий смысл:
normal
Сообщает в ПА, что нужно установить вычисленное значение в "приемлемое" значение на базе размера шрифта элемента. Значение имеет тот же смысл, что и <number>. Для 'normal' мы рекомендуем значения в пределах от 1.0 до 1.2.
<length>
Высота бокса устанавливается в эту величину. Отрицательные значения недопустимы.
<number>
Вычисленное значение свойства является числом, умноженным на размер шрифта элемента. Отрицательные значения недопустимы. В то же время, число, не являющееся вычисленным значением, наследуется.
<percentage>
Вычисленное значение свойства является процентами от вычисленного размера шрифта элемента. Отрицательные значения недопустимы.
Эти три правила дают в результате одно значение высоты строки:
DIV { line-height: 1.2; font-size: 10pt } /* число */
DIV { line-height: 1.2em; font-size: 10pt } /* размер */
DIV { line-height: 120%; font-size: 10pt } /* проценты */
Если элемент содержит текст, выводимый с помощью нескольких шрифтов, ПА должен определить значение 'line-height' в соответствии с размером самого большого шрифта.
Вообще, если имеется только одно значение 'line-height' для всех инлайн-боксов параграфа (и нет высоких изображений), вышесказанное гарантирует, что базовые линии последовательных строк точно отделены от 'line-height'. Это важно в тех случаях, когда столбцы текста с различными шрифтами должны быть выровнены, например, в таблице.
Обратите внимание, что замещаемые элементы имеют свойства 'font-size' и 'line-height', даже если они (свойства) не используются непосредственно для определения высоты бокса. 'font-size', однако, используется для определения единиц измерения 'em' и 'ex', а 'line-height' задействовано в свойстве
'vertical-align'
Значение: baseline | sub | super | top | text-top | middle | bottom | text-bottom | <percentage> | <length> | inherit
Начальное: baseline
Применяется: к инлайн-элементам и элементам 'table-cell'
Наследуется: нет
Процентное: относительно 'line-height' самого элемента
Носитель: визуальный
Это свойство влияет на вертикальное позиционирование внутри боксов строчного бокса, генерируемых элементом инлайн-уровня. Следующие значения имеют смысл только относительно родительского элемента инлайн-уровня или родительского элемента уровня блока, если этот элемент генерирует анонимные инлайн-боксы; значения не действуют, если такой родитель не существует.
Примечание. Значения этого свойства имеют несколько другой смысл в контексте таблиц. См. подробнее в разделе об алгоритме высоты таблиц.
baseline
Выравнивает базовую линию бокса с базовой линией бокса-родителя. Если бокс не имеет базовой линии, выравнивается низ бокса с базовой линией родителя.
middle
Выравнивает вертикальную среднюю точку бокса с базовой линией бокса-родителя плюс половина x-высоты родителя.
sub
Понижает базовую линию бокса до соответствующей позиции подиндексов родительского бокса. (Это значение не воздействует на размер шрифта текста элемента.)
super
Повышает базовую линию бокса до соответствующей позиции надиндексов родительского бокса. (Это значение не воздействует на размер шрифта текста элемента.)
text-top
Выравнивает верх бокса с верхом шрифта родительского элемента.
text-bottom
Выравнивает низ бокса с низом шрифта родительского элемента.
<percentage>
Увеличивает (позитивное значение) или уменьшает (негативное значение) бокс на эту величину (процент значения 'line-height'). Значение '0%' это то же, что 'baseline'.
<length>
Увеличивает (позитивное значение) или уменьшает (негативное значение) бокс на эту величину. Значение '0cm' это то же, что 'baseline'.
Остальные значения относятся к строчному боксу, в котором появляется генерируемый бокс:
top
Выравнивает верх бокса с верхом строчного бокса.
bottom
Выравнивает низ бокса с низом строчного бокса.
Лекция 11. Визуальные эффекты
Обычно содержимое бокса блока ограничено краями бокса. В определённых случаях бокс может
[x]. Строка не может быть разорвана, и строчный бокс оказывается шире, чем бокс блока.
[x]. Бокс уровня блока слишком широк для содержащего блока. Это случается, если свойство 'width' элемента имеет такое значение, которое вызывает растекание генерируемого бокса блока за пределы содержащего блока.
[x]. Высота элемента превосходит явно установленную высоту содержащего блока (т.е. высота содержащего блока определяется свойством 'height', а не высотой содержимого).
[x]. Бокс позиционирован абсолютно.
[x]. Бокс имеет отрицательные значения полей.
Когда возникает
'overflow'
Значение: visible | hidden | scroll | auto | inherit
Начальное: visible
Применяется: к элементам уровня блока и к замещаемым элементам
Наследуется: нет
Процентное: N/A
Носитель: визуальный
Это свойство специфицирует, сжимается ли содержимое элемента уровня блока, если оно
Значения имеют следующий смысл:
visible
Указывает, что содержимое не сжимается, т.е. может отображаться за пределами бокса блока.
hidden
Указывает, что содержимое сжимается и что механизм прокрутки не должен предоставляться для просмотра содержимого вне
scroll
Означает, что содержимое сжимается и что если ПА использует механизм прокрутки, видимый на экране (такой как полоса прокрутки или паннер), этот механизм должен отображаться для бокса, независимо от того, сжимается его содержимое или нет. Это устраняет возможные проблемы с появлением и скрытием полосы прокрутки в динамическом окружении. Если это значение специфицировано и целевой носитель - 'print' или 'projection', переполняющее содержимое должно быть напечатано.
auto
Поведение значения 'auto' зависит от ПА, но должно вызывать предоставление механизма прокрутки для переполняемых боксов.
Даже если
Рассмотрим следующий пример блока кавычек (BLOCKQUOTE), который слишком велик для своего содержащего блока (установленного DIV). Вот документ-источник:
<DIV>
<BLOCKQUOTE>
<P>I didn't like the play, but then I saw
it under adverse conditions - the curtain was up.
<DIV class="attributed-to">- Groucho Marx</DIV>
</BLOCKQUOTE>
</DIV>
Это таблица стилей, управляющая размерами и стилем генерируемых боксов:
DIV { width : 100px; height: 100px;
border: thin solid red;
}
BLOCKQUOTE { width : 125px; height : 100px;
margin-top: 50px; margin-left: 50px;
border: thin dashed black
}
DIV.attributed-to { text-align : right; }
Начальное значение 'overflow' - 'visible', поэтому BLOCKQUOTE может быть сформатирован без сжатия примерно так:
Установка 'overflow' в 'hidden' для элемента DIV, с другой стороны, вызывает усечение BLOCKQUOTE содержащим блоком:
Значение 'scroll' сообщит ПАгенту, что поддерживается визуальный механизм прокрутки, чтобы вывести его для обеспечения доступа пользователя к усечённому содержимому.
Сжимаемая область определяет, какая часть выводимого содержимого элемента видна. По умолчанию сжатая область имеет тот же размер и форму, что и бокс(ы) элемента. В то же время
Значение:
Начальное: auto
Применяется: к элементам уровня блока и к замещаемым элементам
Наследуется: нет
Процентное: N/A
Носитель: визуальный
Свойство
Значения имеют следующий смысл:
auto
<shape>
В CSS2 верными значениями для
<top>,
Если координаты округляются до пикселных значений, необходимо следить, чтобы не осталось видимых пикселов, когда
Предки элемента могут также иметь сжатые области (в тех случаях, когда их свойство
Если сжатая область выходит за пределы окна документа ПА, содержимое может быть сжато до размеров окна среды окружения.
Эти два правила:
P { clip: rect(5px, 10px, 10px, 5px); }
P { clip: rect(5px, -5px, 10px, 5px); }
создадут прямоугольную сжимаемую область, ограниченную пунктирной линией:
Примечание. В CSS2 все сжимаемые области прямоугольны. Мы предполагаем в будущем расширение, разрешающее непрямоугольное сжатие
'visibility'
Значение: visible | hidden | collapse | inherit
Начальное: inherit
Применяется: ко всем элементам
Наследуется: нет
Процентное: N/A
Носитель: визуальный
Свойство 'visibility' специфицирует, отображаются ли боксы, генерируемые элементом. Невидимые боксы всё ещё влияют на структуру (см. свойство 'display' - 'none', чтобы полностью подавить генерацию бокса). Значения имеют следующий смысл:
visible
Генерируемый бокс виден.
hidden
Генерируемый бокс невидим (полностью прозрачен), но влияет на структуру.
collapse
См. также раздел динамические эффекты рядов и столбцов в таблицах. Если используется не с рядами или столбцами, 'collapse' имеет то же значение, что и 'hidden'.
Это свойство может использоваться вместе со скриптами для создания динамических эффектов.
В следующем примере нажатие любой кнопки в форме вызывает функцию скрипта, которая делает соответствующий бокс видимым, а другой скрывается. Поскольку эти боксы имеют одинаковые размеры и позицию, эффект заключается в том, что они сменяют друг друга. (Сценарий написан на гипотетическом языке сценариев. Он может иметь или не иметь какого-либо эффекта в ПА CSS.)
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN">
<HTML>
<HEAD>
<STYLE type="text/css">
<!--
#container1 { position: absolute;
top: 2in; left: 2in; width: 2in }
#container2 { position: absolute;
top: 2in; left: 2in; width: 2in;
visibility: hidden; }
-->
</STYLE>
</HEAD>
<BODY>
<P>Choose a suspect:</P>
<DIV id="container1">
<IMG alt="Al Capone"
width="100" height="100"
src="suspect1.jpg">
<P>Name: Al Capone</P>
<P>Residence: Chicago</P>
</DIV>
<DIV id="container2">
<IMG alt="Lucky Luciano"
width="100" height="100"
src="suspect2.jpg">
<P>Name: Lucky Luciano</P>
<P>Residence: New York</P>
</DIV>
<FORM method="post"
action="http://www.suspect.org/process-bums">
<P>
<INPUT name="Capone" type="button"
value="Capone"
onclick='show("container1");hide("container2")'>
<INPUT name="Luciano" type="button"
value="Luciano"
onclick='show("container2");hide("container1")'>
</FORM>
</BODY>
</HTML>
Лекция 12. Генерируемое содержимое, автоматическая нумерация и списки
В некоторых случаях бывает необходимо, чтобы пользовательские агенты (ПА) отображали содержимое не из дерева документа. Известный пример - нумерованный список: автор не хочет, чтобы нумерация выводилась явным образом, он или она хотят, чтобы ПА генерировал нумерацию автоматически. Также автор может пожелать, чтобы ПА вставлял слово "Figure" перед заглавием или фигурой или "Chapter 7" в начале 7 главы. В особенности для аудио и брайль-носителей, ПА должны иметь возможность вставить эти строки.
В CSS2 содержимое может генерироваться с помощью различных механизмов:
[x].
Свойство
[x].
Звуковые свойства 'cue-before' и 'cue-after' (см. главу звуковые таблицы стилей). Если свойство
[x]. Элементы со значением 'list-item' для свойства 'display'.
Ниже описаны механизмы, ассоциированные со свойством
Авторы специфицируют стиль и размещение генерируемого содержимого с помощью псевдоэлементов
Следующее правило вставляет строку "Note: " перед содержимым каждого элемента P, чей атрибут "class" имеет значение "note":
P.note:before { content: "Note: " }
Форматирующие объекты (напр., боксы), генерируемые элементом, включают
P.note:before { content: "Note: " }
P.note { border: solid green }
вызовет появление сплошной зелёной рамки вокруг параграфа, включая начальную строку.
Псевдоэлементы
Следующие правила вставляют открывающий знак кавычек перед каждым элементом Q. Цвет знака кавычки - красный, но шрифт будет тот же, что и шрифт остальной части элемента Q:
Q:before {
content: open-quote;
color: red
}
В объявлениях псевдоэлементов
Так, например, поскольку начальное значение свойства 'display' - 'inline', кавычка в предыдущем примере вставляется как инлайн-бокс (т.е. на той же самой строке, что и содержимое начального текста элемента). В следующем примере свойство 'display' явно устанавливается в 'block', так что вставленный текст становится блоком:
BODY:after {
content: "The End";
display: block;
margin-top: 2em;
text-align: center;
}
Обратите внимание, что пользователи аудио-ПА услышат слова "The End" после вывода оставшейся части содержимого BODY.
ПА обязаны игнорировать следующие свойства при наличии псевдоэлементов
Псевдоэлементы
[x].
Если субъект селектора является элементом уровня блока, допустимыми значениями будут 'none', 'inline', 'block' и 'marker'.
Если 'display' имеет другие значения, псевдоэлементы будут вести себя так, как если бы значение было 'block'.
[x].
Если субъект селектора является инлайн-элементом, допустимыми значениями будут 'none' и 'inline'.
Если 'display' имеет другие значения, псевдоэлементы будут вести себя так, как если бы значение было 'inline'.
Примечание. Другие значения могут быть допущены в будущих уровнях CSS.
'content'
Значение: [ <string> |
Начальное: пустая строка
Применяется: к псевдоэлементам
Наследуется: нет
Процентное: N/A
Носитель: все
Это свойство используется с псевдоэлементами
Значения имеют следующий смысл:
<string>
Содержимое текста (см. раздел строки).
Значением является URI, обозначающий внешний ресурс. Если ПА не может поддержать данный ресурс (в связи с типами носителя), он может игнорировать данный ресурс.
Примечание.CSS2 не предлагает механизмов для изменения размеров внедрённого объекта или для предоставления его текстуального описания, подобных атрибутам "alt" или "longdesc" для изображений HTML. Это может быть изменено в будущих уровнях CSS.
<counter>
open-quote и close-quote
Эти значения замещаются подходящей строкой свойства
no-open-quote и
Ничего не вставляют (пустая строка), но увеличивают (уменьшают) уровень вложения кавычек.
attr(X)
Эта функция возвращает строковое значение X для субъекта селектора. Строка не разбирается процессором CSS. Если субъект селектора не имеет атрибута X, возвращается пустая строка. Чувствительность к регистру имён атрибутов зависит от языка документа.
Примечание. В CSS2 невозможно обращаться к значениям атрибутов других элементов селектора.
Свойство 'display' регулирует, куда помещается содержимое, в блок, инлайн- или маркированный бокс.
Авторы должны поместить объявление
Следующее правило вызывает проигрывание звукового файла в конце отрезка с кавычками (см. дополнительные механизмы в разделе "звуковые таблицы стилей"):
@media aural {
BLOCKQUOTE:after { content: url("beautiful-music.wav") }
}
Следующее правило вставляет текст атрибута "alt" HTML перед изображением. Если изображение не выводится, пользователь увидит текст "alt".
IMG:before { content: attr(alt)}
Авторы могут включать новые строки в
H1:before {
display: block;
text-align: center;
content: "chapter\A hoofdstuk\A chapitre"
}
Примечание. В будущих уровнях CSS свойство
Могут быть следующие ситуации:
1Элемент
2Элемент
3Элемент
4Элемент
5Элемент, следующий за элементом
6Элемент, следующий за элементом
Это заголовок 'run-in' с псевдоэлементом :after, после которого идёт параграф с псевдоэлементом :before. В этом примере все псевдоэлементы являются инлайн (по умолчанию).
Когда таблица стилей:
H3 { display: run-in }
H3:after { content: ": " }
P:before { content: "... " }
применяется к такому документу-источнику:
<H3>Centaurs</H3>
<P>have hoofs
<P>have a tail
визуальное форматирование будет таким:
Centaurs: ... have hoofs
... have a tail
В CSS2 авторы могут специфицировать, в чувствительной к стилю и контекстно-зависимой манере, как ПА должны отображать знаки кавычек. Свойство
'quotes'
Значение: [<string> <string>]+ | none | inherit
Начальное: зависит от ПА
Применяется: ко всем элементам
Наследуется: да
Процентное: N/A
Носитель: визуальный
Это свойство специфицирует знаки кавычек для любого количества внедрённых закавычиваний. Значения имеют следующий смысл:
none
Значения 'open-quote' и
[<string> <string>]+
Значения для
Применение следующей таблицы стилей:
/* Специфицируются пары кавычек двух уровней для двух языков */
Q:lang(en) { quotes: '"' '"' "'" "'" }
Q:lang(no) { quotes: """ """ "<" ">" }
/* Вставляются кавычки до и после содержимого элемента Q */
Q:before { content: open-quote }
Q:after { content: close-quote }
к данному фрагменту HTML:
<HTML lang="en">
<HEAD>
<TITLE>Quotes</TITLE>
</HEAD>
<BODY>
<P><Q>Quote me!</Q>
</BODY>
</HTML>
позволит ПАгенту выдать:
"Quote me!"
а данный фрагмент HTML:
<HTML lang="no">
<HEAD>
<TITLE>Quotes</TITLE>
</HEAD>
<BODY>
<P><Q>Trondere grater nar <Q>Vinsjan pa kaia</Q> blir deklamert.</Q>
</BODY>
</HTML>
выдаст:
"Trondere grater nar <Vinsjan pa kaia> blir deklamert."
Примечание. Хотя знаки кавычек, специфицированные в
| Ориентировочное представление | код ISO 10646 (hex) | Описание |
|---|---|---|
| " | 0022 | КАВЫЧКА [двойная кавычка ASCII] |
| ' | 0027 | АПОСТРОФ [одиночная кавычка ASCII] |
| < | 2039 | ОДИНОЧНАЯ ЛЕВАЯ УГЛОВАЯ КАВЫЧКА |
| > | 203A | ОДИНОЧНАЯ ПРАВАЯ УГЛОВАЯ КАВЫЧКА |
| « | 00AB | ЛЕВАЯ ДВОЙНАЯ УГЛОВАЯ КАВЫЧКА |
| » | 00BB | ПРАВАЯ ДВОЙНАЯ УГЛОВАЯ КАВЫЧКА |
| ` | 2018 | ЛЕВАЯ ОДИНОЧНАЯ КАВЫЧКА [single high-6] |
| ' | 2019 | ПРАВАЯ ОДИНОЧНАЯ КАВЫЧКА [single high-9] |
| `` | 201C | ЛЕВАЯ ДВОЙНАЯ КАВЫЧКА [double high-6] |
| '' | 201D | ПРАВАЯ ДВОЙНАЯ КАВЫЧКА [double high-9] |
| ,, | 201E | ДВОЙНАЯ КАВЫЧКА LOW-9 [double low-9] |
Знаки кавычек вставляются в соответствующих местах документа значениями
Обратите внимание, что глубина вложения кавычек не зависит от вложения документа-источника или структуры форматирования.
Некоторые стили печати требуют, чтобы знак открывающей кавычки повторялся перед каждым параграфом блока кавычек, охватывающего несколько параграфов, но только последний параграф оканчивался знаком закрывающей кавычки. В CSS этого можно добиться вставкой "фантома" закрывающих кавычек. Ключевое слово 'no-close-quote' уменьшает уровень кавычек, но не вставляет знак кавычки.
Следующая таблица стилей помещает знаки открывающей кавычки в каждом параграфе в BLOCKQUOTE и вставляет одиночную закрывающую кавычку в конце:
BLOCKQUOTE P:before { content: open-quote }
BLOCKQUOTE P:after { content: no-close-quote }
BLOCKQUOTE P.last:after { content: close-quote }
Это относится к последнему параграфу, маркированному классом "last", поскольку нет селекторов, которые могут совпадать с последним потомком элемента.
Для симметрии имеется также ключевое слово 'no-open-quote', которое ничего не вставляет, а увеличивает глубину закавычивания на единицу.
Примечание. Если язык закавычивания отличается от языка окружающего текста, то лучше использовать знаки кавычек языка окружающего текста, а не языка закавычивания.
Французский внутри английского:
The device of the order of the garter is "Honi soit qui mal y pense."
Английский внутри французского:
Il disait: " Il faut mettre l'action en < fast forward >."
Таблица стилей типа следующей установит свойство 'quotes' таким образом, что 'open-quote' и 'close-quote' будут корректно работать во всех элементах.
Это правила для документов, содержащих только английский, французский или оба этих языка. Одно правило понадобится для каждого дополнительного языка.
Обратите внимание на использование комбинатора-потомка (">") для установки кавычек в элементы на базе языка окружающего текста:
[LANG|=fr] > * { quotes: """ """ "\2039" "\203A" }
[LANG|=en] > * { quotes: "\201C" "\201D" "\2018" "\2019" }
Знаки кавычек для английского показаны здесь в такой форме, что большинство людей будет способно их напечатать.
Если Вы можете печатать их напрямую, то они будут выглядеть примерно так:
[LANG|=fr] > * { quotes: """ """ "<" ">" }
[LANG|=en] > * { quotes: """ """ "'" "'" }
Автоматическая нумерация в CSS2 контролируется двумя свойствами,
'counter-reset
Значение: [ <identifier> <integer>? ]+ | none | inherit
Начальное: none
Применяется: ко всем элементам
Наследуется: нет
Процентное: N/A
Носитель: все
'counter-increment'
Значение: [ <identifier> <integer>? ]+ | none | inherit
Начальное: none
Применяется: ко всем элементам
Наследуется: нет
Процентное: N/A
Носитель: все
Свойство
Свойство
Если
Здесь показан способ нумерации глав и разделов: "Chapter 1", "1.1", "1.2" и т.д.:
H1:before {
content: "Chapter " counter(chapter) ". ";
counter-increment: chapter; /* Добавляет 1 к главе */
counter-reset: section; /* Устанавливает раздел в 0 */
}
H2:before {
content: counter(chapter) "." counter(section) " ";
counter-increment: section;
}
Если элемент увеличивает/сбрасывает счётчик и использует его (в свойстве
Если элемент и увеличивает, и сбрасывает счётчик, то счётчик сначала сбрасывается, а затем увеличивается.
Свойство
H1 { counter-reset: section -1 }
H1 { counter-reset: imagenum 99 }
сбросит только 'imagenum'. Чтобы сбросить оба счётчика, их нужно специфицировать вместе:
H1 { counter-reset: section -1 imagenum 99 }
Счётчики являются "самовкладывающимися", т.е. повторное использование счётчика в элементах-потомках автоматически создаёт новый объект счётчика. Это важно, например, для таких случаев, как списки в HTML, где элементы могут вкладываться внутри себя на произвольную глубину, и может оказаться невозможным определить уникально именованный счётчик для каждого уровня.
Так, следующего достаточно для нумерации вложенных элементов списка. Результат очень похож на применение установки 'display:list-item' и 'list-style: inside' в элементе LI:
OL { counter-reset: item }
LI { display: block }
LI:before { content: counter(item) ". "; counter-increment: item }
Самовложение базируется на том принципе, что каждый элемент, имеющий
В предыдущем примере OL создаст счётчик, и все потомки OL будут ссылаться на этот счётчик.
Если мы обозначим с помощью item[n] nый экземпляр счётчика "item" и "(" и ")" - начало и конец области видимости, то следующий фрагмент HTML будет использовать указанные счётчики. (Мы используем ту же таблицу стилей, что и в предыдущем примере).
<OL> <!-- (set item[0] to 0 -->
<LI>item <!-- increment item[0] (= 1) -->
<LI>item <!-- increment item[0] (= 2) -->
<OL> <!-- (set item[1] to 0 -->
<LI>item <!-- increment item[1] (= 1) -->
<LI>item <!-- increment item[1] (= 2) -->
<LI>item <!-- increment item[1] (= 3) -->
<OL> <!-- (set item[2] to 0 -->
<LI>item <!-- increment item[2] (= 1) -->
</OL> <!-- ) -->
<OL> <!-- (set item[3] to 0 -->
<LI> <!-- increment item[3] (= 1) -->
</OL> <!-- ) -->
<LI>item <!-- increment item[1] (= 4) -->
</OL> <!-- ) -->
<LI>item <!-- increment item[0] (= 3) -->
<LI>item <!-- increment item[0] (= 4) -->
</OL> <!-- ) -->
<OL> <!-- (reset item[4] to 0 -->
<LI>item <!-- increment item[4] (= 1) -->
<LI>item <!-- increment item[4] (= 2) -->
</OL> <!-- ) -->
Функция 'counters()' генерирует строку, составленную из значений всех
Следующая таблица стилей нумерует вложенные элементы списка как "1", "1.1", "1.1.1" и т.д.
OL { counter-reset: item }
LI { display: block }
LI:before { content: counters(item, "."); counter-increment: item }
По умолчанию
counter(name)
для таблицы стилей по умолчанию, или:
counter(name, 'list-style-type')
Допустимы все стили, включая 'disc', '
H1:before { content: counter(chno, upper-latin) ". " }
H2:before { content: counter(section, upper-roman) " - " }
BLOCKQUOTE:after { content: " [" counter(bq, hebrew) "]" }
DIV.note:before { content: counter(notecntr, disc) " " }
P:before { content: counter(p, none) }
Элемент, который не отображается ('display' установлено в 'none'), не может установить или сбросить счётчик.
С помощью следующей таблицы стилей элементы H2 с классом "secret" не увеличивают 'count2'.
H2.secret {counter-increment: count2; display: none}
В то же время, элементы с 'visibility', установленной в 'hidden', увеличивают
Большинство элементов уровня блока в CSS генерируют один основной бокс блока.
В этом разделе мы обсуждаем два механизма CSS, которые заставляют элемент генерировать два бокса: один основной бокс блока (для содержимого элемента) и отдельный бокс маркёра (для элемента оформления, такого как кружок, изображение или номер). Бокс маркёра может быть позиционирован внутри или вне основного бокса. В отличие от содержимого
Самым общим из этих двух механизмов является новый для CSS2 механизм, называемый
Например, следующий пример иллюстрирует, как маркёры могут использоваться для того, чтобы добавлять точку после каждого элемента нумерованного списка.
Эта программа HTML и таблица стилей:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN">
<HTML>
<HEAD>
<TITLE>Создание списка с маркёрами</TITLE>
<STYLE type="text/css">
LI:before {
display: marker;
content: counter(mycounter, lower-roman) ".";
counter-increment: mycounter;
}
</STYLE>
</HEAD>
<BODY>
<OL>
<LI> Это первый элемент списка.
<LI> Это второй элемент списка.
<LI> Это третий элемент списка.
</OL>
</BODY>
</HTML>
должны дать на выходе примерно следующее:
i. Это первый элемент списка.
ii. Это второй элемент списка.
iii. Это третий элемент списка.
С помощью селекторов потомков и дочерних селекторов можно специфицировать
Боксы маркёра имеют заполнение и рамку, но не имеют полей.
Для псевдоэлемента
Высота бокса маркёра задаётся в свойстве 'line-height'. Бокс маркёра
Вертикальное выравнивание бокса маркёра внутри его строчного бокса специфицируется свойством 'vertical-align'.
Если значение свойства 'width' - 'auto', то ширина содержимого бокса маркёра является шириной содержимого, иначе - это значение 'width'. Для значений 'width' меньших, чем ширина содержимого, свойство 'overflow' специфицирует поведение при переполнении. Боксы маркёра могут перекрывать основные боксы. Для значений 'width' больших, чем ширина содержимого, свойство 'text-align' определяет горизонтальное выравнивание содержимого в боксе маркёра.
Свойство 'marker-offset' специфицирует смещение по горизонтали между боксом маркёра и ассоциированным основным боксом. Расстояние измеряется между их ближайшими краями рамок.
Примечание. Если маркёр всплывает вправо от поплавка в содержимом, отформатированном слева направо, то основной бокс будет всплывать вниз от правой стороны поплавка, но боксы маркёра будут появляться слева от поплавка. Поскольку левый край рамки основного бокса расположен слева от поплавка (см. описание поплавков), а бокс маркёра расположен вне края рамки основного бокса, маркёр расположится также слева от поплавка. Аналогичным будет и поведение при форматировании справа налево, когда маркёр всплывёт слева от поплавка.
Если свойство 'display' имеет значение 'marker' для содержимого, генерируемого элементом с 'display: list-item', то бокс маркёра, генерируемый для '
В следующем примере содержимое центрируется в боксе маркёра фиксированной ширины. Этот документ:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN">
<HTML>
<HEAD>
<TITLE>Выравнивание содержимого в боксе маркёра</TITLE>
<STYLE type="text/css">
LI:before {
display: marker;
content: "(" counter(counter) ")";
counter-increment: counter;
width: 6em;
text-align: center;
}
</STYLE>
</HEAD>
<BODY>
<OL>
<LI> Это первый элемент списка.
<LI> Это второй элемент списка.
<LI> Это третий элемент списка.
</OL>
</BODY>
</HTML>
должен дать примерно такой вывод:
(1) Это первый
элемент списка.
(2) Это второй
элемент списка.
(3) Это третий
элемент списка.
В следующем примере создаются
Этот документ:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN">
<HTML>
<HEAD>
<TITLE>Маркёры до и после элементов списка</TITLE>
<STYLE type="text/css">
@media screen, print {
LI:before {
display: marker;
content: url("smiley.gif");
LI:after {
display: marker;
content: url("sad.gif");
}
}
</STYLE>
</HEAD>
<BODY>
<UL>
<LI>первый элемент списка появляется первым
<LI>второй элемент списка появляется вторым
</UL>
</BODY>
</HTML>
должен дать примерно такой вывод (здесь используется рисунок ascii вместо изображения gif улыбки):
:-) первый элемент списка
появляется первым :-(
:-) второй элемент списка
появляется вторым :-(
В следующем примере
Данный документ:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN">
<HTML>
<HEAD>
<TITLE>Маркёры для создания нумерованных примечаний 4</TITLE>
<STYLE type="text/css">
P { margin-left: 12 em; }
@media screen, print {
P.Note:before {
display: marker;
content: url("note.gif")
"Примечание " counter(note-counter) ":";
counter-increment: note-counter;
text-align: left;
width: 10em;
}
}
</STYLE>
</HEAD>
<BODY>
<P>Это первый параграф данного документа.</P>
<P CLASS="Note">Это очень короткий документ.</P>
<P>Это конец.</P>
</BODY>
</HTML>
должен дать примерно такой вывод:
Это первый параграф
данного документа.
Примечание 1: Это очень короткий
документ.
Это конец.
Значение:
Начальное: auto
Применяется: к элементам с 'display: marker'
Наследуется: нет
Процентное: N/A
Носитель: визуальный
Это свойство специфицирует расстояние между ближайшим краем рамки бокса маркёра и ассоциированным с ним основным боксом. Смещение может или специфицироваться пользователем (
Значения размеров могут быть отрицательными, но могут существовать ограничения, в зависимости от специфики реализации.
В следующем примере показано, как маркёры могут использоваться для добавления точек после каждого элемента нумерованного списка.
Эта программа HTML и таблица стилей:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<HTML>
<HEAD>
<TITLE>Пример маркёров 5</TITLE>
<STYLE type="text/css">
P { margin-left: 8em } /* Создаёт пространство для счётчиков */
LI:before {
display: marker;
marker-offset: 3em;
content: counter(mycounter, lower-roman) ".";
counter-increment: mycounter;
}
</STYLE>
</HEAD>
<BODY>
<P> Это большой предшествующий параграф ...
<OL>
<LI> Это первый элемент списка.
<LI> Это второй элемент списка.
<LI> Это третий элемент списка.
</OL>
<P> Это большой последующий параграф ...
</BODY>
</HTML>
должен дать примерно такой вывод:
Это большой предшествующий
параграф ...
i. Это первый элемент списка.
ii. Это второй элемент списка.
iii. Это третий элемент списка.
Это большой последующий
параграф ...
Следовательно, если маркёр M (созданный в 'display: marker') используется с элементом списка, созданным в свойстве списка, M замещает стандартный маркёр элемента списка.
Вместе со свойствами списка свойства фона применяются только к основному боксу; бокс маркёра 'outside' прозрачен.
'list-style-type'
Значение: disc |
Начальное: disc
Применяется: к элементам с 'display: list-item'
Наследуется: да
Процентное: N/A
Носитель: визуальный
Это свойство специфицирует вид маркёра элемента списка, если
Примечание. Нумерованные списки улучшают доступность документа, т.к. делают списки более удобными для навигации.
Глифы специфицируются с помощью disc,
Системы нумерации специфицируются с помощью:
decimal
Десятеричных чисел, начинающихся с 1.
decimal-leading-zero
Десятеричных чисел, дополненных начальными нулями (например, 01, 02, 03, ..., 98, 99).
lower-roman
Римских цифр в нижнем регистре (i, ii, iii, iv, v и т.д.).
Римских цифр в верхнем регистре (I, II, III, IV, V и т.д.).
hebrew
Традиционной еврейской нумерации.
georgian
Традиционной грузинской нумерации (an, ban, gan, ..., he, tan, in, in-an, ...).
Традиционной армянской нумерации.
cjk-ideographic
Простых идеографических чисел.
hiragana
a, i, u, e, o, ka, ki, ...
katakana
A, I, U, E, O, KA, KI, ...
hiragana-iroha
i, ro, ha, ni, ho, he, to, ...
katakana-iroha
I, RO, HA, NI, HO, HE, TO, ...
ПА, не распознающий системы нумерации, должен использовать '
Примечание. Этот документ не специфицирует точный механизм действия каждой системы нумерации (например, как вычисляются римские цифры). В будущих Примечаниях W3C могут быть даны дальнейшие разъяснения.
Алфавитные системы специфицируются с помощью:
lower-latin или lower-alpha
Букв ascii нижнего регистра (a, b, c, ... z).
Букв ascii верхнего регистра (A, B, C, ... Z).
lower-greek
Классических греческих букв нижнего регистра альфа, бета, гамма, ... (?, ?, ?, ...)
Эта спецификация не определяет то, как происходит перенос алфавитной системы в конце алфавита. Например, после 26 элементов списка представление
Например, следующий документ HTML:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN">
<HTML>
<HEAD>
<TITLE>Нумерация латинскими буквами нижнего регистра</TITLE>
<STYLE type="text/css">
OL { list-style-type: lower-roman }
</STYLE>
</HEAD>
<BODY>
<OL>
<LI> Это первый элемент списка.
<LI> Это второй элемент списка.
<LI> Это третий элемент списка.
</OL>
</BODY>
</HTML>
может дать на выходе:
i Это первый элемент списка.
ii Это второй элемент списка.
iii Это третий элемент списка.
Обратите внимание, что выравнивание маркёров списка (здесь - по правому краю) зависит от ПА.
Примечание. Следующие версии CSS могут предоставить более совершенные механизмы международных стилей нумерации.
'list-style-image'
Значение:
Начальное: none
Применяется: к элементам с 'display: list-item'
Наследуется: да
Процентное: N/A
Носитель: визуальный
Это свойство определяет изображение, которое будет использоваться как маркёр элемента списка. Если изображение доступно, оно замещает маркёр, установленный 'list-style-type'.
В следующем примере устанавливается маркёр - изображение "ellipse.png" - в начале каждого элемента списка .
UL { list-style-image: url("http://png.com/ellipse.png") }
'list-style-position'
Значение: inside | outside | inherit
Начальное: outside
Применяется: к элементам с 'display: list-item'
Наследуется: да
Процентное: N/A
Носитель: визуальный
Это свойство специфицирует позицию бокса маркёра в основном боксе блока. Значения имеют следующий смысл:
outside
Бокс маркёра находится вне основного бокса блока
Примечание. CSS1 не специфицировал точное размещение бокса маркёра из соображений совместимости, и в CSS2 осталась такая же двусмысленность. Для более точного управления боксами
inside
Бокс маркёра это первый инлайн-бокс в боксе основного блока, после которого всплывает содержимое элемента.
Например:
<HTML>
<HEAD>
<TITLE>Сравнение позиций inside/outside</TITLE>
<STYLE type="text/css">
UL { list-style: outside }
UL.compact { list-style: inside }
</STYLE>
</HEAD>
<BODY>
<UL>
<LI>first list item comes first
<LI>second list item comes second
</UL>
<UL class="compact">
<LI>first list item comes first
<LI>second list item comes second
</UL>
</BODY>
</HTML>
Этот пример отображается так:
В тексте справа-налево
'list-style'
Значение: [
Начальное: не определено для сокращённых свойств
Применяется: к элементам с 'display: list-item'
Наследуется: да
Процентное: N/A
Носитель: визуальный
Свойство 'list-style' - это сокращённое обозначение для установки трёх свойств:
UL { list-style: upper-roman inside } /* Какой-либо UL */
UL > UL { list-style: circle outside } /* UL - потомок UL */
Хотя авторы могут специфицировать информацию о
OL.alpha LI { list-style: lower-alpha } /* LI - потомок OL */
OL.alpha > LI { list-style: lower-alpha } /* LI-наследник OL */
Авторы, использующие только селекторы-потомки, могут не получить тот результат, на который рассчитывали. Рассмотрим следующие правила:
<HTML>
<HEAD>
<TITLE>ПРЕДУПРЕЖДЕНИЕ: Непредсказуемый результат из-за каскадирования</TITLE>
<STYLE type="text/css">
OL.alpha LI { list-style: lower-alpha }
UL LI { list-style: disc }
</STYLE>
</HEAD>
<BODY>
<OL class="alpha">
<LI>level 1
<UL>
<LI>level 2
</UL>
</OL>
</BODY>
</HTML>
Ожидается, что элементы списка уровня 1 будут маркированы лэйблами 'lower-alpha', а элементы уровня 2 - лэйблами 'disc'. Однако порядок каскадирования вызовет маскирование второго правила первым (которое содержит специфическую информацию класса). В следующих правилах для решения проблемы используется дочерний селектор:
OL.alpha > LI { list-style: lower-alpha }
UL LI { list-style: disc }
Другим решением может быть спецификация информации
OL.alpha { list-style: lower-alpha }
UL { list-style: disc }
При наследовании значения
Значение URI может комбинироваться с любым другим значением, как здесь:
UL { list-style: url("http://png.com/ellipse.png") disc }
В данном примере 'disc' будет использоваться, если изображение недоступно. Значение 'none' свойства 'list-style' устанавливает 'list-style-type' и 'list-style-image' в 'none':
UL { list-style: none }
В результате - никакие маркёры элементов списка не отображаются.
Лекция 13. Страничные носители
Страничный носитель (например, бумага, плёнка, страницы , выводимые на экране компьютера и т.п.) отличается от непрерывного носителя тем, что содержимое документа разделяется на одну или более абстрактных страниц. Чтобы обрабатывать разрывы страниц, CSS2 расширяет модель визуального форматирования следующим образом:
1
2Страничная модель расширяет модель визуального форматирования, чтобы рассчитывать разрывы страниц.
Страничная модель CSS 2 специфицирует, как форматируется документ в пределах прямоугольной области - страничного бокса - который имеет конечные ширину и высоту.
Некоторые возможности переноса:
[x].
Перенос одного страничного бокса на один
[x].
Перенос двух страничных боксов на две стороны одного
[x].
Перенос N (маленького) страничного бокса на один
[x]. Перенос одного (большого) страничного бокса на N x M листов (называется "tiling").
[x].
Создание подписей. Подпись, это группа страниц, напечатанных на
[x]. Печать одного документа в несколько потоков печати.
[x]. Вывод в файл.
Хотя CSS2 не специфицирует то, как ПА переносят страничные боксы на листы, не даётся также и определённого механизма для того, чтобы сообщить ПА о размерах и ориентации целевого
Страничный бокс это прямоугольный регион, содержащий две области:
[x].
Область страницы. Включает боксы, расположенные на этой странице. Края
[x].
Область полей, окружающих
Примечание. В CSS2 свойства рамки и заполнения не применяются к страницам; это возможно в будущем.
Авторы специфицируют размеры, ориентацию, поля и т.п. страничного бокса в правиле
Селектор страницы специфицирует, для каких страниц объявления применяются. В CSS2
Размеры страничного бокса устанавливаются свойством
Следующее правило @page устанавливает размер страничного бокса в 8.5 x 11 дюймов и создаёт поле '2см' со всех сторон между краем страничного бокса и областью листа:
@page { size 8.5in 11in; margin: 2cm }
Свойство
Свойства полей ('margin-top', 'margin-right', 'margin-bottom', 'margin-left' и 'margin') применяются внутри контекста страницы. На следующей диаграмме показаны соотношения между
Вычисленное значение полей бокса вверху или внизу
Из-за негативных значений полей (у страничного бокса или у элементов) или абсолютного позиционирования содержимое может оканчиваться вне страничного бокса, но это содержимое может быть "вырезано" - ПАгентом, принтером или, наконец, бумажным ножом.
'size'
Значение:
Начальное: auto
Применяется: к контексту страницы
Наследуется: N/A
Процентное: N/A
Носитель: визуальный, страничный
Это свойство специфицирует размер и ориентацию страничного бокса.
Размер страничного бокса может быть или "absolute/абсолютным" (фиксированный размер), или "relative/относительным" (масштабируемым, т.е. соответствующим имеющимся размерам
Три значения свойства
auto
landscape
Переопределяет целевую ориентацию.
portrait
Переопределяет целевую ориентацию.
Здесь внешний край страничного бокса будет выровнен с целевым. Процентные значения свойства 'margin' - относительны к целевым размерам, поэтому, если целевые размеры - 21.0см x 29.7см (т.е. A4), поля будут 2.10см и 2.97см.
@page {
size: auto; /* auto это начальное значение */
margin: 10%;
}
Измеряемые значения свойства
@page {
size: 8.5in 11in; /* ширина - высота */
}
В этом примере устанавливаются: ширина страничного бокса - 8.5 дюймов и высота - 11 дюймов. Такой страничный бокс требует размеров целевого листа 8.5"x11" или больше.
ПА могут позволять пользователям контролировать перенос страничного бокса на
Если
[x].
Повернуть
[x]. Масштабировать бокс, чтобы вместить в целевые размеры.
ПА должен запрашивать у пользователя подтверждение на эти операции.
Если
'marks'
Значение: [ crop || cross ] | none | inherit
Начальное: none
Применяется: к контексту страницы
Наследуется: N/A
Процентное: N/A
Носитель: визуальный, страничный
При высококачественной печати маркировка часто помещается вне страничного бокса. Данное свойство специфицирует, должны ли знаки крестика или обрезки, или оба, отображаться сразу за краем страничного бокса.
знаки обрезки обозначают место, где страница должна быть обрезана. Знак "крестик" (известный также как знак регистрации) используется для выравнивания листов.
Маркировка видна только на абсолютных страничных боксах (см. свойство
Размеры, стиль и расположение крестиков зависят от ПА.
При печати двухсторонних документов страничные боксы левой и правой страниц должны различаться. Это можно обозначить с помощью двух псевдоклассов CSS, которые могут быть определены в контексте страницы.
Все страницы автоматически классифицируются ПАгентами на псевдоклассы
@page :left {
margin-left: 4cm;
margin-right: 3cm;
}
@page :right {
margin-left: 3cm;
margin-right: 4cm;
}
Если даны разные объявления для левых и правых страниц, ПА обязан использовать эти объявления, даже если ПА не переносит страничные боксы на левый и правый
Авторы могут специфицировать также стиль для первой страницы документа псевдоклассом :first:
@page { margin: 2cm } /* Все поля установлены в 2см */
@page :first {
margin-top: 10cm /* Верхнее поле на первой странице - 10см */
}
Является ли первая страница документа
Свойства, специфицированные в
Примечание. Добавление объявлений в псевдоклассы
Примечание. В будущих версиях CSS возможно появление других псевдоклассов страницы.
При форматировании содержимого модели страницы, часть содержимого может выйти за границы страничного бокса. Например, элемент, чьё свойство 'white-space' имеет значение 'pre', может генерировать бокс, который окажется шире страничного бокса. Также, если боксы позиционированы абсолютно, они могут оканчиваться в "несогласованном" месте. Например, изображения могут быть размещены у края страничного бокса или на 100,000 дюймов ниже страничного бокса.
Спецификация точного форматирования таких элементов находится вне пределов рассмотрения данного документа. Однако мы рекомендуем, чтобы авторы и ПА учитывали следующие общие принципы, касающиеся содержимого вне страничного бокса:
[x]. Содержимое должно допускаться немного позади страничного бокса, чтобы страницы слегка "сочились".
[x].
ПА должны исключить генерирование большого количества пустых страничных боксов для позиционирования элементов (например, Вы не захотите печатать 100 пустых страниц). Заметьте, однако, что генерирование небольшого количества пустых страничных боксов может понадобиться для значений 'left' и 'right' в
[x]. Авторы не должны позиционировать элементы в несогласованных местах в целях исключения их вывода. Вместо этого нужно:
[x]. Чтобы в целом уменьшить генерацию боксов, установить свойство 'display' в 'none'.
[x]. Чтобы сделать бокс невидимым, использовать свойство 'visibility'.
[x]. ПА могут обрабатывать боксы, расположенные вне страничного бокса, разными способами, в том числе - отбрасывая их или создавая для них страничные боксы в конце документа.
В данном разделе разъясняется форматирование страниц в CSS2. Пять свойств указывают, где ПА может или должен разрывать страницы и на какой странице (левой или правой) должно выводиться последующее содержимое. Каждый разрыв страницы заканчивает вывод в текущем страничном боксе и вызывает размещение оставшихся частей дерева документа в новом страничном боксе.
'page-break-before'
Значение: auto | always | avoid | left | right | inherit
Начальное: auto
Применяется: к элементам уровня блока
Наследуется: нет
Процентное: N/A
Носитель: визуальный, страничный
'page-break-after'
Значение: auto | always | avoid | left | right | inherit
Начальное: auto
Применяется: к элементам уровня блока
Наследуется: нет
Процентное: N/A
Media: визуальный, страничный
'page-break-inside'
Значение: avoid | auto | inherit
Начальное: auto
Применяется: к элементам уровня блока
Наследуется: да
Процентное: N/A
Media: визуальный, страничный
Значения этих свойств имеют следующий смысл:
auto
Ни форсирует, ни запрещает разрыв страницы перед (после, внутри) генерируемого бокса.
always
Всегда форсирует разрыв страницы перед (после, внутри) генерируемого бокса.
avoid
Исключает разрыв страницы перед (после, внутри) генерируемого бокса.
left
Форсирует один или два разрыва страницы перед (после, внутри) генерируемого бокса, так что следующая страница форматируется как левая страница.
right
Форсирует один или два разрыва страницы перед (после, внутри) генерируемого бокса, так что следующая страница форматируется как правая страница.
Потенциально размещение разрыва страницы находится под влиянием свойства
См. в разделе о допустимых разрывах страниц точные правила того, как эти свойства могут форсировать или подавлять разрыв страницы.
'page'
Значение: <identifier> | auto
Начальное: auto
Применяется: к элементам уровня блока
Наследуется: да
Процентное: N/A
Носитель: визуальный, страничный
Свойство
Все таблицы будут размещены на правой стороне страницы с ориентацией landscape:
@page rotated {size: landscape}
TABLE {page: rotated; page-break-before: right}
Свойство
В этом примере две таблицы отображаются на landscape-страницах (или на одной странице, если входят), и тип страницы "narrow" вообще не используется, вопреки установкам в DIV:
@page narrow {size: 9cm 18cm}
@page rotated {size: landscape}
DIV {page: narrow}
TABLE {page: rotated}
с этим документом:
<DIV>
<TABLE>...</TABLE>
<TABLE>...</TABLE>
</DIV>
'orphans'
Значение: <integer> | inherit
Начальное: 2
Применяется: к элементам уровня блока
Наследуется: да
Процентное: N/A
Носитель: визуальный, страничный
'widows'
Значение: <integer> | inherit
Начальное: 2
Применяется: к элементам уровня блока
Наследуется: да
Процентное: N/A
Носитель: визуальный, страничный
Свойство 'orphans' специфицирует минимальное количество строк параграфа, которые должны оставаться внизу страницы. Свойство
Информацию о форматировании параграфов см. в разделе Строчные боксы.
При нормальном обтекании разрывы страниц могут появляться в следующих местах:
1На вертикальном поле между боксами блока. Если разрыв страницы появляется здесь, вычисленные значения соответствующих свойств 'margin-top' и 'margin-bottom' установлены в '0'.
2Между строчными боксами внутри бокса блока.
Эти разрывы являются субъектами для следующих правил:
[x].
Правило A: Разрывы из пункта (1) допускаются, только если свойства
[x].
Правило B: В то же время, если все они - 'auto' и ближайший общий предок всех элементов имеет значение свойства
[x].
Правило C: Разрывы из пункта (2) допускаются, только если количество строчных боксов между разрывом и началом закрывающего бокса блока имеет значение
[x].
Правило D: В дополнение, разрывы (2) допускаются, только если свойство
Если вышесказанное не обеспечивает достаточное количество точек разрывов для предотвращения выхода содержимого за пределы страничного бокса, тогда правила B и D исключаются для того, чтобы найти дополнительные точки разрывов.
Если это всё ещё не даёт достаточного количества точек разрывов, то правила A и C также исключаются, чтобы найти дополнительные точки разрывов.
Разрывы страниц не могут появляться внутри боксов, позиционированных абсолютно.
Разрыв страницы обязан возникнуть в (1), если среди свойств
Разрыв страницы обязан появиться в (1), если последний строчный бокс выше этого поля и первый бокс - ниже него не имеют одинакового значения для
CSS2 не определяет, какой из наборов допустимых разрывов страниц обязан использоваться; CSS2 не запрещает ПАгенту делать разрыв в любой возможной точке разрыва или не делать разрывов вообще. Но CSS2 рекомендует, чтобы ПА следовали следующей эвристике (признавая наличие некоторых противоречий):
[x]. Делать разрывы как можно реже.
[x]. Делать все страницы, не оканчивающиеся форсированным разрывом, одинаковой высоты.
[x]. Исключить разрывы внутри блока, имеющего рамку.
[x]. Исключить разрывы внутри таблицы.
[x]. Исключить разрывы внутри всплывающего элемента.
Предположим, например, что таблица стилей содержит 'orphans : 4', 'widows : 2', и имеется 20 свободных строк (строчных боксов) внизу текущей страницы:
[x]. Если параграф в конце текущей страницы содержит 20 строк или менее, он должен быть размещён на текущей странице.
[x].
Если параграф содержит 21 или 22 строк, вторая часть параграфа обязана не нарушать работы
[x]. Если параграф содержит 23 строки или более, первая часть должна содержать 20 строк, а вторая часть - остальные строки.
Теперь предположим, что
[x]. Если параграф в конце текущей страницы содержит 8 строк или менее, он должен быть размещён на текущей странице.
[x]. Если параграф содержит 9 строки или более, он не может быть разделён (что могло бы нарушить работу orphans), следовательно, он должен быть перемещён как блок на следующую страницу.
Объявления в контексте страницы подчиняются каскаду так же, как и нормальные объявления CSS2.
@page {
margin-left: 3cm;
}
@page :left {
margin-left: 4cm;
}
Из-за более высокой специфики селектора псевдокласса, левое поле левых страниц будет '4см', а все остальные страницы (т.е. правые) - левое поле '3см'.
Лекция 14. Цвета и фон
Свойства CSS позволяют авторам специфицировать цвет переднего плана и фона элементов. В качестве фона используется цвет или изображение. Свойства фона позволяют авторам позиционировать фоновое изображение, размножать его и объявлять как фиксированное относительно порта просмотра или прокручивать вместе с документом.
Синтаксис значений цвета см. в разделе единицы измерения цвета.
'color'
Значение:
Начальное: зависит от пользовательского агента (ПА)
Применяется: ко всем элементам
Наследуется: да
Процентное: N/A
Носитель: визуальный
Это свойство описывает цвет переднего плана содержимого текста элемента. Можно по разному специфицировать красный цвет:
EM { color: red } /* предопределённое название цвета */
EM { color: rgb(255,0,0) } /* диапазон RGB 0-255 */
Авторы могут специфицировать фон элемента (т.е. его видимую поверхность) как цвет или как изображение. В терминах модели бокса, "background" относится к фону содержимого и области заполнения. Цвет и стиль обрамления устанавливаются в свойствах обрамления. Поля всегда прозрачны, поэтому фон бокса-предка всегда просвечивает.
Свойства фона не наследуются, но фон бокса-предка будет по умолчанию просвечивать, поскольку начальное значение
Фон бокса, генерируемый корневым элементом, покрывает всю канву.
Для документов HTML, однако, мы рекомендуем, чтобы авторы специфицировали фон элемента BODY, а не элемента HTML.
ПА должны учитывать следующие правила приоритета при заполнении фона: если значение свойства
В соответствии с этими правилами, канва следующего документа HTML будет иметь фон "marble":
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN">
<HTML>
<HEAD>
<TITLE>Установка фона канвы</TITLE>
<STYLE type="text/css">
BODY { background: url("http://style.com/marble.png") }
</STYLE>
</HEAD>
<BODY>
<P>Мой фон - marble.
</BODY>
</HTML>
'background-color'
Значение:
Начальное: transparent
Применяется: ко всем элементам
Наследуется: нет
Процентное: N/A
Носитель: визуальный
Это свойство устанавливает цвет фона элемента значением
H1 { background-color: #F00 }
'background-image'
Значение:
Начальное: none
Применяется: ко всем элементам
Наследуется: нет
Процентное: N/A
Носитель: визуальный
Это свойство устанавливает изображение-фон элемента. При установке изображения для фона авторам необходимо также специфицировать цвет фона, который будет использоваться, если изображение окажется недоступным. Если изображение доступно, оно выводится поверх цвета фона. (Таким образом, цвет фона будет виден в прозрачных участках изображения).
Значениями данного свойства являются
BODY { background-image: url("marble.gif") }
P { background-image: none }
'background-repeat'
Значение: repeat | repeat-x | repeat-y | no-repeat | inherit
Начальное: repeat
Применяется: ко всем элементам
Наследуется: нет
Процентное: N/A
Носитель: визуальный
Если специфицировано изображение фона, то данное свойство определяет, повторяется ли данное изображение (размножается ли), и как. Размноженное изображение покрывает области содержимого и заполнения бокса.
Значения имеют следующий смысл:
repeat
Изображение размножается горизонтально и вертикально.
repeat-x
Изображение размножается только горизонтально.
repeat-y
Изображение размножается только вертикально.
no-repeat
Изображение не размножается: выводится только одна копия изображения.
BODY {
background: white url("pendant.gif");
background-repeat: repeat-y;
background-position: center;
}
Единственная копия фонового изображения центрирована, а другие копии помещены выше и ниже, чтобы создать вертикальную ленту позади элемента.
[D]'background-attachment'
Значение: scroll | fixed | inherit
Начальное: scroll
Применяется: ко всем элементам
Наследуется: нет
Процентное: N/A
Носитель: визуальный
Если специфицировано изображение фона, то данное свойство определяет, является ли оно фиксированным относительно порта просмотра ('fixed'), или прокручивается вместе с документом ('scroll').
Даже если изображение зафиксировано, оно будет видно только в том случае, если находится в области фона или заполнения элемента. Таким образом, пока изображение не размножено ('background-repeat: repeat'), оно может быть невидимым.
Здесь создаётся бесконечная вертикальная полоса, остающаяся "приклеенной" к порту просмотра при прокручивании элемента.
BODY {
background: red url("pendant.gif");
background-repeat: repeat-y;
background-attachment: fixed;
}
ПА могут рассматривать 'fixed' как 'scroll'. Однако рекомендуется, чтобы они интерпретировали 'fixed' корректно, хотя бы для элементов HTML и BODY, поскольку у автора нет способа предоставлять изображение только для тех браузеров, которые поддерживают 'fixed'. См. детали в разделе соответствие.
'background-position'
Значение: [ [
Начальное: 0% 0%
Применяется: к элементам уровня блока и к замещаемым элементам
Наследуется: нет
Процентное: относится к размеру самого бокса
Носитель: визуальный
Если фоновое изображение специфицировано, то данное свойство определяет его (изображения) начальную позицию. Значения имеют следующий смысл:
<percentage> <percentage>
Если пара значений - '0% 0%', то верхний левый угол изображения выровнен с левым верхним углом кромки заполнения бокса. Пара значений '100% 100%' помещает нижний правый угол изображения в нижний правый угол области заполнения. Если пара значений - '14% 84%', точка изображения 14% поперёк и 84% вниз помещается в точку 14% поперёк и 84% вниз области заполнения.
Если пара значений - '2cm 2cm', то верхний левый угол изображения помещается на 2cm вправо и на 2cm вниз от верхнего левого угла области заполнения.
top left и left top
То же, что '0% 0%'.
top, top center и center top
То же, что '50% 0%'.
right top и top right
То же, что '100% 0%'.
left, left center и center left
То же, что '0% 50%'.
center и center center
То же, что '50% 50%'.
right, right center и center right
То же, что '100% 50%'.
bottom left и left bottom
То же, что '0% 100%'.
bottom, bottom center и center bottom
То же, что '50% 100%'.
bottom right и right bottom
То же, что '100% 100%'.
Если задано только одно значение, в процентах или единицах измерения, то оно устанавливает только горизонтальную позицию, вертикальная позиция будет 50%.
Если заданы два значения, первое задаёт горизонтальную позицию. Допускаются комбинации значений в процентах и единицах измерения (например, '50% 2cm'). Допускаются негативные значения позиции. Ключевые слова не могут комбинироваться со значениями в процентах или единицах измерения (все возможные сочетания приведены выше).
BODY { background: url("banner.jpeg") right top } /* 100% 0% */
BODY { background: url("banner.jpeg") top center } /* 50% 0% */
BODY { background: url("banner.jpeg") center } /* 50% 50% */
BODY { background: url("banner.jpeg") bottom } /* 50% 100% */
Если фоновое изображение фиксировано в порте просмотра (см. свойство
BODY {
background-image: url("logo.png");
background-attachment: fixed;
background-position: 100% 100%;
background-repeat: no-repeat;
}
В данном примере изображение (одиночное) размещается в правом нижнем углу порта просмотра.
'background'
Значение: [<'background-color'> || <'background-image'> || <'background-repeat'> || <'background-attachment'> || <'background-position'>] | inherit
Начальное: не определено для сокращённых свойств
Применяется: ко всем элементам
Наследуется: нет
Процентное: разрешено для
Носитель: визуальный
Свойство 'background' это сокращённое свойство для установки индивидуальных свойств фона (т.е. 'background-color',
Свойство
В первом правиле задано только значение 'background-color', а другие индивидуальные свойства установлены в свои начальные значения. Во втором правиле все индивидуальные свойства специфицированы.
BODY { background: red }
P { background: url("chess.png") gray 50% repeat fixed }
По вопросам цветовой гаммы проконсультируйтесь в Gamma Tutorial в спецификации PNG ([PNG10]).
При вычислении коррекции цветовой гаммы, ПА, выводящие на CRT, могут принять идеальный CRT и игнорировать любые эффекты внедряемой гаммы. Это означает, что минимальная обработка, необходимая для текущей платформы - :
PC, использующий MS-Windows none
Unix, использующий X11 none
Mac, использующий QuickDraw применяет гамму 1.45 [ICC32] (приложения ColorSync-savvy могут просто передавать профиль sRGB ICC в ColorSync для выполнения необходимой коррекции цвета)
SGI, использующий X применяет значения гаммы из
NeXT, использующий NeXTStep применяется гамма 2.22
"Применение гаммы" означает, что каждый из трёх - R, G и B - обязан быть конвертирован в R'=R gamma, G'=G gamma, B'=B gamma, прежде чем быть обработанным ОС.
Это можно быстро выполнить путём однократного создания 256-элементной просмотровой таблицы при вызове браузера таким вот образом:
for i := 0 to 255 do
raw := i / 255.0;
corr := pow (raw, gamma);
table[i] := trunc (0.5 + corr * 255.0)
end
что затем позволяет исключить необходимость чрезмерных вычислений для атрибута цвета, и ещё меньше - через пикселные значения.
Лекция 15. Шрифты
Если текст документа отображается визуально,
Глиф - это фактическое художественное представление абстрактного глифа в некоторых типографских стилях в векторной или растровой форме, которое может быть прорисовано на экране или на бумаге.
Шрифт - это набор глифов, соблюдающих один базовый мотив в соответствии с дизайном, размером, внешним видом и другими атрибутами, ассоциированными со всем набором, и отображение из
Визуальный пользовательский агент (ПА) обязан рассматривать следующие вопросы, прежде чем отображать
[x]. Имеется ли, прямо или наследуемо, шрифт, специфицированный для данного символа?
[x].
Доступен ли этот
[x].
Если это так, какой глиф(ы) отображает этот
[x].
Если нет, что нужно сделать? Подставлять ли другой
И в CSS1, и в CSS2 авторы специфицируют характеристики шрифта в серии свойств.
То, как ПА обрабатывают свойства, если нет совпадения шрифта на стороне клиента, было расширено в CSS2 по сравнению с CSS1. В CSS1 принималось, что все
В CSS2 всё это изменилось, и теперь появилось больше свободы:
[x].
для авторов таблиц стилей: описывать необходимые
[x].
для пользовательских агентов: в выборе шрифтов, если затребованный авторами
CSS2 улучшает подбор шрифтов на стороне клиента, делает возможным синтезирование шрифта и прогрессирующее отображение, а также загрузку шрифтов из Web. Это улучшает возможности 'WebFonts'.
В шрифтовой модели CSS2, как и в CSS1, каждый ПА имеет в своём распоряжении базу данных (БД) шрифтов.
CSS1 ссылалось на эту БД, но не предоставляло детальной информации о том, что в БД находится.
CSS2 определяет информацию в этой БД и позволяет авторам таблиц стилей работать в ней. При запросе на отображение символа определённого шрифта, ПА сначала идентифицирует тот
В соответствии с этой моделью мы организовали данную спецификацию по двум разделам. Первый касается механизма спецификации шрифта, посредством которого авторы специфицируют, какой
То, как ПА конструирует базу шрифтов, находится вне поля зрения данной спецификации, поскольку реализация БД зависит от таких факторов, как операционная система, система окон и клиент.
Первая фаза механизма шрифтов CSS рассматривает, как авторы таблиц стилей специфицируют, какие
К сожалению, не существует общепринятой хорошо проработанной и универсальной системы классификации шрифтов по их именам, и терминология, применимая к именам одного семейства шрифтов, может не подходить для других. Например, термин 'italic' обычно используется для обозначения наклонного текста, но наклонный текст может также обозначаться Oblique, Slanted, Incline, Cursive или Kursiv.
Имена шрифтов обычно содержат термины, описывающие "вес" шрифта. Главной задачей этих имён является различение шрифтов одного семейства по толщине. По этим именам не существует общепринятых значений для указания толщины, и использование этих значений может очень различаться. Например, утолщённый
Этот недостаток систематизации имён делает невозможным, в общем случае, генерацию модифицированного имени шрифта, отличающегося определёнными признаками, такими как "жирность".
В связи с этим CSS использует другую модель.
CSS2 специфицирует
Свойство Семейство шрифта специфицирует, какое семейство шрифтов используется для вывода текста. Семейство это группа шрифтов, созданных с использованием сходных принципов дизайна и внешнего вида. Один член семейства может быть italic, другой bold, третий - сжатый или использующий малые заглавные. Имена семейств включают "Helvetica", "New Century Schoolbook", и "Kyokasho ICA L". Имена семейств не ограничены латиницей. Имена семейств могут быть сгруппированы по различным категориям: без или с засечками, с непропорциональными символами, симулирующие письмо от руки, фантазийные
Стиль шрифта/Font style
Специфицирует, отображается ли текст нормальным, italic или наклонным. Italic - это более курсивный шрифт, чем normal, но не такой курсивный, чтобы отображать письмо от руки. Oblique - это наклонная форма шрифта normal, и обычно используется вместе со шрифтами sans-serif. Такое определение устраняет путаницу, когда слегка наклонённые
Вариант шрифта/Font variant
Обозначает, выводится ли текст нормальными или малыми заглавными глифами для
Вес шрифта/Font weight
Вес шрифта имеет отношение к толщине
Сжатие/Font stretch
Обозначает величину сжатия или расширения
Размер/Font size
Относится к размеру шрифта от базовой линии, когда установлен в solid (в терминах CSS это тогда, когда свойства
Для всех свойств, за исключением
Свойства шрифта в CSS используются для описания желаемого вида текста документа. Дескрипторы шрифта, напротив, используются для описания характеристик шрифта, чтобы мог быть выбран походящий
О классификации шрифтов см. раздел дескрипторы шрифта.
'font-family'
Значение: [[
Начальное: зависит от ПА
Применяется: ко всем элементам
Наследуется: да
Процентное: N/A
Носитель: визуальный
Это свойство специфицирует приоритетный список имён семейств шрифтов и/или названий родовых семейств. Для решения проблем отсутствия в одном конкретном шрифте
Например, для отображения текста, содержащего смесь английских и математических
BODY { font-family: Baskerville, "Heisi Mincho W3", Symbol, serif }
Латинские
Общие семейства шрифтов используются, если один или более шрифтов из набора шрифтов недоступны. Хотя во многих шрифтах есть глиф "отсутствующий символ", обычно это пустой квадрат, он как правило не выводится, если только это не последний
Есть два типа имён семейств шрифтов:
<family-name>/Имя семейства
Имя семейства шрифтов по выбору. В предыдущем примере "Baskerville", "Heisi Mincho W3" и "Symbol" являются семействами шрифтов. Имена семейств шрифтов, содержащие пробелы, должны заключаться в кавычки. Если кавычки отсутствуют, любые
<generic-family>
Определены следующие родовые семейства: 'serif',
Авторам рекомендуется предлагать родовое семейство шрифтов в качестве последней альтернативы, для надёжности. Например:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN">
<HTML>
<HEAD>
<TITLE>Font test</TITLE>
<STYLE type="text/css">
BODY { font-family: "new century schoolbook", serif }
</STYLE>
</HEAD>
<BODY>
<H1 style="font-family: 'My own font', fantasy">Test</H1>
<P>What's up, Doc?
</BODY>
</HTML>
Обогащённый синтаксис выбора в CSS2 можно использовать для создания печати, чувствительной к языку. Например, некоторые китайские и японские символы унифицированы для того, чтобы использовать одну и ту же точку кода в Unicode, хотя абстрактные глифы - разные в этих двух языках.
*:lang(ja-jp) { font: 900 14pt/16pt "Heisei Mincho W9", serif }
*:lang(zh-tw) { font: 800 14pt/16.5pt "Li Sung", serif }
Здесь выбирается любой элемент соответствующего языка - японского или традиционного китайского - и запрашивается соответствующий шрифт.
'font-style'
Значение: normal | italic | oblique | inherit
Начальное: normal
Применяется: ко всем элементам
Наследуется: да
Процентное: N/A (не установлено)
Носитель: визуальный
Свойство
normal
Определяет
oblique
Определяет
italic
Определяет
В этом примере текст normal в элементах H1, H2 или H3 будет отображаться шрифтом italic. Однако, выделенный текст (EM) в элементе H1 будет выведен как normal.
H1, H2, H3 { font-style: italic }
H1 EM { font-style: normal }
'font-variant'
Значение: normal | small-caps | inherit
Начальное: normal
Применяется: ко всем элементам
Наследуется: да
Процентное: N/A
Носитель: визуальный
В шрифтах малых заглавных букв
normal
Специфицирует
small-caps
Специфицирует
Результатом следующего примера будет элемент H3 с малыми заглавными буквами, с выделенными словами (EM) из наклонённых малых заглавных:
H3 { font-variant: small-caps }
EM { font-style: oblique }
Поскольку это свойство переводит
'font-weight'
Значение: normal | bold | bolder | lighter | 100 | 200 | 300 | 400 | 500 | 600 | 700 | 800 | 900 | inherit
Начальное: normal
Применяется: ко всем элементам
Наследуется: да
Процентное: N/A
Носитель: визуальный
Свойство 'font-weight' специфицирует вес шрифта. Значения имеют следующий смысл:
от 100 до 900
Эти значения формируют упорядоченную последовательность, где каждый номер обозначает вес, который темнее своего предшественника.
normal
То же, что '400'.
bold
То же, что '700'.
bolder
Определяет вес шрифта, более тёмный, чем наследуемый. Если такого веса нет, результатом будет более "тёмное" числовое значение (а
lighter
Определяет вес шрифта, назначаемый шрифту, который светлее, чем наследуемый. Если такого веса нет, результатом будет более "светлое" числовое значение (а
P { font-weight: normal } /* 400 */
H1 { font-weight: 700 } /* bold */
BODY { font-weight: 400 }
STRONG { font-weight: bolder } /* 500 возможно */
Дочерние элементы наследуют вычисленное значение веса.
'font-stretch'
Значение: normal | wider | narrower | ultra-condensed | extra-condensed | condensed | semi-condensed | semi-expanded | expanded | extra-expanded | ultra-expanded | inherit
Начальное: normal
Применяется: ко всем элементам
Наследуется: да
Процентное: N/A
Носитель: визуальный
Свойство
1ultra-condensed
2extra-condensed
3condensed
4semi-condensed
5normal
6semi-expanded
7expanded
8extra-expanded
9ultra-expanded
Относительное ключевое слово 'wider' устанавливает значение в следующее более "широкое" по сравнению с наследуемым значение (не выше 'ultra-expanded'); относительное ключевое слово 'narrower' устанавливает значение в следующее более "сжатое" значение ниже наследуемого значения (не ниже 'ultra-condensed').
'font-size'
Значение:
Начальное: medium
Применяется: ко всем элементам
Наследуется: да, вычисленное значение наследуется
Процентное: ссылается на размер шрифта родительского элемента
Носитель: визуальный
Это свойство описывает размер шрифта, установленного в solid. Значения имеют следующий смысл:
Ключевое слово <absolute-size> ссылается на вход в таблице размеров шрифта, вычисленной и хранимой пользовательским агентом. Возможные значения:
[ xx-small | x-small | small | medium | large | x-large | xx-large ]
На экране компьютера между смежными индексами применяется масштаб 1.2: если
Примечание. В CSS1 масштаб между смежными индексами принимался в 1.5 и, по опыту пользователей, оказался слишком большим.
<relative-size>/относительный размер
Ключевое слово <relative-size> интерпретируется относительно таблицы размеров шрифта и размера шрифта родительского элемента. Возможные значения:
[ larger | smaller ]
Например, если родительский элемент имеет размер шрифта 'medium', значение 'larger' сделает размер шрифта текущего элемента 'large'. Если размер родительского элемента не вмещается в диапазон таблицы, ПА свободен в интерполяции значений таблицы или округлении до ближайшего. ПАгенту может потребоваться экстраполировать значения таблицы, если цифровое значение находится вне ключевых слов.
<length>
Значение length специфицирует абсолютный размер шрифта (т.е. независимый от таблицы шрифтов ПА). Негативные значения недопустимы.
<percentage>
Процентное значение специфицирует абсолютный размер шрифта относительно размера шрифта родительского элемента. Использование процентных значений или значений в 'em' даёт более надёжные и каскадируемые таблицы стилей.
Текущее значение данного свойства может отличаться от обсчитанного свойства при наличии цифрового значения
Дочерние элементы наследуют обсчитанное значение
P { font-size: 12pt; }
BLOCKQUOTE { font-size: larger }
EM { font-size: 150% }
EM { font-size: 1.5em }
'font-size-adjust'
Значение:
Начальное: none
Применяется: ко всем элементам
Наследуется: да
Процентное: N/A
Носитель: визуальный
В
Например, популярный
Это свойство позволяет авторам специфицировать значение аспекта, сохраняющее x-height первого шрифта в подставляемом шрифте. Значения имеют следующий смысл:
none
Не сохраняет x-height шрифта.
<number>
Специфицирует значение аспекта. Число относится к значению аспекта первого шрифта. Значение масштаба доступных
y(a/a') = c
где:
y = 'font-size' первого шрифта
a' = значение аспекта доступного шрифта
c = 'font-size' для применения к доступному шрифту
Например, если 14px Verdana (со значением аспекта 0.58) окажется недоступным, а доступный шрифт имеет значение аспекта 0.46, font-size замещающего будет 14 * (0.58/0.46) = 17.65px.
Уточнение размера шрифта имеет место при обсчёте текущего значения
Первый рисунок показывает различные типы
Следующий рисунок показывает результат
'font'
Значение: [ [ <'font-style'> || <'font-variant'> || <'font-weight'> ]? <
Начальное: см. конкретные свойства
Применяется: ко всем элементам
Наследуется: да
Процентное: допускается в
Носитель: визуальный
Свойство 'font', за исключением случаев, описанных ниже, является сокращённым значением свойств установок
Все свойства, относящиеся к шрифтам, сначала устанавливаются в свои начальные значения, включая перечисленные в предыдущих параграфах, плюс
P { font: 12pt/14pt 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 }
P { font: oblique 12pt "Helvetica Nue", serif; font-stretch: condensed }
Во втором правиле процентное значение размера шрифта ('80%') относится к размеру шрифта родительского элемента. В третьем правиле высота строки в процентах ('110%') относится к размеру шрифта самого элемента.
Первые три правила не специфицируют 'font-variant' и 'font-weight' явно, поэтому эти свойства получают свои начальные значения ('normal'). Обратите внимание, что имя семейства шрифтов "new century schoolbook", содержащее пробелы, заключено в кавычки. Четвёртое правило устанавливает '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'.
Шестое правило устанавливает 'font-style', 'font-size' и 'font-family', другие свойства шрифта в свои начальные значения. Оно затем устанавливает 'font-stretch' в 'condensed', поскольку это свойство не может быть установлено в это значение путём использования сокращённого свойства 'font'.
Следующие значения относятся к
caption
icon
menu
message-box
small-caption
status-bar
Это является причиной того, почему это свойство - "почти" сокращённое свойство:
BUTTON { font: 300 italic 1.3em/1.7em "FB Armada", sans-serif }
BUTTON P { font: menu }
BUTTON P EM { font-weight: bolder }
Если шрифт для использования в выпадающих меню в конкретной системе установлен, к примеру, 9-пунктовый Charcoal с весом 600, тогда элементы P - потомки BUTTON будут отображаться так, как если бы действовало правило:
BUTTON P { font: 600 9pt Charcoal }
Поскольку сокращение 'font' устанавливает в начальное значение любое свойство, не получившее явно своего значения, это действие будет равносильно такому объявлению:
BUTTON P {
font-style: normal;
font-variant: normal;
font-weight: 600;
font-size: 9pt;
line-height: normal;
font-family: Charcoal
}
Общие семейства
Все пять общих семейств
Рекомендуется, чтобы ПА позволяли пользователям сделать альтернативный выбор общих
Вот примеры
| Латинские | 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 |
| | Lo Cicero Cherokee |
Примеры
| Латинские | 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 |
Примеры таких
| Латинские | Caflisch Script, Adobe Poetica, Sanvito, Ex Ponto, Snell Roundhand, Zapf-Chancery |
| Кириллические | ER Architekt |
| Еврейские | Corsiva |
| Арабские | DecoType Naskh, Monotype Urdu 507 |
Фантазийные
Примеры:
| Латинские | Alpha Geometrique, Critter, Cottonwood, FB Reactor, Studz |
Единственным критерием для моноширинных
| Латинские | Courier, MS Courier New, Prestige, Everson Mono |
| Греческие | MS Courier New, Everson Mono |
| Кириллические | ER Kurier, Everson Mono |
| Японские | Osaka Monospaced |
| Чероки | Everson Mono |
Вторая фаза механизма
Имеется четыре возможных действия при выборе шрифта:
совпадение имени шрифта
В этом случае ПА использует существующий доступный шрифт, который имеет то же самое имя семейства, что и запрашиваемый шрифт. (Обратите внимание, что внешний вид и параметры не обязательно должны совпадать, если
смысловое совпадение
В этом случае ПА использует существующий доступный шрифт, который имеет наибольшее
синтез
В этом случае ПА создаёт шрифт, который лишь приблизительно совпадает по внешнему виду, а также по метрическим параметрам, с запрошенным шрифтом. Информация для синтезирования включает информацию для сравнения и обычно требует более точных значений параметров, используемых для некоторых схем сравнения. В особенности для синтеза необходимы точные данные ширины и
загрузка
Наконец, ПА может затребовать
отображение по частям комбинирует загрузку и один из других методов; при этом предоставляется временный замещающий
Примечание.
Описание шрифта является мостом между авторской спецификацией шрифта и данными шрифта, которые представляют собой данные, необходимые для форматирования текста и для представления абстрактных глифов, для которых карта
Описания
Дескрипторы шрифта можно классифицировать по трём типам:
1служащие связкой между использованием шрифта в CSS и описанием шрифта (эти дескрипторы имеют те же имена, что и соответствующие свойства шрифта CSS),
2URI для локализации данных шрифта,
3для характеристики шрифта, являющиеся связкой между описанием шрифта и
Все
@font-face { <font-description> }
где
дескриптор: значение;
дескриптор: значение;
[...]
дескриптор: значение;
Одно правило @font-face специфицирует значение для одного дескриптора шрифта, явно или неявно. Дескрипторы, не получившие явных значений в правиле, берут их из списка для каждого дескриптора в этой спецификации. Эти дескрипторы применяются только в контексте того правила @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> Этот заголовок выводится с использованием Robson Celtic</H1>
</BODY>
</HTML>
Таблица стилей (в элементе STYLE) содержит правило CSS, устанавливающее все элементы H1 на использование семейства шрифтов 'Robson Celtic'.
Реализация CSS1 будет искать у клиента шрифт, чьи имя семейства и другие свойства совпадают с 'Robson Celtic', и, если совпадение не будет найдено, будет использоваться специфичный для данного ПА резервный шрифт serif (который должен существовать).
ПА, реализующий CSS2, сначала проверяет правила @font-face для поиска описания шрифта, определённого как 'Robson Celtic'. Данный пример содержит подходящее правило. Хотя в этом правиле и не содержится много данных шрифта, в нём есть URI, где можно запросить шрифт для представления данного документа. Загруженные шрифты не должны становиться доступными для других приложений. Если не найдено совпадение для @font-face, ПА попытается выполнить сравнение как ПА с CSS1.
Обратите внимание, что, если шрифт 'Robson Celtic' был установлен на клиентской системе, это может вызвать добавление пользовательским агентом входа в БД шрифтов для установленной копии, как описано в разделе алгоритм совпадения шрифта. Установленная копия получит совпадение до загружаемого шрифта (в предыдущем примере).
Реализации CSS1, не понимающие правило @font-face, вычислят открывающую фигурную скобку и будут игнорировать всё до появления закрывающей скобки. Это at-правило соответствует требованию вперёд-совместимого разбора CSS. Разборщики могут игнорировать эти правила без возникновения ошибки.
Разделение дескрипторов шрифта и данных шрифта даёт возможность выполнить выбор и/или замену шрифта. Защита данных и ограничения репликации для дескрипторов шрифта могут быть менее жёсткими, чем для полных данных шрифта.
Таким образом, возможно установить определение шрифта локально или как минимум иметь его в локальном кэше, если он появляется в обычно используемой таблице стилей; это может не потребовать доступа к полному определению шрифта в Web больше, чем однократно, для именованного шрифта.
Если дескриптор шрифта дублируется, последний появившийся дескриптор используется, а остальное должно игнорироваться.
Также любые дескрипторы, которые не распознаются или не используются ПА, должны игнорироваться. Последующие версии CSS могут предоставить дополнительные дескрипторы для лучшего подбора, замены или синтеза шрифта.
Следующие дескрипторы имеют те же имена, что и соответствующие свойства шрифта CSS2, и принимают одиночное значение или список разделённых запятыми значений.
Значения в таком списке (за исключением особо отмеченных) - те же самые, что и соответствующие свойства CSS2. Если это одиночное значение, оно должно совпадать. Если это список, любой элемент списка может образовать совпадение. Если в @font-face дескриптор отсутствует, используется начальное значение дескриптора.
'font-family'(Дескриптор)
Значение: [
Начальное: зависит от ПА
Носитель: визуальный
Это дескриптор имени семейства
'font-style' (Дескриптор)
Значение: all | [ normal | italic | oblique ] [, [normal | italic | oblique] ]*
Начальное: all
Носитель: визуальный
Это дескриптор стиля шрифта, принимающий то же значение, что и свойство
'font-variant' (Дескриптор)
Значение: [normal | small-caps] [,[normal | small-caps]]*
Начальное: normal
Носитель: визуальный
Это CSS-обозначение того, является ли этот
Примечание. Кириллические прямые
'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
Носитель: визуальный
Это дескриптор веса шрифта относительно других
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 для сжатия или расширения шрифта относительно других
[x]. относительные ключевые слова (wider, narrower) не допускаются;
[x]. список разделённых запятыми значений разрешён;
[x]. разрешено ключевое слово 'all'.
'font-size'
Значение: all |
Начальное: all
Носитель: визуальный
Это дескриптор размера, предоставляемого для данного шрифта. Разрешены только абсолютные единицы измерения, в отличие от свойства
Начальное значение 'all' подходит для большинства имеющих вес
Следующий дескриптор не обязателен внутри определения шрифта, но используется для того, чтобы избежать проверки или загрузки шрифта, который не имеет достаточного количества глифов для вывода определённого символа.
'unicode-range' (Дескриптор)
Значение:
Начальное: U+0-7FFFFFFF
Носитель: визуальный
Это дескриптор диапазона
Значения
Например,
Начальное значение этого дескриптора покрывает не только весь Basic Multilingual Plane (BMP), в пределах U+0-FFFF, но также и весь репертуар ISO 10646. Таким образом, начальное значение говорит о том, что
Значения могут записываться любым количеством цифр. Для единичной цифры
unicode-range: U+20A7
нет маски - обозначение одиночной позиции символа (песета - символ испанской валюты)
unicode-range: U+215?
одна маска, покрывает диапазон от 2150 до 215F (дроби)
unicode-range: U+00??
две маски, покрывает диапазон от 0000 до 00FF (Latin-1)
unicode-range: U+E??
две маски, покрывает от 0E00 до 0EFF (письмо Lao).
Пара чисел в данном формате в комбинации с дефисом обозначает более широкий диапазон. Например:
unicode-range: U+AC00-D7FF
это диапазон от AC00 до D7FF (область Hangul Syllables).
Множественные конечные диапазоны могут быть специфицированы путём разделения запятыми. Как и в других списках CSS с разделением запятыми, любой пробел перед или после запятой
unicode-range: U+370-3FF, U+1F??
покрывает диапазон от 0370 до 03FF (Modern Greek) плюс от 1F00 до 1FFF (Ancient polytonic Greek).
unicode-range: U+3000-303F, U+3100-312F, U+32??, U+33??, U+4E00-9FFF, U+F9000-FAFF, U+FE30-FE4F
один из наихудших примеров в плане многозначности, очень определённо обозначает, что этот (очень объёмный)
Более понятное представление типичного китайского шрифта:
unicode-range: U+3000-33FF, U+4E00-9FFF
unicode-range: U+11E00-121FF
этот
unicode-range: U+1A00-1A1F
этот
Этот дескриптор определяет количество "units/единиц измерения" на em; эти units могут использоваться другими дескрипторами для выражения различных размеров, следовательно, 'units-per-em' необходим, если другие дескрипторы зависят от него.
'units-per-em' (Дескриптор)
Значение:
Начальное: не определено
Носитель: визуальный
Это дескриптор единиц измерения для координат прямоугольника em, размера решётки дизайна, на которую накладываются
Необходим для ссылки на данные шрифта, загружаемые или установленные локально.
'src' (Дескриптор)
Значение: [ <uri> [format(<string> [, <string>]*)] |
Начальное: не определено
Носитель: визуальный
Это выстроенный по приоритету список разделённых запятыми внешних ссылок и/или имён локально установленных файлов. Внешняя ссылка указывает на данные шрифта в Web. Это необходимо, если WebFont загружен. Ресурс шрифта может быть поднабором шрифта-источника, например, он может содержать только те
Внешняя ссылка состоит из URI, за которым может идти подсказка, касающаяся формата ресурса шрифта, найденного по данному URI, и эта информация должна использоваться клиентами для исключения перехода по ссылкам на те
Форматирующая подсказка содержит список разделённых запятыми строк формата, обозначающих хорошо известные форматы
Начальный список строк формата, определённый в данной спецификации и представляющий форматы, которые наиболее вероятны для использования на различных платформах:
| Строка | Формат Шрифта | Примеры типичных расширений |
|---|---|---|
| "truedoc-pfr" | TrueDocT Portable Font Resource | .pfr |
| "embedded-opentype" | Embedded OpenType | .eot |
| "type-1" | PostScriptT Type 1 | .pfb, .pfa |
| "truetype" | TrueType | .ttf |
| "opentype" | OpenType, включая TrueType Open | .ttf |
| "truetype-gx" | TrueType с расширениями GX | |
| "speedo" | Speedo | |
| "intellifont" | Intellifont |
Как и с прочими URI в CSS, URI может быть неполным, и в этом случае он расширяется относительно расположения таблицы стилей, содержащей @font-face.
Установленное локально
Обозначением для
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.
Доступ к локально установленным шрифтам происходит через
Эти дескрипторы не обязательны для определения CSS2, но могут использоваться при смысловой подстановке
'panose-1' (Дескриптор)
Значение: [<integer>]{10}
Начальное: 0 0 0 0 0 0 0 0 0 0
Носитель: визуальный
Это дескриптор числа Panose -1, состоящего из десяти десятеричных чисел, разделённых пробелами. Список значений, разделённых запятыми, не допускается для данного дескриптора, поскольку система Panose -1 может указывать, что диапазоны значений совпадают. Начальное значение - нуль, что означает "любое" для любой цифры PANOSE; все
'stemv' (Дескриптор)
Значение:
Начальное: не определено
Носитель: визуальный
Это дескриптор ширины вертикальной основы шрифта. Если значение не определено, дескриптор не используется для подбора. Если этот дескриптор используется, также должен использоваться дескриптор 'units-per-em'.
'stemh' (Дескриптор)
Значение:
Начальное: не определено
Носитель: визуальный
Это дескриптор ширины горизонтальной основы шрифта. Если значение не определено, дескриптор не используется для подбора. Если этот дескриптор используется, также должен использоваться дескриптор 'units-per-em'.
Значение:
Начальное: 0
Носитель: визуальный
Это дескриптор угла вертикального закругления шрифта.
'cap-height' (Дескриптор)
Значение:
Начальное: не определено
Носитель: визуальный
Это дескриптор для числа-значения высоты глифов верхнего регистра шрифта. Если значение не определено, дескриптор не используется для подбора. Если этот дескриптор используется, также должен использоваться дескриптор 'units-per-em'.
'x-height' (дескриптор)
Значение:
Начальное: не определено
Носитель: визуальный
Это дескриптор высоты глифов нижнего регистра шрифта. Если значение не определено, дескриптор не используется для подбора. Если этот дескриптор используется, также должен использоваться дескриптор 'units-per-em'. Этот дескриптор может широко использоваться вместе со свойством
'ascent' (Дескриптор)
Значение:
Начальное: не определено
Носитель: визуальный
Это дескриптор максимальной неакцентированной высоты шрифта. Если значение не определено, дескриптор не используется для подбора. Если этот дескриптор используется, также должен использоваться дескриптор 'units-per-em'.
'descent'(Дескриптор)
Значение:
Начальное: не определено
Носитель: визуальный
Это дескриптор максимальной неакцентированной глубины шрифта. Если значение не определено, дескриптор не используется для подбора. Если этот дескриптор используется, также должен использоваться дескриптор 'units-per-em'.
Синтезирование шрифта предполагает, как минимум, совпадение размеров ширины специфицированного шрифта. Следовательно, для синтеза данная метрическая информация должна быть доступна. Таким же образом и для прогрессивного представления необходимо наличие метрической информации о ширине, чтобы исключить перерисовку содержимого при загрузке основного шрифта. Хотя следующие дескрипторы не обязательны для определения CSS2, некоторые необходимы для синтезирования (или прогрессивного отображения без перерисовки), если этого хочет автор. Как только основной
Самыми важными из этих дескрипторов являются 'widths' и
'widths' (Дескриптор)
Значение: [
Начальное: не определено
Носитель: визуальный
Это дескриптор ширины глифов. Значением является список разделённых запятыми значений
Если
Например:
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' (Дескриптор)
Значение:
Начальное: не определено
Носитель: визуальный
Это дескриптор максимального ограничивающего бокса шрифта. Значением является разделённый запятыми список из четырех (обязательно) чисел, определяющих, в порядке нижний левый x, нижний левый y, верхний правый x и верхний правый y, ограничивающий бокс для полного шрифта.
'definition-src' (Дескриптор)
Значение: <uri>
Начальное: не определено
Носитель: визуальный
Дескрипторы шрифта могут находиться внутри определения шрифта в таблице стилей или в отдельном
Эти необязательные дескрипторы используются для выравнивания нескольких отрезков текста друг относительно друга.
'baseline' (Дескриптор)
Значение:
Начальное: 0
Носитель: визуальный
Это дескриптор нижней базовой линии шрифта. Если этот дескриптор не установлен в значение по умолчанию (если не нулевое), должен использоваться также дескриптор 'units-per-em'.
'centerline' (Дескриптор)
Значение:
Начальное: не определено
Носитель: визуальный
Это дескриптор центральной базовой линии шрифта. Если значение не определено, ПА может использовать эвристику: как midpoint/среднюю точку для значений восхождения и нисхождения (ascent и descent). Если этот дескриптор используется, также должен использоваться дескриптор 'units-per-em'.
'mathline' (Дескриптор)
Значение:
Начальное: не определено
Носитель: визуальный
Это дескриптор математической базовой линии шрифта. Если не определен, ПА может использовать центральную базовую линию. Если этот дескриптор используется, также должен использоваться дескриптор 'units-per-em'.
'topline' (Дескриптор)
Значение:
Начальное: не определено
Носитель: визуальный
Это дескриптор верхней базовой линии шрифта. Если не определен, ПА может использовать приблизительное значение, такое как ascent. Если этот дескриптор используется, также должен использоваться дескриптор '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; /* интересно, что italic весом 900 не существует */
}
@font-face {
font-family: "Swiss 721";
src: url(swiss721.pfr); /* Сжатый Swiss 721 */
font-stretch: condensed;
}
@font-face {
font-family: "Swiss 721";
src: url(swiss721.pfr); /* Расширенный Swiss 721 */
font-stretch: expanded;
}
В этом разделе рассматриваются характеристики шрифта, которые могут пригодиться на стороне клиента для подбора, синтеза и загрузки на различных платформах Web.
Данные могут быть использованы для любого носителя, которому необходимы
Эти характеристики используются для описания шрифта. Они не являются специфичными для CSS, или таблиц стилей. В CSS каждая характеристика описывается дескриптором шрифта. Эти характеристики могут также отображаться в узлы VRML, CGM Application Structures, Java API или альтернативные языки таблиц стилей.
Вот неполный список примеров:
[x]. 2-мерные векторные форматы
[x]. Computer Graphics Metafile
[x]. Simple Vector Format
[x]. 3-мерные графические форматы
[x]. VRML
[x]. 3DMF
[x]. Технологии внедрения объектов
[x]. Java
[x]. Active-X
[x]. Obliq
Это полное имя конкретного представителя семейства
Например, имена шрифта семейства TrueType и шрифта PostScript могут отличаться в использовании пробельных
Определение имени шрифта важно потому, что оно (имя) является ссылкой на локально установленный шрифт. Важно, чтобы имя было определённым, не зависящим от платформы и приложения. В связи с этим, имя не должно быть зависимым от приложения и языка.
Идеальным решением будет имя, которое уникально идентифицирует каждую коллекцию данных
Поскольку главная задача имени шрифта - дать возможность ПА определить, имеется ли локальная копия специфицированных данных шрифта, имя шрифта обязано быть именем, которое будет иметься во всех законных копиях данных шрифта. Иначе будет генерироваться нежелательный трафик Web из-за неправильных совпадений с локальной копией.
Определённые значения, такие как метрики ширины, выражаются в единицах, относительных к абстрактному квадрату, чья высота подразумевается как расстояние между строками того же размера, что и размер типа. Этот квадрат называется em-квадрат и является дизайн-решёткой, на которой определяются контуры глифов. Значение этого дескриптора специфицирует, на сколько единиц делится EM-квадрат. Обычными значениями являются, например, 250 (Intellifont), 1000 (Type 1) и 2048 (TrueType, TrueType GX и OpenType).
Если значение не специфицировано, то невозможно определить, что означает какая-либо метрика шрифта. Например, один
Задаёт позицию центральной базовой линии в em-квадрате. Центральная базовая линия используется в идеографическом письме для выравнивания, так же как нижняя базовая линия используется для выравнивания в латинице, греческом письме и кириллице.
Явно или неявно, каждый
На практике, многие
Какой из этих глифов используется и зависит или от правил языка, или от предпочтений дизайнера.
В арабском языке, например, все буквы содержат 4 (или 2) различных фигуры, в зависимости от того, используется буква в начале слова, в середине, в конце или изолированно. Во всех случаях это один
Есть также
Специфицирует ту часть имени шрифта, где указывается имя семейства данного шрифта. Например, имя семейства для Helvetica-Bold - Helvetica, имя семейства для ITC Stone Serif Semibold Italic - ITC Stone Serif. Некоторые системы рассматривают "украшения", относящиеся к сжатию или расширению как часть имени семейства.
Это список значений ширины на дизайн-решётке для глифов, соответствующих каждому
Относится к доминантной основе шрифта. Может быть два или более значений разработанной при дизайне ширины. Например, главная вертикальная основа римских
Это мера y-координаты верха плоских букв верхнего регистра в латинице, греческом и кириллическом письме, отмеряемая от базовой линии. Этот дескриптор не обязателен для использования в шрифтах, не содержащих
Это мера y-координаты верха неакцентированных, невосходящих букв нижнего регистра в латинице, греческом и кириллическом письме, отмеряемая от базовой линии. Буквы с плоским верхом используются с
Этот дескриптор не используется для тех
Задаёт позицию нижней базовой линии в em-квадрате. Нижняя базовая линия используется в латинском, греческом и кириллическом письме для выравнивания, так же как верхняя базовая линия используется для выравнивания в языках, происходящих от санскрита.
Задаёт позицию математической базовой линии в em-квадрате. Математическая базовая линия используется в математических
Это наименьший прямоугольник, включающий фигуру, образующуюся в том случае, если все
Если динамически загружаемый
Это расстояние в em-квадрате от базовой линии до высшей точки, достигаемой глифом, исключая любые акценты и знаки диакритики.
Это расстояние в em-квадрате от базовой линии до низшей точки, достигаемой глифом, исключая любые акценты и знаки диакритики.
Panose-1 это индустриальный стандарт классификации
Обозначает репертуар глифов шрифта, относящийся к ISO 10646 (Unicode).Поскольку этот репертуар не сплошной (большинство
Этот метод может быть расширен в будущем для размещения
Имеются другие классификации письма, такие как система Monotype (см. [MONOTYPE] ) и предлагаемая система ISO. Эти системы плохо расширяются.
В связи с этим, в данной спецификации используется классификация репертуаров глифов в диапазоне
Задаёт позицию верхней базовой линии в em-квадрате. Используется видами письма, происходящими от санскрита, для выравнивания, так же как нижняя базовая линия используется в латинском, греческом и кириллическом письме.
Это ширина вертикальной (или приблизительно вертикальной) основы глифов. Эта информация часто вводится для подсказки и может не быть непосредственно доступной в шрифтах некоторых форматов. Этот показатель нужен для доминантной вертикальной основы шрифта, поскольку могут быть различные группировки вертикальных основ (напр., одна главная, другая - облегчённого веса, как для M или N верхнего регистра).
Это угол в градусах отклонения от вертикали для доминантного вертикального наклона шрифта. Значение является негативным для
Эта спецификация расширяет алгоритм, данный ранее в CSS1. Этот алгоритм редуцируется до алгоритма спецификации CSS1, если таблицы стилей не содержат правил @font-face.
Сопоставление дескрипторов со шрифтами должно выполняться тщательно.
Дескрипторы сопоставляются в определённом порядке, чтобы иметь уверенность в том, что результаты этого процесса сопоставления максимально корректны для всех ПА (в предположении, что такая же библиотека
1ПА создаёт БД (или получает к ней доступ) соответствующих дескрипторов всех
[x]. установлен локально;
[x]. объявлен с использованием правила @font-face в одной из таблиц стилей, связанных с текущим документом или содержащихся в нём;
[x].
использован в таблице стилей по умолчанию в ПА, которая концептуально существует во всех ПА и имеет полные правила @font-face для всех
2Для данного элемента и для каждого символа в данном элементе ПА подбирает свойства
3Если в шаге 2 не найдено совпадений шрифта с
4Если в шаге 3 не найдено совпадений шрифта с
5Если в шаге 3 не найдено совпадений шрифта с
6Если шаги 3, 4 и 5 потерпели неудачу и в наборе
7Если это совпавший шрифт, но он не содержит
8Если в семействе, выбранном в шаге2, нет нужного шрифта, тогда используется наследуемое или зависящее от ПА значение
9ПА, выполняющие прогрессивное отображение и ожидающие загрузки
Примечание. Вышеуказанный алгоритм можно оптимизировать для исключения необходимости повторных обращений к свойствам CSS2 для каждого символа.
Правила совпадения для дескрипторов из вышеизложенного (2) таковы:
1
'font-style' рассматривается первым. Принимается 'italic', если имеется
Иначе значения должны подбираться точно, или font-style терпит неудачу.
2'font-variant' рассматривается следующим. 'normal' соответствует шрифту, не помеченному 'small-caps'; 'small-caps' соответствует (1) шрифту, помеченному как 'small-caps', (2) шрифту, в котором малые заглавные синтезируются, или (3) шрифту, в котором все буквы нижнего регистра заменяются на заглавные.
3'font-weight' рассматривается следующим, он никогда не терпит неудачу. (См. ниже 'font-weight'.)
4
Значения свойства 'font-weight' задаются по цифровой шкале, где значение '400' (или 'normal') соответствует шрифту "normal" данного семейства шрифтов. Название веса, ассоциированное с этим шрифтом, обычно: Book, Regular, Roman, Normal или иногда Medium.
Ассоциирование других весов семейства с числовыми значениями весов предполагается только для сохранения порядка расположения весов внутри данного семейства. ПА обязаны отображать имена в значения тем способом, который сохраняет визуальный порядок; тип шрифта, отображаемого в значение, не должен быть легче, чем типы, отображаемые в меньшие значения. Нет никаких гарантий того, как ПА будет отображать
[x]. Если семейство шрифтов уже использует шкалу из 9 цифровых значений (как в OpenType, например), весы шрифтов должны отображаться напрямую.
[x]. Если оба типа помечены как Medium и один из Book, Regular, Roman или Normal, тогда Medium устанавливается в '500'.
[x]. Шрифт, помеченный "Bold", часто соответствует значению веса '700'.
[x]. Если в семействе имеется менее 9 весов, алгоритм по умолчанию для заполнения "дыр" следующий. Если не назначено '500', оно назначается тому же шрифту, что и с '400'. Если не назначено любое из значений: '600', '700', '800' или '900', оно назначается тому же шрифту, который имеет ближайшее значение более тёмного ключевого слова, если оно имеется, в противном случае - тому, который имеет ближайшее значение более светлого. Если не назначено любое из значений: '300', '200' или '100', оно назначается тому же шрифту, который имеет ближайшее значение более светлого ключевого слова, если оно имеется, в противном случае - тому, который имеет ближайшее значение более тёмного.
Нет никаких гарантий, что в наличии будет более тёмный шрифт для каждого значения 'font-weight'; например, некоторые
Следующие два примера показывают типичные случаи отображения.
Предположим, что в семействе "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. Заметьте, что в этом примере ПА решает не назначать цифровое значение для "Example2 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" | (none) |
В следующем примере определена специфическая разновидность шрифта - Alabama Italic. Описание шрифта panose и URI-источник для запроса шрифта на сервере truetype также предоставлены. Дескрипторы font-weight и font-style предоставлены для описания шрифта. Объявление также сообщает, что вес совпадёт с любым запросом в диапазоне от 300 до 500. Семейство шрифтов - Alabama, а имя украшенного шрифта - Alabama Italic.
@font-face {
src: local("Alabama Italic"),
url(http://www.fonts.org/A/alabama-italic) format("truetype");
panose-1: 2 4 5 2 5 4 5 9 3 3;
font-family: Alabama, serif;
font-weight: 300, 400, 500;
font-style: italic, oblique;
}
В следующем примере определено семейство шрифтов. Предоставлен единственный URI для запроса данных шрифта. Этот файл данных будет содержать несколько стилей и весов именованного шрифта. Как только одно из этих определений @font-face будет разыменовано, данные окажутся в кэше ПА для использования другими разновидностями с тем же URI.
@font-face {
src: local("Helvetica Medium"),
url(http://www.fonts.org/sans/Helvetica_family) format("truedoc");
font-family: "Helvetica";
font-style: normal
}
@font-face {
src: local("Helvetica Oblique"),
url("http://www.fonts.org/sans/Helvetica_family") format("truedoc");
font-family: "Helvetica";
font-style: oblique;
slope: -18
}
В следующем примере три физических шрифта группируются в один виртуальный шрифт с расширенным диапазоном. В каждом случае имя украшенного шрифта дано в дескрипторе src, и это позволяет предпочтительно использовать локально установленные версии, если они имеются. Четвёртое правило указывает на шрифт с тем же диапазоном, но содержащийся в отдельном ресурсе.
@font-face {
font-family: Excelsior;
src: local("Excelsior Roman"), url("http://site/er") format("intellifont");
unicode-range: U+??; /* Latin-1 */
}
@font-face {
font-family: Excelsior;
src: local("Excelsior EastA Roman"), url("http://site/ear") format("intellifont");
unicode-range: U+100-220; /* Latin Extended A и B */
}
@font-face {
font-family: Excelsior;
src: local("Excelsior Cyrillic Upright"), url("http://site/ecr") format("intellifont");
unicode-range: U+4??; /* Cyrillic */
}
@font-face {
font-family: Excelsior;
src: url("http://site/excels") format("truedoc");
unicode-range: U+??,U+100-220,U+4??;
}
Этот пример можно найти в ПА в таблице стилей по умолчанию. Здесь берётся общее семейство CSS2 serif и отображается в большое количество шрифтов serif, которые могут существовать на различных платформах. Не даются метрики, поскольку они варьируются среди возможных альтернатив.
@font-face {
src: local("Palatino"),
local("Times New Roman"),
local("New York"),
local("Utopia"),
url("http://somewhere/free/font");
font-family: serif;
font-weight: 100, 200, 300, 400, 500;
font-style: normal;
font-variant: normal;
font-size: all
}
Лекция 16. Текст
Свойства, определённые в следующих разделах, влияют на визуальное представление символов, пробелов, слов и параграфов.
'text-indent'
Значение:
Начальное: 0
Применяется: к элементам уровня блока
Наследуется: да
Процентное: относительно ширины содержащего блока
Носитель: визуальный
Это свойство специфицирует отступ первой строки текста в блоке. Точнее, оно специфицирует отступ первого бокса, всплывающего в первый строчный бокс блока. Бокс получает отступ относительно левого (или правого, для вывода справа-налево) края строчного бокса. Пользовательские агенты (ПА) должны отображать этот отступ как пробел.
Значения имеют следующий смысл:
Отступ имеет фиксированный размер.
<percentage>
Процент от ширины содержащего блока.
Значение
Отступ размером '3em' для текста.
P { text-indent: 3em }
'text-align'
Значение: left | right | center | justify |
Начальное: зависит от ПА и направления письма
Применяется: к элементам уровня блока
Наследуется: да
Процентное: N/A
Носитель: визуальный
Это свойство описывает, как выравнивается инлайн-содержимое блока. Значения имеют следующий смысл:
left, right, center, and justify
Выравнивает текст влево, вправо, по центру и по формату.
<string>
Специфицирует строку, в которой ячейки столбца таблицы будут выровнены (см. детали и пример в разделе Горизонтальное выравнивание в столбце). Это значение применяется только к ячейкам таблицы. Если установлено в другом элементе, оно рассматривается как 'left' или 'right', в зависимости от того, каково направление письма: 'direction' - 'ltr' или 'rtl', соответственно.
Блок текста это стопка строчных боксов. В случаях 'left', 'right' и 'center', это свойство специфицирует, как инлайн-боксы в каждом строчном боксе выравниваются относительно левой и правой сторон строчного бокса; выравнивание не производится относительно порта просмотра. В случае с 'justify', ПА может сжать инлайн-боксы в дополнение к уточнению их позиций. (См. также
Здесь обратите внимание, что, поскольку 'text-align' наследуется, все элементы уровня блока внутри элемента DIV с 'class=center' получат своё инлайн-содержимое сцентрированным.
DIV.center { text-align: center }
Примечание. Фактический алгоритм выравнивания по формату зависит от ПА и языка письма.
'text-decoration'
Значение: none | [ underline || overline || line-through || blink ] | inherit
Начальное: none
Применяется: ко всем элементам
Наследуется: нет (см. текст)
Процентное: N/A
Носитель: визуальный
Это свойство описывает декоративное оформление текста элемента. Если это свойство специфицировано для элемента уровня блока, оно воздействует на всех потомков инлайн-уровня данного элемента. Если оно специфицировано (или влияет на) элемент инлайн-уровня, оно воздействует на все боксы, генерируемые элементом. Если элемент не имеет содержимого или текста (например, элемент IMG в HTML), ПА обязаны
Значения имеют следующий смысл:
none
Не производит декоративное оформление.
underline
Каждая строка текста подчёркнута.
overline
Каждая строка текста имеет над собой линию.
line-through
Каждая строка текста имеет посередине перечёркивающую линию.
blink
Текст мигает. От соответствующих ПА не требуется поддерживать это значение.
Цвет(а), необходимый для декорирования текста, должен быть получен из значения свойства 'color'.
Это свойство не наследуется, но боксы - потомки бокса блока должны быть сформатированы с тем же оформлением (например, все должны быть с подчёркиванием). Цвет оформления должен остаться тем же самым, даже если элементы-потомки имеют другие значения 'color'.
В следующем примере для HTML, текстовое содержимое всех элементов A будет подчёркнуто:
A[href] { text-decoration: underline }
'text-shadow'
Значение: none | [<color> ||
Начальное: none
Применяется: ко всем элементам
Наследуется: нет (см. текст)
Процентное: N/A
Носитель: визуальный
Это свойство принимает список разделённых запятыми эффектов оттенения, применяемых к тексту элемента. Эффекты оттенения применяются в том порядке, в котором они специфицированы, и могут, таким образом, перекрываться один другим, но они никогда не перекрывают сам текст. Эффекты оттенения не изменяют размеры бокса, но могут выходить за его пределы. Уровень стэка эффекта оттенения - тот же самый, что и самого элемента.
Каждый эффект оттенения обязан специфицировать смещение оттенения и может по выбору специфицировать радиус рассеяния и цвет тени.
Смещение оттенения специфицируется двумя значениями
Радиус рассеяния может быть по выбору специфицирован после смещения оттенения. Радиус рассеяния это значение, обозначающее границы эффекта рассеяния. Точный алгоритм вычисления эффекта рассеяния не специфицирован.
Значение цвета может быть по выбору специфицировано до или после значений length эффекта оттенения. Значение цвета будет использоваться как базис эффекта оттенения. Если цвет не специфицирован, вместо него будет использоваться значение свойства 'color'.
Оттенения текста могут использоваться вместе с псевдоэлементами :first-letter и :first-line.
Следующий пример установит тень справа и снизу от текста элемента. Поскольку цвет не специфицирован, тень будет того же цвета, что и сам элемент, и, поскольку радиус рассеяния не специфицирован, тень текста не будет рассеиваться:
H1 { text-shadow: 0.2em 0.2em }
Следующий пример установит тень справа и снизу от текста элемента. Тень будет иметь радиус рассеяния 5px и красный цвет:
H2 { text-shadow: 3px 3px 5px red }
Следующий пример специфицирует список эффектов оттенения. Первая тень будет справа и снизу от текста элемента и будет красного цвета без рассеяния. Вторая тень будет перекрывать первую и будет жёлтая, с рассеянием и размещена влево и ниже текста. Третья тень будет справа и сверху над текстом. Поскольку у неё цвет не специфицирован, будет использоваться значение свойства 'color' элемента:
H2 { text-shadow: 3px 3px red, yellow -3px 3px 2px, 3px -3px }
Рассмотри этот пример:
SPAN.glow {
background: white;
color: white;
text-shadow: black 0px 0px 5px;
}
Здесь свойства 'background' и 'color' имеют одинаковые значения, и свойство 'text-shadow' используется для создания эффекта "солнечного затмения":
Примечание. Это свойство не определено в CSS1. Некоторые эффекты оттенения (такие как в последнем примере) могут делать текст невидимым в ПА, поддерживающих только CSS1.
'letter-spacing'
Значение: normal |
Начальное: normal
Применяется: ко всем элементам
Наследуется: да
Процентное: N/A
Носитель: визуальный
Это свойство специфицирует расстояние между символами текста. Значения имеют следующий смысл:
normal
Нормальное расстояние для текущего шрифта. Это значение позволяет ПА изменять расстояние между символами при выравнивании и распределении текста.
<length>
Обозначает межсимвольное пространство, дополнительное к значению по умолчанию. Значения могут быть отрицательными, но могут иметься ограничения в конкретных реализациях. ПА могут не иметь после этого возможности изменять межсимвольное пространство для распределения и выравнивания текста.
Алгоритмы межсимвольного пространства независимы от ПА. Межсимвольное пространство может также устанавливаться при выравнивании по формату (см. свойство 'text-align').
В этом примере пространство между символами в элементах BLOCKQUOTE увеличено на '0.1em'.
BLOCKQUOTE { letter-spacing: 0.1em }
В следующем примере ПАгенту не разрешено изменять межсимвольное пространство:
BLOCKQUOTE { letter-spacing: 0cm } /* То же, что '0' */
Если расстояние-результат между двумя символами отличается от расстояния по умолчанию, ПА не должны использовать
Соответствующие ПА могут рассматривать значение свойства
'word-spacing'
Значение: normal |
Начальное: normal
Применяется: ко всем элементам
Наследуется: да
Процентное: N/A
Носитель: визуальный
Это свойство специфицирует расстояние между словами. Значения имеют следующий смысл:
normal
Нормальное межсловное пространство, как определено текущим шрифтом и/или ПА.
<length>
Это значение указывает межсловное пространство, дополняющее значение по умолчанию. Значения могут быть отрицательными, но могут существовать ограничения, в зависимости от конкретной реализациии.
Алгоритмы межсловного пространства зависят от ПА. Межсловное пространство устанавливается также при выравнивании по формату (см. свойство 'text-align').
Здесь пространство между словами в элементах H1 увеличено на '1em'.
H1 { word-spacing: 1em }
Соответствующие ПА могут рассматривать значение свойства
'text-transform'
Значение: capitalize | uppercase | lowercase | none | inherit
Начальное: none
Применяется: ко всем элементам
Наследуется: да
Процентное: N/A
Носитель: визуальный
Это свойство управляет эффектами капитализации текста элемента. Значения имеют следующий смысл:
capitalize
Переводит первый символ каждого слова в верхний регистр.
uppercase
Переводит все символы каждого слова в верхний регистр.
lowercase
Переводит все символы каждого слова в нижний регистр.
none
Нет эффектов капитализации.
Реальная трансформация зависит в каждом конкретном случае от языка письма. См. о способах определения языка элемента в RFC 2070 ( [RFC2070] ).
Соответствующие ПА могут рассматривать значение
Здесь весь текст в элементе H1 переводится в верхний регистр.
H1 { text-transform: uppercase }
'white-space'
Значение: normal | pre | nowrap | inherit
Начальное: normal
Применяется: к элементам уровня блока
Наследуется: да
Процентное: N/A
Носитель: визуальный
Это свойство объявляет, как обрабатываются пробелы внутри элемента. Значения имеют следующий смысл:
normal
Это значение указывает ПАгентам, что нужно сжимать последовательности пробелов и что нужны разрывы строк для заполнения строк бокса. Дополнительные разрывы строк могут создаваться с помощью ввода "\A" в генерируемом содержимом (например, для элемента BR в HTML).
pre
Это значение предотвращает сжатие ПАгентами последовательностей пробелов. Строки переносятся только в коде документа или при появлениях "\A" в генерируемом содержимом.
nowrap
Это значение сжимает пробелы, как 'normal', но подавляет разрывы строк в тексте, за исключением тех, которые создаются "\A" в генерируемом содержимом (например, для элемента BR в HTML).
Следующие примеры демонстрируют ожидаемое поведение пробелов в элементах PRE и P и атрибута "nowrap" HTML.
PRE { white-space: pre }
P { white-space: normal }
TD[nowrap] { white-space: nowrap }
Соответствующие ПА могут
Лекция 17. Таблицы
Таблицы представляют взаимоотношения между данными. Авторы специфицируют эти взаимоотношения на языке документа и их представление в CSS двумя способами - визуально и звуком.
Авторы могут специфицировать визуальное форматирование
Авторы могут также специфицировать звуковое представление
Вот простая таблица из трёх рядов и трёх столбцов, написанная в HTML 4.0:
<TABLE>
<CAPTION>Это простая таблица 3x3</CAPTION>
<TR id="row1">
<TH>Header 1 <TD>Cell 1 <TD>Cell 2
<TR id="row2">
<TH>Header 2 <TD>Cell 3 <TD>Cell 4
<TR id="row3">
<TH>Header 3 <TD>Cell 5 <TD>Cell 6
</TABLE>
Этот код создаёт одну таблицу (элемент TABLE), три ряда (элементы TR), три заголовочных ячейки (элементы TH) и шесть ячеек данных (элементы TD). Обратите внимание, что три столбца в этом примере специфицированы неявно: в таблице столько столбцов, сколько затребовано заголовочными ячейками и ячейками данных.
Следующее правило CSS центрирует текст по горизонтали в заголовочных ячейках и выводит данные шрифтом, имеющим вес bold:
TH { text-align: center; font-weight: bold }
Следующее правило выравнивает текст заголовочных ячеек по их базовой линии и центрирует текст по вертикали в каждой ячейке данных:
TH { vertical-align: baseline }
TD { vertical-align: middle }
Следующие правила специфицируют, что верхний ряд будет окружён сплошной голубой рамкой толщиной 3px и каждый из других рядов будет окружён сплошной чёрной рамкой толщиной 1px:
TABLE { border-collapse: collapse }
TR#row1 { border-top: 3px solid blue }
TR#row2 { border-top: 1px solid black }
TR#row3 { border-top: 1px solid black }
Заметьте, однако, что рамки вокруг рядов перекрываются там, где ряды смыкаются. Какого цвета (чёрного или голубого) и толщины (1px или 3px) будет рамка между рядами row1 и row2? Мы обсудим это в разделе о разрешении конфликтов рамок.
Следующее правило помещает заголовок таблицы над таблицей:
CAPTION { caption-side: top }
Наконец, следующее правило специфицирует, что при звуковом выводе каждый ряд данных произносится как "Заголовок, Данные, Данные":
TH { speak-header: once }
Например, первый ряд будет произнесён "Заголовок1 Ячейка1 Ячейка2". С другой стороны, со следующим правилом:
TH { speak-header: always }
будет звучать "Заголовок1 Ячейка1 Заголовок1 Ячейка2".
Этот пример показал, как CSS работает с элементами HTML 4.0; в HTML 4.0 семантика различных элементов
FOO { display : table }
BAR { display : table-caption }
Мы обсудим различные элементы
Табличная модель CSS базируется на табличной модели HTML 4.0, структура таблиц которой почти параллельна визуальному представлению. В данной модели таблица состоит из необязательного заголовка и любого числа рядов столбцов. О табличной модели говорится, что в ней "ряды первичны", поскольку авторы явно специфицируют ряды, а не столбцы, в языке документа. Столбцы определяются после того, как будут специфицированы все ряды - первая ячейка каждого ряда принадлежит первому столбцу, вторая - второму столбцу и т.д.). Ряды и столбцы могут быть сгруппированы структурно, и это группирование отражается при представлении (например, рамка может быть прорисована вокруг группы рядов).
Таким образом, табличная модель состоит из таблиц, заголовков, рядов, групп рядов, столбцов, групп столбцов и ячеек.
Модель CSS не требует, чтобы язык документа содержал элементы, соответствующие каждому из этих компонентов. Для языков документов (таких как приложения XML), не имеющих предопределённых табличных элементов, авторы обязаны
table (в HTML: TABLE)
Специфицирует, что элемент определяет таблицу уровня блока: это прямоугольный блок, участвующий в контексте форматирования блока.
Специфицирует, что элемент определяет таблицу инлайн-уровня: это прямоугольный блок, участвующий в инлайн-контексте форматирования).
table-row (в HTML: TR)
Специфицирует, что элемент - это ряд ячеек.
table-row-group (в HTML: TBODY)
Специфицирует, что элемент группирует один или более рядов.
table-header-group (в HTML: THEAD)
Похож на 'table-row-group', но для визуального форматирования; группа рядов всегда отображается до всех других рядов и групп рядов и после любого верхнего заголовка. Печатающие пользовательские агенты (ПА) могут повторять ряды футера на каждой странице, занимаемой таблицей.
table-footer-group (в HTML: TFOOT)
Похож на 'table-row-group', но для визуального форматирования; группа рядов всегда отображается после всех других рядов и групп рядов и перед любым нижним заголовком. Печатающие ПА могут повторять ряды футера на каждой странице, занимаемой таблицей.
table-column (в HTML: COL)
Специфицирует, что элемент описывает столбец ячеек.
table-column-group (в HTML: COLGROUP)
Специфицирует, что элемент группирует один или более столбцов.
table-cell (в HTML: TD, TH)
Специфицирует, что элемент представляет ячейку
table-caption (в HTML: CAPTION)
Специфицирует заголовок
элементы с 'display', установленным в 'table-column' или
Таблица стилей по умолчанию для HTML 4.0 в приложении иллюстрирует использование этих значений в HTML 4.0:
TABLE { display: table }
TR { display: table-row }
THEAD { display: table-header-group }
TBODY { display: table-row-group }
TFOOT { display: table-footer-group }
COL { display: table-column }
COLGROUP { display: table-column-group }
TD, TH { display: table-cell }
CAPTION { display: table-caption }
ПА могут игнорировать эти значения свойства 'display' для документов HTML, поскольку авторы не должны изменять ожидаемое поведение элемента.
Языки документов, кроме HTML, могут не иметь всех элементов табличной модели CSS2. В таких случаях "отсутствующие" элементы обязаны учитываться, для того чтобы табличная модель работала. Отсутствующие элементы генерируют анонимные объекты (например, анонимные боксы при визуальном выводе
1Любой элемент
2Если родительский P в
3Если родительский P в 'table-row' элемента T - не элемент 'table', 'inline-table' или 'table-row-group', объект, соответствующий элементу 'table', будет генерироваться между P и T. Этот объект будет занимать всех последовательных родственников (смежных) (в дереве документа) в T, требующем 'table'-родителя: 'table-row', 'table-row-group', 'table-header-group', '
4Если родительский P в 'table-row-group' (или 'table-header-group', или '
5Если дочерний T от 'table-row' элемента P - не элемент
В этом примере XML принимается, что элемент 'table' содержит элемент HBOX:
<HBOX>
<VBOX>George</VBOX>
<VBOX>4287</VBOX>
<VBOX>1998</VBOX>
</HBOX>
поскольку ассоциированная таблица стилей:
HBOX { display: table-row }
VBOX { display: table-cell }
В этом примере три элемента 'table-cell' содержат текст в ROWs/рядах. Заметьте, что текст далее инкапсулируется в анонимные инлайн-боксы, как разъясняется в модели визуального форматирования:
<STACK>
<ROW>This is the <D>top</D> row.</ROW>
<ROW>This is the <D>middle</D> row.</ROW>
<ROW>This is the <D>bottom</D> row.</ROW>
</STACK>
Таблица стилей:
STACK { display: inline-table }
ROW { display: table-row }
D { display: inline; font-weight: bolder }
От ПА HTML не требуется создавать анонимные объекты в соответствии с вышеприведёнными правилами.
Ячейки таблиц могут принадлежать к двум контекстам: рядам и столбцам. Однако в документе-источнике ячейки являются потомками рядов и никогда - столбцов. Несмотря на это, некоторые аспекты ячеек могут вводиться установкой свойств столбцов.
Следующие свойства применяются к элементам столбцов и групп столбцов:
'border'
Различные свойства рамки применяются к столбцам только тогда, когда
'background'
Свойства фона устанавливают фон для ячеек в столбце, но только если и ячейка, и ряд имеют прозрачный фон. См. Слои и прозрачность
'width'
Свойство 'width' задаёт минимальную ширину столбца.
'visibility'
Если 'visibility' столбца установлено в 'collapse', ни одна из ячеек столбца не отображается, и ячейки, захватывающие другие столбцы, усекаются. В дополнение к этому, ширина
Вот примеры некоторых правил таблиц стилей, устанавливающих свойства столбцов. Первые два правила вместе выполняют атрибут "rules" HTML 4.0 со значением "cols". Третье правило делает столбец "totals" голубым, а последние два правила показывают, как установить для столбца фиксированный размер, используя фиксированный алгоритм вывода.
COL { border-style: none solid }
TABLE { border-style: hidden }
COL.totals { background: blue }
TABLE { table-layout: fixed }
COL.totals { width: 5em }
В терминах модели визуального форматирования поведение
В обоих случаях элемент
Вертикальные поля сжимаются в тех местах, где боксы
Диаграмма таблицы с заголовком вверху; нижнее поле заголовка сжато вместе с верхним полем таблицы.
[D]'caption-side'
Значение: top | bottom | left | right | inherit
Начальное: top
Применяется: к элементам
Наследуется: да
Процентное: N/A
Носитель: визуальный
Это свойство специфицирует позицию бокса заголовка относительно бокса
Значения имеют следующий смысл:
top
Позиционирует бокс заголовка над боксом
bottom
Позиционирует бокс заголовка под боксом
left
Позиционирует бокс заголовка слева от бокса
right
Позиционирует бокс заголовка справа от бокса
Заголовки сверху или снизу от элемента 'table' форматируются совершенно так же, как если бы они были элементами блока до и после
Заголовок сверху или снизу от бокса
Для заголовков слева или справа от бокса
Чтобы выровнять содержимое заголовка по горизонтали внутри бокса заголовка, используйте свойство 'text-align'.
Для вертикального выравнивания левых и правых боксов заголовка относительно бокса таблицы используйте свойство 'vertical-align'. В этом случае возможны только значения 'top', 'middle' и 'bottom'. Все другие значения рассматриваются как 'top'.
Здесь свойство 'caption-side' размещает заголовок под таблицей. Заголовок будет той же ширины, что и родитель таблицы, и текст заголовка будет выровнен по левому краю.
CAPTION { caption-side: bottom;
width: auto;
text-align: left }
В этом примере показано, как разместить заголовок в левом поле. Сама таблица центрирована установкой левого и правого полей в 'auto', а весь бокс с таблицей и заголовком сдвинут в левое поле на ту же величину, что и ширина заголовка.
BODY {
margin-left: 8em
}
TABLE {
margin-left: auto;
margin-right: auto
}
CAPTION {
caption-side: left;
margin-left: -8em;
width: 8em;
text-align: right;
vertical-align: bottom
}
Принимая, что ширина таблицы меньше доступной ширины, форматирование будет примерно таким:
Диаграмма показывает центрированную таблицу с заголовком, растянутую в левое поле как результат негативного значения свойства 'margin-left'.
[D]Подобно другим элементам языка таблицы, внутренние элементы таблицы генерируют прямоугольные боксы с содержимым, заполнением и рамками. Однако они не имеют полей.
Визуальное представление этих боксов управляется прямоугольной нерегулярной сеткой из рядов и столбцов. Каждый бокс занимает целое число ячеек сетки, определяемое в соответствии с нижеследующими правилами. Эти правила не применяются к HTML 4.0 или более ранним версиям HTML; HTML имеет свои собственные ограничения на охват рядов и столбцов.
1Каждый бокс ряда занимает один ряд ячеек сетки. Все вместе боксы рядов заполняют таблицу сверху вниз в том порядке, в котором они появляются в документе-источнике (т.е. таблица занимает ровно столько рядов сетки, сколько имеется элементов рядов).
2Группа рядов занимает те же ячейки, что и составляющие её ряды.
3Бокс столбца занимает один или более столбцов сетки. Боксы столбцов размещаются друг за другом в том порядке, в котором они вводятся. Бокс первого столбца может находиться слева или справа, в зависимости от значения свойства 'direction' таблицы.
4Бокс группы столбцов занимает те же ячейки сетки, что и содержащиеся в нём столбцы.
5Ячейки могут захватывать несколько рядов и столбцов. (Хотя CSS2 не определяет, как вычисляется количество захваченных рядов или столбцов, ПА может иметь специальные сведения о документе-источнике; будущая версия CSS может предоставить способ выражения этих сведений в синтаксисе CSS.) Каждая ячейка, следовательно, это прямоугольный бокс шириной и высотой в одну или более ячеек сетки. Верхний ряд этого прямоугольника находится в ряду, специфицированном родителем ячейки. Прямоугольник обязан находиться как можно левее, но не может перекрывать любой другой бокс ячейки и обязан находиться справа от всех ячеек в том же ряду, определённых ранее в документе-источнике. (Это ограничение остаётся в силе, если свойство 'direction' таблицы - 'ltr'; если же 'direction' - 'rtl', "лево" и "право" в предыдущем предложении меняются местами.)
6Бокс ячейки не может продолжаться за пределы бокса последнего ряда или группы рядов таблицы; ПА обязан уменьшить его (бокс ячейки) до вмещения.
Примечание. Ячейки таблицы могут быть позиционированы относительно или абсолютно, но это не рекомендуется: позиционирование и всплывание удаляет бокс из прорисовки, влияя на выравнивание таблицы.
Вот два примера. Первый - документ HTML:
<TABLE>
<TR><TD>1 <TD rowspan="2">2 <TD>3 <TD>4
<TR><TD colspan="2">5
</TABLE>
<TABLE>
<ROW><CELL>1 <CELL rowspan="2">2 <CELL>3 <CELL>4
<ROW><CELL colspan="2">5
</TABLE>
Вторая таблица сформатирована, как на правом рисунке. Однако представление таблицы HTML явно не определено HTML, и CSS не пытается определить его. ПА свободны в том, как отобразить её, например, как на левом рисунке.
Слева - возможное представление ошибочной таблицы HTML 4.0; справа - единственно возможное форматирование такой же не-HTML таблицы.
[D]Для того, чтобы найти фон для каждой ячейки таблицы, различные элементы таблицы можно представить себе как состоящие из шести накладывающихся слоёв. Фон, установленный в элементе, это один из слоёв, который будет виден, только если слои над ним имеют прозрачный фон.
Схема слоёв таблицы.
[D]1Самый нижний слой - цельный, представляющий весь бокс таблицы. Подобно другим боксам, он может быть прозрачным.
2Следующий слой содержит группы столбцов. Группы столбцов - такой же высоты, как и таблица, но они не должны перекрывать всю таблицу по горизонтали.
3Сверху над группами столбцов находятся области, представляющие боксы столбцов. Как и группы столбцов, столбцы - такой же высоты, как и таблица, но они не должны перекрывать всю таблицу по горизонтали.
4Следом идёт слой групп рядов. Каждая группа рядов - такой же ширины, как таблица. Все вместе группы рядов полностью перекрывают таблицу сверху вниз.
5Предпоследний слой содержит ряды. Ряды также покрывают всю таблицу.
6Самый верхний слой содержит ячейки. Как показано на рисунке, хотя все ряды имеют одинаковое количество ячеек, не каждая ячейка может иметь специфицированное содержимое. Эти "пустые" ячейки прозрачны, что позволят нижележащим слоям просвечивать.
В следующем примере первый ряд содержит 4 ячейки, но второй ряд не содержит ячеек, и, таким образом, виден фон таблицы, исключая те места, где ячейка первого ряда захватывает и этот ряд. Следующий код HTML и правила стилей -
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN">
<HTML>
<HEAD>
<STYLE type="text/css">
TABLE { background: #ff0; border-collapse: collapse }
TD { background: red; border: double black }
</STYLE>
</HEAD>
<BODY>
<P>
<TABLE>
<TR>
<TD> 1
<TD rowspan="2"> 2
<TD> 3
<TD> 4
</TR>
<TR><TD></TD></TR>
</TABLE>
</BODY>
</HTML>
может быть сформатирован так:
Таблица с тремя пустыми ячейками в нижнем ряду.
[D]CSS не определяет "оптимальный" вид таблицы, поскольку во многих случаях это дело вкуса. CSS не определяет ограничения того, как ПА обязан выводить таблицу. ПА могут использовать любой возможный алгоритм и свободны предпочесть скорость точности отображения, если только не выбран "алгоритм фиксированного вывода ".
'table-layout'
Значение: auto | fixed | inherit
Начальное: auto
Применяется: к элементам 'table' и 'inline-table'
Наследуется: нет
Процентное: N/A
Носитель: визуальный
Свойство 'table-layout' контролирует алгоритм, используемый для вывода ячеек, рядов и столбцов таблицы.
Значения имеют следующий смысл:
fixed
Алгоритм фиксированного вывода таблицы;
auto
Используется любой автоматический алгоритм вывода таблицы.
Эти два алгоритма описаны ниже.
В этом (быстром) алгоритме горизонтальный вывод таблицы не зависит от содержимого ячеек; он зависит только от ширины таблицы, ширины столбцов и от рамок и заполнения ячеек.
Ширина таблицы может быть специфицирована явно свойством 'width'. Значение 'auto' (и для 'display: table', и для 'display: inline-table') означает использование алгоритма автоматического вывода таблицы.
В алгоритме фиксированного вывода ширина каждого столбца определяется так:
1Элемент столбца со значением свойства 'width', отличным от 'auto', устанавливает ширину этого столбца.
2Иначе, ячейка в первом ряду со значением свойства 'width', отличным от 'auto', устанавливает ширину этого столбца. Если ячейка занимает более одного столбца, ширина разделяется на эти столбцы.
3Любые оставшиеся столбцы равномерно разделяют оставшееся горизонтальное пространство таблицы (минус рамки и заполнение ячеек).
Ширина таблицы будет тогда больше значения свойства 'width' для элемента таблицы и суммарной ширины столбцов (плюс заполнение ячеек или рамки). Если таблица шире, чем столбцы, оставшееся пространство должно быть равномерно распределено между столбцами.
При таком методе ПА может начать вывод таблицы сразу, как только будет получен весь первый ряд. Ячейки в последующих рядах не влияют на ширину таблицы. Любая ячейка, имеющая переполняющее содержимое, использует свойство 'overflow' для определения того, сжимать ли переполняющее содержимое.
В этом алгоритме (требующем обычно не более двух шагов), ширина таблицы определяется шириной её столбцов (и промежуточных рамок). Этот алгоритм отражает поведение некоторых популярных ПА HTML на момент написания данной спецификации. От ПА не требуется выполнять этот алгоритм для определения структуры таблицы в случае, если
Этого алгоритма может оказаться недостаточно, поскольку он требует, чтобы ПА имел доступ ко всему содержимому таблицы до определения окончательной структуры, и может потребовать более одного шага.
Ширина столбцов определяется так:
1
Вычисляется минимальная ширина содержимого (MCW) каждой ячейки: форматированное содержимое может занимать любое количество строк, но не может переполнять бокс ячейки. Если специфицированная 'width' (W) ячейки больше, чем MCW, W является минимальной шириной ячейки. Значение 'auto' указывает, что MCW это минимальная ширина ячейки.
Так же вычисляется "максимальная" ширина каждой ячейки: затем содержимое форматируется без разрывов строк, за исключением тех разрывов строк, которые указаны явно.
2Для каждого столбца определяется максимальная и минимальная ширина столбца из тех ячеек, которые занимают только этот столбец. Минимум - это та ширина, которая требуется для ячейки с самой большой минимальной шириной (или 'width' столбца, в зависимости от того, что больше). Максимум - это максимальная ширина, которая требуется для ячейки с самой большой максимальной шириной (или 'width' столбца, в зависимости от того, что больше).
3Для каждой ячейки, занимающей более одного столбца, увеличивается минимальная ширина тех столбцов, которые она захватывает, так что вместе они не уже, чем ячейка. То же самое делается и для максимальной ширины. Если возможно, расширяются все захваченные ряды на приблизительно то же значение.
Это задаёт максимальную и минимальную ширину каждого столбца. Ширина столбцов влияет на окончательную ширину таблицы так:
1
Если свойство 'width' элементов 'table' или 'inline-table' имеет специфицированное значение (W), отличное от 'auto', вычисленное значение свойства будет больше W и минимальной ширины, требующейся для всех столбцов плюс заполнение и рамки ячеек (MIN).
Если W больше, чем MIN, излишняя ширина должна быть распределена между столбцами.
2Если элементы 'table' или 'inline-table' имеют 'width: auto', вычисленная ширина таблицы будет больше ширины самого большого из содержащих блоков таблицы и MIN. Однако, если максимальная ширина, требуемая для столбцов плюс заполнение ячеек или рамки (MAX) меньше, чем ширина содержащего блока, используется MAX.
Процентные значения ширины столбца являются относительными к ширине таблицы. Если таблица имеет 'width: auto', проценты дают ограничение ширины столбца, которое ПА должен попытаться выдержать. (Очевидно, это не всегда возможно: если ширина столбца '110%', ограничение не может быть выполнено.)
Примечание. В этом алгоритме ряды (и группы рядов) и столбцы (и группы столбцов) ограничивают и сами ограничены размерами содержащихся в них ячеек. Установка ширины столбца может неявно влиять на высоту ряда, и наоборот.
Высота таблицы задаётся свойством 'height' элемента 'table' или 'inline-table'. Значение 'auto' устанавливает, что высота является суммой высоты рядов плюс заполнение ячеек или рамки. Любые другие значения специфицируют высоту явно; таблица, таким образом, может быть выше или короче, чем высота её рядов. CSS2 не специфицирует вывод в тех случаях, когда специфицированная высота таблицы отличается от высоты содержимого, особенно когда высота содержимого может перекрыть специфицированную высоту; или как излишнее пространство должно распределиться между рядами для заполнения высоты таблицы; или, если высота содержимого превосходит специфицированную высоту таблицы, должен ли ПА предоставить механизм прокрутки.
Примечание. Будущие версии CSS могут специфицировать это.
Высота бокса элемента 'table-row' вычисляется однократно сразу после получения ПАгентом всех ячеек ряда: это максимальная специфицированная рядом 'height' и минимальная высота (MIN), затребованная ячейками. Значение 'height' - 'auto' для 'table-row' означает, что вычисленная высота ряда - MIN. MIN зависит от высоты боксов ячеек и выравнивания бокса ячейки (очень походит на вычисление высоты строчного бокса). CSS2 не определяет, к чему относятся процентные значения 'height', специфицированные для рядов и групп рядов таблицы.
В CSS2 высота бокса ячейки - это максимальное из свойств 'height' ячеек таблицы и минимальная высота, требуемая содержимым (MIN). Значение 'auto' для 'height' подразумевает вычисленное значение MIN. CSS2 не определяет, к чему относятся процентные значения 'height', когда они определены для ячеек таблицы.
CSS2 не специфицирует, как ячейки, захватывающие более одного ряда, влияют на вычисление высоты рядов, за исключением того, что суммарная высота рядов обязана быть достаточно большой, чтобы окружить ячейку, захватывающую ряды.
Свойство 'vertical-align' каждой ячейки таблицы определяет её выравнивание в ряду. Содержимое каждой ячейки имеет baseline/базовую линию, top/верх, middle/середину и bottom/низ, как и сам ряд.
В контексте таблиц значения 'vertical-align' имеют следующий смысл:
baseline
Базовая линия ячейки помещена на той же высоте, что и базовая линия первого из рядов, которые она захватывает (см. ниже определение базовой линии ячейки и ряда).
top
Верх бокса ячейки выровнен с верхом первого из рядов, которые она захватывает.
bottom
Низ бокса ячейки выровнен с низом последнего из рядов, которые она захватывает.
middle
Центр ячейки выровнен с центром рядов, которые она захватывает.
sub, super, text-top, text-bottom
Эти значения не применяются к ячейкам; вместо этого ячейка выравнивается по базовой линии.
Базовая линия ячейки это базовая линия первого строчного бокса в ячейке. Если никакого текста нет, базовая линия - это базовая линия какого-либо объекта, отображаемого в ячейке или, если такого объекта нет, - низ бокса ячейки. Максимальное расстояние между верхом бокса ячейки и базовой линией всех ячеек, имеющих 'vertical-align: baseline', используется для установки базовой линии ряда. Вот пример:
Диаграмма показывает действие различных значений 'vertical-align' в ячейках таблицы.
[D]Боксы ячеек 1 и 2 выровнены по их базовым линиям. Бокс ячейки 2 имеет бoльшую высоту относительно базовой линии и поэтому определяет базовую линию ряда. Заметьте, что если нет ни одного бокса ячейки, выровненного по базовой линии, у ряда не будет (не нужна) базовой линии.
Чтобы исключить неоднозначные ситуации, выравнивание ячеек происходит в следующем порядке:
1Сначала позиционируются ячейки, выровненные по их базовым линиям. Это устанавливает базовую линию ряда. Затем позиционируются ячейки с 'vertical-align: top'.
2Ряд имеет теперь верх, возможно - базовую линию и предварительную высоту, которая является расстоянием от верха (таблицы) до низа самой нижней ячейки. (См. ниже условия для заполнения ячеек.)
3Если какая-либо из оставшихся ячеек, выровненных по низу или по середине, имеет высоту большую, чем текущая высота ряда, то высота ряда будет увеличена до максимума этой ячейки путём опускания низа (таблицы).
4Наконец, позиционируются оставшиеся ячейки.
Боксы ячеек, которые меньше, чем высота ряда, получают дополнительное заполнение вверху или внизу.
Горизонтальное выравнивание содержимого ячейки в боксе ячейки специфицируется свойством 'text-align'.
Если значение свойства 'text-align' для более чем одной ячейки в столбце установлено в <string>, содержимое этих ячеек выравнивается вдоль вертикальной оси. Начало строки касается этой оси. Направление письма определяет, расположена строка слева или справа от оси.
Выравнивание текста таким способом возможно только тогда, когда текст входит на одну строку. Результат не определён, если содержимое ячейки занимает более одной строки.
Если значение 'text-align' ячейки таблицы это строка, но строка не появляется в содержимом ячейки, то конец содержимого ячейки соприкасается с вертикальной осью выравнивания.
Заметьте, что строки не должны быть теми же самыми для каждой ячейки, хотя, как правило, это и так.
CSS не предоставляет способа специфицировать смещение оси вертикального выравнивания относительно края бокса столбца.
Следующая таблица стилей:
TD { text-align: "." }
TD:before { content: "$" }
создаст столбец знаков доллара в следующей таблице HTML:
<TABLE>
<COL width="40">
<TR> <TH>Long distance calls
<TR> <TD> 1.30
<TR> <TD> 2.50
<TR> <TD> 10.80
<TR> <TD> 111.01
<TR> <TD> 85.
<TR> <TD> 90
<TR> <TD> .05
<TR> <TD> .06
</TABLE>
для выравнивания десятичной точки. Шутки ради, мы использовали псевдоэлемент :before для того, чтобы вставить знак доллара перед каждым значением. Таблица может выглядеть так:
Long distance calls
$1.30
$2.50
$10.80
$111.01
$85.
$90
$.05
$.06
Свойство 'visibility' принимает значение 'collapse' для элементов ряда, группы рядов, столбца и группы столбцов. Это значение вызывает удаление целого ряда или столбца с экрана, и пространство, нормально занимаемое этим рядом или столбцом, становится доступным для другого содержимого. Подавление ряда или столбца не влияет, однако, на структуру таблицы. Это позволяет динамически удалять столбцы или ряды таблицы без форсирования реструктурирования таблицы для того, чтобы учесть возможные изменения в столбцах.
Имеются две различные модели установки рамок ячейки таблицы в CSS. Одна больше подходит для так называемых
'border-collapse'
Значение: collapse | separate | inherit
Начальное: collapse
Применяется: к элементам 'table' и '
Наследуется: да
Процентное: N/A
Носитель: визуальный
Это свойство выбирает модель рамки таблицы. Значение 'separate' выбирает модель
'border-spacing'
Значение: <length> <length>? | inherit
Начальное: 0
Применяется: к элементам 'table' и '
Наследуется: да
Процентное: N/A
Носитель: визуальный
Размеры специфицируют расстояние, разделяющее рамки смежных таблиц. Если специфицирован один размер, он задаёт и горизонтальное, и вертикальное расстояние. Если специфицированы два, то первый задаёт расстояние по горизонтали, второй - по вертикали. Значения размеров не могут быть отрицательными.
В этой модели каждая ячейка имеет собственную рамку. Свойство 'border-spacing' специфицирует расстояние между рамками смежных ячеек. Это пространство заполняется фоном элемента таблицы. Ряды, группы рядов, столбцы и группы столбцов не могут иметь рамок (т.е. ПА обязаны игнорировать свойства рамки в таких элементах).
Таблица на рисунке может быть результатом такой таблицы стилей:
TABLE { border: outset 10pt;
border-collapse: separate;
border-spacing: 15pt }
TD { border: inset 5pt }
TD.special { border: inset 10pt } /* Верхняя левая ячейка */
Таблица с 'border-spacing', установленным в значение размера. Заметьте, что у каждой ячейки имеется своя собственная рамка, а таблица также имеет отдельную рамку.
[D]'empty-cells'
Значение: show | hide | inherit
Начальное: show
Применяется: к элементам
Наследуется: да
Процентное: N/A
Носитель: визуальный
В модели
Если это свойство имеет значение 'show', рамки прорисовываются вокруг пустых ячеек (как вокруг нормальных ячеек).
Значение 'hide' указывает, что рамки вокруг пустых ячеек не будут прорисованы. Следовательно, если все ячейки в ряду имеют значение 'hide' и не имеют видимого содержимого, весь ряд ведёт себя так, как если бы он имел 'display: none'.
Следующее правило вызывает прорисовку рамок вокруг всех ячеек:
TABLE { empty-cells: show }
В модели сжимающихся рамок имеется возможность специфицировать рамки, окружающие все или часть ячеек, рядов, групп рядов, столбцов и групп столбцов. Рамки для атрибута HTML "rule" могут быть специфицированы таким способом.
Рамки центрируются по линиям сетки между ячейками. ПА обязаны находить подходящее правило для округления при наличии нестандартного числа абстрактных единиц измерения (пикселов экрана, точек принтера).
Диаграмма внизу показывает, как взаимодействуют ширина таблицы, рамок, заполнение и ширина ячеек. Их отношения задаются следующим уравнением, которое действует для каждого ряда таблицы:
row-width = (0.5 * border-width0) + padding-left1 + width1 + padding-right1 + border-width1 + padding-left2 +...+ padding-rightn + (0.5 * border-widthn)
Здесь n это число ячеек в ряду, а border-widthi относится к рамке между ячейками i и i + 1. Учтите только, что лишь половина из двух внешних рамок учитывается в ширине таблицы; другая половина этих двух рамок находится в области полей.
Схема показывает размеры ширины ячеек и рамок и заполнение ячеек.
[D]Обратите внимание, что в этой модели ширина таблицы включает половину ширины рамки таблицы. Также в этой модели таблица не имеет заполнения (но имеет поля).
В модели сжимающихся рамок, рамки каждого края каждой ячейки могут быть специфицированы свойствами рамки различных элементов, находящихся у этого края (ячеек, рядов, групп рядов, столбцов, групп столбцов и самой таблицы), и эти рамки могут различаться по ширине, стилю и цвету. Основным правилом является то, что у каждого края выбирается самая "примечательная" рамка, за исключением тех случаев, когда появление стиля
Следующие правила определяют, какой
1Рамки с 'border-style' -
2
3Если ни один из стилей не
4Если
Следующий пример иллюстрирует приложение с такими правилами приоритета. Данная таблица стилей:
TABLE { border-collapse: collapse;
border: 5px solid yellow; }
*#col1 { border: 3px solid black; }
TD { border: 1px solid red; padding: 1em; }
TD.solid-blue { border: 5px dashed blue; }
TD.solid-green { border: 5px solid green; }
с этим HTML:
<P>
<TABLE>
<COL id="col1"><COL id="col2"><COL id="col3">
<TR id="row1">
<TD> 1
<TD> 2
<TD> 3
</TR>
<TR id="row2">
<TD> 4
<TD class="solid-blue"> 5
<TD class="solid-green"> 6
</TR>
<TR id="row3">
<TD> 7
<TD> 8
<TD> 9
</TR>
<TR id="row4">
<TD> 10
<TD> 11
<TD> 12
</TR>
<TR id="row5">
<TD> 13
<TD> 14
<TD> 15
</TR>
</TABLE>
даст в результате что-либо подобное:
Пример таблицы со сжимающимися рамками.
[D]В следующем примере показана таблица с горизонтальными линиями между рядами. Верх рамки таблицы установлен в 'hidden', чтобы подавить верхний край рамки первого ряда. Это - выполнение атрибута "rules" HTML 4.0 (rules="rows").
TABLE[rules=rows] TR { border-top: solid }
TABLE[rules=rows] { border-collapse: collapse;
border-top: hidden }
Таблица с горизонтальными линиями между рядами.
Полное описание примера рядов, разделённых горизонтальными линиями рамки
[D]В этом случае того же эффекта можно достичь без установки рамки 'hidden' в TABLE: путём адресации первого ряда отдельно. Какой метод предпочесть - дело вкуса.
TR:first-child { border-top: none }
TR { border-top: solid }
Вот другой пример скрытых сжимающихся рамок:
Таблица с двумя пропущенными внутренними рамками.
[D]HTML-источник:
<TABLE style="border-collapse: collapse; border: solid;">
<TR><TD style="border-right: hidden; border-bottom: hidden">foo</TD>
<TD style="border: solid">bar</TD></TR>
<TR><TD style="border: none">foo</TD>
<TD style="border: solid">bar</TD></TR>
</TABLE>
Некоторые значения 'border-style' имеют в таблице иной смысл в сравнении с другими элементами. В следующем списке они помечены звёздочкой.
none
Нет рамки.
*hidden
То же, что 'none', но в модели сжимающихся рамок также сдерживает любые другие рамки (см. раздел Конфликты рамок).
dotted
Рамка из точек .
dashed
Пунктир.
solid
Сплошная линия.
double
Двойная сплошная линия. Сумма двух линий и пространства между ними равна значению 'border-width'.
groove
Вырезана в канве.
ridge
Противоположно
*inset
В модели
*outset
В модели
Когда таблица читается синтезатором речи, отношения между ячейками данных и заголовочными ячейками обязаны быть выражены иначе, чем отношения вертикального и горизонтального выравнивания. Некоторые синтезаторы речи могут позволять пользователям "перемещаться" в 2-мерном пространстве, давая таким образом возможность отображения пространственных соотношений. Если это невозможно, таблица стилей обязана специфицировать, с какого места произносятся заголовки.
'speak-header'
Значение: once | always | inherit
Начальное: once
Применяется: к элементам. имеющим информацию "шапки" таблицы
Наследуется: да
Процентное: N/A
Носитель: звуковой
Это свойство специфицирует, произносятся ли заголовки перед каждой ячейкой (данных), или только перед той ячейкой, которая ассоциирована с другим заголовком.
Значения имеют следующий смысл:
once
Заголовок произносится однократно перед серией ячеек.
always
Заголовок произносится перед каждой подходящей ячейкой.
Каждый язык документов может иметь различные механизмы спецификации заголовков. Например, в HTML 4.0 ([HTML40]) можно специфицировать заголовочную информацию тремя различными атрибутами ("headers", "scope" и "axis"), и спецификация предоставляет алгоритм для определения заголовочной информации, когда эти атрибуты не специфицированы.
Изображение таблицы с заголовочными ячейками ("San Jose" и "Seattle"), которые не находятся в одном столбце или ряде с данными, к которым они относятся.
[D]Этот пример HTML представляет денежный расчёт расходов на питание, гостиницу и транспорт в двух местах (San Jose и Seattle) на несколько дней. Концептуально Вы можете представлять таблицу в терминах n-размерного пространства. Заголовками этого пространства являются: место, день, категория и итог. Некоторые ячейки определяют метки вдоль оси, а другие дают подсчёт денег в точке данного пространства. Вот разметка для этой таблицы:
<TABLE>
<CAPTION>Travel Expense Report</CAPTION>
<TR>
<TH></TH>
<TH>Meals</TH>
<TH>Hotels</TH>
<TH>Transport</TH>
<TH>subtotal</TH>
</TR>
<TR>
<TH id="san-jose" axis="san-jose">San Jose</TH>
</TR>
<TR>
<TH headers="san-jose">25-Aug-97</TH>
<TD>37.74</TD>
<TD>112.00</TD>
<TD>45.00</TD>
<TD></TD>
</TR>
<TR>
<TH headers="san-jose">26-Aug-97</TH>
<TD>27.28</TD>
<TD>112.00</TD>
<TD>45.00</TD>
<TD></TD>
</TR>
<TR>
<TH headers="san-jose">subtotal</TH>
<TD>65.02</TD>
<TD>224.00</TD>
<TD>90.00</TD>
<TD>379.02</TD>
</TR>
<TR>
<TH id="seattle" axis="seattle">Seattle</TH>
</TR>
<TR>
<TH headers="seattle">27-Aug-97</TH>
<TD>96.25</TD>
<TD>109.00</TD>
<TD>36.00</TD>
<TD></TD>
</TR>
<TR>
<TH headers="seattle">28-Aug-97</TH>
<TD>35.00</TD>
<TD>109.00</TD>
<TD>36.00</TD>
<TD></TD>
</TR>
<TR>
<TH headers="seattle">subtotal</TH>
<TD>131.25</TD>
<TD>218.00</TD>
<TD>72.00</TD>
<TD>421.25</TD>
</TR>
<TR>
<TH>Totals</TH>
<TD>196.27</TD>
<TD>442.00</TD>
<TD>162.00</TD>
<TD>800.27</TD>
</TR>
</TABLE>
Представляя модель данных таким образом, авторы дают возможность браузерам с синтезом речи работать с таблицей различными способами, например, каждая ячейка может проговариваться как список с повторением соответствующих заголовков перед каждой ячейкой данных:
San Jose, 25-Aug-97, Meals: 37.74
San Jose, 25-Aug-97, Hotels: 112.00
San Jose, 25-Aug-97, Transport: 45.00
...
Браузер может также проговаривать ячейки, только если они изменяются:
San Jose, 25-Aug-97, Meals: 37.74
Hotels: 112.00
Transport: 45.00
26-Aug-97, Meals: 27.28
Hotels: 112.00
...
Лекция 18. Интерфейс пользователя
'cursor'
Значение: [ [<uri< ,]* [ auto | crosshair | default | pointer | move | e-resize | ne-resize | nw-resize | n-resize | se-resize | sw-resize | s-resize | w-resize| text | wait | help ] ] | inherit
Начальное: auto
Применяется: ко всем элементам
Наследуется: да
Процентное: N/A
Носитель: визуальный, интерактивный
Это свойство специфицирует тип курсора указательного устройства. Значения имеют следующий смысл:
auto
пользовательский агент (ПА) определяет курсор на базе текущего контекста.
crosshair
простой крест (например, увеличение знака "+" с помощью коротких отрезков).
default
курсор по умолчанию, зависящий от платформы. Часто отображается стрелкой.
pointer
курсор - указатель на ссылку.
move
обозначает то, что перемещается.
e-resize, ne-resize, nw-resize, n-resize, se-resize, sw-resize, s-resize, w-resize
обозначают перемещение какого-либо края. Например, курсор 'se-resize' используется, если передвижение начинается в юго-восточном углу бокса.
text
обозначает текст, который может быть выделен. Часто отображается как вертикальная черта I.
wait
обозначает, что программа занята и пользователь должен подождать. Часто отображается как (песочные) часы.
help
для объекта под курсором имеется вспомогательная информация. Часто отображается как знак вопроса или воздушный шар.
<uri>
ПА получает курсор из ресурса, обозначенного в URI. Если ПА не может обработать первый курсор из списка курсоров, он должен попытаться обработать второй, и т.д. Если ПА не может обработать ни один курсор, определённый пользователем, он обязан использовать общий курсор в конце списка.
P { cursor : url("mything.cur"), url("second.csr"), text; }
В дополнение к возможности устанавливать предопределённые значения цветов для текста, фона, и т.д., CSS2 позволяет авторам специфицировать цвета таким образом, чтобы интегрировать их в графическую среду пользователя. Таблицы стилей, учитывающие пользовательские установки, дают следующие преимущества:
1Создают страницы, соответствующие привычкам и вкусам пользователя.
2Создают страницы более доступными, т.к. текущие пользовательские установки могут быть рассчитаны на людей с физическими проблемами.
Набор значений, определённых для системных цветов, представляется исчерпывающим. Для систем, не имеющих соответствующих значений, специфицированное значение должно отображаться в ближайший системный атрибут или в цвет по умолчанию.
Далее дан список дополнительных значений для относящихся к цвету атрибутов CSS и их основной смысл. Любое свойство цвета (например, 'color' или 'background-color') может иметь одно из следующих названий. Хотя они и нечувствительны к регистру, рекомендуется использовать смешанную капитализацию, как показано ниже, чтобы сделать названия более понятными.
ActiveBorder
Рамка активного окна.
ActiveCaption
Заголовок активного окна.
AppWorkspace
Цвет фона многодокументного интерфейса.
Background
Фон рабочего стола.
ButtonFace
Цвет переднего плана 3-мерных элементов.
ButtonHighlight
Тёмная тень для 3-мерных элементов (для краёв, выступающих из светлой основы).
ButtonShadow
Цвет тени для 3-мерных элементов.
ButtonText
Текст кнопки.
CaptionText
Текст заголовка, бокса и в боксе прокручиваемого списка.
GrayText
Серый ("недоступен") текст. Это цвет установлен в #000 на тот случай, если текущий дисплей не поддерживает сплошной серый цвет.
Highlight
Объект(ы), выделенный в элементе управления.
HighlightText
Текст объекта(ов), выделенного в элементе управления.
InactiveBorder
Рамка неактивного окна.
InactiveCaption
Заголовок неактивного окна.
InactiveCaptionText
Цвет текста неактивного заголовка.
InfoBackground
Цвет фона элементов подсказки.
InfoText
Цвет текста элементов подсказки.
Menu
Фон меню.
MenuText
Текст меню.
Scrollbar
Серая область прокрутки.
ThreeDDarkShadow
Тёмная тень для 3-мерных элементов дисплея.
ThreeDFace
Цвет переднего плана для 3-мерных элементов дисплея.
ThreeDHighlight
Цвет подсветки для 3-мерных элементов дисплея.
ThreeDLightShadow
Светлый цвет для 3-мерных элементов дисплея (для краёв, выступающих из светлой основы).
ThreeDShadow
Тёмная тень для 3-мерных элементов дисплея.
Window
Фон окна.
WindowFrame
Кадр окна.
WindowText
Текст в окнах.
Например, чтобы установить цвета фона и переднего плана в параграфе в те же значения, что и у окна пользователя, напишите так:
P { color: WindowText; background-color: Window }
Как и с цветами, авторы могут специфицировать шрифты так, чтобы использовать системные ресурсы пользователя. См. детали в свойстве 'font'.
Иногда авторам таблиц стилей может понадобиться создать
1
2
Свойства контуров управляют стилем этих динамических контуров.
Значение: [ <'outline-color'> || <'outline-style'> || <'outline-width'> ] | inherit
Начальное: см. конкретные свойства
Применяется: ко всем элементам
Наследуется: нет
Процентное: N/A
Носитель: визуальный, интерактивный
Значение: <border-width> | inherit
Начальное: medium
Применяется: ко всем элементам
Наследуется: нет
Процентное: N/A
Носитель: визуальный, интерактивный
Значение: <border-style> | inherit
Начальное: none
Применяется: ко всем элементам
Наследуется: нет
Процентное: N/A
Носитель: визуальный, интерактивный
Значение: <color> |
Начальное:
Применяется: ко всем элементам
Наследуется: нет
Процентное: N/A
Носитель: визуальный, интерактивный
Контур, созданный свойствами контуров, прорисовывается "поверх" бокса, т.е. контур всегда сверху и не влияет на позицию и размер бокса или любых других боксов. Следовательно, отображение или подавление контуров не вызывает перерисовки.
Контур прорисовывается сразу за краем рамки.
Свойство
Свойство 'outline-style' принимает те же значения, что и 'border-style', за исключением 'hidden', который не является допустимым стилем контура.
Свойство 'outline-color' принимает все цвета, как и ключевое слово
Свойство 'outline' это сокращённое свойство, устанавливающее все три:
Обратите внимание, что контур одинаков на всех сторонах. В отличие от рамок, свойства 'outline-top' или 'outline-left' отсутствуют.
В этой спецификации не определено, как прорисовываются несколько перекрывающихся контуров, или как
Примечание. Поскольку контур
Прорисовка толстого контура вокруг элемента BUTTON:
BUTTON { outline-width : thick }
Для динамического изменения ширины контура могут использоваться скрипты, не вызывая при этом перерисовки.
Как и с цветами, авторы могут специфицировать шрифты так, чтобы использовать системные ресурсы пользователя. См. детали в свойстве 'font'.
Графические интерфейсы пользователя могут использовать
Чтобы прорисовать толстую чёрную линию вокруг элемента, когда он имеет фокус, толстую красную линию, когда он активен, можно использовать следующие правила:
:focus { outline: thick solid black }
:active { outline: thick solid red }
Рабочая группа CSS считает, что увеличение документа или его части не должно специфицироваться через таблицы стилей. ПА могут поддерживать такое увеличение разными путями (например, увеличивать изображение, усиливать звук и т.п.).
При увеличении страницы ПАгенты должны выдерживать соотношения между позиционированными элементами.
Лекция 19. Звуковые таблицы стилей
Звуковое представление документа, обычно используемое людьми с проблемами зрения, сочетает речевой синтез и "звуковые иконки". Часто такое звуковое представление происходит при конвертации документа в обычный текст и его перенаправлении в устройство чтения с экрана -- программу или физическое устройство, которое просто считывает все символы на экране. Результатом этого является менее эффективное представление, чем могло бы быть, если бы сохранялась структура документа. Свойства таблиц стилей для звукового представления могут использоваться совместно с визуальными свойствами (смешанный носитель) или как звуковая альтернатива визуальному представлению.
Помимо очевидного преимущества - повышения доступности, есть и улучшение использования в других условиях прослушивания информации: использовании в автомобиле, индустриальных и медицинских системах документации (intranet), домашние развлечения и помощь пользователям, обучающимся чтению или имеющим проблемы с чтением.
При использовании звуковых свойств,
H1, H2, H3, H4, H5, H6 {
voice-family: paul;
stress: 20;
richness: 90;
cue-before: url("ping.au")
}
P.heidi { azimuth: center-left }
P.peter { azimuth: right }
P.goat { volume: x-soft }
Здесь речевой синтезатор направляется в речевые заголовки в голосе (своего рода "аудио-шрифт"), называемом "paul", ровным звуком, но очень мягким голосом. Перед произнесением заголовков звуковой отрывок будет проигрываться из заданного URL. Параграфы класса "heidi" будут идти слева (если звуковая система способна воспроизводить пространственное аудио), а параграфы класса "peter" - справа. Параграфы класса "goat" будут звучать очень мягко.
Значение:
Начальное: medium
Применяется: ко всем элементам
Наследуется: да
Процентное: относительно наследуемого значения
Носитель: звуковой
Объём означает величину размаха синусоиды. Другими словами, сильно изогнутая синусоида голоса при объёме 50 может давать пики выше данного значения. Полные значения, вероятно, будут более комфортными для человека, например, при физическом управлении
Значения имеют следующий смысл:
Любое число от '0' до '100'. '0' - это минимальный слышимый уровень громкости, а 100 соответствует максимальному комфортному уровню.
<percentage>
Процентные значения вычисляются относительно наследуемого значения и затем выравниваются в диапазоне от '0' до '100'.
silent
Вообще нет звука. Значение '0' не означает то же самое, что 'silent'.
x-soft
То же, что '0'.
soft
То же, что '25'.
medium
То же, что '50'.
loud
То же, что '75'.
x-loud
То же, что '100'.
ПА должны позволять слушателю устанавливать значения, соответствующие '0' и '100'. Ни одно значение не является универсально применимым; подходящие значения зависят от используемой аппаратуры (громкоговорителей, наушников), обстановки (автомобиль, домашний театр, библиотека) и личных предпочтений. Вот некоторые примеры:
[x]. Браузер для использования в автомобиле имеет установки с учётом сильных посторонних шумов. '0' будет довольно высоким уровнем, а '100' - очень высоким. Речь будет хорошо прослушиваться сквозь уличный шум, но общий динамический диапазон будет ограничен. Автомобили с улучшенной звукоизоляцией могут обеспечить более широкий динамический диапазон.
[x].
Другой браузер используется в квартире поздно ночью или в учебной аудитории. '0' - установлено на очень низкий уровень, а '100' - тоже на довольно низкий. Как и в первом примере, динамический диапазон довольно ограничен. Реальный
[x]. В тихом изолированном помещении установлен домашний театр hi-fi. '0' - установлен довольно низко и '100' - довольно высоко; динамический диапазон весьма широк.
Одна и та же авторская таблица стилей может использоваться во всех случаях, просто отображая значения '0' и '100' соответствующим образом на стороне клиента.
Значение: normal | none | spell-out | inherit
Начальное: normal
Применяется: ко всем элементам
Наследуется: да
Процентное: N/A
Носитель: визуальный
Это свойство специфицирует, будет ли текст представляться в звуке и - если да - в какой манере (примерно как свойство 'display').
Возможные значения:
none
Вырезает звуковое представление, так что элемент не требует времени для представления. Обратите внимание, что потомки могут переопределять это значение и будут звучать. (Для того, чтобы точно отменить представление элемента и его потомков, используйте свойство 'display').
normal
Использует зависимые от языка правила произношения для представления элемента и его потомков.
spell-out
Текст произносится побуквенно (используется для акронимов и аббревиатур).
Заметьте разницу между элементом, чьё свойство
Значение:
Начальное: зависит от ПА
Применяется: ко всем элементам
Наследуется: нет
Процентное: см. текст
Носитель: звуковой
Значение:
Начальное: зависит от ПА
Применяется: ко всем элементам
Наследуется: нет
Процентное: см. текст
Носитель: звуковой
Это свойство специфицирует паузу до (или после) произнесения содержимого элемента.
Значения имеют следующий смысл:
<time>
Выражает паузу в абсолютных единицах времени (секундах и миллисекундах).
Относится к инверсии значения свойства
Пауза вставляется между содержимым элементов и любым содержимым
Авторы должны использовать относительные значения, чтобы создавать более надёжные таблицы стилей с учётом возможной разницы в реальных значениях устанавливаемого
'pause'
Значение: [ [
Начальное: зависит от ПА
Применяется: ко всем элементам
Наследуется: нет
Процентное: см. описания
Носитель: звуковой
Свойство 'pause' это сокращение для
H1 { pause: 20ms } /* pause-before: 20ms; pause-after: 20ms */
H2 { pause: 30ms 40ms } /* pause-before: 30ms; pause-after: 40ms */
H3 { pause-after: 10ms } /* pause-before: ?; pause-after: 10ms */
Значение:
Начальное: none
Применяется: ко всем элементам
Наследуется: нет
Процентное: N/A
Носитель: звуковой
Значение:
Начальное: none
Применяется: ко всем элементам
Наследуется: нет
Процентное: N/A
Носитель: звуковой
Звуковые иконки (реплики) являются способом различения семантических элементов. Звуки могут проигрываться до и/или после элемента, чтобы обозначить его границы.
Значения имеют следующий смысл:
<uri>
URI обязан указывать на ресурс звуковой иконки. Если URI указывает не на аудио-файл, а, например, на изображение, ресурс должен игнорироваться, а свойство - рассматриваться так, как если бы оно имело значение 'none'.
none
A {cue-before: url("bell.aiff"); cue-after: url("dong.wav") }
H1 {cue-before: url("pop.au"); cue-after: url("pop.au") }
'cue'
Значение: [ <'cue-before'> || <'cue-after'> ] | inherit
Начальное: не определено для сокращённого свойства
Применяется: ко всем элементам
Наследуется: нет
Процентное: N/A
Носитель: звуковой
Свойство 'cue' является сокращением для установок
Следующие два правила эквивалентны:
H1 {cue-before: url("pop.au"); cue-after: url("pop.au") }
H1 {cue: url("pop.au") }
Если ПА не может вывести звуковую иконку (напр., установки ПА не позволяют это сделать), мы рекомендуем, чтобы он воспроизводил альтернативную подсказку (напр., выводил предупреждающее сообщение, издавал предупреждающий звук и т.п.).
Информацию о других видах техники генерации содержимого см. в псевдоэлементах :before и :after.
Значение:
Начальное: auto
Применяется: ко всем элементам
Наследуется: нет
Процентное: N/A
Носитель: звуковой
Сходное со свойствами
Значения имеют следующий смысл:
<uri>
Звук, обозначенный этим <uri>, проигрывается как фон в то время, когда проговаривается содержимое элемента.
mix/
Данное ключевое слово, если установлено, означает, что звук, наследуемый из свойства
repeat
Данное ключевое слово, если установлено, означает, что звук будет повторяться, если окажется слишком короток для заполнения всей длительности элемента. В ином случае звучание проигрывается однократно и останавливается. Это подобно действию свойства 'background-repeat'. Если звучание слишком долгое для элемента, оно обрывается сразу, как только элемент произнесён.
auto
Звучание родительского элемента продолжает проигрываться (без рестарта, что могло бы иметь место, если бы свойство наследовалось).
none
Это ключевое слово обозначает тишину. Звучание родительского элемента не слышно (если имеется) в течение данного элемента и продолжается после данного элемента.
BLOCKQUOTE.sad { play-during: url("violins.aiff") }
BLOCKQUOTE Q { play-during: url("harp.wav") mix }
SPAN.quiet { play-during: none }
Пространственное аудио является важным стилистическим свойством звукового представления. Оно предоставляет естественный способ реализации звучания нескольких независимых голосов, как в реальной жизни (источники звука редко находятся в одной точке помещения). Стереодинамики создают пространственный эффект. Стереонаушники или становящиеся всё более популярными установки с пятью колонками в домашнем театре могут генерировать объёмное звучание, а многополосные установки могут производит трёхмерное звучание. VRML 2.0 также включает пространственное аудио в предположении, что доступные по цене для потребителей аудиоустройства с пространственными эффектами со временем станут широко распространёнными.
'azimuth'
Значение: <angle> | [[ left-side | far-left | left | center-left | center | center-right | right | far-right | right-side ] || behind ] | leftwards | rightwards | inherit
Начальное: center
Применяется: ко всем элементам
Наследуется: да
Процентное: N/A
Носитель: звуковой
Значения имеют следующий смысл:
<angle>
Позиция в угловых терминах от '-360deg' до '360deg'. Значение '0deg' означает впереди и в центре звукового пространства. '90deg' это справа, '180deg' - сзади, '270deg' (или более подходящий эквивалент, '-90deg') - слева.
left-side
То же, что '270deg'. С 'behind' - '270deg'.
far-left
То же, что '300deg'. С 'behind' - '240deg'.
left
То же, что '320deg'. С 'behind' - '220deg'.
center-left
То же, что '340deg'. С 'behind' - '200deg'.
center
То же, что '0deg'. С 'behind' - '180deg'.
center-right
То же, что '20deg'. С 'behind' - '160deg'.
right
То же, что '40deg'. С 'behind' - '140deg'.
far-right
То же, что '60deg'. С 'behind' - '120deg'.
right-side
То же, что '90deg'. С 'behind' - '90deg'.
leftwards
Сдвигает звучание влево относительно текущего угла. Точнее, вычитает 20 градусов. Арифметически выполняется modulo 360 градусов. Заметьте, что 'leftwards' точнее описать как "повёрнуто против часовой стрелки," поскольку оно всегда вычитает 20 градусов, даже если наследуемый azimuth уже позади слушателя (в этом случае звучание на самом деле перемещено вправо).
rightwards
Сдвигает звучание вправо относительно текущего угла. Точнее, прибавляет 20 градусов. См. 'leftwards' в арифметике.
Данное свойство может быть более точно реализовано микшированием одного сигнала в разных каналах с разным уровнем. Оно может также использовать фазовое смещение, цифровую задержку и другие аналогичные приёмы для того, чтобы создать иллюзию сцены. Точные значения, используемые для выполнения этого эффекта, и количество динамиков зависят от ПА; это свойство лишь идентифицирует желаемый результат.
H1 { azimuth: 30deg }
TD.a { azimuth: far-right } /* 60deg */
#12 { azimuth: behind far-right } /* 120deg */
P.comment { azimuth: behind } /* 180deg */
Если пространственный азимут специфицирован и выводящее устройство не способно производить звук позади слушателя, ПА должны конвертировать значения задней полусферы в значения передней полусферы. Метод может быть такой:
[x]. если 90deg < x <= 180deg, тогда x := 180deg - x
[x]. если 180deg < x <= 270deg, тогда x := 540deg - x
Значение: <angle> | below | level | above | higher | lower | inherit
Начальное: level
Применяется: ко всем элементам
Наследуется: да
Процентное: N/A
Носитель: звуковой
Значения имеют следующий смысл:
<angle>
Специфицирует возвышение как угол между '-90deg' и '90deg'. '0deg' означает передний горизонт, что означает уровень слушателя. '90deg' означает прямо сверху, а '-90deg' - прямо внизу.
below
То же, что '-90deg'.
level
То же, что '0deg'.
above
То же, что '90deg'.
higher
Прибавляет 10 градусов к текущему возвышению.
lower
Вычитает 10 градусов из текущего возвышения.
Точные значения, используемые для получения этого эффекта, и количество динамиков не определены. Это свойство лишь идентифицирует желаемый результат.
H1 { elevation: above }
TR.a { elevation: 60deg }
TR.b { elevation: 30deg }
TR.c { elevation: level }
Значение:
Начальное: medium
Применяется: ко всем элементам
Наследуется: да
Процентное: N/A
Носитель: звуковой
Специфицирует темп речи. Обратите внимание, что допустимы и абсолютные, и относительные значения ключевых слов (сравните с 'font-size').
Значения имеют следующий смысл:
Специфицирует темп речи - слов в минуту, количество которых варьируется в зависимости от языка и широко поддерживается речевыми синтезаторами.
x-slow
То же, что 80 слов в минуту.
slow
То же, что 120 слов в минуту
medium
То же, что 180 - 200 слов в минуту.
fast
То же, что 300 слов в минуту.
x-fast
То же, что 500 слов в минуту.
faster
Прибавляет 40 слов в минуту к текущему темпу.
slower
Вычитает 40 слов в минуту из текущего темпа.
Значение: [[
Начальное: зависит от ПА
Применяется: ко всем элементам
Наследуется: да
Процентное: N/A
Носитель: звуковой
Значением является приоритетный список разделённых запятыми имён семейств голосов (сравните с 'font-family').
Значения имеют следующий смысл:
<generic-voice>
Значениями являются семейства голосов. Возможные значения: 'male', 'female' и 'child'.
<specific-voice>
Значения являются специфическими объектами (напр., comedian, trinoids, carlos, lani).
H1 { voice-family: announcer, male }
P.part.romeo { voice-family: romeo, male }
P.part.juliet { voice-family: juliet, female }
Имена могут быть в кавычках и обязаны быть закавычены, если какое-либо слово в имени не соответствует правилам синтаксиса для идентификаторов. Рекомендуется также закавычивать голоса с именем, состоящим из более чем одного слова. Если кавычки отсутствуют, любые символы пробела до и после имени голоса игнорируются и любая последовательность пробельных символов внутри имени голоса конвертируется в одиночный символ пробела.
Значение:
Начальное: medium
Применяется: ко всем элементам
Наследуется: да
Процентное: N/A
Носитель: звуковой
Специфицирует среднюю высоту (частоту) говорящего голоса. Средняя высота голоса зависит от семейства голосов. Например, средняя высота стандартного мужского голоса - около 120Hz, а женского - около 210Hz.
Значения имеют следующий смысл:
<frequency>
Специфицирует среднюю высоту голоса (Hz).
x-low, low, medium, high, x-high
Эти значения не отображаются в абсолютные значения частоты, поскольку зависят от семейства голосов. ПА должны отображать эти значения в соответствующие частоты, базируясь на семействе голосов и установках ПА. В то же время, ПА обязаны отображать эти значения упорядоченно (т.е. 'x-low' ниже, чем 'low', и т.д.).
Значение:
Начальное: 50
Применяется: ко всем элементам
Наследуется: да
Процентное: N/A
Носитель: звуковой
Специфицирует вариации средней высоты. Воспринимаемая высота человеческого голоса определяется фундаментальной частотой и обычно имеет значения: 120Hz для мужского и 210Hz для женского голоса. На человеческих языках говорят с различной инфлексией и частотой; эти вариации выражают дополнительные значения и смысл. Так, оживлённая речь, т.е. с сильной инфлексией, имеет высокий диапазон. Это свойство специфицирует диапазон, вне которого появляется вариация, т.е., как сильно фундаментальная частота может отклоняться от средней частоты.
Значения имеют следующий смысл:
<number>
Значение - между '0' и '100'. '0' производит плоский монотонный голос. 50 даёт нормальную инфлексию. Выше 50 - оживлённая речь.
Значение:
Начальное: 50
Применяется: ко всем элементам
Наследуется: да
Процентное: N/A
Носитель: звуковой
Специфицирует "локальные пики" интонационного контура голоса. Например, английский является акцентированным языком, и различные части предложения имеют первичное, вторичное и третичное выделение. Значение свойства
Значения имеют следующий смысл:
Значения - от '0' до '100'. Смысл значения зависит от языка. Например, уровень '50' - для стандартного мужского голоса, говорящего по-английски (средняя частота = 122Hz) с нормальной интонацией и выделением будет отличаться от голоса со значением '50', говорящего по-итальянски.
Значение:
Начальное: 50
Применяется: ко всем элементам
Наследуется: да
Процентное: N/A
Носитель: звуковой
Специфицирует полётность голоса. Полётный голос будет слышен в большом помещении, а вкрадчивый - нет. (Термин "вкрадчивый" относится к форме синусоиды.)
Значения имеют следующий смысл:
Значения - от '0' до '100'. Чем выше значение, тем более полётный голос. Более низкие значения дают мягкий, медоточивый голос.
Дополнительное свойство речи, speak-header, описано в главе о таблицах.
Значение: code | none | inherit
Начальное: none
Применяется: ко всем элементам
Наследуется: да
Процентное: N/A
Носитель: звуковой
Специфицирует, как произносится пунктуация. Значения имеют следующий смысл:
code
Такие знаки препинания, как точка с запятой, скобки и так далее, произносятся буквально.
none
Знаки не произносятся, а представляются естественно, как различные паузы.
Значение: digits | continuous | inherit
Начальное: continuous
Применяется: ко всем элементам
Наследуется: да
Процентное: N/A
Носитель: звуковой
Управляет произношением чисел. Значения имеют следующий смысл:
digits
Произносит числа отдельными цифрами. Например, "237" произносится "два три семь".
continuous
Числа произносятся полностью. Например, "237" произносится "двести тридцать семь". Словесное представление зависит от языка.
Дополнения
Дополнение. Приложение A. Образец таблицы стиля для HTML 4.0
Данное приложение является информативным, но не нормативным.
Эта таблица стилей описывает типичное форматирование для всех элементов HTML 4.0 ([HTML40]), базирующееся на обширных исследованиях текущей практики работы пользовательских агентов (ПА). Разработчикам предлагается использовать её как таблицу стилей по умолчанию.
Полное представление некоторых элементов HTML невозможно в CSS2, в том числе - заменяемых элементов (IMG, OBJECT), элементов скриптинга (SCRIPT, APPLET), элементов формы и элементов фрэймов.
ADDRESS,
BLOCKQUOTE,
BODY, DD, DIV,
DL, DT,
FIELDSET, FORM,
FRAME, FRAMESET,
H1, H2, H3, H4,
H5, H6, IFRAME,
NOFRAMES,
OBJECT, OL, P,
UL, APPLET,
CENTER, DIR,
HR, MENU, PRE { display: block }
LI { display: list-item }
HEAD { display: none }
TABLE { display: table }
TR { display: table-row }
THEAD { display: table-header-group }
TBODY { display: table-row-group }
TFOOT { display: table-footer-group }
COL { display: table-column }
COLGROUP { display: table-column-group }
TD, TH { display: table-cell }
CAPTION { display: table-caption }
TH { font-weight: bolder; text-align: center }
CAPTION { text-align: center }
BODY { padding: 8px; line-height: 1.33 }
H1 { font-size: 2em; margin: .67em 0 }
H2 { font-size: 1.5em; margin: .83em 0 }
H3 { font-size: 1.17em; margin: 1em 0 }
H4, P,
BLOCKQUOTE, UL,
FIELDSET, FORM,
OL, DL, DIR,
MENU { margin: 1.33em 0 }
H5 { font-size: .83em; line-height: 1.17em; margin: 1.67em 0 }
H6 { font-size: .67em; margin: 2.33em 0 }
H1, H2, H3, H4,
H5, H6, B,
STRONG { font-weight: bolder }
BLOCKQUOTE { margin-left: 40px; margin-right: 40px }
I, CITE, EM,
VAR, ADDRESS { font-style: italic }
PRE, TT, CODE,
KBD, SAMP { font-family: monospace }
PRE { white-space: pre }
BIG { font-size: 1.17em }
SMALL, SUB, SUP { font-size: .83em }
SUB { vertical-align: sub }
SUP { vertical-align: super }
S, STRIKE, DEL { text-decoration: line-through }
HR { border: 1px inset }
OL, UL, DIR,
MENU, DD { margin-left: 40px }
OL { list-style-type: decimal }
OL UL, UL OL,
UL UL, OL OL { margin-top: 0; margin-bottom: 0 }
U, INS { text-decoration: underline }
CENTER { text-align: center }
BR:before { content: "\A" }
/* Пример стиля для элементов HTML 4.0 ABBR/ACRONYM */
ABBR, ACRONYM { font-variant: small-caps; letter-spacing: 0.1em }
A[href] { text-decoration: underline }
:focus { outline: thin dotted invert }
/* Начало установок двунаправленности (не изменять) */
BDO[DIR="ltr"] { direction: ltr; unicode-bidi: bidi-override }
BDO[DIR="rtl"] { direction: rtl; unicode-bidi: bidi-override }
*[DIR="ltr"] { direction: ltr; unicode-bidi: embed }
*[DIR="rtl"] { direction: rtl; unicode-bidi: embed }
/* Элементы уровня блока в HTML4 */
ADDRESS, BLOCKQUOTE, BODY, DD, DIV, DL, DT, FIELDSET,
FORM, FRAME, FRAMESET, H1, H2, H3, H4, H5, H6, IFRAME,
NOSCRIPT, NOFRAMES, OBJECT, OL, P, UL, APPLET, CENTER,
DIR, HR, MENU, PRE, LI, TABLE, TR, THEAD, TBODY, TFOOT,
COL, COLGROUP, TD, TH, CAPTION
{ unicode-bidi: embed }
/* Конец установок bidi */
@media print {
@page { margin: 10% }
H1, H2, H3,
H4, H5, H6 { page-break-after: avoid; page-break-inside: avoid }
BLOCKQUOTE,
PRE { page-break-inside: avoid }
UL, OL, DL { page-break-before: avoid }
}
@media speech {
H1, H2, H3,
H4, H5, H6 { voice-family: paul, male; stress: 20; richness: 90 }
H1 { pitch: x-low; pitch-range: 90 }
H2 { pitch: x-low; pitch-range: 80 }
H3 { pitch: low; pitch-range: 70 }
H4 { pitch: medium; pitch-range: 60 }
H5 { pitch: medium; pitch-range: 50 }
H6 { pitch: medium; pitch-range: 40 }
LI, DT, DD { pitch: medium; richness: 60 }
DT { stress: 80 }
PRE, CODE, TT { pitch: medium; pitch-range: 0; stress: 0; richness: 80 }
EM { pitch: medium; pitch-range: 60; stress: 60; richness: 50 }
STRONG { pitch: medium; pitch-range: 60; stress: 90; richness: 90 }
DFN { pitch: high; pitch-range: 60; stress: 60 }
S, STRIKE { richness: 0 }
I { pitch: medium; pitch-range: 60; stress: 60; richness: 50 }
B { pitch: medium; pitch-range: 60; stress: 90; richness: 90 }
U { richness: 0 }
A:link { voice-family: harry, male }
A:visited { voice-family: betty, female }
A:active { voice-family: betty, female; pitch-range: 80; pitch: x-high }
}
Дополнение. Приложение B. Изменения по сравнению с CSS1
Это приложение является информативным, но не нормативным.
CSS2 построен на основе CSS1, и все действительные таблицы стилей CSS1 являются действительными таблицами стилей CSS2. Изменения между спецификацией CSS1 (см. [CSS1] ) и данной спецификацией делятся на три группы: новая функциональность, обновлённые описания функциональности CSS1 и изменения по сравнению с CSS1.
В дополнение к функциональности CSS1, CSS2 поддерживает:
[x]. Понятие типов носителя.
[x]. Значение 'inherit' для всех свойств.
[x]. Страничные носители
[x]. Звуковые таблицы стилей
[x]. Несколько опций интернационализации, включая стили нумерации списков, поддержку двунаправленного текста и чувствительных к языку знаков кавычек.
[x]. Расширенный механизм выбора шрифта, включая смысловой подбор, синтез и загружаемые шрифты. Введены также понятие системных шрифтов и новое свойство 'font-size-adjust'.
[x]. Таблицы, включая новые значения 'display' и 'vertical-align'.
[x]. Относительное и абсолютное позиционирование, включая фиксированное позиционирование.
[x]. Новые типы боксов (наряду с блок- и инлайн-): compact и run-in.
[x]. Возможность контролировать переполнение, сжатие и видимость содержимого в модели визуального форматирования.
[x]. Возможность специфицировать максимальные и минимальные ширину и высоту в модели визуального форматирования.
[x]. Расширенный механизм селекторов, включая дочерние селекторы, смежные селекторы и селекторы атрибутов.
[x]. Генерируемое содержимое, счётчики и автоматическую нумерацию и маркёры.
[x]. Оттенение текста с помощью нового свойства 'text-shadow'.
[x]. Различные новые псевдоклассы, :first-child, :hover, :focus, :lang.
[x]. Системные цвета и шрифты.
[x]. Курсоры.
[x]. Динамические схемы.
Спецификация CSS1 была короче и компактнее. Данная спецификация намного объёмнее и более читабельна. Большая часть нового материала описывает новую функциональность, но описания из CSS1 также расширены. За исключением немногих случаев, описанных ниже, обновлённые описания не изменили ни синтаксис, ни семантику.
Хотя все действительные таблицы стилей CSS1 являются таковыми и в CSS2, есть несколько случаев, когда таблицы стилей CSS1 будут иметь другие значения при интерпретации в качестве таблиц CSS2. Большинство изменений обусловлено опытом разработки, но есть также и корректировка некоторых ошибок.
[x]. Значение "!important" изменено. В CSS1 "!important" в таблице стилей автора имел преимущество перед "!important" таблицы стилей пользователя. В CSS2 сделано наоборот.
[x]. В CSS2 значения цвета ужаты в соответствии с гаммой устройства, а не с гаммой sRGB, как в CSS1.
[x]. В CSS1 просто указано, что 'margin-right' игнорировалось, если 'margin-left' и 'width' были установлены. В CSS2 выбор между смягчением 'margin-right' или 'margin-left' зависит от направления письма.
[x]. В CSS1 некоторые свойства (например, 'padding') имели значения, ссылающиеся на ширину родительского элемента. Это было ошибкой; значение всегда должно ссылаться на ширину элемента уровня блока, и данная спецификация отражает это путём ввода термина "containing block/содержащий блок".
[x]. Начальное значение 'display' - 'inline' в CSS2, а не 'block', как в CSS1.
[x]. В CSS1 свойство 'clear' применялось ко всем элементам. Это было ошибкой, и в CSS2 свойства применяются только к элементам уровня блока.
[x].
В CSS1
[x]. Предлагаемый фактор масштаба между смежными индексами 'font-size' в таблице размеров шрифтов уменьшен с 1.5 до 1.2.
[x]. Теперь наследуется вычисленное, а не текущее, значение 'font-size'.
[x]. CSS1-описание 'inside' (для 'list-style-position'), допускало воздействие на левое поле текста, а не на позицию маркёра. В CSS2 такая интерпретация правила устранена.
[x]. См. также нормативный раздел Различия между символизаторами CSS1 и CSS2.
Дополнение. Приложение C. Замечания по реализации и выполнению для шрифтов
Это приложение является информативным, но не нормативным.
DocLockTM
Bitstream-технология DocLockTM гарантирует, что TrueDoc PFRs могут использоваться только на том сайте, где они опубликованы. TrueDoc PFR, перемещённый на другой сайт или имеющий на себя ссылку с другого сайта, работать не будет.
Digital Signature/Цифровая подпись
Часть технологии доверительного управления, используемая для предоставления подтверждения о ресурсе.
Font Caching/Кэширование шрифта
Кэширование шрифта позволяет временно копировать шрифты на клиентской системе. Шрифты часто хранятся на диске с другими кэшированными объектами, такими как графика, специфичными для пользовательского агента (ПА).
Font Face
"Разновидность", относится к определённой разновидности шрифта, за исключением его размера.
Font Matching/Совпадение шрифтов
Совпадение шрифтов - это процесс выбора похожего шрифта на базе одного или нескольких атрибутов основного шрифта. Обычные атрибуты: serif/с засечками, sans-serif/без засечек, вес, высота заглавных, x-высота, spacing/плотность, язык и posture/позиция. Совпадение шрифтов зависит от алгоритма и разнообразия шрифтов-кандидатов.
Glyph Representation Sub-setting/Подразделение Представления Глифов
Подразделение (поднабор) представления глифов это процесс, при котором ненужные глифы (вместе с их информацией об ориентации и кернинге) удаляются из основного шрифта, чтобы создать уменьшенный поднабор шрифта, покрывающий определённый документ или набор документов. Это обычный способ для документов, использующих идеографическое письмо, где дополнение глифами базового шрифта может быть очень обширным. Подразделение представления глифов для документов, использующих письмо с лигатурами, такое как арабское, представляет трудности при отсутствии сведений о правилах формирования лигатур на конечной системе вывода.
Intellifont
Intellifont-технология была разработана фирмой Agfa и является первичным форматом для Hewlett-Packard и других принтеров, использующих язык PCL5. Это также первичный формат шрифтов компьютеров Amiga.
Infinifont
Техника синтезирования шрифтов, которая, задавая число Panose-1 (и, по выбору, дополнительные данные описания шрифта), может генерировать красивый шрифт без экстраполирования из одного мастер-контура или интерполяции между двумя или более контурами (см. [INFINIFONT]).
Italic
Класс форм букв латиницы, которые более курсивны, чем буквы roman-форм, но менее курсивны, чем формы ручного письма. Часто пары шрифтов разрабатываются и используются совместно; один - roman с засечками, а другой - italic. Другие термины для описания этого класса форм букв: cursive и, для кириллицы, kursiv. Для разновидностей sans-serif дополнительная разновидность - это часто наклонный вариант, а не другой класс форм букв.
Kerning/Кернинг
Изменение расстояния между выбранными представлениями глифов, которое может быть слишком большим или слишком маленьким, чтобы получить более ровный типографский цвет.
Multiple Master Font/Множественный мастер-ширфт
Множественный мастер-шрифт содержит два первичных шрифта, которые используются со специальными программами вывода для предоставления интерполированного результата. Adobe Systems предоставляет механизм, позволяющий использовать параметры для управления выводом или интерполированным вводом шрифта. Эти параметры обычно описывают характеристики оригинального шрифта, и множественный мастер-результат называется "синтезированный шрифт"
Open Type
Open Type это расширение шрифтового формата TrueType, которое содержит дополнительную информацию, расширяющую возможности шрифта в поддержке высококачественной международной печати. Open Type может ассоциировать один символ с несколькими глифами представления и комбинации символов - с одним глифом (словообразующая лигатура). Open Type содержит двухмерную информацию для поддержки свойств комплексного позиционирования и присоединения глифов. TrueType Open и OpenType содержат конкретную информацию о письме и языке, так что текстовые процессоры могут уточнять своё поведение соответственно (см. [OPENTYPE]).
Server Font/Серверный шрифт
Server Font это ресурс шрифта, размещённый на сервере и вызываемый определением WebFont. ПА может использовать этот ресурс для отображения страницы.
Speedo
Speedo -технология шрифтов была разработана Bitstream и является первичным форматом шрифта на компьютерах Atari ST и Falcon. Используется также в компьютерах с запущенной системой X window.
TrueDoc
TrueDoc -технология была разработана Bitstream для создания, переноса и прорисовки платформонезависимых масштабируемых объектов шрифта в web. Создание объектов шрифта выполняется в character shape recorder (CSR) TrueDoc, а вывод объектов шрифта - в character shape player (CSP) TrueDoc. Технология предназначена для просмотра и печати в web.
TrueDoc Portable Font Resource/Переносимые Ресурсы Шрифта
TrueDoc Portable font resource (или PFR) это платформонезависимый масштабируемый объект шрифта, вырабатываемый CSP. Ввод может быть TrueType или Type 1 любого ответвления Windows, Mac или Unix. TrueDoc Portable Font Resources предоставляют хорошие пропорции компрессии, платформонезависимы и, поскольку они не в первичном формате шрифта (TrueType или Type 1), не могут легко инсталироваться.
TrueType
TrueType это формат, разработанный Apple и лицензированный Microsoft. TrueType это первичный формат шрифта операционной системы для Windows и Macintosh. TrueType содержит иерархический набор таблиц и глифов-изображений. Символы могут выводиться на посимвольном базисе или на базе размера в пунктах, давая превосходное качество для данных разрешений экрана. Шрифты TrueType для Windows и Mac мало отличаются, хотя и могут быть достаточно различными для предотвращения межплатформенного использования.
TrueType Collection/Коллекция TrueType
TrueType Collection (или TTC) это расширение формата TrueType, включающее таблицы, позволяющие содержать много шрифтов TrueType в одном файле шрифта TrueType. Файлы TrueType collection встречаются теперь относительно редко.
TrueType GX Fonts/TrueType Шрифты GX
TrueType GX Fonts содержат расширения стандартного формата TrueType, допускающие изменяющиеся шрифты, подобные шрифтам Multiple Master. Может быть несколько мутаций параметров (осей), таких как вес, высота и наклон. Ось может определяться, что позволяет получить практически любой эффект. TrueType GX может поддерживать также альтернативные замещения представлений глифов для лигатур, контекстуальных форм, дробей и т.д. Для вычислений TrueType GX доступны только на Mac (см. [TRUETYPEGX]).
Type 1 font/Шрифты Type 1
Шрифты Type 1, разработанные Adobe Systems, были одним из первых доступных масштабируемых форматов. Шрифты Type 1 обычно содержат 228 символов с глифами-изображениями, описанных с использованием кривых третьей степени bezier. Mac, Windows и X имеют схожие, но отдельные форматы; Adobe предоставляет Adobe Type Manager для всех трёх платформ. Type1c это более ранняя форма с компрессией без потерь для глифов-изображений Type 1.
URI Binding/Связывание с URI
Процесс подключения определённого ресурса шрифта к данному Web-сайту путём внедрения кодированного URI или цифрового подтверждения использования в ресурс шрифта.
Имеется множество различных форматов шрифта для использования на разных платформах. Чтобы выбрать предпочтительный формат шрифта, используется свободная дискуссия (см. [NEGOT]). Всегда можно определить, когда ссылка на шрифт отсутствует, поскольку URI находится внутри описания шрифта. Данная конкретная реализация будет знать, какие форматы загружаемых шрифтов она поддерживает и может, соответственно, использовать подсказки формата для исключения загрузки шрифтов неподдерживаемых форматов.
Числа Family, Serif Style и Proportion используются Windows95 для выбора и совпадений шрифтов.
Значения десяти чисел и допустимые значения (в скобках) даны ниже для самого общего случая, когда цифра "family"
Family
[x]. Any (0)
[x]. No Fit (1)
[x]. [PANOSE] Latin Text and Display (2)
[x]. [PANOSE] Latin Script (3)
[x]. [PANOSE] Latin Decorative (4)
[x]. [PANOSE] Latin Pictorial (5)
Serif Style
[x]. Any (0)
[x]. No Fit (1)
[x]. Cove (2)
[x]. Obtuse Cove (3)
[x]. Square Cove (4)
[x]. Obtuse Square Cove (5)
[x]. Square (6)
[x]. Thin (7)
[x]. Bone (8)
[x]. Exaggerated (9)
[x]. Triangle (10)
[x]. Normal Sans (11)
[x]. Obtuse Sans (12)
[x]. Perp Sans (13)
[x]. Flared (14)
[x]. Rounded (15)
Weight
[x]. Any (0)
[x]. No Fit (1)
[x]. Very Light (2)[100]
[x]. Light (3) [200]
[x]. Thin (4) [300]
[x]. Book (5) [400] то же, что CSS1 'normal'
[x]. Medium (6) [500]
[x]. Demi (7) [600]
[x]. Bold (8) [700] то же, что CSS1 'bold'
[x]. Heavy (9) [800]
[x]. Black (10) [900]
[x]. Extra Black / Nord (11) [900] форсирует отображение в масштаб 100-900 CSS1
Proportion
[x]. Any (0)
[x]. No Fit (1)
[x]. Old Style (2)
[x]. Modern (3)
[x]. Even Width (4)
[x]. Expanded (5)
[x]. Condensed (6)
[x]. Very Expanded (7)
[x]. Very Condensed (8)
[x]. Monospaced (9)
Contrast
[x]. Any (0)
[x]. No Fit (1)
[x]. None (2)
[x]. Very Low (3)
[x]. Low (4)
[x]. Medium Low (5)
[x]. Medium (6)
[x]. Medium High (7)
[x]. High (8)
[x]. Very High (9)
Stroke Variation
[x]. Any (0)
[x]. No Fit (1)
[x]. No Variation (2)
[x]. Gradual/Diagonal (3)
[x]. Gradual/Transitional (4)
[x]. Gradual/Vertical (5)
[x]. Gradual/Horizontal (6)
[x]. Rapid/Vertical (7)
[x]. Rapid/Horizontal (8)
[x]. Instant/Horizontal (9)
[x]. Instant/Vertical (10)
Arm Style
[x]. Any (0)
[x]. No Fit (1)
[x]. Straight Arms/Horizontal (2)
[x]. Straight Arms/Wedge (3)
[x]. Straight Arms/Vertical (4)
[x]. Straight Arms/Single Serif (5)
[x]. Straight Arms/Double Serif (6)
[x]. Non-Straight Arms/Horizontal (7)
[x]. Non-Straight Arms/Wedge (8)
[x]. Non-Straight Arms/Vertical 90)
[x]. Non-Straight Arms/Single Serif (10)
[x]. Non-Straight Arms/Double Serif (11)
Letterform
[x]. Any (0)
[x]. No Fit (1)
[x]. Normal/Contact (2)
[x]. Normal/Weighted (3)
[x]. Normal/Boxed (4)
[x]. Normal/Flattened (5)
[x]. Normal/Rounded (6)
[x]. Normal/Off Center (7)
[x]. Normal/Square (8)
[x]. Oblique/Contact (9)
[x]. Oblique/Weighted (10)
[x]. Oblique/Boxed (11)
[x]. Oblique/Flattened (12)
[x]. Oblique/Rounded (13)
[x]. Oblique/Off Center (14)
[x]. Oblique/Square (15)
Midline
[x]. Any (0)
[x]. No Fit (1)
[x]. Standard/Trimmed (2)
[x]. Standard/Pointed (3)
[x]. Standard/Serifed (4)
[x]. High/Trimmed (5)
[x]. High/Pointed (6)
[x]. High/Serifed (7)
[x]. Constant/Trimmed (8)
[x]. Constant/Pointed (9)
[x]. Constant/Serifed (10)
[x]. Low/Trimmed (11)
[x]. Low/Pointed (12)
[x]. Low/Serifed (13)
XHeight
[x]. Any (0)
[x]. No Fit (1)
[x]. Constant/Small (2)
[x]. Constant/Standard (3)
[x]. Constant/Large (4)
[x]. Ducking/Small (5)
[x]. Ducking/Standard (6)
[x]. Ducking/Large (7)
Panose-2 (см. [PANOSE2]) это спецификация более исчерпывающей классификации шрифтов и технология совпадений, не ограниченные латиницей. Например, характеристики засечек латиницы могут сравниваться с окончаниями линий разновидности Kanji.
Значение Panose-2 не хранится в каком-либо известном формате шрифта, но может быть измерено.
Эта информация доступна в шрифте при просмотре битов 'ulUnicodeRange' в таблице 'OS/2' (если она ('OS/2') её имеет), которая (таблица) содержит битовые поля представления набора. Эта таблица определена в ревизии 1.66 спецификации TrueType от Microsoft. Можно рассматривать эту информацию как набор, где каждый элемент соответствует блоку символов Unicode 1.1, и присутствие этого элемента в наборе означает, что шрифт имеет один или более глифов-изображений для представления по меньшей мере одного символа этого блока. Набор содержит 128 элементов, как описано ниже. Порядок обычно следует порядку стандарта Unicode 1.1. Эта таблица может использоваться для конвертации информации в шрифте TrueType в дескриптор 'unicode-range' CSS.
| Блок | Add/Прибавить | Имя блока | Диапазон Unicode |
|---|---|---|---|
| 0 | 1 | Basic Latin | U+0-7F |
| 1 | 2 | Latin-1 Supplement | U+80-FF |
| 2 | 4 | Latin-1 Extended-A | U+100-17F |
| 3 | 8 | Latin Extended-B | U+180-24F |
| 4 | 1 | IPA Extensions | U+250-2AF |
| 5 | 2 | Spacing Modifier Letters | U+2B0-2FF |
| 6 | 4 | Combining Diacritical Marks | U+300-36F |
| 7 | 8 | Greek | U+370-3CF |
| 8 | 1 | Greek Symbols and Coptic | U+3D0-3EF |
| 9 | 2 | Cyrillic | U+400-4FF |
| 10 | 4 | Armenian | U+530-58F |
| 11 | 8 | Hebrew | U+590-5FF |
| 12 | 1 | Hebrew Extended-A Hebrew Extended-B | ?? какие диапазоны ?? |
| 13 | 2 | Arabic | U+600-69F |
| 14 | 4 | Arabic Extended | U+670-6FF |
| 15 | 8 | Devanagari | U+900-97F |
| 16 | 1 | Bengali | U+980-9FF |
| 17 | 2 | Gurmukhi | U+A00-A7F |
| 18 | 4 | Gujarati | U+A80-AFF |
| 19 | 8 | Oriya | U+B00-B7F |
| 20 | 1 | Tamil | U+B80-BFF |
| 21 | 2 | Telugu | U+C00-C7F |
| 22 | 4 | Kannada | U+C80-CFF |
| 23 | 8 | Malayalam | U+D00-D7F |
| 24 | 1 | Thai | U+E00-E7F |
| 25 | 2 | Lao | U+E80-EFF |
| 26 | 4 | Georgian | U+10A0-10EF |
| 27 | 8 | Georgian Extended | U+10F0-10FF ?? |
| 28 | 1 | Hangul Jamo | U+1100-11FF |
| 29 | 2 | Latin Extended Additional | - |
| 30 | 4 | Greek Extended | U+1F00-1FFF |
| 31 | 8 | General Punctuation | U+2000-206F |
| 32 | 1 | Superscripts and Subscripts | - |
| 33 | 2 | Currency Symbols | U+20A0-20CF |
| 34 | 4 | Combining Marks for Symbols | U+20D0-20FF |
| 35 | 8 | Letterlike Symbols | U+2100-214F |
| 36 | 1 | Number Forms | U+2150-218F |
| 37 | 2 | Arrows | U+2190-21FF |
| 38 | 4 | Mathematical Operators | U+2200-22FF |
| 39 | 8 | Miscellaneous Technical | U+2300-23FF |
| 40 | 1 | Control Pictures | U+2400-243F |
| 41 | 2 | Optical Character Recognition | U+2440-245F |
| 42 | 4 | Enclosed Alphanumerics | U+2460-24FF |
| 43 | 8 | Box Drawing | U+2500-257F |
| 44 | 1 | Block Elements | U+2580-259F |
| 45 | 2 | Geometric Shapes | U+25A0-25FF |
| 46 | 4 | Miscellaneous Symbols | U+2600-26FF |
| 47 | 8 | Dingbats | U+2700-27BF |
| 48 | 1 | CJK Symbols and Punctuation | U+3000-303F |
| 49 | 2 | Hiragana | U+3040-309F |
| 50 | 4 | Katakana | U+30A0-30FF |
| 51 | 8 | Bopomofo | U+3100-312F |
| 52 | 1 | Hangul Compatibility Jamo | U+3130-318F |
| 53 | 2 | CJK Miscellaneous | ?? |
| 54 | 4 | Enclosed CJK Letters and Months | U+3200-32FF |
| 55 | 8 | CJK compatibility | U+3300-33FF |
| 56 | 1 | Hangul | U+AC00-D7FF |
| 59 | 8 | CJK Unified Ideographs | U+4E00-9FFF |
| 60 | 1 | Private Use Area | U+E000-F8FF |
| 61 | 2 | CJK Compatibility Ideographs | U+F900-FAFF |
| 62 | 4 | Alphabetic Presentation Forms | U+FB00-FB4F |
| 63 | 8 | Arabic Presentation Forms-A | U+FB50-FDFF |
| 64 | 1 | Combining Half Marks | U+FE20-FE2F |
| 65 | 2 | CJK compatibility Forms | U+FE30-FE4F |
| 66 | 4 | Small Form Variants | U+FE50-FE6F |
| 67 | 8 | Arabic Presentation Forms-B | U+FE70-FEFF |
| 68 | 1 | Halfwidth and Fullwidth Forms | U+FF00-FFEF |
| 69 | 2 | Specials | U+FFF0-FFFD |
В системе битовых полей TrueType есть проблема, заключающаяся в том, что эта система присоединена к Unicode 1.1 и не справляется с расширением Unicode - например, невозможно представить Tibetan или другие виды письма, введённые в Unicode 2.0 или более поздних ревизиях.
Авторские утилиты должны позволять авторам таблиц стилей добавлять и редактировать дескрипторы шрифтов. В некоторых случаях авторские утилиты могут оказать помощь путём локальной проверки установленных шрифтов и автоматической генерации дескрипторов для шрифтов, на которые имеются ссылки в таблице стилей. Эта функция может выполняться также утилитами, подразделяющими или конвертирующими шрифты для готовности к динамической загрузке.
Данная таблица указывает, где может быть найдена такая информация для шрифтов обычных форматов.
| Дескриптор | Type 1 | TrueType и OpenType | TrueType GX [TRUETYPEGX] |
|---|---|---|---|
| 'ascent' | |||
| 'baseline' | таблица | ||
| 'bbox' | вхождения таблицы | ||
| 'cap-height' | |||
| 'descent' | |||
| 'mathline' | таблица | ||
| 'font-family' | таблица | ||
| 'stemh' | |||
| 'stemv' | таблица | ||
| 'topline' | таблица | ||
| 'unicode-range' | cmap file | таблица OS/2, см. Приложение С | |
| 'units-per-em' | |||
| 'widths' | таблица |
Внутри таблицы
Дополнение. Приложение D. Грамматика CSS2
Это приложение является нормативным. Грамматика определяет синтаксис CSS2. В некотором смысле она является наднабором CSS2, так как в этой спецификации вводятся дополнительные семантические ограничения, не указанные в грамматике. Соответствующие пользовательские агенты (ПА) также обязаны придерживаться правил вперёд-совместимого разбора, нотации свойств и значений и нотации модуля. В дополнение к этому, язык документа может вводить ограничения, например, HTML вводит ограничения на возможные значения атрибута "class".
Это грамматика LL(1) (но учтите, что большинство ПА не должны использовать её напрямую, поскольку она отражает не соглашения по разбору, а только синтаксис CSS2. Формат продуктов оптимизирован для удобства, и используются некоторые сокращения Yacc (см. [YACC]):
[x]. *: 0 или более
[x]. +: 1 или более
[x]. ?: 0 или 1
[x]. |: разделитель альтернатив
[x]. [ ]: группировка
Продуктами являются:
stylesheet
: [ CHARSET_SYM S* STRING S* ';' ]?
[S|CDO|CDC]* [ import [S|CDO|CDC]* ]*
[ [ ruleset | media | page | font_face ] [S|CDO|CDC]* ]*
;
import
: IMPORT_SYM S*
[STRING|URI] S* [ medium [ ',' S* medium]* ]? ';' S*
;
media
: MEDIA_SYM S* medium [ ',' S* medium ]* '{' S* ruleset* '}' S*
;
medium
: IDENT S*
;
page
: PAGE_SYM S* IDENT? pseudo_page? S*
'{' S* declaration [ ';' S* declaration ]* '}' S*
;
pseudo_page
: ':' IDENT
;
font_face
: FONT_FACE_SYM S*
'{' S* declaration [ ';' S* declaration ]* '}' S*
;
operator
: '/' S* | ',' S* | /* empty */
;
combinator
: '+' S* | '>' S* | /* empty */
;
unary_operator
: '-' | '+'
;
property
: IDENT S*
;
ruleset
: selector [ ',' S* selector ]*
'{' S* declaration [ ';' S* declaration ]* '}' S*
;
selector
: simple_selector [ combinator simple_selector ]*
;
simple_selector
: element_name? [ HASH | class | attrib | pseudo ]* S*
;
class
: '.' IDENT
;
element_name
: IDENT | '*'
;
attrib
: '[' S* IDENT S* [ [ '=' | INCLUDES | DASHMATCH ] S*
[ IDENT | STRING ] S* ]? ']'
;
pseudo
: ':' [ IDENT | FUNCTION S* IDENT S* ')' ]
;
declaration
: property ':' S* expr prio?
| /* empty */
;
prio
: IMPORTANT_SYM S*
;
expr
: term [ operator term ]*
;
term
: unary_operator?
[ NUMBER S* | PERCENTAGE S* | LENGTH S* | EMS S* | EXS S* | ANGLE S* |
TIME S* | FREQ S* | function ]
| STRING S* | IDENT S* | URI S* | RGB S* | UNICODERANGE S* | hexcolor
;
function
: FUNCTION S* expr ')' S*
/*
* Имеется ограничение: цвет обязан иметь
* 3 или 6 16-ричных цифр (т.е., [0-9a-fA-F]) после "#",
* например, "#000" это OK, но "#abcd" - нет.
*/
hexcolor
: HASH S*
;
Это сканер, написанный в нотации Flex (см. [FLEX]).
Два "\377" представляют наибольшее число символа, которое может быть обработано текущей версией Flex (десятеричное 255). Они должны читаться как "\4177777" (десятеричное 1114111), которое является наивысшей возможной кодовой точкой в Unicode/
%option case-insensitive
h [0-9a-f]
nonascii [\200-\377]
unicode \\{h}{1,6}[ \t\r\n\f]?
escape {unicode}|\\[ -~\200-\377]
nmstart [a-z]|{nonascii}|{escape}
nmchar [a-z0-9-]|{nonascii}|{escape}
string1 \"([\t !#$%&(-~]|\\{nl}|\'|{nonascii}|{escape})*\"
string2 \'([\t !#$%&(-~]|\\{nl}|\"|{nonascii}|{escape})*\'
ident {nmstart}{nmchar}*
name {nmchar}+
num [0-9]+|[0-9]*"."[0-9]+
string {string1}|{string2}
url ([!#$%&*-~]|{nonascii}|{escape})*
w [ \t\r\n\f]*
nl \n|\r\n|\r|\f
range \?{1,6}|{h}(\?{0,5}|{h}(\?{0,4}|{h}(\?{0,3}|{h}(\?{0,2}|{h}(\??|{h})))))
%%
[ \t\r\n\f]+ {return S;}
\/\*[^*]*\*+([^/][^*]*\*+)*\/ /* ignore comments */
"<!--" {return CDO;}
"-->" {return CDC;}
"~=" {return INCLUDES;}
"|=" {return DASHMATCH;}
{string} {return STRING;}
{ident} {return IDENT;}
"#"{name} {return HASH;}
"@import" {return IMPORT_SYM;}
"@page" {return PAGE_SYM;}
"@media" {return MEDIA_SYM;}
"@font-face" {return FONT_FACE_SYM;}
"@charset" {return CHARSET_SYM;}
"@"{ident} {return ATKEYWORD;}
"!{w}important" {return IMPORTANT_SYM;}
{num}em {return EMS;}
{num}ex {return EXS;}
{num}px {return LENGTH;}
{num}cm {return LENGTH;}
{num}mm {return LENGTH;}
{num}in {return LENGTH;}
{num}pt {return LENGTH;}
{num}pc {return LENGTH;}
{num}deg {return ANGLE;}
{num}rad {return ANGLE;}
{num}grad {return ANGLE;}
{num}ms {return TIME;}
{num}s {return TIME;}
{num}Hz {return FREQ;}
{num}kHz {return FREQ;}
{num}{ident} {return DIMEN;}
{num}% {return PERCENTAGE;}
{num} {return NUMBER;}
"url("{w}{string}{w}")" {return URI;}
"url("{w}{url}{w}")" {return URI;}
{ident}"(" {return FUNCTION;}
U\+{range} {return UNICODERANGE;}
U\+{h}{1,6}-{h}{1,6} {return UNICODERANGE;}
. {return *yytext;}
Имеются некоторые различия между вышеприведённым синтаксисом и синтаксисом, специфицированным в рекомендациях CSS1 ([CSS1]). Большинство этих отличий - из-за новых понятий в CSS2, которые отсутствовали в CSS1. Другие - из-за того, что грамматика была переписана, чтобы сделать её более читабельной. Однако есть и некоторые несовместимые изменения, которые вызвали бы ошибку в CSS1. Они разъяснены ниже.
[x].
Таблицы стилей CSS1 могут быть кодированы только 1-байт-на-символ, как ASCII и ISO-8859-1. CSS2 не имеет таких ограничений. На практике было мало трудностей с экстраполированием
[x]. CSS1 допускал только четыре 16-ричных числа после обратного слэша (\) для ссылок на символы Unicode, CSS2 допускает шесть. Кроме того, CSS2 допускает символы пробела в качестве разграничителей escape-последовательностей. Например, в соответствии с CSS1, строка "\abcdef" имеет 3 буквы (\abcd, e и f), а в соответствии с CSS2 - только одну (\abcdef).
[x]. Символ табуляции (ASCII 9) в строках не допускается. Однако, поскольку строки в CSS1 использовались только для имён шрифтов и для URL, единственное, что может привести к несовместимости между CSS1 и CSS2, это если таблица стилей содержит семейство шрифтов, имеющее символ табуляции в своём имени.
[x]. Также символы новой строки (escape-последовательность с обратным слэшем) не допускались в строках CSS1.
[x]. CSS2 разбирает число со следующим непосредственно за ним идентификатором как обозначение DIMEN (т.е. как неизвестный модуль). CSS1 разбирал его как число и как идентификатор. Это означает, что в CSS1 объявление 'font: 10pt/1.2serif' было корректным, а в 'font: 10pt/12pt serif'; в CSS2 требуется пробел перед "serif". (Некоторые ПА принимали первый пример, но не принимали второй.)
[x]. В CSS1 имя класса могло начинаться цифрой (".55ft"), если только оно не было размером (".55in"). В CSS2 такие классы разбираются как неизвестные размеры (чтобы позволить в будущем дополнение новых модулей). Чтобы сделать ".55ft" действующим классом, CSS2 требует, чтобы первая цифра была escape (".\55ft")
Дополнение. Приложение F. Индекс свойств
| Название | Значения | Начальное значение | Применяется: (По умолчанию: ко всем) | Наследуется | Процентное (По умолчанию: N/A) | Группа носителей |
|---|---|---|---|---|---|---|
| 'azimuth' | <angle> | [[ left-side | far-left | left | center-left | center | center-right | right | far-right | right-side ] || behind ] | leftwards | rightwards | inherit | center | да | звуковой | ||
| 'background' | [ 'background-color' || 'background-image' || 'background-repeat' || 'background-attachment' || 'background-position'] | inherit | XX | визуальный | нет | допускается в 'background-position' | визуальный |
| 'background-attachment' | scroll | fixed | inherit | scroll | нет | визуальный | ||
| 'background-image' | <uri> | none | inherit | none | нет | визуальный | ||
| 'background-position' | [ [<percentage> | <length> ]{1,2} | [ [top | center | bottom] || [left | center | right] ] ] | inherit | 0% 0% | к элементам уровня блока и к замещаемым элементам | нет | относительно размеров самого бокса | визуальный |
| 'background-repeat' | repeat | repeat-x | repeat-y | no-repeat | inherit | repeat | нет | визуальный | ||
| 'border' | [ 'border-width' || 'border-style' || <color> ] | inherit | см. индивидуальные свойства | нет | визуальный | ||
| 'border-collapse' | collapse | separate | inherit | collapse | к элементам 'table' и 'inline-table' | да | визуальный | |
| 'border-color' | <color>{1,4} | transparent | inherit | см. индивидуальные свойства | нет | визуальный | ||
| 'border-spacing' | <length> <length>? | inherit | 0 | к элементам 'table' и 'inline-table' | да | визуальный | |
| 'border-style' | <border-style>{1,4} | inherit | см. индивидуальные свойства | нет | визуальный | ||
| 'border-top' 'border-right' 'border-bottom' 'border-left' | [ 'border-top-width' || 'border-style' || <color> ] | inherit | см. индивидуальные свойства | нет | визуальный | ||
| 'border-top-color' 'border-right-color' 'border-bottom-color' 'border-left-color' | <color> | inherit | значение свойства 'color' | нет | визуальный | ||
| 'border-top-style' 'border-right-style' 'border-bottom-style' 'border-left-style' | <border-style> | inherit | none | нет | визуальный | ||
| 'border-top-width' 'border-right-width' 'border-bottom-width' 'border-left-width' | <border-width> | inherit | medium | нет | визуальный | ||
| 'border-width' | <border-width>{1,4} | inherit | см. индивидуальные свойства | нет | визуальный | ||
| 'bottom' | <length> | <percentage> | auto | inherit | auto | к позиционированным элементам | нет | относительно высоты содержащего блока | визуальный |
| 'caption-side' | top | bottom | left | right | inherit | top | к элементам 'table-caption' | да | визуальный | |
| 'clear' | none | left | right | both | inherit | none | к элементам уровня блока | нет | визуальный | |
| 'clip' | <shape> | auto | inherit | auto | к элементам уровня блока и к замещаемым элементам | нет | визуальный | |
| 'color' | <color> | inherit | зависит от ПА | да | визуальный | ||
| 'content' | [ <string> | <uri> | <counter> | attr(X) | open-quote | close-quote | no-open-quote | no-close-quote ]+ | inherit | пустая строка | к псевдоэлементам :before и :after | нет | визуальный | |
| 'counter-increment' | [ <identifier> <integer>? ]+ | none | inherit | none | нет | визуальный | ||
| 'counter-reset' | [ <identifier> <integer>? ]+ | none | inherit | none | нет | визуальный | ||
| 'cue' | [ 'cue-before' || 'cue-after' ] | inherit | XX | нет | звуковой | ||
| 'cue-after' | <uri> | none | inherit | none | нет | звуковой | ||
| 'cue-before' | <uri> | none | inherit | none | нет | звуковой | ||
| 'cursor' | [ [<uri> ,]* [ auto | crosshair | default | pointer | move | e-resize | ne-resize | nw-resize | n-resize | se-resize | sw-resize | s-resize | w-resize| text | wait | help ] ] | inherit | auto | да | визуальный, интерактивный | ||
| 'direction' | ltr | rtl | inherit | ltr | ко всем элементам, но см. др. информацию | да | визуальный | |
| 'display' | inline | block | list-item | run-in | compact | marker | table | inline-table | table-row-group | table-header-group | table-footer-group | table-row | table-column-group | table-column | table-cell | table-caption | none | inherit | inline | нет | все | ||
| 'elevation' | <angle> | below | level | above | higher | lower | inherit | level | да | звуковой | ||
| 'empty-cells' | show | hide | inherit | show | к элементам 'table-cell' | да | визуальный | |
| 'float' | left | right | none | inherit | none | ко всем непозиционированным элементам и генерируемому содержимому | нет | визуальный | |
| 'font' | [ [ 'font-style' || 'font-variant' || 'font-weight' ]? 'font-size' [ / 'line-height' ]? 'font-family' ] | caption | icon | menu | message-box | small-caption | status-bar | inherit | см. индивидуальные свойства | да | допускается в 'font-size' и 'line-height' | визуальный | |
| 'font-family' | [[ <family-name> | <generic-family> ],]* [<family-name> | <generic-family>] | inherit | зависит от ПА (пользовательского агента) | да | визуальный | ||
| 'font-size' | <absolute-size> | <relative-size> | <length> | <percentage> | inherit | medium | да, вычисляемое значение наследуется | относительно размера шрифта родительского элемента | визуальный | |
| 'font-size-adjust' | <number> | none | inherit | none | да | визуальный | ||
| 'font-stretch' | normal | wider | narrower | ultra-condensed | extra-condensed | condensed | semi-condensed | semi-expanded | expanded | extra-expanded | ultra-expanded | inherit | normal | да | визуальный | ||
| 'font-style' | normal | italic | oblique | inherit | normal | да | визуальный | ||
| 'font-variant' | normal | small-caps | inherit | normal | да | визуальный | ||
| 'font-weight' | normal | bold | bolder | lighter | 100 | 200 | 300 | 400 | 500 | 600 | 700 | 800 | 900 | inherit | normal | да | визуальный | ||
| 'height' | <length> | <percentage> | auto | inherit | auto | ко всем элементам, кроме незамещаемых инлайн-элементов, столбцов таблиц и групп столбцов | нет | см. дополнительную информацию | визуальный |
| 'left' | <length> | <percentage> | auto | inherit | auto | к позиционированным элементам | нет | относительно ширины содержащего блока | визуальный |
| 'letter-spacing' | normal | <length> | inherit | normal | да | визуальный | ||
| 'line-height' | normal | <number> | <length> | <percentage> | inherit | normal | да | относительно размера шрифта этого элемента | визуальный | |
| 'list-style' | [ 'list-style-type' || 'list-style-position' || 'list-style-image' ] | inherit | XX | к элементам с 'display: list-item' | да | визуальный | |
| 'list-style' | <uri> | none | inherit | none | к элементам с 'display: list-item' | да | визуальный | |
| 'list-style-position' | inside | outside | inherit | outside | к элементам с 'display: list-item' | да | визуальный | |
| 'list-style-type' | disc | circle | square | decimal | decimal-leading-zero | lower-roman | upper-roman | lower-greek | lower-alpha | lower-latin | upper-alpha | upper-latin | hebrew | armenian | georgian | cjk-ideographic | hiragana | katakana | hiragana-iroha | katakana-iroha | none | inherit | disc | к элементам с 'display: list-item' | да | визуальный | |
| 'margin' | <margin-width>{1,4} | inherit | XX | нет | относительно ширины содержащего блока | визуальный | |
| 'margin-top' 'margin-right' 'margin-bottom' 'margin-left' | <margin-width> | inherit | 0 | нет | относительно ширины содержащего блока | визуальный | |
| 'marker-offset' | <length> | auto | inherit | auto | к элементам с 'display: marker' | нет | визуальный | |
| 'marks' | [ crop || cross ] | none | inherit | none | к контексту страницы | N/A | визуальный, страничный | |
| 'max-height' | <length> | <percentage> | none | inherit | none | ко всем элементам, кроме незамещаемых инлайн-элементов и элементов таблицы | нет | относительно высоты содержащего блока | визуальный |
| 'max-width' | <length> | <percentage> | none | inherit | none | ко всем элементам, кроме незамещаемых инлайн-элементов и элементов таблицы | нет | относительно ширины содержащего блока | визуальный |
| 'min-height' | <length> | <percentage> | inherit | 0 | ко всем элементам, кроме незамещаемых инлайн-элементов и элементов таблицы | нет | относительно высоты содержащего блока | визуальный |
| 'min-width' | <length> | <percentage> | inherit | зависит от ПА | ко всем элементам, кроме незамещаемых инлайн-элементов и элементов таблицы | нет | относительно ширины содержащего блока | визуальный |
| 'orphans' | <integer> | inherit | 2 | к элементам уровня блока | да | визуальный, страничный | |
| 'outline' | [ 'outline-color' || 'outline-style' || 'outline-width' ] | inherit | см. индивидуальные свойства | нет | визуальный, интерактивный | ||
| 'outline-color' | <color> | invert | inherit | invert | нет | визуальный, интерактивный | ||
| 'outline-style' | <border-style> | inherit | none | нет | визуальный, интерактивный | ||
| 'outline-width' | <border-width> | inherit | medium | нет | визуальный, интерактивный | ||
| 'overflow' | visible | hidden | scroll | auto | inherit | visible | к элементам уровня блока и к замещаемым | нет | визуальный | |
| 'padding' | <padding-width>{1,4} | inherit | XX | нет | относительно ширины содержащего блока | визуальный | |
| 'padding-top' 'padding-right' 'padding-bottom' 'padding-left' | <padding-width> | inherit | 0 | нет | относительно ширины содержащего блока | визуальный | |
| 'page' | <identifier> | auto | auto | к элементам уровня блока | да | визуальный, страничный | |
| 'page-break-after' | auto | always | avoid | left | right | inherit | auto | к элементам уровня блока | нет | визуальный, страничный | |
| 'page-break-before' | auto | always | avoid | left | right | inherit | auto | к элементам уровня блока | нет | визуальный, страничный | |
| 'page-break-inside' | avoid | auto | inherit | auto | к элементам уровня блока | да | визуальный, страничный | |
| 'pause' | [ [<time> | <percentage>]{1,2} ] | inherit | зависит от ПА | нет | см. описание 'pause-before' и 'pause-after' | звуковой | |
| 'pause-after' | <time> | <percentage> | inherit | зависит от ПА | нет | см. дополнительную информацию | звуковой | |
| 'pause-before' | <time> | <percentage> | inherit | зависит от ПА | нет | см. дополнительную информацию | звуковой | |
| 'pitch' | <frequency> | x-low | low | medium | high | x-high | inherit | medium | да | звуковой | ||
| 'pitch-range' | <number> | inherit | 50 | да | звуковой | ||
| 'play-during' | <uri> mix? repeat? | auto | none | inherit | auto | нет | звуковой | ||
| 'position' | static | relative | absolute | fixed | inherit | static | ко всем элементам, кроме тех, которые генерируют содержимое | нет | визуальный | |
| 'quotes' | [<string> <string>]+ | none | inherit | зависит от ПА | да | визуальный | ||
| 'richness' | <number> | inherit | 50 | да | звуковой | ||
| 'right' | <length> | <percentage> | auto | inherit | auto | к позиционированным элементам | нет | относительно ширины содержащего блока | визуальный |
| 'size' | <length>{1,2} | auto | portrait | landscape | inherit | auto | к контексту страницы | N/A | визуальный, страничный | |
| 'speak' | normal | none | spell-out | inherit | normal | да | звуковой | ||
| 'speak-header' | once | always | inherit | once | к элементам, имеющим информацию "шапки" | да | звуковой | |
| 'speak-numeral' | digits | continuous | inherit | continuous | да | звуковой | ||
| 'speak-punctuation' | code | none | inherit | none | да | звуковой | ||
| 'speech-rate' | <number> | x-slow | slow | medium | fast | x-fast | faster | slower | inherit | medium | да | звуковой | ||
| 'stress' | <number> | inherit | 50 | да | звуковой | ||
| 'table-layout' | auto | fixed | inherit | auto | к 'table' и 'inline-table' | нет | звуковой | |
| 'text-align' | left | right | center | justify | <string> | inherit | зависит от ПА и направления письма | к элементам уровня блока | да | визуальный | |
| 'text-decoration' | none | [ underline || overline || line-through || blink ] | inherit | none | нет (см. дополнительную информацию) | визуальный | ||
| 'text-indent' | <length> | <percentage> | inherit | 0 | к элементам уровня блока | да | относительно ширины содержащего блока | визуальный |
| 'text-shadow' | none | [<color> || <length> <length> <length>? ,]* [<color> || <length> <length> <length>?] | inherit | none | нет (см. дополнительную информацию) | визуальный | ||
| 'text-transform' | capitalize | uppercase | lowercase | none | inherit | none | да | визуальный | ||
| 'top' | <length> | <percentage> | auto | inherit | auto | к позиционированным элементам | нет | относительно высоты содержащего блока | визуальный |
| 'vertical-align' | baseline | sub | super | top | text-top | middle | bottom | text-bottom | <percentage> | <length> | inherit | baseline | к элементам инлайн уровня и к 'table-cell' | нет | относительно 'line-height' самого элемента | визуальный |
| 'visibility' | visible | hidden | collapse | inherit | inherit | нет | визуальный | ||
| 'voice-family' | [[<specific-voice> | <generic-voice> ],]* [<specific-voice> | <generic-voice> ] | inherit | зависит от ПА | да | звуковой | ||
| 'volume' | <number> | <percentage> | silent | x-soft | soft | medium | loud | x-loud | inherit | medium | да | относительно унаследованного значения | звуковой | |
| 'white-space' | normal | pre | nowrap | inherit | normal | к элементам уровня блока | да | визуальный | |
| 'width' | <length> | <percentage> | auto | inherit | auto | ко всем элементам, кроме незамещаемых инлайн-элементов, столбцов таблиц и групп столбцов | нет | относительно ширины содержащего блока | визуальный |
| 'word-spacing' | normal | <length> | inherit | normal | да | визуальный | ||
| 'z-index' | auto | <integer> | inherit | auto | к позиционированным элементам | нет | визуальный |
Дополнение. Приложение G. Индекс дескрипторов
| Название | Значения | Начальное значение |
|---|---|---|
| 'ascent' | <number> | не определено |
| 'baseline' | <number> | 0 |
| 'bbox' | <number>, <number>, <number>, <number> | не определено |
| 'cap-height' | <number> | не определено |
| 'centerline' | <number> | не определено |
| 'definition-src' | <uri> | не определено |
| 'descent' | <number> | не определено |
| 'font-family' | [ <family-name> | <generic-family> ] [, [<family-name> | <generic-family> ]]* | зависит от пользовательского агента |
| 'font-size' | all | <length> [, <length>]* | 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 |
| 'font-style' | all | [ normal | italic | oblique ] [, [normal | italic | oblique] ]* | all |
| 'font-variant' | [normal | small-caps] [,[normal | small-caps]]* | normal |
| '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 |
| 'mathline' | <number> | не определено |
| 'panose-1' | [<integer>]{10} | 0 0 0 0 0 0 0 0 0 0 |
| 'slope' | <number> | 0 |
| 'src' | [ <uri> [format(<string> [, <string>]*)] | <font-face-name> ] [, <uri> [format(<string> [, <string>]*)] | <font-face-name> ]* | не определено |
| 'stemh' | <number> | не определено |
| 'stemv' | <number> | не определено |
| 'topline' | <number> | не определено |
| 'unicode-range' | <urange> [, <urange>]* | U+0-7FFFFFFF |
| 'units-per-em' | <number> | не определено |
| 'widths' | [<urange> ]? [<number> ]+ [,[<urange> ]? <number> ]+] | не определено |
| 'x-height' | <number> | не определено |
[COLORIMETRY]. , Colorimetry, Second Edition, CIE Publication 15.2-1986, ISBN 3-900-734-00-3
[CSS1]. H. W. Lie and B. Bos, Cascading Style Sheets, level 1, 17 декабря 1996
[CSS2]. B. Bos, H. W. Lie, C. Lilley and I. Jacobs, Cascading Style Sheets, level 2, CSS2 Specification, 12 May 1998
[FLEX]. , Flex: The Lexical Scanner Generator, Версия 2.3.7, ISBN 1882114213
[HTML4]. D. Raggett, A. Le Hors, I. Jacobs, HTML 4.01 Specification, 24 December 1999
[IANA]. , Assigned Numbers,
[ICC32]. , ICC Profile Format Specification, версия 3.2, 1995
[ISO8879]. , Information Processing - Text and Office Systems - Standard Generalized Markup Language (SGML), ISO 8879:1986
[ISO10646]. , Information Technology - Universal Multiple - Octet Coded Character Set (UCS) - Часть 1: Architecture and Basic Multilingual Plane, ISO/IEC 10646-1:1993
[PNG]. David Duce, Portable Network Graphics (PNG) Specification (Second Edition), 10 November 2003
[RFC3986]. T. Berners-Lee, R. Fielding, L. Masinter, Uniform Resource Identifier (URI): Generic Syntax, January 2005
[RFC2045]. N. Freed and N. Borenstein, Multipurpose Internet Mail Extensions (MIME) Part One: Format of Internet Message Bodies, ноя.96
[RFC2616]. R. Fielding, J. Gettys, J. Mogul, HTTP Version 1.1, June 1999
[RFC2119]. S. Bradner, Key words for use in RFCs to Indicate Requirement Levels, мар.97
[RFC2318]. H. Lie, B. Bos, C. Lilley, The text/css Media Type, мар.98
[RFC2781]. P. Hoffman, F. Yergeau, UTF-16, an encoding of ISO 10646, February 2000
[SRGB]. M. Anderson, R. Motta, S. Chandrasekar, M. Stokes, Proposal for a Standard Color Space for the Internet - sRGB,
[UAAG10]. Ian Jacobs, Jon Gunderson, Eric Hansen, User Agent Accessibility Guidelines 1.0, 17 December 2002
[UNICODE]. , The Unicode Standard: Version 2.0, The Unicode Consortium, Addison-Wesley Developers Press, 1996
[XML10]. T. Bray, J. Paoli, C.M. Sperberg-McQueen, Eve Maler, Franзois Yergeau, Extensible Markup Language (XML) 1.0 (third edition), 4 February 2004
[YACC]. S. C. Johnson, Technical Report, Murray Hill, YACC - Yet another compiler compiler, 1975
[CHARSETS]. , Зарегистрированные значения наборов символов,
[CSS3LIST]. Tantek Зelik, Ian Hickson, CSS3 module: lists, 7 November 2002, W3C working draft
[CSS3SEL]. D. Glazman, T. Зelik, I. Hickson, Selectors, 13 November 2001
[DOM]. L. Wood, A. Le Hors, Document Object Model Specification, 09.окт.97
[DOM-LEVEL-3-CORE]. A. Le Hors, P. Le Hйgaret, Document Object Model (DOM) Level 3 Core Specification,
[MATH20]. D. Carlisle, P. Ion, R. Miner, N. Poppelier, Mathematical Markup Language (MathML) Version 2.0, 21 February 2001
[P3P]. L. Cranor, M. Langheinrich, M. Marchiori, M. Presler-Marshall, J. Reagle, The Platform for Privacy Preferences 1.0 (P3P1.0) Specification, 16 April 2002
[RFC3066]. H. Alvestrand, Tags for the Identification of Languages, January 2001
[SVG11]. J. Ferraiolo, Scalable Vector Graphics (SVG) 1.1 Specification, 14 January 2003
[WAI-PAGEAUTH]. W. Chisholm, G. Vanderheiden, I. Jacobs, Web Content Accessibility Guidelines,
[XHTML]. various authors, XHTML 1.0 The Extensible HyperText Markup Language,
[XMLID]. J. Marsh, D. Veillard N. Walsh, xml:id Version 1.0, 9 November 2004
[XMLNAMESPACES]. T. Bray, D. Hollander, A. Layman, Namespaces in XML,
[WAI-PAGEAUTH]. , WAI Accesibility Guidelines: Page Authoring,