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

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

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

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

HTML

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

CSS

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

Q&A

解決済

1回答

340閲覧

ドロップダウンメニューの位置とレイアウトを変更する方法

kanon_2155103

総合スコア7

EJS

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

HTML

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

CSS

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

0グッド

0クリップ

投稿2023/05/26 09:02

編集2023/05/26 09:06

実現したいこと

お世話になります。
ただいま制作中メモのWEBアプリの中でドロップダウンメニューを実装してみたのですが、そのレイアウトについていくつか行き詰まってしまいました。
どうか、皆様のお知恵をお貸しいただけたらと思います。

  1. メモ一覧のページにて、メニューアイコンをクリックしたらその子要素であるドロップダウンが表示される仕組みなのですが、どこのメニューアイコンをクリックしても一番上のメニューアイコンの下に表示されてしまいます。クリックしたメニューアイコンの下に表示するにはどうすればよいですか?

  2. ドロップダウンの位置をメニューアイコンの真下に表示したいです。今の状態ではかなり右に寄ってしまっているので……。

  3. ドロップダウンのレイアウトを、親要素である .table-body から独立させたいです。例えば .table-body 内の li 要素に height: 72px; を指定しているのですが、それがドロップダウンにも反映されており、.menu-content 内の li 要素に新しく height を指定しても反映されませんでした。

うまく説明できず恐縮ですが、以下の画像をご参照くださいませ。

イメージ説明

また、HTML(EJS) における該当のテーブル部分は以下の通りです。

HTML(EJS)

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

CSSに関してはかなり長くなってしまうため、メニューアイコンとドロップアウトの周辺のみ記載します。もし他の部分が必要でしたら、お手数ですがコメントを頂けますと幸いです。

CSS

1.icon-area { 2 width: 20%; 3 margin: auto; 4 padding-right: 10px; 5} 6 7 8.menu-icon div { 9 width: 3px; 10 height: 3px; 11 background-color: #D4BAC0; 12 justify-content: center; 13 margin: 3px auto; 14 border-radius: 100px; 15} 16 17.icon-area:hover .menu-icon div { 18 background-color: #A6858E; 19 transition: all 0.3s ease; 20} 21 22.menu-content { 23 display: none; 24 margin: 0; 25 padding: 0; 26 position: absolute; 27} 28 29#menu-input:checked ~ .menu-content { 30 display: block; 31 width: 120px; 32 margin-top: 12px; 33 z-index: 1; 34 overflow: hidden; 35 position: absolute; 36 background-color: #fff; 37 border: 1px solid #f9dee0; 38} 39 40#menu-input { 41 display: none; 42} 43 44.memu-content li { 45 display: flex; 46 flex-direction: column; 47 border-top: 1px solid #f9dee0; 48} 49 50.menu-content li:first-child { 51 border: none; 52} 53 54.menu-content form, .menu-content a { 55 text-align: center; 56 width: 100%; 57} 58 59.menu-content input { 60 margin: 0 auto; 61 border: none; 62 outline: none; 63 cursor: pointer; 64 -webkit-appearance: none; 65 -moz-appearance: none; 66 appearance: none; 67 padding: 0; 68 font-size: 12px; 69 letter-spacing: 0; 70 color: #D4BAC0; 71 background-color: transparent; 72} 73 74.menu-content a { 75 font-size: 12px; 76 letter-spacing: 0; 77 color: #D4BAC0; 78} 79 80.menu-content input:hover, .menu-content a:hover { 81 color: #FF8080; 82} 83

試したこと

2つめの質問に関しては、以下のサイトを参考に left: 50%; transform: translateX(-50%); を追加してみましたが、以下の画像のようになってしまいました。

イメージ説明

また、1つめと3つめについてもそれぞれ "ドロップダウン 位置 可変" や "子要素 height 効かない" などいくつかの言葉で調べてみたのですが、それらしい対処法が書かれたサイトを見つけることが出来ませんでした。

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

HTML のコードは EJS ファイルで書いているため EJS タグを使用しましたが、今回の質問とは特に関係がないかと思われます。

以上、ご教示のほど何卒よろしくお願いいたします。

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

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

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

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

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

guest

回答1

0

ベストアンサー

<input type="checkbox" id="menu-input"/> が繰り返しHTML内に作成されますが、id属性は同一HTML内にて一意である必要があるので、どのlabel要素を押しても最初の <input type="checkbox" id="menu-input"/> が選択されてしまう状態です。

個別に番号を振るなどしてみてはいかがでしょう。
(EJSは私の不勉強のためよくわかりませんが、「forEachの何番目」みたいな情報を使えそうな気がします)

投稿2023/05/26 09:13

kei344

総合スコア69599

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

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

kanon_2155103

2023/05/26 09:40 編集

ありがとうございます。 なるほど、確かに CSS の疑似クラスで :checked ではなく :hover を用いていたときは問題ありませんでした……! >個別に番号を振るなどしてみてはいかがでしょう。 重ねて質問してしまい恐縮ですが、こちらは HTML だけで解決可能ですか? EJS に関しては、実は私もHTML 上で JavaSqript の値を使えるということ以外は存じておらず……。JS 、ひいてはデータベースから値を引っ張ってくる必要がありそうな問題なのでしょうか。
kei344

2023/05/26 10:14

変数が使える言語なら数値をカウントアップすることが出来るので、 id="menu-input1"、id="menu-input2"とかが出力されるようにすればよいです。JavaSqript は特に使う必要が無いです。 【ejs forEach 連番 - Google 検索】 https://www.google.co.jp/search?q=ejs+forEach+%E9%80%A3%E7%95%AA 【テンプレートエンジンEJSで使える便利な構文まとめ - Qiita】 https://qiita.com/y_hokkey/items/31f1daa6cecb5f4ea4c9#arrayforeach
kanon_2155103

2023/05/27 06:59 編集

ご返信が送れてしまいすみません。 私の調べ方では出てきてくれなかったので助かります……! これで出来るかはまだ分からないのですが、input[checkbox] の id を以下のように設定してみました。 <% memo.id %>の部分にはデータベースに格納されているメモの id の値が入っています。 id="menu-input-<% memo.id %>" また質問を重ねてしまうことになりますが、こういった動的な id を CSS で扱うことはできますか? 勉強不足のせいで望んだ検索結果を出すことができなくて……。 すみませんが、どうかよろしくお願いいたします。
kei344

2023/05/27 07:57

.icon-area > input:checked ~ .menu-content とやればid関係なく処理できますよ。
kanon_2155103

2023/05/28 13:56

確かに……。 考えが及んでおりませんでした。 ありがとうございます。お陰様でできるようになりました!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問