- •Вступление
- •Обозначения
- •Введение в CSS
- •Инструменты
- •Введение в CSS
- •Способы добавления стилей на страницу
- •Типы носителей
- •Базовый синтаксис CSS
- •Значения стилевых свойств
- •Селекторы тегов
- •Классы
- •Идентификаторы
- •Контекстные селекторы
- •Соседние селекторы
- •Дочерние селекторы
- •Селекторы атрибутов
- •Универсальный селектор
- •Псевдоклассы
- •Псевдоэлементы
- •Группирование
- •Наследование
- •Каскадирование
- •Валидация CSS
- •Идентификаторы и классы
- •Написание эффективного кода
- •Режимы браузеров
- •Стандартный режим
- •Почти стандартный режим
- •Режим совместимости
- •MIME-тип документа
- •Доктайп
- •Режимы Internet Explorer
- •Рекомендации
- •Принципы вёрстки слоями
- •Блочная модель
- •Схлопывающиеся отступы
- •Поток документа
- •Блочные элементы
- •Строчные элементы
- •Строчно-блочные элементы
- •Плавающие элементы
- •Позиционирование элементов
- •Наложение и порядок слоёв
- •Вёрстка с помощью таблиц
- •Особенности таблиц
- •Таблицы и стили
- •Разница между таблицами и слоями
- •Разрезание и склейка изображений
- •Макет из двух колонок
- •Макет из трех колонок
- •Тестирование в IE
- •Условные комментарии
- •Загадочное свойство hasLayout
- •Отображение в IE
- •Ошибки IE8
- •Ошибки IE7
- •Фиксированный макет с одной колонкой
- •Фиксированный двухколоночный макет
- •Фиксированный трёхколоночный макет
- •Резиновый двухколоночный макет
- •Резиновый трёхколоночный макет
- •Колонки одинаковой высоты
- •Вёрстка типовых элементов веб-страницы
- •Меню
- •Горизонтальное меню
- •Вертикальное меню
- •Меню и подменю
- •Ниспадающее меню
- •Вкладки
- •Формы
- •Нестандартный вид текстовых полей
- •Выравнивание элементов форм
- •Вёрстка сайта на практике
- •Шапка страницы
- •Основная часть
- •Подвал страницы
- •Главная страница
- •Внутренняя страница
- •Заключение
- •Структура кода
- •Новые теги
- •Применение HTML5 на практике
- •Валидация HTML5
- •Тестирование и отладка готового кода
- •Web Developer
- •Отладка кода с помощью расширения Firebug
- •Использование Firebug на практике
- •Веб-инспектор Safari
- •Opera Dragonfly
- •Средства разработчика Internet Explorer
- •Термины
Новые теги
В HTML5 для структуры кода введено несколько новых тегов: <article>, <aside>, <footer>, <header>, <nav>, которые заменяют в некоторых случаях привычный <div>. Хотя кажется, что особой разницы между тегами <div class="header"> и <header> нет, между ними лежит огромная
пропасть. Теги ориентированы не на людей, которым нет смысла заглядывать в исходный код страницы, а на машины, интерпретирующих код. Машины или роботы не понимают <div class="header">, для них это типовой тег разметки — замени его на <div class="abrakadabra">
и смысл не поменяется. Другое дело <header>, робот, обнаружив этот тег, воспринимает его именно как шапку сайта или раздела.
Что это даёт в итоге? Поисковые системы начинают лучше индексировать сайт, потому что чётко отделяют контент страницы от вспомогательных элементов. Речевые браузеры, предназначенные для слепых людей, пропускают заголовок и переходят непосредственно к содержимому. Сайты могут автоматически обмениваться контентом и другой информацией между собой. Все эти возможности называются семантикой и позволяют представить данные в удобном для роботов виде.
У нас уже есть сайт на XHTML — lionindesert.ru, поэтому будет довольно просто перевести его на HTML5. Так, шапка сайта поменяется незначительно (пример 9.2).
Пример 9.2. Использование <header>
<header>
<div class="header-bg">
<img src="images/header-title.png" alt="Как поймать льва в пустыне" />
</div>
</header>
Попытка добавить в стилях фон к тегу <header> ни к чему не привела, фон отображаться не желает. Все новые теги следует сделать вначале блочными через свойство display, тогда они начнут корректно выводиться в браузере. В примере 9.3 показан код для создания шапки сайта.
Пример 9.3. Шапка сайта |
|
|
|
|
|
|
|
|
|
|
|
||||
|
HTML 5.0 |
|
CSS 2.1 |
|
IE 7 |
IE 8 |
IE 9 |
Cr 8 |
Op 11 |
Sa 5 |
Fx 3.6 |
||||
<!DOCTYPE html> |
|
|
|
|
|
|
|
|
|
|
|
|
|
||
<html> |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<head> |
|
|
|
/> |
|
|
|
|
|
|
|
|
|
|
|
<meta charset="utf-8" |
|
|
|
|
|
|
|
|
|
|
|
||||
<title>Как поймать льва в пустыне?</title> |
|
|
|||||||||||||
<style> |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
body |
{ margin: 0; } |
|
|
|
|
|
|
|
|
|
|
|
|
||
header { |
|
|
|
|
|
|
|
|
|
|
|
|
|
||
display: block; |
url(images/header-gradient.png) repeat-x; |
|
|
||||||||||||
}background: #00B0D8 |
|
|
|||||||||||||
.header-bg { |
url(images/header-animal.png) repeat-x center bottom; |
|
|
||||||||||||
background: |
|
|
|||||||||||||
height: 405px; |
|
|
|
|
|
|
|
|
|
|
|
|
|||
}text-align: center; |
|
|
|
|
|
|
|
|
|
|
|
|
|||
header img { |
|
|
|
|
|
|
|
|
|
|
|
|
|
||
position: relative; |
|
|
|
|
|
|
|
|
|
|
|
|
|||
}top: 40px; |
|
|
|
|
|
|
|
|
|
|
|
|
|
||
</style> |
|
|
|
|
|
|
|
|
|
|
|
|
|
||
</head> |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<body> |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<header> |
|
|
|
|
|
|
|
|
|
|
|
|
|
||
<div |
class="header-bg"> |
/> |
|
||||||||||||
<img |
|
src="images/header-title.png" alt="Как поймать льва в пустыне" |
|
||||||||||||
</div> |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
</header> |
|
|
|
|
|
|
|
|
|
|
|
|
|
||
</body> |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
</html> |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Данный пример будет работать во всех браузерах, кроме IE7 и IE8. Internet Explorer не добавляет стиль
к элементам, которые не понимает. Это недоразумение можно исправить, если создать фиктивный элемент с помощью JavaScript. Для этого включим в <head> такой код.
<script>
document.createElement("header");
</script>
Если на странице встречается один тег, этот скрипт вполне подойдёт для работы. Но не хочется повторять строку десять раз для десяти разных тегов, поэтому автоматизируем этот процесс через цикл. Сами теги указываются списком, разделяясь запятой (пример 9.4).
Пример 9.4. Скрипт для IE
<!--[if lt IE 9]> <script>
var e = ("article,aside,figcaption,figure,footer,header,hgroup,nav,section,time").split
);for (var i = 0; i < e.length; i++) { } document.createElement(e[i]);
</script> <![endif]-->
Сам скрипт заключается в условные комментарии, чтобы выполнялся только для IE версии 8.0 и ниже. В IE9 поддержка новых тегов HTML5 уже включена.
Пример выше не обязательно вставлять к себе на сайт, можно воспользоваться общедоступным скриптом написанным Реми Шарпом и распространяемым по лицензии MIT. Для этого достаточно указать на него ссылку, как показано в примере 9.5.
Пример 9.5. Скрипт для IE
<!--[if lt IE 9]>
<script src="http://html5shiv.googlecode.com/svn/trunk/html5.js"></script> <![endif]-->
Все указанные скрипты должны располагаться в коде перед CSS.
Таким образом, для полноценного использования тегов HTML5 во всех браузерах достаточно выполнить три условия:
1. установить доктайп <!DOCTYPE html>;
2.включить скрипт из примера 9.4 или 9.5;
3.в стилях для новых тегов установить display: block.
Теперь рассмотрим некоторые теги HTML5 более подробно, чтобы понять область их применения.
<article>
Задаёт содержание сайта вроде новости, статьи, записи блога, форума или др. В примере 9.6 показано добавление двух тегов <article>.
Пример 9.6. Использование тега <article> |
|
|
|
|
|
|
|
|
|
HTML 5.0 |
|
IE 7 |
IE 8 |
IE 9 |
Cr 8 |
Op 11 |
Sa 5 |
Fx 3.6 |
|
|
|
|
|
|
|
|
|
|
|
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8" /> <title>article</title>
</head>
<body>
<header><h1>Следы невиданных зверей</h1></header>
<article>
История о том, как возле столовой появились загадочные розовые следы с шестью пальцами, и почему это случилось.
</article>
</body>
</html>
<aside>
Определяет блок который не относится к основному контенту для размещения рубрик, ссылок на архив, меток и другой информации (пример 9.7). Такой блок, если он располагается сбоку, называется, как правило, «сайдбар» или «боковая панель».
Пример 9.7. Использование <aside> HTML 5 IE 7 IE 8 IE 9 Cr 8 Op 11 Sa 5 Fx 3.6
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8" /> <title>aside</title>
<script>
document.createElement('aside');
document.createElement('article');
</script>
<style> aside {
background: #f0f0f0; /* Цвет фона */ padding: 10px; /* Поля */
width: 200px; /* Ширина сайдбара */ }float: right; /* Обтекание слева */
article {
margin-right: 240px; /* Отступ справа */ }display: block; /* Блочный элемент */
</style>
</head>
<body>
<aside>
<p>Экономьте электричество</p> <p>Хороший язык</p>
<p>Чья палка больше</p>
</aside>
<article>
История о том, как приходилось экономить электричество, какие меры для этого принимались, и куда оно на самом деле уходило.
</article>
</body>
</html>
<figure>
Используется для группирования любых элементов, например, изображений и подписей к ним
(пример 9.8).
Пример 9.8. Использование <figure> HTML 5 IE 7 IE 8 IE 9 Cr 8 Op 11 Sa 5 Fx 3.6
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8" /> <title>figure</title>
<script>
document.createElement('figure');
document.createElement('figcaption');
</script>
<style> figure {
background: #5f6a72; /* Цвет фона */ padding: 10px; /* Поля вокруг */ display: block; /* Блочный элемент */ width: 150px; /* Ширина */
float: left; /* Блоки выстраиваются по горизонтали */ margin: 0 10px 10px 0; /* Отступы */
}text-align: center; /* Выравнивание по центру */
figcaption {
}color: #fff; /* Цвет текста */
</style>
</head>
<body>
<article>
<figure>
<p><img src="images/thumb1.jpg" alt="" /></p>
<figcaption>Софийский собор</figcaption>
</figure>
<figure>
<p><img src="images/thumb2.jpg" alt="" /></p> <figcaption>Польский костёл</figcaption>
</figure>
</article>
</body>
</html>
<figcaption>
Содержит описание для тега <figure>. Тег <figcaption> должен быть первым или последним элементом в группе.
<footer>
Задает «подвал» сайта или раздела, в нем обычно располагается имя автора, дата документа, контактная и правовая информация (пример 9.9).
Пример 9.9. Использование <footer> HTML 5 IE 7 IE 8 IE 9 Cr 8 Op 11 Sa 5 Fx 3.6
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <title>footer</title>
</head>
<body>
<header>
<h1>Персональный сайт Кристины Ветровой</h1>
</header>
<article>
<h2>Добро пожаловать!</h2>
<p>Рада приветствовать вас на своем сайте.</p>
</article>
<footer>
Copyright Кристина Ветрова
</footer>
</body>
</html>
<header>
Определяет «шапку» сайта или раздела.
<hgroup>
Используется для группирования заголовков веб-страницы или раздела (пример 9.10).
Пример 9.10. Использование <hgroup> |
|
|
|
|
|
|
|
|
|
HTML 5 |
|
IE 7 |
IE 8 |
IE 9 |
Cr 8 |
Op 11 |
Sa 5 |
Fx 3.6 |
|
|
|
|
|
|
|
|
|
|
|
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8" /> <title>hgroup</title>
</head>
<body>
<hgroup>
<h1>Кристина Ветрова</h1> <h2>Персональный сайт</h2>
</hgroup>
</body>
</html>
<nav>
Задаёт навигацию по сайту (пример 9.11). Если на странице несколько блоков ссылок, то в <nav>
обычно помещают приоритетные ссылки. Также допустимо использовать несколько тегов <nav> в документе. Запрещается вкладывать <nav> внутрь <address>.
Пример 9.11. Использование <nav> |
|
|
|
|
|
|
|
|
|
HTML 5 |
|
IE 7 |
IE 8 |
IE 9 |
Cr 8 |
Op 11 |
Sa 5 |
Fx 3.6 |
|
|
|
|
|
|
|
|
|
|
|
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8" /> <title>nav</title>
</head>
<body>
<header>
<h1>Чебурашка и крокодил Гена</h1>
</header>
<nav><a href="1.html">Чебурашка</a> | <a href="2.html">Гена</a> |
<a href="3.html">Шапокляк</a> | <a href="4.html">Лариска</a></nav>
<article>
<h2>Добро пожаловать!</h2>
</article>
</body>
</html>
<section>
Определяет раздел документа, который может включать в себя заголовки, шапку, подвал и текст (пример 9.12). Допускается вкладывать один тег <section> внутрь другого.
Пример 9.12. Использование <section> HTML 5 IE 7 IE 8 IE 9 Cr 5 Op 10 Sa 5 Fx 3.6
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8" /> <title>section</title>
</head>
<body>
<section>
<h2>Съёмки фильма Полипропилен</h2>
<p>История о том, как снимали фильм, где герои отдыхали на пляже, потом пришёл антагонист, избил протагонистов, сбросил их в бассейн, и что из этого получилось.</p>
</section>
<section>
<h2>Хороший язык</h2>
<p>История о том, как проходила студия изучения языка эсперанто, в то время, как над ней, на веранде велась студия приколистов, где травились анекдоты, и что из этого получилось.</p>
</section>
</body>
</html>
<time>
Помечает текст внутри тега <time> как дата, время или одновременно дата и время. Может указываться непосредственно внутри контейнера <time>, либо задаваться через атрибут datetime
(пример 9.13).
Дата и время задается в международном формате ISO 8601. Примеры оформления приведены в табл. 9.1.
|
Табл. 9.1. Форматы даты и времени |
|
|
|
|
Значение |
Формат |
Пример |
|
|
|
Год |
ГГГГ |
2012 |
|
|
|
Месяц и год |
ГГГГ-ММ |
2012-12 |
|
|
|
Полная дата |
ГГГГ-ММ-ДД |
2012-12-23 |
|
|
|
Дата и время с минутами |
ГГГГ-ММ-ДДTчч:мм |
2004-07-24T18:18 |
|
|
|
Дата и время с секундами |
ГГГГ-ММ-ДДTчч:мм:сс |
2004-07-24T18:18:18 |
|
|
|
Дата и время с часовым поясом |
ГГГГ-ММ-ДДTчч:мм:сс±чч:мм |
2004-07-24T18:18:18+04:00 |
|
|
|
Для каждой единицы существует своя заданная форма и ограничения.
Год — задается четырьмя цифрами (1860).
Месяц — две цифры (01 — январь, 02 — февраль, 12 — декабрь).
День — две цифры от 01 до 31.
Час — две цифры от 00 до 23.
Минуты — две цифры от 00 до 59.
Секунды — две цифры от 00 до 59.
Часовой пояс — часы и минуты с указанием знака плюс или минус.
Дата и время разделяются между собой заглавной латинской буквой T. Часовой пояс при необходимости пишется после времени со знаком плюс или минус. К примеру, для Москвы часовой пояс будет +03:00.
Пример 9.13. Использование <time>
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8" /> <title>time</title>
</head>
<body>
<article> <p>Опубликовано:
<time datetime="2012-12
<p><time>1957-10-04</time> <p><time>1960-08-19</time> <p><time>1961-04-12</time> <p><time>1963-06-16</time> <p><time>1969-07-21</time>
</body>
</html>
HTML 5 IE 7 IE 8 IE 9 Cr 8 Op 11 Sa 5 Fx 3.6
-23T08:23:11+07:00">сегодня</time></p>
запущен первый искусственный спутник Земли.</p> первый полёт собак в космос.</p>
первый полёт человека в космос.</p> первый полёет женщины-космонавта.</p> высадка человека на Луну.</p></article>
Что ещё можно сделать, чтобы наш код стал ближе к HTML5? В статьях для иллюстрации материала используются рисунки с подписью, для них можно указать комбинацию тегов <figure> и <figcaption>.
<figure>
<p><img src="images/fig2-1.png" alt="Рис.
<figcaption>Рис. 1. Разбиение пустыни на прямоугольников</figcaption>
</figure>
1" height="252" width="381" /></p>
N элементарных
Здесь тег <figure> включает в себя сам рисунок и подпись к нему в виде тега <figcaption>, для них включим такой стиль.
figure {
} text-align: center; /* Выравнивание по центру */
figcaption {
font: italic 1em Georgia, "Times New Roman", Times, serif;
/* Параметры шрифта */ display: block; /* Блочный элемент */
}margin: 0 0 1.5em; /* Отступы */
