LESSの即時子セレクター


112

とにかく、LESSの出力に直接の子セレクター(>)を適用させる方法はありますか?

私のスタイルでは、以下のようなものを書きたいです:

.panel {
    ...
    > .control {
        ...
    }
}

そしてLESSに次のようなものを生成させます:

.panel > .control { ... }


15
面白いことに、質問のスニペットはすでに正しい答えでした。
thirtydot

@thirtydot確かに、機能しないことを除いて...スペースを削除したり、「&」を追加しない場合はそうではありません。less.jsを使用しています。他のパーサーについては確かに言うことはできません。
Dave、

2
私はちょうどそれをテストしてみた、そしてあなたの質問から元のコードはありません less.js.で仕事を 自分の目で確かめ
thirtydot

1
はい、申し訳ありませんが、それは空間の魅力のように機能します。+1してください。昨日何時間もそれがうまくいかなかったのかわかりません...そうでなければ、質問を投稿しなかっただろう。
Dave

回答:


144

更新

実際、元の質問のコードは問題なく機能します。>子セレクターをそのまま使用できます。


答えが見つかりました。

.panel {
    ...
    >.control {
        ...
    }
}

">"と "。"の間にスペースがないことに注意してください。スペースがないと機能しません。


4
それが具体的に文書化されていない限り、それがそこのスペースで機能しない場合、それがバグであることは疑いません。
BoltClock

これは単にパーサーをだますことです。それは単一のセレクターと見なされるため、を取得し.panel >.controlます。
Ricardo Tomasi

私はそれをバグではなく機能と捉えています。このように使用すると、「&」とは対照的に、はるかに一貫性があります。子クラスではなく、疑似クラスで "&"のみを使用すると、コードがより明確になると思います。
Dave、

1
これはCSSの機能であり、div > pおよびの両方を受け入れますdiv>p。一貫性は常にセレクタ間のスペースを使用します(生成されたCSSを見てください)。
Ricardo Tomasi

確かに、私は&の使用の一貫性により関心を持っていました。
デイブ

78

公式の方法:

.panel {
  & > .control {
    ...
  }
}

& 常に現在のセレクターを参照します。

http://lesscss.org/features/#features-overview-feature-nested-rulesを参照してください


1
これもパーサーをだましているだけだと思います(他の答えについて感じたように)。説明させてください。あなたが言ったように、&は常に現在の(親)セレクターを指します。したがって、それ以降は何でも親に適用する必要があります。そして、それは疑似クラスの役割です。直接の子クラスは、疑似クラスではなく**** gasp ****子クラスに近くなります。したがって、>だけを使用する方が直感的で論理的です。
Dave

6
どちらがより正しいと思いますか?div > pまたはdiv >p&コンビネータは、標準的な方法は、LESS、ない私の気持ちでそれを行うです。あなたの説明は正直です。一部の人々は...一行で自分のCSSを書く
リカルドTomasiの

ほとんどの人はLESSを使用しているため、生成される実際のCSSを気にする必要はありません。とにかく、>の後にスペースを使用できることがわかります。したがって、&は完全に冗長です。
デイブ

13

正しい構文は次のとおりですが、「&」の使用はここでは冗長になります。

.panel{
   > .control{
   }
}

少ないガイドラインによると、「&」は祖先をパラメータ化するために使用されます(ただし、ここではそのような必要はありません)。で、このあまり例&:ホバーは不可欠オーバーです:ホバーそれ以外の場合は、構文エラーになります。ただし、ここで「&」を使用するためのそのような構文要件はありません。そうしないと、基本的に親を参照しているため、すべてのネストには「&」が必要になります。


1
@JJFは答えなので質問はありませんか?
Bill Woodger、2015年

0

より多くのセレクターをターゲットにする必要がある場合:

.parent {
    >.first-child,
    >.second-child,
    >.third-child {
    ...
    }
}

-1

あなたは、このような第一として、最初の子要素をターゲットにしている場合はまた、<td><tr>、あなたはこのようなものを使用することができます:

tr {
    & > td:first-child {font-weight:bold;}
}

これにより、不要なクラス宣言を減らすことができます。

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