Как часто верстальщику в своей работе требуется создавать спрайты?
Мне кажется, что почти в каждом проекте стоит такая задача. Ведь сегодня на каждом из сайтов имеется либо панель навигации с иконками, либо ссылки на социальные сети также с иконками.
Что такое CSS-спрайты, не буду вдаваться в подробности. В чем их преимущество и в чем профит их использования. А также, каким образом они создаются и используются. Мне кажется, читатель, которого заинтересовала тема создания спрайтов на Compass, и без того знает, что это такое.
В данной статье будет рассматриваться вопрос, каким образом можно автоматизировать и ускорить процесс создания спрайтов. Не знаю, как кто другой, но я использовал ручной метод создания спрайтов, с помощью Photoshop.
Также стоит сказать, что данная статья не претендует на полноту и точность. Материал дался автору с удивительным трудом, буквально по крупицам (хотя в Сети есть много хороших материалов по этой теме на английском языке).
Создание нового проекта в Compass
Создаем чистый Compass-проект с нуля, как обычно:
… и настраиваем конфигурационный файл
этого проекта, приведя к следующему виду:1
config.rb
Особенно стоит обратить внимание на предпоследнюю строку:
… с помощью которой устанавливаются относительные пути к файлам изображений в проекте. Если не активировать данную строку, то спрайт не сможет подключиться к элементам в документе.
Подключение плагина спрайтов
Делается это как обычно в библиотеке Compass, одной строкой импортирования:
Далее, как правило, следует долгий и нудный процесс вырезания изображений из psd-макета. В данном примере этот процесс будет заменен на более быстрый и красивый. Мы воспользуемся готовым бесплатным набором иконок, который скачаем из бескрайних просторов Интернета.
Затем создадим в каталоге
подкаталог 1
img
(1
webicons
) и распакуем в него скачанный архив.1
img/webicons
Также стоит отметить, что плагин для работы со спрайтами в библиотеке Compass может работать только с изображениями формата
. Поэтому перед созданием спрайтов необходимо создать отдельный каталог, в котором будут размещены все изображения, из которых будут создаваться спрайт.1
.png
Скачивание библиотеки с иконками
Набор темных иконок в формате
подойдет любой, главное, чтобы он был бесплатным. Например, такой - WPZOOM Developer Icon Set.1
.png
Далее создаем отдельную директорию, в которой будет размещен полученный набор иконок:
Подключение набора иконок в проект
Подключение набора изображений (иконок в нашем случае) в проект производится директивой:
Точнее, этой директивой создается карта изображений
.1
map
Создание спрайта
Спрайт создается в библиотеке Compass c помощью миксина
, где [folder-name] - имя каталога с изображениями. В нашем случае данный миксин будет выглядеть таким образом:1
@include all-[folder-name]-sprites;
Если теперь взглянуть на директорию с проектом в файловом менеджере, то увидим, что в каталоге добавился новый файл-картинка в формате
:1
.png
В файле
сгенерируется код, в котором появятся имена классов для каждого из изображений. Также для каждого из изображений будет добавлено позиционирование (точнее - оно будет вычислено). Также стоит обратить внимание на CSS-свойство 1
style.css
.1
background
Значение его имеет правильный относительный путь -
, это сработала переменная 1
../img/...
в конфигурационном файле 1
relative_assets = true
.1
config.rb
Создание списка
В HTML-документе создаем обычный маркированный список:
… и выполняем его легкое форматирование на SCSS:
Преобразуем маркированный список с помощью магии Compass в горизонтальный список, воспользовавшись миксином
. Аргумент 1
horizontal-list($padding, $direction)
опустим за ненадобностью, а в качестве аргумента 1
$direction
передадим отступ, равный переменной:1
$padding
Добавление иконок в список
Можно воспользоваться готовыми именами классов, созданными библиотекой Compass. То есть, открыть (в нашем случае) файл
, взять оттуда нужные имена классов (1
style.css
, 1
.webicons-agenda
, 1
.webicons-arrow-down
, 1
.webicons-arrow-left-down
, …) и добавить их в HTML-разметку.1
.webicons-arrow-left-up
Но такой способ будет не совсем правильным, так как HTML-разметка будет “загрязнена” избыточными именами классов. Когда как можно легко избежать этого недостатка, применив директиву
:1
@extend
Оцените чистоту этого способа - HTML-разметка не тронута, а в HTML-документе все работает так, как и было задумано.
Управлением расположения иконок на спрайте
Иногда при создании спрайта может появиться задача расположить изображения внутри создаваемого спрайта определенным образом - по-горизонтали, по-вертикали или каким-то еще образом. Библиотека Compass может помощь в этом случае и легко решить поставленную задачу.
Переменная
управляет расположением иконок в создаваемом библиотекой Compass спрайте.1
[folder-name]-layout: vertical | horizontal | diagonal | smart
Имя переменной состоит из двух значений, первое из которых - это имя каталога, в котором расположены изображения. Таким образом, в случае данного примера переменная будет иметь вид:
По умолчанию в переменной
используется значение 1
[folder-name]-layout
:1
vertical
… которое можно поменять на три других:
-1
горизонтальное
:1
horizontal
-1
диагональное
:1
diagonal
- стоит особо отметить “умное” расположение -
, которое умеет экономить место на спрайте (сравните в почти точно таким же расположением изображений при вертикальном1
smart
и почувствуйте разницу!):1
layout
Добавлять переменную
нужно перед объявлением каталога с иконками:1
[folder-name]-layout
Управление расстоянием между изображениями на спрайте
На создаваемом спрайте все изображения расположены таким образом, чтобы быть максимально тесно прижатыми друг к другу. Таким образом убирается лишнее пустое пространство и уменьшается общий размер спрайта в целом.
Но может потребоваться задача увеличить расстояние между изображениями на спрайте. С помощью библиотеки Compass это можно выполнить при помощи переменной
.1
[folder-name]-spacing
В имени этой переменной
- это имя каталога с расположенными в нем изображениями. В нашем случае имя каталога 1
folder-name
, поэтому имя переменной будет - 1
webicons
.1
$webicons-spacing
Для примера зададим расстояние в 10px между изображениями на спрайте:
В результате между изображениями появиться промежуток, равный 10px:
Управление именами создаваемых классов в спрайте
Можно изменить тот способ, каким библиотека Compass создает имена классов в спрайте.
Первоначальный (по умолчанию) вид имен классов имеет представление:
Можно отделить имя директории с расположенными в нем изображениями от имени каждого из изображений, по отдельности. Чтобы было более понятно, сразу выполним такое преобразование:
… и посмотрим на конечный результат:
Видно, что вместо одного длинного имени появилось два класса. Преимуществом такого способа мне кажется отсутствие необходимости “городить” длинные имена, как в примере с подключением:
Получение размеров создаваемого спрайта
Иногда может потребоваться так, чтобы при генерации спрайта библиотекой Compass автоматически были “отображены” в файле
размеры каждого изображения. Входящего в состав этого спрайта.1
.css
По умолчанию размеры изображений не отображаются в готовом CSS-коде:
Но при включении переменной
(по умолчанию ее значение равно 1
[folder-name]-sprite-dimensions: true;
) размеры каждого из изображений будут отображены в CSS-коде:1
false
Как и в предыдущих случаях с переменными в спрайте библиотеки Compass, вместо
необходимо подставить имя каталога, в котором размещены файлы изображений. В нашем случае имя переменной будет выглядеть следующим образом:1
folder-name
Пока на этом все …