Верстка сайтов постоянно эволюционирует: от табличной верстки к верстке div с float (frame), далее промежуточный этап верстка diplay:inline-block. Так или иначе суть верстки — модульная сетка. Современный CSS дает нам новый вид верстки flex блоками. Одними из наиболее значимых преимуществ подобной верстки: выравнивание по вертикали, распределение блоков, изменение направления (row, column), изменение порядка элементов.
Данный вид верстки мне сразу понравился хотя бы потому, что не нужно мудрить костыли типа <!— —> при использовании inline-block.
Что можно делать с FlexBlock
- Менять местами область основного контента и сайтбара для мобильной версии
- Делать определенные элементы привязанными влево, а другие вправо в рамках одной области
- Легко делать прижатый к низу подвал (см. ниже)
Основные свойства FlexBlock
Свойства родительского контейнера
flex-direction — направление, row — по-умолчанию
justify-content — выравнивание блоков по основной оси
align-items — выравнивание блоков по дополнительной оси
flex-wrap — перенос блоков на следующую строку, по-умолчанию nowrap
align-content — выравнивание строк по дополнительной оси
Свойства дочерних блоков
flex-grow — коэффициент расширяемости блока
flex-shrink — коэффициент сужаемости блока
flex-basis — базовый размер блока (к которому будут применены коэффициенты grow и shrink)
align-self — выравнивание блока по дополнительной оси (перекрывает общее значение родителя)
order — порядок элемента (работает, если у других элементов свойство задано)
Прижатый футер с FlexBlock
Данный момент с Flex решается очень просто:
<body class="Site">
<header>…</header>
<main class="Site-content">…</main>
<footer>…</footer>
</body>
.Site {
display: flex;
min-height: 100vh;
flex-direction: column;
}
.Site-content {
flex: 1;
}
Трансформация таблиц
С помощью свойства display: flex; можно переделать таблицу. Это особенно актуально в мобильной версии сайта, когда таблица начинает не помещаться.
.shop_attributes td, .shop_attributes th {
display: flex;
flex-wrap: wrap;
width: 100%;
}
Masonry с FlexBlock
Выводим блоки (можно с надписями):
<div class="flex-masonry"> <div><a href="/"><p>Туфли</p><img src="/wp-content/uploads/2018/01/tufli.jpg" alt="Masonry Brick #2"></a></div> <div><a href="/"><p>Сандалии</p><img src="/wp-content/uploads/2018/01/sandalii.jpg" alt="Masonry Brick #3"></a></div> <div><a href="/product-category/demisezonnaya-obuv/"><p>Демисезонная обувь</p><img src="/wp-content/uploads/2018/01/demisezonnaya-obuv.jpg" alt="Демисезонная обувь"></a></div> <div><a href="/product-category/mokasiny/"><p>Макасины, слипоны, кеды</p><img src="/wp-content/uploads/2018/01/makasinysliponykedy.jpg" alt="Макасины, слипоны, кеды"></a></div> <div><a href="/product-category/krossovki/"><p>Кроссовки</p><img src="/wp-content/uploads/2018/01/krossovki.jpg" alt="Кроссовки"></a></div> <div><a href="/product-category/zimnyaya-obuv/"><p>Зимняя обувь</p><img src="/wp-content/uploads/2018/01/zimnyaya-obuv.jpg" alt="Зимняя обувь"></a></div> <div style="height: 400px;"><a href="/product-category/tufli-shkolnaya-obuv/"><p>Школьная обувь</p><img src="/wp-content/uploads/2018/01/shkola.jpg" alt="Школьная обувь"></a></div> <div style="height: 400px;"><a href="/"><p>На первый шаг</p><img src="/wp-content/uploads/2018/01/na-pervyj-shag.jpg" alt="Masonry Brick #4"></a></div> </div>
Стили Masonry на основе FlexBlock
.flex-masonry {
display: flex;
flex-flow: row wrap;
margin-right: -8px; /* компенсация пробела между блоками */
margin-bottom: 30px;
padding-top: 10px;
}
.flex-masonry > div {
flex: auto;
height: 500px;
width: 25%;
margin: 0 8px 8px 0; /* пробелы между блоками */
overflow: hidden;
position: relative;
}
.flex-masonry div img {
object-fit: cover;
width: 100%;
height: 100%;
filter: brightness(75%);
-o-transition: all 1.0s;
transition: all 1.0s ease;
-webkit-transition: all 1.0s ease 0s;
}
.flex-masonry > div:hover img {filter: brightness(100%); transform: scale(1.2);}
.flex-masonry > div p {
position: absolute;
z-index: 9;
width: 100%;
height: 100%;
display: flex;
align-items: center;
justify-content: center;
text-align: center;
padding: 50px;
font-size: 2rem;
font-weight: 600;
color: #fff;
text-shadow: 1px 1px 10px rgba(0, 0, 0, 0.4);
opacity: 0;
-o-transition: all 1.0s;
transition: all 1.0s ease;
-webkit-transition: all 1.0s ease 0s;
}
.flex-masonry > div:hover p {opacity: 1;}
Центровка элемента по горизонтали внутри flex
Я пытался прижать к правому краю блок внутри flex с помощью свойства justify-self: flex-end; но тщетно. В этом случае, для подобного элемента, нужно использовать свойство margin-left: auto;
[site-socialshare]
