The Wayback Machine - https://web.archive.org/web/20090411120953/http://cssmake.ru:80/component/content/article/4/113.html

Завершение обтекания

( 0 - user rating )

Оригинал статьи: Clearing floats

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

Описание проблемы

Чтоб наглядно увидеть описанную выше проблему, опишем это с помощью css.
  1. div.container {
  2. border:1px solid #000000;
  3. }
  4. div.left {
  5. width:45%;
  6. float:left;
  7. }
  8. div.right {
  9. width:45%;
  10. float:right ;
  11. }
А вот и результат:
Левая колонка

Левая колонка

Левая колонка

Левая колонка
Правая колонка

Правая колонка

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

Старое решение

Используя старое решение это проблемы вам необходимо было добавлять пустой контейнер в то место, в котором обтекание должно было завершатся и на него устанавливать clear:both
Левая колонка

Левая колонка

Левая колонка

Левая колонка
Правая колонка

Правая колонка

Правая колонка
<div class="clear"></div>
Хоть этот способ и работает, но его нельзя назвать правильным. К тому же, все таки иногда возникают проблемы в браузерах, а именно добавляется отступ снизу. Обтекание также можно завершить используя псевдокласс :after, но так как этот способ не работает в браузере IE, воспринимать всерьез его нельзя. Первым кто опубликовал новое решение этой проблемы был Alex Walker.
И вот в чем это решение заключается:
  1. div.container {
  2. border:1px solid #000000;
  3. overflow:auto;
  4. width:100% ;
  5. }
width:100% используется для того, чтоб этот метод работал в IE.
Левая колонка

Левая колонка

Левая колонка

Левая колонка
Правая колонка

Правая колонка

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

Используемые уловки

  1. Метод работает с тремя значениями свойства overflow, а именно: auto, hidden, scroll. Естественно, если используется последнее значение, то будет видна полоса прокрутки
  2. Для некоторых браузеров обязатальным условием является наличие установленных значений для width или height
  3. Если используется height, то в браузере может появится полоса прокрутки если содержимое выходит за пределы контейнера.

Необходимость в свойствах width или heigh

Использование одного из этих свойств требуется для браузеров IE и Opera. Предпочтительней использовать свойство width, хотя это и может вызвать некоторые неудобства, так как для этого контейнера невозможно будет применять отступы.

IE MAC

Если вы хотите, что этот метод корректно работал в IE под МАСом - условие использования overflow: hidden является обязательным. Но этот браузер в любом случае будет отображать полосу прокрутки, не смотря на overflow: hidden.

Нежелательный скроллинг

Известна одна, но очень не приятная ошибка, которая может возникнуть при использовании этого способа - это появление нежелательного скролинга. Но есть и решение этой проблемы, для этого нужно следовать нескольким простым правилам:
  1. Высота контейнера должна оставатся гибкой.
  2. Обшая ширина содержимого не должна быть больше доступной ширина контейнера.
Следуя этим простым правилам вы сможете избежать появления нежелательных скроллингов.

Конечный вариант решения для завершения обтекания

В конце статьи я хочу привести полный листинг код для этого споособа.
  1. div.container {
  2. border:1px solid #000000;
  3. overflow:hidden;
  4. width:100%;
  5. }
  6. div.left {
  7. width:45%;
  8. float:left;
  9. }
  10. div.right {
  11. width:45%;
  12. float:right ;
  13. }
Левая колонка

Левая колонка

Левая колонка

Левая колонка
Правая колонка

Правая колонка

Правая колонка

Комментарии  

 
+2 # Last 2009-01-22 11:33 Мне кажется, лучше использовать пусть в ие добавляется отступ снизу, чем устанавливать ширину или высоту блока… Ответить | Ответить с цитатой | Цитировать
 
 
0 # muraha 2009-01-23 13:49 Не совсем согласен. Данный способ очень часто мне приходится использовать, особенно когда нет возможности поставить дополнительно пустую дивку, на cms к примеру.

Поэтому думаю не уместно говорить, что лучше, а что хуже. Но данный способ имеет право жить ;)
Ответить | Ответить с цитатой | Цитировать
 
 
+1 # Last 2009-01-23 15:35 Занимательно… Див с обтеканием ставите, а пустой не можете?

