ตัวอย่างโค้ด
ตัวอย่างนี้แสดงวิธีสร้างเมนูนำทางแนวนอนที่ปรับตัวตามขนาดจอภาพ (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>สำหรับปุ่มแฮมเบอร์เกอร์