Float

Материал из Энциклопедия интернет-маркетинга MarketWiki

Float - это свойство CSS, изначально разработанное для обтекания текстом изображений и других элементов, которое стало одним из основных инструментов построения сеточных макетов в веб-вёрстке до появления Flexbox и Grid, позволяя элементам вырываться из обычного потока документа и позиционироваться по левому или правому краю родительского контейнера.

Свойство используется в веб-разработке при работе с устаревшими проектами (legacy code), в email-вёрстке (где до сих пор применяется из-за ограничений почтовых клиентов), а также в образовательных целях для понимания эволюции CSS. Например, вёрстальщик интернет-магазина в 2015 году использовал float для создания трёхколоночной сетки товаров: каждой карточке задавалось float: left и фиксированная ширина, а родительскому контейнеру - специальный хак clearfix для предотвращения схлопывания высоты.

Свойство float появилось в ранних спецификациях CSS (CSS1, 1996 год) и было заимствовано из настольных издательских систем. На протяжении почти 20 лет (1996-2015) float был основным инструментом для создания макетов на CSS, пока его не начали вытеснять Flexbox (2015-2017) и Grid (2017+).

Кратко

[править]

Float - это свойство CSS, которое прижимает элемент к левому или правому краю родителя, а остальной контент (текст, другие элементы) обтекает его с другой стороны. Раньше на float строили все сетки сайтов, но сегодня для этого используют Flexbox и Grid.

Что такое Float

[править]

Float - это CSS-свойство, которое определяет, как элемент должен располагаться относительно окружающего содержимого. Когда к элементу применяется float: left или float: right, он:

  • Вырывается из нормального потока документа - соседние блочные элементы ведут себя так, как будто плавающего элемента не существует.
  • Сжимается по ширине до размеров содержимого (если ширина не задана явно).
  • Прижимается к левому или правому краю родительского контейнера.
  • Создаёт «обтекание» - строчные элементы (текст, инлайн-блоки) располагаются вокруг плавающего элемента.

Основные значения свойства float:

Значение Поведение
left Элемент прижимается к левому краю родителя; текст и инлайн-элементы обтекают его справа
right Элемент прижимается к правому краю родителя; текст и инлайн-элементы обтекают его слева
none Значение по умолчанию - элемент не плавающий
inherit Наследует значение от родителя

Для «очистки» обтекания (чтобы следующий элемент не обтекал плавающий) используется свойство clear:

Значение clear Поведение
clear: left Элемент не допускает плавающих элементов слева
clear: right Элемент не допускает плавающих элементов справа
clear: both Элемент не допускает плавающих элементов ни с какой стороны
clear: none Значение по умолчанию

Как работает Float

[править]

Понимание работы float требует знания поведения элементов в потоке документа.

1. Нормальный поток

[править]

В обычном потоке блочные элементы (div, p, h1) располагаются вертикально, занимая всю ширину родителя. Строчные элементы (span, a, img) располагаются горизонтально и переносятся на новую строку, когда не помещаются.

2. Плавающий элемент вырывается из потока

[править]

Когда элементу задаётся float, браузер удаляет элемент из нормального потока (блочные элементы за ним «не видят» его и занимают его место), сдвигает элемент влево или вправо до упора в край родителя или в край другого плавающего элемента, а строчные элементы и содержимое блочных элементов «обтекают» плавающий элемент.

3. Проблема схлопывания (collapsing)

[править]

Классическая проблема float: если внутри родительского контейнера находятся только плавающие элементы, родитель «схлопывается» - его высота становится равной нулю, потому что плавающие элементы не влияют на высоту родителя.

4. Очистка (clear) и clearfix

[править]

Для решения проблемы схлопывания используются:

  • Свойство clear. Применяется к следующему элементу, чтобы он не обтекал плавающий.
  • Clearfix. Классический хак для родительского контейнера, заставляющий его охватывать плавающие элементы:
.parent::after {
  content: "";
  display: table;
  clear: both;
}

5. Поведение при нескольких float

[править]

Если несколько элементов имеют float: left, они выстраиваются горизонтально в ряд, пока есть место в родителе. При недостаточной ширине следующий элемент переносится на следующую строку.

Преимущества (в историческом контексте)

