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

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

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

CSS(Cascading Style Sheet)の第3版です。CSS3と略されることが多いです。色やデザインを柔軟に変更することが可能になります。

HTML5

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

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

Q&A

解決済

2回答

330閲覧

data属性を利用したモーダルメニューを作りたい。

dream

総合スコア43

CSS3

CSS(Cascading Style Sheet)の第3版です。CSS3と略されることが多いです。色やデザインを柔軟に変更することが可能になります。

HTML5

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

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

0グッド

0クリップ

投稿2020/03/24 04:18

現在は、これまで作成してきたクラスを用いたメニューとは異なる
data属性を用いたメニューを作成しているのですが、何も変化が
見られなくて困っています。申し訳ないのですがどなたか知恵を
お貸しいただければ幸いです。

HTML5

1コード <body> 2 <div class="nav-menu" data-open="false"> 3 <nav class="inner"> 4 <ul class="nav-menu-list"> 5 <li class="list-item"> 6 <a href="about.html" target class="barba-link"></a> 7 </li> 8 </ul> 9 </nav> 10 </div> 11 <header class="header"> 12 <div class="header-menu"> 13 <button class="header-menu-btn"> 14 <span class="menu-text">MENU</span> 15 </button> 16 </div> 17 </header> 18 19 20 <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script> 21 <script src="js/script.js"></script> 22</body>

CSS3

1コード .header-menu-btn { 2 position: relative; 3 width: 47px; 4 height: 42px; 5 display: block; 6 &:before,&:after { 7 content: ""; 8 width: 85%; 9 height: 4px; 10 background: #000; 11 position: absolute; 12 left: 50%; 13 transform: translate(-50%,0); 14 } 15 &:before { 16 top: 5px; 17 } 18 &:after { 19 top: 20px; 20 } 21} 22 23.menu-text { 24 font-family: fantasy; 25 letter-spacing: 1; 26 display: block; 27 line-height: 1; 28 position: absolute; 29 top: 30px; 30 left: 10%; 31} 32 33.nav-menu[data-open="false"] { 34 position: absolute; 35 top: 0; 36 left: 0; 37 width: 100%; 38 height: 100%; 39 overflow: hidden; 40 pointer-events: none; 41 opacity: 0; 42 transition: opacity .2s ease-out; 43} 44 45.nav-menu[data-open="true"] { 46 display: block; 47 opacity: 1; 48 background: #000; 49 position: absolute; 50 left: 0; 51 top: 0; 52 width: 100%; 53 height: 100%; 54} 55 56.list-item { 57 list-style-type: none; 58} 59 60.nav-menu-list { 61 max-height: none; 62 width: 100%; 63} 64 65.inner { 66 width: 100%; 67 display: block; 68}

javascript

1コード $(function(){ 2 $(".header-menu").click(function(){ 3 $("body").removeAttr("data-open","false"), 4 $("body").attr("data-open","true") 5 return false; 6 }); 7 });

目標としては、アイコンがクリックされると非表示が解除され、
trueの内容が表示されるといったイメージです。

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

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

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

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

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

m.ts10806

2020/03/24 04:51

初期値をtrue/false切り替えた場合、想定の動作はしているのでしょうか? …ただ、不確かで申し訳ないですがdata属性は値ですら非同期的な動作をしてたと記憶にあり、CSSの切り替えのようなことに使うのはあまり適してないように思います。 (不確かなので後程検証はしてみます)
m.ts10806

2020/03/24 05:08

上記、勘違いでした。簡易コードで試しただけですが、attrで変化したstyleは効きますね。 ブラウザ開発ツールの検証で属性が想定通り変化しているか確認してみてください。
dream

2020/03/24 11:21

わかりました、やってみます!
dream

2020/03/24 23:55

無事イメージ通りの動きになってくれました。 多忙なところお付き合いいただきありがとうございました。
guest

回答2

0

雑ですがこんな感じですかね?

投稿2020/03/24 11:21

yambejp

総合スコア114759

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

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

yambejp

2020/03/24 11:21

<style> #modal{display:none} #modal[data-open="true"]{display:block;} </style> <script> window.addEventListener('DOMContentLoaded', ()=>{ document.querySelector('#hoge').addEventListener('click',e=>{ var modal=document.querySelector('#modal'); var open=modal.dataset["open"]; if(open=="true"){ modal.dataset["open"]="false"; e.target.textContent="on"; }else{ modal.dataset["open"]="true"; e.target.textContent="off"; } }); }); </script> <div id="hoge">on</div> <div id="modal">modal</div>
dream

2020/03/25 00:42

ご多忙のところの回答恐れ入ります。一つ気になった点を申し上げますと、 'click'の後のe=>はどのようなことを意味しているのでしょうか?
yambejp

2020/03/25 00:56

eはイベントを渡すための引数で、click処理情報を引き継ぎます。 e.targetを利用するのが目的でこの場合のe.targetは クリックされた#hoge自体をさします
dream

2020/03/25 02:34

なるほど、そういった意味なんですね。 詳しい説明ありがとうございます。とても為になりました。
guest

0

ベストアンサー

JavaScript側を、以下のように書き換えたら動きそうです。
(true / falseなので、「!」を使うなどもっとスマートな方法はあるかもしれませんが)

JavaScript

1$(function() { 2 $(".header-menu").click(function() { 3 if ($(".nav-menu").attr("data-open") == "true") { 4 $(".nav-menu").attr("data-open", "false"); 5 } 6 else { 7 $(".nav-menu").attr("data-open", "true"); 8 } 9 10 return false; 11 }); 12});

CSSを見ると、.nav-menu[data-open="false"]など.nav-menuに対しての記述はあるものの、
JavaScript側では$("body").removeAttr("data-open","false"),などbodyに対して操作をしようとしているようでした。
そのためJavaScript側で、$(".nav-menu")に対して記述を追加するようにしました。

投稿2020/03/24 05:20

new1ro

総合スコア4528

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

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

dream

2020/03/25 02:38

迅速な対応恐れ入ります。おかげさまでうまくいきました、 ありがとうございます。
dream

2020/03/26 09:50

回答していただいたものを一通り試した結果、他の方のもうまくいきました 故、甲乙付け難いのですが一番先に答えていただきましたので、感謝の意を 込めてベストアンサーを付けさせていただきます。
new1ro

2020/03/26 11:35

ありがとうございます!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.49%

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

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

質問する

関連した質問