Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
№ 4 Блочная вёрстка Лекция.docx
Скачиваний:
9
Добавлен:
07.09.2019
Размер:
986.74 Кб
Скачать

Ширина элемента

Если плавающий элемент будет занимать всю доступную ширину, то остальные элементы, следующие за ним, будут начинаться с новой строки. Для этого надо включить свойство width со значением 100%. Так, стиль в примере 3.25 можно дополнить следующим образом:

.left { float: left; width: 50%; }

.right { float: right; width: 50%; text-align: right; }

Каждый слой со стрелкой теперь занимает ширину 50% и в сумме они дают 100% ширины, поэтому абзац, идущий после слоя arrow, начнётся с новой строки.

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

Использование overflow

Свойство overflow управляет отображением содержания блочного элемента, если оно целиком не помещается и выходит за область заданных размеров. Значение auto в частности, добавляет полосы прокрутки при необходимости, а hidden отображает только область внутри элемента, остальное скрывает. Кроме этого, использование overflow со значением auto, scroll или hidden отменяет действие float. Стиль для примера 3.25 дополняется всего одной строкой:

.arrow { overflow: hidden; }

Результат после применения свойства overflow сразу меняется (рис. 3.38).

Рис. 3.38. Влияние свойства overflow на фон

Аналогично дополняется пример 3.26:

DIV { overflow: hidden; }

Результат показан на рис. 3.39.

Рис. 3.39. Влияние свойства overflow на границу

overflow одно из самых популярных свойств работающее в связке float. Но иногда возникают ситуации, когда применение этого метода недопустимо. Это происходит в тех случаях, когда элемент выходит за пределы элемента, при этом он будет «обрезан». В примере 3.27 картинка сдвигается влево от своего исходного положения.

Пример 3.27. Обрезание области элемента

XHTML 1.0CSS 2.1IE 7IE 8IE 9Cr 12Op 11Sa 5Fx 5

<!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">

DIV {

border: 1px solid #000; padding: 10px;

overflow: hidden;

}

.fig {

float: left; margin: 0 10px 5px 0;

position: relative; /* Относительное позиционирование */

left: -30px; /* Сдвигаем влево */

}

</style>

</head>

<body>

<div>

<img src="images/figure.jpg" class="fig" />Винни-Пух в гостях у Кролика

</div>

</body>

</html>

Результат примера показан на рис. 3.40.

Рис. 3.40. Обрезание картинки

В IE6 метод работает только при установленном свойстве hasLayout. Чтобы его включить, можно добавить zoom: 1 наряду со свойствомoverflow.

Свойство clear

Для отмены действия float применяется свойство clear со следующими значениями.

  • left — отменяет обтекание с левого края элемента (float: left). При этом все другие элементы на этой стороне будут опущены вниз, и располагаться под текущим элементом.

  • right — отменяет обтекание с правой стороны элемента (float: right).

  • both — отменяет обтекание элемента одновременно с правого и левого края. Это значение рекомендуется устанавливать, когда требуется отменить обтекание элемента, но неизвестно точно с какой стороны.

Чтобы отменить действие обтекания, свойство clear надо добавлять к элементу, идущему после плавающего. Обычно вводят универсальный класс, к примеру, clear и вставляют пустой тег <div> с этим классом (пример 3.28).

Пример 3.28. Использование clear

XHTML 1.0CSS 2.1IE 7IE 8IE 9Cr 12Op 11Sa 5Fx 5

<!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">

.arrow { background: #f0f0f0; padding: 0 5px; }

.arrow A {

color: red; /* Цвет ссылок */

text-decoration: none; /* Убираем подчеркивание */

font-size: 1.5em;

}

.left { float: left; }

.right { float: right; }

.clear { clear: both; }

</style>

</head>

<body>

<div class="arrow">

<div class="left"><a href="#"></a></div>

<div class="right"><a href="#"></a></div>

<div class="clear"></div>

</div>

<p>Текст</p>

</body>

</html>

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

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

Пример 3.29. Использование float

XHTML 1.0CSS 2.1IE 7IE 8IE 9Cr 12Op 11Sa 5Fx 5

<!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>Использование float</title>

<style type="text/css">

.col1, .col2, .footer { padding: 10px; }

.col1 { float: left; width: 100px; background: #E8D9A9; }

.col2 { margin-left: 120px; background: #ECC0A4; }

.photo { width: 150px; border: 1px solid #333; text-align: center;

margin-right: 10px; background: #fff; float: left; }

.clearleft { clear: left; }

.footer { background: #9A5044; color: #fff; clear: left; }

</style>

</head>

<body>

<div class="col1"><h3>Меню</h3><p>Лучшие фотографии</p>

<p>По годам</p><p>По рейтингу</p><p>По комментариям</p></div>

<div class="col2">

<div class="photo">

<p><img src="images/thumb1.jpg" alt="" /></p>

<p class="caption">Софийский собор</p>

</div>

<div class="photo">

<p><img src="images/thumb2.jpg" alt="" /></p>

<p class="caption">Польский костёл</p>

</div><div class="clearleft"></div>

<p>Новая строка</p>

</div>

<div class="footer">Подвал</div>

</body>

</html>

Результат примера показан на рис. 3.41. Свойство clear действует не только на класс photo, но и на класс col1, т.е. на все элементы выше, у которых установлено float. Поэтому «Новая строка» начинается не сразу же после фотографий, а после завершения левой колонки.

Рис. 3.41. Ошибка с отображением строки

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

<div class="col2">

<div style="overflow: hidden">

<div class="photo">

<p><img src="images/thumb1.jpg" alt="" /></p>

<p class="caption">Софийский собор</p>

</div>

<div class="photo">

<p><img src="images/thumb2.jpg" alt="" /></p>

<p class="caption">Польский костёл</p>

</div>

</div>

<p>Новая строка</p>

</div>

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]