iT邦幫忙

0

不好意思,我想做RWD drop menu,手機和平板尺寸,點擊漢堡選單沒有反應

  • 分享至 

  • xImage

各位大大,上一篇雖然有發文過,不好意思,造成你們困擾,目前遇到問題是變成手機和平板尺寸時,我點擊漢堡選單,沒有任何反應,我還是停留打轉。
這是youtube網址:
https://www.youtube.com/watch?v=bk3Y4heVdFs&t=360s
https://www.youtube.com/watch?v=XhGN_Np1obg
這是執行照片:
https://ithelp.ithome.com.tw/upload/images/20230615/20145992U2ZIbTcdgZ.png
https://ithelp.ithome.com.tw/upload/images/20230615/20145992V9b0q7OIQl.png
這是原始程式碼:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>chatGDT drop menu1</title>
    <style>
        /* 引入 Google Fonts */
        @import url('https://fonts.googleapis.com/css2?family=Poppins&display=swap');
        
        /* 重置樣式 */
        * {
            padding: 0;
            margin: 0;
            font-family: 'Poppins', monospace;
            box-sizing: border-box;
        }

        /* 標頭樣式 */
        header {
            width: 100%;
            height: 80px;
            background: #2bab0d;
            display: flex;
            justify-content: flex-start;
            align-items: center;
            padding: 0 20px;
        }

        /* 漢堡選單樣式 */
        .menu-toggle {
            display: none; /*隱藏起來*/
            font-size: 20px;
            color: #fff;
            cursor: pointer;
            /* 註解:將漢堡選單置於左上角 */
            position: absolute;
            top: 10px;
            left: 10px;
        }

        /* 選單樣式 */
        nav ul {
            list-style: none;
            display: flex;
        }

        nav ul li {
            position: relative;
        }

        nav ul li a {
            display: block;
            padding: 20px 25px;
            color: #fff;
            text-decoration: none;
            text-align: center;
            font-size: 20px;
        }
        
        /*子選單部分*/
        nav ul li ul.dropdown li {
            display: block;
        }

        nav ul li ul.dropdown {
            width: 100%;
            background: #2bab0d;
            position: absolute;
            top: 100%;
            left: 0;
            z-index: 999;
            display: none;
        }

        nav ul li a:hover {
            background: #00ff00;
        }
        /*子選單往下拉*/
        nav ul li:hover ul.dropdown {
            display: block;
        }

        /* 媒體查詢 */
        @media (max-width: 767px) {
            header {
                justify-content: flex-start;
            }
            .menu-toggle {
                display: block;
            }
            nav ul {
                display: none;
                flex-direction: column;
                align-items: flex-start;
            }
            nav ul li {
                width: 100%;
                text-align: left;
            }
            
        }
    </style>
</head>
<body>

    <header>
        <div class="menu-toggle">☰</div>
        <nav>
            <ul class="menu">
                <li><a href="#">我的首頁</a>
                    <ul class="dropdown">
                        <li><a href="#">鳥類網站簡介</a></li>
                        <li><a href="#">我的簡介</a></li>
                    </ul>
                </li>
                <li><a href="#">本土鳥類</a>
                    <ul class="dropdown">
                        <li><a href="#">台灣藍鵲</a></li>
                        <li><a href="#">酒紅朱雀</a></li>
                        <li><a href="#">灰喉山椒鳥</a></li>
                    </ul>
                </li>
                <li><a href="#">過境候鳥</a>
                    <ul class="dropdown">
                        <li><a href="#">銅藍鶲</a></li>
                        <li><a href="#">銹鵐</a></li>
                    </ul>
                </li>
            </ul>
        </nav>
    </header>

    
</body>
</html>

我想做的功能是類似RWD的navbar手機和平板尺寸時點,點擊漢堡選單,就張開往下拉出現選單,再點擊漢堡選單,就收起來,該怎麼寫呢?

看更多先前的討論...收起先前的討論...
柯柯 iT邦新手 3 級 ‧ 2023-06-15 16:00:59 檢舉
沒有要自己刻的話
上一邊問答應該就有人推薦用bootstrap了
https://getbootstrap.com/docs/5.0/components/navbar/
好的,謝謝妳,如果要手刻要怎麼做呢?
如果是手機跟平板要監控的是 觸控事件,因為手機平板大多數沒有滑鼠這裝置,
雖然如果有人安裝了滑鼠這裝置就會有 按鍵事件,所以你沒寫到的是觸控事件
BOOTSTRAP 的JS裡面有寫,會建議你先參考一下那個事件怎麼寫
你在思考你要怎麼手刻,如果你JS不寫觸控事件,你真的換成手機之後,漢堡點下去是沒有動作的,但你描述的不清楚,所以不太確定你是什麼狀況
還有,建議用CODEPEN 這個雲端服務,你可以在上面把你寫好的碼之後,再把連結PO上來,這樣會比較快,不然這邊大多數還要想辦法找環境去測試你的碼,但每個人環境不同,弄出的結果,你不一定可以用
好的,謝謝妳
這是我的codepen:https://codepen.io/thyweb/pen/dyQMPey
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

1 個回答

1
greenriver
iT邦研究生 5 級 ‧ 2023-06-16 10:37:34

純CSS,要加下面這兩個。

<style>
     @media (max-width: 767px) {
         .menu-toggle:focus + nav ul {
            display: block;
        }
     }
</style>
<body>
    <header>
        <div class="menu-toggle" tabindex="0">☰</div>
    </header>
<body>

不過通常我會用js去做。
在css設定一個.active。如下

<style>
.active{
    display:block;
}
</style>

再用js監控menu的click事件

<script>
    let isActivedMenu = false //一開始是關閉的
    const menuToggle = document.querySelector('.menu-toggle')
    const navUl = document.querySelector('nav ul')
    menuToggle.onclick = () => {
        if (!isActivedMenu) navUl.classList.add('active')
        else navUl.classList.remove('active')
        isActivedMenu = !isActivedMenu
    }
</script>

推這個答案,但剛看過建議如下

  1. JS 語法要加
  2. CSS 部分要加
nav { position: relative;  }   
.active{
    display:inline-block;
}
ul.active{
  top:0;    
  position:fixed ;
}
  1. 這樣上去後,應該是樓主要的效果
    畫面如下
    https://ithelp.ithome.com.tw/upload/images/20230616/20097082tSNxkRl56x.png
    https://ithelp.ithome.com.tw/upload/images/20230616/20097082V7BnR1WNZz.png
    https://ithelp.ithome.com.tw/upload/images/20230616/20097082TJOEWA2PlL.png
    https://ithelp.ithome.com.tw/upload/images/20230616/20097082Shru9ws24j.png
    https://ithelp.ithome.com.tw/upload/images/20230616/20097082LbPswG6LJu.png

進階的就是定位,你可以透過 物件.active 去定位,不要讓子選單都在下面
例如假如選單寬度是 40px,你第二層可以設 left:40px;
這樣第二層就會往右移 40px,這樣會比較好看,我上面給個示範
別人給語法,但是細節的部份,還是要靠自己去調整的

謝謝妳

我要發表回答

立即登入回答