実現したいこと
cssでメガメニューを実装したいと思っています。
発生している問題・エラーメッセージ
「CSSだけ!メガメニューを作る簡単テクニック(レスポンシブ対応)」
上記サイトを参考に作成しましたが、flexでロゴなどと一緒に並べるとメガメニューが全幅になってくれないことに気づきました。
該当のソースコード
JSFiddle https://jsfiddle.net/pf3m5sad/
HTML
1<header> 2<div id="header"><h1>ロゴ画像</h1></div> 3<div id="header-right"> 4<div class="right-nav"> 5<ul><li>メニュー</li><li>メニュー</li><li>メニュー</li></ul></div></div> 6<div class="right-menu"> 7 <input id="hanburger" type="checkbox"> 8 <label for="hanburger" class="menu_button"></label> 9 <nav class="global_menu"> 10 <ul> 11 <li class="menu"> 12 <a href="#">★</a> 13 <ul class="child_menu"> 14 <li><a href="#">Child Menu</a></li> 15 <li><a href="#">Child Menu</a></li> 16 <li><a href="#">Child Menu</a></li> 17 <li><a href="#">Child Menu</a></li> 18 </ul> 19 </li> 20 <li class="menu"> 21 <a href="#">☆</a> 22 <ul class="child_menu"> 23 <li><a href="#">Child Menu</a></li> 24 <li><a href="#">Child Menu</a></li> 25 <li><a href="#">Child Menu</a></li> 26 <li><a href="#">Child Menu</a></li> 27 </ul> 28 </li> 29 </ul> 30 </nav> 31</div> 32</header>
css
1body { 2 overflow-x: hidden; 3} 4 5ul { 6 padding-left: 0; 7} 8 9header { 10 position: relative; 11 max-width: 1500px; 12 width: 100%; 13 margin: 0 auto; 14 display: flex; 15 align-items: start; 16} 17 18#header-right { 19 margin-left: auto; 20 text-align: right; 21 min-width: 768px; 22} 23 24div.right-nav { 25 position: relative; 26 margin-left: auto; 27} 28 29div.right-nav ul li { 30 display: inline-block; 31 margin-left: 2.5%; 32 margin-right: 2.5%; 33 text-align: center; 34} 35 36/* スマホ閲覧時のハンバーガーメニュー */ 37 38#hanburger { 39 display: none; 40 /* チェックボックスを非表示 */ 41} 42 43.menu_button { 44 /* ボタンのスタイル */ 45 width: 50px; 46 /* 幅 */ 47 height: 50px; 48 /* 高さ */ 49 position: fixed; 50 top: 20px; 51 right: 20px; 52 background: #db7093; 53 /* 背景色 */ 54 z-index: 10; 55} 56 57.menu_button::before { 58 /* アイコンのスタイル */ 59 font-family: "Font Awesome 5 Free"; 60 content: "\f0c9"; 61 /* アイコン「3本線」 */ 62 font-weight: 900; 63 position: absolute; 64 color: #fff; 65 top: 50%; 66 left: 50%; 67 transform: translate(-50%, -50%); 68} 69 70#hanburger:checked+.menu_button::before { 71 /* アイコンのスタイル(チェック済み) */ 72 content: "\f00d"; 73 /* アイコン「×印」 */ 74} 75 76.global_menu { 77 /* メニュー全体のスタイル */ 78 visibility: hidden; 79 /* メニューを非表示 */ 80 width: 100%; 81 height: 100%; 82 position: fixed; 83 top: 0; 84 left: 0; 85 padding: 30px; 86 color: #333; 87 /* 文字色 */ 88 background: #ffc0cb; 89 /* 背景色 */ 90 overflow-y: scroll; 91 text-align: center; 92} 93 94#hanburger:checked~.global_menu { 95 /* メニュー全体のスタイル(チェック済) */ 96 visibility: visible; 97 /* メニューを表示 */ 98} 99 100.global_menu a { 101 /* 各項目のスタイル */ 102 display: block; 103 width: 100%; 104} 105 106.global_menu a:hover { 107 /* 各項目のスタイル(ホバー時) */ 108 background: #ffb6c1; 109} 110 111.menu:not(:last-child) { 112 margin-bottom: 20px; 113} 114 115.menu>a { 116 /* 親項目のスタイル */ 117 font-weight: bold; 118 padding: 10px 20px; 119} 120 121.child_menu>li>a { 122 padding: 10px 30px; 123 font-size: 0.8em; 124} 125 126@media screen and (min-width: 481px) { 127 128 /* PC閲覧時のメガメニュー */ 129 130 .menu_button { 131 display: none; 132 /* ハンバーガーメニューのボタンを非表示 */ 133 } 134 135 .global_menu { 136 /* メニュー全体のスタイル */ 137 position: relative; 138 width: 100%; 139 max-width: 1785px; 140 margin: 0 auto; 141 padding: 0; 142 color: #fff; 143 /* 文字色 */ 144 background: #e6a3ad; 145 /* 背景色 */ 146 visibility: visible; 147 overflow-y: visible; 148 z-index: 9999; 149 text-align: right; 150 } 151 152 .menu, 153 .child_menu>li { 154 display: inline-block; 155 text-align: center; 156 } 157 158 .menu:not(:last-child) { 159 margin-bottom: 0; 160 } 161 162 .menu>a { 163 /* 親項目のスタイル */ 164 font-weight: normal; 165 padding: 0; 166 } 167 168 .menu:hover>a { 169 background: #ffb6c1; 170 } 171 172 .child_menu { 173 /* 下層メニューのスタイル */ 174 width: 100%; 175 position: absolute; 176 top: 100%; 177 left: 0; 178 color: #333; 179 /* 文字色 */ 180 background: #ffb6c1; 181 /* 背景色 */ 182 visibility: hidden; 183 /* 下層メニューを非表示 */ 184 opacity: 0; 185 /* 不透明度を最小に */ 186 transition: 1s opacity; 187 /* アニメーション設定 */ 188 } 189 190 .menu:hover .child_menu { 191 /* 下層メニューのスタイル(親項目ホバー時) */ 192 visibility: visible; 193 /* 下層メニューを表示 */ 194 opacity: 1; 195 /* 不透明度を最大に */ 196 } 197 198 .child_menu>li>a { 199 padding: 10px 0; 200 } 201 202 .child_menu>li>a:hover { 203 background: unset; 204 color: #fff; 205 } 206
試したこと
「.global_menu」のposition:relativeを削除し、「header」に追加する。
→このやり方で解決した話を見かけたので試しましたが、ピンクのエリアの表示がおかしくなりました。
visibilityの記述にも変更が必要なのかと思い、移動したりしてみましたがメガメニュー自体が消えてしまったりして解決しません。
どなたかご教授いただければ幸いです。
回答1件
あなたの回答
tips
プレビュー