CSS Specificity
April 29, 2022จงตอบคำถามต่อไปนี้
<div id="test">
<span>what is this color?</span>
</div>
div#test span {
color: green;
}
div span {
color: blue;
}
span {
color: red;
}
span
จะกลายเป็นสีอะไร ?
เราเคยเจอ quize เล่น ๆ กับเจอ code จริงที่ใช้ class ซ้อน ๆ กันถึงในใจจะรู้สึกว่าเขียนให้ยากทำไมนะ ฮ่าๆ
ก่อนจะตอบคำถามเราเข้าใจเรื่อง selector ไปแล้วและก่อนจะตอบคำนวนเราต้องมากำหนดค่าให้กับ selector ก่อน เริ่มจาก
- inline style
style=""
กำหนดค่าให้เป็น 1000 id
กำหนดค่าให้เป็น 100- class, attribute, pseudo-class กำหนดค่าเป็น 10
- element, psuedo-element กำหนดค่าเป็น 1
พอกำหนดค่าให้เสร็จแล้วก็แทนค่าเข้าไปเช่นจากโจทย์ div#test span
จะได้เป็น (102)
div span
(2)
span
(1)
เท่านี้ก็ตอบคำถามในตอนแรกแล้วว่า span
จะกลายเป็นสีอะไร
มาถึงตอนนี้แล้วก็สงสัยว่า แล้ว !important
ล่ะอยู่ตรงไหนของการแทนค่า
!important
เป็นตัวที่ important มากเพราะมันอยู่เหนือทุกอย่างเราสามารถ override มันได้เลย แต่ควรจะใช้ด้วยความระมัดระวังเพราะมันอาจดีกันมั่วเละเทะก็ได้
แล้ว *
หรือ universal selector พวก combinators อย่าง +
, >
, ~
, :not
พวกนี้ไม่ได้นับรวมอยู่ในตารางเลยไม่ต้องเอามาคำนวณ
แล้วถ้าเป็นการเลือก id ใน attribute [id='text']
ค่ามันยังเป็น 100 อยู่รึเปล่า?
ถ้าเลือก id แบบนี้ค่าของมันจะอยู่ที่ 10 เพราะ มันเป็นการเลือก attribute ที่เลือก id เฉย ๆ ไม่ใช่การเลือก id ตรง ๆ แต่ก็เลือกได้เหมือนกัน
จบ