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

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

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

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

CSS

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

Q&A

解決済

1回答

4886閲覧

HTML+CSS details summaryの横並びが絶望的です

aze

総合スコア1

HTML

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

CSS

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

0グッド

0クリップ

投稿2020/09/12 23:34

編集2020/09/12 23:43

前提・実現したいこと

HTML+CSSでdetails summaryでメニューを作り、横並びに配備しました
しかし、そこで一つ問題が発生しました
details summaryで作られたものは、そのwidthの幅内でしか、マウスイベントが有効にはならない点です
サンプルソースでご確認いただければわかるのですが、
menu1と書かれてる部分をマウス通過しないで、
menu2を通過した場合に、hoverが発生しません
何かいい方法はありませんでしょうか?

該当のソースコード

HTML

1<style> 2body,html { 3 height:100%; 4} 5.hover_color { 6 transition: all 0.3s ease; 7} 8.hover_color:hover { 9 background-color: hotpink; 10} 11summary { 12 position: relative; 13 display: block; /* 矢印を消す */ 14 padding: 10px 10px 10px 30px; /* アイコンの余白を開ける */ 15 cursor: pointer; /* カーソルをポインターに */ 16 font-weight: bold; 17 background-color: gray; 18 transition: 0.2s; 19} 20summary:hover { 21 background-color: darkgray; 22} 23summary::-webkit-details-marker { 24 display: none; /* 矢印を消す */ 25} 26 27/* 疑似要素でアイコンを表示 */ 28summary:before, 29summary:after { 30 content: ""; 31 margin: auto 0 auto 10px; 32 position: absolute; 33 top: 0; 34 bottom: 0; 35 left: 0; 36} 37summary:before { 38 width: 16px; 39 height: 16px; 40 background-color: gray; 41} 42summary:after { 43 left: 6px; 44 width: 5px; 45 height: 5px; 46 border: 4px solid transparent; 47 border-left: 5px solid white; 48 box-sizing: border-box; 49 transition: .1s; 50} 51 52/* オープン時のスタイル */ 53details[open] summary { 54 background-color: silver; 55} 56details[open] summary:after { 57 transform: rotate(90deg); /* アイコンを回転 */ 58 left: 4px; /* 位置を調整 */ 59 top: 5px; /* 位置を調整 */ 60} 61 62/* アニメーション */ 63details[open] .details-content { 64 animation: fadeIn 0.5s ease; 65} 66@keyframes fadeIn { 67 0% { 68 opacity: 0; 69 transform: translateY(-10px); 70 } 71 100% { 72 opacity: 1; 73 transform: none; 74 } 75} 76</style> 77 78<div style="background-color:blue;width:100%;height:100%"> 79 80<details open id="d1" style="margin-left:20%;width:20%;height:100%;float:left"> 81<summary style="height:5%" onclick="d2.removeAttribute('open');d3.removeAttribute('open');d4.removeAttribute('open')">Menu1</summary> 82<div class="details-content" style="height:95%;width:100%"> 83<div style="background-color:red;margin-left:-100%;width:500%;height:100%"> 84<div style="width:100%;height:25%;" class="hover_color">sample</div> 85<div style="width:100%;height:25%;" class="hover_color">sample</div> 86<div style="width:100%;height:25%;" class="hover_color">sample</div> 87<div style="width:100%;height:25%;" class="hover_color">sample</div> 88</div> 89</div> 90</details> 91 92 93<details id="d2" style="width:20%;height:100%;float:left"> 94<summary style="height:5%" onclick="d1.removeAttribute('open');d3.removeAttribute('open');d4.removeAttribute('open')">Menu2</summary> 95<div class="details-content" style="height:95%;width:100%"> 96<div style="background-color:green;margin-left:-200%;width:500%;height:100%"> 97<div style="width:100%;height:25%;" class="hover_color">sample</div> 98<div style="width:100%;height:25%;" class="hover_color">sample</div> 99<div style="width:100%;height:25%;" class="hover_color">sample</div> 100<div style="width:100%;height:25%;" class="hover_color">sample</div> 101</div> 102</div> 103</details> 104 105 106<details id="d3" style="width:20%;height:100%;float:left"> 107<summary style="height:5%" onclick="d1.removeAttribute('open');d2.removeAttribute('open');d4.removeAttribute('open')">Menu3</summary> 108<div class="details-content" style="height:100%;width:100%"> 109<div style="background-color:blue;margin-left:-300%;width:500%;height:100%"> 110<div style="width:100%;height:25%;" class="hover_color">sample</div> 111<div style="width:100%;height:25%;" class="hover_color">sample</div> 112<div style="width:100%;height:25%;" class="hover_color">sample</div> 113<div style="width:100%;height:25%;" class="hover_color">sample</div> 114</div> 115</div> 116</details> 117 118 119<details id="d4" style="width:20%;height:100%;float:left"> 120<summary style="height:5%" onclick="d1.removeAttribute('open');d2.removeAttribute('open');d3.removeAttribute('open')">Menu4</summary> 121<div class="details-content" style="height:100%;width:100%"> 122<div style="background-color:yellow;margin-left:-400%;width:500%;height:100%"> 123<div style="width:100%;height:25%;" class="hover_color">sample</div> 124<div style="width:100%;height:25%;" class="hover_color">sample</div> 125<div style="width:100%;height:25%;" class="hover_color">sample</div> 126<div style="width:100%;height:25%;" class="hover_color">sample</div> 127</div> 128</div> 129</details> 130

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

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

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

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

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

