スタイル付きコンポーネントのホバーを処理する最良の方法は何ですか。ホバーするとボタンが表示されるラッピング要素があります。
コンポーネントにいくつかの状態を実装し、ホバーでプロパティを切り替えることができましたが、スタイル付きcmponentsでこれを行うより良い方法があるかどうか疑問に思っていました。
次のようなものは機能しませんが、理想的です:
const Wrapper = styled.div`
border-radius: 0.25rem;
overflow: hidden;
box-shadow: 0 3px 10px -3px rgba(0, 0, 0, 0.25);
&:not(:last-child) {
margin-bottom: 2rem;
}
&:hover {
.button {
display: none;
}
}
`
スタイル付きコンポーネントv2では、他のスタイル付きコンポーネントを補間して、自動的に生成されたクラス名を参照できます。あなたの場合、おそらく次のようなことをしたいと思うでしょう:
const Wrapper = styled.div`
&:hover ${Button} {
display: none;
}
`
詳細については、 ドキュメント を参照してください!
コンポーネントの順序は重要です。 Button
がWrapper
の上/前に定義されている場合にのみ機能します。
V1を使用していて、これを行う必要がある場合は、カスタムクラス名を使用して回避できます。
const Wrapper = styled.div`
&:hover .my__unique__button__class-asdf123 {
display: none;
}
`
<Wrapper>
<Button className="my__unique__button__class-asdf123" />
</Wrapper>
V2はv1からのドロップインアップグレードであるため、更新することをお勧めしますが、それがカードに含まれていない場合、これは素晴らしい回避策です。
Mxstbrの答えと同様に、補間を使用して親コンポーネントを参照することもできます。このルートは、親の子コンポーネントを参照するよりもコンポーネントのスタイリングを少しだけカプセル化するため、気に入っています。
const Button = styled.button`
${Wrapper}:hover & {
display: none;
}
`;
この機能がいつ導入されたかはわかりませんが、v3の時点で機能します。
関連リンク: https://www.styled-components.com/docs/advanced#referring-to-other-components
私にとっての解決策はこれでした...
const Content = styled.div`
&:hover + ${ImgPortal} {
&:after {
opacity: 1;
}
}
`;