Используем CSS Flexible Box Layout Module. Часть 1: Введение

от автора

В данной статье мы рассмотрим использование модели CSS Flex Box, предназначенной для дизайна пользовательского интерфейса в браузере. В этой модели дети контейнера flex (гибкий) могут располагаться в любом направлении, адаптируя свои размеры: расти, чтобы занять неиспользуемое место или сжиматься, чтобы предотвратить переполнение родительского элемента. Можно легко перемещать детей по вертикальной и горизонтальной оси. Возможность вложения контейнеров flex друг в друга (по горизонтальной оси внутри вертикальной и наоборот) позволяет создавать макеты в двух измерениях.

В CSS 2.1 есть 4 режима разметки — алгоритма, определяющего размер и позиции элементов на основе их отношений с соседними элементами:

  • блочная (block) разметка, спроектированная для документов;
  • inline разметка для текста;
  • табличная (table) разметка для 2D данных в табличном формате;
  • позиционная (positioned) разметка для явного позиционирования элементов без учета других в документе.

Этот модуль предоставляет новый режим разметки flex, спроектированный для сложных приложений и веб-страниц.

Обзор

Разметка flex внешне похожа на блочную разметку. В ней отсутствуют многие сложные свойства, относящиеся к тексту и домументам, которые могут быть использованы в блочной разметке, такие как поплавки (float) и колонки. В то же время эта разметка содержит мощные и простые инструменты для распределения пространства и выравнивания контента способами, которые часто нужны для веб-приложений и сложных страниц.

Содержимое контейнера flex:

  • может быть размещено в любом направлении (flow direction) (слева направо, справа налево, снизу вверх, сверху вниз).
  • может иметь обратный (reversed) или переставленный (rearranged) порядок отображения на уровне стиля (визуальный порядок может не зависеть от источника).
  • может быть размещено линейно вдоль единой (основной, main) оси или обернуто (wrapped) во множество строк вокруг вторичной (cross) оси;
  • может изменять свои размеры в зависимости от доступного пространства;
  • может быть выровнено по отношению к родительскому контейнеру или к соседним;
  • может быть динамически сжато и разжато по основной (main) оси, сохраняя размер контейнера по вторичной (cross) оси.
Пример 1

В этом примере каталога каждый элемент имеет название, фотографию, описание и кнопку заказа. Каждый элемент имеет одинаковый размер, фотография над текстом, кнопка покупки выровнена в нижней части элемента вне зависимости от длины описания элемента.

Разметка Flex помогает в следующих аспектах дизайна:

  • каталог использует разметку flex для размещения элементов по горизонтали и обеспечивает равную высоту элементов в строке. Каждый элемент — сам по себе контейнер flex, размещающий элементы вертикально.
  • Для каждого элемента на странице-источнике контент логически располагается иначе, чем требуется в визуализации: сперва название, далее описание и фото. Это обеспечивает удобный порядок при подготовке контента, а не для браузера. Для более убедительного визуального представления мы используем order (порядок) для перемещения картинки снизу на верх контента и align-self для размещения по центру по горизонтали.
  • Использование auto margin (авто поля) до кнопки заказа позволяет ей быть снизу каждого из контейнеров вне зависимости от высоты описания.

index.html

<!DOCTYPE html> <html> <head lang="en">     <meta charset="UTF-8">     <title>CSS Flexible Layout Module. Example 1.</title>     <link rel="stylesheet" href="index.css"/> </head> <body> <section id='deals'>     <section class='sale-item'>         <h1>VPS-512</h1>         <p>Быстрая и надежная VPS по доступной цене.</p>         <img src='images/vps512.png'              alt='VPS512.' width="300">         <button>ЗАКАЗАТЬ ПРЯМО СЕЙЧАС ЗА 200 РУБЛЕЙ В МЕСЯЦ</button>     </section>     <section class='sale-item'>         <h1>VPS-2048</h1>         <p>Больше ресурсов, чтобы ваши проекты летали.</p>         <img src='images/vps512.png'              alt='VPS2048.' width="300">         <button>ЗАКАЗАТЬ ПРЯМО СЕЙЧАС ЗА 600 РУБЛЕЙ В МЕСЯЦ</button>     </section> </section> </body> </html> 

index.css

#deals {     display:  flex;        /* Flex layout so items have equal height  Благодаря разметке Flex элементы имеют одинаковую высоту. */     flex-flow: row wrap;  /* Размещаем элементы горизонтально и позволяем переносы на несколько строк. */ } .sale-item {     display: flex;        /* Для каждого элемента используем flex. */     flex-flow: column;    /* Размещаем контент элемента вертикально.  */     margin-right: 4mm; } .sale-item > img {        /*Для каждой картинки внутри класса sale-item */     order: -1;            /* Размещаем элемент перед всеми остальными в визуальном отображении. */     align-self: center;   /* Горизонтально размещаем картинку по центру.        */ } .sale-item > button {     /*Для каждой кнопки внутри класса sale-item. */     margin-top: auto;     /* Авто отступ сверху прижимает кнопку к низу контейнера. */     background: green;     color: white;     border: none;     padding: 2mm;     font-weight: bold; } .sale-item > h1, p {     align-self: center;     text-align: center; }  

Модуль Flex расширяет определение свойства display в CSS 2.1, добавляя новый блочный (block-level) flex и встроенный (inline-level) inline-flex тип отображения и определяет новый тип форматирования контента со свойствами управления его разметкой. Никакие из этих свойств, определенных в модуле, не применяются к псевдо-элементам ::first-line и ::first-letter.

Если вы нашли ошибку в статье, пожалуйста напишите в ЛС или на почту. Если вы не можете оставлять комментарии на Хабре, напишите в Сообществе InfoboxCloud.

Продолжение следует…

ссылка на оригинал статьи http://habrahabr.ru/post/262545/


Комментарии

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *