Internet Explorer 10: руководство для разработчиков

13 сентября 2011 г.

Internet Explorer 10, так же как и приложения Metro в Windows Developer Preview, поддерживает несколько новых возможностей каскадных таблиц стилей (CSS). Начало этой поддержке было положено в Internet Explorer 8 (полное соответствие стандарту CSS 2.1), а с выходом Internet Explorer 9 поддержка была расширена (поддержка закругленных углов CSS, нескольких фоновых изображений, новых цветовых моделей и непрозрачности, шрифтов CSS 3 и WOFF, 2D-преобразований, запросов носителя, пространств имен CSS 3 и многого другого). Internet Explorer 10 продолжает эту традицию: в новой версии впервые реализована поддержка следующих возможностей CSS.

Важно. Эти возможности аналогичным образом работают в Internet Explorer 10 и приложениях Metro с использованием HTML.

Расширенная разметка

В Internet Explorer 10 и в Windows Developer Preview реализовано несколько новых способов разметки веб-страниц и приложений Metro с помощью CSS. Вот эти способы:

  • Области CSS. Можно взять один поток HTML-содержимого с текстом и рисунками и направить это содержимое в несколько пустых контейнеров, определенных в стандартном HTML-документе.
  • Многоколоночная верстка CSS 3. Размещение содержимого в несколько колонок с интервалом и необязательной разделительной линией между ними.
  • Гибкие блоки (Flexbox). Когда применяется верстка с использованием гибких блоков, при определении размеров блока учитывается все доступное пространство, что позволяет задавать относительные размеры и положение.
  • Выравнивание по сетке. Сетка позволяет делить пространство под крупные области страницы или веб-приложения, а также определять взаимосвязи между размерами, расположением и слоями различных частей элемента управления HTML.
  • Позиционируемые плавающие блоки. Теперь элементы могут находиться полностью в окружении текста, вместо того чтобы располагаться только справа или слева от текста.

Области CSS

Области CSS — это функция макетов страниц в приложениях Metro в составе Windows Developer Preview и в Internet Explorer 10. При помощи этой функции можно взять один поток HTML-содержимого с текстом и рисунками и направить это содержимое в несколько пустых контейнеров, определенных в стандартном HTML-шаблоне. HTML-шаблоны представляют собой документы, обычно не имеющие содержимого и состоящие из определенным образом расположенных пустых контейнеров определенного размера, в которых отображается поступающее содержимое.

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

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

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

Области CSS определяются спецификацией областей CSS консорциума W3C, которая в данный момент находится в состоянии рабочего черновика.

Демонстрацию использования областей CSS см. в разделе Hands On: CSS 3 Regions на сайте IE Test Drive.

Реализация областей CSS

Для реализации областей CSS прежде всего нужен файл HTML, который будет служить потоком содержимого. Это автономный HTML-документ, содержащий собственную модель DOM и стили CSS. На следующей схеме роль потока содержимого играет файл content.html.

Кроме того, нужен HTML-документ, который будет служить основой для потока содержимого. Этот документ, также называемый главной страницей, служит для указания размера и расположения областей CSS, а также для определения порядка отображения содержимого на базе идентификатора потока. На следующей схеме роль главной страницы играет файл master.html.

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

Создание источника данных

Два новых свойства CSS требуются при использовании областей CSS, чтобы обеспечить поступление содержимого из источника данных в одну рамку, затем в другую и т. д. Для того чтобы описать последовательность отображения содержимого, требуется источник данных и идентификатор. Сначала нужно поместить источник данных в элемент iframe для загрузки в отдельном HTML-документе. На главной странице нужно создать элемент iframe с уникальным идентификатором:

 <iframe id="flow1-data-source" src="content-source.html" />

Затем нужно создать селектор CSS, указывающий источник данных при помощи свойства -ms-flow-into:

#flow1-data-source
 {
 -ms-flow-into: flow1;
}

Помните, что если поместить свойство -ms-flow-into в элемент iframe, этот элемент будет работать так, как если бы для свойства display было указано значение none. Этот элемент iframe не отображается и не участвует во фрагментации и разметке содержимого. Цель этого элемента заключается лишь в идентификации источника данных.

Создание контейнера области CSS

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

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

<div class="flow1-container"></div>
<div class="flow1-container"></div>
<div class="flow1-container"></div>

Затем нужно создать селектор CSS, указывающий источник данных, откуда следует принимать поток содержимого, при помощи свойства -ms-flow-from:

.flow1-container
 {
  -ms-flow-from: flow1;
}

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

Расширение областей CSS

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

<!DOCTYPE html>
<html lang="en-us">
<head>
<style type="text/css">
#data-source {
  -ms-flow-into: flow1;
}
.flow-container {
  -ms-flow-from: flow1;
}
#grid {
  display: -ms-grid;
  -ms-grid-columns: 1fx 1fx 1fx 1fx;
  -ms-grid-rows: 384px 384px;
}
.A {
  -ms-grid-row: 0;
  -ms-grid-column: 0;
  -ms-grid-column-span: 2;
}
.B {
  -ms-grid-row: 0;
  -ms-grid-column: 1;
}
.C {
  -ms-grid-row: 0;
  -ms-grid-column: 2;
}
.D {
  -ms-grid-row: 0;
  -ms-grid-column: 3;
}
.E {
  -ms-grid-row: 2;
  -ms-grid-column: 1;
  -ms-grid-column-span: 2;
}
</style>
</head>
<body>
  <iframe id="data-source" src="content-source.html" />
  <iframe id="frame1" class="A flow-container" />
  <iframe id="frame2" class="B flow-container" />
  <iframe id="frame3" class="C flow-container" />
  <iframe id="frame4" class="D flow-container" />
  <img class="E" src="image.png" /> 
</body>
</html>

Последовательность содержимого будет соответствовать приведенной ниже схеме. Стрелки указывают направление потока содержимого.

Теперь поменяем порядок следования двух первых рамок и двух последних рамок:

<iframe id="data-source" src="content-source.html" />
<iframe id="frame1" class="B flow-container" />
<iframe id="frame2" class="A flow-container" />
<iframe id="frame3" class="C flow-container" />
<iframe id="frame4" class="E flow-container" />
<img class="D" src="image.png" /> 

Поток будет изменен согласно следующей схеме:

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

Прочие сценарии использования областей CSS

В дополнение к двум приведенным выше случаям области CSS полезно применять еще в ряде сценариев:

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

Документация по каждому из этих сценариев будет выпущена в ближайшем будущем.

Многоколоночная верстка CSS 3

Internet Explorer 10, так же как и приложения Metro в Windows Developer Preview, поддерживает модуль многоколоночной верстки CSS 3. На момент написания этого документа данный модуль находится на стадии кандидата в рекомендации W3C. Многоколоночная верстка позволяет отображать содержимое в несколько колонок с заданным межколоночным интервалом и необязательной разделительной линией. Она также позволяет изменять число колонок, основываясь на размере окна браузера.

Многоколоночный элемент определяется W3C как элемент, свойства column-width или column-count которого имеют значения, отличные от «auto», и который поэтому служит контейнером для многоколоночного макета. В многоколоночной верстке вводится колоночный блок, который определяется как новый тип контейнера, располагающийся между блоком содержимого и самим содержимым. Колоночные блоки содержат строки, упорядоченные в направлении многоколоночного элемента. Для каждого колоночного блока заданы высота колонки и ширина колонки. Соседние блоки отделены друг от друга межколоночным интервалом, который может содержать разделительную линию.

Демонстрацию многоколоночной верстки CSS 3 см. в разделе Hands On: Multi-column Layout на сайте IE Test Drive.

Задание ширины и числа колонок

Для колонок в многоколоночном элементе необходимо задать по крайней мере ширину. В окне браузера Internet Explorer Platform Preview будет отображено максимально возможное число колонок шириной не менее заданной. Чтобы задать ширину колонки, используйте следующее свойство:

column-width Задает оптимальную ширину колонок в многоколоночном элементе.


Для этого свойства можно указывать следующие значения:

  • Относительное или абсолютное значение в соответствии со справочником по значениям и единицам CSS.
  • Ключевое слово «auto», которое указывает, что оптимальная ширина колонки определяется значениями других свойств элемента, таких как свойство column-count. Это значение по умолчанию.

Например, в приведенном ниже селекторе добавлено свойство column-width со значением, равным 200 пикселей. Это означает, что окно браузера Internet Explorer 10 будет заполнено максимально возможным количеством колонок шириной 200 пикселей или более.

<style type="text/css">
#multicol1 {
    column-width: 200px;
}
</style>

Можно увидеть результат применения этого селектора к большому фрагменту текста. (Для правильного отображения этой страницы требуется Internet Explorer 10 или другой браузер, совместимый со свойствами многоколоночной разметки CSS 3 без префиксов.)

Можно также указать, сколько колонок должно быть в многоколоночном элементе. Чтобы задать количество колонок, используйте следующее свойство:

column-count Задает оптимальное число колонок в многоколоночном элементе.


Допустимые значения для этого свойства:

  • Целочисленное значение, задающее число колонок.
  • Ключевое слово «auto», которое указывает, что число колонок определяется значениями других свойств многоколоночного элемента, таких как свойство column-width. Это значение по умолчанию.

Например, в приведенном ниже селекторе добавлено свойство column-count со значением «2». Это означает, что в окне Internet Explorer 10 будет две колонки.

<style type="text/css">
#multicol1 {
    column-count: 2;
}
</style>

Можно увидеть результат применения этого селектора к большому фрагменту текста. (Для правильного отображения этой страницы требуется Internet Explorer 10 или другой браузер, совместимый со свойствами многоколоночной разметки CSS 3 без префиксов.)

Ширину и число колонок можно также задать с помощью следующего собирательного свойства:

columns Собирательное значение, задающее значения свойств column-width и column-count для многоколоночного элемента.


Вот синтаксис этого свойства:

columns: <column-width> <column-count >;

Допускается также следующий синтаксис:

columns: <column-count> <column-width>;

Если указано только целое число, свойство column-width устанавливается равным «auto», а за значение свойства column-count принимается указанное число. Если указано только значение ширины, свойство column-width устанавливается равным этому значению, а за значение свойства column-count принимается ключевое слово «auto». Если указано только «auto», это ключевое слово используется в качестве значения свойств column-width и column-count.

Например, в приведенном ниже селекторе добавлено свойство columns со значением «auto 12em». Это означает, что многоколоночный элемент будет иметь свойство column-width со значением «12 em» и свойство column-count со значением «auto».

<style type="text/css">
#multicol3 {
     columns: auto 12em;
}
</style>

Можно увидеть результат применения этого селектора к большому фрагменту текста. (Для правильного отображения этой страницы требуется Internet Explorer 10 или другой браузер, совместимый со свойствами многоколоночной разметки CSS 3 без префиксов.)

Задание межколоночного интервала и разделительной линии

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

Межколоночный интервал и разделительная линия задаются с помощью следующего свойства:

column-gap Задает интервал между колонками в многоколоночном элементе.


Допустимые значения для этого свойства:

column-rule-color Задает цвет всех разделительных линий между колонками в многоколоночном элементе.


Это свойство может принимать любое поддерживаемое значение цвета.

column-rule-style Задает стиль отображения всех разделительных линий между колонками в многоколоночном элементе.


Это свойство принимает те же значения, что и свойство border-style.

column-rule-width Задает толщину всех разделительных линий между колонками в многоколоночном элементе.


Это свойство принимает те же значения, что и свойство border-width.

column-rule Собирательное значение, задающее значения свойств column-rule-width, column-rule-style и column-rule-color для многоколоночного элемента.


Вот синтаксис этого свойства:

column-rule: <column-rule-width> <column-rule-style> <column-rule-color>;

Вот пример использования нескольких из этих свойств в селекторе:

<style type="text/css">
#multicol4 {
    columns: auto 12em;
    column-gap: 1em;
    column-rule-width: 1em;
    column-rule-style: solid;
    column-rule-color: black;
}
</style>

В данном случае межколоночный интервал и толщина разделительной линии установлены равными 1 em. Разделительная линия сплошная, черного цвета. Можно увидеть результат применения этого селектора к большому фрагменту текста. (Для правильного отображения этой страницы требуется Internet Explorer 10 или другой браузер, совместимый со свойствами многоколоночной разметки CSS 3 без префиксов.)

Обратите внимание, что предыдущий пример можно было бы также записать следующим образом, используя собирательное свойство column-rule:

