[CSS] hover したら他の要素のスタイルを変える方法
CSS でカード形式の記事一覧のサムネイル以外をホバーした時に、サムネイルを薄く透過させるため、hover したら他の要素のスタイルを変える方法を調べたのでメモ。また、カード内の一部はホバーしても変化させない方法メモ。
後者は、親子関係を調整するやり方と pointer-events を使ったやり方を記す。
カードの全エリアがホバー対象
カードのどこにカーソルを当てても、サムネイルの色が変化する。
See the Pen when hover on parent change child style by AgoPeanuts (@AgoPeanuts) on CodePen.
親要素である card クラスが hover されると、 thumbnail クラスに background-blend-mode エフェクトがかかる。
.card:hover .thumbnail {
background-blend-mode: soft-light;
}
Tag はホバー対象外 : 要素の親子関係を変えた例
Tag1 とかにカーソルを当ててもサムネイルの色は変化しない。
See the Pen hover effect without tags by AgoPeanuts (@AgoPeanuts) on CodePen.
全エリアがホバー対象だったサンプルから、thumbnail + description と tag の親子関係構造を変えた。つまり、ホバーエリアとホバーされないエリアを同じ階層にした。そして、ホバーエリアが hover されると、 thumbnail クラスにアクションが起こる。
兄要素にホバーエフェクトはかけられない
thumbnail + description を hover-box クラスの div で囲わないで、 tag クラスの div でタグを囲むだけでいいのではないかと思うが、これではうまくいかない。description クラスを hover しても、 thumbnail クラスを操作することはできない。これは hover 要素より上に記述されている要素 ( 兄要素 ) を 操作できないため。
See the Pen hover effect doesn’t work by AgoPeanuts (@AgoPeanuts) on CodePen.
child1 をホバーすると、child3 の色が変わる。child2 をホバーしても、parent の色は変わらない。child3 をホバーしても、child2 の色は変わらない。
hover 操作できないパターン
・ hover 要素の親要素
・ hover 要素の兄要素
Tag はホバー対象外 : pointer-events 使用例
これも Tag1 とかにカーソルを当ててもサムネイルの色は変化しない。全エリアがホバー対象だったサンプルと同じ構造で、 pointer-events を使って、タグのホバーを無効化した。
See the Pen hover with pointer-events by AgoPeanuts (@AgoPeanuts) on CodePen.
pointer-events : マウスイベントを制御するプロパティ
値none : マウスイベントの対象外にする。つまり無効化される。auto : マウスイベントの対象にする。
card クラスに pointer-events: none; を指定し、マウスイベントの対象外にしておく。
thumbnail クラスや h1 タグなど、ホバー対象にしたい要素に pointer-events: auto; を指定する。これで、 tag クラスのみが pointer-events: none; となりホバーが無効化される。