質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
CSS3

CSS(Cascading Style Sheet)の第3版です。CSS3と略されることが多いです。色やデザインを柔軟に変更することが可能になります。

HTML5

HTML5 (Hyper Text Markup Language、バージョン 5)は、マークアップ言語であるHTMLの第5版です。

HTML

HTMLとは、ウェブ上の文書を記述・作成するためのマークアップ言語のことです。文章の中に記述することで、文書の論理構造などを設定することができます。ハイパーリンクを設定できるハイパーテキストであり、画像・リスト・表などのデータファイルをリンクする情報に結びつけて情報を整理します。現在あるネットワーク上のほとんどのウェブページはHTMLで作成されています。

CSS

CSSはXMLやHTMLで表現した色・レイアウト・フォントなどの要素を指示する仕様の1つです。

Q&A

解決済

3回答

431閲覧

【HTML】【CSS】hoverの解釈について

teratail20

総合スコア6

CSS3

CSS(Cascading Style Sheet)の第3版です。CSS3と略されることが多いです。色やデザインを柔軟に変更することが可能になります。

HTML5

HTML5 (Hyper Text Markup Language、バージョン 5)は、マークアップ言語であるHTMLの第5版です。

HTML

HTMLとは、ウェブ上の文書を記述・作成するためのマークアップ言語のことです。文章の中に記述することで、文書の論理構造などを設定することができます。ハイパーリンクを設定できるハイパーテキストであり、画像・リスト・表などのデータファイルをリンクする情報に結びつけて情報を整理します。現在あるネットワーク上のほとんどのウェブページはHTMLで作成されています。

CSS

CSSはXMLやHTMLで表現した色・レイアウト・フォントなどの要素を指示する仕様の1つです。

0グッド

0クリップ

投稿2021/04/12 18:39

<質問したいこと>

下記のコードでのhoverの挙動について、想定と異なっていたため質問いたしました。

html

1 2 <div class="box1"> 3 <div class="box2"></div> 4 </div> 5

css

1 .box1{ 2 width: 400px; 3 height: 300px; 4 background-color: pink; 5} 6.box2{ 7 width: 300px; 8 height: 600px; 9 background-color: orange; 10} 11.box1:hover{ 12 opacity: 0.5; 13}

想定: 
.box1に.box2が重なっているため、.box1にhoverすると(横にはみ出た100×300のピンク色部分)、.box1が半分透過になる。ただし、.box1は大半が.box2に覆われているので、半分透過になったことは、横にはみ出た100×300のピンク色部分でしか視認できない。

実際:
.box1にhoverすると、前面の.box2と背面の.box1がともに半分透過になる。これは、.box1は.box2の親要素なので、.box1にhoverする=.box2を含めた.box1にhoverするということになり、.box2を含めた.box1が半分透過となるということでしょうか?

質問:
親子の視覚的なイメージとしては親の上に子が重なっているようなイメージを持っていました。今回の場合ですと、横長のピンク色の400×300のシートに、縦長のオレンジ色の300×600のシートが重なってピンク色の領域からはみ出ているイメージです。まず、こうしたイメージは合っていますでしょうか?
また、今回のhoverの挙動について、.box1は.box2の親要素であることに起因した結果でしょうか?

抽象的かつまとまりのない質問となってしまい申し訳ございませんが、ご教示いただけますと幸いです。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答3

0

CSSプロパティの適用対象

想定: 
.box1に.box2が重なっているため、.box1にhoverすると(横にはみ出た100×300のピンク色部分)、.box1が半分透過になる。ただし、.box1は大半が.box2に覆われているので、半分透過になったことは、横にはみ出た100×300のピンク色部分でしか視認できない。

そうなる為には、opacityの適用対象が「.box1の描画領域」と「.box1と重なる.box2の描画領域」である必要がありますが、CSSのopacityプロパティでは要素の一部分に適用することは出来ません。
opacityプロパティの適用対象は要素単位であり、要素に対してOn/Offを決定するのみです。

これはopacityに限らず、CSSプロパティ全般に通用するルールになります。
なぜなら、セレクタが要素単位でしかマッチできないからです。
プロパティに「要素の一部に適用する機能」があれば別ですが、そうでなければ、要素単位で機能がOn/Offされます。

opacity プロパティ

opacityプロパティは継承されませんが、対象要素を子孫要素を含めて不透明度を指定する珍しい挙動のプロパティです。

不透明度は、後処理演算と捉えることができる。 概念的には、要素(その子孫も含めて)が RGBA オフスクリーン画像に描画されてから,不透明度の設定が その描画を 現在の組成描画へ混色する方法を指定する。 詳細は 単純 alpha 組成法 を見よ。

従って、「.box1」と「.box1の子孫要素(.box2)」の**「要素の描画領域」**に不透明度が指定されます。

Re: teratail20 さん

投稿2021/04/13 01:49

編集2021/04/13 01:57
think49

総合スコア18164

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

teratail20

2021/04/14 17:55

think49様 ご回答ありがとうございます。 >opacityプロパティは継承されませんが、対象要素を子孫要素を含めて不透明度を指定する珍しい挙動のプロパティです。 確かにそのようですね‥。 こうした特性について学習不足でした。
guest

0

ベストアンサー

親子の視覚的なイメージとしては親の上に子が重なっているようなイメージを持っていました。今回の場合ですと、横長のピンク色の400×300のシートに、縦長のオレンジ色の300×600のシートが重なってピンク色の領域からはみ出ているイメージです。まず、こうしたイメージは合っていますでしょうか?

はい、合っていると思います。
子要素は、親要素にとっては前景になるので、背景の前に出ます。


また、今回のhoverの挙動について、.box1は.box2の親要素であることに起因した結果でしょうか?

.box1が.box2の親要素であることに起因してはいますが、それはhoverの挙動ではなくて、opacityによるものです。
.box2にはopacityが効いていません。

この値は子要素に継承されませんが、その効果は当該要素の内容を含む全体に及びます。

opacity - CSS: カスケーディングスタイルシート | MDN

↓以下のようにしてみると違いがわかるのではないかと思います。

CSS

1.box1:hover{ 2 background: rgba(255,192,203,0.5); 3}

投稿2021/04/13 00:51

編集2021/04/13 01:40
Lhankor_Mhy

総合スコア36115

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

teratail20

2021/04/14 17:49

Lhankor_Mhy様 ご回答ありがとうございます。 ご記載いただいたCSSを試してみまして、 opacityならではの挙動ということを認識できました。
guest

0

.box1は.box2の親要素なので、.box1にhoverする=.box2を含めた.box1にhoverするということになり、.box2を含めた.box1が半分透過となる

:hover は擬似クラスと呼ばれるもので、ユーザーの操作によって hover 状態になったときにCSSが適用されます。
この場合、 .box1 に適用されるわけですね。したがって、その子要素にも適用されます。

また、 .box2 に対して hover 状態になった場合もHTML上入れ子の関係になっていますので、 .box1 が hover 状態になったとみなされ、 CSSが適用されます。

投稿2021/04/12 19:01

mather

総合スコア6753

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

teratail20

2021/04/14 17:46

mather様 ご回答ありがとうございます。 参考にさせていただきます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問