<style type="text/css">
#multicol4 {
    columns: auto 12em;
    column-gap: 1em;
    column-rule: 1em solid black;
}
</style>

Разрывы колонок

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

Разрывами колонок управляют следующие свойства:

break-before Задает правила разрыва колонки перед блоком содержимого в многоколоночном элементе.


Это свойство принимает те же значения, что и свойство page-break-before, а также следующие значения:

  • page Всегда делать разрыв страницы перед блоком.
  • column Всегда делать разрыв колонки перед блоком.
  • avoid-page Избегать разрыва страницы перед блоком.
  • avoid-column Избегать разрыва колонки перед блоком.
break-after Задает правила разрыва колонки после блока содержимого в многоколоночном элементе.


Это свойство принимает те же значения, что и свойство page-break-after, а также следующие значения:

  • page Всегда делать разрыв страницы после блока.
  • column Всегда делать разрыв колонки после блока.
  • avoid-page Избегать разрыва страницы после блока.
  • avoid-column Избегать разрыва колонки после блока.
break-inside Задает правила разрыва колонки внутри блока содержимого в многоколоночном элементе.


Это свойство принимает те же значения, что и свойство page-break-inside, а также следующие значения:

  • avoid-page Избегать разрыва страницы внутри блока.
  • avoid-column Избегать разрыва колонки внутри блока.

Вот пример использования нескольких из этих свойств в селекторе:

<style type="text/css">
#multicol5 {
    columns: auto 12em;
    column-gap: 1em;
    column-rule-width: 1px;
    column-rule-style: solid;
    column-rule-color: black;
}
#multicol5 h2 {
    column-span: all;
    background: lightgreen;
}
#multicol5 blockquote {
     break-inside: avoid-column;
}
</style>

В этом примере все элементы h2 предваряются разрывом колонки и полем размером 2 em, а разрывы колонок внутри элемента blockquote запрещены. Можно увидеть результат применения этих селекторов к большому фрагменту текста. (Для правильного отображения этой страницы требуется Internet Explorer 10 или другой браузер, совместимый со свойствами многоколоночной разметки CSS 3 без префиксов.)

Многоколоночное содержимое

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

column-span Задает число колонок, которое занимает блок содержимого в многоколоночном элементе.


Допустимые значения для этого свойства:

  • 1 (значение по умолчанию.) Блок содержимого занимает одну колонку.
  • all Блок содержимого занимает все колонки на странице. Все содержимое, объявленное до этого блока, отображается перед ним.

Вот пример установки этого свойства в селекторе:

<style type="text/css">
#multicol6 {
    columns: auto 12em;
    column-gap: 1em;
    column-rule-width: 1px;
    column-rule-style: solid;
    column-rule-color: black;
}
#multicol6 h2 {
    column-span: all;
    background: lightgreen;
}
</style>

В данном случае все элементы h2 занимают все колонки и отображаются на светло-зеленом фоне.

Можно увидеть результат применения этих селекторов к большому фрагменту текста. (Для правильного отображения этой страницы требуется Internet Explorer 10 или другой браузер, совместимый со свойствами многоколоночной разметки CSS 3 без префиксов.)

Заполнение колонок

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

Заполнением колонок управляет следующее свойство:

column-fill Определяет, как поток содержимого влияет на длину колонок в многоколоночном элементе.


Значениями этого свойства могут быть следующие ключевые слова:

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

Балансировка колонок зависит также от значений свойств orphans и widows, если они установлены.

Вот пример установки этого свойства в селекторе:

<style type="text/css">
#multicol7 {
    columns: auto 12em;
    column-gap: 1em;
    column-rule-width: 1px;
    column-rule-style: solid;
    column-rule-color: black;
}
#multicol7 h2 {
    column-fill: balance;
}
</style>

В данном случае для свойства column-fill установлено значение «balance». Это значит, что длина колонок выравнивается в максимальной степени.

Можно увидеть результат применения этих селекторов к большому фрагменту текста. (Для правильного отображения этой страницы требуется Internet Explorer 10 или другой браузер, совместимый со свойствами многоколоночной разметки CSS 3 без префиксов.)

Верстка с использованием гибких блоков CSS 3 (Flexbox)

Internet Explorer 10, так же как и приложения Metro в Windows Developer Preview, поддерживает модуль верстки гибких блоков (Flexbox) CSS 3. На момент написания этого документа модуль Flexbox находится на стадии рабочего черновика консорциума W3C. (Реализация Flexbox в Internet Explorer 10 основана на версии рабочего проекта от 23 июля 2009 г. Реализация Flexbox в будущих предварительных выпусках может измениться в соответствии с изменениями в спецификации.) Модуль дополняет собой четыре основных режима верстки, определенные в CSS 2.1 и включаемые через свойство display, — верстку блоков, строчную верстку, табличную верстку и верстку с расположением. Верстка с использованием гибких блоков предназначена для более сложных веб-страниц и наиболее полезна для неизменной разметки относительного положения и размера элементов несмотря на то, что размеры экрана могут быть разными, а размеры окна браузера могут изменяться. Она позволяет в меньшей степени полагаться на плавающие элементы, положение и размер которых труднее задать правильно.

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

Верстка с использованием гибких блоков позволяет решать следующие задачи:

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

Демонстрацию верстки с использованием гибких блоков см. в разделе Hands On: CSS 3 Flexible Box Layout на сайте IE Test Drive.

Контейнер Flexbox

Чтобы включить режим верстки с использованием гибких блоков, необходимо сначала создать контейнер Flexbox. Для этого присвойте свойству display элемента значение «-ms-box». (Ввиду того что модуль Flexbox находится лишь на стадии рабочего проекта, для работы в Internet Explorer 10 и приложениях Metro данное значение и все свойства, описанные в этом разделе, следует указывать с фирменным префиксом Microsoft «-ms-».) Так, в следующем примере кода внутри элемента создается контейнер Flexbox с идентификатором myFlexbox:

<style type="text/css">
#myFlexbox {
    display: -ms-box;
    background: gray;
    border: blue;
}
</style>

Задание ориентации контейнера Flexbox

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

-ms-box-orient Задает ориентацию для отображения всех дочерних элементов объекта.


Значениями этого свойства могут быть следующие ключевые слова:

  • horizontal (значение по умолчанию). Дочерние элементы в родительском блоке отображаются слева направо по горизонтальной линии.
  • vertical. Дочерние элементы в родительском блоке отображаются сверху вниз по вертикальной линии.
  • inline-axis. Дочерние элементы в родительском блоке отображаются вдоль строчной оси. Это ключевое слово зависит от режима письма (writing-mode). В русском языке «inline-axis» соответствует «horizontal», или направлению слева направо. В языках с написанием справа налево (например, в арабском) «inline-axis» соответствует направлению справа налево. В языках с вертикальным написанием (например, монгольском) «inline-axis» соответствует направлению сверху вниз.
  • block-axis. Дочерние элементы в родительском блоке отображаются вдоль оси блока. Это ключевое слово зависит от режима письма (writing-mode). В русском языке «block-axis» соответствует «vertical», или направлению сверху вниз. В языках с вертикальным написанием (например, монгольском или китайском) «block-axis» соответствует направлению слева направо или справа налево, в зависимости от языка.
  • inherit. Отображение дочерних элементов идет в том же направлении, что и в родительском блоке данного блока.

Например, в следующем селекторе описания элемента добавляется свойство -ms-box-orient со значением «horizontal»:

<style type="text/css">
#myFlexbox
{
    display: -ms-box;
    -ms-box-orient: horizontal;
    background: grey;
    border: blue;
}
</style>

Задание выравнивания контейнера Flexbox

При создании контейнера Flexbox можно также задать его выравнивание, т. е. направление, в котором будут отображаться дочерние элементы перпендикулярно оси макета, определяемой свойством -ms-box-orient.

-ms-box-align Задает выравнивание дочерних элементов объекта в направлении, перпендикулярном оси макета, которая определяется свойством -ms-box-orient.


Значениями этого свойства могут быть перечисленные ниже ключевые слова. Имейте в виду, что они зависят от режима письма (writing-mode); передний край родительского элемента и дочерних элементов, а также задний край дочерних элементов определяются направлением макета. Например, в макетах с направлением слева направо передним является верхний край родительского элемента, а в макетах с направлением сверху вниз — левый край и т. д. Точно так же в макетах с направлением слева направо задним является нижний край дочернего элемента, а в макетах с направлением сверху вниз — правый.

  • before. Передний край каждого дочернего элемента располагается встык с передним краем родительского элемента. Все оставшееся пространство перпендикулярно оси макета располагается за задним краем дочернего элемента.
  • after. Задний край каждого дочернего элемента располагается встык с задним краем родительского элемента. Все оставшееся пространство перпендикулярно оси макета располагается перед передним краем дочернего элемента.
  • middle. Каждый дочерний элемент располагается посередине между передним и задним краями родительского элемента, так что все оставшееся пространство перпендикулярно оси макета равномерно распределено по обе стороны от каждого дочернего элемента.
  • stretch (значение по умолчанию). Каждый элемент растягивается, полностью заполняя все доступное пространство в направлении, перпендикулярном оси макета. В случаях, когда свойству -ms-box-align присвоено значение «stretch», но при этом у элемента установлено свойство max-width или max-height (в зависимости от направления), свойства max-width или max-height будут иметь приоритет над значением «stretch», а вид элемента будет таким, как если бы использовалось значение «before».
  • baseline. Направляющие всех дочерних элементов выравниваются друг относительно друга. Дочерний элемент, занимающий больше всего места перпендикулярно оси макета, располагается так, как если бы использовалось ключевое слово «before»; направляющие всех прочих элементов совмещаются с направляющей данного элемента, а пустое пространство распределяется соответствующим образом. В вертикальном макете роль направляющей играет центр блока (эквивалентно значению «middle» свойства -ms-box-align).

Например, в следующем селекторе описания элемента добавляется свойство -ms-box-align со значением «before»:

<style type="text/css">
#myFlexbox
{
    display: -ms-box;
    -ms-box-align: before;
    background: grey;
    border: blue;
}
</style>

Задание направления укладки дочерних элементов в контейнере Flexbox

В контейнере Flexbox можно установить направление укладки дочерних элементов слева направо или справа налево, используя следующее свойство:

-ms-box-direction Задает направление отображения всех дочерних элементов объекта вдоль оси, заданной свойством -ms-box-orient.


Значениями этого свойства могут быть следующие ключевые слова:

  • normal (значение по умолчанию). Дочерние элементы отображаются внутри родительского элемента в направлении, неявно заданном свойством -ms-box-orient.
  • reverse. Дочерние элементы отображаются внутри родительского элемента в направлении, обратном тому, которое задано свойством -ms-box-orient.
  • inherit. Отображение дочерних элементов идет в том же направлении, что и в соответствующих родительских элементах.

Например, в следующем селекторе описания элемента добавляется свойство -ms-box-direction со значением «reverse»:

<style type="text/css">
#myFlexbox
{
    display: -ms-box;
    -ms-box-direction: reverse;
    background: grey;
    border: blue;
}
</style>

Распределение пустого пространства между дочерними элементами контейнера Flexbox

Можно задать способ распределения пустого пространства между дочерними элементами контейнера Flexbox, используя следующее свойство:

-ms-box-pack Задает способ распределения пустого пространства между дочерними элементами объекта вдоль оси, заданной свойством -ms-box-orient.


Значениями этого свойства могут быть перечисленные ниже ключевые слова. Имейте в виду, что они зависят от режима письма (writing-mode); начальный и конечный края родительского и дочерних элементов определяются направлением макета. Например, в макете с направлением слева направо начальным является левый край родительского элемента, а в макете с направлением сверху вниз — верхний край. Точно так же в макете с направлением слева направо конечным является правый край дочернего элемента, а в макете с направлением сверху вниз — нижний.

  • start. Начальный край первого дочернего элемента размещается в начале родительского элемента; начальный край следующего дочернего элемента располагается встык с конечным краем первого дочернего элемента, и так далее вдоль оси макета. Все оставшееся пространство вдоль оси макета располагается в конце оси.
  • end. Конечный край первого дочернего элемента размещается в конце родительского элемента; конечный край следующего дочернего элемента располагается встык с начальным краем первого дочернего элемента, и так далее вдоль оси макета. Все оставшееся пространство вдоль оси макета располагается в начале оси.
  • center. Все дочерние элементы располагаются встык согласно описаниям ключевых слов «start» и «end». При этом вся группа дочерних элементов располагается посередине между начальным и конечным краями родительского элемента, так что все оставшееся пространство равномерно распределяется по двум промежуткам — перед первым дочерним элементом и за последним дочерним элементом.
  • justify (значение по умолчанию). Начальный край первого дочернего элемента размещается в начале родительского элемента; конечный край последнего дочернего элемента располагается встык с концом родительского элемента; все остальные дочерние элементы помещаются между первым и последним, так что все оставшееся пространство вдоль оси макета равномерно распределяется по промежуткам между дочерними элементами.

