Ответ 1
Причина, по которой оболочка не растягивается, чтобы содержать ее поплавки по умолчанию, заключается в том, что поплавки вынимаются из нормального потока обертка, поэтому обертка действует так, как будто их никогда не было. Если в оболочке нет другого содержимого, это означает, что оболочка не будет иметь никакой высоты.
Обратите внимание, что overflow: auto
не очищает поплавки - это просто заставляет элемент содержать свои поплавки, создавая для них новый контекст форматирования блоков, чтобы они не вторгались в другие элементы в родительском контексте. 1 Это то, что заставляет родителя растягиваться, чтобы содержать их. Вы можете очистить только float, если вы добавите очищающий элемент после float. Родительский элемент не может очистить свои плавающие дочерние элементы.
Причина, по которой создание нового BFC приводит к тому, что элемент содержит свои поплавки, подробно описан здесь, и причина, по которой overflow: auto
может привести к созданию BFC подробнее здесь.
1 ОК, возможно, "просто" не было лучшим наречием.