- •Вступление
- •Обозначения
- •Введение в CSS
- •Инструменты
- •Введение в CSS
- •Способы добавления стилей на страницу
- •Типы носителей
- •Базовый синтаксис CSS
- •Значения стилевых свойств
- •Селекторы тегов
- •Классы
- •Идентификаторы
- •Контекстные селекторы
- •Соседние селекторы
- •Дочерние селекторы
- •Селекторы атрибутов
- •Универсальный селектор
- •Псевдоклассы
- •Псевдоэлементы
- •Группирование
- •Наследование
- •Каскадирование
- •Валидация CSS
- •Идентификаторы и классы
- •Написание эффективного кода
- •Режимы браузеров
- •Стандартный режим
- •Почти стандартный режим
- •Режим совместимости
- •MIME-тип документа
- •Доктайп
- •Режимы Internet Explorer
- •Рекомендации
- •Принципы вёрстки слоями
- •Блочная модель
- •Схлопывающиеся отступы
- •Поток документа
- •Блочные элементы
- •Строчные элементы
- •Строчно-блочные элементы
- •Плавающие элементы
- •Позиционирование элементов
- •Наложение и порядок слоёв
- •Вёрстка с помощью таблиц
- •Особенности таблиц
- •Таблицы и стили
- •Разница между таблицами и слоями
- •Разрезание и склейка изображений
- •Макет из двух колонок
- •Макет из трех колонок
- •Тестирование в IE
- •Условные комментарии
- •Загадочное свойство hasLayout
- •Отображение в IE
- •Ошибки IE8
- •Ошибки IE7
- •Фиксированный макет с одной колонкой
- •Фиксированный двухколоночный макет
- •Фиксированный трёхколоночный макет
- •Резиновый двухколоночный макет
- •Резиновый трёхколоночный макет
- •Колонки одинаковой высоты
- •Вёрстка типовых элементов веб-страницы
- •Меню
- •Горизонтальное меню
- •Вертикальное меню
- •Меню и подменю
- •Ниспадающее меню
- •Вкладки
- •Формы
- •Нестандартный вид текстовых полей
- •Выравнивание элементов форм
- •Вёрстка сайта на практике
- •Шапка страницы
- •Основная часть
- •Подвал страницы
- •Главная страница
- •Внутренняя страница
- •Заключение
- •Структура кода
- •Новые теги
- •Применение HTML5 на практике
- •Валидация HTML5
- •Тестирование и отладка готового кода
- •Web Developer
- •Отладка кода с помощью расширения Firebug
- •Использование Firebug на практике
- •Веб-инспектор Safari
- •Opera Dragonfly
- •Средства разработчика Internet Explorer
- •Термины
Поток документа
В HTML формирование элементов на странице происходит сверху вниз согласно схеме документа. Слой, размещенный в самом верху кода, отобразится раньше слоя, который расположен в коде ниже. Такая логика позволяет легко прогнозировать результат вывода элементов и управлять им. Порядок вывода объектов на странице и называется «потоком». При этом существует несколько возможностей «вырвать» элемент из потока и придать ему почти мифические свойства. Раз он не существует в потоке, то в коде его можно описать где угодно, а также выводить в заданное место окна.
Использование position
Свойство position задает позиционирование элемента относительно исходного положения или родителя. Рассмотрим для начала значение fixed, которое выводит элемент из потока и привязывает к определенной точке окна. Особенностью fixed является фиксация слоя на одном месте, причем это положение не меняется при изменении размеров окна или прокрутке страницы. Такая особенность позволяет создавать неподвижные элементы интерфейса вроде кнопки «Оставить отзыв», как показано в примере 3.10. Добавления fixed недостаточно, нужно также задать положение элемента с помощью одного или двух свойств left, top, right, bottom, они управляют положением относительно окна браузера.
Пример 3.10. Фиксированный слой XHTML 1.0 CSS 2.1 IE 6 IE 7 IE 8 IE 9 Cr 8 Op 11 Sa 5 Fx 3.6
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <title>Фиксированный слой</title>
<style type="text/css"> BODY {
}margin-left: 90px; /* Отступ слева */
.feedback {
position: fixed; /* Фиксированное положение */ left: 0; top: 50%; /* Положение */ background: #fc0; /* Цвет фона */
width: 70px; /* Ширина слоя */ }padding: 5px; /* Поля */
</style>
</head>
<body>
<p>Я вновь увидел Теночтитлан, великолепные покои во дворце Монтесумы и себя самого, спящего на золотом ложе. Я знал, что я бог Тескатлипока и наутро меня принесут в жертву. Я спал, измученный я удрученный, и видел сон. Я видел во сне, будто стою на том самом месте, где стоял сейчас, и запах наших цветов щекочет мне ноздри, как в эту ночь, и сладкие соловьиные песни звучат точно так же, как звучали они в моих ушах. Мне снилось, что, пока я стоял и слушал соловьев, над зелеными кронами дубов и ясеней взошла луна, — вот, вот она уже сияет в небесах. Мне снилось, что чей-то голос запел за холмом, но тут я пробудился от давно забытых видений прошлого.</p>
<div class="feedback">Оставить<br />отзыв</div>
</body>
</html>
Результат данного примера показан на рис. 3.20. Чтобы текст не накладывался на слой, добавлен отступ слева. Из-за того что слой feedback не существует в потоке документа, он может располагаться в любом месте кода, в данном случае внизу.
Рис. 3.20. Фиксированный слой
Значение absolute свойства position также выводит элемент из потока, но в отличие от fixed слой прокручивается вместе с содержимым. Кроме этого, существенное влияние на позицию оказывают свойства родителя. Возможны два основных варианта.
1.Родитель отсутствует (его роль выполняет <body>) или у родителя не задано свойство position.
2.У родителя элемента установлено свойство position в значении absolute или relative.
Впервом случае все просто, элемент ведет себя как в примере 3.10, за исключением того, что не закрепляется строго на одном месте, а может прокручиваться одновременно со страницей. Во втором варианте положение элемента задается относительно родителя.
Впримере 3.11 создается два вложенных слоя с абсолютным позиционированием. Координаты первого слоя layer1 задаются относительно окна браузера, координаты второго слоя layer2 относительно границ слоя layer1.
Пример 3.11. Абсолютное позиционирование XHTML 1.0 CSS 2.1 CSS 3 IE 7 IE 8 IE 9 Cr 8 Op 11 Sa 5 Fx 3.6
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <title>Позиционирование</title>
<style type="text/css">
.layer1 {
width: 217px; /* Ширина слоя */ height: 512px; /* Высота слоя */
background: url(images/bg2.png) no-repeat; /* Фоновая картинка */ position: absolute; /* Абсолютное позиционирование */
right: 20%; /* Положение справа */ }bottom: 0; /* Положение снизу */
.layer2 {
background: #000; /* Цвет фона для IE */
background: rgba(0,0,0, 0.5); /* Цвет фона с полупрозрачностью */ color: #fff; /* Цвет текста */
position: absolute; /* Абсолютное позиционирование */ bottom: 30px; /* Положение снизу */
width: 207px; /* Ширина слоя */ }padding: 5px; /* Поля */
</style>
</head>
<body>
<div class="layer1"> <div class="layer2">
Позвоночник человека
</div>
</div>
</body>
</html>
Результат данного примера показан на рис. 3.21. Браузер IE до версии 9.0 не поддерживает формат RGBA для цвета.
Рис. 3.21. Положение слоя на странице
Обратите внимание, что абсолютно позиционированный элемент может выходить за верхний и левый край окна браузера, при этом не возникает полос прокрутки. Также при использовании свойства position ширина слоя автоматически приравнивается ширине контента плюс, как обычно, ширина отступов, границ и полей.
Использование float
Свойство float превращает элемент в плавающий, при этом он прижимается к левому или правому краю родителя, а текст его обходит с других сторон. Такое поведение текста напоминает поток воды, обтекающий камень, поэтому элементы с таким поведением и называются плавающими. В отличие от абсолютно позиционированных плавающие элементы не обладают властью над координатами, их не получится заставить встать в точно заданную точку, но они имеют ряд примечательных характеристик. Настолько, что свойство float для вёрстки стало использоваться повсеместно. Перечислим лишь ряд возможных приложений:
галереи небольших фотографий;
двух и трехколоночные макеты;
горизонтальные меню;
иллюстрации в тексте;
многоколоночный текст.
float может добавляться к изображениям (тег <img>), блочным элементам вроде <p>, <div> и к строчным элементам (<span>, <a>, <strong>). В примере 3.12 показано использование float для
абзаца с фотографией.
Пример 3.12. Плавающий элемент |
|
|
|
|
|
|
|
|
|
|
|
XHTML 1.0 |
|
CSS 2.1 |
|
IE 7 |
IE 8 |
IE 9 |
Cr 8 |
Op 11 |
Sa 5 |
Fx 3.6 |
|
|
|
|
|
|
|
|
|
|
|
|
|
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <title>Обтекание</title>
<style type="text/css">
.right { }float: right;
</style>
</head>
<body>
<p class="right"><img src="images/cat.jpg" alt="Кошка" /></p> <p>Сфотографировано на камеру Canon EOS 50D. Объектив 24-105, диафрагма 4.0, выдержка 1/500, чувствительность ISO 400</p>
</body>
</html>
Результат примера показан на рис. 3.22.
Рис. 3.22. Плавающий элемент
Свойство float лишь частично влияет на элемент в потоке. Можно управлять положением по горизонтали, меняя значение float с right на left, но по вертикали положение элемента задается его местом в коде.
