การจัดรูปแบบองค์ประกอบหลักตามคลาสของลูกที่ใช้งานอยู่ใน 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 เดิมหรือคลาสที่สร้างโดยปลั๊กอิน ขอให้สนุกกับการเขียนโค้ด!