Ответ 1
Это ожидаемое поведение позиционирования поплавка.
Когда элемент перемещается влево (в вашем случае .inline
div), следующее содержимое стекает по правой стороне этого элемента, строки строк сокращаются, НО ширина содержащий блок, который устанавливается следующим элементом (в вашем случае .yellow
div) зарезервировано.
Это описано в спецификации:
Поскольку float не находится в потоке, заблокированные блокировкидо и после потока флоат-боксов вертикально, как , если поплавок не существуют.Тем не менее, текущие и последующие строки строк, созданные рядом с поплавок сокращается по мере необходимости, чтобы освободить место для поля поля поплавка.
Это означает, что элементы уровня блока (такие как <div>
, <p>
,...) - они не расположены - игнорируют float, тогда как линейные поля текут вдоль его стороны.
Пример, приведенный W3C:
Поле IMG перемещается влево. Ниже следует содержание отформатированный справа от поплавка, начиная с той же строки, что и плавать. Строковые поля справа от поплавка сокращаются из-за наличие поплавка, но возобновить их "нормальную" ширину ( содержащий блок, установленный элементом P) после поплавка.
Следовательно, если вы дадите элементу .yellow
фон, вы увидите, что он охватывает контейнер и продолжается через плавающий элемент.
Решение
От Уровень 2.1 CSS:
Граница поля таблицы, элемент замещения на уровне блока или элемент в нормальном потоке, который устанавливает новое форматирование блока контекст (например, элемент с "переполнением", отличный от "видимого" ), должен не перекрывать поле поля любых поплавков в том же форматировании блока контекст в качестве самого элемента.
Следовательно, если вы добавите свойство overflow
со значением, отличным от visible
, в div .yellow
, это предотвратит перекрытие div от плавающего элемента:
.yellow {
overflow: hidden;
}
Перекрытие имеет смысл специально в ситуациях, когда длина длины следующего содержимого достаточно велика для продолжения нормальной работы после перемещаемого элемента.
Если он был ограничен по умолчанию, содержимое не будет продолжено под элементом с плавающей точкой.