Ответ 1
CSS2.1 определяет порядок рисования элементов следующим образом:
В каждом контексте стекирования следующие слои окрашиваются в обратном порядке:
- фон и границы элемента, образующего контекст укладки.
- дочерние стекирующие контексты с отрицательными уровнями стека (в первую очередь отрицательные).
- входящие, не-встроенные, не-позиционные потомки.
- непозиционированные поплавки.
- встроенные потоки inline-уровня, не связанные с ними, включая встроенные таблицы и встроенные блоки.
- дочерние стекирующие контексты с уровнем стека 0 и позиционируемыми потомками с уровнем стека 0.
- дочерние стекирующие контексты с положительными уровнями стека (сначала наименьшие положительные).
Поплавки не создают контексты стекирования самостоятельно. Они будут делать это только в том случае, если они позиционируются и имеют индекс z, который не является авто (не считая любого из многочисленных других способов, которыми элемент может это сделать). В противном случае они участвуют в том же контексте стекирования, что и другие элементы, включая строки, со следующим оговоркой (из той же ссылки выше):
В каждом контексте стекирования позиционированные элементы с уровнем стека 0 (в слое 6), не позиционированные поплавки (уровень 4), встроенные блоки (уровень 5) и встроенные таблицы (уровень 5), окрашиваются так, как если бы эти элементы сами создавали новые контексты стекирования, за исключением того, что их позиционированные потомки и любые потенциальные контексты стека для детей принимают участие в текущем контексте стекирования.
Поскольку все элементы вашей скрипки участвуют в одном и том же контексте стекирования, а ваш плавающий элемент не расположен (# 4), встроенное содержимое переполняющего div (# 5) окрашено над плавающим элементом и его дочерними элементами, хотя плавающий элемент появляется позже в порядке источника.
Фон переполняющего div (# 1) покрашен ниже, чем у float, однако, поскольку фон float считается частью самого поплавка в соответствии со вторым приведенным выше предложением. Вы можете видеть это давая поплавок отрицательный запас:
#floated {
background-color: pink;
width: 300px;
float: left;
margin-top: -50px;
}