Процесс Wordpress разработки, используя Sass и Compass
() translation by (you can also view the original English article)
В этой статье, мы посмотрим на то как использовать Sass и Compass во время разработки WordPress темы. Мы структурируем таблицы стилей согласно SMACSS и воспользуемся Compass для создания спрайтов изображений, как для ретина так и для обычных экранов устройств.
Стоит заметить, что данная статья не является введением в Sass; однако, если вы начинающий, всё равно можете ознакомиться с ней.
Требования
Перед тем как мы начнём, убедитесь, что у вас установлен Sass и Compass на компьютере. Если это не так, стоит изучить следующие инструкции:
Существует несколько приложений с графическим интерфейсом для работы с Sass и Compass, но я буду использовать терминал (если вы на Wiondows, воспользуйтесь командной строкой). Используйте тот инструмент, который больше вам подходит.
Настраиваем проект
Давайте начнём, создав каталог для нашего проекта. Создайте новый каталог на рабочем столе и назовите его tutsplus
. Внутри него создайте два каталога: sass
и images
. В каталоге sass
будут находиться наши Sass файлы, которые будут формировать таблицу стилей для нашей темы, style.css
.
Откройте каталог images
и создайте в нём две новые директории для иконок нашей темы. Назовите их icons
и icons@2x
. Позже мы будем использовать изображения в этих каталогах для создания спрайтов, для нашей темы. На данный момент структура директорий должна выглядеть следующим образом:



Конфигурация Compass
Мы будем использовать Compass, чтобы отслеживать (watch
) изменения файлов в каталоге sass
, когда это произойдёт, Sass скомпилирует наши стили. Каждый раз когда мы запускаем Compass, он ищет файл конфигурации в текущей директории. Название файла - config.rb
.
Для создания файла конфигурации откройте терминал/командную строку, перейдите в каталог tutsplus
на вашем рабочем столе:
1 |
cd /Desktop/tutsplus/
|
Далее запустите команду compass config config.rb
. Данная команда создаст файл конфигурации для вас. Откройте файл в текстовом редакторе и добавьте следующие изменения:
- Поменяйте
css_dir = "stylesheets"
на:css_dir = "/"
. Это даст понять Compass, что конечный файл с CSS следует поместить в корне нашей темы, так как это то место где WordPress будет искатьstyle.css
. - Установите предпочитаемый тип конечного CSS. В моём случае я выбрал "расширенный" добавив на строке 12
output_style = :expanded
.
- Раскомментируйте строку 14 и 17 удалив хеш символ, тем самым данные строки будут выглядеть следующим образом
relative_assets = ture
иline_comments = false
.
Сохраните изменения. Теперь ваш файл config.rb
должен выглядеть, как в примере ниже:
1 |
# Require any additional compass plugins here.
|
2 |
|
3 |
# Set this to the root of your project when deployed:
|
4 |
http_path = "/" |
5 |
css_dir = "/" |
6 |
sass_dir = "sass" |
7 |
images_dir = "images" |
8 |
javascripts_dir = "javascripts" |
9 |
|
10 |
# You can select your preferred output style here (can be overridden via the command line):
|
11 |
# output_style = :expanded or :nested or :compact or :compressed
|
12 |
output_style = :expanded |
13 |
|
14 |
# To enable relative paths to assets via compass helper functions. Uncomment:
|
15 |
relative_assets = true |
16 |
|
17 |
# To disable debugging comments that display the original location of your selectors. Uncomment:
|
18 |
line_comments = false |
19 |
|
20 |
# If you prefer the indented syntax, you might want to regenerate this
|
21 |
# project again passing --syntax sass, or you can uncomment this:
|
22 |
# preferred_syntax = :sass
|
23 |
# and then run:
|
24 |
# sass-convert -R --from scss --to sass sass scss && rm -rf sass && mv scss sass
|
Отслеживаем изменения
Отлично! Теперь когда у нас есть файл с конфигурацией, настало время создать наш первый Sass файл. Создайте новый файл внутри каталога sass
и назовите его style.scss
. Далее, запустите терминал и перейдите в каталог /Desktop/tutsplus/
.
Запустите команду compass watch
. Данная команда начнёт процесс отслеживания изменений файлов Sass в каталоге sass
. После того как будет найден файл style.scss
он будет скомпилирован и в итоге мы получим style.css
в директории tutsplus
.
Обратите внимание все файлы внутри каталога sass
, имя которых не начинается с нижнего подчеркивания, будут обработаны и скомпилированный результат попадёт в каталог tutsplus
. Это как раз то что нам нужно для нашего style.scss
файла.
Важно запомнить: не меняйте ничего в скомпилированном CSS файле, так как вы потеряете все сделанные изменения после того как файлы Sass будут компилироваться в следующий раз.
Декомпозиция
Мы собираемся разделить наш style.scss
на несколько компонентов используя руководства (style guides) SMACSS (Scalable and Modular Architecture for CSS). Автор SMACSS - Jonathan Snook, он написал книгу об этой замечательной методологии, которую я настоятельно рекомендую вам прочитать. В том случае, если вы зарегестрированный пользователь Tuts+, скачать данную книгу можно здесь.
SMACSS подразделяет ваш CSS на следующие пять категорий:
- Основные стили (Base)
- Структура (Layout)
- Модуль (Module)
- Состояние (State)
- Тема (Theme)
Давайте создадим каталог для каждой из этих категорий внутри каталога sass
. Используем следующие названия: base
, layouts
, modules
, states
и themes
.



