Часто дизайнеры делают в макетах кнопки разных размеров и величин, некоторые из которых повторяются, некоторые нет. Неплохо было бы организовать систему для быстрого добавления и редактирования кнопок, в чем на могут помочь sass @extend’s. Приведу небольшую иллюстрацию кнопок в типичном проекте.
HTML для наших кнопок будет неизменным в течение всей статьи:
Как не надо делать
Первое что может прийти в голову верстальщику — записать стили для кнопок сразу в классы наших элементов.
SCSS:
Мы написали стили для нашего основного класса, теперь сделаем его модификаторы по цвету(для цвета использованы переменные для удобства):
Пока все просто и понятно.Но на следующей странице появляется вот такая кнопка:
Эта кнопка имеет те же размеры, что и предыдущие, но другое оформление. Давайте нарушим принцип DRY и скопируем стили для нее от наших предыдущих кнопок:
С размерами определились, давайте добавим оформление:
Ну и немного стилей для размещения нашей кнопки:
Идем дальше и на другой странице встречаем следующую кнопку:
Оформление осталось прежним, а вот размеры кнопки и шрифта изменились. И тут перед нами два пути:
Продолжать копировать стили для разных кнопок и давать им уникальные классы
Сделать специальные классы для оформления и добавлять его в наши теги
Минусы каждого из этих подходов очевидны. В первом мы копируем слишком много кода, и когда нужно что-либо изменить — менять нужно в нескольких местах. Во втором мы добавляем презентационные классы, и это тоже плохо(любители Bootstrap бы возразили).
Но есть и третий путь — использование sass @extend(Это можно реализовать в любом препроцессоре).
Третий путь
Примеси для кнопок положите в отдельный файл — buttons.scss, это крайне удобно.Мы будем разделять их на размеры(+типографика) и цветовые схемы.Напишем классы для размеров:
Отлично, а теперь цветовые схемы:
Вот мы и получили гибкую систему для организации кнопок.Теперь наш scss будет выглядеть следующим образом:
Если появляется новая цветовая схема - мы просто делаем для нее @extend и используем, если изменяется текущая - правим в одном месте.
Ключевые моменты
Используем тихие классы, а не миксины(меньше результирующего CSS)
Если у вас на сайте одна-две кнопки - данная система будет излишней
В тихих классах объявляется display:block, потом это можно переписать в правиле селектора