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

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

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

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

HTML5

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

jQuery

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

Q&A

解決済

2回答

353閲覧

flexbox内でPC時のメニューを表示させたいのですが

osarusam

総合スコア18

CSS3

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

HTML5

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

jQuery

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

0グッド

0クリップ

投稿2018/05/29 06:18

お世話になります。

flexboxでHTMLのテンプレートを作成中なのですが、
スマホ時768px以下に表示されるMENUボタンを開閉後、
そのままブラウザ画面を広げるとPC時の横並びメニューが出ません。

ブラウザの更新ボタンを押すと表示されるのですが、
スマホ時のdisplay:none;が効いたままのようです。

メニューの「#navi」要素にそれぞれ、

・スマホ時「display:none !important;」
・PC時「display:block !important;」

を付けると、今度はスマホ時にMENUボタンを押してもjQueryの.slideToggleが効かない状態です。

グーグルで調べてみたのですが、類似の設定が見当たりませんでした。。

何か良い方法はございますでしょうか?
よろしくお願いいたします。
PC時のメニュー
スマホ時のメニュー開閉
PC時メニュー画面を広げた後

/* HTML */ <!doctype html> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, minimum-scale=1, maximum-scale=1"> <title>サンプルテスト1</title> <link rel="stylesheet" media="all" href="style.css" /> <script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.4/jquery.min.js"></script> <script> $(function(){ // アイコンをクリック $("button").click(function(){ // #naviメニューを開閉する $("#navi").slideToggle(); }); }); </script> </head> <body> <div class="container"> <div class="row"> <div class="col span-12"> <header class="header"> <h1>LOGO</h1> <nav> <button><img src="button.png" width="20" height="17" alt="Button"><br><span class="menu">MENU</span></button> <div id="navi"> <ul> <li><a href="">ホーム</a></li> <li><a href="">店舗について</a></li> <li><a href="">サブページ</a></li> <li><a href="">サブページ</a></li> <li><a href="">お問い合わせ</a></li> </ul> </div> </nav> </header> </div> </div> </div> </body> </html>
/* CSS */ /* 全体の設定 –––––––––––––––––––––––––––––––––––––––––––––––––– */ html { box-sizing: border-box; -webkit-box-sizing: border-box; -moz-box-sizing: border-box; font-size: 62.5%; } body { font-family: "MS ゴシック",sans-serif; font-size: 1.6em; font-weight: 400; line-height: 1.6; margin:0; padding:0; } /* グリッド –––––––––––––––––––––––––––––––––––––––––––––––––– */ .container { margin: 0 auto; max-width: 1200px; padding: 0 2.0rem; position: relative; } /* ブロックを縦に表示 */ .row { display: flex; flex-direction: column; /* 縦並び */ padding: 0; width: 100%; } .col { display: block; flex: 1 1 auto; margin-left: 0; max-width: 100%; width: 100%; } /* 768px以上のブロック表示 –––––––––––––––––––––––––––––––––––––––––––––––––– */ @media screen and ( min-width : 768px ) { .row { display: flex; flex-direction: row; /* 横並び */ padding: 0; } .col { margin-left: 4%; } .col:first-child { margin-left: 0; } .row .col.span-12 { flex: 0 0 100%; max-width: 100%; } } /*ヘッダー -------------------------------------*/ .header { display: flex; flex-direction: row; padding: 2rem 0 0 0; } .header h1 { margin-right: auto; } nav ul { display: flex; flex-direction: row; list-style: none; } .header li { padding-top: 1rem; flex: 0 0 auto; list-style: none; } nav li a { text-decoration: none; text-align: center; } nav a:hover { background-color: #f7f7f7; } nav a { padding: 1rem 2rem; } /* PC時はMENUボタンを非表示 */ button { display: none; } /* PC時はメニューを表示 */ #navi { display: block; } /*768px以下のヘッダー表示 –––––––––––––––––––––––––––––––––––––––––––––––––– */ @media screen and (max-width: 768px){ .header { flex-direction: column; text-align: center; } nav ul { flex-direction: column; } .header h1 { margin-right: 0; } .header li { padding-top: 0; } /* スマホ時はMENUボタンを表示 */ button { display: block; } /* スマホ時はメニューを非表示 */ #navi { display: none; } }

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

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

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

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

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

guest

回答2

0

ベストアンサー

指定を!importantで強くして、それをPC用のメディアクエリの中に入れればOKだと思います。

css

1@media screen and (min-width: 768px){ 2 #navi { 3 display: block !important; 4 } 5} 6

投稿2018/05/29 06:34

kszk311

総合スコア3404

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

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

osarusam

2018/05/29 06:54

PC時もメディアクエリで囲んで指定する必要があるのですね。 おかげさまで、メニューが表示されるようになりました。 ありがとうございます!
macaron_xxx

2018/06/01 05:45

部分的には!importantで解決していますが、!importantをつけないといけないCSSの指定はどこか破綻しています。 構造を見直したほうがいいでしょう。
kszk311

2018/06/01 08:55 編集

「!important」を使用しても、別に構造が破綻しているわけでは無いと思います。 別要素で、SP用ナビとPC用ナビで分けるなら、「!important」をかけなくても出来ますが、同じ要素で重複してしまうので、HTML上はあまりよろしくないですよね。 レスポンシブで、ひとつの要素を使い回しているので、「!important」は使わないとしたら、 JSでresizeイベントなど走らせて、PC表示になったらJSで「#navi」に対して「display: block;」にするのかなと。 結局やっている事は同じですし、JS使うまでもないので、CSSに「!important」付けるのが楽であり、適切じゃないかなと思います。 他に方法があるでしょうか。
osarusam

2018/08/06 10:26

macaron_xxx様。kszk311様。 コメントを頂いていたのに気が付かず、すっかり返信が遅くなり申し訳ございません。今のところ!important以外に私ができる方法が無いので、そちらで作成しております。 色々なご意見ありがとうございます。とても参考になります。
guest

0

原因はslideToggleで

html

1<div id="navi">

html

1<div id="navi" style="display:none;">

html

1<div id="navi" style="display:block;">

になるためということは理解しているのでしょうか?
あとは優先度の問題になるのですが。

投稿2018/05/29 06:29

sousuke

総合スコア3828

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

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

osarusam

2018/05/29 06:53

すみません、jQueryは良く分からず勉強中です。 slideToggleで表示・非表示のCSSが付加されるのですね。 勉強になります。ありがとうございます!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問