Команда @extend

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

.browser, .ie, .cr, .fx {
  min-height: 16px;
  padding-left: 20px;
  background-repeat: no-repeat;
}

В Sass для этих целей применяется команда @extend, она автоматически группирует те селекторы, в которых добавляется @extend. Вначале мы пишем селектор, содержащий одинаковые стилевые правила для всей группы, затем к любому другому селектору добавляем @extend и через пробел имя первого селектора. В примере ниже показано применение этой команды на практике.

.browser {
  min-height: 16px; 
  padding-left: 20px; 
  background-repeat: no-repeat;
}
.ie { 
  @extend .browser;
  background-image: url(../img/browser_ie.png);
}
.cr { 
  @extend .browser;
  background-image: url(../img/browser_cr.png); 
}
.fx { 
  @extend .browser;
  background-image: url(../img/browser_fx.png); 
}

Наши селекторы различаются только значением background-image, остальные стилевые правила у них общие. Поэтому мы добавляем @extend для группирования и вот что получим на выходе.

.browser, .ie, .cr, .fx {
  min-height: 16px;
  padding-left: 20px;
  background-repeat: no-repeat;
}
.ie {
  background-image: url(../img/browser_ie.png);
}
.cr {
  background-image: url(../img/browser_cr.png);
}
.fx {
  background-image: url(../img/browser_fx.png);
}

Важно, чтобы @extend ссылался на имя класса описанного выше.

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

%browser {
  min-height: 16px; 
  padding-left: 20px; 
  background-repeat: no-repeat;
}
.ie { 
  @extend %browser;
  background-image: url(../img/browser_ie.png);
}
.cr { 
  @extend %browser;
  background-image: url(../img/browser_cr.png); 
}
.fx { 
  @extend %browser;
  background-image: url(../img/browser_fx.png); 
}

Теперь никакого класса browser нет и в помине.

См. также

Чего никто не говорил вам о команде @extend

http://www.sitepoint.com/sass-extend-nobody-told-you/

Автор и редакторы

Автор: Влад Мержевич
Последнее изменение: 16.07.2016
Редакторы: Влад Мержевич
Курс по вёрстке сайта на CSS Grid