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

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

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

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

CSS

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

Q&A

解決済

2回答

1111閲覧

hoverで別のところが動くように設定したい

eio

総合スコア9

HTML5

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

CSS

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

0グッド

0クリップ

投稿2020/10/03 15:58

前提・実現したいこと

現在hoverで疑似要素をアニメーションさせるところまでうまくいっております。
がもう少し変化させて本来と違うところにマウスが乗っているときにhoverが動いてくれるようなコードを考えています。

現状の単純にhoverで動く成功しているコードを記載しておきます

html

1<!DOCTYPE html> 2<head> 3<meta charset="UTF-8"> 4<link rel="stylesheet" href="stylecss.css"> 5</head> 6<html> 7<body> 8 <main> 9 <p>サンプル1</p> 10 <p>サンプル2</p> 11 </main> 12</body> 13</html>

css

1*{ 2 padding: 0; 3 margin: 0; 4} 5p, { 6 font-size: 50px; 7 text-align: center; 8} 9 10main{ 11 height:1000px; 12} 13p::after, p::before{ 14 content:""; 15 background-image: url(images/2color-border.png); 16 display: inline-block; 17 width: 0px; 18 height: 40px; 19 background-position-y: 20px; 20 background-repeat: no-repeat; 21 22transition-property: width; 23transition-duration: 0.5s; 24} 25p:hover::after, p:hover::before{ 26 27 width: 800px; 28}

上記のコードでは<p>にマウスが乗った時に<p>の左右にbackgroundimageが動くコードです。
画像で差し込んでいる画像(2色の線)がびよーんと800pxまで左右に伸びます。
(水平線みたいな役割の線だとイメージしていただければいいかなと思います)
<p>に載っているときだけでなくもっと大きなボックスに載っているときにも反応してほしいと考えるようになりました。
で、html上記のコードで<main>に載っているときに反応してくれればと思いコードを色々書き換えたり練習しております。
がうまくいかず無反応で困っております。

試したこと

ググってみたら参考になりそうなサイトはありましたhttps://techacademy.jp/magazine/19418
が自分が書くとうまくいかずきっと何かが違うんだろうなという結果になっています。(何が違うのかは検証したりしてますがわからない状態に陥っています。)

###どうコードを変えたのか
cssで下方部分の変更を行ってみました
『p:hover::after, p:hover::before』この部分を『main:hover + p::before, main:hover + p::after 』にしてみました
mainにhoverしたときpの疑似要素が変わると書いたつもりです。
###結果書いたcss

css

1*{ 2 padding: 0; 3 margin: 0; 4} 5p, { 6 font-size: 50px; 7 text-align: center; 8} 9 10main{ 11 height:1000px; 12} 13p::after, p::before{ 14 content:""; 15 background-image: url(images/2color-border.png); 16 display: inline-block; 17 width: 0px; 18 height: 40px; 19 background-position-y: 20px; 20 background-repeat: no-repeat; 21 22transition-property: width; 23transition-duration: 0.5s; 24} 25main:hover + p::before, main:hover + p::after {   /*変更した部分*/ 26 27 width: 800px; 28}

変更したcssコードではなぜダメなのでしょうか?
お忙しいと思いますが宜しくお願いいたします。

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

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

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

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

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

guest

回答2

0

+ は隣接した兄弟要素(次の要素)を指定します。

隣接兄弟結合子 - CSS: カスケーディングスタイルシート | MDN

子要素を指定したい場合は、>を使ってください。

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

css

1main:hover > p::before, main:hover > p::after { 2 width: 800px; 3}

投稿2020/10/03 16:37

hatena19

総合スコア34075

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

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

eio

2020/10/03 16:57 編集

回答ありがとうございます。 回答いただいた通りにしたら動きました。 <main>に乗ったら動いています。 ただ同時に動きも変化してしまいました。当初は<p>を中心に左右に伸びてたのですが::beforeで差し込んでいたところ::afterで差し込んでいたところ同じ左から右に向かって画像が伸びるようになってしまいました。プロパティを変更したら向きが変わってしまうのはなぜなんでしょうか? beforeで差し込んでいたところは右から左に画像が伸びていたのですが左から右に画像が伸びる方向が変わってしまいました。
guest

0

ベストアンサー

駄目な理由は上記のhtmlの構成で
隣接セレクタ である + を使っているからです。
この場合は直下セレクタである > を使えば上手くいきます。

わかりやすいようにmainの色を変更。
疑似要素のbackground-imageをbackground-colorに変更しています。

各種セレクタの説明
https://techacademy.jp/magazine/26720

HTML

1<!DOCTYPE html> 2<html lang="ja"> 3 4<head> 5 <meta charset="UTF-8"> 6 <meta name="viewport" content="width=device-width, initial-scale=1.0"> 7 <title>Document</title> 8 <style> 9 * { 10 padding: 0; 11 margin: 0; 12 } 13 14 p { 15 font-size: 50px; 16 text-align: center; 17 } 18 19 main { 20 height: 1000px; 21 background-color: pink; 22 } 23 24 p::after, 25 p::before { 26 content: ""; 27 display: inline-block; 28 width: 0px; 29 height: 40px; 30 background-color: green; 31 background-position-y: 20px; 32 background-repeat: no-repeat; 33 34 transition-property: width; 35 transition-duration: 0.5s; 36 } 37 38 main:hover>p::after, 39 main:hover>p::before { 40 width: 800px; 41 } 42 43 </style> 44</head> 45 46<body> 47 <main> 48 <p>サンプル1</p> 49 <p>サンプル2</p> 50 </main> 51</body> 52 53</html>

投稿2020/10/03 16:56

Jon_do

総合スコア1373

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

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

eio

2020/10/03 17:09

回答ありがとうございます。 ちょうど他の方も同じ回答を頂いていたところでテストしてみたところでした。 『>』に変更したら確かに動きました。と同時に新たな疑問も発生してきました。 Jon_do様に書いていただいたコードを貼ってテストしてみたら理想的な動きしてました。 で自分が書いたコードを変更したら… なぜかbeforeの部分が右から左には動かず左から右に動くようになってしまいました。 プロパティしか変更してないのになぜか動きの向きが変更になってしまいました。 ::after側は左から右<p>から離れるような方向で問題なしです。 補足で修正したコードを貼っておきます。 なにかしら変な部分があったら教えていただけると助かります。
Jon_do

2020/10/03 17:14

p , { font-size:50px; } これですね。,が不要です。
eio

2020/10/03 17:20

あ、消したら動きました!!!!(激感動) ありがとうございます。 全く違うところに変なのがついているだけで動かない…見落としてました 書籍を中心に勉強しているのですが『>』については記載がなくちょっと勉強してきます!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問