/ Дизайн / FlexBlock. Современная верстка

FlexBlock. Современная верстка

HIT

21.07.2017

2392

Верстка сайтов постоянно эволюционирует: от табличной верстки к верстке 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;
}
Интересное CSS свойство 100vh. Это означает 100% высоты экрана. Также есть свойство vw — ширина экрана (viewport)
В IE 11 работает не корректно, даже если заменить в body min-height: 100vh; на height: 100vh;

Трансформация таблиц

С помощью свойства 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]
  • Похожие записи
  • Комментарии
  • Вложения
Первая последняя записи в ряду

Первая последняя записи в ряду

Добавляем классы для первых и последних записей в ряду. Вариант 1: Глобально, в файле функций Вставляем в файл functions.php. В данном примере разделение по 4 записи в ряду. add_filter('post_class', 'dobavit_pervii_klass'); Читать далее »

Легкая верстка блоков

Легкая верстка блоков

Представим, что нам нужно упорядочить записи плиткой, т.е. слева направо сверху вниз. При этом, чтобы записи в каждом ряду были выровнены по левому и правому краям. Сделаем максимально простым способом. Читать далее »

Приклеенный к низу footer

Приклеенный к низу footer

Приклеиваем подвал (footer) к нижнему краю экрана, не зависимо от высоты контентной части страницы. Добавляем после body <div class="main"> И внутрь этого дива помещаем HEADER и содержимое сайта, кроме FOOTER’a. Читать далее »

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

Пока нет комментариев. Будь первым!

FlexBlock. Современная верстка
Галерея изображений записи
Рекомендации для васГалерея изображений записиOpttour.ru
Спасибо! Наш менеджер свяжется с Вами в течении 5 минут.