เทคนิคการทำ Tab ให้กับเว็บไซต์
สังเกตมั้ยว่าเว็บไซต์บางแห่งจะมีส่วนของ Tab ที่เอาไว้ให้เราเลือกกด เพื่อเปลี่ยนเนื้อหา/ข้อความนั้นๆ ตัวอย่าง เช่น
ซึ่งจริงๆแล้ว หากใครใช้พวก CSS Framework อย่าง Bootstrap หรือ Foundation มันจะมี component พวก Tab มาให้ใช้งาน หรือจะเป็น jQuery UI หรือว่า library ต่างๆ ก็มีคนทำไว้มากมาย เช่น บทความนี้ http://www.jqueryrain.com/example/jquery-tabs/ เราเพียงแค่เรียกใช้ด้วยฟังค์ชั่นของ javascript เท่านั้นเอง
เมื่อก่อนเวลาผมทำแท็ป ก็จะใช้ตัวช่วยพวกนี้ตลอด มาวันนี้นึกสนุก อยากรู้ว่ามันมีหลักการทำงานยังไง ซึ่งจริงๆแล้ว ไม่ได้ยากอะไรเลยครับ
สำหรับบทความนี้จะเป็นวิธีการและหลักการง่ายๆตามความเข้าใจของผมนะครับ :)
Step 1 : วาง layout ด้วย HTML
ก่อนอื่นเลย ต้องวางโครงสร้างของ HTML โดยเราต้องทำการกำหนดว่า จะให้แท็ปอยู่ส่วนไหน และเนื้อหาอยู่ส่วนไหน
- Tab : จะอยู่ในรูปแบบ
ul
โดยมีli
ตามจำนวนของ Tab ทั้งหมดที่ต้องการ - Content : ตัวเนื้อหา จะถูกแยกด้วย คลาส
tab-pane
และอยู่ภายในคลาสtab-contents
อีกที
สร้างไฟล์ index.html
ขึ้นมา ดังนี้
จากโครงสร้างของ HTML ด้านบน อธิบาย เป็นรูป ได้แบบนี้ครับ
ต่อมาจัดการใส่ข้อมูลลงไปแบบง่ายๆครับ แบบนี้ (เปลี่ยน data-tab และ id ด้วยนะครับ เพื่อให้ชื่อมันสื่อความหมายได้ชัดเจน)
แน่นอนว่าหน้าเว็บเรายังเละอยู่ เพราะยังไม่ได้จัดการ CSS อะไรเลย :)
Step 2 : ปรับแต่งหน้าตาด้วย CSS
ทำการสร้างไฟล์ css ขึ้นมาตั้งชื่อว่า main.css
จากนั้นเพิ่มลิงค์ในไฟล์ index.html
ดังนี้
ส่วนรายละเอียดของ CSS ขอไม่พูดถึงนะครับ เนื่องจากอาศัยความมั่วเอาครับ ไปหาอ่านเพิ่มเอาเองละกัน :)
หลักๆเลยก็คือ
.tabs
: ปรับlist-style
เป็นnone
.tabs li
: ให้การแสดงผลเป็นแบบinline-block
เพื่อให้ Tab เรียงกันแบบแนวนอน.tab-pane
: เนื้อหาทั้งหมดจะถูกซ่อนไว้ ฉะนั้นก็ปรับdisplay
เป็นแบบnone
.current
: คลาสcurrent
ของtab-pane
เอาไว้โชว์เฉพาะเนื้อหาที่ต้องการ โดยเปลี่ยนจากnone
เป็นblock
.current
: ของ.tabs li
เอาไว้สำหรับเปลี่ยนสีพื้นหลัง เพื่อให้รู้ว่าเลือกแท็ปไหนอยู่
Step 3 : เพิ่ม Javascript
สุดท้าย ทำการเพิ่มส่วนของ Javascript โดยจะใช้ jQuery สำหรับ select DOM และการเพิ่ม/ลบ คลาสของ Element ที่เราเลือกกันครับ ทำการเพิ่มไฟล์ main.js
ขึ้นมา จากนั้นใส่โค๊ดด้านล่างลงไป
Note:
$(function() { ...});
มีค่าเท่ากับ$(document).ready(function() {});
อธิบายโค๊ดด้านบนคือ
- เมื่อคลิกที่
li
มันก็จะทำการดึงข้อมูลจาก attribute ชื่อว่าdata-tab
มาเก็บไว้ตัวแปรtabId
(เช่นhome
,contact
) - จากนั้นทำการลบคลาส
current
ออกจากli
ทั้งหมด (ตอนนี้li
จะไม่มีbackground
แล้ว) - ลบคลาส
current
ออกจากtab-pane
(ตอนนี้tab-pane
ไม่มีcurrent
เนื้อหาก็จะถูกซ่อนด้วยdisplay: none
) - ทำการเพิ่มคลาส
current
ให้กับli
ที่เราคลิก (เราใช้$(this)
หมายถึง.tabs li
ตัวที่เราคลิกนั่นเอง) - เลือกไอดีที่ชื่อเดียวกันกับ
tabId
จากนั้นใส่คลาสcurrent
ให้มันก็คือ เปลี่ยนเป็นdisplay: block
ทำให้เนื้อหาถูกโชว์ขึ้นมา
จากนั้นที่ไฟล์ index.html
เพิ่ม jQuery และ main.js
ตามลำดับ
เป็นอันเรียบร้อย
ลองเอา DEMO ไปลองเล่นกันดูได้ครับ
See the Pen Tab Content Example by Chai Phonbopit (@Phonbopit) on CodePen.
References
- Authors
-
Chai Phonbopit
เป็น Web Dev ในบริษัทแห่งหนึ่ง ทำงานมา 10 ปีกว่าๆ ด้วยภาษาและเทคโนโลยี เช่น JavaScript, Node.js, React, Vue และปัจจุบันกำลังสนใจในเรื่องของ Blockchain และ Crypto กำลังหัดเรียนภาษา Rust