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

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

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

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

jQuery

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

HTML

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

CSS

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

Q&A

1回答

1286閲覧

スマホサイズの際に勝手に開くnavを、開かないようにしたい。

hoge_nakatani

総合スコア63

JavaScript

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

jQuery

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

HTML

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

CSS

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

0グッド

0クリップ

投稿2019/06/11 13:07

編集2019/06/11 14:16
========= HTML ========= <nav class="NavMenu"> <ul> <li><a href="#">Menu1</a></li> <li><a href="#">Menu2</a></li> <li><a href="#">Menu3</a></li> <li><a href="#">Menu4</a></li> <li><a href="#">Menu5</a></li> </ul> </nav> <!-- ハンバーガーメニュー部分 --> <div class="Toggle"> <span></span> <span></span> <span></span> </div> ========= CSS ========= @media screen and (max-width:960px){ /*ナビメニューのスタイルを指定*/ nav.NavMenu{ position: fixed; /*表示位置を固定*/ z-index: 2; /*重ね順を変更*/ top: 0; /*表示位置を指定*/ left: 0; /*表示位置を指定*/ background: #fff;/*背景を白にする*/ color: #000; /*文字色を黒にする*/ text-align: center; /*テキストを中央揃え*/ width: 100%; /*全幅表示*/ transform: translateY(-100%); /*ナビを上に隠す*/ transition: all 0.6s; /*アニメーションの時間を指定*/ } nav.NavMenu ul{ background: #ccc; /*背景をグレーにする*/ width: 100%; margin: 0 auto; padding: 0; } nav.NavMenu ul li{ font-size: 1.1em; list-style-type: none; padding: 0; width: 100%; border-bottom: 1px dotted #333; } nav.NavMenu ul li:last-child{ padding-bottom: 0; border-bottom: none; /*最後のメニュー項目のみ下線を消す*/ } nav.NavMenu ul li a{ display: block; /*クリックできる領域を広げる*/ color: #000; padding: 1em 0; } /*トグルボタンが押されたときに付与するクラス*/ nav.NavMenu.active{ transform: translateY(0%); } /*トグルボタンのスタイルを指定*/ .Toggle { display: block; position: fixed; /* bodyに対しての絶対位置指定 */ right: 13px; top: 12px; width: 42px; height: 42px; cursor: pointer; z-index: 3; } .Toggle span { display: block; position: absolute; width: 30px; border-bottom: solid 3px #000; -webkit-transition: .35s ease-in-out; /*変化の速度を指定*/ -moz-transition: .35s ease-in-out; /*変化の速度を指定*/ transition: .35s ease-in-out; /*変化の速度を指定*/ left: 6px; } .Toggle span:nth-child(1) { top: 9px; } .Toggle span:nth-child(2) { top: 18px; } .Toggle span:nth-child(3) { top: 27px; } /* 最初のspanをマイナス45度に */ .Toggle.active span:nth-child(1) { top: 18px; left: 6px; -webkit-transform: rotate(-45deg); -moz-transform: rotate(-45deg); transform: rotate(-45deg); } /* 2番目と3番目のspanを45度に */ .Toggle.active span:nth-child(2), .Toggle.active span:nth-child(3) { top: 18px; -webkit-transform: rotate(45deg); -moz-transform: rotate(45deg); transform: rotate(45deg); } } ========= JS ========= $(function() { $('.Toggle').click(function() { $(this).toggleClass('active'); if ($(this).hasClass('active')) { $('.NavMenu').addClass('active'); //クラスを付与 } else { $('.NavMenu').removeClass('active'); //クラスを外す } }); });

下記のコードを実行すると、960px以下のときにnavがhamburgerメニューになるのですが
ボタンを押してなくても、縮めたときの初動で、勝手に開いている状態になってしまってます。
最初から動かないようにしたいのですが、どうすればいいのでしょうか??

====================================================================================

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

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

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

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

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

miyabi_takatsuk

2019/06/11 13:11

コードは、マークダウン方式で、コードブロックを使って、記載してください。質問本文は編集できます。 <code>ボタンを押して、記入される文字列の中に記載ください。
hoge_nakatani

2019/06/11 14:16

編集いたしました。 お手数おかけいたしました。
guest

回答1

0

なんだか、CSSアニメーションの登竜門みたいな質問で微笑ましくなりました。

実は、transitonを使ったアニメーションの仕様の難しいところで、
初動と、後のアニメーションに差をつけれないところが扱い難しいんですよね。

下記でいかがでしょうか。
(CSSは、内容変えたブロックのみ入れてます)

css

1/*ナビメニューのスタイルを指定*/ 2nav.NavMenu{ 3 position: fixed; /*表示位置を固定*/ 4 z-index: 2; /*重ね順を変更*/ 5 top: 0; /*表示位置を指定*/ 6 left: 0; /*表示位置を指定*/ 7 background: #fff;/*背景を白にする*/ 8 color: #000; /*文字色を黒にする*/ 9 text-align: center; /*テキストを中央揃え*/ 10 width: 100%; /*全幅表示*/ 11 transform: translateY(-100%); /*ナビを上に隠す*/ 12 /* 下記が変更点 */ 13 /* heightに0を効かせ、アニメーション外で初期を非表示とした */ 14 height: 0; 15 /* height 0の時、表示されないようにした */ 16 overflow: hidden; 17 /* アニメーションを適用するプロパティを、transformのみにした */ 18 transition: transform 0.6s; /*アニメーションの時間を指定*/ 19} 20 21/*トグルボタンが押されたときに付与するクラス*/ 22nav.NavMenu.active{ 23 /* アニメーション外のheightを、アクティブの時はautoで、中身を表示するようにした */ 24 height: auto; 25 transform: translateY(0%); 26}

javascript

1$(function() { 2 3// .NavMenuのtransitionに効かせている、アニメーション時間を動的にとるための変数を用意 4const navDom = $('.NavMenu').get(0); 5const navStyle = window.getComputedStyle(navDom); 6// 画面幅が、960px以上だと、0か、数値にならないとなるので、その場合は、600が入るようにした。 7const navTransitionDuration = (isNaN(parseFloat(navStyle.transitionDuration)) || parseFloat(navStyle.transitionDuration) == 0 ? 0.6 : parseFloat(navStyle.transitionDuration)) * 1000; 8// heightに効かせたインナースタイルをタイミングよく解除するためのタイマーを用意 9let classDelTimer = null; 10 11$('.Toggle').click(function() { 12 $(this).toggleClass('active'); 13 if ($(this).hasClass('active')) { 14 // heightのインナースタイルを解除しつつ、activeクラスを付与 15 $('.NavMenu').css('height', '').addClass('active'); //クラスを付与 16 } else { 17 // クラスを外す時、強制的に表示状態を保つため、heightのインナースタイルを効かせつつ、クラスを外す。 18 $('.NavMenu').css('height', 'auto').removeClass('active'); //クラスを外す 19 // transitionアニメーションが終了したタイミングで、heightインナースタイルを外すようタイターセット 20 if (classDelTimer) { 21 clearTimeout(classDelTimer); 22 } 23 // transition時間プラス0.1秒とすることで、処理遅延が多少出ても、違和感をなくせる 24 classDelTimer = setTimeout(function(){ 25 $('.NavMenu').css('height', ''); 26 }, navTransitionDuration + 100); 27 } 28 }); 29});

やったこととしては、アニメーションの対象を、transformのみに限定したのと、
heightにて表示非表示自体をコントロールするように変え、
javascriptの方で、heightのタイミングなどをコントロールするよう変えました。
ひとまず、chromeでは期待通りの動きとなっていると思います。

他、モダンブラウザでうまくいかないなどありましたら、コメントいただければと思います。

投稿2019/06/12 02:21

編集2019/06/12 07:36
miyabi_takatsuk

総合スコア9528

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

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

hoge_nakatani

2019/06/17 13:29

ありがとうございます! 確認したところ、動きませんでした。
miyabi_takatsuk

2019/06/17 14:24 編集

動かなかったとは、何が、どう動かなかったのでしょうか? ひとまず、私の環境、(macOS Chrome、FireFox)では意図した通りにナビゲーションの初動は抑えられているので、 ブラウザを教えてください。 もし、Chromeなのであれば、 他に書いているCSS、HTML、JavaScriptが干渉している可能性もありますので、 質問文に追記をお願いします。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.49%

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

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

質問する

関連した質問