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

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

ただいまの
回答率

90.52%

  • jQuery

    6689questions

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

  • HTML5

    4005questions

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

  • CSS3

    2061questions

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

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

解決済

回答 2

投稿

  • 評価
  • クリップ 0
  • VIEW 184

osarusam

score 10

お世話になります。

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;
}
}
  • 気になる質問をクリップする

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

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

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 2

checkベストアンサー

+1

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

@media screen and (min-width: 768px){
    #navi {
        display: block !important;
    }
}

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2018/05/29 15:54

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

    キャンセル

  • 2018/06/01 14:45

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

    キャンセル

  • 2018/06/01 17:53 編集

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

    キャンセル

  • 2018/08/06 19:26

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

    キャンセル

+1

原因はslideToggleで

<div id="navi">


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


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


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

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2018/05/29 15:53

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

    キャンセル

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

  • ただいまの回答率 90.52%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

  • 解決済

    ロゴをクリックしたらメニューがフェードインする仕組みを作りたいですが

    logoをクリックによってメニューが出てくる仕組みを作りたいです。 下記のよに書いてましたが、まったく出てこなかったです。 もしかしたらスクリプトが間違っていますか? コードを

  • 解決済

    ページ上部にスクロール設定について

    ページの右下に、クリックするとページ上部に行く設定をしたのですが、スクロール位置を1000以下にすると非表示に設定をhead内に記述したのですが実行できません。 ご教授頂けますと嬉

  • 受付中

    レスポンシブルデザインについて

    ページ上部のメニューをクリックしたらスマホのサイトのようなメニューバーを表示させたいのですがどうすればよろしいでしょうか。 ちなみにこちらのサイトを参考にしました https://

  • 解決済

    レスポンシブデザインについて

    この画像の上部の油そば池袋とありますが幅を小さくしていくと 赤枠の箇所に油そば池袋と入れたいのですがどうすればよろしいでしょうか <!DOCTYPE html> <html

  • 受付中

    レスポンシブデザインのメニューの幅のサイズが変更できない

    こちらのサイトを参考にして、ウィンドウ幅が小さくなったときスマホサイト用にメニューが出る設定をしたのですが幅が表示されるときのウィンドウ枠の数値をjquery.meanmenu.j

  • 解決済

    menuバーの中央配置について

    pc-menu内の<h1 class="aburasoba">油そば池袋</h1>を削除した際にliでかこった<li>menu</li>を中央配置にしたいのですがfloat: ce

  • 受付中

    [CSS]floatが聞かず画像が隠れてしまいます...

    以下の画像のようにしたいのですが、floatが効かず画像が隠れてしまいます... 作成中の部分は「カートに登録しました」から上の「header」タグ内の部分です。 ] 以下は僕が作

  • 受付中

    メニューバーのサイズの統一

    pc-menu2のliにメニューの記述や情報を記述しており、サイズを統一したのですがどうすればよろしいでしょうか。 ご教授お願いいたします。 <!DOCTYPE html> <

同じタグがついた質問を見る

  • jQuery

    6689questions

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

  • HTML5

    4005questions

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

  • CSS3

    2061questions

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