Например, в следующем селекторе описания элемента добавляется свойство -ms-box-pack со значением «justify»:

<style type="text/css">
#myFlexbox
{
    display: -ms-box;
    -ms-box-pack: justify;
    background: grey;
    border: blue;
}
</style>

Включение переноса дочерних элементов

Для дочерних элементов контейнера Flexbox, не помещающихся в одной строке, можно разрешить перенос на новую строку, используя следующее свойство:

-ms-box-lines Указывает, следует ли переносить дочерние элементы на новые строки или в столбцы, исходя из наличия свободного места в объекте.


Значениями этого свойства могут быть следующие ключевые слова:

  • single (значение по умолчанию). Элементы обрабатываются как переполняющие родительский блок. Свойство overflow родительского элемента определяет, будут ли дочерние элементы обрезаны (overflow: hidden), продолжены за пределами родительского блока (overflow: visible) или же для отображения лишнего содержимого будет использоваться полоса прокрутки в родительском элементе (overflow: scroll).
  • multiple. Элементы, которые не помещаются в одной строке разметки, будут переноситься на новую строку, параллельную предыдущей.

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

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

Например, в следующем селекторе описания элемента добавляется свойство -ms-box-lines со значением «multiple»:

<style type="text/css">
#myFlexbox
{
    display: -ms-box;
    -ms-box-lines: multiple;
    background: grey;
    border: blue;
}
</style>

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

Если для дочерних элементов задан перенос на следующую строку (свойству -ms-box-lines присвоено значение «multiple»), можно задавать направление переноса, используя следующее свойство:

-ms-box-line-progression Задает направление для добавления новых строк или столбцов, когда свойству -ms-box-lines присвоено значение «multiple».


Значениями этого свойства могут быть следующие ключевые слова:

  • normal (значение по умолчанию). Когда дочерние элементы переносятся на следующую строку, перенос производится в соответствии с ориентацией или направлением, заданными ранее.
  • reverse. Когда дочерние элементы переносятся на следующую строку, перенос производится противоположно ориентации или направлению, заданным ранее.

Например, в следующем селекторе описания элемента добавляется свойство -ms-box-line-progression со значением «reverse»:

<style type="text/css">
#myFlexbox
{
    display: -ms-box;
    -ms-box-line-progression: reverse;
    background: grey;
    border: blue;
}
</style>

Добавление дочерних элементов в контейнер Flexbox

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

<style type="text/css">
#myFlexbox {
    background: gray;
    border: blue;
    display: -ms-box;
}
#child1 {
    background: maroon;
    border: orange solid 1px;
}
#child2 {
    background: lightgray;
    border: red solid 1px;
}
</style>
<body>
<div id="myFlexbox">
    <div id="child1">child 1</div>
    <div id="child2">child 2</div>
</div>
...
</body>

Задание гибкости дочернего элемента

Можно задавать способ пропорционального распределения пустого пространства между дочерними элементами вдоль оси макета родительского блока. Свойство -ms-box-flex позволяет указывать, какие из дочерних элементов являются негибкими (т. е. их размер не изменяется для заполнения всего доступного пространства в родительском элементе), а какие — гибкими (т. е. их размер можно изменить так, чтобы они заполнили все доступное пространство в родительском элементе).

-ms-box-flex Указывает, является ли ширина или высота дочернего элемента гибким параметром, зависящим от доступного пространства в объекте. Это значение с плавающей точкой также задает долю доступного пространства, которая выделяется дочернему элементу. Значение «0.0» (установленное по умолчанию) указывает, что элемент не является гибким.


Например, в приведенном ниже фрагменте кода внутри родительского контейнера Flexbox определено четыре дочерних элемента. Свойству -ms-box-flex присваиваются следующие значения:

  • child1: -ms-box-flex = 2;
  • child2: -ms-box-flex = 1;
  • child3: -ms-box-flex = 0 (значение по умолчанию);
  • child4 не имеет свойства -ms-box-flex; это значит, что его свойству -ms-box-flex присваивается значение по умолчанию «0».

Поскольку и у child3, и у child4 свойство -ms-box-flex имеет значение «0», они являются негибкими, а потому их размеры остаются неизменными. Добавляем оставшиеся значения -ms-box-flex и получаем 3. Это означает, что элементу child1 выделено 2/3 оставшегося пространства. Соответственно, элементу child2 выделена 1/3 (одна треть) оставшегося пространства.

<style type="text/css">
#myFlexbox {
    background: gray;
    border: blue;
    display: -ms-box;
}
#child1 {
    background: maroon;  border: orange solid 1px;
    -ms-box-flex: 2;
}
#child2 {
    background: lightgray;
    border: red solid 1px;
    -ms-box-flex: 1;
}
#child3 {
    background: lightgray;   
    border: red solid 1px;
    -ms-box-flex: 0;
}
#child4 {
    background: lightgray;
    border: red solid 1px;
}
</style>
<body>
<div id="myFlexbox">
    <div id="child1">child 1</div>
    <div id="child2">child 2</div>
    <div id="child3">child 3</div>
    <div id="child4">child 4</div>
</div>
</body>

Группировка дочерних элементов в контейнере Flexbox

Дочерние элементы в контейнере Flexbox можно группировать, задавая с помощью номера группы очередность, в которой каждый элемент будет отображаться вдоль оси разметки, причем эта очередность может отличаться от той, которая задана в модели DOM. Для настройки группировки используйте следующее свойство:

-ms-box-ordinal-group Задает группу очередности, к которой принадлежит дочерний элемент объекта. Это целочисленное значение определяет очередность отображения группы вдоль оси, заданной свойством -ms-box-orient.


Значения должны быть целыми и положительными. По умолчанию этому свойству присваивается значение «1».

Свойство -ms-box-ordinal-group позволяет помещать элементы в группы очередности, начиная с группы 1. Все дочерние элементы в каждой группе очередности отображаются вдоль указанной оси разметки до отображения любых дочерних элементов в следующей группе очередности. Поэтому все дочерние элементы из группы очередности 1 отображаются до каких-либо дочерних элементов из группы очередности 2, и так далее. Внутри групп очередности элементы отображаются в том порядке, который указан в модели DOM. По умолчанию дополнительные строки сохраняют текущее направление блока.

Например, в следующем фрагменте кода определено четыре дочерних элемента и большинству из них присвоена группа очередности с использованием свойства -ms-box-ordinal-group:

  • child1: -ms-box-ordinal-group= 2;
  • child2: -ms-box-ordinal-group= 1 (значение поумолчанию);
  • child3: -ms-box-ordinal-group= 2;
  • child4 не имеет свойства -ms-box-ordinal-group; это значит, что данному свойству присваивается значение по умолчанию «1».

Дочерние элементы child2 и child4 находятся в группе очередности 1, а дочерние элементы child1 и child3 — в группе очередности 2. Внутри каждой группы очередности дочерние элементы отображаются согласно последовательности DOM, поэтому в родительском гибком блоке эти элементы будут отображаться в следующем порядке: child2, child4, child1, child3.

<style type="text/css">
#myFlexbox {
    background: gray;
    border: blue;
    display: -ms-box;
}
#child1 {
    background: maroon;
    border: orange solid 1px;
    -ms-box-ordinal-group: 2;
}
#child2 {
    background: lightgray;
    border: red solid 1px;
    -ms-box-ordinal-group: 1;
}
#child3 {
    background: lightgray;
    border: red solid 1px;
    -ms-box-ordinal-group: 2;
}
#child4 {
    background: lightgray;
    border: red solid 1px;
}
</style>
<body>
<div id="myFlexbox">
    <div id="child1">child 1</div>
    <div id="child2">child 2</div>
    <div id="child3">child 3</div>
    <div id="child4">child 4</div>
</div>
</body>

Выравнивание по сетке CSS 3

Модуль выравнивания по сетке CSS 3 (элемент Grid) на момент подготовки данного документа находится в состоянии рабочего черновика W3C. (Реализация выравнивания по сетке в Internet Explorer 10 и в приложениях Metro основана на версии рабочего проекта от 26 октября 2010 г. Реализация выравнивания по сетке в будущих предварительных выпусках Internet Explorer 10 и приложениях Metro может измениться в соответствии с изменениями в спецификации.) Подобно гибким блокам, сетка обеспечивает большую подвижность макета, чем плавающие элементы или сценарии. Она позволяет делить пространство под крупные области страницы или веб-приложения, а также определять взаимосвязи между размерами, местоположением и слоями различных частей элемента управления HTML. За счет этого исчезает необходимость в создании фиксированного макета, который не позволяет задействовать все доступное пространство в окне браузера.

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

Демонстрацию верстки с использованием выравнивания по сетке см. в разделе Hands On: CSS 3 Grid Layout на сайте IE Test Drive.

Элемент Grid

Основой для выравнивания по сетке служит элемент Grid, для объявления которого свойство display элемента устанавливается равным «-ms-grid». (Ввиду того что модуль выравнивания по сетке находится лишь на стадии рабочего проекта, для работы в Internet Explorer 10 и приложениях Metro данное значение и все свойства, описанные в этом разделе, следует указывать с фирменным префиксом Microsoft «-ms-».) Элементы Grid могут быть блочного или строчного уровня. Например, в следующем примере кода внутри элемента создается элемент Grid с идентификатором myGrid:

<style>
#myGrid {
    display: -ms-grid;
    background: gray;
    border: blue;
}
</style>

Дорожки (столбцы и строки)

После создания элемента Grid задайте размеры его столбцов и строк, используя следующие свойства:

-ms-grid-columns Задает ширину каждого столбца элемента Grid. Столбцы разделяются пробелами.
-ms-grid-rows Задает высоту каждой строки элемента Grid. Строки разделяются пробелами.

Можно указывать размер столбцов и строк (называемых в совокупности дорожками) с помощью стандартных единиц длины, ключевого слова «auto», ключевого слова «min-content» (указав наименьшую ширину или высоту любых дочерних элементов в качестве ширины или высоты), ключевого слова «max-content» (указав наибольшую ширину или высоту любых дочерних элементов в качестве ширины или высоты), а также дробных единиц (fr). Автоматическое определение размера дорожек (тех, для которых указано ключевое слово «auto») производится исходя из свойств элементов, находящихся на этих дорожках. Пространство под дорожки, размеры которых заданы в дробных единицах, выделяется в соответствии с этими дробными значениями. В качестве примера рассмотрим следующую расширенную версию селектора описания элемента myGrid:

<style>
#myGrid {
    display: -ms-grid;
    background: gray;
    border: blue;
    -ms-grid-columns: auto 100px 1fr 2fr;
    -ms-grid-rows: 50px 5em auto;
}
</style>

Этот элемент Grid будет иметь четыре столбца следующего вида:

  • Столбец 1 (ключевое слово «auto»): размеры столбца будут подогнаны под содержимое в этом столбце.
  • Столбец 2 (100px): этот столбец будет иметь ширину 100 пикселей.
  • Столбец 3 (1fr): этот столбец будет занимать одну дробную единицу оставшегося пространства.
  • Столбец 4 (2fr): этот столбец будет занимать две дробные единицы оставшегося пространства.

Поскольку всего в сетке имеется три дробные единицы, под столбец 3 будет выделена 1/3 (одна треть), а под столбец 4 — 2/3 (две трети) оставшегося пространства.

Кроме того, данный элемент Grid будет иметь три строки следующего вида:

  • Строка 1 (50px): эта строка будет иметь высоту 50 пикселей.
  • Строка 2 (5em): эта строка будет иметь высоту 5 текущих размеров шрифта (em).
  • Строка 3 (ключевое слово «auto»): размеры строки будут подогнаны под содержимое в этой строке.

Элементы сетки

Дочерние элементы контейнера Grid называются элементами сетки, и их положение задается следующими свойствами:

-ms-grid-column Задает столбец, в который помещается элемент сетки.
-ms-grid-row Задает строку, в которую помещается элемент сетки.

Нумерация дорожек начинается с 1, номер по умолчанию также равняется 1. Подразумевая объявленный выше элемент Grid, рассмотрим следующие два селектора описания элементов:

#item1 {
    background: maroon;
    border: orange solid 1px;
    -ms-grid-row: 1;
    -ms-grid-column: 1;
}
#item2 {
    background: lightgray;
    border: red solid 1px;
    -ms-grid-row: 2;
    -ms-grid-column: 2;
}

Применим теперь эти селекторы к следующей разметке:

<div id="myGrid">
    <div id="item1">Item 1</div>
    <div id="item2">Item 2</div>
</div>

Можно просмотреть получившуюся страницу. (Для правильного отображения этой страницы необходим браузер Internet Explorer 10.)

Выравнивание элементов сетки

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

-ms-grid-column-align Задает горизонтальное выравнивание элемента сетки в столбце сетки. Возможные значения — «center», «end», «start» и «stretch».
-ms-grid-row-align Задает вертикальное выравнивание элемента сетки в строке сетки. Возможные значения — «center», «end», «start» и «stretch».

Изменим селектор описания элемента 2 следующим образом, добавив в конец четыре строки:

#item2 {
    background: lightgray;
    border: red solid 1px;
    -ms-grid-row: 2;
    -ms-grid-column: 2;
    width: 40px;
    height: 30px;
    -ms-grid-column-align: end;
    -ms-grid-row-align: center;
}

Затем добавим следующий селектор:

#item3 {
    background: orange;
    border: maroon solid 1px;
    -ms-grid-row: 3;
    -ms-grid-column: 3;
}

Применим теперь эти селекторы к следующей разметке:

<div id="myGrid">
    <div id="item1">Item 1</div>
    <div id="item2">Item 2</div>
    <div id="item3">Item 3</div>
</div>

Можно просмотреть получившуюся страницу. (Для правильного отображения этой страницы необходим браузер Internet Explorer 10.)

Укладка элементов сетки друг на друга

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

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

#item3 {
    background: orange;
    border: maroon solid 1px;
    -ms-grid-row: 2;
    -ms-grid-column: 2;
}

Поскольку объект div элемента 3 указан в разметке после объекта div для элемента 2, элемент 3 будет отображен поверх элемента 2. Можно просмотреть получившуюся страницу. (Для правильного отображения этой страницы необходим браузер Internet Explorer 10.)

Чтобы изменить это поведение, установленное по умолчанию, используйте следующее свойство:

-ms-grid-layer Задает слой (z-индекс) элемента сетки в ячейке. значение по умолчанию равно 0.


Элементы, которым присвоены отрицательные значения свойства -ms-grid-layer, будут отображаться под всеми элементами со значением по умолчанию. Элементы, которым присвоены положительные значения свойства -ms-grid-layer, будут отображаться поверх элементов с меньшими значениями этого свойства. Если два элемента имеют одно и то же значение свойства -ms-grid-layer, они будут отображаться в том порядке, в котором идут в разметке.

В селекторе описания элемента 3 установим свойство -ms-grid-layer равным -1, чтобы расположить этот элемент внизу стопки:

#item3 {
    background: orange;
    border: maroon solid 1px;
    -ms-grid-row: 2;
    -ms-grid-column: 2;
    -ms-grid-layer: -1;
}

В этом случае Internet Explorer 10 отображает элемент 2 поверх элемента 3. Можно просмотреть получившуюся страницу. (Для правильного отображения этой страницы необходим браузер Internet Explorer 10).

Многоячеечные элементы сетки

Можно создавать элементы сетки, занимающие несколько столбцов или строк. Для этого служат следующие свойства:

-ms-grid-column-span Задает число столбцов, которые занимает элемент сетки. значение по умолчанию равно 1.
-ms-grid-row-span Задает число строк, которые занимает элемент сетки. значение по умолчанию равно 1.

В селекторе описания элемента 3 установим свойство -ms-grid-column-span равным 4, а значение свойства -ms-grid-column поменяем на «1», чтобы этот элемент занимал в ширину четыре столбца (т. е. все столбцы сетки):

#item3 {
    background: orange;
    border: maroon solid 1px;
    -ms-grid-row: 2;
    -ms-grid-column: 1;
    -ms-grid-layer: -1;
    -ms-grid-column-span: 4;
}

Можно просмотреть получившуюся страницу. (Для правильного отображения этой страницы необходим браузер Internet Explorer 10.)

Имейте в виду, что при попытке выделить для элемента сетки больше столбцов или строк, чем уже имеется в сетке (например, если в предыдущем примере оставить свойство -ms-grid-column равным 2, а свойство -ms-grid-column-span установить равным 4, число имеющихся в сетке столбцов будет превышено на 1), будет неявным образом создано недостающее количество столбцов или строк, а их ширина или высота будет определена как «auto»(подгонка под содержимое).

Позиционируемые плавающие блоки

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

Поддержка позиционируемых плавающих элементов в Internet Explorer Platform Preview позволяет реализовывать сценарии, подобные тому, который изображен на следующем рисунке: здесь верстка веб-страницы напоминает верстку страницы в настольной издательской системе, такой как Microsoft Word или Adobe InDesign.

Более того, позиционируемые плавающие элементы можно сочетать с другими новыми возможностями верстки Internet Explorer 10 и приложений Metro: сеткой CSS, многоколоночной разметкой CSS и гибкими блоками CSS. Позиционируемые плавающие элементы представляют собой недавнее предложение, вынесенное в адрес рабочей группы CSS. Корпорация Microsoft работает с другими членами консорциума W3C и более широкого веб-сообщества с целью усовершенствования данного предлагаемого стандарта. В следующих подразделах дается краткий обзор позиционируемых плавающих элементов и способов их реализации.

Примечание. Ввиду того что модуль позиционируемых плавающих элементов находится на предварительном этапе подготовки, для работы в Internet Explorer 10 и приложениях Metro данное значение и все свойства, описанные в этом разделе, следует указывать с фирменным префиксом Microsoft «-ms-».

Демонстрацию использования позиционируемых плавающих элементов см. в разделе Hands On: Positioned Floats на сайте IE Test Drive.

Позиционируемый плавающий элемент

В Internet Explorer 10 и приложениях Metro добавлено новое значение свойства float — «-ms-positioned». Это значение указывает, что данный элемент (позиционируемый плавающий элемент) может располагаться различными способами (см. следующие подразделы) и строчное содержимое будет огибать его подобно тому, как оно огибает обыкновенные плавающие элементы.

Значение «-ms-positioned» меняет интерпретацию других свойств, таких как position, top, bottom, left и right. В следующих подразделах подразумевается, что для рассматриваемого элемента установлено значение «float:-ms-positioned».

Модель содержащего блока для позиционируемых плавающих элементов

Прежде чем задавать местоположение и размер позиционируемого плавающего элемента, необходимо рассчитать содержащий его блок, исходя из значения свойства position. Позиционируемые плавающие элементы меняют интерпретацию некоторых значений свойства position, а также допускают новое значение этого свойства — «position:-ms-page».

position: static | absolute | fixed | relative | -ms-page 

Ниже описываются отличия в интерпретации этих ключевых слов по сравнению со стандартной логикой работы свойства position в случае, когда для рассматриваемого элемента установлено значение «float:-ms-positioned».

  • static (значение по умолчанию). Позиционируемый плавающий элемент располагается в нормальном потоке HTML.
  • absolute. Положение позиционируемого плавающего элемента задается относительно содержащего его блока, причем этот элемент влияет на нормальный поток внутри своего контейнера. Строчное содержимое огибает позиционируемый плавающий элемент, а не располагается под ним.
  • fixed. Положение позиционируемого плавающего элемента задается относительно исходного положения окна просмотра или относительно окна браузера (и не обновляется с перемещением окна просмотра при прокрутке).
  • relative. Положение позиционируемого плавающего элемента задается относительно его гипотетического местонахождения в нормальном потоке. Для расчета смещения элемента относительно его положения в нормальном потоке можно использовать свойства top, bottom, left и right. Содержимое будет огибать исходное положение элемента, а сам позиционируемый плавающий элемент будет накладываться на строчное содержимое.
  • -ms-page. Положение позиционируемого плавающего элемента задается относительно ближайшего исходного содержащего блока. Это может быть окно браузера или контейнер с содержимым, например iFrame. Свойства bottom, top, left и right задают положение элемента относительно границ окна просмотра, в котором располагался бы данный позиционируемый плавающий элемент в обычном случае (т. е. если бы было установлено значение «position:static»).

Огибание содержимым позиционируемого плавающего элемента

Свойство -ms-flow-wrap определяет, как позиционируемый плавающий элемент будет огибать содержимое.

-ms-flow-wrap: wrap | none

Эти ключевые слова определены следующим образом:

  • wrap (значение по умолчанию). Строчное содержимое элемента блочного уровня огибает позиционируемый плавающий элемент.
  • none. Строчное содержимое элемента блочного уровня перекрывается позиционируемым плавающим элементом, а не огибает его. Если свойству flow-wrap присваивается значение «none», огибание отключается для всего строчного содержимого внутри контейнера.

Смещение внутреннего контура огибания

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

Позиционируемые плавающие элементы и сетка CSS

Позиционируемые плавающие элементы также можно использовать вместе с новой функцией сетки CSS в Internet Explorer 10 и приложениях Metro. Например, на приведенном ниже изображении показан позиционируемый плавающий элемент внутри сетки 3х3. Сетка содержит один элемент div со строчным содержимым, заполняющим все три строки и три столбца. Позиционируемый плавающий элемент находится в ячейке сетки во второй строке второго столбца. Содержимое огибает позиционируемый плавающий элемент.

Ниже приведен код этой страницы:

<!DOCTYPE html><html><body><div style="width: 100%;
  height: 100%;
  display: -ms-grid;
  -ms-grid-columns: 1fr 1fr 1fr;
  -ms-grid-rows: 1fr 1fr 1fr;">
  <div style="-ms-grid-row: 2;
    -ms-grid-column: 2;
    float:-ms-positioned;">
    Float positioned at row 2, column 2. </div>
  <div style="-ms-grid-row: 1;
    -ms-grid-column: 1;
    -ms-grid-column-span: 3;
    -ms-grid-row-span: 3;">
  The quick brown fox jumped over the lazy dog...
  </div>
</div></html>

Трехмерные преобразования CSS 3

Internet Explorer 10, так же как и приложения Metro в Windows Developer Preview, поддерживает трехмерные преобразования CSS 3. В Internet Explorer 9 была добавлена поддержка двухмерных преобразований CSS 3, которые также поддерживаются и в приложениях Metro. С помощью преобразований обеспечиваются переходы, повороты и изменение размера элементов в плоском или трехмерном пространстве без использования внешних подключаемых модулей. Трехмерные преобразования CSS определяются модулем трехмерных преобразований CSS уровня 3 консорциума W3C, который в данный момент находится в состоянии рабочего черновика.

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

Примечание. Ввиду того что рабочий черновик модуля преобразований CSS 3 находится на предварительной стадии, все свойства, перечисленные в данном разделе, следует указывать с фирменным префиксом Microsoft «-ms-» для работы с Internet Explorer 10 и приложениями Metro.

Свойство «-ms-transform»

Для применения двухмерных и трехмерных преобразований к элементу служит свойство -ms-transform, содержащее список функций преобразования. Вот синтаксис этого свойства:

-ms-transform Указывает функции преобразования (перечисленные ниже), которые будут применены к указанному элементу. В качестве значения свойства -ms-transform можно использовать либо разделенный пробелами список функций преобразования, либо ключевое слово «none», указывающее, что не следует применять никакие функции преобразования.


Ниже приведен список функций преобразования, которые поддерживаются в Internet Explorer 10 и в приложениях Metro в составе Windows 8 Developer Preview. После каждой функции приводится краткий пример кода и рисунок, демонстрирующий результат работы этого кода. (Поддерживаемые двухмерные функции преобразования см. на справочной странице -ms-transform в сети MSDN.)

Помните, что порядок имеет значение: функции преобразования применяются в том порядке, в котором они перечислены в свойстве -ms-transform.

