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

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

ただいまの
回答率

90.34%

  • HTML

    9615questions

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

  • CSS

    6227questions

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

ハンバーガーメニューの背景を固定したい

解決済

回答 1

投稿 編集

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

 レスポンシブで書いているソースのスマホ専用メニューが表示されたときに、スクロールの動きが鈍く、また背景も動いてしまうため、直したいです。

こんにちは、HTMLとCSSの初心者です。
ネット販売用のレスポンシブメニュを作っています。
ベースはテンプレートを使っているのですが、幅640px以下になったときにハンバーガーメニューが出て、タップするとスマホ用のメニューが表示されるようにしています。

 発生している問題・エラーメッセージ

メニューはきちんと出るのですが、スマホで見たときにフリックしてもスクロールする動きがスムーズでなく、また、メニューで隠れている背景が動いてしまいます。

 該当のソースコード

<div class="header-layout">
      <div class="title"><a href="https://shopping.geocities.jp/"><img src="img/logo.jpg" alt="OFF" width="100%" /></a></div>
      <a class="menu-trigger" href="javascript:;"><span></span><span></span><span></span></a>
      <div class="navi">
        <ul>
          <li><a href="#"><img src="img/plane.png"> BRAND</a>
            <ul>
              <li><a href="https://"><img src="img/logo50x50_aj.png" alt=""/></a></li>
              <li><a href="https://"><img src="img/logo50x50_bv.png" alt="text"/></a></li>
              <li><a href="https://"><img src="img/logo50x50_bb.png" alt=""/></a></li>
              <li><a href="https://"><img src="img/logo50x50_co.png" alt=""/></a></li>
              <li><a href="https://"><img src="img/logo50x50_ch.png" alt=""/></a></li>
              <li><a href="https://"><img src="img/logo50x50_ck.png" alt=""/></a></li>
              <li><a href="https://"><img src="img/logo50x50_ds.png" alt=""/></a></li>
              <li><a href="https://"><img src="img/logo50x50_dg.png" alt=""/></a></li>
              <li><a href="https://"><img src="img/logo50x50_ea.png" alt=""/></a></li>
              <li><a href="https://"><img src="img/logo50x50_sf.png" alt=""/></a></li>
              <li><a href="https://"><img src="img/logo50x50_fe.png" alt=""/></a></li>
              <li><a href="https://"><img src="img/logo50x50_fr.png" alt=""/></a></li>
              <li><a href="https://"><img src="img/logo50x50_gu.png" alt="text"/></a></li>
              <li><a href="https://"><img src="img/logo50x50_jc.png" alt=""/></a></li>
              <li><a href="https://"><img src="img/logo50x50_ks.png" alt=""/></a></li>
              <li><a href="https://"><img src="img/logo50x50_ls.png" alt=""/></a></li>
              <li><a href="https://"><img src="img/logo50x50_mk.png" alt=""/></a></li>
              <li><a href="https://"><img src="img/logo50x50_mcm.png" alt=""/></a></li>
              <li><a href="https://"><img src="img/logo50x50_pc.png" alt=""/></a></li>
              <li><a href="https://"><img src="img/logo50x50_ps.png" alt="/></a></li>
              <li><a href="https://"><img src="img/logo50x50_pd.png" alt=""/></a></li>
              <li><a href="https://"><img src="img/logo50x50_sbc.png" alt=""/></a></li>
              <li><a href="https://"><img src="img/logo50x50_sp.png" alt=""/></a></li>
              <li><a href="https://"><img src="img/logo50x50_tb.png" alt=""/></a></li>
              <li><a href=""><img src="img/logo50x50_vvww.png" alt=""/></a></li>
            </ul>
          </li>

        </ul>
      </div>
    </div>
