Скажем, у вас есть div
, дать ему определенное width
и положить элементы, в моем случае, img
и другой div
.
Идея состоит в том, что содержимое контейнера div
приведет к тому, что контейнер div
растянется и станет фоном для содержимого. Но когда я это делаю, содержащийся div
сжимается, чтобы соответствовать не плавающим объектам, а плавающие объекты будут либо полностью, либо наполовину, наполовину, и не будут иметь никакого отношения к размеру большого div
.
Почему это? Есть ли что-то, что я пропускаю, и как я могу получить плавающие предметы, чтобы растянуть height
содержимое div
?
overflow:hidden
overflow: hidden
здесь: ссылка . И спасибо большое, это сработало для меняoverflow: hidden
будет просто скрывать любую часть элемента, которая вытекает из родительского контейнера. Для меня это привело к тому, что некоторые фрагменты текста стали нечитаемыми.причина
Проблема в том, что плавающие элементы находятся вне потока :
Следовательно, они не влияют на окружающие элементы, как элемент, находящийся в потоке .
Это объясняется в 9.5 Float :
Показать фрагмент кода
Это также указано в 10.6 Расчет высоты и полей . Для «нормальных» блоков ,
Показать фрагмент кода
Хакерское решение: оформление
Способ решения этой проблемы - принудительное размещение некоторого элемента в потоке под всеми поплавками. Затем высота родительского элемента будет увеличиваться, чтобы обернуть этот элемент (и, следовательно, также плавать).
Это может быть достигнуто с помощью
clear
свойства :Показать фрагмент кода
Таким образом, решение заключается в добавлении пустого элемента с
clear: both
последним братом поплавковОднако это не семантика. Так что лучше сгенерировать псевдоэлемент в конце родительского :
Существует несколько вариантов этого подхода, например, использование устаревшего синтаксиса
:after
с одной двоеточием для поддержки старых браузеров или использование других дисплеев на уровне блоков, напримерdisplay: table
.Решение: корни BFC
Существует исключение из проблемного поведения, определенного в начале: если блочный элемент устанавливает контекст форматирования блока (является корнем BFC), то он также переносит свое плавающее содержимое.
Согласно 10.6.7 «Авто» высоты для блочного форматирования корней контекста ,
Показать фрагмент кода
Кроме того, как объяснено 9.5 Поплавки , корни BFC также полезны из-за следующего:
Показать фрагмент кода
Контекст форматирования блока устанавливается
Блокировать коробки с,
overflow
кромеvisible
, например,hidden
Блокировать контейнеры, которые не являются блок-блоками: когда
display
установлено значениеinline-block
,table-cell
илиtable-caption
.Плавающие элементы: когда
float
установлено вleft
илиright
.Абсолютно позиционированные элементы: когда
position
установлено наabsolute
илиfixed
.Обратите внимание, что они могут иметь нежелательные побочные эффекты, такие как отсечение переполнения содержимого, вычисление автоматической ширины с помощью алгоритма сжатия по размеру или выход из потока. Таким образом, проблема в том, что невозможно иметь элемент уровня блока в потоке с видимым переполнением, который устанавливает BFC.
Дисплей L3 решает эти проблемы:
К сожалению, пока нет поддержки браузера. В конце концов мы сможем использовать
источник
Поместите ваш плавающий
div(s)
в adiv
и в CSS, дайте емуoverflow:hidden;
это будет работать нормально.
источник
Рекомендация W3Schools:
ставить
overflow: auto
на родительский элемент, и он будет «окрашивать» весь фон, включая поля элементов. Также плавающие элементы останутся внутри границы.http://www.w3schools.com/css/tryit.asp?filename=trycss_layout_clearfix
источник
Там ничего не пропало. Float был разработан для случая, когда вы хотите, чтобы изображение (например) располагалось рядом с несколькими абзацами текста, поэтому текст обтекает изображение. Этого бы не произошло, если бы текст «растянул» контейнер. Ваш первый абзац закончится, а затем ваш следующий абзац начнется под изображением (возможно, несколько сотен пикселей ниже).
И именно поэтому вы получаете результат, который вы есть.
источник
В некоторых случаях, например, когда (если) вы просто используете,
float
чтобы элементы проходили по одной и той же «линии», вы можете использоватьвместо того
В противном случае, использование
clear
элемента в конце работает, даже если он может пойти вразрез с необходимостью элемента, который должен выполнять работу CSS.источник
Вот более современный подход:
Нет больше исправлений.
ps Использование переполнения: скрыто; скрывает коробку-тень так ...
источник
Спасибо, LSerni, вы решили это для меня.
Для достижения этой цели :
Вы должны сделать это:
источник
Как говорит Лукас, вы описываете предполагаемое поведение свойства float. Многих людей смущает то, что float вышел далеко за пределы первоначального предполагаемого использования, чтобы компенсировать недостатки в модели макета CSS.
Посмотрите Floatutorial, если вы хотите лучше понять, как работает это свойство.
источник
Вы можете легко это сделать, сначала вы можете заставить div сгибаться и применять выравнивание контента вправо или влево, и ваша проблема решена.
источник