Разница inline-block и float
Галерея изображений состоит из картинок в рамках с подписями (возможно, с другой дополнительной информацией).
Пример галереи:
Технически вывод такой галереи можно реализовать при помощи списка UL/LI, где:
- каждый LI имеет
display:inline-block
- каждый LI имеет
float:left
Какие различия между этими подходами? Какой вариант выбрали бы вы?
Разница колоссальная.
В первую очередь она в том, что inline-block
продолжают участвовать в потоке, а float
– нет.
Чтобы её ощутить, достаточно задать себе следующие вопросы:
- Что произойдёт, если контейнеру
UL
поставить рамкуborder
– в первом и во втором случае? - Что будет, если элементы
LI
различаются по размеру? Будут ли они корректно перенесены на новую строку в обоих случаях? - Как будут вести себя блоки, находящиеся под галереей?
Попробуйте сами на них ответить.
Затем читайте дальше.
- Что будет, если контейнеру
UL
поставить рамкуborder
? -
Контейнер не выделяет пространство под
float
. А больше там ничего нет. В результате он просто сожмётся в одну линию сверху.Попробуйте сами, добавьте рамку в песочнице.
А в случае с
inline-block
всё будет хорошо, т.к. элементы остаются в потоке. - Что будет, если элементы
LI
различаются по размеру? Будут ли они корректно перенесены на новую строку в обоих случаях? -
При
float:left
элементы двигаются направо до тех пор, пока не наткнутся на границу внешнего блока (с учётомpadding
) или на другойfloat
-элемент.Может получиться вот так:
Вы можете увидеть это, открыв демо-галерею в отдельном окне и изменяя его размер:
При использовании
inline-block
таких странностей не будет, блоки перенесутся корректно на новую строку. И, кроме того, можно выровнять элементы по высоте при помощиli { vertical-align:middle }
: - Как будут вести себя блоки, находящиеся под галереей?
-
В случае с
float
нужно добавить дополнительную очистку сclear
, чтобы поведение было идентично обычному блоку.Иначе блоки, находящиеся под галереей, вполне могут «заехать» по вертикали на территорию галереи.