อย่าคิดว่าคลาส css เป็นคลาสที่มุ่งเน้นวัตถุให้คิดว่ามันเป็นเพียงเครื่องมือหนึ่งในตัวเลือกอื่น ๆ เพื่อระบุว่าคลาสของแอ็ตทริบิวต์ใดที่มีองค์ประกอบสไตล์ html คิดว่าทุกอย่างระหว่างการจัดฟันเป็นที่ระดับแอตทริบิวต์และตัวเลือกที่อยู่ด้านซ้ายมือบอกองค์ประกอบที่พวกเขาเลือกที่จะสืบทอดแอตทริบิวต์จากระดับแอตทริบิวต์ ตัวอย่าง:
.foo, .bar { font-weight : bold; font-size : 2em; /* attribute class A */}
.foo { color : green; /* attribute class B */}
เมื่อองค์ประกอบที่จะได้รับแอตทริบิวต์class="foo"
จะเป็นประโยชน์ที่จะคิดว่ามันไม่เป็นที่สืบทอดแอตทริบิวต์จากระดับ.foo
แต่จากแอตทริบิวต์ชั้นและแอตทริบิวต์คลาส B นั่นคือกราฟการสืบทอดมีความลึกหนึ่งระดับโดยมีองค์ประกอบที่มาจากคลาสแอตทริบิวต์และตัวเลือกที่ระบุว่าขอบไปที่ใดและพิจารณาความสำคัญเมื่อมีแอตทริบิวต์ที่แข่งขันกัน
ความหมายเชิงปฏิบัติสำหรับการเขียนโปรแกรมคือสิ่งนี้ สมมติว่าคุณมีแผ่นลักษณะดังกล่าวข้างต้นและต้องการเพิ่มคลาสใหม่.baz
ที่มันควรจะมีเหมือนกันเป็นfont-size
.foo
โซลูชันไร้เดียงสาจะเป็นเช่นนี้:
.foo, .bar { font-weight : bold; font-size : 2em; /* attribute class A */}
.foo { color : green; /* attribute class B */}
.baz { font-size : 2em; /* attribute class C, hidden dependency! */}
เมื่อใดก็ตามที่ฉันต้องพิมพ์บางอย่างสองครั้งฉันก็โกรธมาก! ไม่เพียง แต่ฉันต้องเขียนมันสองครั้ง แต่ตอนนี้ฉันไม่มีวิธีที่จะแสดงให้เห็นว่าควรจะมีวิธีการเขียนโปรแกรม.foo
และ.baz
ควรเหมือนกันfont-size
และฉันได้สร้างการพึ่งพาที่ซ่อนอยู่! กระบวนทัศน์ด้านบนของฉันจะแนะนำว่าฉันควรสรุปfont-size
คุณลักษณะจากคลาสแอตทริบิวต์ A :
.foo, .bar, .baz { font-size : 2em; /* attribute base class for A */}
.foo, .bar { font-weight : bold; /* attribute class A */}
.foo { color : green; /* attribute class B */}
ร้องเรียนหลักที่นี่คือว่าตอนนี้ผมต้องพิมพ์เลือกจากทุกแอตทริบิวต์ชั้นอีกครั้งเพื่อระบุว่าองค์ประกอบที่พวกเขาควรเลือกควรแอตทริบิวต์ยังสืบทอดมาจากฐานแอตทริบิวต์ชั้น แต่ถึงกระนั้นทางเลือกอื่นก็คือต้องจำไว้ว่าให้แก้ไขทุก ๆคลาสของแอททริบิวท์ที่มีการพึ่งพาที่ซ่อนอยู่ในแต่ละครั้งที่มีการเปลี่ยนแปลงบางอย่างหรือใช้เครื่องมือของบุคคลที่สาม ตัวเลือกแรกทำให้พระเจ้าหัวเราะอย่างที่สองทำให้ฉันอยากฆ่าตัวตาย