Жить-то он имеет право, но лучшим его не назвать. Если нам неизвестна высота и ширина дива, как быть?
Ответить | Ответить с цитатой | Цитировать
 
 
0 # muraha 2009-01-23 16:05 Ну спорить просто так желания у меня нет. Потому, что это бесплозно-каждый останется при своем мнении. Я уважаю Ваше мнение, но не считаю его абсолютно верным.

А вот с точки зрения семантики, использование пустых дивок с клиаром - семантически не корректно.
Ответить | Ответить с цитатой | Цитировать
 
 
+1 # muraha 2009-01-23 16:09 использование overflow:auto; - не лучший способ.
использование clear:both - аналогично, далеко не лучший.

Какой способ посоветуете?
Ответить | Ответить с цитатой | Цитировать
 
 
+1 # Last 2009-01-23 16:18 Если честно, то я пользуюсь обоими способами , а лучший тот, который решит проблемы верстки в каждом конкретном случае.

Я применял overflow в подвале сайта, где были дивы заданных размеров (подвал был цветной и отступ снизу выглядел отвратительно), а так же и clear:both в контенте, где были блоки произвольной ширины.

Просто clear:both по-моему более универсален, т.к. не требует установки ширины или высоты, за счет чего ему ++.
Ответить | Ответить с цитатой | Цитировать
 
 
+1 # muraha 2009-01-23 16:22 Вот и пришли к единственно верному решению: оба способа имеют свои достоинства и недостатки. Ответить | Ответить с цитатой | Цитировать
 
 
+1 # danila 2009-01-23 15:29 А мне это способ совсем не нравится. Считаю что использование overflow:hidden ; для завершения обтекание дурным тоном. Пустой дивке с clear:both не изменю Ответить | Ответить с цитатой | Цитировать
 
 
-3 # Табличный 2009-01-23 16:24 Спорьте пацаны, спорьте… а истина она одна - пользуйтесь таблицами и будет вам счастье )))))) Ответить | Ответить с цитатой | Цитировать
 
 
+2 # Last 2009-01-23 16:29 Я предпочитаю использовать таблицы там, где они нужны, а точнее для верстки таблиц. :) Ответить | Ответить с цитатой | Цитировать
 
 
-3 # Табличный 2009-01-23 16:34 А я пользуюсь таблицами всегда и у меня нет таких проблем как у вас. Это ж кошмар какой то, столько проблем с тем, чтоб картинку слева от текста вставить. А с таблицами все просто
и никаких проблем ;)
Ответить | Ответить с цитатой | Цитировать
 
 
+2 # muraha 2009-01-23 16:37 Спорить про то, что лучше - таблицы или дивы еще хуже чем о том как лучше завершить обтекание

Поэтому я тебе, Табличный, просто благодарен за то, что ты и такие как ты есть :)
Ответить | Ответить с цитатой | Цитировать
 
 
+4 # Last 2009-01-23 16:47 Я, пока не научился верстать на дивах, тоже думал, что таблицы рулят… А теперь - так не думаю.

И кстати проблем-то по сути нет. Мы просто обсуждаем варианты…
Ответить | Ответить с цитатой | Цитировать
 
 
0 # Алешка 2009-02-12 23:46 Минус таблиц в том, что пока таблица не загрузится целиком, она не будет отображена в браузере - критично для медленных каналов. Плюс div'а в обратном - выводится на экран по мере загрузки.
Я пользуюсь clear:both в дивах. При этом ставлю его вовсе не в пустышку. Обычно все равно что-то после "хитрого" дива есть, так вот в это "после" и толкаю. Вариант вам второй: в css или просто так примажьте этот clear:both к любому тэгу стилем. Например: < br style="clear:both; text-size=1px;" > и получите щасье. Правда с br были глюки как-то раз (особенность CMS?)… Выкрутился hr. И никаких отступов…
Против overflow:hidden абсолютно ничего Против. Собственно как и За.
Ответить | Ответить с цитатой | Цитировать
 

Добавить комментарий


Защитный код
Обновить

odnaknopka.ru/kolyan.cz
Morty Proxy This is a proxified and sanitized view of the page, visit original site.

Переводы


Финансовые инструменты: Кредитный калькулятор - расчет графика погашения

Selectutorial

Селекторы в действии

listutorial

Изображения для маркеров списка

статьи
Morty Proxy This is a proxified and sanitized view of the page, visit original site.