Иногда бываю ситуации, когда необходимо использовать сетки с фиксированной шириной, вместо обычного использования “резиновых” сеток.

Плагин Susy 2 предоставляет возможность для работы с такими сетками. Но первоначально, необходимо выполнить несколько базовых настроек плагина для того, чтобы начать работать с такими сетками:

Susy + Breakpoint

Эта статья является третьей частью из серии руководства по плагину Susy 2. Если вы впервые познакомились с плагином Susy 2, то рекомендую начать его изучение с первой статьи - “Краткое руководство по Susy 2”.

Настройка Susy 2 для работы с фиксированной шириной

Для того, чтобы начать работать с фиксированной шириной элементов в плагине Susy 2, необходимо изменить значение одного из его параметров c math: fluid на math: static. Также необходимо задать ширину колонки через параметр column-width, для этого подойдут единицы измерения px, em или rem. В примере этой статьи будут использоваться пиксели (px).

Если планируется создавать адаптивную сетку, то значением параметра column необходимо установить число колонок при самом маленьком размере окна браузера.

Для начала создадим новый проект через Compass, указав на необходимость использования плагина Susy в нем:

compass create -r susy -u susy susy_static

Затем откроем файл _grids.scss и добавим в него несколько следующих строк:

$susy: (
  math: static,
  columns: 4,
  column-width: 60px,
  gutters: 1/4,
  use-custom: (rem: true)
);

Создаем в Susy 2 статическую сетку

Шаги по созданию сетки с помощью плагина Susy 2 точно такие же, как если бы создавалась адаптивная сетка (по умолчанию). Первое, что необходимо сделать, это создать блок с классом .container. Однако, при этом не стоит забывать, что для статической сетки миксину container нужно передать аргумент в виде карты map через параметр $susy.

Когда плагин Susy 2 переключен в режим работы с фиксированной шириной сетки, ширина блока-обертки устанавливается в соотвествии с шириной колонки (column-width), число колонок (columns) и ширина gutter (gutters) также передаются в виде фиксированных величин. (Прим. переводчика: можно сказать немного по другому; все эти параметры с их значениями передаются миксину container через переменную $susy):

@import "grids";

.wrapper{
  @include container($susy);
}

Плагин Susy 2 автоматически высчитает максимальную ширину сетки. Скомпилированный CSS-вид будет выглядет следующим образом:

.wrapper {
  width: 285px;
  margin-left: auto;
  margin-right: auto;
}
.wrapper:after {
  content: " ";
  display: block;
  clear: both;
}

Единственное различие между статической и адаптивной сеткой заключается в том, в плагин Susy 2 расчитывает максимальную ширину блока-контейнера, в то время как в адаптивной сетке максимальная ширина всегда принимается равной 100%.

Преобразование статической сетки в адаптивную в Susy 2

Создание адаптивной сетки с помощью плагина Susy 2 в режиме статической сетки практически ничем не отличается от того, как это можно делать в адаптивном режиме. За исключением того, что вы уже догадались, это блок-обертка. В данной статье я затрону только изменение самого блока-контейнера. Если необходима более подробная информация об остальных моментах, вернитесь назад, к статье “Краткое введение в Susy 2 (Часть 2)”.

При создании адаптивной сетки ее ширина всегда равна 100%. Поэтому нет необходимости явно ее задавать. Но в данном случае мы все-таки это сделаем.

К счастью, проблем с этим в плагине Susy 2 нет. Ниже показан наилучший метод, который можно только представить.

.wrapper{
    @include breakpoint(600px){
    @include container(12)
  }
}

.wrapper{
    @include breakpoint(900px){
    @include container(16)
  }
}

В каждой из двух контрольных точек производится переопределение ширины блока-обертки путем задания числа колонок, которые будут входить с состав этого блока.

Скомпилированный CSS-код будет таким:

@media (min-width: 900px) {

  .wrapper {
    width: 1185px;
    margin-left: auto;
    margin-right: auto;
  }

  .wrapper:after {
    content: " ";
    display: block;
    clear: both;
  }
}

Все работает, но выглядит досаточно неприглядно. Имеются дополнительные margin-left и margin-right, а также clearfix; это происходит потому, что блок-обертка был переопределен.

На этом серия статей по Susy 2 завершена.


Решил написать небольшой обзор по online-инструменту для front-end’щика под названием SassMeister.

На русском языке не встречал хотя бы краткого описания, поэтому решил, что не помешает познакомиться в ним поближе.

Итак, что это за инструмент? Если сказать кратко - это online-редактор для кода, наподобие известного CodePen, который уже описывался на страницах данного блога - “Площадка для тестирования CodePen”. Другими словами, SassMeister является площадкой для тестирования (playground) для людей, связанный с веб-разработкой.

Различие между CodePen и SassMeister

Также, как и CodePen, данный редактор предназначен исключительно для front-end разработчиков, так как понимает только два языка - HTML и CSS. А также всевозможные препроцессоры к этой паре языков. Как и CodePen, SassMeister позволяет сохранять созданный в нем код и делать еще пару вещей.

Но в чем же тогда отличие SassMeister от CodePen, что заставило упомянуть этот playground? Отличие есть и оно существенное. Площадка CodePen - это универсальный инструмент для веб-разработчика. В нем есть все необходимое для работы - зарегистрировался, открыл и работай!

SassMeister - это площадка, созданная исключительно для работы с препроцессором Sass и его библиотеками. Получается, что у последнего специализация более узкая; за счет этого SassMeister выполняет свою задачу лучше, чем CodePen.

