2011-11-13 3 views
100

LESSに出力に直接子セレクタ(>)を適用させる方法はありますか?即時子セレクタがLESS

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

やLESSのようなものを生成している:

実際
.panel > .control { ... } 
+0

http://stackoverflow.com/questions/7634932/less-js-strong-nested-rules – thirtydot

+14

あなたの質問のスニペットはうまく答えました。 – thirtydot

+0

@thirtydotスペースを削除したり、 "&"を追加したりしないとうまくいかないことを除いて、確かに。 less.jsを使用しています他のパーサーには絶対に言えません。 – Dave

答えて

131

UPDATE

、内のコードを私のstyle.lessで

、私のような何かを書きたいです元の質問はうまく動作します。子セレクタ>を使うことができます。


答えを見つけました。

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

">"と "。"の間にスペースがないことに注意してください。それ以外の場合は機能しません。

+4

具体的に文書化されていない限り、スペースで動作しないとバグだとは思わないでしょう。 – BoltClock

+0

これはパーサをだますことです。それは単一のセレクタと見なされるので、 '.panel> .control'が得られます。 –

+0

私はバグではなく機能として取ります。これを "&"とは対照的に使用すると、一貫性が大幅に向上します。私はあなたが "&"擬似クラスではなく、子クラスで使用する場合は、より明確なコードだと思う。 – Dave

70

公式の方法:

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

&は、常に現在のセレクタを指します。これは、クラスの宣言時にを減らすことができます

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

:あなたは、このような<tr>の最初の<td>として、最初の子要素をターゲットにしている場合

は、あなたがこのようなものを使用することができ、また、http://lesscss.org/features/#features-overview-feature-nested-rules

+1

これはパーサをだますことです(他の回答について感じたように)。私に説明させてください。あなたが言ったように、&は常に現在の(親)セレクタを参照します。だからそれが後になるものは**親に**適用すべきです。そして、それは疑似クラスの役割です。即時の子クラスは、疑似クラスではなく****気になる****の子クラスに近い。したがって、>を使用する方が直感的で論理的です。 – Dave

+6

もっと正確だと思いますか? 'div> p'または' div> p'ですか? '&'コンビネータは、私の気持ちではなく、標準的な方法です。あなたの説明は、改革的です。 CSSを1行に書く人もいます... –

+0

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

-1

を参照してください。彼らは必要ではありません。

8

「&」を使用している間は、正しい構文が後になり、ここでは冗長になります。

.panel{ 
    > .control{ 
    } 
} 

less guidelinesによると、「&」が先祖をパラメータ化するために使用されている(ただし、ここではそのような必要はありません)。 this less exampleの場合、&:ホバーは、より重要です。ホバーの場合、構文エラーが発生します。しかし、ここで '&'を使用するための構文上の要件はありません。それ以外の場合は、本質的に親を参照するので、すべてのネストには「&」が必要です。

+1

@JJF答えなので質問しませんか? –