Почему нельзя задавать float:left всем блокам?
Это правда.
Расчёт блоков, выпадающих из нормального потока, но при этом влияющих на последующие, очень сложен и способен серьёзно нагрузить старые браузеры, вплоть до подтормаживания и кратковременного подвисания. Современные с такой проблемой сталкиваются в меньшей степени, но также потратят немало времени на reflow. А ресурсы ой как ещё пригодятся на другие задачи.
Вот вам пример сложности расположения плавающих элементов.
Вёрстка с большим количеством плавающих блоков крайне зависима от совпадения их размеров, появления блоков с clearence, значения overflow у предков и ряда других факторов, что делает её применимой только в очень жёстко ограниченных условиях.
С появлением flex использовать нестабильные плавающие блоки для построения колонок становится неразумным решением. Тем более, что flex не поддерживается только IE9 и ниже. Ну уж а inline-block гарантированно работает везде.
Кстати, особенно смешно наблюдать использование float для построения горизонтальных лент с расчётом с помощью JS итоговой ширины. А вот для обтекания текстом плавающие блоки могут и должны использоваться. Стоп. Так они же для этого и были придуманы:)
По тому что глупо симулировать таблицу из div.
Луше уж тогда верстать таблицей, а не выеживатся.
Флоатом нужно пользоваться с осторожностью, нужно отменять флоат. Если этого не происходит то блок схлопывается, а браузер может выдавать всякие финтиля.
Вообщем нехило снижается предсказуемость поведения верстки