Как создать идеальную сетку CSS на своем веб-сайте [Примеры макетов]
С момента изобретения Интернета веб-разработчики искали наиболее эффективный способ отображения контента в веб-браузерах. Часто они соглашаются на обходные пути вместо более эффективных решений.
Макеты с плавающей запятой и макеты на основе таблиц – два таких примера. Однако ни один из этих подходов не идеален, поскольку поплавки и таблицы никогда не были приспособлены для использования в качестве инструментов компоновки.
Фактически, использование элемента таблицы HTML5 для целей макета устарело – это означает, что использование этого элемента в стилистических целях считается плохим для структуры вашего сайта, а также может быть плохим для SEO.
Итак, что делать команде веб-разработчиков, ориентированной на маркетинг?
Решение: макет сетки CSS.
Что такое CSS-сетка?
Макет сетки CSS (также называемый «сеткой») был предложен рабочей группе CSS корпорацией Майкрософт, а рабочий проект макета сетки был впервые опубликован в апреле 2011 года.
Со временем эта спецификация была улучшена благодаря отзывам разработчиков и поставщиков браузеров, которые вместе работают над тем, чтобы сделать сетку действительно эффективным решением для компоновки.
Сетка действует как дополнение к CSS, которое позволяет вам контролировать размер и размещение элементов сетки. Вы можете использовать медиа-запросы для автоматической адаптации ваших сеток к различным контекстам.
Преимущества CSS-сетки
Благодаря своей гибкости сетка CSS позволяет веб-дизайнерам создавать практически любой тип макета, который им нужен. Он отлично подходит для разделения основных областей страницы на более мелкие разделы или определения отношений между элементами с точки зрения размера и положения.
Хотя он выравнивает элементы страницы по столбцам и строкам, как таблицы, сетка не ограничена определенной структурой контента. Это позволяет создавать более широкий спектр макетов веб-сайтов, чем это было бы практично с использованием одних только таблиц.
Кроме того, без структуры содержимого макет сетки может легко адаптироваться к изменениям устройства, пространства и ориентации, не требуя семантического изменения содержимого. Вы можете переставлять элементы сетки независимо от их исходного порядка, что позволяет подогнать макет к контексту без изменения базовой разметки.
Мощная функция автоматического размещения позволяет легко заполнять доступное пространство, устраняя необходимость в сложных вычислениях. Сетка даже позволяет вам перекрывать элементы, когда вам нужно, что определенно невозможно с таблицами.
Теперь, когда мы знакомы с сеткой CSS, давайте рассмотрим, как ее использовать, в разделе ниже.
Как использовать CSS Grid
W3Schools показывает, что если вы хотите настроить макет сетки, вы должны создать родительский элемент (контейнер сетки) и один или несколько дочерних элементов (элементы сетки).
Установка свойства отображения HTML-элемента делает его контейнером сетки.
Элементы сетки являются прямыми дочерними элементами контейнера сетки. Они расположены вертикально в столбцы и горизонтально в ряды.
Пространство между строкой и столбцом называется зазором. Вы можете отрегулировать зазор, используя следующие свойства:
- grid-column-gap, определяющий промежуток между столбцами;
- grid-row-gap, определяющий промежуток между строками; или же
- grid-gap, которое является сокращенным свойством для grid-column-gap и grid-row-gap.
Между столбцами и строками находятся строки, называемые строками столбцов и строками соответственно. Мы можем увидеть пример этого ниже.
При размещении элемента сетки внутри контейнера вы ссылаетесь на номера строк.
Как центрировать сетку в CSS
Сетка является двухмерной, что означает, что макет завершен двумя осями: осью Y (ось блока) и осью X (встроенная ось).
В CSS свойство align используется для определения оси блока, а свойство justify определяет встроенную ось.
Чтобы начать центрировать элементы сетки, используйте свойство align-items. Некоторыми из значений, которые вы можете присвоить этому свойству, являются start, end и stretch.
Когда значение свойства align-items установлено на start, это помещает элементы в вертикальное начало их соответствующей области сетки, а установка end помещает их в конец. Когда значение равно stretch, элементы распределяются по области сетки.
Свойство justify-items работает аналогично свойству align-items и принимает те же значения на встроенной оси.
Чтобы нацелить только один элемент, чтобы вы могли его центрировать, используйте свойства align-self и justify-self, соответственно, на уровне элемента.
Последний шаг – адаптация вашей сетки к мобильному макету. В конце концов, если вы создаете потрясающий дисплей, вы хотите, чтобы им можно было поделиться через мобильный интерфейс.
Как сделать CSS-сетку адаптивной
Одна из лучших особенностей сетки – то, что она довольно быстро реагирует на устройства с самого начала. W3Schools разделяет эти дополнительные направления, чтобы гарантировать оперативность при использовании сетки.
Чтобы создать адаптивную сетку, сначала установите для свойства box-sizing всех HTML-элементов значение border-box. Это включает отступы и границы по ширине и высоте элементов.
Добавьте этот код в свой CSS:
* {
размер коробки: рамка-рамка;
}
Затем вы создадите простую адаптивную веб-страницу для практики:
Для веб-страницы всего с двумя столбцами будет достаточно приведенного выше примера. Однако, если вы хотите иметь больший контроль над веб-страницей, вы можете использовать 12 столбцов в сетке.
Сначала вы должны рассчитать, какой процент занимает каждый столбец. Например, 100% / 12 столбцов = 8,33% на столбец.
Затем создайте класс для каждого столбца class = "col-" следующим образом:
Мы упоминали макеты на основе поплавков в начале этой статьи. Хотя макет сетки CSS не полностью основан на этой системе, он использует некоторые похожие свойства.
В этом примере вы установите для своих столбцов плавание влево с отступом 15 пикселей, что дает каждому элементу пространство для дыхания:
Каждая строка обернута в
Затем вы должны убедиться, что вы очистили float, убедившись, что все столбцы внутри строки находятся в потоке страницы:
Оттуда вы можете добавить дополнительный стиль, чтобы настроить сетку в соответствии с брендом вашего веб-сайта.
Если это кажется слишком большим трудом, возможно, вы захотите построить с помощью внешней среды разработки, такой как Bootstrap CSS. Вы можете использовать встроенную систему сеток Bootstrap, поэтому вам не придется создавать сетки с нуля. Таким образом, вы можете сосредоточиться на содержимом сетки, а не на самой сетке.
Узнайте больше о разнице между CSS Grid, Bootstrap и Flexbox.
Примеры макетов CSS Grid
Теперь, когда мы рассмотрели основы CSS-сетки, давайте рассмотрим основные примеры макета CSS-сетки. Некоторые из приведенных ниже примеров сделаны веб-дизайнером Рэйчел Эндрю и процитированы соответственно.
Схема размещения на основе линий
При создании сеток CSS элементы обычно размещаются в сетке на основе строк столбцов и строк. Пример ниже представляет собой простую сетку с тремя столбцами и двумя строками. Он содержит шесть элементов, ни один из которых не охватывает несколько дорожек сетки.
Вот HTML-код, определяющий сетку. Обратите внимание, что каждый элемент сетки имеет собственное имя класса. Это позволит вам использовать селекторы классов для применения уникального стиля к каждому элементу сетки в вашем CSS.
Ниже приведен CSS, определяющий размещение шести элементов сетки. Обратите внимание, что существует шесть наборов правил, которые определяют свойства grid-column-start, grid-column-end, grid-row-start и grid-row-end с номерами строк для каждого элемента сетки.
Вот результат на передней панели:
Использование сокращенных свойств Grid-Row и Grid-Column
Мы можем создать тот же макет сетки, что и выше, используя сокращенные свойства grid-column и grid-row.
Эти сокращенные свойства могут сэкономить ваше время и сделать ваш код более чистым. Вместо того, чтобы записывать свойства grid-column-start и grid-column-end на двух отдельных строках, вы можете объединить их в одну строку под сокращением grid-column. Чтобы определить это сокращенное свойство, сделайте первое число строкой столбца, где начинается элемент сетки, а второе число представляет строку столбца, где элемент сетки заканчивается. Разделяйте значения косой чертой.
Вы можете сделать то же самое для сокращенного свойства grid-row.
Вот тот же CSS из приведенного выше примера, переписанный с использованием сокращенных свойств grid-column и grid-row:
HTML останется прежним, и сетка будет выглядеть так же во внешнем интерфейсе.
Использование сокращенного свойства Grid-Area
Мы также можем создать такой же макет сетки, используя сокращенное свойство grid-area.
Это сокращенное свойство может сэкономить вам еще больше времени, требуя меньше кода. Просто порядок значений свойств запомнить немного сложнее.
Для каждого из шести наборов правил все, что вам нужно сделать, это определить свойство grid-area с четырьмя значениями. Порядок значений: строка строки, где начинается элемент сетки / строка столбца, где начинается элемент сетки / строка строки, где заканчивается элемент сетки / линия столбца, где заканчивается элемент сетки.
Вот тот же CSS из приведенного выше примера, переписанный с использованием сокращенного свойства grid-area:
HTML останется прежним, и сетка будет выглядеть так же во внешнем интерфейсе.
Использование имен столбцов и строк
В дополнение к использованию номеров строк у вас также есть возможность дать имена линиям сетки и использовать их вместо них.
Это потребует от вас изменения CSS, определяющего сетку в целом, и CSS, определяющего размещение шести элементов сетки. Во-первых, под селектором классов .wrapper вы найдете свойства grid-template-columns и grid-template-rows. В предыдущих примерах только свойство grid-template-columns было определено со значением 100 пикселей трижды. Это означает, что каждый столбец имел одинаковую ширину 100 пикселей. Вот как это выглядело в CSS:
В этом примере нам нужно определить свойства grid-template-columns и grid-template-rows с именами и значениями строк. Каждый столбец будет называться «col1-start», «col2-start» и «col3-start» соответственно и установлен на 100 пикселей. Каждая строка будет называться «row1-start» и «row2-start» соответственно и установлена в «auto». Вот CSS:
.wrapper {
display: grid;
grid-gap: 10px;
grid-template-columns: [col1-start] 100px [col2-start] 100px [col3-start] 100px;
grid-template-rows: [row1-start] auto [row2-start] auto [row2-end];
background-color: #fff;
color: #444;
}
Теперь вот тот же раздел CSS из приведенного выше примера, переписанный с использованием сокращенных свойств и имен линий сетки.
.a {
grid-column: col2-start;
grid-row: row1-start;
}
.b {
grid-column: col2-start;
grid-row: row2-start;
}
.c {
grid-column: col3-start;
grid-row: row2-start ;
}
.d {
grid-column: col1-start ;
grid-row: row1-start ;
}
.e {
grid-column: col1-start ;
grid-row: row2-start ;
}
.f {
grid-column: col3-start ;
grid-row: row1-start ;
}
HTML останется прежним, и сетка будет выглядеть так же во внешнем интерфейсе.
Макет размещения на основе линий, охватывающий более одной дорожки сетки
Теперь, когда мы понимаем различные способы написания кода для линейных макетов размещения, давайте рассмотрим более сложный пример: позиционирование элементов, охватывающих более одной дорожки сетки. Сетка ниже будет содержать только четыре элемента сетки. Один элемент будет занимать более столбца, а другой – более одной строки.
Вот HTML-код, определяющий сетку.
Ниже приведен CSS, определяющий размещение четырех элементов сетки. Обратите внимание, что используются сокращенные свойства grid-column и grid-row, и что в большинстве экземпляров определено только одно значение. Это потому, что вам нужно только определить начальное и конечное значения для элементов сетки, которые вы хотите охватить несколькими дорожками.
Например, чтобы элемент сетки A занимал два столбца, вы можете определить сокращенное свойство сетки-столбца, присвоив первому значению «1», а второму значению «3». Чтобы элемент сетки B занимал две строки, вы можете определить сокращенное свойство grid-row, сделав первое значение равным «1», а второе значение – «3».
Вот результат на передней панели:
Использование ключевого слова Span
Мы можем создать такую же сетку сверху, используя ключевое слово span.
Вместо того, чтобы записывать конечное значение для сокращенных свойств grid-column и grid-row для двух элементов, охватывающих более одной дорожки сетки, вы должны написать «span» и включить количество столбцов или сеток, которые вы хотите, чтобы элемент охватывал .
Вот тот же CSS из приведенного выше примера, переписанный с использованием ключевого слова span. Пункты A и B охватывают два столбца и две строки соответственно, поэтому конечным значением является "span 2". Обратите внимание, что многие свойства определяются только одним значением. В этом случае предполагается, что по умолчанию используется один столбец или строка.
HTML останется прежним, и сетка будет выглядеть так же во внешнем интерфейсе.
Макет Святого Грааля
Вы могли заметить, что многие веб-страницы имеют похожую структуру. Заголовок вверху, нижний колонтитул внизу и область содержимого между ними. Эта область содержимого расположена между двумя столбцами. Допустим, вы должны были посмотреть исходный код этих страниц. В идеале вы должны видеть сначала область содержимого, а затем две колонки. До использования CSS-сетки этого было сложно. С сеткой CSS это просто.
Ниже мы рассмотрим код и макет, который был придуман как «Макет Святого Грааля».
Вот HTML-код, определяющий заголовок, боковую панель навигации, основное содержимое (элемент