Сбрасываем обтекание содержания с помощью свойства overflo


Одной из обычных задач, которые возникают при создании шаблонов на основе плавающих блоков, является то, что контейнер не расширяется по высоте своих плавающих элементов наследников. Типовым решение задачи является добавление дополнительного элемента со сброшенным обтеканием после плавающих элементов или использование псевдокласса :after со сброшенным обтеканием для контейнера. Но для решения задачи можно также использовать свойство overflow. Это достаточно старый трюк и в данном уроке мы вернемся к нему, дополнив несколькими замечаниями. Демонстрационная страница №1 показывает проблему с родительским контейнером во всей красе. Для решения мы просто добавляем overflow: auto; или overflow: hiddden; к родительскому контейнеру. Сбррос обтекания контента 1 .container { 2 overflow: auto; 3 } Свойство overflow: hiddden; также можно использовать для предотвращения обтекания содержания вокруг плавающего элемента. Допустим, вы разрабатываете лист комментариев. По устоявшейся традиции у вас будет плавающая иконка аватара, прижимающаяся влево, и плавающий блок комментария, прижимающийся вправо. Для предотвращения обтекания текстом комментария иконки аватара нужно просто добавить overflow: hiddden; контейнеру комментария. Преимуществом такого метода является то, что контейнеру комментария не нужно устанавливать свойство width или float. Комментарий будет автоматически выравниваться за плавающим аватаром. Плавающие блоки 1 .image { 2 float: left; 3 } 4 5 .text { 6 overflow: hidden; 7 } Нюансы Хотя данный метод является отличным решением задачи, у него есть некоторые недостатки: Использование overflow: auto; приводит к появлению полоски прокрутки, если содержание выходит за пределы контейнера. Например, если у вас есть длинный непрерывающийся текст (например, длинный адрес URL) или большое изображение. Можно было бы использовать свойство overflow: hiddden;. но такое решение приведет к скрытию содержания, которое выходит за рамки контейнера. Демонстрационная страница №2 показывает такую ситуацию. Для решения задачи с длинным текстом нужно просто добавить свойство word-wrap: break-word; контейнеру, что вызовет принудительный перенос текста на новую строку. 1 .container { 2 word-wrap: break-word; 3 } А для предотвращения выхода большого изображения за границы контейнера нужно использовать свойство max-width: 100%;, которое изменит размеры изображения до максимальной ширины контейнера. 1 .container img { 2 max-width: 100%; 3 height: auto; 4 }