Последние несколько месяцев я использую систему сетки Sass под названием Neat . Это сделано почти все, что мне нужно, и довольно легко начать. Однако в последнее время я обнаружил, что пишу дополнительные стили для увеличения аккуратной сетки. Вместо того, чтобы расширять его самостоятельно, я решил найти систему решетки Sass, которая была бы более мощной. Эта система — Сьюзи .
Grid Framework, а не Grid System
Прежде чем мы перейдем к тому, как использовать Susy, давайте поговорим о важности использования Grid-инфраструктуры Sass , а не Grid-системы . Поскольку я использовал Sass Grid Framework для разметки, я обнаружил 3 основных преимущества.
Во-первых, я могу дать свою разметку любым классам, которые мне нравятся. Неважно, если вам нравится BEM, SMACSS, OOCSS или любая другая структура именования классов: вы можете использовать такую среду, как Susy, не меняя разметку. С другой стороны, системы сетки (такие как Bootstrap, например) требуют, чтобы вы добавили имена их классов в вашу разметку.
Во-вторых, сеточные каркасы более удобны в обслуживании. Вы можете изменить ширину столбцов и другие стили визуального макета, изменив только некоторые строки Sass: ваши настройки или несколько миксинов. Но если вы попытаетесь изменить свой макет с помощью системы сеток на основе классов, вам придется переписать свою разметку.
В-третьих, инфраструктура сетки препроцессора легче и быстрее для ваших пользователей. При правильном использовании фреймворк будет выводить только те стили, которые вам нужны для вашего конкретного выбора макета. Система сетки, с другой стороны, будет включать в себя все стили для всех сеток на всех ширинах, что потребует от вас небольшого сокращения, если вы хотите, чтобы ваши сайты были красивыми и стройными.
Основной синтаксис
Давайте начнем с того, что нужно пройти с минимума, который вам нужно знать, чтобы построить простую схему на основе Susy. Попутно я буду сравнивать его с синтаксисом Neat для того же вывода: если вы также переключаетесь с Neat на Susy, это поможет вам перевести основные понятия.
Susy Config: $susy
Карта
Все ваши глобальные настройки для Susy хранятся в карте с именем $susy
. Это позволяет легко хранить данные конфигурации в одном месте. Если вы собираетесь сгенерировать сетку из 12 столбцов с разрешением 960 пикселей по 20 пикселей между каждым столбцом, вы должны использовать следующую карту:
$susy: ( columns: 12, gutters: .25, container: 960px );
Значение gutters
соответствует проценту от полной ширины столбца. Поскольку 12 столбцов в контейнере 960px будут по 80px каждый, следовательно, .25 даст нам (грубый) желоб 20px.
Обратите внимание, что вы можете использовать дробное значение gutter
(например, 1em / 8em) со значением column-width
и math: static
, но округленное 0,25, вероятно, проще, чем все это.
В Neat вы бы использовали ряд переменных для этой настройки:
$grid-columns: 12; $max-width: 960px; $gutter: 20px;
С одной стороны, переменная $gutter
Нейта является более мощной, чем значение $gutter
Сьюзи: она будет принимать значение px, em или%. Но с другой стороны, все эти незаданные переменные представляют больший риск конфликта плагинов Sass. Еще одна «ошибка» в переменных Neat заключается в том, что лучше всего объявить их, прежде чем импортировать Neat в свои основные файлы Sass.
Создание контейнеров: container()
Mixin
container()
mixin container()
будет использовать информацию в $susy
и настроит контейнер (clearfix, max-width и & centtered) для ваших элементов сетки. Его использование очень просто:
.content { @include container; }
Neat делает примерно то же самое с миксинами external outer-container()
и row()
. Лично я предпочитаю иметь только один миксин, чтобы беспокоиться об этом: в некоторых случаях row()
может стимулировать дополнительную разметку, имитирующую шаблон Bootstrap .container > .row > .col
, где дополнительная обертка не нужна.
Определение столбцов: span()
Mixin
Чтобы выровнять дочерние элементы вдоль сетки, используйте mixin span()
. В Сьюзи требуется 3 параметра: диапазон, местоположение, расположение.
.sidebar { @include span(5); // width = 5 columns of $susy: ( columns ) value } .sidebar { @include span(5 of 12); // width = 5/12 with margin specified by $susy: ( gutter ) } .sidebar { @include span(5 at 8 of 12); // width = 5/12 with margin removed from right // because 5 col starting at 8 = last column }
Параметр location
также может быть записан с ключевыми словами first
и last
:
.sidebar { @include span(5 last); }
В Neat я использовал span-columns()
. Для этого потребовалось несколько различных параметров: количество столбцов (с необязательным счетчиком столбцов контекста) и отображение (позволяет установить макет блока / ячейки таблицы).
Расширенные возможности
Теперь, когда мы рассмотрели основы настройки сетки с параметрами конфигурации в $susy
, container()
и нескольких дочерних $susy
с span()
, давайте рассмотрим некоторые из наиболее мощных вещей, которые Susy может легко сделать.
Изменение with-layout()
: with-layout()
Mixin
Что если вам нужно установить различное количество столбцов на разных страницах? Сьюзи делает это легко с миксином with-layout()
. Это позволяет вам временно переопределить вашу глобальную конфигурацию $susy
для одного блока кода. (Думайте об этом как о том, чтобы определить переменную)
.different-column-count { @with-layout(10); // deviates from the global 12 columns // & calculates span() based on 10 }
У Neat нет эквивалента этому: вам нужно явно включить новый счетчик столбцов для каждого дочернего @include span-columns(X of 10)
: @include span-columns(X of 10)
.
Изменение выхода: output: isolate
настройка output: isolate
Браузеры не лучшие в математике. Я знаю, они просто компьютерные программы: они должны быть идеальными. Но они округляют проценты до ближайшего пикселя, а в некоторых случаях это может помешать точному выравниванию сетки. Сьюзи поддерживает технологию плавающего CSS, называемую «изолировать», которая исправляет это с помощью некоторой причудливой магии отрицательного поля. Просто $susy
output: isolate
в настройках $susy
. Это может быть необязательно все время, но если вы недовольны каким-то выбором браузера, это, вероятно, сгладит ситуацию для вас.
Neat не предоставляет эту опцию вывода, но он допускает вывод сетки на основе таблицы CSS.
Обоснование столбцов: last-flow: to
Настройка
Иногда вам нужен макет сетки, где общее количество дочерних столбцов меньше, чем количество столбцов сетки, и вы хотите промежуток в середине. Другими словами, вы хотите, чтобы :last-child
плавал направо, а не лежал рядом с соседом слева. Для этого также $susy
настройка $susy
: last-flow: to
.
У Neat нет этой функции: вам нужно написать простой CSS для этого:
.container { :last-child { float: right; } }
Получение Column-Width: span()
Функция
Возможно, вам придется использовать ширину столбца в другой части вашего CSS, кроме макета сетки. Для этого Susy предоставляет функцию span()
(не путайте ее с mixin span()
!). Например, вы можете захотеть, чтобы все ваши встроенные изображения имели ширину 4/12 столбцов, но вы не размещаете их в сетке:
.container img { width: span(4 of 12); height: auto; }
Если бы у Нейта была эта функция, это могло бы быть делом, но это ставит Сьюзи вперед.
Получение ширины gutter()
: функция gutter()
Это работает так же, как функция span()
выше, но gutter()
возвращает ширину желоба, используемую сеткой. Вы можете использовать это, если вы делаете какое-то вертикальное выравнивание и хотите, чтобы оно соответствовало вашим сеточным желобам:
.article-title { margin-bottom: gutter(); }
В Neat вы можете получить это измерение, просто вызвав переменную $gutter
.
Реальные сетки: gallery()
Mixin
Это один из моих любимых миксинов Сьюзи. Большинство сеточных макетов просто делают несколько столбцов внутри контейнера clearfix. Что если вы хотите иметь несколько строк фактического содержимого сетки в одном контейнере? Сьюзи дает вам мощную gallery()
mixin. Это позаботится о тех неприятных вещах :last-child
поля для вас исправят. (Вы можете сделать это вручную с помощью CSS :nth-child(#{$grid-count}n) { margin-right: 0 }
, но почему бы не позволить Сьюзи сделать это за вас?)
.gallery-item { @include gallery(3 of 12); }
Neat имеет миксин omega(#{$grid-count}n)
для выполнения этого макета. Я бы предпочел использовать один миксин и сэкономить время. gallery()
Сьюзи gallery()
mixin делает работу чище, меняя ширину точек останова:
.grid-item { @include gallery(6); @media (min-width: 600px) { @include gallery(4); } @media (min-width: 800px) { @include gallery(3); } }
Адаптивные Сетки
Возможно, вы заметили, что я использовал стандартные медиа-запросы CSS (вложение Sass, но все же, просто медиа-запросы) для точек останова. Сьюзи не имеет полноценного менеджера точек останова; разработчики рекомендуют использовать Breakpoint и предоставляют susy-breakpoint()
вспомогательный миксин, который вызывает Breakpoint:
@include susy-breakpoint(720px, 8) { // At a min-width of 720px, Susy will use a 8-col grid .responsive-grid-item { @include span(4); } }
У Neat есть набор вспомогательных функций и миксинов точек останова, но я никогда не использовал их. Я использую свой собственный миксин точек останова и никогда не нуждался в инструментах Нейта.
Вывод
Управление сеткой и макетами столбцов с помощью Sass — это отличный способ упростить разработку, упростить обслуживание и ускорить запуск сайтов. Susy предоставляет мощный инструментарий для определения и использования различных макетов сетки, предоставляя вам свободу написания классов в разметке HTML, как вы считаете нужным.