Styled-componentsを使用していて、Text
の最初の子をターゲットにしたいのですが、そうすることができません。
const Text = styled.p`
font-size: 12px;
& :first-child {
margin-bottom: 20px;
}
`;
... component
return(
<div>
<p>I am just regular text</p>
<p>Me too</p>
<Text>Hello Joe</Text> // this should have the margin bottom
<Text>Goodbye</Text >
</div>
)
最後に、私はあなたの問題を得ました。スタイル付きコンポーネントは、最初の2つのネイティブp
タグと混同します(私の観点から)。これが、CSSが適用されない理由です。
私はこのような回避策を使用します:
const Text = styled.p`
font-size: 12px;
color: blue;
&:nth-child(3) {
margin-bottom: 20px;
color: red !important;
}
`;
これにより、CSSの3番目の子(最初の2つのp
タグを含む)が選択されます
または、次のようなことができます。タグにクラス名を追加し、そのクラスにCSSを指定します。
const Text = styled.p`
font-size: 12px;
color: blue;
&.colors {
margin-bottom: 20px;
color: red !important;
}
`;
<div>
<p>I am just regular text</p>
<p>Me too</p>
<Text className="colors">Hello Joe</Text>
<Text>Goodbye</Text>
</div>
これが demo です
それが役に立てば幸い :)
&
と:first-child
の間にスペースを入れないでください
&:first-child {
margin-bottom: 20px;
}
:nth-childを使用する代わりに、特定のスタイル付きコンポーネントで:last-of-typeを使用する方が適切であり、完全に機能します
export default styled.div`
:last-of-type {
background: red;
}`
const Text = styled.p`
font-size: 12px;
color: blue;
&:nth-child(3) {
margin-bottom: 20px;
color: red !important;
}
`;