Кроме того, эффект функций с компонентом оси z проявляется лучше всего в сочетании с функцией perspective, придающей глубину. В приведенных ниже примерах кода функция perspective и другие функции добавлены к свойству -ms-transform, чтобы эффект иллюстрируемых функций был более заметным. Подробно ознакомиться с действием сочетания различных функций и значений можно в демонстрации Hands On: 3-D Transforms на веб-сайте IE Test Drive.

Перспектива

perspective(<length>)

Функция perspective изменяет перспективу, через которую просматривается элемент, и создает впечатление глубины. По мере увеличения значения функции «perspective» элемент будет отображаться все дальше от зрителя. Значение должно быть больше 0 и указывается в пикселях.

Единицы параметра <length> такие же, как во всех прочих функциях перехода: 1px в направлении z — это такое же расстояние, как 1px в направлениях x или y.

Трехмерная матрица

matrix3d(<number>, <number>, <number>, <number>, <number>, <number>, <number>, <number>, <number>, <number>,
<number>, <number>, <number>, <number>, <number>, <number>)

Функция matrix3d определяет трехмерное преобразование в виде однородной матрицы 4х4 из 16 значений c развертыванием по столбцам.

Пример:

 div
{
  -ms-transform: matrix3d(0.359127, -0.469472, 0.806613, 0, 0.190951, 0.882948, 0.428884, 0, -0.913545, 0,
  0.406737, 0, 0, 0, 0, 1);
}

Результат:

Трехмерный переход

translate3d(<translation-value>, <translation-value>, <translation-value>)

Функция translate3D определяет трехмерный переход по вектору [tx,ty,tz], где tx, ty и tz — соответственно первый, второй и третий параметры значений перехода.

Пример:

div
{
  -ms-transform: translate3d(20px, -60px, 50px);
}

Результат:

Переход в направлении z

translateZ(<translation-value>)

Функция translateZ указывает переход на заданную величину в направлении z. Процентные значения не допускаются.

Пример:

div
{   
  -ms-transform: perspective(500px) translateZ(-60px);
}

Результат:

Трехмерное масштабирование

scale3d(<number>, <number>, <number>)

Функция scale3d определяет операцию трехмерного масштабирования по вектору масштабирования [sx,sy,sz], описанному этими тремя параметрами.

Пример:

div
{
  -ms-transform: scale3d(0.5, -0.5, 1.5);
}

Результат:

Масштабирование по вектору z

scaleZ(<number>)

Функция scaleZ определяет операцию масштабирования по вектору масштабирования [1,1,sz], где sz дается в качестве параметра. Эффект функции scaleZ наиболее очевиден при использовании в сочетании с такими функциями, как rotate и perspective, что показано в приведенном ниже примере.

Пример:

div
{
  -ms-transform: perspective(500px) scaleZ(2) rotateX(45deg);
}

Результат:

Трехмерный поворот

rotate3d(<number>, <number>, <number>, <angle>)

Функция rotate3d определяет трехмерный поворот по часовой стрелке. Элемент поворачивается на угол, указываемый последним параметром, вокруг вектора направления [x,y,z], описываемого первыми тремя параметрами. Если вектор направления не является единичным, вектор будет нормализован. Если нормализация вектора направления невозможна, как в случае вектора [0, 0, 0], то поворот не применяется.

Пример:

div
{
   -ms-transform: rotate3d(0.7, 0.5, 0.7, 45deg);
}

Результат:

Поворот вокруг оси x

rotateX(<angle>)

Функция rotateX определяет поворот на заданный угол по часовой стрелке вокруг оси x.

Пример:

div
{
  -ms-transform: perspective(500px) rotateX(45deg);
}

Результат:

Поворот вокруг оси y

rotateY(<angle>)

Функция rotateY определяет поворот на заданный угол по часовой стрелке вокруг оси y.

Пример:

div
{
  -ms-transform: perspective (500px) rotateY(70deg);
}

Результат:

Поворот вокруг оси z

rotateZ(<angle>)

Функция rotateZ определяет поворот на заданный угол по часовой стрелке вокруг оси z.

Пример:

div
{
  -ms-transform: rotateZ(65deg);
}

Результат:

Свойство «-ms-transform-origin»

Свойство -ms-transform-origin определяет начало отсчета для преобразования элемента.

Например, если указать функцию rotate3d в свойстве -ms-transform, то это свойство будет определять точку, вокруг которой будет поворачиваться элемент. Значение этого свойства по умолчанию — «50% 50% 0px» (середина элемента).

-ms-transform-origin

Задает начало отсчета преобразования указанного элемента. Для этого свойства необходимо указать от одного до трех значений длины:

  • Первое значение длины указывает положение по оси x относительно блока, содержащего элемент. Можно использовать значение длины (поддерживаемую единицу длины), процентное значение или одно из следующих трех ключевых слов: «left» (0 % длины по оси x блока, содержащего элемент), «center» (середина) или «right» (100 % длины).
  • Второе значение длины указывает положение по оси y относительно блока, содержащего элемент. Можно использовать значение длины, процентное значение или одно из следующих трех ключевых слов: «top» (0 % длины по оси y блока, содержащего элемент), «center» (середина) или «bottom» (100 % длины).
  • Третье значение длины указывает положение по оси z относительно блока, содержащего элемент. Необходимо использовать значение длины.

Свойство«-ms-transform-style»

Свойство -ms-transform-style определяет отображение вложенных элементов в трехмерном пространстве.

-ms-transform-style Определяет отображение вложенных элементов в трехмерном пространстве. Если указать для этого свойства элемента значение «flat», то все дочерние элементы отображаются плоскими на двухмерной плоскости элемента. При повороте элемента вокруг осей x или y дочерние элементы, расположенные с положительными или отрицательными значениями по оси z, будут отображаться в плоскости элемента, а не перед ним или позади него.


Примечание. В спецификации W3C для этого свойства предназначается ключевое слово «preserve-3d», указывающее, что отображение в одной плоскости не применяется. В данный момент Internet Explorer 10 не поддерживает ключевое слово «preserve-3d». [MPT10] Это ограничение можно обойти, вручную применив преобразование родительского элемента к каждому из дочерних элементов в дополнение к собственному преобразованию дочерних элементов.

Свойство «-ms-perspective»

Свойство -ms-perspective применяет такое же преобразование, как функция преобразования perspective, но в данном случае оно применяется только к преобразованным или перемещенным дочерним элементам, а не к родительскому элементу.

-ms-perspective Применяет такое же преобразование, как функция преобразования perspective, к дочерним преобразованным или перемещенным дочерним элементам родительского элемента. В качестве значения этого свойства можно использовать число (устанавливающее контекст расположения элементов и содержащий их блок) или ключевое слово «none», указывающее, что преобразование перспективы не применяется.

Свойство «-ms-perspective-origin»

Свойство -ms-perspective-origin определяет начало отсчета для свойства -ms-perspective.

-ms-perspective-origin

Устанавливает начало отсчета для свойства «perspective». Это свойство задает положение по осям x и y, с которого зритель наблюдает дочерние элементы родительского элемента. Для этого свойства необходимо указать одно или два значения длины:

  • Первое значение длины указывает положение по оси x относительно блока, содержащего элемент. Можно использовать значение длины (поддерживаемую единицу длины), процентное значение или одно из следующих трех ключевых слов: «left» (0 % длины по оси x блока, содержащего элемент), «center» (середина) или «right» (100 % длины).
  • Второе значение длины указывает положение по оси y относительно блока, содержащего элемент. Можно использовать значение длины, процентное значение или одно из следующих трех ключевых слов: «top» (0 % длины по оси y блока, содержащего элемент), «center» (середина) или «bottom» (100 % длины).

Свойство «-ms-backface-visibility»

Свойство -ms-backface-visibility определяет, видна ли обратная сторона преобразованного элемента, когда она направлена в сторону зрителя. Непреобразованные элементы всегда направлены лицевой стороной к зрителю.

-ms-backface-visibility

Определяет, видна ли обратная сторона преобразованного элемента. Для этого свойства необходимо указать одно из двух следующих значений:

  • visible Указывает, что обратная сторона видна.
  • hidden Указывает, что обратная сторона не видна.


Примеры

Демонстрацию использования преобразований CSS 3 см. в разделе Hands On: 3-D Transforms на сайте IE Test Drive.

Анимация CSS 3

Internet Explorer 10 и приложения Metro поддерживают анимацию CSS 3. Анимация CSS 3 дает возможность применять элементы анимации на веб-страницах и в приложениях Metro, создавать привлекательные приложения с удобными, яркими, живыми интерфейсами. Анимация CSS 3 определяется модулем анимации CSS уровня 3 консорциума W3C, который в данный момент находится в состоянии рабочего черновика.

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

Как и следовало ожидать, анимация CSS 3 предоставляет практически бесконечные возможности для создания полнофункциональных удобных интерфейсов. В данном разделе руководства для разработчиков содержится краткое описание создания анимации CSS в Internet Explorer 10 и приложениях Metro, а также приводится пример использования анимации CSS 3.

Демонстрацию использования анимации CSS 3 см. в разделе Hands On: Animations на сайте IE Test Drive.

Примечание. Ввиду того что рабочий черновик модуля анимации CSS 3 находится на предварительной стадии, все свойства, перечисленные в данном разделе, следует указывать с фирменным префиксом Microsoft «-ms-» для работы с Internet Explorer 10 и приложениями Metro.

Создание анимации

Создание анимации осуществляется в три этапа:

  1. Определение свойств анимации.
  2. Создание ключевых кадров.
  3. Применение анимации к одному или нескольким элементам.

Определение свойств анимации

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

Свойство «-ms-animation-name»

Свойство -ms-animation-name указывает идентификаторы анимации. Идентификатор анимации выбирает правило CSS @-ms-keyframes. Вот синтаксис этого свойства:

-ms-animation-name Указывает один или несколько идентификаторов анимации. Идентификаторы назначаются при помощи правила CSS @-ms-keyframes.


Свойство «-ms-animation-duration»

Свойство -ms-animation-duration определяет длительность выполнения одного цикла анимации. Вот синтаксис этого свойства:

-ms-animation-duration Задает одно или несколько значений, разделенных запятыми; каждое из значений указывает длительность полного цикла анимации. Каждое значение представляет собой число с плавающей запятой, за которым следует обозначение единицы времени (ms или s). Для этого свойства можно указывать отрицательные значения.


Свойство «-ms-animation-timing-function»

Свойство -ms-animation-timing-function позволяет изменять скорость анимации, описывая способ вычисления промежуточных значений во время одного цикла анимации. Для этого следует указать временные параметры анимации на основе кривой Безье третьего порядка, принимающей четыре параметра. Можно указать временную функцию как для всей анимации, так и для отдельных ключевых кадров.

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

-ms-animation-timing-function

Указывает одну или несколько разделенных запятыми временных функций, определяющих промежуточные значения свойств, которые будут использоваться в одном цикле анимации. Анимация вычисляется как набор соответствующих свойств объектов, определяемых в правиле CSS @-ms-keyframes, которое, в свою очередь, определяется свойством -ms-animation-name. Возможные значения приведены ниже. Описание каждой функции см. на справочной странице -ms-animation-timing-function.

  • cubic-bezier(x1,y1,x2,y2). Четыре параметра этой функции должны быть числами с плавающей запятой от 0 до 1 включительно. Эти значения соответствуют координатам точек P1 и P2 кривой Безье третьего порядка по осям x и y. Для свойств, отличных от opacity и color, функция кривой cubic-bezier принимает координаты по оси y, отличные от стандартного диапазона значений (от 0 до 1). Это позволяет создавать переходные эффекты «эластичного растяжения» и «отскакивания».
  • ease (значение по умолчанию.) Эта временная функция увеличивает скорость в начале, создает анимацию на полной скорости, а затем постепенно снижает скорость к концу.
  • linear. Эта временная функция обладает одинаковой скоростью от начала до конца.
  • ease-in. Эта временная функция постепенно повышает скорость в начале.
  • ease-out. Эта временная функция постепенно снижает скорость в конце.
  • ease-in-out. Эта временная функция постепенно повышает скорость в начале, а затем постепенно снижает скорость в конце.
  • steps. Эта временная функция задает ступенчатое изменение значений при помощи двух параметров. Первый параметр задает количество интервалов; необязательный второй параметр указывает момент интервала, когда происходит изменение значения свойства. Второй параметр может иметь только значения «start» или «end», по умолчанию используется значение «end».


Свойство «-ms-animation-iteration-count»

