ハンバーガーメニューの実装をしたのですが、リンクを押したらメニューが表示されるようにしたいと思っています。しかし、ハンバーガーメニューをクリックしても、
http://localhost:3000/#
となるだけで、何も表示されません。
仮説
ruby:/index.html.haml
1 %section.hamburger 2 %a.nav-button{:href => "#"} 3 %span 4 %span 5 %span 6 %ul.menu 7 %li 8 フロントエンド 9 %ul.sub 10 %li 11 = link_to "①HTML", card_category_path(:card_id ,1) 12 %li 13 = link_to "②CSS", card_category_path(:card_id, 2) 14 %li 15 = link_to "③Javascript", card_category_path(:card_id, 3) 16 %li 17 バックエンド 18 %ul.sub 19 %li 20 = link_to "④Java", card_category_path(:card_id, 4) 21 %li 22 = link_to "⑤PHP", card_category_path(:card_id, 5) 23 %li 24 = link_to "⑥Python", card_category_path(:card_id, 6) 25 %li 26 = link_to "⑦Ruby", card_category_path(:card_id, 7) 27 = form_with(url: search_cards_path, local: true, method: :get, class: "search-top") do |f| 28 = f.text_field :keyword, placeholder: "検索", class: "search-top" 29 = f.submit "検索", class: "search-top"
このコードの
%a.nav-button{:href => "#"}
リンクが”#”いなっているからという原因はわかるのですが、どのようにしたらいいでしょうか?
実装したいことはハンバーガーメニューからフロントエンド、バックエンドが表示されるようにしたいです。
scssはこのようにしてハンバーガーメニューを実装しています。
ruby;/index.scss
1@media screen and (max-width: 1199px) { 2 .hamburger { 3 display: block; 4 position: absolute; 5 right: 10px; 6 top: 30%; 7 width: 50px; 8 height: 26px; 9 cursor: pointer; 10 } 11 12 .Main__header__nav ul { 13 display: none; //ブラウザが縮小した時に消去 14 } 15 16 .nav-button { 17 display: inline-block; 18 position: relative; 19 width: 30px; 20 height: 26px; 21 22 span { 23 display: inline-block; 24 position: absolute; 25 left: 0; 26 width: 100%; 27 height: 4px; 28 background-color: #fff; 29 30 &:nth-of-type(1) { 31 top: 0; 32 } 33 34 &:nth-of-type(2) { 35 top: 11px; 36 } 37 38 &:nth-of-type(3) { 39 bottom: 0; 40 } 41 } 42 } 43}
href=#は画面遷移するわけではないので関係ないかと思います。
ただ、
>フロントエンド、バックエンドが表示されるように
どういう意図でこの2つの用語を使っていますか?
バックエンドは表示されるものではないですよ。
ハンバーガーメニューをクリックすると、menuが表示できるようにしたいと思っています。
こちらのmenuとは、フロントエンド、バックエンドのことを指しています。
了解です。
ただ、CSSやJavaScriptはなしですか?HTMLだけで実現はできません。
Javascriptは使用していません。宜しくお願い致します。
```rubu:/index.scss
@media screen and (max-width: 1199px) {
.hamburger {
display: block;
position: absolute;
right: 10px;
top: 30%;
width: 50px;
height: 26px;
cursor: pointer;
}
.Main__header__nav ul {
display: none; //ブラウザが縮小した時に消える
}
.nav-button {
display: inline-block;
position: relative;
width: 30px;
height: 26px;
span {
display: inline-block;
position: absolute;
left: 0;
width: 100%;
height: 4px;
background-color: #fff;
&:nth-of-type(1) {
top: 0;
}
&:nth-of-type(2) {
top: 11px;
}
&:nth-of-type(3) {
bottom: 0;
}
}
}
}
```
現在このようにしてハンバーガーメニューを実装できました。
質問は編集できます。
本文に追記してください。
「押したら」
ならやはりJavaScriptはあったほうが良いでしょうね。
追記しました。ご指摘ありがとうございます。
どのようにしたらいいでしょうか?
唯一の解決策ではないですが、たとえば
「javascript 要素の表示非表示」
などと検索すれば山ほど方法は出てくるとは思います。
ただ、個人的にはbootstrapやmaterial-uiなどのテンプレートを使用してハンバーガーメニューを表示させる方が簡単です。
よほどデザインにこだわりがない限りは、今回のようにCSSやjavascriptを自作してまで実装する必要はないと思います。
あなたの回答
tips
プレビュー