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

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

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

EJSは、JavaScript用のテンプレートエンジン。HTMLなどのテンプレートテキストにJavaScriptのロジックを記述することができます。また、変数・関数の実行をテンプレートテキスト内に埋め込むことも可能です。

HTML

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

CSS

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

Q&A

解決済

1回答

234閲覧

メニューアイコンの位置が :hover 時に勝手にずれてしまう問題を解決したいです。

kanon_2155103

総合スコア7

EJS

EJSは、JavaScript用のテンプレートエンジン。HTMLなどのテンプレートテキストにJavaScriptのロジックを記述することができます。また、変数・関数の実行をテンプレートテキスト内に埋め込むことも可能です。

HTML

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

CSS

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

0グッド

0クリップ

投稿2023/10/14 07:35

編集2023/10/14 12:09

解決したいこと

お世話になります。

メニューアイコンの位置が :hover 時に上にずれてしまう問題を解決したいです。
1枚目の画像が通常の状態、2枚目が :hover が適応された状態です。

イメージ説明
イメージ説明

ご助力のほど、なにとぞよろしくお願いいたします。

該当のソースコード

ejs(html)

1<div class="table-head"> 2 <span class="title-column">Name</span> 3 <span class="modified-column">Last Modified</span> 4</div> 5<ul class="table-body"> 6 <% memos.forEach((memo) => { %> 7 <li> 8 <span class="title-column"><%= memo.title %></span> 9 <div class="items"> 10 <span class="modified-column"><%= memo.modified %></span> 11 <div class="icon-area"> 12 <div class="menu-icon"> 13 <div></div> 14 <div></div> 15 <div></div> 16 </div> 17 <ul class="menu-content"> 18 <li><a href="/edit/<%= memo.id %>">Edit</a></li> 19 <li><form action="/remove/<%= memo.id %>" method="post"> 20 <input type="submit" value="Remove"> 21 </form></li> 22 </ul> 23 </div> 24 </div> 25 </li> 26 <% }); %> 27</ul>

css