@media only screen and (max-width: 640px) {
body {
    font-size: 90%;
}
.header-layout {
    width: 96%;
    margin-right: auto;
    margin-left: auto;
    position: relative;
    margin-top: 0.5em;
    margin-bottom: 0.5em;
}
.title {
    width: 40%;
    display: block;
    vertical-align: middle;
    padding: 2%;
    border: 1px solid #FFFFFF;
    font-family: "Lucida Console", Monaco, monospace;
    text-align: center;
    font-size: 150%;
}
.fixed-img img {
    width: 100%;
}
ul {
    font-size: 100%;
}
.top-rec-img {
    float: none;
    clear: both;
    width: 100%;
    margin-bottom: 1em;
}
.top-rec-info {
    float: none;
    clear: both;
    width: 96%;
}
.menu-trigger {
    display: block;
    position: fixed;
    right: 5%;
    top: 3%;
    width: 20px;
    height: 18px;
}
.menu-trigger span {
    position: absolute;
    left: 0;
    width: 100%;
    height: 2px;
    background-color: #000;
    border-radius: 2px;
}
.menu-trigger span:nth-of-type(1) {
    top: 0;
}
.menu-trigger span:nth-of-type(2) {
    top: 8px;
}
.menu-trigger span:nth-of-type(3) {
    bottom: 0;
}
.menu-trigger.active span:nth-of-type(1) {
    -webkit-transform: translateY(8px) rotate(-45deg);
    transform: translateY(8px) rotate(-45deg);
}
.menu-trigger.active span:nth-of-type(2) {
    opacity: 0;
}
.menu-trigger.active span:nth-of-type(3) {
    -webkit-transform: translateY(-8px) rotate(45deg);
    transform: translateY(-8px) rotate(45deg);
}
.wrapper {
    width: 96%;
}
#side {
    width: 100%;
}
.navi {
    display: none;
    overflow: scroll;
    width: 100%;
    height: 100vh;
}
.navi-area {
    position: absolute;
}
.navi ul {
    display: block;
    vertical-align: middle;
    text-align: left;
}
.navi li {
    display: block;
    vertical-align: middle;
    padding-top: 1em;
    padding-bottom: 0em;
    padding-left: 0em;
    padding-right: 0em;
}
.navi li ul li img {
    width: 20px;
    height: auto;
    margin-right: 1%;
    vertical-align: middle;
}
.navi ul a {
    text-decoration: none;
    padding: 2%;
}
.navi ul a:hover {
    color: #cccccc;
}
.navi li ul li a {
    width: 96%;
    display: block;
}
.navi-area {
    display: none;
    width: 100%;
    padding: 2%;
    height: 100vh;
    background-color: rgba(203,217,217,0.8);
}
.navi li ul {
    position: relative;
    z-index: 9999;
    top: 100%;
    left: 0;
    width: 96%;
    padding: 2%;
    background-color: #FFFFFF;
    display: block;
    overflow: hidden;
    -moz-transition: .2s;
    -webkit-transition: .2s;
    -o-transition: .2s;
    -ms-transition: .2s;
    transition: .2s;
}
.navi li ul li {
    display: block;
    float: none;
    padding: 0;
    margin: 0;
    width: auto;
    margin-bottom: 1em;
}
.navi li:hover ul {
    overflow: visible;
    display: block;
}
.last {
    margin-bottom: 100px;
}
.side-area {
    float: none;
    clear: both;
    width: 100%;
}
.main-area {
    float: none;
    clear: both;
    width: 100%;
}
.center-layout {
    width: 100%;
    margin-right: auto;
    margin-left: auto;
    text-align: left;
}
.middle-area {
    width: 96%;
}
.middle-area h2 {
    padding: 0;
    padding-top: 1em;
    padding-bottom: 1em;
    font-size: 150%;
}
.mv-area {
    font-size: 70%;
}
.search-layout {
    width: 90%;
    margin-right: auto;
    margin-left: auto;
}
.search-postage {
    padding-top: 1%;
}
.search-postage form {
    width: 100%;
    float: none;
    clear: both;
}
.search-postage p {
    float: none;
    clear: both;
    width: 100%;
    line-height: auto;
}
.search-postage input {
    width: 40%;
    padding: 7px;
    margin-left: 1em;
    border: none;
}
.searchbutton input {
    border-radius: 7px;
    padding-left: 1em;
    padding-right: 1em;
    background-color: #333333;
    color: #FFFFFF;
}
.footer {
    font-size: 120%;
}
.footer li {
    border-bottom: 1px dotted #eeeeee;
}
.footer-left {
    float: none;
    clear: both;
    width: 96%;
    padding: 2%;
}
.footer-left img {
}
.footer-center {
    float: none;
    clear: both;
    width: 96%;
    padding: 2%;
}
.footer-right {
    float: none;
    clear: both;
    width: 96%;
    padding: 2%;
}
.page-items img {
    width: 96%;
    padding: 2%;
}
iframe {
    width: 100%;
}
}

 試したこと

