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

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

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

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

CSS

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

Q&A

解決済

1回答

1273閲覧

height: 0と0%の違い

bag_ai

総合スコア24

HTML

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

CSS

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

0グッド

0クリップ

投稿2021/11/17 04:53

ボタン操作でメニュー開閉を行うコードを作成しました。
メニューが閉じている時には要素の高さを0にしたく、height: 0%
をしたところ高さが0にはなりませんでした。

結果的にheight: 0と指定したところ上手くいきました。

height: 0%にして何故できないのか分かりません。
よろしくお願いします。

html

1<!DOCTYPE html> 2<html lang="en"> 3 <head> 4 <meta charset="UTF-8" /> 5 <meta http-equiv="X-UA-Compatible" content="IE=edge" /> 6 <meta name="viewport" content="width=device-width, initial-scale=1.0" /> 7 <title>Document</title> 8 <link rel="stylesheet" href="style.css" /> 9 </head> 10 <body> 11 <button>OPEN</button> 12 <nav class="nav"> 13 <ul class="nav__main"> 14 <li class="nav__list"><a href="#" class="nav__link">メニュー1</a></li> 15 <li class="nav__list"><a href="#" class="nav__link">メニュー2</a></li> 16 <li class="nav__list"><a href="#" class="nav__link">メニュー3</a></li> 17 <li class="nav__list"><a href="#" class="nav__link">メニュー4</a></li> 18 <li class="nav__list"><a href="#" class="nav__link">メニュー5</a></li> 19 <li class="nav__list"><a href="#" class="nav__link">メニュー6</a></li> 20 </ul> 21 </nav> 22 <main></main> 23 <script src="main.js"></script> 24 </body> 25</html>

css

1* { 2 box-sizing: border-box; 3} 4 5ul { 6 list-style: none; 7 padding: 0; 8 margin: 0; 9} 10 11a { 12 color: black; 13 text-decoration: none; 14} 15 16button { 17 cursor: pointer; 18 padding: 10px; 19} 20 21// ナビゲーション 22 23.nav { 24 // height: 0%にすると高さが0にならない; 25 height: 0; 26 opacity: 0; 27 overflow: hidden; 28} 29 30.nav.open { 31 animation-name: fade-in; 32 animation-duration: 1s; 33 animation-fill-mode: forwards; 34} 35@keyframes fade-in { 36 0% { 37 height: 0; 38 opacity: 0; 39 } 40 0.1% { 41 height: auto; 42 opacity: 0; 43 } 44 100% { 45 height: auto; 46 opacity: 1; 47 } 48} 49 50.nav.close { 51 animation-name: fade-out; 52 animation-duration: 1s; 53 animation-fill-mode: forwards; 54} 55@keyframes fade-out { 56 0% { 57 height: auto; 58 opacity: 1; 59 } 60 99.9% { 61 height: auto; 62 opacity: 0; 63 } 64 100% { 65 height: 0; 66 opacity: 0; 67 } 68} 69.nav__link { 70 display: block; 71 width: 100%; 72 height: 100%; 73 padding: 20px; 74 &:hover { 75 opacity: 0.5; 76 } 77} 78 79// メイン画面 80main { 81 height: 500px; 82 background-color: lightcyan; 83} 84

js

1// 要素取得 2const btn = document.querySelector("button"); 3const nav = document.querySelector(".nav"); 4 5// クリックイベント 6btn.addEventListener("click", function () { 7 if (btn.textContent === "OPEN") { 8 btn.textContent = "CLOSE"; 9 nav.classList.add("open"); 10 nav.classList.remove("close"); 11 } else if ((btn.textContent = "CLOSE")) { 12 btn.textContent = "OPEN"; 13 nav.classList.add("close"); 14 nav.classList.remove("open"); 15 } 16});

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

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

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

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

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

guest

回答1

0

ベストアンサー

heightのパーセンテージ指定は、大雑把に言うと、親要素のheightが指定されていない時はauto(つまりコンテンツ依存)と同じ意味になります。
親要素のサイズ依存→子要素のサイズ依存→親要素のサイズ依存……、と循環参照みたいなことが起きてしまうからです。

**パーセント値は、**生成ボックスの包含ブロックの高さを基準に計算されます。 包含ブロックの高さが明示的に定義されず (すなわち、コンテンツの高さに依存します)、この要素が絶対位置指定されていない場合は、**値は auto **になります。

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

投稿2021/11/17 05:05

編集2021/11/17 05:07
Lhankor_Mhy

総合スコア36960

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

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

bag_ai

2021/11/17 05:19

そういうことだったんですね。 確かにbodyにheight: 500px;と指定したら上手くいきました。 ありがとうございます。
Lhankor_Mhy

2021/11/17 08:29

お役に立てたようで何よりです
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問