1/* table */ 2.table-head { 3 display: flex; 4 background-color: #fff; 5 border-radius: 2px 2px 0 0; 6 padding: 0 30px; 7 height: 4.5em; 8 font-size: 1em; 9 color: #6b1d1e; 10 border: 1px solid #ffeeee; 11 border-bottom: 1px solid #f9dee0; 12} 13 14.title-column { 15 width: 70%; 16 text-align: left; 17 padding: 0; 18 margin: auto; 19 20} 21 22.modified-column { 23 width: 30%; 24 margin: auto; 25} 26 27.table-body { 28 background-color: #ffffff; 29 padding: 0 30px; 30 border-radius: 0 0 2px 2px; 31 border: 1px solid #ffeeee; 32 border-top: none; 33 34} 35 36.table-body li { 37 height: 4.5em; 38 border-top: 1px solid #F9F0F2; 39 display: flex; 40} 41 42.table-body li:first-child { 43 border: none; 44} 45 46.table-body .title-column { 47 font-size: 1em; 48 color: #A6858E; 49} 50 51.items { 52 width: 30%; 53 display: flex; 54} 55 56.items .modified-column { 57 width: 80%; 58 font-size: 0.75em; 59 letter-spacing: 0; 60 color: #D4BAC0; 61} 62 63.icon-area { 64 position: relative; 65 width: 20%; 66 padding: 12px 10px; 67 margin: auto; 68 height: 1em; /* Lhankor_Mhy様に頂いた回答を受けて追加しました */ 69} 70 71.menu-icon div { 72 width: 3px; 73 height: 3px; 74 background-color: #D4BAC0; 75 margin: 3px auto; 76 border-radius: 100px; 77} 78 79.icon-area:hover .menu-icon div { 80 background-color: #A6858E; 81 transition: all 0.3s ease; 82} 83 84.menu-content { 85 z-index: 9; 86 display: none; 87 margin: 0; 88 padding: 0; 89 position: sticky; 90} 91 92.icon-area:hover .menu-content { 93 display: block; 94 width: 120px; 95 transform: translateX(calc(-50% + 6px)); 96 margin-top: 12px; 97 overflow: hidden; 98 background-color: #fff; 99 border: 1px solid #f9dee0; 100} 101 102.memu-content li { 103 display: flex; 104 flex-direction: column; 105 border-top: 1px solid #f9dee0; 106} 107 108.menu-content li:first-child { 109 border: none; 110} 111 112.menu-content form, .menu-content a { 113 text-align: center; 114 margin: auto; 115 width: 100%; 116} 117 118.menu-content input { 119 margin: 0 auto; 120 border: none; 121 outline: none; 122 cursor: pointer; 123 -webkit-appearance: none; 124 -moz-appearance: none; 125 appearance: none; 126 padding: 0; 127 font-size: 0.75em; 128 letter-spacing: 0; 129 color: #D4BAC0; 130 background-color: transparent; 131} 132 133.menu-content a { 134 font-size: 0.75em; 135 letter-spacing: 0; 136 color: #D4BAC0; 137} 138 139.menu-content input:hover, .menu-content a:hover { 140 color: #FF8080; 141} 142 143.footer { 144 z-index: 8; 145 width: 100%; 146 height: 60px; 147 top: 100vh; 148 position: sticky; 149}

試したこと

.menu-content に position: sticky; を指定しているのが原因かと思い、 .icon-area にも position プロパティをいくつか試してみたのですが(relative, absolte, fixed, sticky)、どうやら関係なかったようです。

補足情報(FW/ツールのバージョンなど)

下の画像は、頂いた情報を元に height プロパティを追加した後のテーブルの全体像です。

イメージ説明

作業環境は Windows11 、使用ブラウザは Chrome です。
その他、もしご入用の情報があれば仰ってくださいませ。

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

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

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

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

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

Lhankor_Mhy

2023/10/14 08:20

ご提示のコードを試してみましたが問題が再現しませんでした。おそらく、icon-area の外側の要素との関係で発生するのだろうと思います。 なんとなくですが、ホバーすると icon-area の高さが増えていますので、そのあたりの影響だろうな、という気がしています。
guest

回答1

0

ベストアンサー

ご提示のコードだけでは問題が再現しなかったのですが、.icon-areaの兄弟に『Sep 14 23 19 : 26』などのテキストを入れ、共通の親要素に

css

1parent { 2 display: flex; 3 align-items: center; 4}

などとすると、問題が再現しました。

この場合、以下のようにすると問題が解決しました。

css

1.icon-area { 2 position: relative; 3 width: 20%; 4 padding: 12px 10px; 5 margin: auto; 6 height: 1em; /* これ */ 7}

投稿2023/10/14 08:37

Lhankor_Mhy

総合スコア36134

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

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

kanon_2155103

2023/10/14 12:05

ご回答いただきありがとうございます。 反応が遅れてしまい申し訳ありません。 アドバイスを頂いた通りにしてみたところ、:hover 時にアイコンが動くことは無くなりましたが、常に下に居座るようになってしまいました。補足情報の画像をご参照いただけますと幸いです。 他のプロパティや親要素とも照らし合わせてみたのですが、原因を見つけることができず……。 ソースコードの範囲を広げて記載し直しましたので、今しばらくお付き合いいただけますでしょうか。 恐れ入りますが、どうぞよろしくお願いいたします。
kanon_2155103

2023/10/14 12:15

また、:hover 時に icon-area の高さが増える要因については分かりませんでした。 分からないことだらけですみません。
Lhankor_Mhy

2023/10/16 00:39

height が小さすぎるのだと思いますので、調整されてはいかがでしょうか? 対応ブラウザに不安がありますが、1lhとかはどうでしょうか?
kanon_2155103

2023/10/16 07:47

ご返信いただきありがとうございます! 仰るとおり、.icon-area のスペースが小さすぎたせいで子要素である .menu-icon のスペースが潰れてしまっているのが原因でした。お恥ずかしい限りですが、ご指摘いただくまで全く思い当たらずにおりました……。 .icon-area に指定していた padding プロパティの分も含めると、1.67lh が丁度良かったです。 CSSには元々苦手意識が強かったのですが、おかげさまで少し理解が深まりました。 ご丁寧にお付き合いいただけましたこと、重ねてお礼申し上げます。
Lhankor_Mhy

2023/10/16 08:06

ご解決されて何よりです。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.47%

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

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

質問する

関連した質問