最終的には、有効な CSS を出力する必要があります。それが、Stocki が彼の答えで得ようとしていたことだと思います。LESS コーディングに関する限り、少なくとも 3 つ (LESS のバージョンによっては 4 つ) の異なる方法があります。
次のコードが示すこと...
...これは、LESS 入力と CSS 出力の組み合わせが、この特定のユース ケースで #1 よりも「短い」ものではないということです(より深いネストは #3 の恩恵を受ける可能性があります)。純粋に LESS を削減したいが、より多くの CSS 出力を気にしない場合 (私がそうするかどうかはわかりません)、#2 が選択される可能性があります (生成されたクラスを後で mixin 自体として使用する必要がないと仮定して)
未満 1.3.1+
#1:いくつかのコードを繰り返すだけ
LESS (19 行)
.dropdown-menu, .team-contact {
li {
a {
line-height: 40px;
overflow: hidden;
padding-left: 40px;
position: relative;
text-overflow: ellipsis;
display:block;
}
}
}
.team-contact {
li {
a {
line-height: 20px;
}
}
}
CSS 出力 (12 行)
.dropdown-menu li a, .team-contact li a { line-height: 40px; オーバーフロー: 非表示; パディング左: 40px; 位置: 相対; テキストオーバーフロー: 省略記号; 表示ブロック; } .team-contact li a { line-height: 20px; }
#2: 両方のクラスを完全に定義する mixin
LESS (16 行 [#1 から -3])
.shareProps(@className, @lh: 40px) {
.@{className} {
li {
a {
line-height: @lh;
overflow: hidden;
padding-left: 40px;
position: relative;
text-overflow: ellipsis;
display:block;
}
}
}
}
.shareProps(dropdown-menu);
.shareProps(team-contact, 20px);
CSS 出力 (16 行 [#1 から +4])
.dropdown-menu li a {
line-height: 40px;
overflow: hidden;
padding-left: 40px;
position: relative;
text-overflow: ellipsis;
display: block;
}
.team-contact li a {
line-height: 20px;
overflow: hidden;
padding-left: 40px;
position: relative;
text-overflow: ellipsis;
display: block;
}
#3: デフォルト用にグループ化してからオーバーライドを生成する mixin
LESS (21 行 [#1 から +2])
.shareProps(@lh: 40px, @share: 0) {
li {
a {
line-height: @lh;
.setShare();
}
}
.setShare() when (@share = true) {
overflow: hidden;
padding-left: 40px;
position: relative;
text-overflow: ellipsis;
display:block;
}
}
CSS 出力は#1 と同じ(12 行)
LESS 1.4.0 (#3 と同様ですが、 を使用extend
)
LESS の行数と CSS Output は上記の #3 のようになります。
以下
.shareProps(@lh: 40px, @share: 0) {
li {
a {
line-height: @lh;
.setShare();
}
}
.setShare() when (@share = true) {
overflow: hidden;
padding-left: 40px;
position: relative;
text-overflow: ellipsis;
display:block;
}
}
.dropdown-menu {
.shareProps(40px, true);
}
.team-contact:extend(.dropdown-menu all) {
.shareProps(20px);
}