Вступление
Сегодня приступим к знакомству с системой построения сеток jeet.gs.
Читатели могут спросить - отлично, но чем плоха Susy? Ответ прост - Susy работает на Ruby, она просто несовместима со Stylus.
Так как с недавнего времени я перешел с Sass(SCSS) на Stylus и совсем не жалею об этом, то сразу принялся искать замену Susy. Надо сказать, я быстро ее нашел и этой заменой оказалась jeet.gs. “Grid system для людей” - как ее “обозвали” в прекрасном task runner CodeKit. Кстати, сам факт присутствия jeet.gs в CodeKit говорит за себя.
Система jeet.gs изначально адаптивная, она проста в использовании и изучении. Если честно, Susy я так до конца и не освоил (только необходимые основы), так как она достаточно сложна в изучении, несмотря на прекрасную документацию. Еще можно сказать, что jeet.gs очень молода - ей всего 9 месяцев и поэтому я с вами, уважаемый читатель, иду в ногу со временем, я на cutting edge!
Существование и использование jeet.gs имеет мало смысла без системы контрольных точек (breakpoint). В Susy в этом качестве служит хороший инструмент Breakpoint. Под jeet.gs конечно же существует аналог под названием Rupture. Эта система также проста и наглядна, как и jeet.gs.
Стоит также оговориться, что под Stylus имеются не менее прекрасные проекты Typographic и Axis, с которыми я планирую познакомиться в свое время.
Jeet.gs - grid system под Stylus
Итак, фанфары прозвучали в честь обоих героев сегодняшнего дня. Пора приступать к более детальному знакоству с ними. И начнем с главного героя - системы сеток (grid system) jeet.gs.
Установка Jeet.gs под Stylus
Любое знакомство начинается с установки пакета. На официальной странице jeet.gs прекрасно оформлено описание инсталляции - она проста. Кстати, стоит оговориться, что jeet.gs можно установить и под Sass(SCSS). Но я этого делать не буду - мне это не интересно и не нужно.
Предполагается, что у читателя рабочей операционной системой является MacOSX или Linux OS (все команды в этой статье будут показаны применительно к этим двум родственным системам). Также предполагается, что в любой из этих систем уже установлены Node.js и Stylus (иначе вы немного забежали вперед, уважаемый читатель).
Установка jeet.gs выполняется одной строкой:
Далее библиотека jeet.gs импортируется в файл проекта
с помощью директивы 1
*.styl
:1
@import
После этого можно запустить мониторинг и компиляцию командой:
где
- это сокращение от 1
-u
, 1
--using
- от 1
-w
. То есть, мониторить (watch) все изменения файла 1
--watch
и при этом учитывать (1
style.styl
) возможности подключенной библиотеки jeet.gs.1
using
Пакет jeet.gs можно заставить работать несколько иначе - крутиться под Gulp. Для этого достаточно правильно оформить файл
:1
gulpfile.js
Возможности Jeet.gs
С документацией по jeet.gs можно ознакомиться на оф. сайте в разделе Jeet’s API или же на страничке GitHub - jeet/stylus.
Функция column()
Синтаксис:
Основой любой современной grid system являются колонки\столбцы -
. Так как jeet.gs изначально является адаптивной системой, то задать ширину column можно как дробную часть от ширины блока-контейнера - 1
column
, 1
1/3
, 1
1/6
, 1
1/10
и так далее. Не обязательно можно задавать в виде дроби, можно в десятичном виде - 1
1/100
, 1
.3
, 1
.25
.1
.15
Пример задания ширины для двух блоков
и 1
.sidebar
. В обоих случаях используется функция 1
.main
, у которой есть более используемое сокращение - 1
column()
:1
col()
Функция
может принимать целый ряд аргументов, с помощью которых возможна тонкая настройка блоков в разметке.1
column()
Смещение колонок\столбцов выполняется с помощью аргумента
, который может принимать как положительное, так и отрицательное значение. Положительное значение 1
offset
задает у столбца 1
offset
- и столбец смещается влево. Отрицательное значение задает 1
margin-left
- и блок смещается вправо.1
margin-right
Аргумент
позволяет создавать галлереи. Допустим, необходимо создать галлерею из картинок, в которой должно быть 4 (четыре) картинки в ряду. Тогда для функции 1
cycle
задаем параметр 1
column()
:1
cycle: 4
Аргумент
позволяет создавать мобильные версии галерей. Допустим, desktop-версия галлереи - 1
uncycle
. Чтобы создать мобильную версию этой галлереи, в которой картинки будут располагаться по две в ряд, достаточно прописать так:1
column(1/3, cycle: 4)
Аргумент
позволяет управлять шириной gutter между столбцами в каждом конкретном случае. Допустим, таким образом:1
gutter
Функция span()
Синтаксис:
Эта функция является своего рода облегченным вариантом функции
. Функция 1
column()
не “понимает” такого свойства, как отступы 1
span()
у блоков. По одной простой причине - функция 1
gutter
создает разметку из блоков, плотно прилегающих друг к другу, без 1
span()
.1
margin
Такая разметка крайне полезна при создании горизонтальной навигации. Например, создать навигацию из восьми пунктов:
Функция shift()
Синтаксис:
Эта функция служит для изменения порядка расположения элементов в нормальном потоке, с помощью свойства
. Величина смещения задается аргументом 1
position: relative
и применяется подобное смещение в виде свойства 1
ratios
к блоку. При этом функции 1
left
с помощью задания или не задания аргумента 1
shift()
можно указать, является ли данный блок столбцом (через функцию 1
gutter
) или блоком span (через функцию 1
column()
).1
span()
Функция
точно также, как и аргумент 1
shift()
, может принимать отрицательные значения для изменения направления смещения блока. Также, функция 1
offset
может принимать не только целые, но и дробные значения для точного позиционирования.1
shift()
Функция unshift()
Синтаксис - отсутствует
Эта функция не принимает каких-либо аргументов. Ее задача - отменить действие функции
.1
shift()
Функция edit()
Синтаксис - отсутствует
Данная функция не создает разметку напрямую. Ее задача - помочь в создании разметки. С ее помощью каждый элемент на странице окрашивается в определенный оттенок серого цвета. Это помогает визульно контролировать правильность процесса создания разметки.
Чтобы функция заработала, достаточно включить ее в файле проекта в любом месте:
Вид разметки будет примерно таким:
Функция center()
Синтаксис:
Задача функции
- быстро и грамотно выполнять центрирование блока в разметке. Как видно из синтаксиса, функция принимает два аргумента:1
center()
- максимальную ширину
, равную по умолчанию1
max-width
;1
1410px
и1
padding-left
для блока, задаваемые в виде шортката1
padding-right
и равного нулю по умолчанию; то есть, нельзя управлять1
pad
и1
padding-left
по отдельности - только одно значение сразу для двух свойств.1
padding-right
Функция cf()
Синтаксис - отсутствует
Данная функция - это всего лишь
от Nicholas Gallagher. Думаю, дальнейшее объяснение излишне. Принимать - маленькими дозами для любых блоков с 1
clearfix
или 1
column()
.1
span()
Функция align()
Функция для выравнивания блока внутри блока-контейнера с помощью
. Вертикальное выравнивание в браузерах IE9+ теперь простая вещь.1
position: absolute
Функция stack()
Синтаксис:
Данная функция предназначена для расположения блоков стопкой (stack), друг над другом. Такой вид расположения блоков применим для модильной версии страницы. Функция
принимает два вида аргументов:1
stack()
- отступы1
pad
и1
padding-left
для блока;1
padding-right
- выпавнивание текста внутри блока.1
align
Функция unstack()
Синтаксис - отсутствует
Данная функция отменяет действие функции
. Однако, действие этой функции не возвращает разметку к прежнему виду, с применением функции 1
stack()
. Чтобы вернуть разметку к такому результату, необходимо снова использовать функцию 1
column()
.1
column()
Настройки Jeet.gs
Настройки системы jeet.gs очень просты. Первоначально необходимо создать файл
, который нужно подключить в файл стилей директивой 1
_settings.styl
. При этом необходимо, чтобы строка 1
@import '_settings'
размещалась сразу после строки 1
@import '_settings'
.1
@import 'jeet'
Содержимое файла настроек
- это несколько переменных:1
_settings.styl
- размер ширины gutter в процентах, от общей ширины страницы1
jeet[‘gutter'] = 3
- если сказать коротко, каким образом будет производиться вычисление ширины блока; относительно конкретного блока-родителя; или же относительно корневого блока-родителя1
jeet[‘parent-first'] = false
- направление текста внутри разметки1
jeet[‘layout-direction'] = LTR
Заключение по Jeet.gs
Итак, познакомились с системой создания разметки jeet.gs. На удивление, она оказалась проста и достаточно полчаса, чтобы разобраться в ней. Не сравнить с Susy, конечно.
Но этого мало, естественно. Хотелось бы посмотреть на живые примеры сайтов, созданных с помощью jeet.gs. В этом вопросе может помочь сам официальный сайт Jeet.gs - милости просим.
Создано по материалам:
P.S.
В данной статье возможны (и 100% - что есть) неточности и мелкие ошибки. Это и понятно - это мое первое знакомство с Jeet.gs. Поэтому, если будут замечания - милости просим.
На этом все.