回答:
クマーが指摘するように、これはサス以来可能3.3.0.rc.1 (Maptastic Maple)
でした。
@ at-rootディレクティブにより、1つ以上のルールが親セレクターの下にネストされるのではなく、ドキュメントのルートで発行されます。
@at-root
ディレクティブと補間#{}
を組み合わせて、意図した結果を得ることができます。
SASS
.item {
color: black;
@at-root {
a#{&} {
color:blue;
}
}
}
// Can also be written like this.
.item {
color: black;
@at-root a#{&} {
color:blue;
}
}
出力CSS
.item {
color: black;
}
a.item {
color: blue;
}
.item a.item
何らかの理由で出力が出ています。私a#{&}
自身も試してみましたが、結果は同じです。
@at-root
あなたがチェーンアップし、最も近いセレクタを延長する場合のみの方法は、問題を解決することはできません。例として:
#id > .element {
@at-root div#{&} {
color: blue;
}
}
コンパイルされます:
div#id > .element {
color: blue;
}
.element
代わりにタグを結合する必要がある場合はどうなります#id
か?
これselector-unify()
を解決するSassという関数があります。これを使う@at-root
とターゲットを絞ることができ.element
ます。
#id > .element {
@at-root #{selector-unify(&, div)} {
color: blue;
}
}
コンパイルされます:
#id > div.element {
color: blue;
}
#id > .element #id > div.element { color: blue; }
ます。別のアプローチは、使用することですselector_replace
、#id { > .element { @at-root #{selector-replace(&,'.element', 'div.element')} { color: blue;}}}
。読みやすくするための要点を次に示します。
selector-replace
も、それを行う別の方法ですが、セレクターが何であるかを知る必要があります。このselector-unify
方法には、ミックスインで使用されるという利点があります。
まず、この回答を書いている時点では、selector&を使用するsass構文はありません。そのようなことを行う場合は、セレクターとアンパサンドの間にスペースが必要になります。例えば:
.item {
.helper & {
}
}
// compiles to:
.helper .item {
}
アンパサンドを使用するもう1つの方法は、おそらく(誤って)探しているものです。
.item {
&.helper {
}
}
// compiles to:
.item.helper {
}
これにより、他のクラス、ID、疑似セレクターなどでセレクターを拡張できます。残念ながら、これは理論的には.itemaのようにコンパイルされ、明らかに機能しません。
CSSの書き方を考え直したいだけかもしれません。使用できる親要素はありますか?
<div class="item">
<p>text</p>
<p>text</p>
<a href="#">a link</a>
</div>
このようにして、次の方法でSASSを簡単に作成できます。
.item {
p {
// paragraph styles here
}
a {
// anchor styles here
}
}
(補足:HTMLを確認してください。一重引用符と二重引用符を混在させ、pタグにhref属性を配置しています。)
href
タグを付けている誰かにp
動作するCSSを書いてもらうことを試みています。
.item { a& }
と、私の知る限り承知しているとして(そのためのSASSの構文はありません。私は、彼はおそらくあなたがサスでかなり定期的に使用されている説明アンパサンド構文のようなものを探していたが示唆された。しかし、OPの例を踏まえ、.item { &a }
あります有効ではないため、にコンパイルされ.itema
ます。答えで言ったように、何か足りないものはありますか?
.item { a& { ... } }
、@ Blaineがで指摘するようになりました.item { @at-root a#{&} { ... } }
。重要なのは、要素にクラスがある場合は簡単に実行.item { &.class { ... } }
できるため、生のhtml要素で同じことを行えないはずです。OPが投稿された時点でそれを行う方法がなかったからといって、機能が実際にそれを実行することを望んでいるのは彼が不正確であったわけではありません。
AFAIKクラスとタグのアンパサンドを同時に組み合わせる場合は、次の構文を使用する必要があります。
.c1 {
@at-root h1#{&},
h2#{&}
&.c2, {
color: #aaa;
}
}
コンパイルされます
h1.c1,
h2.c1,
.c1.c2 {
color: #aaa;
}
その他の使用法(前にクラスを使用する、@at-root
複数@at-root
のを使用するなど)はエラーになります。
お役に立てれば幸いです
#{&}
基本的にコンパイラをだましている-またはこれは常に将来的に機能します!?
#{}
が評価されます。&
現在のセレクタも意味します。したがって#{&}
、に評価され.c1
ます。