overflow-y: scroll;
-webkit-overflow-scrolling:touch;

を適切と思われる場所に張り付けてはみたのですが、うまくいきませんでした。

 補足情報(FW/ツールのバージョンなど)

Dwの最新版を使っています。

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

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

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

    クリップを取り消します

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

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

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

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

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

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

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

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

    質問の評価を下げる

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

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

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

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

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

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

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

    詳細な説明はこちら

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

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

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

質問への追記・修正、ベストアンサー選択の依頼

  • dreamliner1977

    2018/07/20 15:16

    チェックいただきありがとうございます。25x29pxで1KBです。ハンバーガーをタップしすると、Planeのアイコンの右に「BRAND」と表示されその下に、50*50のロゴとテキストが並んで、iPhoneXで見たときに画面の半分くらいまでに収まるようになっています。動かないわけではないですが、ちょうど錆びたドアのようにフリックしたときにスルスルと動いてくれません。でも、確認いただいたら問題なく動いているとおっしゃらていたの、どこがダメなのかいろんなサイトを見てはいるのですが、自分にはハードルが高いですね((-_-;))

    キャンセル

  • dreamliner1977

    2018/07/20 15:23

    ちなみにハンバーガータップ→そこがよくある「×」に代わり、、スマホ用のメニューが表示さます。スマホメニューがスムーズに動かない代わりに、よく見ると画面の右端に時折スクロールバーが出現し、それが出ているときは、本来の画面がスクロールしてしまう現象になっています。

    キャンセル

  • FKM

    2018/07/20 16:01

    環境を再現できました。そして、Chromeの開発ツールで検証した仮説を回答に記述しておきます。

    キャンセル

回答 1

checkベストアンサー

+1

naviタグ配下のulが二重になっているのが怪しいですね。開発ページでCSSの要素を検証すると、親のulタグ内のliのheightの値が、入れ子になった子のliタグにおけるheightの値となっています。

なので、親は単一のリストなのでulとliにせず、divタグにしておくべきですね。

それで動かしてみたところ、リスト内はスムーズに動くようになりました。

投稿

編集

  • 回答の評価を上げる

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

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

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

  • 回答の評価を下げる

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

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

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

  • 2018/07/20 17:01

    こんにちは。ご回答ありがとうございます。
    「のulタグ内のliのheight要素をフリックしようとしているようです。なので、上のタグはulとliにせず、divタグにした方が良さそう」
    ここの部分は初心者の自分にはすぐには飲み込めないので、調べながらやってみようと思います!

    キャンセル

  • 2018/07/20 17:14

    補足です。要素の領域を調べてみたら、どうも入れ子になっていたすべてのul > liタグに対し、親構造にあるul> liタグの高さと同じ値を取得していたのが原因のようです(要はリスト全体のheightと同じ値が、各個別リストのheightになっていた)。動作が重くなっていたのはそのためですね。

    キャンセル

  • 2018/07/20 17:20

    こんにちは。承知いたしました。教えていただいた箇所を修正してみます!

    キャンセル

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

  • HTML

    9615questions

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

  • CSS

    6227questions

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