[править]
  • Кроссплатформенность: float поддерживается всеми браузерами с момента появления CSS.
  • Простота создания сеток: до появления Flexbox и Grid float был единственным способом сделать горизонтальные колонки.
  • Естественное обтекание текстом: для исходного предназначения работает идеально.
  • Предсказуемость в email-вёрстке: почтовые клиенты поддерживают float лучше, чем Flexbox или Grid.

Недостатки и ограничения

[править]
  • Сложность вертикального выравнивания: float не даёт инструментов для центрирования по вертикали.
  • Проблема схлопывания: необходимость постоянно использовать clearfix усложняла код.
  • Сложность адаптивных сеток: требовались медиазапросы и дублирование кода.
  • Зависимость от порядка в HTML: в отличие от Flexbox и Grid, float не позволяет менять визуальный порядок.
  • Отсутствие контроля над зазорами: маргины могли вызывать перенос строки.

Где используется

[править]
Сфера Применение float Пример
Обтекание изображений текстом Исходное предназначение, остаётся актуальным В блоге фотография выровнена влево, текст обтекает её справа
Email-вёрстка Основной инструмент построения макетов в письмах Рассылка интернет-магазина с двумя колонками
Поддержка устаревших проектов (legacy) Модификация и поддержка старых сайтов Обновление интернет-магазина, свёрстанного на float
Универсальные CSS-фреймворки (Bootstrap 3) Старые версии фреймворков использовали float Bootstrap 3 (2013-2018) построен на float
Печатные стили (print styles) При печати веб-страниц для позиционирования Изображения и подписи к ним при печати

Сравнение с современными альтернативами

[править]
Метод Принцип Преимущества Недостатки Когда использовать
Float Элемент вырывается из потока, обтекается контентом Широкая поддержка, работает в email Сложность вертикального выравнивания, clearfix Email-вёрстка, обтекание изображений, legacy
Flexbox Гибкий контейнер с управлением по осям Простое выравнивание, изменение порядка Не предназначен для двумерных сеток Навигация, карточки, компоненты
Grid Двумерная сетка с контролем строк и колонок Сложные сетки, именованные области Избыточен для простых раскладок Структура страницы, каталоги, дашборды
Inline-block Элементы выстраиваются в строку Проще в управлении отступами, нет clearfix Зависит от пробелов в HTML Альтернатива float для горизонтальных списков

Float в современной веб-разработке

[править]

Сегодня использование float ограничено несколькими сценариями:

  • Email-вёрстка. Почтовые клиенты имеют ограниченную поддержку современных CSS-технологий. Float, табличная вёрстка и inline-стили остаются стандартом.
  • Обтекание изображений и врезок. В статьях, блогах, новостных порталах float по-прежнему используется для обтекания текстом.
  • Поддержка legacy-проектов. Многие сайты, созданные до 2015-2017 годов, используют float для сеток.
  • Печатные стили. При создании стилей для печати (@media print) float остаётся удобным инструментом.

Для новых проектов современные подходы (Flexbox и Grid) рекомендуются как более гибкие, предсказуемые и простые в поддержке.

Часто задаваемые вопросы

[править]

Почему раньше все верстали на float, а сейчас нет?

[править]

У float были ограничения: сложное вертикальное выравнивание, необходимость clearfix, а для адаптивности требовалось много медиазапросов. Когда появились Flexbox и Grid, они решили эти проблемы, и float остался только для обтекания текстом и email-писем.

Как сделать три колонки на float?

[править]

Каждой колонке задаётся float: left, указывается ширина (например, 33.33%), а родительскому контейнеру добавляется clearfix, чтобы он не схлопнулся. Важно учитывать box-sizing, чтобы отступы не ломали ширину.

В чём проблема clearfix?

[править]

Когда у родителя только плавающие элементы, его высота становится равной 0. Clearfix - это хак, добавляющий псевдоэлемент с clear: both, заставляя родителя растянуться на высоту плавающих элементов. Это неудобно, так как требует дополнительного CSS-класса.

Используется ли float в современных проектах?

[править]

Для основных сеток - нет, используют Flexbox и Grid. Для обтекания изображений текстом - да. Для email-вёрстки - да, это основной инструмент. Также float нужен для поддержки старых проектов (legacy).

Как float работает в email-вёрстке?

[править]

Почтовые клиенты имеют ограниченную поддержку CSS. Float остаётся одним из немногих инструментов для создания двух- или трёхколоночных макетов в письмах, наряду с табличной вёрсткой. Для email-рассылок до сих пор используются техники, основанные на float и таблицах.

Связанные термины

[править]