Есть ли у LESS возможность «продления»?


94

В SASS есть функция, @extendкоторая позволяет селектору наследовать свойства другого селектора, но без копирования свойств (например, миксинов).

Есть ли у LESS эта функция?


Для пояснения, другие ссылки на вопросы НЕ задают то же самое. Это простой вопрос: «Есть ли у LESS расширенная функция?». Другой вопрос - это то, что требует гораздо большего обдумывания решений по стилю.
jonschlinkert

... чтобы добавить к моему последнему комментарию, другой вопрос включает тег "стиль кодирования", который еще больше подтверждает мою точку зрения.
jonschlinkert

Ответы:


158

Да, Less.js появился extendв v1.4.0 .

:extend()

Вместо реализации @extendсинтаксиса at-rule ( ), используемого SASS и Stylus, LESS реализовал синтаксис псевдокласса, который дает реализации LESS гибкость, которую можно применять либо непосредственно к самому селектору, либо внутри оператора. Итак, оба они будут работать:

.sidenav:extend(.nav) {...}

или

.sidenav {
    &:extend(.nav);
    ...
}

Кроме того, вы можете использовать эту allдирективу для расширения «вложенных» классов:

.sidenav:extend(.nav all){};

И вы можете добавить список классов, которые вы хотите расширить, через запятую:

.global-nav {
    &:extend(.navbar, .nav all, .navbar-fixed-top all, .navbar-inverse);
    height: 70px;
}

При расширении вложенных селекторов вы должны заметить различия:

вложенные селекторы .selector1и selector2:

.selector1 {
  property1: a;
   .selector2 {
    property2: b;
   }
}

Теперь .selector3:extend(.selector1 .selector2){};выводит:

.selector1 {
  property1: a;
}
.selector1 .selector2,
.selector3 {
  property2: b;
}

, .selector3:extend(.selector1 all){};выходы:

.selector1,
.selector3 {
  property1: a;
}
.selector1 .selector2,
.selector3 .selector2 {
  property2: b;
}

, .selector3:extend(.selector2){};выходы

.selector1 {
  property1: a;
}
.selector1 .selector2 {
  property2: b;
}

и наконец .selector3:extend(.selector2 all){};:

.selector1 {
  property1: a;
}
.selector1 .selector2,
.selector1 .selector3 {
  property2: b;
}

15
«Синтаксис LESS более« верен »традиционному CSS, чем @extendсинтаксис at-rule ( ), реализованный SASS и Stylus, который обычно зарезервирован для предоставления инструкций или директив синтаксическому анализатору CSS в браузере». <- что, черт возьми, это должно значить? Пахнет маркетингом.
cimmanon


2
@cimmanon Думаю, ты прав, я не хотел, чтобы это так звучало. Но есть много споров о синтаксисе Less, по-видимому, потому, что люди ожидали, что Less будет использовать тот же синтаксис, что и SASS. Но в CSS псевдоселекторы используются для правил сопоставления с образцом, чтобы определить, какие правила стиля применяются к элементам в дереве документа, тогда как правила at используются для директив «более высокого уровня» (как я уже упоминал). Так, может быть, мне следует отредактировать ответ, чтобы указать эту деталь? Или это еще один вопрос: «Почему LESS выбрал синтаксис псевдоселектора?»
jonschlinkert

4
вам действительно стоит обновить документацию less онлайн, я ничего не вижу о: extend (), и было бы хорошо узнать раньше
Джошуа Бамбрик

2
Документация, как и код, поддерживается сообществом. Такие предложения было бы здорово иметь в реальном репо, и запросы на вытягивание всегда приветствуются ;-)
jonschlinkert

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.