แท็บ CSS นั้นยอดเยี่ยมมากในการแสดงข้อมูลที่เกี่ยวข้องในที่เดียวที่ง่ายต่อการนำทาง โดยพื้นฐานแล้วจะดูเหมือนวงเวียนแบบแท็บที่คุณจะเห็นในกล่องสูตรหรือสารยึดเกาะ ต่อไปนี้คือตัวอย่างบางส่วนของเว็บไซต์ที่ใช้การนำทางแบบแท็บ:
- Southwest Airlines ใช้การนำทางแบบแท็บเพื่อให้ผู้ใช้นำทางระหว่างการเช็คอินสำหรับเที่ยวบิน จองเที่ยวบิน หรือเพิ่มโรงแรมลงในการจอง
- องค์กรใช้แท็บสำหรับการนำทางเพื่อให้ผู้ใช้ตัดสินใจระหว่างการเช่าหรือซื้อ และเรียนรู้เกี่ยวกับบริการอื่นๆ ของตน
เมื่อคุณสังเกตทั้งสองไซต์นี้ ลองนึกถึงข้อดีของการใช้องค์ประกอบ UI ดังกล่าวบนไซต์ มันแก้ปัญหาอะไรได้บ้าง? ข้อมูลประเภทใดที่การนำทางแบบแท็บจะนำไปใช้ได้ดี
เมื่อคุณต้องการเข้าถึงโครงสร้าง UI ที่จัดระเบียบข้อความหรือข้อมูลให้เป็นส่วนประกอบที่มีความหมายและแสดงบนหน้าจอโดยไม่ต้องใช้พื้นที่มากเกินไป การนำทางแบบแท็บเป็นตัวเลือกที่ชาญฉลาด เราจะพูดถึงการนำทางแบบแท็บในเชิงลึกมากขึ้นเมื่อเราเริ่มใช้ JavaScript, jQuery และ/หรือ Bootstrap แต่ก็ยังมีการใช้งานที่เราสามารถใช้ได้ซึ่งต้องใช้ HTML และ CSS ล้วนๆ มาดูการตั้งค่ากัน:
ตั้งค่า HTML ของคุณ:
ไปข้างหน้าและตั้งค่า HTML ต้นแบบของคุณด้วยคอนเทนเนอร์ภายในเนื้อหาที่จะทำหน้าที่เป็นคอนเทนเนอร์หลักของเราสำหรับโครงการ คุณสามารถเรียกมันว่าอะไรก็ได้ที่คุณต้องการในแอตทริบิวต์ class แต่ฉันจะเรียกมันว่า class=”tabs”
. จนถึงตอนนี้ HTML ของคุณควรมีลักษณะดังนี้:
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>CSS Tabs</title> <style> /* No CSS to display yet */ </style> </head> <body> <div class="tabs"></div> <body> </html>
ภายใน “tabs” <div>
เราจะแทรก
tab
. นี่แสดงถึงแต่ละแท็บสี่แท็บที่เราจะเขียนขึ้นในวันนี้ โดยจะมีข้อมูลป้อนเข้า ป้ายกำกับแท็บ และเนื้อหาแท็บ มาทำภาชนะเปล่าสำหรับสิ่งเหล่านี้กัน:<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>CSS Tabs</title> <style> /* No CSS to display yet */ </style> </head> <body> <div class="tabs"> <div class="tab"> /* THIS IS OUR PLAN IN ACTION*/ /*input */ <input type="radio" id="tab-1" name="tab-group-1" checked/> /*label for input */ <label for="tab-1">Label 1</label> /* content */ <div class="content">Our content will go here</div> </div> <div class="tab"> <input type="radio" id="tab-2" name="tab-group-1" checked/> <label for="tab-2">Label 2</label> <div class="content gryffindor">Our content will go here</div> </div> <div class="tab">Try these two on your own! Follow the same convention as above for your class names and ids - I am using a HP theme, but name them whatever you'd like!</div> <div class="tab"></div> </div> <body> </html>
ภายในชื่อคลาสเนื้อหาจะเป็นเนื้อหาของเรา คุณจะใช้เนื้อหาอะไรก็ได้ตามต้องการ แต่การใช้เนื้อหาที่เกี่ยวข้องกันในแท็บเดียวถือเป็นแนวทางปฏิบัติมาตรฐาน
เวลาเริ่มต้น CSS:
เมื่อพูดถึงการเขียน CSS ให้เริ่มที่คอนเทนเนอร์ที่ใหญ่ที่สุดและดำเนินการตามแบบของคุณไปยังคอนเทนเนอร์ที่เล็กที่สุด นี่คือขั้นต่ำที่เราต้องทำเพื่อให้มันทำงาน:
81% ของผู้เข้าร่วมกล่าวว่าพวกเขารู้สึกมั่นใจมากขึ้นเกี่ยวกับโอกาสในการทำงานด้านเทคโนโลยีหลังจากเข้าร่วม bootcamp จับคู่กับ Bootcamp วันนี้
ผู้สำเร็จการศึกษาจากหลักสูตร bootcamp โดยเฉลี่ยใช้เวลาน้อยกว่าหกเดือนในการเปลี่ยนอาชีพ ตั้งแต่เริ่มต้น bootcamp ไปจนถึงหางานแรก
- ตั้งค่าตัวเลือกไวด์การ์ดเป็น box-sizing:border-box
- บนคอนเทนเนอร์หลัก เราจำเป็นต้องตั้งค่าคุณสมบัติการแสดงผลเป็น flex และตั้งค่าตำแหน่งให้สัมพันธ์กัน จอแสดงผล:ดิ้นช่วยให้แท็บวางติดกันในแถว และโดยทั่วไปตำแหน่งสัมพัทธ์จะทำหน้าที่เป็นขอบเขตหรือรั้วที่มีเนื้อหาของแท็บ
ณ จุดนี้ คุณจะเห็นสิ่งที่ดูเหมือนเป็นข้อความสี่ช่วงตึกพร้อมปุ่มตัวเลือกและเนื้อหาบางส่วน ต่อไปเราต้องหาวิธีแสดงบล็อกที่เลือกและซ่อนบล็อกอื่นๆ
- บนคอนเทนเนอร์ .tab เราจะตั้งค่าการจัดสไตล์สำหรับป้ายกำกับ:
- เส้นขอบทึบ 1px ในสีใดก็ได้ที่คุณต้องการ
- Padding:5px, 10px – จะเพิ่มช่องว่างรอบๆ ข้อความป้ายกำกับ
- Border-radius 10px, 10px, 0px, 0px – ซึ่งจะทำให้ป้ายกำกับดูเหมือนแท็บดั้งเดิมมากขึ้น
หากคุณตรวจสอบงานของคุณตอนนี้ คุณจะเห็นว่าป้ายกำกับมีปุ่มตัวเลือกแบบวงกลมอยู่ทางด้านซ้าย ดังนั้นมันจึงดูเหมือนแท็บดั้งเดิมมากกว่า แต่เพื่อให้ยังคงคุณสมบัติที่เลือกของปุ่ม เราจำเป็นต้องซ่อนส่วนที่เป็นวงกลมของปุ่มตัวเลือก
- ในการเลือกปุ่มจริงๆ เราใช้ .tab [type='radio'] ในการซ่อน เราตั้งค่าการแสดงเป็นไม่มี
ต่อไป เราต้องจัดการกับเนื้อหาจริงเพื่อให้แสดงทีละแท็บเท่านั้น
- เลือก div เนื้อหา แล้วตั้งค่าตำแหน่งเป็นค่าสัมบูรณ์ เมื่อตั้งค่าตำแหน่งที่แน่นอนแล้ว div สามารถตั้งค่าได้ทุกที่ภายในพาเรนต์ที่สัมพันธ์กัน เมื่อใช้ด้านบน ขวา ซ้าย และด้านล่าง คุณสามารถตั้งค่าเนื้อหาที่คุณต้องการให้อยู่ภายใน div ระดับบนสุดได้ ในกรณีนี้ ตั้งค่าคุณสมบัติด้านซ้ายและขวาเป็น 0 นอกจากนี้เรายังต้องการสร้างเส้นขอบและตั้งค่าสีพื้นหลังให้เป็นสีที่ไม่โปร่งใส
- การตั้งค่าดัชนี z ของแท็บที่เลือกจะทำให้แผงของแท็บนั้นอยู่ด้านบน โดยเลือกปุ่มที่เลือกและเนื้อหา ในการดำเนินการนี้ เราใช้ [type='radio']:checked ~ label ~ .content “~” ระหว่างองค์ประกอบใน CSS บอกเราว่าเราต้องการคลาสเนื้อหาที่เกิดขึ้นหลังจากองค์ประกอบป้ายกำกับที่เกิดขึ้นหลังจากตรวจสอบปุ่มตัวเลือก
- หากต้องการแสดงว่าแท็บใดเปิดใช้งานอยู่ ให้ตั้งค่า [type='radio']:checked ~ label เป็นสีพื้นหลังอื่น
ตอนนี้เมื่อผู้ใช้คลิกที่แท็บแต่ละแท็บ พวกเขาควรจะสามารถสลับจากแท็บหนึ่งไปอีกแท็บหนึ่งได้สำเร็จโดยไม่ต้องดูเนื้อหาของพาเนลอื่น นี่คือขั้นต่ำที่คุณต้องใช้เพื่อให้การนำทางแบบแท็บทำงาน ลองเล่นกับ CSS เพื่อเปลี่ยนสไตล์! การใช้งานการทำงานมีการเข้ารหัสด้านล่าง:
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>CSS Tabs</title> <style> * { box-sizing: border-box; } body { font-family: 'Roboto'; } .tabs { max-width: 700px; min-height: 100px; margin: 25px 0; width: 100%; display: flex; /* allows for tabs to be next to each other */ position: relative; /* relative here contains the width of the content */ } .tab label { padding: 5px 10px; border: 1px solid #ccc; cursor: pointer; border-radius: 10px 10px 0 0; } .tab [type='radio'] { display: none; /* this makes the radio buttons disappear - we are only keeping track if they are checked or not */ } h3 { margin: 10px 40px; } ul { list-style-type: none; } .content { padding: 10px; border-radius: 0px 10px 10px 10px; position: absolute; left: 0; right: 0; background: white; border: 1px solid #ccc; /* the left and right at 0 help the tabs to overlap each other */ } /* This allows the selected tab to be on top */ [type='radio']:checked ~ label ~ .content { z-index: 1; } [type="radio"]:checked ~ label { background: lightgrey; } /* color scheme for tabs */ [type='radio']:checked ~ #gryffindor { background: #ec9086; color: #241806; } [type='radio']:checked ~ #ravenclaw { background: #3054ca; color: #241806; } [type='radio']:checked ~ #slytherin { background: #089714; color: #252525; } [type='radio']:checked ~ #hufflepuff { background: #f0d695; color: #372e29; } [type='radio'] ~ #slytherin { background: #033807; color: #aaaaaa; } [type='radio'] ~ #hufflepuff { background: #f0c75e; color: #372e29; } [type='radio'] ~ #gryffindor { background: #9c1203; color: #e3a000; } [type='radio'] ~ #ravenclaw { background: #0e1a40; color: #946b2d; } .gryffindor { background: #9c1203; color: #e3a000; } .slytherin { background: #033807; color: #aaaaaa; } .hufflepuff { background: #f0c75e; color: #372e29; } .ravenclaw { background: #0e1a40; color: #946b2d; } </style> </head> <body> <div class="tabs"> <div class="tab"> <input type="radio" id="tab-1" name="tab-group-1" checked/> <label id="gryffindor" for="tab-1">Gryffindor</label> <div class="content gryffindor"> <h3>HP Chars in Gryffindor</h3> <ul class="gryffindor-students"> <li>Harry Potter</li> <li>Hermione Grainger</li> <li>Ron Weasley</li> <li>Albus Dumbledore</li> <li>Katie Bell</li> <li>Neville Longbottom</li> </ul> </div> </div> <div class="tab"> <input type="radio" id="tab-2" name="tab-group-1"/> <label id="slytherin" for="tab-2">Slytherin</label> <div class="content slytherin"> <h3>HP Chars in Slytherin</h3> <ul class="slytherin-students"> <li>Draco Malfoy</li> <li>Narcissa Black</li> <li>Lucius Malfoy</li> <li>Severus Snape</li> <li>Tom Riddle</li> <li>Dolores Umbridge</li> </ul> </div> </div> <div class="tab"> <input type="radio" id="tab-3" name="tab-group-1"/> <label for="tab-3" id="ravenclaw">Ravenclaw</label> <div class="content ravenclaw"> <h3>HP Chars in Ravenclaw</h3> <ul class="ravenclaw-students"> <li>Lisa Turpin</li> <li>Luna Lovegood</li> <li>Gilderoy Lockhart</li> <li>Garrick Ollivander</li> <li>Padma Patil</li> <li>Sybil Trelawney</li> </ul> </div> </div> <div class="tab"> <input type="radio" id="tab-4" name="tab-group-1"> <label for="tab-4" id="hufflepuff">Hufflepuff</label> <div class="content hufflepuff"> <h3>HP Chars in Hufflepuff</h3> <ul class="hufflepuff-students"> <li>Cedric Diggory</li> <li>Newton Scamander</li> <li>Nymphadora Tonks</li> <li>Pomona Sprout</li> <li>Susan Bones</li> <li>Teddy Lupin</li> </ul> </div> </div> </div> </body> </html>