2017-06-26 10 views
1

外部コンポーネントSelectは、liタグをレンダリングする外部コンポーネントを持っています。 liの最初の文字を除いて、すべてmargin-leftの20pxを使用しています。外部コンポーネントの内部要素へのアクセス方法

const StyledSelect = styled(Select)` 
    li { 
    margin-left: 20px; 
    } 
` 

任意のアイデアは、なぜこれが動作していないか、これを行うための別の方法:以下

は、コードのですか?

+0

あなたのコードはすべてli Selectコンポーネント内の要素最初のliを除外するには、CSSのルール/セレクタを追加する必要があります。 [この質問](https://stackoverflow.com/questions/10033299/is-there-any-way-to-specify-a-css-shorthand-for-all-elements-except-the-first-l)を参照してください。 – devboell

+0

あなたの質問は少し不明です。 'margin-left:20px;'が適切に適用されていて、最初のliをどのように除外するのか疑問に思っていますか?あなたのスタイルはまったく適用されないのですか? – devboell

答えて

5

これはうまくいくはずですが、外部のSelectのスタイルがどのように適用されているかによって、より高い特異性を持ち、依然として適用したスタイルをオーバーライドしている可能性があります。お使いのSelectコンポーネント、それは少し難しいデバッグするのですが、私はそれが非常に持っているインラインスタイル(すなわちstyle小道具)を使用していますと仮定している知らない

(特異性がどのように動作するかのプライマーのためのthis articleを参照してください)高い特異性を示し、適用されるスタイルをオーバーライドします。

外部コンポーネントがインラインスタイルを使用していない場合、はお勧めできません。スタイルの特異性をバンプする2つの方法があります。

特異性をバンプする最初の方法は!importantを使用することです:十分でない可能性がありますいくつかのケースでは

const StyledSelect = styled(Select)` 
    li { 
    margin-left: 20px!important; 
    } 
` 

、そしてあなたが強制的に上書きする必要がある複数のプロパティを持ってたら、それはまた、かなり面倒です。ずっといいが、それでもあまりにもお勧めできません、それは、クラスのハックを使用することです:(アンパサンドに注意してください)

const StyledSelect = styled(Select)` 
    &&& li { 
    margin-left: 20px; 
    } 
` 

ここ何styled-componentsたCSSの意志を意味し、生成されたクラスでこれら&のそれぞれを置き換えています

.sc-asdf123.sc-asdf123.sc-asdf123 li { 
    margin-left: 20px; 
} 

これらの3つのクラスは、ブロック内のスタイルの特異性を大幅に低下させます。それはトリックを行う必要があります!


あなたはnot疑似セレクタと一緒にfirst-childを使用することができ、最初の子のスタイルではないために:あなたはCSSの擬似クラスを使用することができます

const StyledSelect = styled(Select)` 
    &&& li:not(:first-child) { 
    margin-left: 20px; 
    } 
` 
+0

ハックの提案や特異性の使用は、誰かを指すのは良い方向ではありません。 – klaasman

+0

外部コンポーネントがインラインスタイルを使用している場合はそうでなければスタイルがオーバーライドされますが、インラインスタイルよりも高い特異性を与えることなくスタイルを適用する方法はありません。それは悲しいことにハックである。私がなぜこれが必要だと思うのかを説明するために私の答えを更新してみましょう。 – mxstbr

+0

私は仮定を反映するために答えを更新しました(外部コンポーネントはインラインスタイルを使用しています)、なぜハックが必要なのかを説明しますが、絶対に必要でない場合には使用しないでください。私の答えはあなたに今より意味をなさないでしょうか? – mxstbr

関連する問題