Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> JavaScript

วิธีสร้างเมนูนำทางบนสุดสำหรับมือถือ/แท็บเล็ต ด้วย CSS และ JavaScript


ตัวอย่างโค้ด

ตัวอย่างนี้แสดงวิธีสร้างเมนูนำทางแนวนอนที่ปรับตัวตามขนาดจอภาพ (Responsive) โดยบนเดสก์ท็อปจะแสดงเมนูเต็มรูปแบบ แต่บนมือถือ/แท็บเล็ต (กว้าง ≤ 600px) จะซ่อนเมนูและแสดงปุ่มแฮมเบอร์เกอร์ (☰) แทน

<!DOCTYPE html>
<html lang="th">
<head>
  <meta charset="UTF-8" />
  <meta name="viewport" content="width=device-width, initial-scale=1.0" />
  <title>Responsive Top Navigation</title>
  <style>
    body {
      margin: 0;
      padding: 0;
    }
    nav {
      position: relative;
      top: 0;
      width: 100%;
      background-color: rgb(39, 39, 39);
      overflow: auto;
      height: auto;
    }
    .links {
      display: inline-block;
      text-align: center;
      padding: 14px;
      color: rgb(178, 137, 253);
      text-decoration: none;
      font-size: 17px;
    }
    .links:hover {
      background-color: rgb(100, 100, 100);
    }
    .selected {
      background-color: rgb(0, 18, 43);
    }
    .hamburger {
      color: white;
      font-weight: bolder;
      display: none;
      cursor: pointer;
      padding: 12px;
    }

    /* Responsive: มือถือ/แท็บเล็ต */
    @media screen and (max-width: 600px) {
      nav a:not(:first-child) {
        display: none;
      }
      nav a.hamburger {
        float: right;
        display: block;
        padding: 12px;
      }
      nav.openNav a.hamburger {
        position: absolute;
        right: 0;
        top: 0;
      }
      nav.openNav a {
        float: none;
        display: block;
        text-align: center;
      }
    }
  </style>
</head>
<body>
  <nav class="bottomNav">
    <a class="links selected" href="#"> หน้าแรก</a>
    <a class="links" href="#"> เข้าสู่ระบบ</a>
    <a class="links" href="#"> สมัครสมาชิก</a>
    <a class="links" href="#"> ติดต่อเรา</a>
    <a class="links" href="#"> ข้อมูลเพิ่มเติม</a>
    <a class="hamburger">☰</a>
  </nav>

  <div>
    <p>เนื้อหาตัวอย่างข้อความสุ่ม </p>
    <p>เนื้อหาตัวอย่างข้อความสุ่ม </p>
  </div>

  <script>
    function toggleNav() {
      const nav = document.getElementsByTagName("nav")[0];
      if (nav.className === "bottomNav") {
        nav.className += " openNav";
      } else {
        nav.className = "bottomNav";
      }
    }
    document.querySelector(".hamburger").addEventListener("click", toggleNav);
  </script>
</body>
</html>

การทำงาน

  • เดสก์ท็อป (> 600px): แสดงเมนูทั้งหมดเรียบร้อยในแถบเดียว
  • มือถือ/แท็บเล็ต (≤ 600px): ซ่อนลิงก์เมนู แสดงเฉพาะปุ่ม ☰ (แฮมเบอร์เกอร์)
  • คลิกปุ่ม ☰ จะเพิ่ม class openNav ทำให้เมนูแสดงแบบบล็อก (stack แนวตั้ง)

คำอธิบายเทคนิคสำคัญ

  • @media screen and (max-width: 600px) - Media query สำหรับจอเล็ก
  • nav a:not(:first-child) - ซ่อนทุกลิงก์ยกเว้นตัวแรก (Home)
  • Class .openNav ควบคุมการแสดงผลเมนูเมื่อเปิด
  • JavaScript เพียงสลับ class ระหว่าง bottomNav และ bottomNav openNav

ข้อแนะนำเพิ่มเติม

  • ควรใช้ nav.classList.toggle("openNav") แทนการสลับ className โดยตรง
  • เพิ่ม aria-expanded และ aria-controls สำหรับ accessibility
  • พิจารณาใช้ <button> แทน <a> สำหรับปุ่มแฮมเบอร์เกอร์