CSS Web制作

【CSS】hoverで別要素の値を変更する方法【子要素・兄弟要素・親要素】

※ 当サイトではアフィリエイト広告を利用しています

hoverで別の要素の値を変更することって出来る?

基本的にはhoverして要素の値を変更するのは『hoverした要素』だと思いますが、それ以外の要素にしたい場合もあります。

例えばhoverした要素の『子要素・兄弟要素・親要素』など。

そこで今回はCSSのみでこれらを実装する方法を解説していきます。

もし『子要素・兄弟要素・親要素』以外の離れた要素の値を変更したい場合は、以下の記事を参照下さい。

あわせて読みたい
【jQuery】hoverで別要素の値を変更する方法【サンプル付きで解説】
【jQuery】hoverで別要素の値を変更する方法【サンプル付きで解説】

続きを見る

 

完全無料のプログラミングスクール『ZeroPlus Gate』
30日間でWeb制作を学べる無料のプログラミングスクールがこちら
  • 30日間でWeb制作を学べる
  • 完全無料
  • 現役エンジニアへの質問無制限
  • オンラインの動画学習なので時間場所を問わず勉強可能
  • 最大4回の学習サポート面談
  • 受付は1日25名までの先着制
無料なのに専属のメンターが付き、現役エンジニアへの質問も無制限という破格のサービスです。
いきなり数十万するプログラミングスクールは厳しい・・・という人のお試しに最適。
現在は無料ですがいつ有料になるか分からないので、気になる方はお早めに👇

\ 完全無料 /

ZeroPlus Gate公式サイト

先着1日25名まで!

CSSを使ってhoverで別要素の値を変更する方法【子要素・兄弟要素・親要素】

今回は基本も含めて4種類のhoverを解説していきます。

  1. hoverした要素の値を変更
  2. hoverした要素の『子要素』の値を変更
  3. hoverした要素の『兄弟要素』の値を変更
  4. hoverした要素の『全ての兄弟要素』の値を変更
  5. hoverした要素の『親要素』の値を変更

それでは1つずつ解説していきますがコードについては見やすくする為にポイントとなるものだけ書くので、全部見たい人は左上の『HTML・CSS』をクリックして下さい。

 

hoverした要素の値を変更

まずは基本となる『hoverした要素の値を変更』がこちらです。

See the Pen
Untitled
by junpei (@junpei-sugiyama)
on CodePen.

コードはこちらです。

<div class="box"></div>
.box {
  background-color: #1cb4d3;
}
/* hover */
.box:hover {
  background-color: #7fffd4; /* hoverした時の背景色 */
}

これは至ってシンプルで、以下のようになります。

要素名:hover {
  hover時のスタイル
}

今回の例ではhover前と後で背景色を変えています。

じんわり色を変化させているのはtransitionを使っているからです(詳細は左上の『HTML・CSS』をクリックして下さい)

 

hoverした要素の『子要素』の値を変更

今度は『hoverした要素の子要素の値を変更』となります。

グレーの部分が親要素なので、グレーの部分をhoverすると水色の子要素の色が変化します。

See the Pen
CSSでhover(子要素の値を変更)
by junpei (@junpei-sugiyama)
on CodePen.

コードはこちらです。

<div class="parent">
  <div class="child"></div>
</div>
.parent {
  background-color: #dcdcdc; /* 親要素の背景色 */
}
.child {
  background-color: #1cb4d3; /* 子要素の背景色 */
}
/* hover */
.parent:hover .child {
  background-color: #7fffd4; /* 親要素をhoverした時の子要素の背景色 */
}

これは以下のようになります。

親要素名:hover 子要素名 {
  親要素hover時の子要素のスタイル
}

注意点としては:hoverと子要素名の間に半角スペースを入れることくらいです(くっつけるとNG)

 

hoverした要素の『兄弟要素』の値を変更

今度は『hoverした要素の兄弟要素の値を変更』となります。

グレーの部分をhoverすると水色の兄弟要素の色が変化します。

See the Pen
CSS:hover(兄弟要素の値を変更)
by junpei (@junpei-sugiyama)
on CodePen.

コードはこちらです。

<div class="brothers01">hoverする</div>
<div class="brothers02"></div>
.brothers02 {
  background-color: #1cb4d3;
}
/* hover */
.brothers01:hover + .brothers02 {
  background-color: #7fffd4;
}

