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

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

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

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

jQuery

jQueryは、JavaScriptライブラリのひとつです。 簡単な記述で、JavaScriptコードを実行できるように設計されています。 2006年1月に、ジョン・レシグが発表しました。 jQueryは独特の記述法を用いており、機能のほとんどは「$関数」や「jQueryオブジェクト」のメソッドとして定義されています。

CSS

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

Q&A

解決済

1回答

948閲覧

ドロップダウンの高さを取得して、CSSに追加指定をしたい

iambeginnerr

総合スコア12

HTML5

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

jQuery

jQueryは、JavaScriptライブラリのひとつです。 簡単な記述で、JavaScriptコードを実行できるように設計されています。 2006年1月に、ジョン・レシグが発表しました。 jQueryは独特の記述法を用いており、機能のほとんどは「$関数」や「jQueryオブジェクト」のメソッドとして定義されています。

CSS

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

0グッド

0クリップ

投稿2021/10/01 15:17

編集2021/10/02 13:04

前提・実現したいこと

いつもお世話になっております。

3階層のドロップダウンを作成中です。
WPのプラグインを使用しているため、htmlの編集はできません。

プルダウン部分CSSで、position:absoluteを指定しています。
そのため、次に続く要素が重なってしまいます。
この重なりを解消し、ドロップダウンで開いた高さ分、次要素を下にずらしたいと考えています。

そこで考えたのが、jQueryで開いたドロップダウンの高さを取得し、次要素と同じ階層に位置する親要素に動的にpaddingを与えるという案です。

現状

成功:1階層目をクリック→ドロップダウン展開、ドロップダウンの高さに合わせてpadding付与→1階層目を再クリック、ドロップダウンが閉じると共に付与されたpaddingも消去

失敗・検証中:2階層目をクリック→ドロップダウン展開、ドロップダウンの高さが取得できない→2階層目を再クリック、ドロップダウンが閉じる→1階層目をクリック、2階層目クリック時に取得失敗したであろう謎のpaddingが残ってしまい不自然な余白ができてしまう

該当のソースコード

html

<ul> <li class="genre"> <h4>ジャンル</h4> <ul> <li>...</li> <li>...</li> </ul> </li><!-- .genre --> <li class="area"> <h4>エリア</h4> <ul> <h5>関東</h5><!-- h5クリックでdiv.innerが開く --> <div class="inner"> <li class="level-0"><!-- li.level-0クリックでul.childrenが開く --> <input type="checkbox" value="saitama" id="saitama"> <label for="saitama">埼玉県</label> <ul class="children"> <li class="level-1"> <input type="checkbox" value="saitamasi" id="saitamasi"> <label for="saitamasi">さいたま市</label> </li> <li>...</li> <li>...</li> </ul> </li><!-- .level-0 --> </div> </ul> </li><!-- .area --> <li class="tag"> <h4>タグ</h4> <ul> <li>...</li> <li>...</li> </ul> </li><!-- .tag --> </ul>

jQuery

//高さ取得等の処理 $(function() { $('form h5').click(function() { $('.area').toggleClass('p-bottom'); }); }); $(function() { $('.area .level-0').click(function() { var height = $('ul.children').outerHeight(true); $('.area').css('padding-bottom', height + 'px'); }); }); //プルダウン部分 ⇦★追記★ //親カテゴリープルダウン $(function(){ $('form h5').click(function(){ $(this).next().slideToggle(); $('form h5').not($(this)).next().slideUp(); }); }); //子カテゴリプルダウン $(function(){ $('form .level-0').on('click', function() { $(this).next().slideToggle(); $('form .level-0').not($(this)).next().slideUp(); }); });

CSS ※必要と思われる箇所のみ記載しましたが、不足していたらご指摘ください!

h5 { height:36px; } div.inner { position:absolute; } ul.children { position: absolute; } .p-bottom { padding-bottom:40px; }

教えていただきたいこと

2階層目をクリックしul.childrenの高さを取得しCSSにpaddingを付与する流れも、1階層目と同様にtoggleClassで行えば良いのではと思ったのですが、取得した高さをどのように動的にCSSに反映させれば良いのか分からず、jQueryで直接CSSを指定する方法を取ってみました。
2階層目クリック時にtoggleClassを使用すべきか、その場合はどのようにCSSに動的な高さを指定すれば良いのでしょうか。
もしくは、このままjQueryで直接CSSを指定する方法を取ったとして、ドロップダウンを閉じた際に付与したpaddingを全て消去し、元の状態に戻すにはどのように記載するのが良いのでしょうか。

調べてみたのですが、求める情報になかなか辿り着けずにおります。
jQueryは初心者です。
どうか解決策をご教授ください。
よろしくお願いいたします!!

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

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

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

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

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

Lhankor_Mhy

2021/10/02 01:12

ご提示のコードを試してみましたが、「2階層目をクリック→ドロップダウン展開、ドロップダウンの高さが取得できない」という問題が再現しませんでした。高さを取得できているようです。 https://jsfiddle.net/Lhankor_Mhy/rtuayows/
iambeginnerr

2021/10/02 12:42

検証していただきありがとうございます! 確認しましたところ、高さが取得できていますね... しかし制作中のページではなぜか高さが取得できていませんでした。 デベロッパーツールのコード確認すると、2階層目をクリックした際に、li.areaに「style="padding-bottom: 20px;"」と追加されていました。この時の実際のul.childrenの高さは、331.73pxでした。 ですので、正確な高さが取得できていないようです。 他箇所のCSSやプルダウンに使用しているJquery等の干渉などあったりするのでしょうか。 CSS等探ってみます。 何か思い当たる点がありましたら、ご返信いただければ幸いです。
iambeginnerr

2021/10/02 13:00

度々すみません! 先程の返信で、li.areaに「style="padding-bottom: 20px;"」とお伝えしましたが、どうやらこの数値はul.childrenに指定しているmargin:10pxの上下マージンと思われます。 ですので、高さは取得できているが、何らかの理由で中身分が抜けてしまいっている状態のようです。 他サイトで、高さの取れないdivにoverflow:hiddenを指定するという記事を見かけましたので、試しましたが変化なしでした(ul.children内要素はfloatで横並びになっています)。 もし関連があればと思い、本文にプルダウン部分のjQueryコードも追記しました。 お手隙の際はご覧いただければ助かります!
Lhankor_Mhy

2021/10/04 06:51

ご提示いただいているコードでは、.level-0 が常に表示されていますが、実際のコードでは消えているタイミングがあるのではないでしょうか。 その影響ではないのかな、と思います。
iambeginnerr

2021/10/14 05:24

何度も質問にお付き合いくださりありがとうございます。 検証したのですが、はっきりとした原因がわからなかったため別な方法で解決いたしました! ありがとうございました!
guest

回答1

0

自己解決

実際のコードを何度も検証したのですが、原因が特定できなかったため、CSSのタブ切り替えを使用して高さを保持する方法に切り替えました。
お付き合いいただいた皆様ありがとうございました。

投稿2021/10/14 05:26

iambeginnerr

総合スコア12

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問