Прочитал одну статью, посвященную проблеме создания кода в CSS и Sass.
Статья мне чрезвычайно понравилась - можно даже сказать, я был в восхищении о нее и от того, что написал ее автор. В ней вкратце описывались основные “опорные” моменты при написании кода в CSS/Sass. Одним из таких “опорных” моментов упоминались Breakpoint в Sass.
Так как я большой поклонник этого препроцессора, то мне интересны все вопросы, связанные с ним. Поэтому мимо такой технологии, как Breakpoint - я просто не мог пройти мимо.
Итак, давайте знакомиться с Breakpoint в препроцессоре Sass. Прежде всего, Breakpoint - это расширение (модуль) для хорошо известной и популярной библиотеки-фреймворка Compass. Создан он двумя web-разработчиками Mason Wendell и Sam Richard.
Основная идея и цель создания этого модуля - сократить к одной строке создание медиа-запроса и возможность задавать для медиа-запросов осмысленные имена.
Установка модуля Breakpoint
Первое, что необходимо сделать, это установить в систему сам модуль
. Делается это обычной командой Ruby-окружения:1
breakpoint
Но тут могут быть несколько подводных камней, с которыми лично мне пришлось столкнуться (не знаю, как уж читателям). Первое - если у вас уже установлены
и 1
sass
обычным способом, через команды:1
compass
… то велика вероятность, что у вас в системе стоят Sass версии 3.2.18 и Compass версии 0.12.4. Поверить этот факт можно командой в терминале:
Однако, на момент написания статьи разрабатывается библиотека Compass под версией
, которую уже можно использовать несмотря на ее экспериментальный вид. Более того, модуль 1
1.0.0.alpha.19
совместим только с библиотекой Compass этой версии (1.0.0.alpha.19).1
breakpoint
Поэтому, при запуске команды:
… будет произведено автоматическое обновление пакетов
и 1
sass
до версий Sass 3.3.4 и Compass 1.0.0.alpha.19. После успешной установки модуля 1
compass
можно создать через Compass новый проект, указав при этом, что в проекте требуется поддержка (required) модуля 1
breakpoint
:1
breakpoint
Заходим в созданную директорию и пробуем запустить Compass на мониторинг изменений во всех файлах проекта. Но не тут то было:
Compass пишет в терминале, что ему не хватает модуля
и не запускается в режим мониторинга. Что такое 1
wdm
, я не знаю (я не Ruby-разработчик), но подозреваю, что это какой-то модуль. И его придется установить.1
wdm
Для этого необходимо скачать с оф. сайта Ruby пакет разработчика Development Kit (Device). Мною скачивалась версия
. Ее нужно распаковать в любое (постоянное) место - папку, но при этом не туда же, где уже стоит у вас Ruby. Затем в терминале зайти в эту папку и запустить последовательно три команды (не обращая внимание, что они там пишут в ответ):1
DevKit-tdm-32-4.5.2-20111229-1559-sfx.exe
А затем в этом же терминале снова запустить установку загадочного (для меня) модуля
:1
wdm
После этого процесс пройдет успешно и Compass, наконец-то, “заткнется” и станет делать то, что от него требуют - мониторинг содержимого папки:
Теперь открывает уже созданный Compass файл
и дописываем в его начало строчку:1
screen.scss
… говоря те самым, что в наш проект необходимо включить модуль
. Если проект создавался не с нуля, а уже был готовым, то поддержку Breakpoint в него можно добавить, дописав в конфигурационный файл 1
breakpoint
строчку:1
config.rb
Дальнейшее знакомство с Breakpoint
Можно приступать к дальнейшему знакомству с Breakpoint.
Breakpoint - дословно с английского языка переводится как “опорная точка”. Медиа-запросы фактически и являются такими опорными точками. В правилах CSS мы указываем браузеру - при ширине
равной 480px сделать такой-то элемент таким-то; а при ширине 1
viewport
равной 768px сделать такой элемент другим! То есть, мы через CSS-правила определяем для браузера подобные опорные точки. Модуль Breakpoint позволяет создавать опорные точки в коде SCSS с помощью одной строки - через миксин (mixin) 1
viewport
.1
breakpoint
Простейший пример применения миксина
приведен ниже:1
breakpoint
То есть, сначала инициализируется переменная
со значением 500px. Затем селектору класса 1
$high-tide
задается CSS-правило через подключение миксина 1
.johnny-utah
, аргументом которому передается значение переменной 1
@include breakpoint
. В теле миксина пишется, что нужно сделать браузеру - создать контент 1
$high-tide
(в данном случае).1
Whoa.
Результатом генерации в CSS будет следующий код:
Предельно просто! ОК, немного усложним задачу и продвинемся дальше, чтобы на примере лучше понять, что из себя представляют Breakpoint:
Здесь мы создали три переменные
, 1
$bkpt-login-small
, 1
$bkpt-login-medium
с помощью которых установили три опорные точки для адаптивного дизайна. А затем в SCSS-правилах через подключение миксина 1
$bkpt-login-large
для каждой опорной точки задаем правило для элемента 1
@include breakpoint
, последовательно указывая этому миксину переменные в качестве аргументов. Результат работы этого кода приводить не буду - вы можете сами набрать его в редакторе и проверить!1
body
Варианты аргументов миксина Breakpoint
Миксин
в качестве аргумента может принимать не только одно значение, как в примере выше.1
breakpoint
Два числа в качестве значений
Переменной можно задать два числа в качестве значений:
В этом случае модуль Breakpoint автоматически распознает и преобразует их в пару значений min-width/max-width:
Имя и значение этого имени
Переменной можно задать имя и значение этого имени:
Модуль Breakpoint распознает его следующим образом:
Расширенный вариант имени и значения
И можно пойти еще дальше:
Breakpoint воспримет это таким образом:
Настройки модуля Breakpoint
Модуль Breakpoint имеет совсем немного настроек, которые выражаются в четырех переменных, которые можно легко переопределить в рамках разрабатываемого проекта:
- тип медиа-запроса. По умолчанию его значение равно1
$breakpoint-default-media
, то есть медиа-запрос применим ко всем типам устройств: мониторы, телефизоры и так далее.1
all
- по умолчанию установлено в значение1
$breakpoint-default-feature
как наиболее часто используемое на практике. То есть, это запрашиваемая характеристика типа устройства.1
min-width
- установлено в значение1
$breakpoint-default-pair
по умолчанию. То есть, при передаче миксину1
min-width/max-width
пары чисел (к примеру - 400px и 500px) он распознает их как1
breakpoint
и1
min-width: 400px
.1
max-width: 500px
- по умолчанию установлено в значение1
$breakpoint-to-ems
. Если перевести этот параметр в значение1
false
, то при передаче миксину1
true
аргументов в любых единицах измерения (1
breakpoint
,1
px
,1
pt
) они будут автоматически переконвертированы в1
%
! Круто!1
em
Чтобы не быть голословным, приведу пример настройки последнего параметра -
:1
$breakpoint-to-ems
Авторами модуля Breakpoint была сделана еще одна дополнительная “плюшка” - поддержка кроссбраузерности для экранов повышенного разрешения (так называемых Retina-экранов). Чтобы не писать по отдельности медиа-запрос для каждого из движков браузеров:
… можно писать краткий медиа-запрос:
… который преобразует полученное браузером значение в стандартное разрешение экрана.
Заключение
Перечисленные возможности модуля Breakpoint являются основными, но не единственными. Однако, как мне кажется, этих основных возможностей хватит для 90% случаев на практике. Если же кто желает углубить свои познания в модуле Breakpoint, это легко можно сделать на оф. сайте проекта.
При написании этой статьи активно использовались два бесценных источника (а примеры кода вообще были скопированы оттуда самым наглым образом):
- INTRODUCING BREAKPOINT; MEDIA QUERIES MADE EASY
- Breakpoint Really Simple, Organized, Media Queries with Sass
Очень вольный перевод и компиляция этих двух статей была сделана с энтузиазмом и на одном дыхании.