これは以下のようになります。

/* hover */
hoverする要素名:hover + hoverする要素の兄弟要素名 {
  hoverした要素の兄弟要素のスタイル
}

兄弟要素と書いていますが、単に『隣の要素』ではなく『要素の直後』となります。

つまり今回の例では.brothers02をhoverして.brothers01のスタイルを変更は出来ません。

直後ではなく直前の要素のスタイルを変えたい場合はjQueryなどを使うかと思います。

 

hoverした要素の『全ての兄弟要素』の値を変更

今度は『hoverした要素の全ての兄弟要素の値を変更』となります。

先ほどは『直後の要素』だったので、3番目以降は対象外でした。

グレーの部分をhoverすると水色の全ての兄弟要素の色が変化します。

See the Pen
CSS:hover(全ての兄弟要素の値を変更)
by junpei (@junpei-sugiyama)
on CodePen.

コードはこちらです。

<div class="brothers01">hoverする</div>
<div class="brothers brothers02"></div>
<div class="brothers brothers03"></div>
.brothers01 {
  background-color: #dcdcdc;
}
.brothers02,
.brothers03 {
  background-color: #1cb4d3;
}
/* hover */
.brothers01:hover ~ .brothers {
  background-color: #7fffd4;
}

先ほどの『直後の要素』の場合は『 + 』を使いましたが、今回は『 ~ 』となります。

『 + 』が隣接セレクタと言って要素の直後を指定するセレクタに対し、『 ~ 』は間接セレクタと言って基準の要素以降で条件に合う全ての兄弟要素を指定するセレクタになります。

今回の場合は2つ目と3つ目に.brothersを付けているので、『 ~ 』のあとは.brothersと書いています。

なので先ほどの『直後の要素』の場合でも.brothersを付けていて『 ~ 』を使えば同じ結果になります。

また今回は基準の要素移行の兄弟要素は全て.brothersが付いていますが、2つ目を外した場合は3つ目しか変わりません。

See the Pen
CSS:hover(全ての兄弟要素の値を変更:2つ目がpタグ)
by junpei (@junpei-sugiyama)
on CodePen.

 

hoverした要素の『親要素』の値を変更

今度は『hoverした要素の親要素の値を変更』となります。

グレーの部分が子要素なので、グレーの部分をhoverすると水色の親要素の色が変化します。

See the Pen
CSS:hover(親要素の値を変更)
by junpei (@junpei-sugiyama)
on CodePen.

コードはこちらです。

<div class="parent">
  <div class="child"></div>
</div>
.parent {
  background-color: #1cb4d3; /* 親要素の背景色 */
  pointer-events: none;
}
.child {
  background-color: #dcdcdc; /* 子要素の背景色 */
  pointer-events: auto;
}
/* hover */
.parent:hover {
  background-color: #7fffd4; /* 子要素をhoverした時の親要素の背景色 */
}

ここで見慣れないかも知れないプロパティpointer-eventsというのが出てきます。

これはhoverやクリックなど、カーソルのアクションを無効化することが出来るプロパティです。

初期値はpointer-events: auto;となっており、hoverやクリックは有効ですが、pointer-events: none;にすると無効になります。

そこで今回はまず親要素にpointer-events: none;を設定します。

すると子要素もpointer-events: none;になりますが、子要素はhoverを有効にしたいのでpointer-events: auto;を設定します。

こうする事で、子要素のみhoverが有効になります。

そしてhover自体は親要素に指定すればOKです。

以上になります。

あわせて読みたい
【jQuery】hoverで別要素の値を変更する方法【サンプル付きで解説】
【jQuery】hoverで別要素の値を変更する方法【サンプル付きで解説】

続きを見る

Web制作おすすめ教材と案件獲得サービス
当ブログではWeb制作学習におすすめの教材を厳選してご紹介しています。
こちらの記事を参考に教材を購入して成果を出している人もたくさんいるので、自分に必要な教材を探してみて下さい。
また、学習面だけでなく営業面である案件獲得サービスもご紹介しています。
スキルが身についても仕事がなければ意味がないので、営業に不安がある人はこちらの記事をぜひ参考にしてみて下さい。
この記事を参考にスキルと営業力を身につけて稼げるようになりましょう!

-CSS, Web制作