Base
В нашем base
каталоге, поместите все таблицы стилей, которые соответствуют правилу Base стилей SMACSS. Данные таблицы стилей должны использовать стили только для селекторов элемента. Также это место подойдёт для того, чтобы добавить сюда сброс (reset) CSS стилей браузера по умолчанию.
Compass включает сброс стилей по умолчанию от Eric Meyer. Однако для данного проекта я буду использовать normalize.css. Скачайте файл normalize.css
и поместите его в директорию base
, после чего переименуйте его в _noarmalize.scss
. Не забудьте изменить файловое расширение с css
на scss
.
Далее, нам следует импортировать normalize
таблицу стилей в наш style.scss
. Для этого откройте style.scss
и добавьте:
1 |
// Base |
2 |
@import "base/normalize"; |
Как вы возможно заметили мы не указываем расширение файла и нижнее подчёркивание. Препроцессор Sass достаточно сообразительный и сможет импортировать необходимый файл.
Layouts
Здесь мы поместим файлы отвечающие за структура. К примеру, здесь будут находится стили для шапки, сайдбара, футера и стили отвечающие за структуру нашей страницы - _header.scss
, _sidebar.scss
, _footer.scss
и _page.scss
.
Вы можете использовать l-
префикс для классов отвечающих за структуру:
1 |
// _header.scss |
2 |
.l-main-header { |
3 |
margin: 30px; |
4 |
padding: 20px; |
5 |
font-size: 16px; |
6 |
}
|
7 |
|
8 |
// _navigation.scss |
9 |
.l-main-nav { |
10 |
position: relative; |
11 |
}
|
Также это место подойдёт для стилей сетки. Как и в случае с base вы можете ознакомиться с правилами для стилей структуры SMACSS.
Modules
Модули элементы контента, которые можно повторно использовать. К примеру, блог пост является модулем так как он используется в различных местах на сайте. Виджеты, шорткоды, также как и иконки, всё это модули.
Модуль может содержать подмодули (sub modules). Вот вам пример модуля виджета, его заголовок - подмодуль:
1 |
<li class="widget"> |
2 |
<h4 class="widget__title">Recent Posts</h4> |
3 |
</li>
|
1 |
.widget { |
2 |
padding: 10px; |
3 |
}
|
4 |
|
5 |
.widget__title { |
6 |
font-size: 15px; |
7 |
}
|
Здесь мы используем BEM (Block Element Modifier) правила именования классов.
States
В данном каталоге будут располагаться стили ответственные за состояния элементов. В том случае если вы создаёте адаптивную тему, стили медиа запросов следует поместить здесь.
Давайте создадим один из них прямо сейчас.
Создайте новый файл в текстовом редакторе и сохраните его как _media_queries.scss
в каталоге /sass/states/
. Скопируйте стили ниже для экранов различных размеров в данный файл.
1 |
/*! =Media Queries
|
2 |
-------------------------------------------------------------- */
|
3 |
|
4 |
/* 956-768px */
|
5 |
@media only screen and (min-width: 768px) and (max-width: 959px) { |
6 |
|
7 |
}
|
8 |
|
9 |
/* 767-480px */
|
10 |
@media only screen and (min-width: 480px) and (max-width: 767px) { |
11 |
|
12 |
}
|
13 |
|
14 |
/* 479px */
|
15 |
@media only screen and (max-width: 479px) { |
16 |
|
17 |
}
|
Не забудьте импортировать новую таблицу стилей в ваш style.scss
:
1 |
// Base |
2 |
@import "base/normalize"; |
3 |
|
4 |
// States |
5 |
@import "states/media_queries" |
Если к примеру, у вас есть сайдбар навигация, которая скрыта на мобильных устройствах, в данный каталог следует поместить стили отвечающее за состояние открытой навигации .is-open
или скрытой .is-closed
, но в большинстве случаев данные стили больше подходят для layout или как файл модуля off-canvas навигации.
Themes
Подходящее место, для кастомных стилей WordPress плагинов. К примеру, допустим, вы можете поместить кастомные стили для Contact Form 7 плагина.
Theme Info
Каждый файл style.css
WordPress темы содержит мета информацию, к примеру название темы, автора, версию и так далее. Мы можем воспользоваться переменными Sass, чтобы с лёгкостью изменить информацию о каждой теме, которую мы создаём.
Сперва создайте новый файл _vars.scss
и сохраните его в папке sass
. В этот файл мы добавим наши переменные. В том случае если данный файл окажется слишком большим, разделите его на несколько файлов.
Откройте новый файл и добавьте следующие переменные:
1 |
// Theme Information |
2 |
//--------------------------------------------// |
3 |
$theme_name: "My Theme"; |
4 |
$theme_uri: "#"; |
5 |
$theme_description: "My WordPress Theme"; |
6 |
$theme_version: "1.0"; |
7 |
$theme_author: "my name"; |
8 |
$theme_author_uri: "#"; |
9 |
$theme_license: "GPL"; |
10 |
$theme_tags: "responsive-layout, post-formats"; |
Теперь мы должны создать файл, который будет использовать данные переменные. В текстовом редакторе создайте файл _theme_info.scss
и сохраните его в sass
каталоге. Заполните _theme_info.scss
следующим контентом.
1 |
/*!
|
2 |
|
3 |
Theme Name: #{ $theme_name }
|
4 |
Theme URI: #{ $theme_uri }
|
5 |
Description: #{ $theme_description }
|
6 |
Version: #{ $theme_version }
|
7 |
Author: #{ $theme_author }
|
8 |
Author URI: #{ $theme_author_uri }
|
9 |
License: #{ $theme_license }
|
10 |
License URI: License.txt
|
11 |
Tags: #{ $theme_tags }
|
12 |
|
13 |
*/
|
Ну и наконец импортируйте новый файл в style.scss
, также как и компоненты Compass:
1 |
@import "compass"; |
2 |
|
3 |
@import "vars"; |
4 |
@import "theme_info"; |
5 |
|
6 |
// Base |
7 |
@import "base/normalize"; |
8 |
|
9 |
// States |
10 |
@import "states/media_queries"; |
Теперь если открыть скомпилированный style.css
в нём будет содержаться блок комментариев с информацией о WordPress теме со значениями переменных, который мы задали в _vars.scss
.
Helpers
Хорошая практика использовать небольшие CSS классы для стилизации элементов, вместо использования специфичного селектора. Следуйте DRY принципу, не повторяйтесь - Don't Repeat Yourself. Мы можем создать таблицу стилей для небольшого класса хлепера (helper). Для примера, я определю хелперы для структуры и типографии.
Создайте новый файл под названием _helpers.scss
и сохраните его в sass
каталоге. Опять также как и с файлом переменных, если файл содержащий хелперы разрастётся, советую вам разделить его на небольшие файлы.
Откройте недавно созданный файл и скопируйте следующий контент:
1 |
/*! =Helpers
|
2 |
-------------------------------------------------------------- */
|
3 |
|
4 |
// Layout |
5 |
//--------------------------------------------// |
6 |
.left { |
7 |
float: left; |
8 |
}
|
9 |
|
10 |
.right { |
11 |
float: right; |
12 |
}
|
13 |
|
14 |
.clear { |
15 |
clear: both; |
16 |
}
|
17 |
|
18 |
.hide { |
19 |
display: none; |
20 |
}
|
21 |
|
22 |
.hidden { |
23 |
opacity: 0; |
24 |
visibility: hidden; |
25 |
}
|
26 |
|
27 |
.clearfix { |
28 |
|
29 |
&:before,
|
30 |
&:after { |
31 |
content: " "; |
32 |
display: table; |
33 |
}
|
34 |
|
35 |
&:after { |
36 |
clear: both; |
37 |
}
|
38 |
}
|
39 |
|
40 |
.center-block { |
41 |
display: block; |
42 |
margin: 0 auto; |
43 |
}
|
44 |
|
45 |
// Typography |
46 |
//--------------------------------------------// |
47 |
.f-normal { |
48 |
font-weight: normal; |
49 |
}
|
50 |
|
51 |
.f-bold { |
52 |
font-weight: bold; |
53 |
}
|
54 |
|
55 |
.f-italic { |
56 |
font-style: italic; |
57 |
}
|
58 |
|
59 |
.t-strike { |
60 |
text-decoration: line-through; |
61 |
}
|
62 |
|
63 |
.t-overline { |
64 |
text-decoration: overline; |
65 |
}
|
66 |
|
67 |
.t-underline { |
68 |
text-decoration: underline; |
69 |
}
|
70 |
|
71 |
.t-left { |
72 |
text-align: left; |
73 |
}
|
74 |
|
75 |
.t-right { |
76 |
text-align: right; |
77 |
}
|
78 |
|
79 |
.t-center { |
80 |
text-align: center; |
81 |
}
|
Как вы можете заметить мы используем префикс f-
для классов относящихся к стилизации шрифтов, префикс t-
для классов текстовой стилизации. Сохраните файл и импортируйте в style.scss
:
1 |
@import "compass"; |
2 |
|
3 |
@import "vars"; |
4 |
@import "theme_info"; |
5 |
|
6 |
// Base |
7 |
@import "base/normalize"; |
8 |
|
9 |
// Helpers |
10 |
@import "helpers"; |
11 |
|
12 |
// States |
13 |
@import "states/media_queries"; |
Генерация спрайтов
Compass обладает невероятно полезными функциями для генерации спрайтов изображений. Мы добавим наши иконки в каталог icons
и icons@2s
, icons@2s будет содержать те же иконки, но размером в два раза больше для устройств с ретина экранами.
Для примера, я добавлю два файла иконок: checkmark.png
и star.png
, которые можно найти в исходных файлах, которые можно скачать для данного туториала.



