LESS CSSネストクラス


101

CSSを改善するためにLESSを使用しており、クラスをクラス内にネストしようとしています。かなり複雑な階層がありますが、何らかの理由で私の入れ子が機能しません。私はこれを持っています:

.g {
    float: left;
    color: #323a13;
    .border(1px,#afc945);
    .gradient(#afc945, #c8da64);
    .common;
    span {
        .my-span;
        .border-dashed(1px,rgba(255,255,255,0.3));
    }
    .posted {
         .my-posted;
         span {
            border: none;
         }
    }
}

動作しません.g.posted。それは単に.gビットを示しています。私がこれをするならそれは大丈夫です:

.g {
    float: left;
    color: #323a13;
    .border(1px,#afc945);
    .gradient(#afc945, #c8da64);
    .common;
    span {
        .my-span;
        .border-dashed(1px,rgba(255,255,255,0.3));
    }
}

.g.posted {
         .my-posted;
         span {
            border: none;
         }
    }

私は巣にたい.posted.gかかわらず。何か案は?

回答:


192

&文字がする機能を有するthisキーワードを、実際に(事は、私は答えを書いている時点では知りませんでした)。書くことは可能です:

.class1 {
    &.class2 {}
}

生成されるCSSは次のようになります。

.class1.class2 {}

ちなみに、@ grobittoが最初にこの情報を投稿しました。


[元の回答]

LESSはこの方法では機能しません。

.class1.class2 {} -同じDOMノードで2つのクラスを定義しますが、

.class1 {
    .class2 {}
}

ネストされたノードを定義します。.class2クラスを持つノードの子である場合にのみ適用されますclass1

私もこれと混同されており、私の結論は、LESSにはthisキーワードが必要だということです。


5
sass&演算子で組み込まれたその機能があります。
sevenseacat、2011

2
LESSは今でも素晴らしいです。特にPHP LESSプリプロセッサは、変更されたより柔軟な構文を備えています。しかし、一般に受け入れられている構文がいくつかあるまで、そのような問題は時々発生します。私の見解では、これはLESSの唯一の欠点です。
ミンゴ

1
@ newbie_86 sassとネイティブのcss構文を混在させることはできません。したがって、Sassに移行するには、スタイルを完全に書き直す必要がありますが、既存のスタイルをコンパイルして、少しずつ書き直すことができます。
2013年

1
同じで、後者の日付があるにもかかわらず、なぜ2番目の回答がこれよりも多くのupsを持っているのか、私は興味を持っていました。それから私は最後の文を見て、両方の答えを
上向きにし

@トップレス "sassとネイティブのcss構文を混在させることはできません"とはどういう意味ですか。私にとってはうまくいきます。
Shanimal

115
.g {
    &.posted {
    }
}

.postedの前に「&」を追加する必要があります


2

アンパサンドがネストの子要素のすぐ隣にある場合は、ダブルクラスセレクターにコンパイルされます。&とセレクターの間にスペースがある場合、子セレクターにコンパイルされます。ネスティングの詳細については、こちらの Lessを参照してください

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.