m.ts10806

2020/09/12 23:37

>の横並びが絶望的です 個人の感覚より起きている現象や実現したいこと 「要件」をそのまま記載してください。
m.ts10806

2020/09/12 23:38

あと提示されたCSSは.cssに記載したものですか? HTMLに書いたものですか? 前者なら動かないのは当然です。.cssにstyleタグは不要。
aze

2020/09/12 23:40

すみません、分かりやすく分けたつもりでしたが、 .cssでではなく同一ページに書いております
m.ts10806

2020/09/12 23:42

コピペで再現できるコートにしてください。 コードブロックが分かれている場合は通常、別ファイルとして認識します。 ただ、その前に、インラインスタイルを入れすぎな方が絶望的に思います(メンテナンス性、可読性の観点で)
aze

2020/09/12 23:48

コピペで再現できるコードにしました details summaryのwidthを指定して横並びにした場合に、 details内部の幅をいくら広げても、summaryの部分をマウスで通過しないとマウスイベントが発生しない現象を、 突破できる方はいらっしゃいませんでしょうか?
guest

回答1

0

ベストアンサー

<details open id="d1" style="margin-left:20%;width:20%;height:100%;float:left">
というように details に height:100% を設定しているのが原因ですね。
この為に後の details が前の details-content を覆っているのでホバーが効かないのです。
この height:100% を削除してください。

あるいは、このインラインのstyleをすべて削除して、CSSの方に纏めて記述したほうが管理しやすいと思います。下記のように一か所に記述するだけで済みます。

css

1details { 2 margin-left:20%; 3 width:20%; 4 float:left 5}

投稿2020/09/13 00:53

hatena19

総合スコア34075

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

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

aze

2020/09/13 01:08

回答ありがとうございます 全てのdetails heightを取っ払いましたら、無事hoverが効くようになりました ありがとうございます しかし、この場合でheightの%を設定したい場合、どうしたらいいのでしょうか? 全体をheight:100%;にし、menuと書かれている部分をheight:5%;、 summaryのdetails-contentを95%にしたいのですが
aze

2020/09/13 01:21 編集

高さの部分は、投稿時のソースの形のまま(レイアウト上)、ホバーを効かせるという形にしたいと思ってるのですが、 お教えいただけないでしょうか? details heightを取っ払った為、子を%指定にて収めることができなくなってます pxでしたら指定できると思いますが%で指定したいです
hatena19

2020/09/13 03:08

下記のようにdetailsに%で高さを指定して子は100%にすればいいでしょう。 <details open id="d1" style="margin-left:20%;width:20%;height:5%;float:left"> <summary style="height:100%" onclick="d2.removeAttribute('open');d3.removeAttribute('open');d4.removeAttribute('open')">Menu1</summary> ただし、高さを%で指定するのはどうかと思います。画面の高さを広げると間が空くし、縮めるすぎると収まらなくなります。フォントサイズに合わせた固定サイズにすべきでしょう。
hatena19

2020/09/13 03:11

あと、インラインスタイルでCSSを設定するのはやめた方かいいでしょう。修正するのがすごく面倒くさいです。 また、float:left での横並びはやめて、FlexBoxで一から作り直した方がシンプルになるし自由度が高いです。float だと後の要素のレイアウトに影響したりいろいろ面倒です。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問