Каждая иконка будет обладать отдельным CSS классом, для которых мы будем использовать Sass список со всеми именами иконок файлов. Откройте _vars.scss
и добавьте следующий код:
1 |
// Icons |
2 |
//--------------------------------------------// |
3 |
// map *.png icon files |
4 |
$icons_sprite: sprite-map( "icons/*.png" ); |
5 |
$icons_sprite2x: sprite-map( "icons@2x/*.png" ); |
6 |
|
7 |
// generate the icons sprites |
8 |
$sprites_file: sprite-url( $icons_sprite ); |
9 |
$sprites2x_file: sprties-url( $icons_sprite2x ); |
10 |
|
11 |
$sprites_url: url( "images/" + sprite-path( $icons_sprite ) ); |
12 |
$sprites2x_url: url( "images/" + sprite-path( $icons_sprite2x ) ); |
13 |
|
14 |
// list with theme icons file names (found in icons and icons@2x folders) |
15 |
$theme_icons: ( "checkmark", "star" ); |
Compass найдёт все файлы *.png
изображений внутри каталога иконок и сгенерирует два спрайта изображений в каталоге images
. После чего нам следует создать CSS класс для данных изображений.
Чтобы найти необходимую позицию изображения в спрайте, мы сделаем два хелпер миксина. Для этого, создайте новый файл и назовите его _mixins.scss
, откройте его и скопируйте следующий код:
1 |
// Icons |
2 |
//--------------------------------------------// |
3 |
@mixin sprite_icon( $name, $sprite ) { |
4 |
|
5 |
@include sprite-dimensions( $sprite, $name ); |
6 |
background-position: sprite-position( $sprite, $name ); |
7 |
} |
8 |
|
9 |
@mixin retina_sprite_icon( $name, $sprite ) { |
10 |
|
11 |
$pos: sprite-position( $sprite, $name ); |
12 |
background-position: nth( $pos, 1 ) nth( $pos, 2 ) / 2; |
13 |
@include background-size( ceil( image-width( sprite-path( $sprite ) ) / 2 ) auto ); |
14 |
} |
Оба миксина принимают название, а также спрайт в качестве аргументов. Миксин установит ширину, высоту и позицию фона для иконки в сгенерированном спрайте. retina_sprite_icon
установит соответствующий размер фона для ретина иконок.
Теперь пришло время добавить классы для иконок. Создайте _icons.scss
и сохраните его внутри каталога /sass/modules/
. Затем, скопируйте в него следующее содержание:
1 |
/*! =Icons
|
2 |
-------------------------------------------------------------- */
|
3 |
@if ( length( $theme_icons ) > 0 ) { |
4 |
|
5 |
.icon { |
6 |
display: inline-block; |
7 |
background: $sprites_url no-repeat; |
8 |
}
|
9 |
|
10 |
@each $icon in $theme_icons { |
11 |
|
12 |
.#{ "icon--" + $icon } { |
13 |
|
14 |
@include sprite_icon( $icon, $icons_sprite ); |
15 |
}
|
16 |
}
|
17 |
|
18 |
@media
|
19 |
only screen and (-webkit-min-device-pixel-ratio: 2), |
20 |
only screen and ( min--moz-device-pixel-ratio: 2), |
21 |
only screen and ( -o-min-device-pixel-ratio: 2/1), |
22 |
only screen and ( min-device-pixel-ratio: 2), |
23 |
only screen and ( min-resolution: 192dpi), |
24 |
only screen and ( min-resolution: 2dppx) { |
25 |
|
26 |
.icon { |
27 |
background: $sprites2x_url; |
28 |
}
|
29 |
|
30 |
@each $icon in $theme_icons { |
31 |
|
32 |
.#{ "icon--" + $icon } { |
33 |
|
34 |
@include retina_sprite_icon( $icon, $icons_sprite2x ); |
35 |
}
|
36 |
}
|
37 |
}
|
38 |
|
39 |
}
|
Мы обходим циклом список с именами иконок, который определён в $theme_icons
и генерируем стили для ретина и обычных иконок, используя миксин. Далее мы создаём класс .icon
, который будет являться основным модулем наших иконок, после чего модуль классов модификаторов для каждой иконки в списке.
В этом примере, создаётся .icon--checkmark
и .icon--star
классы. Вот пример использования иконки звёздочки (star icon):
1 |
<i class="icon icon--star"></i> |
Наконец, давайте импортируем миксины и модуль иконок в style.scss
:
1 |
@import "compass"; |
2 |
|
3 |
@import "vars"; |
4 |
@import "mixins"; |
5 |
@import "theme_info"; |
6 |
|
7 |
// Base |
8 |
@import "base/normalize"; |
9 |
|
10 |
// Helpers |
11 |
@import "helpers"; |
12 |
|
13 |
// Modules |
14 |
@import "modules/icons"; |
15 |
|
16 |
// States |
17 |
@import "states/media_queries"; |
Заключение
Sass и Compass довольно мощные инструменты и могут значительно облегчить работу во время разработки WordPress темы или WordPress плагина. Данная статья поможет вам начать использовать данные инструменты для создания более эффективного рабочего процесса с WordPress.
Для тех кого интересует больше деталей и информации касательно темы рассмотренной в данном туториале взгляните на следующие статьи: