5 Flexbox методов, о которых вы должны знать
Flexbox является стандартом CSS, оптимизированным для проектирования пользовательских интерфейсов. Используя различные свойства Flexbox мы можем построить нашу страницу из небольших блоков, которые затем с легкостью сможем перемещать и изменять размеры, как нам угодно. Адаптивные веб-сайты и приложения пользуются огромным спросом в нынешней веб-индустрии.
В этой статье я хочу показать вам пять flexbox методов к решению проблем компоновки при верстке. Также я приведу практические примеры для демонстрации, в которых применяются эти методы.
1. Создание столбцов с одинаковой высотой
На первых порах, это может показаться не трудной задачей, но делать столбцы, которые имеют одинаковую высоту, иногда бывает сделать очень «геморройно». min-height в данном случае использовать будет не практично, так как с увеличением количества контента, находящегося в блоке, так же будет и увеличиваться его длина.
Flexbox не видит в этом проблемы. Все, что нам нужно, так это инициализировать гибкую модель. Обязательно убедитесь, что flex-direction и align-items имеют значения «по умолчанию».
div class="container">
.container{
display: flex;
flex-direction: row; /*Пункты внутри контейнера будут располагаться горизонтально*/
align-items: stretch; /*Пункты внутри контейнер будут принимать всю его высоту*/
}
2. Изменение порядка
Некоторое время назад, если бы мне пришлось динамически изменять порядок некоторых элементов, я, вероятно, попробовал бы некоторые CSS хаки, но потом бросили бы эту затею и в расстройстве сделали бы это с помощью javascript. С flexbox же эта задача сводится всего к применению всего лишь одного свойства СSS.
Это свойство называется order. Оно позволяет мне менять любое количество flex элементов и изменять их последовательность, в которой они появятся на экране. Этот параметр представляет собой целое число, определяющее положение элемента — более низкие числа означают больший приоритет.
<div class="blue">...</div>
<div class="red">...</div>
<div class="green">...</div>
.conteiner{display: flex;}
/*Обратный порядок элементов*/
.blue{order: 3;}
.red{order: 2;}
.green{order: 1;}
3.Горизонтальное и вертикальное центрирование
Вертикальное центрирование в CSS является одной из тех проблем, которые заставляют нас спросить себя: Как такую тривиальную вещь до сих пор так сложно сделать? И это на самом деле так. Если посмотреть в Google вертикальное центрирование CSS, то в результате поиска выскочит бесконечное количество различных методов, большинство из которых будут включать в себя таблицы и преобразования. которые предназначены для изготовления макета.
Flexbox предлагает более простое решение этой проблемы. Каждый гибкий макет имеет два направления на оси (X,Y) и два отдельных свойства для их выравнивания. Мы можем позиционировать любой элемент прямо в середине родительского контейнера.
<div>...</div>
.container{
display: flex;
justify-content: center; /*Центр по главной оси*/
align-items: center; /*Центр по вспомогательной оси*/
}
4. Создание полностью отзывчивой сетки (Responsive Grids)
Большинство разработчиков полагаются на готовые CSS фреймворки при создании адаптивных сайтов. Bootstrap является наиболее популярным, но есть и сотни других фреймворков, которые помогут вам справиться с этой задачей. Как правило, они хорошо работают и имеют множество опций, но имеют тенденцию быть довольно тяжелыми. Если вы все хотите сделать своими руками и вам не нужных громоздких фреймвокров, тогда Flexbox именно для вас!
Строка flexbox сетки представляет собой простой контейнер с display: block;. Внутри горизонтального столбца может быть любое количество элементов, размер которого устанавливается с помощью Flex. Гибкая модель адаптируется под размер окна браузера, так что эта схема должна отлично выглядеть на всех устройствах. Тем не менее, если все таки не хватит места на экране по горизонтали, то мы сможем решить эту проблему с помощью медиа-запроса.
<div class="col-1">...</div>
<div class="col-2">...</div>
<div class="col-1">...</div>
.container{display: flex;}
.col-1{flex: 1;}
.col-2{flex: 2;}
@media (max-width: 800px){
.container{
flex-direction: column;
}
}
5. Создание идеального Sticky Footer (прилипающий футер)
Flexbox имеет простое решение этой проблемы. Применение display: flex; к тегу body позволяет построить весь наш макет страницы, на основе свойств Flex. Да чего я все говорю, да говорю? Давайте уже лучше посмотрим на практике.
<div class="main">...</div>
<footer>...</footer>
html{height: 100%;}
body{
display: flex;
flex-direction: column;
height: 100%;
}
.main{
/*Основной раздел будет занимать все свободное место на странице*/
flex: 1 0 auto;
}
footer{
/*Футер будет занимать столько места по вертикали, сколько и должен и не пикселя больше */
flex: 0 0 auto;
}
Вывод
Все браузеры (кроме IE 9) теперь поддерживают режим Flexbox. Если вы не использовали Flexbox до этого момента, то я рекомендуем Вам попробовать.
Надеюсь, что мои советы CSS были для вас полезны и что они помогут вам создавать более качественные и более адаптивные макеты.
Жду ваших комментариев по этому поводу.
Вы так же можете читать мои статьи здесь
На заметку опытному верстальщику: Лучший способ сделать липкий футер
При разработке шаблонов, в какой-то момент Вы, должно быть сталкивались с таким вопросом. Так давайте же разберемся, как сделать так, чтобы футер был внизу тела шаблона, даже если на странице мало текста, который бы толкал футер достаточно вниз, вместо этого футер находится в центре экрана, оставляя огромные пробелы ниже.
В этом уроке я собираюсь рассказать Вам о современных техниках верстки, в частности для создания прилипающего футера, которые гарантированно будут Вам полезны, и гарантированно будут придерживать его в нижней части страницы.
ТЕХНИКА
Я начну строить нашу страницу с помощью верстки адаптивных блоков. Кто еще до сих пор не знает, но начиная с 21 апреля 2015 года Гугл ввел новые методы ранжирования сайтов, в основе которого лежит адаптивный дизайн сайта. Если Ваш сайт не имеет адаптивного дизайна, Ваш ресурс будет понижаться в выдаче поисковой системы. Вот оно чудо мобильных устройств.
Моя демонстрационная страница будет самая что ни на есть простая. Состоять он будет из трех основных частей:
1.Заголовок(head);
2.основной раздел (main section);
3.футер(footer);
Вот вам пример html кода, ничего в нем сверхъестественного нет.
<header>...</header>
<section class="main-content">...</section>
<footer>...</footer>
Первым делом добавим display: flex в body, и добавим направление направление для flex-элементов размещенных на нашей странице (по умолчанию flex-direction: row; расположение объектов слева направо для ltr, и справа налево для rtl). Кроме этого добавим height: 100%;, для того, чтобы заполнить весь экран.
html{ height: 100%; }
body{ display: flex; flex-direction: column; height: 100%; }
Теперь я задам параметры, которые будут определять, какое место будет занимать тот или иной блок на странице. Сделаю это с помощью свойства Flex. Ниже я привел ещё ряд свойств, с помощью которых можно будет задать:
flex-grow – Определяет для flex-элемента возможность «вырастать» при необходимости
flex-shrink – Определяет для flex-элемента возможность сжиматься при необходимости
flex-basis — Определяет размер по умолчанию для элемента перед распределением пространства в контейнере
Я хочу, чтобы мой footer занимал столько место, сколько ему нужно, а все оставшееся место было бы доступно для основного содержимого. Ниже я привожу пример того, как выглядит мой CSS код:
header{flex: 0 0 auto;}
.main-content{flex: 1 0 auto;}
footer{flex: 0 0 auto;}
Для того чтобы увидеть этот метод в действии, перейдите на демо-страницу, нажав на ссылку ниже. Для увеличения контента, кликните на большую розовую кнопку, и понаблюдайте, как адаптивный макет изменяется и толкает footer вниз.
Заключение
В заключении хочу сказать, что адаптивность блоков являются мощным союзником при создании шаблонов сайта с нуля. Все основные браузеры поддерживают адаптивность.
Я надеюсь, что Вам понравился именно этот способ создания простых липких футеров и что Вы нашли в этой статье что-то новое и полезное для себя. Оставляйте свои комментарии, если у вас есть свой крутой трюк с адаптивными блоками, напишите мне.


