A <div>
- это элемент уровня блока, ширина которого составляет 100% и имеет разрыв строки до и после, когда он находится в пределах нормального потока содержимого.
Технически, когда вы перемещаете <div>
, выВы удаляете элемент из нормального потока, чтобы у него больше не было переноса строки до и после, а также вокруг него обтекалось содержимое другой страницы.
Так почему второй элемент div только помещается следующимк первому, когда его ширина установлена или его собственное свойство float установлено как float left?
Floated <div>
всегда будут появляться рядом, только если есть достаточно места для размещенияих бок о бок.В противном случае следующий всплывший <div>
будет перенесен на новую строку.Это связано с тем, что плавающие <div>
находятся вне потока контента и определены так, как они ведут себя в спецификации .
Однако в своем вопросе вы сделали неверные предположения о том, чтопроисходит, когда вы устанавливаете ширину второго (не плавающего) <div>
.
самого второго <div>
всегда ниже (то есть позади ) плавающего <div>
,Принимая во внимание, что «содержание» второго <div>
всегда обтекает всплывающее <div>
.(см. три примера ниже)
Таким образом, независимо от того, установлена ли ширина второй div
, ее содержимое будет по-прежнему течь вокруг с плавающей точкой div
, как вы можете видеть на рисунке.здесь в трех примерах.(В целях иллюстрации первый <div>
красный с непрозрачностью 50%, а второй синий с толстой зеленой рамкой.)
Как видно из всех трех приведенных выше примеров, несмотря на существование всплывающего первого <div>
...
W3C Spec: 9 Модель визуального форматирования, 9,5 Float
Float - это поле, смещенное влево или вправо на текущей строке.Наиболее интересной характеристикой float (или «плавающего» или «плавающего» бокса) является то, что контент может течь вдоль его стороны (или запрещаться делать это с помощью свойства 'clear').Содержимое стекает вниз по правой стороне всплывающего окна и по левой стороне всплывающего окна.Ниже приведено введение в позиционирование поплавка и поток контента;точные правила, регулирующие поведение float, приведены в описании свойства 'float'.
Плавающее поле смещается влево или вправо, пока его внешний край не коснется края содержащего блока или внешнего края другого объекта с плавающей точкой.,Если имеется линейный блок, внешняя верхняя часть всплывающего блока выравнивается с верхней частью текущего линейного блока.
Если горизонтального пространства для поплавка недостаточно, он смещается вниз до тех пор, пока он не уместитсяили больше нет поплавков.
Поскольку поплавок не находится в потоке, непозиционированные блоки блоков, созданные до и после блока поплавка, текут вертикально, как если бы поплавок не существовал.Однако текущие и последующие линейные блоки, созданные рядом с поплавком, сокращаются по мере необходимости, чтобы освободить место для поля полей поплавка.
А вот целый ряд примеров ...
W3C Spec: 9 Модель визуального форматирования, 9.8 Сравнение нормального потока, поплавков и абсолютного позиционирования