ฉันไม่สามารถคาดการณ์!important
การขัดขวางได้ อย่างไรก็ตามหาก CSS ของคุณเต็มไปด้วย!important
สิ่งนั้นบ่งชี้ว่าคุณมีคุณสมบัติในการเลือกมากเกินไปและมีความเฉพาะเจาะจงและคุณไม่มีผู้ปกครองหรือผู้คัดเลือกเพื่อเพิ่มความเฉพาะเจาะจง ดังนั้น CSS ของคุณจะกลายเป็นป่อง (ซึ่งจะขัดขวางประสิทธิภาพ) และยากที่จะรักษา
หากคุณต้องการที่จะเขียน CSS ที่มีประสิทธิภาพแล้วคุณอยากจะเป็นเพียงเป็นเฉพาะที่คุณจะต้องและเขียนCSS แบบแยกส่วน CSSขอแนะนำให้หลีกเลี่ยงการใช้ ID (ที่มีแฮช) ตัวเลือกการผูกมัดหรือตัวเลือกที่มีคุณสมบัติ
รหัสที่ขึ้นต้นด้วย#
ใน CSS มีความเฉพาะเจาะจงมากจนถึงจุดที่255 คลาสจะไม่แทนที่รหัส (ซอโดย: @Faust ) ID มีปัญหาการกำหนดเส้นทางที่ลึกกว่าด้วยเช่นกันพวกเขาจะต้องไม่ซ้ำกันซึ่งหมายความว่าคุณไม่สามารถใช้พวกเขาซ้ำสำหรับสไตล์ที่ซ้ำกันดังนั้นคุณจึงต้องเขียน css เชิงเส้นด้วยสไตล์การทำซ้ำ ผลกระทบของการทำเช่นนี้จะแตกต่างกันไปตามโครงการขึ้นอยู่กับขนาด แต่การบำรุงรักษาจะประสบปัญหาอย่างมากและในกรณีขอบประสิทธิภาพการทำงานเช่นกัน
คุณจะเพิ่มความเจาะจงได้อย่างไรโดยไม่ต้อง!important
ผูกมัดมีคุณสมบัติหรือ ID (เช่น#
)
HTML
<div class="eg1-foo">
<p class="eg1-bar">foobar</p>
</div>
<div id="eg2-foo">
<p id="eg2-bar">foobar</p>
</div>
<div class="eg3-foo">
<p class="eg3-foo">foobar</p>
</div>
CSS
.eg1-foo {
color: blue;
}
.eg1-bar {
color: red;
}
[id='eg2-foo'] {
color: blue;
}
[id='eg2-bar'] {
color: red;
}
.eg3-foo {
color: blue;
}
.eg3-foo.eg3-foo {
color: red;
}
JSFiddle
โอเคแล้วมันทำงานอย่างไร
ตัวอย่างแรกและตัวที่สองทำงานเหมือนกันอย่างแรกคือคลาสจริงๆและตัวที่สองคือตัวเลือกคุณลักษณะ ตัวเลือกคลาสและแอตทริบิวต์มีความจำเพาะที่เหมือนกัน .eg1/2-bar
ไม่สืบทอดสีของมันจาก.eg1/2-foo
เนื่องจากมีกฎของตัวเอง
ตัวอย่างที่สามดูเหมือนว่าตัวเลือกที่มีคุณสมบัติหรือผูกมัด แต่มันไม่ใช่ การผูกมัดคือเมื่อคุณใส่ตัวเลือกคำนำหน้ากับผู้ปกครองบรรพบุรุษและอื่น ๆ นี่เป็นการเพิ่มความจำเพาะ การมีคุณสมบัติใกล้เคียงกัน แต่คุณกำหนดองค์ประกอบของตัวเลือกที่จะใช้ ที่มีคุณสมบัติ: ul.class
และการผูกมัด:ul .class
ฉันไม่แน่ใจว่าคุณจะเรียกเทคนิคนี้ว่าอะไร แต่พฤติกรรมดังกล่าวตั้งใจและบันทึกไว้โดย W3C
อนุญาตให้มีการเกิดขึ้นซ้ำ ๆ ของตัวเลือกอย่างง่ายเดียวกันและเพิ่มความจำเพาะ
จะเกิดอะไรขึ้นเมื่อความจำเพาะระหว่างกฎทั้งสองนั้นเหมือนกัน?
ดังที่@BoltClock ชี้ให้เห็นหากมีการประกาศที่สำคัญหลายรายการข้อมูลจำเพาะจะบอกว่าสิ่งที่เฉพาะเจาะจงที่สุดควรมีความสำคัญกว่า
ในตัวอย่างด้านล่างทั้งสอง.foo
และ.bar
มีความเฉพาะเจาะจงที่เหมือนกันดังนั้นพฤติกรรมที่ตกหล่นกับลักษณะซ้อนของ CSS โดยกฎล่าสุดที่ประกาศใน CSS อ้างว่ามีความสำคัญ.foo
กว่า
HTML
<div>
<p class="foo bar">foobar</p>
</div>
CSS
.bar {
color: blue !important;
}
.foo {
color: red !important;
}
JSFiddle