Чи МЕНШ має функцію "розширення"?


93

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

Чи має LESS також цю функцію?


Для уточнення, інші посилання на питання НЕ задають те саме. Це запитання просте: "Чи має менше функція розширення?". Інше питання - це те, що вимагає набагато більше продумувати рішення щодо стилізації.
jonschlinkert

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

Відповіді:


156

Так, Less.js представлений extendу версії 1.4 .

: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 Думаю, ти маєш рацію, я не мав на увазі, щоб це звучало так. Але існує багато суперечок щодо синтаксису Лесса, мабуть, тому, що люди очікували, що Менше буде використовувати той самий синтаксис, що і SASS. Але в CSS, псевсоселектори використовуються для правил відповідності шаблонів, щоб визначити, які правила стилів застосовуються до елементів дерева дерева, тоді як at-правила використовуються для директив "вищого рівня" (як я вже згадував). Тож, можливо, я повинен відредагувати відповідь, щоб надати цю деталь? Або це інше питання: "Чому LESS обрав синтаксис псевдоселектора?"
jonschlinkert

4
ви дійсно повинні оновлювати менше документації в Інтернеті, я нічого не бачу про:
extension

2
Документація, як і код, підтримується спільнотою. Такі пропозиції були б чудовими на реальному репо, і запити на
виклики

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.