Итак, в двух словах. Вам нужен хороший универсальный инструмент front-end разработки? Это CodePen. Вам нужен хороший инструмент для работы только с препроцессором Sass? Это SassMeister.

Давайте попробуем создать пример кода в этом инструменте и на его примере поймем, как с ним работать. Итак, открываем главную страницу SassMeister - SassMeister и видим основное окно с вкладками вверху. (Сразу стоит сказать, что редактор SassMeister имеет тесную интеграцию с сервисом GitHub, поэтому зайти в редактор можно, используя учетную запись последнего.) Самая главная и нужная среди них - вкладка с настройками редактора, которая называется Control Panel.

Панель управления SassMeister

Открываем ее и разберемся с ней:

Панель управления редактора SassMeister

Во-первых, надпись “Sass” не дает нам забыть о том, что мы собираемся работать с препроцессором Sass (это типа шутки).

Вторая строка “Compiler” с тремя переключателями позволяет выбрать, какую версию препроцессора Sass мы хотим использовать: свежую 3.3.6, более раннюю 3.2.19 или же LibSass (портированный на С препроцессор Sass).

В третьей строке выбираем, с каким синтаксисом препроцессора Sass мы будем работать - с новым SCSS или же со старым Sass (на котором почти никто не пишет на сегодняшний день).

Отлично, идем дальше!

Опускаем взгляд еще ниже на окно с заголовком “Extensions” и останавливаемся, затаив дыхание. Да-да, вы не ошиблись! Это именно то, о чем вы подумали! Это список плагинов на выбор, которые можно подключить в наш проект один щелчком мыши.

А теперь напомните мне, с каким списком расширений под Sass может работать CodePen? Не помните? Я подскажу - с двумя! Это Compass и Bourbon.

Конечно, в CodePen можно подключить на выбор не один препроцессор, а несколько - Sass, LESS, Stylus. Но вот с выбором плагинов под эти препроцессоры будет слабовато. В этом и заключается преимущество SassMeister - он делает одну вещь, но делает ее хорошо, основательно, до конца!

ОК, для нашего примера работы в SassMeister выберем из этого списка три расширения: Breakpoint, Compass, Susy. Это делается одинарным щелчком мыши на названии расширения, как будто это простая ссылка на веб-странице. Выбранное расширение автоматически добавляется в проект строкой:

@import "breakpoint";
@import "compass";
@import "susy";

Четвертая строка “CSS” предлагает опции, с которыми внимательный читатель уже должен быть знаком. Это стандартные опции компилирования препроцессора Sass из SCSS-кода в CSS-код. Точно такие же настройки имеются в конфигурационном файле config.rb любого Sass/Compass-проекта.

Пятая строка “HTML” предлагает выбрать способ, которым мы будем писать код HTML. Это будет или чистый HTML, или же с помощью HTML-препроцессоров: Haml, Markdown, Textile, Jade.

В строке Editor можно выбрать визуальную тему оформления для редактора SassMeister. Допустим, выберу для себя тему Monokai, так как люблю работать с редактором Sublime Text (здесь нет темы Twilight, а то бы однозначно выбрал ее).

Чекбоксы “Enable Emmet support” и “Use Vim keybindings” предназначены для любителей работать с плагином Emmet под Sublime Text и совсем крутых парней, которые предпочитают стиль редактора Vim.

Вот и все настройки одновременно с обзором возможностей редактора SassMeister. Пора переходить к написанию кода. Для этого закрываем Control Panel и щелкаем мышью на вкладках CSS и HTML вверху. Добавятся еще два окошка CSS и HTML, соответственно. Накидаем в окне HTML совсем простенький код, немного оформим его в окне SCSS, проверим скомпилированный результат в окне CSS и полюбуемся на творение рук своих в четвертом, самом нижнем окне визуального предпросмотра:

Результат работы в редакторе SassMeister

Сохранение кода в SassMeister через GitHub Gist

Отлично! Мы успешно справились с задачей и создали великолепный образец кода в SassMeister. Теперь осталось самое малое - сохранить на века этот образец, чтобы потомки смогли восхищаться им. Нетрудно догадаться, что для этой цели служит вкладка в виде облачка. Наводим на нее мышь и видим надписи - “Save Gist” и Reset. Напрягаем все извилины своего мозга и щелкаем мышью по ссылке “Save Gist”. Редактор SassMeister радостно (зелененькой надписью) сообщает, что наш “Gist is saved”.

А что такое Gist и где оказался наш кусочек кода (куда он сохранился)? Еще раз наводим мышь на облачко и видим, что вкладочка то поменялась! Вместо двух там теперь появилось еще несколько ссылок: “Update Gist”, “View on GitHub”, “Fork Gist”, наша старая знакомая Reset. Вау, знакомые слова - GitHub, Fork! А давайте пройдем по ссылочке “View on GitHub”?

Сохраненный код с SassMeister на сервисе GitHub Gist

Ну конечно же! Мы оказались на GitHub, а точнее - на его сервисе Gist. Кто не знаком с этим сервисом, может уже догадаться о его предназначении. Он служит для хранения таких вот (и не обязательно именно таких) кусочков кода (snippets). Более того, у сервиса Gist имеется интеграция через плагин с редактором Sublime Text, которая позволяет буквально по волшебству вставлять код из Gist прямо в ST!

После сохранения кода на GitHub Gist в панели SassMeister появляется еще одна вкладочка - стрелка. Назначение ее предельно понятно - с помощью нее можно встраивать (embed) созданный здесь код в другой проект, в виде объекта.

