Для пояснения, другие ссылки на вопросы НЕ задают то же самое. Это простой вопрос: «Есть ли у LESS расширенная функция?». Другой вопрос - это то, что требует гораздо большего обдумывания решений по стилю.
jonschlinkert
... чтобы добавить к моему последнему комментарию, другой вопрос включает тег "стиль кодирования", который еще больше подтверждает мою точку зрения.
Вместо реализации @extendсинтаксиса at-rule ( ), используемого SASS и Stylus, LESS реализовал синтаксис псевдокласса, который дает реализации LESS гибкость, которую можно применять либо непосредственно к самому селектору, либо внутри оператора. Итак, оба они будут работать:
.sidenav:extend(.nav) {...}
или
.sidenav {
&:extend(.nav);
...
}
Кроме того, вы можете использовать эту allдирективу для расширения «вложенных» классов:
.sidenav:extend(.navall){};
И вы можете добавить список классов, которые вы хотите расширить, через запятую:
«Синтаксис LESS более« верен »традиционному CSS, чем @extendсинтаксис at-rule ( ), реализованный SASS и Stylus, который обычно зарезервирован для предоставления инструкций или директив синтаксическому анализатору CSS в браузере». <- что, черт возьми, это должно значить? Пахнет маркетингом.
@cimmanon Думаю, ты прав, я не хотел, чтобы это так звучало. Но есть много споров о синтаксисе Less, по-видимому, потому, что люди ожидали, что Less будет использовать тот же синтаксис, что и SASS. Но в CSS псевдоселекторы используются для правил сопоставления с образцом, чтобы определить, какие правила стиля применяются к элементам в дереве документа, тогда как правила at используются для директив «более высокого уровня» (как я уже упоминал). Так, может быть, мне следует отредактировать ответ, чтобы указать эту деталь? Или это еще один вопрос: «Почему LESS выбрал синтаксис псевдоселектора?»
jonschlinkert
4
вам действительно стоит обновить документацию less онлайн, я ничего не вижу о: extend (), и было бы хорошо узнать раньше
Джошуа Бамбрик
2
Документация, как и код, поддерживается сообществом. Такие предложения было бы здорово иметь в реальном репо, и запросы на вытягивание всегда приветствуются ;-)
Ответы:
Да, 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; }
источник
@extend
синтаксис at-rule ( ), реализованный SASS и Stylus, который обычно зарезервирован для предоставления инструкций или директив синтаксическому анализатору CSS в браузере». <- что, черт возьми, это должно значить? Пахнет маркетингом.Простой способ расширить функцию в Less framework
.sibling-1 { color: red } .sibling-2 { background-color: #fff; .sibling-1(); }
.sibling-1 { color: red } .sibling-2 { background-color: #fff; color: red }
См. Https://codepen.io/sprushika/pen/MVZoGB/
источник