Свойство -ms-animation-iteration-count определяет, сколько раз воспроизводится цикл анимации. Вот синтаксис этого свойства:

-ms-animation-iteration-count

Указывает, сколько раз воспроизводится цикл анимации. Несколько значений отделяются друг от друга запятыми.

  • значение по умолчанию — «1», то есть анимация будет воспроизведена от начала до конца один раз.
  • Если задать значение «infinite», анимация будет повторяться бесконечно.
  • Если задать дробное число, то анимация будет остановлена в определенный момент в течение цикла.
  • Если указать отрицательное число или ноль, анимация не будет применена.

Свойство -ms-animation-iteration-count можно использовать вместе со свойством -ms-animation-direction, имеющим значение «alternate» (в этом случае в каждом втором цикле анимация воспроизводится задом наперед).


Свойство «-ms-animation-direction»

Свойство -ms-animation-direction определяет направление воспроизведения цикла анимации. Вот синтаксис этого свойства:

-ms-animation-direction

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

  • normal (значение по умолчанию.) Определяет, что анимация не будет воспроизводиться задом наперед в каждом втором цикле.
  • alternate. Определяет, что направление воспроизведения анимации будет чередоваться: в нечетных итерациях анимация воспроизводится вперед, в нечетных — назад.


Свойство «-ms-animation-play-state»

Свойство -ms-animation-play-state указывает, выполняется ли анимация или же находится в приостановленном состоянии. Это свойство может быть полезно при создании механизма, позволяющего пользователю приостанавливать анимацию. Вот синтаксис этого свойства:

-ms-animation-play-state

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

  • paused. Приостанавливает запущенную анимацию. Анимация будет по-прежнему отображать текущее значение анимации в статическом состоянии, как если бы время анимации было постоянным.
  • running. Возобновляет выполнение приостановленной анимации. Выполнение возобновляется с текущего значения.


Свойство «-ms-animation-delay»

Свойство -ms-animation-delay определяет время начала анимации и позволяет начинать анимацию через некоторое время после ее применения. Вот синтаксис этого свойства:

-ms-animation-delay

Указывает одно или несколько разделенных запятыми значений смещения в анимации (промежуток времени до начала анимации) до отображения анимации для набора соответствующих свойств объектов. Каждое значение представляет собой число с плавающей запятой, за которым следует обозначение единицы времени (ms или s).

  • По умолчанию значение равно нулю, то есть выполнение анимации начинается немедленно после ее применения.
  • Отрицательное значение обозначает, что анимация начнется немедленно после применения, но не с начала, а как если бы ее выполнение началось раньше на указанную величину времени.


Свойство «-ms-animation-fill-mode»

Свойство -ms-animation-fill-mode определяет, будут ли эффекты анимации видны до или после ее воспроизведения. По умолчанию анимация не влияет на значения свойств в течение времени между применением анимации и ее выполнением (в течение любой задержки, определенной свойством -ms-animation-delay). Кроме того, по умолчанию анимация не влияет на значения свойств после ее окончания (после истечения времени, определенного свойством -ms-animation-duration). Свойство -ms-animation-fill-mode позволяет переопределить используемое по умолчанию поведение. Вот синтаксис этого свойства:

-ms-animation-fill-mode

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

  • none (поведение по умолчанию)
  • forwards (по завершении анимации сохраняется результирующее значение свойства, определенное в последнем ключевом кадре)
  • backwards (перед началом анимации применяется начальное значение свойства, определенное в первом ключевом кадре; период применения значения задается в свойстве -ms-animation-delay)
  • both (применяются оба значения: forwards и backwards)


Свойство «-ms-animation»

Собирательное свойство -ms-animation объединяет шесть описанных выше свойств анимации в одно. Вот синтаксис этого свойства:

-ms-animation

Указывает один или несколько разделенных пробелами наборов свойств анимации для набора соответствующих свойств объектов. Значения свойств анимации должны быть заданы в следующем порядке:

  • -ms-animation-name
  • -ms-animation-duration
  • -ms-animation-timing-function
  • -ms-animation-delay
  • -ms-animation-iteration-count
  • -ms-animation-direction

При наличии нескольких наборов значений этих шести свойств анимации каждый набор должен быть отделен запятой.


Рассмотрим следующий пример кода, в котором определено несколько свойств анимации для элемента div:

div {
  -ms-animation-name: myAnimation;
  -ms-animation-duration: 3s;
  -ms-animation-timing-function: ease-out;
  -ms-animation-delay: -1s;
  -ms-animation-iteration-count: 2;
  -ms-animation-direction: normal;
}

С помощью собирательного свойства -ms-animation можно указать все эти шесть свойств в одной строке следующим образом:

div {
  -ms-animation-name: myAnimation 3s ease-out -1s 2 normal;
}

Создание ключевых кадров

Теперь следует задать ключевые кадры для анимации. При помощи ключевых кадров обеспечивается точное управление промежуточными значениями в анимации. Правило @-ms-keyframes определяет список ключевых кадров анимации для свойства объекта, а также указывает идентификатор анимации. Вот синтаксис этого правила:

@-ms-keyframes

Список ключевых кадров для свойства объекта в HTML-документе. Это правило используется для того, чтобы задавать значения свойств в разных местах анимации, а также чтобы задавать идентификатор анимации. Это правило указывает значения свойств в течение одного цикла анимации. (Анимация может проходить одну или несколько итераций.)

Это правило использует селекторы ключевых кадров, чтобы указать значения свойств на различных этапах анимации. Селекторы ключевых кадров можно определять при помощи ключевых слов «from» (эквивалент «0%»), «to» (эквивалент «100%») и одного или нескольких процентных значений.


В приведенном ниже примере показаны три селектора ключевых кадров, каждый с двумя дескрипторами ключевых кадров.

@-ms-keyframes myAnimation {
  from {    
    left: 100px;
    right: 50px; 
  }
  40% {     
    left: 50px;
    right: 10px;
  }
  to {        
    left: 10px;
    right: 10px;
  }
}

В данном примере ключевые кадры указываются для трех моментов анимации: начало (значение «from», или «0%»), 40 % и конец (значение «to», или «100%»).

Также можно указать временную функцию, которая будет применяться по мере перехода анимации к следующему ключевому кадру. Нужно просто добавить свойство -ms-animation-timing-function в селектор соответствующего ключевого кадра.

Применение анимации

Наконец, можно применить стиль анимации к элементу. Обычно применение включается каким-либо событием, например щелчком кнопки мыши (или касанием). Помните, что в отличие от переходных эффектов анимацию CSS невозможно прервать путем изменения значений свойств анимации. Анимацию CSS можно прервать лишь с помощью свойства -ms-animation-play-state или путем добавления либо удаления имени анимации.

По завершении анимации те свойства, к которым применялась анимация, принимают исходные значения.

Пример

Ниже приведен пример анимации CSS. Он создан с помощью демонстрации Hands On: Animations, доступной на сайте IE Test Drive.

Сначала создадим элемент div с текстом и применим к нему стили:

<!DOCTYPE html>
<html lang="en-us">
<head>
<meta http-equiv="X-UA-Compatible" content="IE=10" />
<style type="text/css">
body {
  padding:10px;
  font:bold 20pt "Segoe UI";
}
div {
  width:250px;
  background-color:lime;
  padding:10px;
}
</style>
</head>
<body>
<div>
Duis ac leo sit amet lectus tristique pulvinar nec rutrum dolor. Etiam sed ipsum enim,
vitae euismod odio. Suspendisse eu.
</div>
</body>
</html>

Результат применения данного кода можно увидеть на этой странице.

Теперь определим для анимации некоторые параметры. Добавим в раздел style селектор, использующий псевдоэлемент :active. Это означает, что анимация будет происходить, лишь пока пользователь щелкает и удерживает (или касается и удерживает) текстовый блок. Анимация будет продолжаться до окончания.

Итак, нужно добиться следующего результата: анимация начинается немедленно, длится 5 секунд, повторяется один раз (общее количество итераций равно двум) и идентифицируется с именем «demo». Для этого добавим следующий селектор:

...
div:active {
  -ms-animation-delay: 0s;
  -ms-animation-duration: 5s;
  -ms-animation-iteration-count: 2;
  -ms-animation-name: demo;
}
...

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

@-ms-keyframes demo {
  from {
    -ms-animation-timing-function: ease;
  }
  50% {
    background-color: purple;
    -ms-transform: translate(20px,30px);
    -ms-animation-timing-function: ease-in;
  }
  to {
    background-color: lime;
    -ms-transform: translateY(0px,0px);
  }
}

Мы определили два свойства для анимации: background-color и -ms-transform. В ходе одного цикла анимации фоновый цвет элемента div меняется со светло-зеленого (исходного) на фиолетовый, а затем снова становится светло-зеленым. Кроме того, элемент div также перемещается на 20 пикселей вправо и на 30 пикселей вниз. Анимация использует временную функцию ease с начала до середины и временную функцию ease-in с середины до конца.

Просмотреть эту анимацию (требуется Internet Explorer 10).

События

Internet Explorer 10 и приложения Metro определяют три события анимации.

MSAnimationStart

Событие MSAnimationStart происходит в начале анимации с учетом задержки (указанной свойством -ms-animation-delay), если она есть. При отрицательной задержке анимация начнется не с начала, а со времени, равного абсолютному значению задержки.

  • Всплывающее уведомление: да
  • Возможность отмены: да
  • Контекстная информация: animationName (AnimationEvent)

MSAnimationEnd

Событие MSAnimationEnd происходит по завершении анимации.

  • Всплывающее уведомление: да
  • Возможность отмены: да
  • Контекстная информация: animationName, elapsedTime (AnimationEvent)

MSAnimationIteration

Событие MSAnimationIteration происходит в конце каждой итерации анимации. Это событие происходит только в случае, если значение свойства -ms-animation-iteration-count больше единицы.

  • Всплывающее уведомление: да
  • Возможность отмены: да

Градиенты CSS 3

Internet Explorer 10 и приложения Metro поддерживают градиенты CSS 3 для любого свойства, значением которого может быть изображение — в частности, свойства background-image (в сочетании со значением «image» собирательного свойства background), свойства list-style-image и создаваемого содержимого. Градиенты работают так, как описано в разделе Gradients (Градиенты) модуля CSS 3 Image Values and Replaced Content (Значения-изображения и заменяемое содержимое в CSS 3), который на момент написания этого документа находится в стадии рабочего черновика.

Градиенты — это изображения с плавным переходом между цветами. Internet Explorer 10 поддерживает линейные, круговые и эллиптические градиенты CSS 3. Градиент каждого из этих типов задается линией градиента и двумя или более узлами. Каждый узел градиента имеет свой цвет, а между каждой парой узлов Internet Explorer отображает плавный переход от цвета первого узла к цвету второго.

Демонстрацию использования градиентов CSS 3 см. в разделе CSS Gradient Maker на сайте IE Test Drive.

Линейные градиенты

Линейный градиент — это плавный цветовой переход от одной стороны блока к другой. Для создания линейного градиента сначала задается линия градиента, а затем два или более узла, разделенных запятыми. Общий синтаксис задания линейного градиента таков:

-ms-linear-gradient (<исходная точка>, <цвет и смещение узла градиента>, <цвет и смещение узла градиента>);
  • исходная точка. Необязательное значение, в качестве которого может указываться любое сочетание ключевых слов «top», «bottom» и «left», «right». Определяет угол или сторону ограничивающего блока. Можно также задать угол, под которым должна идти линия градиента, в стандартных угловых единицах. Если угол не указан, линия градиента идет из заданного угла или от заданной стороны и заканчивается в противоположном углу или на противоположной стороне.
  • цвет узла градиента. Обязательное значение, в качестве которого может указываться любое поддерживаемое значение цвета.
  • смещение узла градиента. Необязательное значение, выражаемое в процентах или в виде десятичного числа. Задает расположение узла на линии градиента. Например, значение «20%» или «0.2» указывает, что узел градиента должен находиться на расстоянии от исходной точки, равном 20% длины линии.

Изображенный ниже линейный градиент, который используется в качестве аргумента для свойства background-image, имеет три узла.

  1. Первый узел находится в правом верхнем углу и задает линию, идущую в левый нижний угол. Этому узлу назначен оттенок желтого цвета.
  2. Второй узел делит линию градиента пополам, и ему назначен оттенок зеленого цвета.
  3. Последний узел находится на уровне 80% длины линии градиента и имеет оттенок синего цвета. От данного узла до конца линии градиента (в промежутке между 80% и 100%) этот цвет сохраняется.