SassMeister - заключение

Вот, в принципе, и все, что можно рассказать об online-редакторе SassMeister. Единственный момент, с которым я не разобрался, это вкладка Bookmark - для чего она нужна и как с ней работать, в чем прикол ее существования в этом редакторе. Может быть, внимательный читатель подскажет, для чего она нужна?

Думаю, для кодеров, которые любят и активно используют препроцессор Sass совместно с великолепной библиотекой Compass и плагинами в ней, площадка для тестирования SassMeister понравится однозначно!


В предыдущей статье были рассмотрены краткие основы плагина Susy 2 и на примере создана с помощью Susy довольно сложная HTML-разметка.

В этой статье будет углубленное изучение плагина Susy 2. Сегодня предстоит изучить вопрос, каким образом можно легко и быстро создавать RWD (Responsive Web Design) с помощью Susy 2.

Если вы начали читать эту статью, но представления не имеете, что такое Susy 2 вообще, то вам стоит обратиться к предыдущей статье “Краткое руководство по Susy 2” - это стоит затраченного времени!

Контрольные точки (breakpoints)

По умолчанию, плагин Susy 2 не имеет в своем составе миксина для создания контрольных точек breakpoints. Наоборот, разработчики рекомендуют установить отдельно плагин Breakpoint и использовать его для создания медиа-запросов media-queries.

Поэтому сначала произведем установку и импортирование этого плагина.

Прим. переводчика - имеется отдельная статья по установке и работе с плагином Breakpoint в Sass, расположенная по этому адресу - Медиа-запросы Breakpoint в Sass.

Плагин Breakpoint требует для своей работы наличия библиотеки Compass. Поэтому, сначала необходимо выполнить две команды по установке Compass и затем Breakpoint:

sudo gem install compass
sudo gem install breakpoint

Прим. переводчика: непонятно, что автор имел ввиду, но плагин Breakpoint для своей работы не нуждается в наличии библиотеки Compass. А вот препроцессор Sass ему необходим однозначно.

Затем необходимо подключить плагин Breakpoint в конфигурационном файле config.rb и в файле style.scss:

// config.rb
# Require any additional compass plugins here.
require susy
require breakpoint
// style.scss
@import "compass/reset";
@import "susy";
@import "breakpoint";

Теперь все готово для того, чтобы двигаться дальше.

Работаем с плагином Breakpoint

Если сказать одним предложением, что мне нравиться в использовании плагина Breakpoint, то это легкость, с которой можно создавать контрольные точки в веб-дизайнах под мобильные устройства. Давайте посмотрим, как это делается.

Для того, чтобы воспользоваться плагином Breakpoint, необходимо вызвать одноименный миксин и вставить его в код, передав требуемые аргументы. Эти аргументы преобразуются плагином Breakpoint в соответствующие медиа-запросы. Общий синтаксис миксина таков:

@include breakpoint(<args>){
  // content
}

Прелесть плагина Breakpoint в том, что если вы передаете ему только один аргумент, то он автоматически преобразуется в mobile-first. Этот аргумент должен быть значением минимальной ширины (min-width) разрабатываемого вами сайта, его контрольной точкой:

.container{
  @include breakpoint(1200px){
    // content
  }
}

… что при компиляции в CSS-код даст результат:

@media (min-width: 1200px){
  .container{
    // content
  }
}

Миксин Breakpoint очень гибкий и с помощью него при необходимости можно создавать сложные медиа-запросы.

Использование Breakpoint совместно с Susy 2

Предположим, необходимо создать CSS-сетку, которая будет меняться в определенной контрольной точке breakpoint. Изначально все блоки CSS-сетки должны занимать всю ширину окна браузера в 900px. При превышении значения ширины окна в 900px CSS-сетка должна преобразовываться в 10-колоночный макет сайта, который был рассмотрен и создан в предыдущей статье.

Прим. переводчика - все в точности с принципом MobileFirst.

Преобразование дизайна из Mobile View в Desktop View в Susy 2

Для того, чтобы осуществить такую задачу, достаточно просто добавить нужную контрольную точку breakpoint в уже существующую таблицу стилей SCSS.

В конкретном случае это будет выглядеть таким образом:

.column_1,.column_3{
  ...
  @include breakpoint(900px){
    @include span(2 of 10);
  }
}
.column_3{
  @include breakpoint(900px){
    @include last;
  }
}
...
.column_2{
  ...
  @include breakpoint(900px){
    @include span(6 of 10);
    @include clearfix;
    .column_2_1_1,.column_2_1_2{
      @include span(3 of 6);
    }
    .column_2_1_2{
      @include last;
    }
    .column_2_2_1{
      @include span(2 of 6);
    }
    .column_2_2_2{
      @include span(4 of 6 last);
      @include clearfix;
      .column_2_3_1,.column_2_3_2{
        @include span(2 of 4);
      }
      .column_2_3_2{
        @include last;
      }
      .column_2_4{
        @include span(full);
        clear: both;
      }
    }
  }

То есть, для контрольной точки min-width: 900px создаются правила построения CSS-сетки с использованием плагина Susy 2. Если ширина окна браузера будет меньше 900px, все блоки будут располагаться на всю ширину вертикально (по умолчанию - ведь это и есть нормальный поток). При ширине окна больше 900px подключиться плагин Susy 2 и преобразует CSS-шаблон в 10-колоночный вид для Desktop. Все сделано с учетом принципа MobileFirst.

Готовый пример переработанного кода можно посмотреть здесь - Susy 2 + Breakpoint.

Все выглядит достаточно просто и работает нормально. Но что, если требуется решить чуть более сложную задачу?

Примечание автора: Если вам не нравиться использовать контрольные точки с помощью плагина Breakpoint, вы можете свободно применять старые добрые медиа-запросы media queries, как это делается в CSS.

Добавляем несколько контрольных точек в Susy 2

Допустим, стоит задача создать еще одно состояние шаблона, промежуточное между состоянием “Mobile View” и состоянием “Desktop View”. Необходимо, чтобы при переходе от мобильного экрана к экрану монитора появилось еще одно состояние для планшетных компьютеров “Tablet View”, с отдельной информационной колонкой справа:

Промежуточный дизайн Tablet View для планшетных компьютеров

Этот случай выглядит немного сложнее, чем предыдущий. Главным образом потому, что блок column_1 меняет свое положение и перемещается слева направо. Каким же образом можно осущесвить подобный маневр? Здесь необходимо применить небольшую хитрость.

Немного проанализируем будущий шаблон Tablet View для планшетного дизайна. В нем блоки column_1 и column_3 будут занимать 2 колонки из общих 6 колонок; в тоже время как блок column_2 будет занимать 4 колонки из 6. Кроме того, блок column_1 будет располагаться над блоком column_3.

Вся хитрость заключается в миксине last (прим. переводчика: логично предположить, если до этого момента внимательно изучался результирующий CSS-код работы плагина Susy 2. Вот и profit чтения исходных кодов страницы!).

Давайте взглянем на готовый SCSS-код и сразу многое станет понятно:

/* Tablet View
----------------------------*/
.column_1,.column_3{
  @include breakpoint(600px){
    @include span(2 of 6 last);
  }
}
.column_2{
  @include breakpoint(600px){
    @include span(4 of 6);
    @include clearfix;
    .column_2_1_1,.column_2_1_2{
      @include span(3 of 6);
    }
    .column_2_1_2{
      @include last;
    }
    .column_2_2_1, .column_2_2_2, .column_2_4{
      @include span(full);
    }
    .column_2_2_2{
      @include clearfix;
      .column_2_3_1,.column_2_3_2{
        @include span(2 of 4);
      }
      .column_2_3_2{
        @include last;
      }
      .column_2_4{
        clear: both;
      }
    }
  }
}

Обратите внимание, что для блоков .column_1 и .column_3 изменилась их ширина и добавился миксин last. Если взглянуть на скомпилированный CSS-код, то увидим, что для этих блоков задано “плавание” вправо и убран правый margin:

@media (min-width: 600px) {
  .container .column_1, .container .column_3 {
    width: 31.03448%;
    float: right;
    margin-right: 0;
  }
}

В то же время, для блока .column_2 изменилась только его ширина, а “плавание” осталось прежним - влево. Вот в этом и заключается маленький секрет изменения раскладки блоков в шаблоне:

@media (min-width: 600px) {
  .container .column_2 {
    width: 65.51724%;
    float: left;
    margin-right: 3.44828%;
    overflow: hidden;
    *zoom: 1;
  }

В блоке .column_2 также были произведены изменения ширины некоторых блоков с тем, чтобы шаблон в этом виде максимально соответсвовал своему предназначению - использованию на планшетных компьютерах. В частности, была увеличена ширина блоков .column_2_2_1, .column_2_2_2, .column_2_4 для того, чтобы ими было удобно пользоваться на небольшом экране.

Полный код получившегося примера можно посмотреть здесь - Susy 2 + Breakpoint = Mobile View + Tablet View + Desktop View.

Миксин Susy-Breakpoint

Плагин Susy 2 имеет в своем составе дополнительный миксин susy-breakpoint. Цель создания и применения этого миксина - сокращенная форма записи кода контрольных точек в Sass, в точности следуя принципу этого препроцессора - DRY.

Чтобы быть более понятным, приведу ниже кусочек кода, написанный с помощью миксина susy-breakpoint и точно такой же кусочек кода, написаный без этого миксина, как это делалось ранее в этой статье:

// C использованием миксина susy-breakpoint
.column_1,.column_3{
  @include susy-breakpoint(600px,6){
    @include span(2 last);
  }
}

// Без использования миксина susy-breakpoint
.column_1,.column_3{
  @include breakpoint(600px){
    @include span(2 of 6 last);
  }
}

Видим, что миксин susy-breakpoint действительно использует сокращенную запись, в которой первый аргумент - это значение breakpoint (контрольной точки), а второй аргумент - число колонок, на которое разбита ширина шаблона.

Тогда в миксине span достаточно указать число колонок из общего числа (которое равно 6), которое должен занимать указанный элемент. И что он является последним last с своем ряду (как дополнение).

Приведем ниже измененый SCSS и CSS-код нашего разрабатываемого примера, с учетом использования миксина susy-breakpoint:

.column_1,.column_3{
  @include susy-breakpoint(600px,6){
    @include span(2 last);
  }
}

.column_2{
  @include susy-breakpoint(600px,6){
    @include span(4);
    @include clearfix;
    ...
@media (min-width: 600px) {
  .container .column_1, .container .column_3 {
    width: 31.03448%;
    float: right;
    margin-right: 0;
  }
}

@media (min-width: 600px) {
  .container .column_2 {
    width: 65.51724%;
    float: left;
    margin-right: 3.44828%;
    overflow: hidden;
    *zoom: 1;
  }
  ...

Лично я предпочитаю использовать первый метод, с применением плагина Breakpoint (прим. переводчика: мне он также кажется более наглядным и интуитивно понятным). Естественно, можно с одинаковым успехом пользоваться обоими сопособами. Все зависит от того, какой вам больше нравиться и легче применять на практике.

В этом участке примеры вы, внимательный читатель, могли заметить, что допущена маленькая неточность, упущение. Связано оно с тем, что плавающему контейнеру разрешено занимать всю ширину окна браузера, даже если оно слишком большое. Давайте исправим этот недостаток.

Ограничение блока-контейнера по ширине

Так как в этом примере используется плавающий контейнер, то ограничить его по ширине очень просто:

.container{
  @include container(1140px);
  ...

В результате будет произведено ограничение блока с классом .container по максимальной ео ширине:

.container {
  background-color: #fbeecb;
  max-width: 1140px;
  ...

Точно такого же результата можно добиться, если просто записать:

.container{
  background-color: #fbeecb;
  @include container;
  @include clearfix;
  max-width: 1140px;
  ...
.container {
  background-color: #fbeecb;
  max-width: 1140px;
  ...

К сожалению, точно также нельзя поступить в случае с CSS-сетками фиксированной ширины static grid, потому что плагин Susy 2 производит все необходимые математические вычисления в CSS-сетке и расчет максимальной ширины блока-контейнера этой же CSS-сетки одновременно. Для построения CSS-сетки с фиксированной шириной необходим другой способ.

Но рассмотрение этого способа оставим на следующий раз, так как на сегодня уже достаточно.

Окончательный результат рассмотренного в этой статье шаблона можно посмотреть здесь - Susy + Breakpoint = Final.

Данная статья является вольным переводом и обработкой оригинала - A Complete Tutorial to Susy 2 (Part 2).


Susy является вспомогательным инструментом, с помощью которого можно создавать гибкие настраиваемые CSS-сетки буквально на лету.

На момент написания статьи состоялся релиз Susy 2. Если у вас есть опыт работы с предыдущей версией этого фреймворка - Susy 1, то вам наверняка еще больше понравиться работа в Susy 2, так как эта версия предоставляет веб-разработчику еще большую гибкость.

Данное руководство по Susy 2 состоит из двух частей; в этой первой части будет показан процесс создания шаблона в фреймворке Susy 2.

Почему именно Susy 2

Как я уже упоминал ранее, Susy является вспомогательным инструментом, благодаря которому можно создавать гибкие сетки практически любого вида, без необходимости производить многочисленные рутинные вычисления. Преимуществом Susy в отделении CSS от HTML.

Если у вас до прочтения этой статьи был опыт работы с такими традиционными фреймворками, как Foundation или Bootstrap, то вы должны знать, что в этих фреймворках ширина колонок и контрольные точки breakpoints имеют фиксированные значения. Для изменения разметки необходимо добавлять классы к элементам в HTML-код (прим. переводчика - забыл, как называется случай, когда HTML-структура засорена чрезмерным количеством классов).

Фреймворк Susy лишен такого недостатка - классы создаются непосредственно под необходимый случай и применяются к конкретной сетке.

Как мне кажется, этот момент довольно трудно понять сразу, так как является достаточно абстрактным понятием. Вместо того, чтобы пытаться бесконечно объяснять теорию, мне кажется гораздо лучшим для понимания воспользоваться практическим примером. Для этого создадим с помощью Susy 2 10-колоночный тестовый макет, нарисованный Arnaud Guera (AG) для официального сайта Susy 2:

Тестовый шаблон Arnaud Guera

Установка Susy 2

Если Susy вообще не установлен

Фреймворк Susy для своей работы нуждается в препроцессоре Sass. Поэтому, если у вас на локальном компьютере еще не установлены как Sass, так и Susy, то необходимо это сделать:

sudo gem install sass
sudo gem install susy

Если Susy уже установлен

Если фреймворк Susy уже установлен на вашем компьютере и также имеется Ruby RVM (Ruby Version Manager), то можно произвести обновление с помощью команды:

sudo gem update

Если у вас эта команда не сработала, то это означает, что нужно попробовать другой способ или же сначала установить Ruby RVM.

Второй способ установки фреймворка Susy версии 2 несколько более “ручной”. Он предполагает, что сначала нужно деинсталлировать предыдущие версии Sass\Susy, а затем установить их снова. Этот способ является наилучшим, если необходимо избежать ошибок при обновлении (как в первом случае).

sudo gem uninstall susy
sudo gem uninstall sass

sudo gem install sass
sudo gem install susy

После успешной установки фреймворка Susy 2 на локальной машине, приступим к его базовой настройке.

Базовая настройка Susy 2

Точно также, как и в первой версии, необходимо в конфигурационном файле config.rb указать, что фреймворк Susy должен быть включен в текущий проект:

# Require any additional compass plugins here.
require 'susy'

Затем нужно импортировать фреймворк Susy 2 в таблицы стилей:

// Importing Susy
@import "susy";

Версия 2 фреймворка Susy имеет список глобальных переменных, встроенных в него. Эти переменные можно изменить прямо в таблице стилей:

// Configuring Susy 2 Global Defaults
  $susy: (
    key : value
);

Можно поэкспериментировать с переменными и их значениями по умолчанию, чтобы посмотреть, ккая из них и за что отвечает. Более детальный обзор этих переменных будет произведен во второй части данного руководства.

Однако, можно смело использовать Susy 2 с настройками по-умолчанию. В моем случае, так как я предпочитаю работать с моделью border-box и единицами измерения rem, то я изменю некоторые из переменных:

$susy: (
  global-box-sizing: border-box,
  use-custom: (rem: true)
);

Обратите внимание на то, что Susy 2 использует по умолчанию “резиновый” шаблон. Это означает, что ширина всех внешних блоков-контейнеров задана в 100%.

Если же вы предпочитаете работать в Susy с фиксированными ширинами элементов и контрольными точками breakpoints, то просто измените значение переменной math на static. Главное отличие между двумя этими методами проявляется только тогда, когда настает потребность в превращении дизайна в RWD. Однако, этот вопрос будет рассмотрен позже, во второй части данного руководства.

Также обратите внимание, что необходимо подключить к текущему проекту библиотеку Compass и файл нормализации стилей normalize.css (в первых двух строках):

@import "normalize";
@import "compass";
@import "susy";

// Настройка переменных Susy
$susy:(
  global-box-sizing: border-box;
  use-custom: (rem: true)
);

@include border-box-sizing;

Базовый HTML и CSS для шаблона AG

HTML-каркас для данного шаблона будет выглядеть следующим образом:

<div class="container">
  <h1>
    10-колоночный шаблон с вложенностью блоков
  </h1>
  <!-- Column 1 -->
  <div class="column_1">
    <h2>
      Колонка 1
    </h2>
  </div>
  <!-- Column 2 -->
  <div class="column_2">
    <h2>
      Колонка 2
    </h2>
    <div class="column_2_1_1">
      <h2>
        Колонка 2-1-1
      </h2>
    </div>
    <div class="column_2_1_2">
      <h2>
        Колонка 2-1-2
      </h2>
    </div>
    <div class="column_2_2_1">
      <h2>
        Колонка 2-2-1
      </h2>
    </div>
    <div class="column_2_2_2">
      <h2>
        Колонка 2-2-2
      </h2>
      <div class="column_2_3_1">
        <h2>
          Колонка 2-3-1
        </h2>
      </div>
      <div class="column_2_3_2">
        <h2>
          Колонка 2-3-2
        </h2>
      </div>
      <div class="column_2_4">
        <h2>
          Колонка 2-4
        </h2>
      </div>
    </div>
  </div>
  <!-- end Column 2 -->
  <!-- Column 3 -->
  <div class="column_3">
    <h2>
      Колонка 3
    </h2>
  </div>
</div>

В этом примере показан довольно сложный случай вложенности одних блоков в другие блоки.

Ниже представлен простой SCSS-код для сетки:

.container{
  background-color: #fbeecb;

  .column_1,.column_3{
    background-color: #71dad2;
  }

  .column_2{
    background-color: #fae7b3;

    .column_2_1_1,.column_2_1_2{
      background-color: #ee9e9c;
    }

    .column_2_2_1{
      background-color: #f09671;
    }

    .column_2_2_2{
      background-color: #f6d784;

      .column_2_3_1,.column_2_3_2{
        background-color: #ee9e9c;
      }

      .column_2_4{
        background-color: #ea9fc3;
      }
    }
  }

  h1,h2{
    text-align: center;
    font-size: 1rem;
    font-weight: bold;
    padding: 1.8rem 0;
  }
}

Все готово для погружения в плагин Susy. Но перед началом необходимо немного остановиться на деталях этого плагина.

Наиболее важные функции и миксины плагина Susy

Прежде чем приступать к созданию сеток с помощью Susy, стоит кратко рассказать о трех наиболее важных функциях и миксинах данного плагина. Если вам удастся сразу же разобрать с этими тремя вопросами, вы сможете создавать с помощью Susy сетки практически любого вида и сложности.

Миксин Container

Первое, что необходимо сделать в разметке - это включить миксин .container. Тем самым подключаются все возможности плагина Susy для расчета и построения CSS-сеток.

Синтаксис этого миксина прост:

@include container( [<lenght>] );

Необязательный параметр lenght позволяет указать для блока-обертки максимальную ширину max-width. Если параметр не указан, то плагин Susy будет принимать значение максимальной ширины по умолчанию - max-widht: 100%.

Рабочий пример миксина container:

@include container;

Миксин span

Миксин span является основой плагина Susy. Обычно используется стандартный способ для вызова данного миксина:

@include span( <width> [<wide / wider>] of <layout> [<last>] );

Если до этого момента вы использовали плагин Susy версии 1, то должны были обратить внимание, что синтаксис этого миксина очень похож на синтаксис миксина span-column, с очень незначительными отличиями.

Давайте подробно остановимся на всех тонкостях синтаксиса миксина span:

  • width - количество колонок с создаваемой разметке;
  • wide / wider - необязательный параметр, который позволяет разделить колонку с помощью одного или двух gutter;
  • of - указывает Susy, что дальше идут параметры, связанные с разметкой;
  • layout - показывает ширину блока-обертки;
  • last - необязательный параметр, который говорит о том, что это последний элемент в ряду.

Пример создания колонки с помощью миксина span:

@include span( 3 wide of 9 last);

Функция span

Функция span во многом очень похожа на одноименный миксин span, за тем исключением, что она только лишь возвращает ширину элемента. В случае использования функции span потребуются только параметры ширины колонки, ширины gutter и всего блока-обертки в целом.

.column{
  width: span(3 of 9);
}

Прелесть использования функции span в том, что в этом случае нет необходимости в запоминании миксинов для работы в margin или padding в плагине Susy, как это было в предыдущей его версии. Теперь можно использовать функцию span для установки точного значения ширины отступа:

.paddingLeft{
  padding-left: span(1 of 9);
}

Функция gutter

Функция gutter принимает только один аргумент:

margin-right: gutter(9);

Это и все основные функции и миксины плагина Susy, которые необходимо знать для работы с ним.

Создание разметки с помощью плагина Susy

Первый шаг, который мы сделаем для превращения HTML-кода в нужную разметку, это подключим миксин container:

.container{
  background-color: #fbeecb;
  @include container;
  @include clearfix;
  ...

Помимо миксина container, мы подключили еще один миксин - clearfix, так как внутри блока-обертки будут располагаться плавающие блоки. Если взглянуть на результат компиляции в CSS, то все станет очевидным: миксин container генерирует строки:

max-width: 100%;
margin-left: auto;
margin-right: auto;

а миксин clearfix создает CSS-строки:

overflow: hidden;
*zoom: 1;

Прим. переводчика: я бы воспользовался более современной версией миксина для очистки потока - pie-clearfix. Данный миксин построен на методе, о котором говориться в статье известного CSS-гуру Никаласа Галлахера - A new micro clearfix hack.

Теперь перейдем к более мелким деталям разметки. Предположительно, вся ширина блока-контейнера будет у нас состоять из 10 колонок. На рисунке-эскизе будущий макет сайта должен состоять из трех колонок - двух узких боковых и одной центральной широкой.

Такую HTML-разметку мы и создали ранее в этой статье. Поэтому предположим, что две боковые колонки будут у нас шириной в 2 стобца из 10, а центральная колонка - из 6 столбцов из 10 ( 10 - (2 + 2) ).

Следовательно, блок с классами .column_1 и .column_3 дописываем миксин:

.column_1,.column_3{
  ...
  @include span(2 of 10);
}

Помимо этого, блоку с классом .column_3 дописываем еще один миксин last, так как этот блок является последним в данном ряду:

.column_3{
  @include last;
}

Если заглянем в скомпилированный CSS-код, то увидим простую картину. Всем блокам задается одинаковая ширина в процентах, правый margin также в процентах. А вот если применен миксин last, то плавание блока меняется на противоположное и убирается правый margin:

.container .column_1, .container .column_3 {
  ...
  width: 18.36735%;
  float: left;
  margin-right: 2.04082%;
}

.container .column_3 {
  float: right;
  margin-right: 0;
}

Центральная колонка должна иметь у нас ширину в шесть столбцов и плавающие блоки внутри себя, поэтому задаем для нее два миксина:

.column_2{
    ...
    @include span(6 of 10);
    @include clearfix;

… что дает в результате CSS-код:

.container .column_2 {
  ...
  width: 59.18367%;
  float: left;
  margin-right: 2.04082%;
  overflow: hidden;
  *zoom: 1;
}

Отлично! Рассмотрим далее наш пример. Внутри центральной колонки в одном ряду расположены два блока, которые в сумме занимают всю ширину блока-контейнера (в данном случае это центральная колонка). Поэтому для двух этих блоков зададим одинаковый миксин:

.column_2_1_1,.column_2_1_2{
  ...
  @include span(3 of 6);
}

… и не забудем добавить для блока с классом .column_2_1_2 миксин last, так как он последний в своем ряду и с ним будут происходить толчно такие же метаморфозы, как и в предыдущем случае:

.column_2_1_2{
  @include last;
}

Смотрим на готовый CSS-код и видим, что ничего необычного не произошло - все предсказуемо:

.container .column_2 .column_2_1_1, .container .column_2 .column_2_1_2 {
  background-color: #ee9e9c;
  width: 48.27586%;
  float: left;
  margin-right: 3.44828%;
}
.container .column_2 .column_2_1_2 {
  float: right;
  margin-right: 0;
}

В следующем ряду располагаются еще два блока, но уже с разной шириной: блок с классом .column_2_2_1 будет занимать 2 колонки из 6, а блок с классом column_2_2_2 - 4 колонки из 6.

Кроме того, в блоке с классом column_2_2_2, в свою очередь, размещены еще два плавающих блока column_2_3_1, column_2_3_2, поэтому к нему нужно применить опять миксин clearfix:

.column_2_2_1{
  ...
  @include span(2 of 6);
}
.column_2_2_2{
  ...
  @include span(4 of 6 last);
  @include clearfix;
  .column_2_3_1,.column_2_3_2{
    ...
    @include span(2 of 4);
  }
  .column_2_3_2{
    @include last;
  }

CSS-результат применения этих миксинов показан ниже:

.column_2_2_1 {
  ...
  width: 31.03448%;
  float: left;
  margin-right: 3.44828%;
}
.column_2_2_2 {
  ...
  width: 65.51724%;
  float: right;
  margin-right: 0;
  overflow: hidden;
  *zoom: 1;
}
.column_2_3_1, .column_2_3_2 {
  ...
  width: 47.36842%;
  float: left;
  margin-right: 5.26316%;
}
.column_2_3_2 {
  float: right;
  margin-right: 0;
}

Последним у нас идет блок, который занимает всю ширину своего блока-родителя. В нему мы применим миксин span(full) и одновременно очистку через CSS-свойство clear: both;.

.column_2_4{
  ...
  @include span(full);
  clear: both;
}

… чтобы получился CSS-результат:

.container .column_2 .column_2_2_2 .column_2_4 {
  ...
  width: 100%;
  float: left;
  margin-left: 0;
  margin-right: 0;
  clear: both;
}

Вот, в принципе, и все несложное построение разметки. Давайте взглянем на результат наших трудов в окне браузера:

Готовый шаблон, созданный с помощью Susy

Полный вариант кода можно посмотреть здесь - Susy Part 1

Думаю, на cегодня можно закруглиться с изучением Susy. Но, вообще эта тема очень интересная и положительная. В том плане, что для практической работы применение плагина Susy мне видится - в самый раз.

Это вам не неуклюжие 960gs или Blueprint. Тут все гибко и настраиваемо прямо на лету. Хочешь такую разметку - пожалуйста. А хочешь другую - да пожалуйста, Susy тебе пересчитает все в мгновение ока!

Думается мне, это не последняя статья, посвященная плагину Susy под библиотеку Compass.

Данная статья является вольным переводом и осмыслением оригинала - A Complete Tutorial to Susy 2


Отличный момент познакомиться с еще одной безграничной возможностью библиотеки Compass - это поработать с типографикой.

Для этого дела в Compass имеется достаточно большой набор готовых миксинов. И хотя принцип большинства из них прост, суть дела от этого не меняется.

Убрать подчеркивание у ссылок в Compass

Начнем с простого и попробуем настроить вид и поведение ссылок с помощью Compass. Для этого необходимо подключить модуль в текущий проект в виде строки:

@import "compass/typography/links";

Затем создадим в HTML-файле пару параграфов с ссылками:

<p>Lorem ipsum dolor sit amet, consectetur adipisicing elit. Eius, eos, dolorum, eum blanditiis laudantium placeat aspernatur esse dolorem <a href="#">optio molestiae provident</a> nobis sint architecto dolores repudiandae magnam iste assumenda minima.</p>

<p>Lorem ipsum dolor sit amet, consectetur adipisicing elit. Sequi, nobis, maiores, quasi molestias dignissimos repellendus quis nemo quibusdam <a href="#">accusamus culpa numquam</a> voluptas sunt dolor inventore pariatur cumque a unde ut.</p>

… и применим к ссылкам миксин hover-link:

p {
  margin-bottom: 20px;

  a {
    @include hover-link;
  }
}

Если теперь посмотрим на скомпилированный вывод в CSS-файле, то увидим две до удивления простые строчки:

p a {
  text-decoration: none;
}

p a:hover {
  text-decoration: underline;
}

То есть, суть миксина hover-link в убирании подчеркивания у ссылки в ее обычном состоянии; и добавлении подчеркивания при состоянии hover. Попробуйте ввести показанный выше код в своем HTML-редакторе и посмотреть результат.

Изменение цвета ссылок в Compass

В Compass имеется миксин link-colors для управления цветом ссылок. То есть, с помощью этого миксина можно изменять стандартные цвета ссылки при ее различных состояниях.

Синтаксис миксина достаточно устрашающий, с первого взгляда:

link-colors($normal, $hover, $active, $visited, $focus)

Однако здесь нет ничего сложного. Пять переменных миксина принимают в качестве аргументов цвета для ссылки в пяти ее состояниях:

<ul>
  <li>$normal - цвет обычного состояния ссылки</li>
  <li>$hover - цвет ссылки при наведенном на нее курсоре мыши</li>
  <li>$active - цвет ссылки в момент нажатия на нее</li>
  <li>$visited - цвет посещенной ссылки</li>
  <li>$focus - цвет ссылки, получившей фокус с клавиатуры</li>
</ul>

При этом только один из параметров миксина link-colors является обязательным - $normal. Остальные можно опустить и тогда будут использоваться цвета по умолчанию.

Давайте поэскпериментируем и немного изменим цвета для ссылок в нашем примере. Перед этим не забудем подключить соответствующий модуль строкой:

@import "compass/typography/links/link-colors"

Откроем таблицу цветов, расположенную по адресу w3schools - HTML Colors и наугад возмем оттуда пять цветов в HEX-формате, которые передадим миксину в качестве аргументов:

a{
  @include link-colors(#CC0000, #CC3300, #CC6600, #CC9900, #CCCC00);
}

В скомпилированном CSS-файле появиться несколько строчек такого вида:

p a:visited {
  color: #cc9900;
}

p a:focus {
  color: #cccc00;
}

p a:hover {
  color: #cc3300;
}

p a:active {
  color: #cc6600;
}

Введите показанный здесь код у себя и посмотрите на результат.

Сброс всех стилей для ссылок в Compass

Последний миксин из данного раздела позволяет производить сброс всех стилей для ссылок и превращении их в обычный текст, внутри которого находятся данные ссылки.

Например, имеется параграф с классом .woo, внутри которого расположена ссылка. Применим к ней миксин unstyled-link для сброса всех стилей, предварительно подключив модуль:

@import "compass/typography/links/unstyled-link";
p.woo a {
  @include unstyled-link;
}

Посмотрим на результат компиляции кода в CSS и увидим такую картину:

p.woo a {
  color: inherit;
  text-decoration: inherit;
  cursor: inherit;
}

p.woo a:active,
.wrap p.woo a:focus {
  outline: none;
}

Ссылка наследует от параграфа (то есть - текста, входящего в этот параграф) свойства цвета, подчеркивание и вид курсора; а также убирается рамка outline при получении ссылкой фокуса или щелчка мыши по ней.

То есть, другими словами, ссылка становиться полностью похожей внешне и по поведению на весь остальной текст, который ее окружает. Попробуйте у себя вышеприведенный код, чтобы увидеть результат.

На этом все.