- Изменить положение одного из дочерних элементов:
aside { align-self: center; } - Менять порядок дочерних элементов без изменения HTML-кода:
aside { order: 2 }
И я затронул лишь верхушку айсберга Flexbox.
Flexbox доступен в большинстве поддерживаемых браузеров. Им можно полноценно пользоваться в Firefox с 28 версии, Chrome с 29, Safari с 6.1 и Edge с 12.
Прим. перев. Разобраться с Flexbox поможет наше наглядное введение.
Решение проблемы с помощью Grid
В отличие от Flexbox, который по большей части работает в одном измерении, с CSS Grid вы можете использовать как ряды, так и колонки. Посмотрим, как решить нашу проблему с его помощью.
Начинается всё так же, как и в случае с Flexbox. Создаём контейнер:
body {
display: grid;
}
Вот весь CSS:
body {
display: grid;
background-color: #eeeeee;
}
aside {
color: #fff;
background-color: #8cacea;
}
И вот что мы получим:
Grid доступен в большинстве поддерживаемых браузеров, хотя и в меньшем количестве. Им можно полноценно пользоваться в Firefox с 52 версии, Chrome с 57, Safari с 10.1 и Edge с 16.
Наше последнее изображение пока никак не отличается от предыдущих. Так в чём же магия?
Что, если мы разделим пропорции ширины, как раньше:
aside {
width: 25%;
}
main {
width: 75%;
}
Да, результат отличается, но нам он не подходит. Боковая панель пока не расположена сбоку от главной зоны.
Вот мы и подошли к сути Grid-разметки. После инициализации Grid-контейнера при помощи display: grid необходимо определить ряды и строки внутри него.
Вот как это делается:
body {
grid-template-columns: 30% 70%;
}
Решение в одну строку — красиво, не правда ли? grid-template-columns определяет пропорции столбцов в сетке.
Но с помощью Grid можно сделать гораздо больше.
Сначала добавим немного цвета главному блоку, чтобы примеры были более наглядными:
main {
background-color: rgba(39,174,96 ,1);
color: #fff;
}
Вот что мы должны получить:
Посмотрим, что хорошего может предложить Grid:
- Можно определить разрыв между столбцами:
body { grid-column-gap: 15px; } -
Вот результат:
Нет необходимости в добавлении отступов к блокам
asideиmain: это делаетgrid-column-gap. - Можно сделать столько столбцов, сколько вам нужно. Примеры выше использовали только по одному элементу
asideиmain. Добавим ещё два:<body> <aside> Lorem ipsum dolor sit amet. </aside> <main> Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Aenean commodo ligula eget dolor. Nascetur ridiculus mus. Donec quam felis, ultricies nec, pellentesque eu, pretium quis, sem. Nulla consequat massa quis enim. Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Aenean commodo ligula eget dolor. Aenean massa. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Donec quam felis, ultricies nec, pellentesque eu, pretium quis, sem. Nulla consequat massa quis enim. </main> <aside> Lorem ipsum dolor sit amet. </aside> <main> Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Aenean commodo ligula eget dolor. Nascetur ridiculus mus. Donec quam felis, ultricies nec, pellentesque eu, pretium quis, sem. Nulla consequat massa quis enim. Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Aenean commodo ligula eget dolor. Aenean massa. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Donec quam felis, ultricies nec, pellentesque eu, pretium quis, sem. Nulla consequat massa quis enim. </main> <aside> Lorem ipsum dolor sit amet. </aside> <main> Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Aenean commodo ligula eget dolor. Nascetur ridiculus mus. Donec quam felis, ultricies nec, pellentesque eu, pretium quis, sem. Nulla consequat massa quis enim. Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Aenean commodo ligula eget dolor. Aenean massa. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Donec quam felis, ultricies nec, pellentesque eu, pretium quis, sem. Nulla consequat massa quis enim. </main> </body> -
Grid сам понял, что нам надо — не пришлось даже трогать CSS.
- Можно определить пробел между строками:
body { grid-row-gap: 15px; } -
Для упрощения можно использовать сокращение:
grid-gap: 15 pxвместоgrid-row-gapиgrid-column-gap. - Можно определять размеры строк:
body { grid-template-rows: 200px 300px 400px; }
-
Теперь высота первой, второй и третьей строк равна 200, 300 и 400 пикселей соответственно.
Для начала хватит и этого — но это далеко не всё.
Как начать работу с новыми стандартами?
Вы увидели пример того, как Flexbox и Grid предоставляют более удобные решения для разметки. Так как начать?
Для начала я рекомендую вам попрактиковаться с примерами из этой статьи. После вы можете начать изучать более сложные случаи. И не забывайте, что Grid пока поддерживается не всеми браузерами.
Почему вас должны волновать эти стандарты?
Если вы до сих пор не поняли, почему стоит использовать Flexbox и Grid, то вот несколько проблем, с которыми вы можете столкнуться при использовании предыдущих решений:
- если вы используете «плавающие» блоки и clearfix, то знаете, что с ними могут возникать проблемы;
- при абсолютном позиционировании элементы могут накладываться друг на друга;
- при использовании
display: tableостается много ненужной разметки; - при использовании
inline-blockвозникнут проблемы с пустыми местами.
Перевод статьи «How To Approach CSS layouts in 2017 — and beyond»
http://vanar.md/ro/web-cursuri/html-chisinau
Источник: https://tproger.ru/translations/css-flexbox-grid/
















