การจัดรูปแบบองค์ประกอบหลักตามคลาสของลูกที่ใช้งานอยู่ใน CSS
เมื่อคุณสร้างอินเทอร์เฟซเว็บ คุณอาจพบสถานการณ์ที่คุณต้องจัดรูปแบบองค์ประกอบหลักตามคลาสขององค์ประกอบลูก ตัวอย่างการใช้งานที่พบบ่อยคือเมนูที่สร้างโดยปลั๊กอิน ซึ่งคุณต้องการเน้นรายการเมนูที่ใช้งานอยู่ด้วยการจัดรูปแบบรายการหลักที่เกี่ยวข้อง บล็อกโพสต์นี้จะช่วยให้คุณเข้าใจปัญหานี้และเสนอวิธีแก้ไขที่เป็นไปได้ โดยเฉพาะการใช้ CSS selectors
เข้าใจปัญหา
ลองนึกภาพว่า คุณมีโครงสร้าง HTML แบบนี้สำหรับเมนูของคุณ:
<ul class="menu">
<li>
<a class="active">หน้าใช้งานอยู่</a>
</li>
<li>
<a>หน้าอื่นๆ</a>
</li>
</ul>
ในตัวอย่างนี้:
- องค์ประกอบ
<a>
สำหรับ “หน้าใช้งานอยู่” มีคลาสactive
ซึ่งบ่งชี้ว่าเป็นหน้าที่ใช้งานอยู่ในขณะนี้ - คุณต้องการจะใช้สไตล์กับองค์ประกอบหลัก
<li>
ของลิงก์ที่มีคลาสactive
แต่คุณไม่สามารถควบคุมโค้ดที่สร้างโดยปลั๊กอินเมนูได้
ความท้าทายของ CSS Selector
น่าเสียดายที่การใช้สไตล์โดยตรงกับองค์ประกอบหลักตามคุณลักษณะหรือคลาสขององค์ประกอบลูกนั้นไม่สามารถทำได้ด้วย CSS เพียงอย่างเดียวจนกว่าจะมีการแนะนำ :has()
นี่คือสิ่งที่คุณควรรู้:
ข้อจำกัดของ CSS ปัจจุบัน
- CSS Selectors: โดยทั่วไปแล้ว CSS selectors จะไม่อนุญาตให้คุณเลือกองค์ประกอบหลักตามคลาสของลูก นั่นหมายความว่าถ้าคุณต้องการจะจัดรูปแบบองค์ประกอบหลักตามลักษณะของลูก CSS จะไม่สามารถทำได้โดยตรง
วิธีแก้ปัญหาด้วย CSS: Pseudo-class :has()
ด้วยการมาถึงของ pseudo-class :has()
ใน CSS ตอนนี้มีวิธีการที่จะจัดรูปแบบองค์ประกอบหลักตามคลาสของลูก แม้ว่ามันอาจจะยังไม่ได้รับการสนับสนุนในทุกเบราว์เซอร์ รูปแบบการเขียนคือ:
li:has(a.active) {
/* สไตล์ของคุณที่นี่ */
}
Selector นี้จะเลือก <li>
ใดๆ ที่มี <a>
กับคลาส active
ทำให้คุณสามารถใช้สไตล์ที่ต้องการกับองค์ประกอบ <li>
ได้โดยตรง อย่างไรก็ตาม ต้องคอยตรวจสอบความเข้ากันได้ของเบราว์เซอร์ เพราะไม่ใช่ทุกเบราว์เซอร์ที่สนับสนุน :has()
วิธีแก้ปัญหาทางเลือก: JavaScript
หากความเข้ากันได้ของเบราว์เซอร์สำหรับ selector :has()
เป็นปัญหาหรือคุณต้องการฟังก์ชันพิเศษเพิ่มเติม คุณยังสามารถใช้ JavaScript ได้ นี่คือวิธีการที่คุณสามารถทำให้ผลลัพธ์เหมือนกันด้วย JavaScript (หรือ jQuery):
การใช้ JavaScript ธรรมดา
คุณสามารถใช้โค้ด JavaScript ต่อไปนี้เพื่อหาพ่อแม่ของลิงก์ที่ใช้งานอยู่และใช้สไตล์ตามต้องการ:
document.getElementsByClassName("active")[0].parentNode.style.backgroundColor = "yellow"; // ตัวอย่างสไตล์
การใช้ jQuery
หากคุณชอบใช้ jQuery คุณสามารถทำสิ่งเดียวกันได้ด้วยไวยากรณ์ที่ง่ายขึ้น:
$('.active').parent().css('background-color', 'yellow'); // ตัวอย่างสไตล์
วิธีนี้ช่วยให้คุณสามารถใช้สไตล์ตามคลาสที่มีอยู่ได้อย่างมีพลศาสตร์โดยไม่ต้องเปลี่ยนแปลงโครงสร้าง HTML
สรุป
แม้ว่า CSS จะมีข้อจำกัดเมื่อพูดถึงการเลือกองค์ประกอบหลักตามคลาสของลูก แต่เทคนิคที่ใช้ pseudo-class :has()
เสนอโซลูชันสมัยใหม่ หากเบราว์เซอร์มีการสนับสนุนเพียงพอ ในทางเลือก JavaScript ยังคงเป็นวิธีที่ทรงพลังสำหรับการจัดรูปแบบองค์ประกอบหลักอย่างพลศาสตร์ตามเด็กที่ใช้งานอยู่ โดยการใช้เทคนิคเหล่านี้ คุณสามารถปรับปรุงการออกแบบเว็บไซต์ของคุณในขณะที่ยังคงรหัสที่มีประสิทธิภาพและมีระเบียบ
การใช้กลยุทธ์เหล่านี้ จะทำให้การดำเนินการเมนูของคุณสะอาดและมีสไตล์โดยไม่จำเป็นต้องเปลี่ยนแปลงโครงสร้าง HTML เดิมหรือคลาสที่สร้างโดยปลั๊กอิน ขอให้สนุกกับการเขียนโค้ด!