background-image: -ms-linear-gradient(top right, #FFF133 0%, #16D611 50%, #00A3EF 80%);

Это объявление отображается в Internet Explorer 10 следующим образом:

Этот линейный градиент был создан с помощью средства CSS Gradient Maker на веб-сайте IE Test Drive.

Радиальные градиенты

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

-ms-radial-gradient (<исходная точка>, <форма> <размер>, <цвет и смещение узла градиента>, <цвет и смещение узла градиента>);
  • исходная точка. Необязательное значение, в качестве которого может указываться любое сочетание ключевых слов «top», «bottom», «middle» и «left», «center», «right».
  • форма.Необязательное значение, определяющее форму градиента. В качестве этого значения можно указывать ключевые слова «ellipse» (используется по умолчанию) или «circle».
  • размер. Необязательное значение, задающее размеры градиента относительно блока, ближайшего к центру соответствующей окружности или круга. Представляет собой два значения длины (в абсолютном выражении или в процентах) либо одно из следующих ключевых слов.
    • closest-side. Для круговых градиентов это значение указывает, что край градиента касается стороны блока, ближайшей к его центру. Для эллиптических градиентов оно указывает, что край градиента касается вертикальной и горизонтальной сторон блока, ближайших к его центру.
    • closest-corner. Край градиента проходит через ближайший к центру угол блока. Для эллиптических градиентов отношение ширины эллипса к высоте остается тем же, каким бы оно было при указании значения «closest-side».
    • farthest-side. Аналогично «closest-side», но край градиента касается стороны блока, наиболее удаленной от его центра (для круговых градиентов), или вертикальной и горизонтальной сторон блока, наиболее удаленных от его центра (для эллиптических градиентов).
    • farthest-corner. Край градиента проходит через наиболее удаленный от центра угол блока. Для эллиптических градиентов отношение ширины эллипса к высоте остается тем же, каким бы оно было при указании значения «farthest-side».
    • contain. То же, что и «closest-side».
    • cover (значение по умолчанию.) То же, что и «farthest-corner».
  • цвет узла градиента. Обязательное значение, в качестве которого может указываться любое поддерживаемое значение цвета.
  • смещение узла градиента. Необязательное значение, выражаемое в процентах или в виде десятичного числа. Задает местоположение узла на линии градиента (в направлении от центра). Например, значение «20%» или «0.2» указывает, что узел градиента должен находиться от исходной точки линии градиента на расстоянии, равном 20% длины линии.

Например, следующий радиальный градиент, используемый в качестве аргумента для свойства background-image, имеет те же три узла, что и в предыдущем примере. Линия этого кругового градиента начинается в левом нижнем углу содержащего градиент блока и заканчивается на наиболее удаленной от центра градиента стороне этого блока.

background-image: -ms-radial-gradient(left bottom, circle farthest-side,
#F7FF08 0%, #21AD11 50%, #00A3EF 80%);

Это объявление отображается в Internet Explorer 10 следующим образом:

Если просто поменять значение параметра форма в предыдущем объявлении с «circle» на «ellipse», градиент примет следующий вид:

background-image: -ms-radial-gradient(left bottom, ellipse farthest-side,
#F7FF08 0%, #21AD11 50%, #00A3EF 80%);

Оба этих радиальных градиента были созданы с помощью средства CSS Gradient Maker на веб-сайте IE Test Drive.

Повторяющиеся градиенты

Internet Explorer 10 и приложения Metro также поддерживают повторяющиеся линейные и радиальные градиенты. Синтаксис каждого из свойств повторяющегося градиента остается таким же, как и для неповторяющегося.

Общий синтаксис задания повторяющегося линейного градиента таков:

-ms-repeating-linear-gradient (<исходная точка>, <цвет и смещение узла градиента>, <цвет и смещение узла градиента>);


Определения всех значений здесь такие же, как и для функции -ms-linear-gradient().

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

background-image: -ms-repeating-linear-gradient(top right,
#FFF133 0%, #16D611 50%, #00A3EF 80%);

Это объявление отображается в Internet Explorer 10 следующим образом:

Общий синтаксис задания повторяющегося радиального градиента таков:

-ms-repeating-radial-gradient (<исходная точка>, <форма> <размер>, <цвет и смещение узла градиента>, <цвет и смещение узла градиента>);


Определения всех значений здесь такие же, как и для функции -ms-radial-gradient().

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

background-image: -ms-repeating-radial-gradient(left bottom,
circle farthest-side, #F7FF08 0%, #21AD11 10%, #00A3EF 20%);

Это объявление отображается в Internet Explorer 10 следующим образом:

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

background-image: -ms-repeating-radial-gradient(left bottom,
ellipse farthest-side, #F7FF08 0%, #21AD11 10%, #00A3EF 20%);

Это объявление отображается в Internet Explorer 10 следующим образом:

Переходные эффекты CSS 3

Internet Explorer 10 и приложения Metro поддерживают переходные эффекты CSS 3. Переходные эффекты позволяют создавать простую анимацию за счет постепенного изменения значений свойств CSS за определенный промежуток времени. Например, можно изменять размер и цвет объекта в течение 10-секундного периода. Анимация, для создания которой ранее требовалось применять сложное сочетание CSS и JavaScript, теперь может быть создана только средствами CSS. Переходные эффекты CSS 3 определяются модулем переходных эффектов CSS уровня 3 консорциума W3C, который в данный момент находится в состоянии рабочего черновика.

Примечание. Ввиду того что рабочий черновик модуля переходных эффектов CSS 3 находится на предварительной стадии, все свойства, перечисленные в данном разделе, следует указывать с фирменным префиксом Microsoft «-ms-» для работы с Internet Explorer 10 и приложениями Metro.

Демонстрацию использования переходных эффектов CSS 3 см. в разделе Hands On: transitions на сайте IE Test Drive.

Свойство «-ms-transition-property»

Свойство -ms-transition-property позволяет указать одно или несколько свойств CSS, к которым будут применены переходные эффекты при задании нового значения свойства. Вот синтаксис этого свойства:

-ms-transition-property

Указывает одно или несколько имен свойств CSS, к которым будут применены переходные эффекты при задании нового значения свойства. Свойство -ms-transition-property в качестве значения может иметь либо разделенный запятыми список свойств CSS, либо одно из следующих значений:

  • none. При задании нового значения свойства не применяются никакие переходные эффекты. Любые свойства, отвечающие за переходные эффекты, не обрабатываются.
  • all (значение по умолчанию). Все свойства, поддерживающие переходные эффекты, применяются при задании нового значения свойства.


Помимо применения переходных эффектов к простым свойствам CSS, таким как расположение, цвет, шрифты и т. п., можно применять переходные эффекты и к новым свойствам CSS, таким как opacity и border-radius, а также к двухмерным и трехмерным преобразованиям.

Помните, что если прервать переходный эффект, свойство автоматически вернется в исходное состояние.

Свойство «-ms-transition-duration»

Свойство -ms-transition-duration определяет длительность переходного эффекта. Вот синтаксис этого свойства:

-ms-transition-duration Задает одно или несколько значений, разделенных запятыми; каждое из значений указывает длительность перехода от прежнего значения к новому значению. Каждое значение представляет собой число с плавающей запятой, за которым следует обозначение единицы времени (ms или s).

Свойство «-ms-transition-timing-function»

Свойство -ms-transition-timing-function позволяет изменять скорость переходного эффекта, описывая способ вычисления промежуточных значений во время переходного эффекта. Для этого следует указать временные параметры анимации на основе кривой Безье третьего порядка, принимающей четыре параметра.

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

-ms-transition-timing-function

Указывает одну или несколько разделенных запятыми временных функций, определяющих промежуточные значения свойств, которые будут использоваться в переходном эффекте соответствующими свойствами объекта. Возможные значения приведены ниже. Описание каждой функции см. на справочной странице -ms-transition-timing-function.

  • cubic-bezier(x1,y1,x2,y2). Четыре параметра этой функции должны быть числами с плавающей запятой от 0 до 1 включительно. Эти значения соответствуют координатам точек P1 и P2 кривой Безье третьего порядка по осям x и y. Для свойств, отличных от opacity и color, функция кривой cubic-bezier принимает координаты по оси y, отличные от стандартного диапазона значений (от 0 до 1). Это позволяет создавать переходные эффекты «эластичного растяжения» и «отскакивания».
  • ease (значение по умолчанию). Эта временная функция увеличивает скорость в начале, создает анимацию на полной скорости, а затем постепенно снижает скорость к концу.
  • linear. Эта временная функция обладает одинаковой скоростью от начала до конца.
  • ease-in. Эта временная функция постепенно повышает скорость в начале.
  • ease-out. Эта временная функция постепенно снижает скорость в конце.
  • ease-in-out. Эта временная функция постепенно повышает скорость в начале, а затем постепенно снижает скорость в конце.
  • steps. Эта временная функция задает ступенчатое изменение значений при помощи двух параметров. Первый параметр задает количество интервалов; необязательный второй параметр указывает момент интервала, когда происходит изменение значения свойства. Второй параметр может иметь только значения «start» или «end». По умолчанию второй параметр имеет значение «end».
  • step-start. Эта ступенчатая временная функция эквивалентна «steps(1, start)».
  • step-end. Эта ступенчатая временная функция эквивалентна «steps(1, end)».

Свойство «-ms-transition-delay»

Свойство -ms-transition-delay определяет время начала переходного эффекта и позволяет начинать переходный эффект через некоторое время после его применения. Если задать свойству -ms-transition-delay отрицательное значение, то переходный эффект все равно будет запущен в момент изменения свойства, но будет выглядеть так, как будто он был запущен на указанную величину времени раньше. Таким образом, переходный эффект начнет работать не с начала. Вот синтаксис этого свойства:

-ms-transition-delay Указывает одно или несколько разделенных запятыми значений смещения в переходном эффекте (промежуток времени до начала переходного эффекта) до отображения переходного эффекта для набора соответствующих свойств объектов. Каждое значение представляет собой число с плавающей запятой, за которым следует обозначение единицы времени (ms или s).

Свойство «-ms-transition»

Собирательное свойство -ms-transition объединяет четыре описанных выше свойства в одно. Вот синтаксис этого свойства:

-ms-transition

Указывает один или несколько разделенных пробелами наборов свойств переходных эффектов для набора соответствующих свойств объектов. Значения свойств переходных эффектов должны быть заданы в следующем порядке:

  • -ms-transition-property
  • -ms-transition-duration
  • -ms-transition-timing-function
  • -ms-transition-delay

При наличии нескольких наборов значений этих свойств каждый набор должен быть отделен запятой.


Пример

Демонстрацию использования переходных эффектов CSS 3 см. в разделе Hands On: transitions на сайте IE Test Drive.

Следующий простой пример демонстрирует использование переходных эффектов CSS 3 для изменения одного свойства CSS, применяемого к элементу div в течение определенного времени.

Сначала создадим элемент div с текстом и применим к нему стили:

<!DOCTYPE html>
<html lang="en-us">
<head>
<style type="text/css">
body {
  padding:10px;
  font:bold 20pt "Segoe UI";
}
div {
  width:250px;
  background-color:lime;
  padding:10px;
}
</style>
</head>
<body>
<div>
Duis ac leo sit amet lectus tristique pulvinar nec rutrum dolor. Etiam sed ipsum enim,
vitae euismod odio. Suspendisse eu.
</div>
</body>
</html>

Можно просмотреть получившуюся страницу.

Теперь сделаем так, чтобы элемент div медленно исчезал (путем изменения свойства opacity), когда пользователь щелкает (или касается) и удерживает div. Для этого зададим «начальное» и «конечное» значения свойства opacity. Для начала присвоим элементу div свойство opacity со значением «1», затем изменим это значение на «0», когда элемент div становится «активным». Для этого добавим свойства opacity таким образом, чтобы раздел стиля выглядел, как показано ниже:

...
<style type="text/css">
body {
  padding:10px;
  font:bold 20pt "Segoe UI";
}
div {
  width:250px;
  background-color:lime;
  padding:10px;
  opacity:1;
}
div:active {
  opacity:0;
}
</style>
...

Теперь, если нажать и удерживать (или коснуться и удерживать) зеленый элемент div, он мгновенно исчезнет на все время, в течение которого нажата кнопка мыши или удерживается палец. Можно просмотреть получившуюся страницу.

Теперь можно добавить свойства переходного эффекта CSS, чтобы значение свойства opacity уменьшалось постепенно. Сначала необходимо указать свойство, к которому будет применяться переходный эффект, при помощи свойства -ms-transition-property:

-ms-transition-property:opacity;

Затем добавим длительность перехода с помощью свойства -ms-transition-duration:

-ms-transition-duration:5s;

Теперь определим функцию времени, которая будет использоваться с функцией -ms-transition-timing-function. Для того чтобы переходный эффект применялся к div равномерно, используем временную функцию linear:

-ms-transition-timing-function:linear;

Также можно задержать переход на одну секунду при помощи свойства -ms-transition-delay:

-ms-transition-delay: 1s;

За счет этих четырех свойств изменение значения свойства opacity будет происходить равномерно на 5 секунд через каждую секунду. Также можно использовать собирательное свойство transition, чтобы объединить эти четыре свойства:

-ms-transition: opacity 5s linear 1s;

Можно просмотреть получившуюся страницу.

Чтобы задействовать в переходном эффекте несколько свойств элемента, нужно задать свойствам несколько значений, отделив их запятыми. Например, можно добавить к предыдущему примеру изменение цвета. Сначала добавим свойство background-color в селектор div:active. Затем изменим свойство -ms-transition следующим образом:

-ms-transition: opacity 5s linear 1s, background-color 2s ease;

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

События

Internet Explorer 10 и приложения Metro определяют одно событие переходного эффекта.

MSTransitionEnd

Событие MSTransitionEnd происходит по завершении перехода. Если переход удален перед завершением, событие не возникает.

  • Всплывающее уведомление: да
  • Возможность отмены: да
  • Контекстная информация: propertyName, elapsedTime (TransitionEvent)

Текст CSS 3

В Internet Explorer 10 и приложениях Metro в Windows Developer Preview появилась поддержка двух функций текстового модуля CSS 3 W3C: свойства text-shadow и расстановки переносов.

Демонстрацию использования свойства «text-shadow» см. в разделе Hands On: text-shadow на сайте IE Test Drive.

Свойство text-shadow

Свойство text-shadow применяет к указанному тексту эффект отбрасывания тени, оно определяется в текстовом модуле W3C CSS 3. Если вам знаком синтаксис свойства box-shadow, то применение свойства text-shadow не вызовет затруднений, поскольку синтаксис практически идентичен.

text-shadow

Разделенный запятыми список теней, присваивающий одну или несколько теней указанному тексту. Для каждой тени указывается следующий список значений, разделенных пробелами:

  • Смещение по горизонтали. Обязательное значение. При положительном значении тень будет смещена вправо от текста, при отрицательном — влево.
  • Смещение по вертикали. Обязательное значение. При положительном значении тень будет смещена ниже текста, при отрицательном — выше.
  • Ширина размытия. Только неотрицательные значения. Если значение размытия равно нулю, у тени будет четкий край. В противном случае, чем больше значение, тем сильнее будет размыт край тени.
  • Величина расширения. При положительном значении силуэт тени будет расширен во все стороны на указанную величину. При отрицательном значении силуэт тени будет сжат. (Имейте в виду, что это значение может поддерживаться не всеми веб-браузерами.)
  • Цвет. Любое поддерживаемое значение цвета CSS.


Синтаксис свойства text-shadow идентичен синтаксису свойства box-shadow с одним исключением: свойство text-shadow не поддерживает ключевое слово «inset».

В приведенном ниже примере к тексту применяется темно-серая тень с незначительным размытием, причем тень находится ниже и правее текста:

.myselector
{
...
  text-shadow: 0.1em 0.1em 0.15em #333;
}

Результат при применении к короткому блоку текста будет выглядеть так:

На сайте W3C целая страница посвящена советам по использованию свойства text-shadow и примерам: тени текста в CSS.

Расстановка переносов

Internet Explorer 10, так же как и приложения Metro в Windows Developer Preview, поддерживает следующую важную функцию текста CSS 3: автоматическую расстановку переносов. Эта функция особенно полезна с учетом поддержки многоколоночной разметки. В частности, модуль переноса слов CSS 3 поддерживает следующие возможности:

  • Автоматическая расстановка переносов в тексте на основе встроенного словаря.
  • Указание наименьшей длины слова, при которой слово может быть разделено переносом.
  • Указание наименьшей длины фрагмента слова после переноса.
  • Указание наименьшей длины фрагмента слова перед переносом.
  • Указание «области» расстановки переносов, в которой переносы расставляются принудительно.
  • Указание наибольшего числа последовательных строк с переносами.

Примечание. Ввиду того что раздел переносов в рабочем черновике модуля текста CSS 3 находится в предварительной стадии, все свойства, перечисленные в данном разделе, следует указывать с фирменным префиксом Microsoft «-ms-» для работы с Internet Explorer 10.

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

<!DOCTYPE html>
<html lang="en-us">
<body>
  <div style="width: 130px; border: 1px solid black;">
  <p style="text-align: justify; font-size: 11pt;">Lorem ipsum dolor sit amet, consectetur adipiscing elit.
  Curabitur feugiat diam eu ipsum congue ac ultricies nisl rhoncus. Curabitur scelerisque arcu a leo
  mollis porta. Ut eu quam ut odio tempor ornare.</p>
  </div>
</body>
</html>

В Internet Explorer 10 такая разметка будет выглядеть следующим образом:

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

Свойство «-ms-hyphens»

Свойство -ms-hyphens включает расстановку переносов. Вот синтаксис этого свойства:

-ms-hyphens

Указывает, можно ли создать дополнительные точки разрыва в текущей строке путем переноса отдельных слов, содержащихся в этой строке. Свойство -ms-hyphens может иметь одно из следующих значений:

  • none. Указывает, что всякий перенос слов отключен, в том числе и по символам «мягкого» переноса (то есть по указывающим возможность переноса символам &shy;).
  • manual. Указывает, что перенос слов разрешен только в тех случаях, когда такая возможность обозначена вручную. Обозначение возможности переноса осуществляется либо при помощи символов «мягкого» переноса, либо при помощи «жестких» (вставленных вручную) символов переноса.
  • auto. Указывает, что в дополнение к обозначенным возможностям переноса слов также допускается разделение слов на фрагменты для переноса согласно встроенному словарю переноса. Символы «мягкого» переноса имеют приоритет перед всеми прочими способами обозначения возможного переноса, но также подчиняются свойствам, управляющим правилами переноса слов.


Ниже приведен пример использования свойства -ms-hyphens со значением «auto».

<!DOCTYPE html>
<html lang="en-us">
<body>
  <div style="width: 130px; border: 1px solid black;">
  <p style="-ms-hyphens: auto; text-align: justify; font-size: 11pt;">Lorem ipsum dolor sit amet,
  consectetur adipiscing elit. Curabitur feugiat diam eu ipsum congue ac ultricies nisl rhoncus.
  Curabitur scelerisque arcu a leo mollis porta. Ut eu quam ut odio tempor ornare.</p>
  </div>
</body>
</html>

В Internet Explorer 10 такая разметка будет выглядеть следующим образом:

Тот же короткий фрагмент выровненного текста внутри узкого контейнера, как и предыдущем примере, но с параметром -ms-hyphens установленным в значение "auto". Зазоры менее заметны, чем на предыдущем рисунке, поскольку несколько слов были автоматически перенесены.

Свойство «-ms-hyphenate-limit-zone»

Свойство -ms-hyphenate-limit-zone определяет ширину области расстановки переносов, то есть пустого пространства в правой части строки (до выравнивания текста по ширине), при превышении которого включается расстановка переносов. Вот синтаксис этого свойства:

-ms-hyphenate-limit-zone Задает наибольшую ширину пустого пространства в строке (до выравнивания по ширине), при превышении которого принудительно включается перенос. Ширину можно указать либо относительно общей длины строки (в виде неотрицательного процентного значения), либо в виде абсолютной величины в пикселях.


Ниже приведен пример использования свойства -ms-hyphenate-limit-zone.

<!DOCTYPE html>
<html lang="en-us">
<body>
  <div style="width: 130px; border: 1px solid black;">
  <p style="-ms-hyphens: auto; -ms-hyphenate-limit-zone: 50px; text-align: justify; font-size: 11pt;">
  . . .
  </p>
  </div>
</body>
</html>

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

До и после расстановки переносов

Свойство «-ms-hyphenate-limit-chars»

Свойство -ms-hyphenate-limit-chars задает наименьшее число букв в слове с переносом. Вот синтаксис этого свойства:

-ms-hyphenate-limit-chars

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

  • Первое значение. Наименьшая длина слова, при которой допускается разделение слова переносом.
  • Второе значение. Наименьшее число букв перед переносом, необходимое для разделения слова переносом.
  • Третье значение. Наименьшее число букв после переноса, необходимое для разделения слова переносом.

Вместо любого из этих значений (а также вместо всех значений) можно использовать ключевое слово «auto». Ключевое слово «auto» соответствует значениям «5 2 2»: наименьшая длина слова составляет пять букв, перед переносом должно быть не менее двух букв, а после переноса также должно быть не менее двух букв.

Сведения о том, что произойдет, если не указать какое-либо из этих значений, см. на справочной странице свойства -ms-hyphenate-limit-chars.


Ниже приведен пример использования свойства -ms-hyphenate-limit-chars. В данном случае для этого свойства установлено значение «auto 3»: наименьшая длина слова определяется автоматически (т. е. равна пяти буквам), а наименьшее число букв до и после переноса равно трем. Это означает, что слово «ultricies», которое в предыдущем примере разделялось переносом после двух первых букв, теперь не будет разделено таким образом.

<!DOCTYPE html>
<html lang="en-us">
<body>
  <div style="width: 130px; border: 1px solid black;">
  <p style="-ms-hyphens: auto; -ms-hyphenate-limit-chars: auto 3; text-align: justify; font-size: 11pt;">
  Lorem ipsum dolor sit amet, consectetur adipiscing elit. Curabitur feugiat diam eu ipsum congue ac
  ultricies nisl rhoncus. Curabitur scelerisque arcu a leo mollis porta. Ut eu quam ut odio tempor
  ornare.</p>
  </div>
</body>
</html>

В Internet Explorer 10 такая разметка будет выглядеть следующим образом:

Тот же короткий фрагмент выровненного текста внутри узкого контейнера, как и в первом примере, но с параметром -ms-hyphens установленным в значение "auto" и параметром -ms-hyphenate-limit-chars установленным в "auto 3". Слово “ultiricies,”, которое в прошлый раз было перенесено после первых друх букв, теперь не переносится и размещается на следующей строке.

Обратите внимание, что слово «ultricies» теперь отображается без переноса, в следующей строке.

Свойство «-ms-hyphenate-limit-lines»

Свойство -ms-hyphenate-limit-lines задает наибольшее число последовательных строк с переносами в элементе. Вот синтаксис этого свойства:

-ms-hyphenate-limit-lines Задает наибольшее число последовательных строк в элементе, которые могут оканчиваться на слово с переносом. В качестве значения этого свойства можно использовать целое число или ключевое слово «no-limit», указывающее, что число последовательных строк, оканчивающихся на слова с переносом, не ограничивается.

Панорамирование и изменение масштаба

Internet Explorer 10 и приложения Metro поддерживают программное управление сенсорным вводом и распознаванием жестов в CSS. В частности, поддерживается панорамирование и изменение масштаба.

Дополнительная документация о панорамировании и изменении масштаба в руководстве по Internet Explorer 10 для разработчиков будет предоставлена позже. В настоящее время можно использовать следующие краткие руководства серии «Quickstart»:

Также можно использовать документацию по API в сети MSDN: Touch: Zooming and Panning.

Снятие ограничений таблиц стилей

В Internet Explorer 9 и более ранних версиях действовало ограничение в 31 таблицу стилей на одну веб-страницу. Имелось также ограничение на глубину вложенности таблиц стилей, включаемых по ссылке с помощью правил @import (четыре уровня).

В Internet Explorer 10 (и в приложениях Metro) это ограничение снято. Количество таблиц стилей, на которые могут ссылаться веб-страницы в Internet Explorer 10 или приложения Metro в Windows Developer Preview, не ограничено. Также не ограничивается количество уровней вложенности правил @import внутри таблиц стилей.