ความหมายของ "เรียงซ้อน" ใน CSS คืออะไร?


92

ความหมายที่แท้จริงของคำว่า "Cascading" ใน CSS คืออะไร ฉันได้รับมุมมองที่แตกต่างกันดังนั้นฉันจึงถามที่นี่ ตัวอย่างจะช่วยได้


15
หากคุณเป็นเหมือนฉัน "เรียงซ้อน" หมายถึงระยะเวลาที่ลดหลั่นกันที่คุณจะใช้ในการปรับความกว้าง div ของคุณทีละสองพิกเซลเพื่อให้สิ่งต่างๆดู "ถูกต้อง" แทนที่จะมุ่งเน้นไปที่ตรรกะพื้นฐานทางธุรกิจของคุณ (ฉันอาจจะได้รับคำตอบเชิงลบเล็กน้อยสำหรับคำตอบนั้น แต่มันก็จริงมาก)
JohnMetta

คำตอบ:


117

"เรียงซ้อน" ในบริบทนี้หมายความว่าเนื่องจากการประกาศสไตล์ชีตมากกว่าหนึ่งรายการสามารถนำไปใช้กับส่วนหนึ่งของ HTML ได้จึงต้องมีวิธีที่ทราบกันดีในการพิจารณาว่ากฎสไตล์ชีตใดใช้กับส่วนใดของ HTML

กฎที่ใช้จะถูกเลือกโดยเรียงซ้อนจากการประกาศทั่วไปไปจนถึงกฎเฉพาะที่จำเป็น มีการเลือกคำประกาศที่เฉพาะเจาะจงที่สุด


คลาส / ID และคำสั่งเข้าเล่นเมื่อไหร่?
Daniel Springer

2
@AllDani IDs มีความเฉพาะเจาะจงมากกว่าคลาส ดังนั้นฉันเดาว่าคุณสามารถพูดได้ว่ากฎคลาสลดหลั่นกับกฎรหัสที่เฉพาะเจาะจงมากขึ้น หากกฎ 2 ข้อมีลำดับความสำคัญเท่ากัน (เช่น 2 คลาสที่มีกฎขัดแย้งกันในองค์ประกอบเดียว) ข้อสุดท้ายที่ระบุในไฟล์ css ของคุณจะมีความสำคัญ
metatron

ดังนั้นหาก ID ระบุว่า "A" และคลาสระบุว่า "B" แม้ว่าคลาสจะอยู่ในชีตในภายหลัง แต่ ID (A) จะชนะ? IE Order เข้ามาเล่นก็ต่อเมื่อสองสไตล์มีความเฉพาะเจาะจงเหมือนกัน
Daniel Springer

2
@DaniSpringer ใช่ถูกต้อง ตัวเลือกรหัสเป็นหนึ่งในตัวเลือกที่เฉพาะเจาะจงที่สุดใน CSS สำหรับการสาธิตมันจะ "ชนะ" เมื่อเทียบกับตัวเลือกเช่น "div.blubb: hover" ด้วยซ้ำ เฉพาะรูปแบบอินไลน์และกฎสำคัญเท่านั้นที่มีความเฉพาะเจาะจงมากขึ้น
marvhock

54

เมื่อฉันสอน CSS ฉันมักจะบอกนักเรียนเสมอว่า "สไตล์ชีตแบบเรียงซ้อน" หมายถึง " สไตล์ชีตต่อสู้ "

กฎข้อหนึ่งบอกแท็ก H3 ของคุณเป็นสีแดงอีกกฎหนึ่งบอกให้เป็นสีเขียว - กฎขัดแย้งกันเองใครจะชนะ!? สไตล์ชีตพิฆาต!

โอเคอาจจะเป็นการพูดเกินจริงเล็กน้อย แต่ก็สามารถตอบสนองได้ดีกว่าสำหรับคนที่ไม่ใช้โค้ดและไม่ได้เขียนโปรแกรมที่เพิ่งเริ่มต้นมากกว่าแนวคิดเรื่องน้ำตกหรือการสืบทอด

แน่นอนว่าฉันต้องบอกพวกเขาว่ามันไม่ใช่ปัญหาสำหรับสไตล์ชีตที่จะต่อสู้กันเองนั่นคือวิธีการออกแบบภาษา


5
ไม่แน่ใจว่าเหตุใดจึงมีการโหวตลดลง ดูเหมือนเป็นคำอธิบายง่ายๆสำหรับผู้เรียนใหม่
Purus

18
อาจเป็นเพราะมันไม่ได้อธิบายว่าอะไรจะชนะและทำไม
Andreas

18
ดูเหมือนคุณจะสับสนเกี่ยวกับคำถาม ไม่ใช่ "ความจำเพาะ / การสืบทอด" คืออะไรหรือเกี่ยวกับกฎใดที่จะนำไปใช้เป็นต้น แต่เป็น "ความหมายแบบเรียงซ้อนคืออะไร"
AmbroseChapel

5
ฉันรู้ว่านี่เป็นโพสต์เก่า แต่ก็ยัง: ฉันคิดว่าตัวอย่างของสไตล์ชีตและ / หรือกฎ CSS "ต่อสู้" นั้นไม่ดี ให้คำแนะนำแก่ผู้เรียนใหม่มากขึ้น (จากประสบการณ์การสอนของฉันเอง) คือการอธิบายลำดับชั้นของกฎที่อยู่เหนือกฎก่อนหน้านี้ สมมติว่าพนักงานวาดแท็ก H3 เป็นสีแดง (กฎข้อที่ 1) จากนั้นส่งมอบให้กับผู้จัดการ QA ของเขาซึ่งเป็นผู้ดูแลเขาและตัดสินใจที่จะทาสีเป็นสีเขียว (กฎข้อที่ 2) ไม่มีการจับคู่ความตายมีเพียงลำดับชั้นขององค์กร กฎ CSS ไม่ได้ "ต่อสู้มัน" มันทำงาน (เรียงซ้อน) ผ่านระบบลำดับชั้นที่กำหนดไว้อย่างเคร่งครัดของการตัดสินใจที่ตามมาซึ่งจะลบล้างกฎก่อนหน้านี้
Frank van Wensveen

นี่เป็นคำตอบที่ดีจริงๆโปรดอธิบายเพิ่มเติม! ใครจะชนะยกตัวอย่างง่ายๆ! @AmbroseChapel
eirenaios

23

Håkon Wium Lie (ผู้ร่วมสร้าง CSS) ให้คำจำกัดความ "cascade" ในวิทยานิพนธ์ PHD เรื่อง CSS ว่า "กระบวนการรวมสไตล์ชีตหลาย ๆ แบบและแก้ไขความขัดแย้งระหว่างกัน" https://www.wiumlie.no/2006/phd/


1
ดีที่สุดโดยไกล
Wael Assaf

ฉันเดาว่านั่นคือคุณสรุปทั้งหมด
Safwat Fathi


4

คุณต้องคิดจากด้านนอกในถ้าคุณมีกฎที่อยู่บนแท็กร่างกายระบบจะ "เรียงซ้อน" ผ่านแท็กย่อยทุกแท็ก หากคุณวางกฎบนแท็กใด ๆ ภายในเนื้อหาก็จะใช้กฎนั้นไปเรื่อย ๆ ดังนั้นกฎจึงเรียงซ้อนเนื้อหาทั้งหมดเว้นแต่จะถูกขัดจังหวะโดยกฎจากแท็กที่ฝังอยู่


สิ่งนี้ไม่ได้หมายความถึงสิ่งที่มีความสำคัญ คลุมเครือ?
Daniel Springer

2

คุณสามารถจัดการกับการประมวลผล CSS ได้เนื่องจากน้ำตกที่มีน้ำตกหลายชั้น ต่อไปนี้คือการลดหลั่นจากบนลงล่างตามลำดับ: (ค่าต่ำสุดสามารถแทนที่คุณสมบัติเดียวกันในส่วนที่สูงกว่าได้)

  1. การประกาศตัวแทนผู้ใช้
  2. การประกาศปกติของผู้ใช้
  3. ผู้เขียนประกาศปกติ
  4. ผู้เขียนคำประกาศที่สำคัญ
  5. การประกาศที่สำคัญของผู้ใช้

ดูเพิ่มเติมใน สเป็ค

การเรียงซ้อนคือการเลือกค่าที่เหมาะสมจากต้นกำเนิดหลาย ๆ แต่มันเป็นเรื่องที่แตกต่างจากการเรียงลำดับ เฉพาะบางอย่างที่ไม่จำเป็นต้องเรียงลำดับ แต่ใน CSS ต้นกำเนิดเหล่านี้มีลำดับความสำคัญคงที่ ดังนั้นรหัสเทียมอาจมีลักษณะดังนี้:

  1. เริ่มต้นอาร์เรย์ค่า
  2. ใช้ค่าจากจุดเริ่มต้นที่ 1
  3. ใช้ค่าจากจุดเริ่มต้นที่ 2 แทนที่หากมีค่าอยู่
  4. ...
  5. ใช้ค่าจากต้นกำเนิด N แทนที่ถ้ามีค่าอยู่

จากรหัสหลอกคุณจะเห็นว่ามันดูเหมือนน้ำตกหลายชั้น


2

คำชี้แจงอย่างหนึ่งที่อาจช่วยได้ หากคุณมีสองสไตล์ชีตและมีกฎที่มีความเฉพาะเจาะจงเหมือนกันในแต่ละสไตล์ก็จะรวมการชนะครั้งสุดท้ายด้วย IE สุดท้ายในน้ำตกมีอิทธิพลมากที่สุด

(นี่เป็นเพียงรูปแบบหนึ่งของการมีกฎสองข้อในแผ่นงานเดียวกัน - ข้อสุดท้ายจะชนะหากสิ่งอื่น ๆ ทั้งหมดเท่ากัน)

เช่นให้

body {
    background:blue;
}

body {
    background:green;
}

จากนั้นพื้นหลังจะเป็นสีเขียว


1

คำตอบนี้สำหรับผู้เริ่มต้นอย่างแท้จริง หากคุณต้องการภาพรวมของคำตอบนี้โปรดอ่านคำตอบที่สองของฉัน

Cascading เป็นกระบวนการรวมสไตล์ชีตที่แตกต่างกันและแก้ไขความขัดแย้งระหว่างกฎ CSS และการประกาศที่แตกต่างกันเมื่อมีกฎมากกว่าหนึ่งกฎใช้กับองค์ประกอบบางอย่างที่แตกต่างกันและการประกาศเมื่อมากกว่าหนึ่งกฎนำไปใช้เป็นองค์ประกอบบางอย่าง เนื่องจากอย่างที่คุณทราบกันดีอยู่แล้วว่าการประกาศคุณสมบัติของสไตล์บางอย่างเช่นขนาดฟอนต์สามารถปรากฏในหลายสไตล์ชีตและหลาย ๆ ครั้งในสไตล์ชีทเดียว

เพื่อให้เข้าใจการเรียงซ้อนคุณต้องเริ่มต้นด้วยเฟสการแยกวิเคราะห์ CSS เนื่องจากในขั้นตอนการแยกวิเคราะห์ขั้นตอนแรกคือการแก้ไขการประกาศ CSS ที่ขัดแย้งกันและขั้นตอนที่สองคือการประมวลผลค่า CSS สุดท้าย

ตอนนี้ CSS ยังสามารถมาจากแหล่งต่างๆ สิ่งที่พบบ่อยที่สุดคือ CSS ที่เรานักพัฒนาเขียนขึ้น การประกาศเหล่านี้ที่เราใส่ไว้ในสไตล์ชีตเรียกว่าการประกาศผู้แต่ง แหล่งอื่นอาจเป็นการประกาศผู้ใช้ซึ่ง CSS มาจากผู้ใช้ ตัวอย่างเช่นเมื่อผู้ใช้เปลี่ยนขนาดฟอนต์เริ่มต้นในเบราว์เซอร์นั่นคือ CSS ของผู้ใช้และสุดท้าย แต่ไม่ท้ายสุดจะมีการประกาศเบราว์เซอร์เริ่มต้น

ตัวอย่างเช่นหากเราใส่แท็กจุดยึดใน HTML ของเราสำหรับลิงก์แล้วไม่จัดรูปแบบเลยโดยปกติจะแสดงผลด้วยข้อความสีน้ำเงินและขีดเส้นใต้ด้านขวา ซึ่งเรียกว่า User agent CSS เนื่องจากเบราว์เซอร์กำหนด ดังนั้น cascade จึงรวมการประกาศ CSS ที่มาจากแหล่งที่มาที่แตกต่างกันเหล่านี้ทั้งหมด แต่ cascade จะแก้ไขความขัดแย้งได้อย่างไรเมื่อใช้กฎมากกว่าหนึ่งกฎ

สิ่งที่ต้องทำคือการดูความสำคัญที่ความจำเพาะของตัวเลือกและลำดับแหล่งที่มาของการประกาศที่ขัดแย้งกันเพื่อกำหนดว่าอันไหนมีความสำคัญเหนือกว่าและนี่คือวิธีการทำงาน อันดับแรกจากการเรียงซ้อนเริ่มต้นด้วยการให้การประกาศที่ขัดแย้งกันของความสำคัญที่แตกต่างกันโดยพิจารณาจากตำแหน่งที่ประกาศบนแหล่งที่มา การประกาศที่สำคัญที่สุดคือการประกาศของผู้ใช้ที่มีคีย์เวิร์ดสำคัญ

การประกาศที่สำคัญที่สุดอันดับสองคือการประกาศของผู้แต่งที่มีความสำคัญ ประการที่สามการประกาศผู้เขียนตามปกติจากนั้นการประกาศผู้ใช้ตามปกติและในที่สุดสิ่งที่สำคัญน้อยที่สุดคือการประกาศเบราว์เซอร์เริ่มต้นซึ่งจริง ๆ แล้วมันสมเหตุสมผลมากที่เราสามารถเขียนทับคำประกาศเหล่านี้ที่มาจากเบราว์เซอร์ได้

ป้อนคำอธิบายภาพที่นี่

หลายครั้งเราจะมีกฎที่ขัดแย้งกันมากมายในสไตล์ชีตผู้เขียนของเราโดยไม่มีคำหลักที่สำคัญ นั่นเป็นสถานการณ์ที่พบบ่อยที่สุดและในกรณีนี้การประกาศทั้งหมดมีความสำคัญเหมือนกัน ทีนี้จะเกิดอะไรขึ้นในกรณีนี้? สิ่งที่น้ำตกทำถ้าเป็นกรณีนี้คือการคำนวณและเปรียบเทียบความจำเพาะของตัวเลือกการประกาศและนี่คือวิธีการทำงาน

ป้อนคำอธิบายภาพที่นี่

รูปแบบอินไลน์มีความเฉพาะเจาะจงสูงสุดตามด้วย ID จากนั้นคลาสหลอกคลาสและตัวเลือกแอตทริบิวต์และสุดท้ายคือองค์ประกอบที่เจาะจงน้อยที่สุดและตัวเลือกองค์ประกอบหลอก ดังนั้นเมื่อเรามีการประกาศที่ขัดแย้งกันซึ่งมีความสำคัญเช่นเดียวกับที่เราเห็นในสไลด์สุดท้ายเราจะคำนวณความจำเพาะของตัวเลือกตามลำดับความสำคัญที่ฉันเพิ่งแสดงให้คุณเห็น แต่มาดูกันว่าเราคำนวณความเฉพาะเจาะจงอย่างไรด้วยตัวอย่างเล็ก ๆ นั่นคือสิ่งที่ดีที่สุดเสมอใช่

ป้อนคำอธิบายภาพที่นี่

จากตัวอย่างข้างต้นการประกาศทั้งหมดนี้มีความสำคัญเหมือนกันเนื่องจากเป็นการประกาศของผู้แต่งทั้งหมด ลองคำนวณความเฉพาะเจาะจงของตัวเลือกเพื่อดูว่าสีพื้นหลังจะเป็นสีฟ้าสีเขียวสีม่วงหรือสีเหลืองและนี่คือวิธีที่เราทำ ความเฉพาะเจาะจงไม่ได้เป็นเพียงตัวเลขเดียว แต่เป็นตัวเลขหนึ่งสำหรับแต่ละประเภทจากสี่ประเภทที่ฉันแสดงให้คุณเห็นก่อน รูปแบบอินไลน์ ID คลาสองค์ประกอบหลอกและแอตทริบิวต์และสุดท้ายองค์ประกอบและสำหรับแต่ละสิ่งเหล่านี้เรานับจำนวนครั้งที่เกิดขึ้นในตัวเลือก

ดังนั้นที่นี่ในตัวเลือกหนึ่งเราไม่มีสไตล์อินไลน์แน่นอนเพราะต้องเขียนสไตล์อินไลน์ใน HTML ซึ่งไม่ใช่กรณีนี้ดังนั้นจึงเป็นศูนย์ เรายังไม่มีรหัสที่นี่ดังนั้นจึงเป็นศูนย์อีกครั้ง แต่เรามีคลาสเดียวคือคลาสปุ่ม ดังนั้นสำหรับหมวดหมู่คลาสเรามีหนึ่งและในที่สุดก็ไม่มีตัวเลือกองค์ประกอบที่นี่จึงเป็นศูนย์สำหรับหมวดนั้นเช่นกัน ความจำเพาะของตัวเลือกคือศูนย์ศูนย์หนึ่งศูนย์

ตอนนี้เรามาเปรียบเทียบกับคนอื่น ๆ รูปแบบถัดไปไม่ใช่สไตล์อินไลน์ดังนั้นจึงเป็นศูนย์สำหรับรูปแบบแรก ตอนนี้เรามีตัวเลือก ID สำหรับ nav ID แล้วใช่เลยซึ่งเป็นตัวเลือกสำหรับ ID นอกจากนี้เรายังมีสองคลาสที่ดึงไปทางขวาและปุ่มดังนั้นมันจึงเป็นสองคลาสสำหรับหมวดหมู่คลาสและในที่สุดก็มีตัวเลือกองค์ประกอบสองตัวที่นี่ องค์ประกอบ nav และองค์ประกอบ div ซึ่งหมายความว่าเป็นสององค์ประกอบสำหรับหมวดหมู่องค์ประกอบ ในที่สุดความจำเพาะของตัวเลือกก็คือศูนย์หนึ่งสองสองซึ่งจริงๆแล้วเป็นตัวเลือกที่เฉพาะเจาะจงมาก

ตัวเลือกหมายเลขสามนั้นง่ายมาก มันเป็นเพียงตัวเลือกองค์ประกอบดังนั้นความจำเพาะจึงเป็นศูนย์ศูนย์ศูนย์หนึ่ง

ตอนนี้คนสุดท้ายเลือกหมายเลขสี่ ก่อนอื่นเรามี nav ID ดังนั้นจึงเป็นรหัสสำหรับ ID ต่อไปเรามีคลาสคลาสปุ่มและคลาสหลอกซึ่งโฮเวอร์ซึ่งทำให้เป็นสองคลาสสำหรับคลาสทั้งหมด เนื่องจากยังมีตัวเลือกองค์ประกอบหนึ่งความจำเพาะสุดท้ายคือศูนย์หนึ่งสองหนึ่ง

ทีนี้มารู้กันว่าเราจะใช้ตัวเลขเหล่านี้อย่างไรเพื่อค้นหาว่าตัวเลือกใดใช้ เราเริ่มดูตัวเลขจากซ้ายไปขวาโดยเริ่มจากหมวดหมู่ที่เฉพาะเจาะจงที่สุดคือสไตล์อินไลน์ หากมีตัวเลือกหนึ่งสำหรับสไตล์อินไลน์จะชนะตัวเลือกอื่น ๆ ทั้งหมดเนื่องจากเป็นหมวดหมู่ที่เฉพาะเจาะจงที่สุด นี่ไม่ใช่กรณีนี้ดังนั้นเรามาดู ID กันดีกว่า เราเห็นว่าตัวเลือกสองและสี่มีหนึ่งที่นี่ในขณะที่ตัวเลือกอื่นมีศูนย์ดังนั้นตัวเลือกที่มีศูนย์จึงไม่อยู่ในเกมเนื่องจากมีความเฉพาะเจาะจงน้อยกว่าจากนั้นเลือกสองและสี่ตัวที่มี ID

ตอนนี้เนื่องจากตัวเลือกทั้งสองมีหนึ่งในหมวดหมู่ ID เราจึงต้องดำเนินการต่อและตรวจสอบคลาส พวกเขาทั้งสองมีสองในหมวดหมู่นี้ยังคงเสมอกันและสุดท้ายในหมวดองค์ประกอบตัวเลือกสองมีสองในขณะที่ตัวเลือกสี่มีเพียงหนึ่งเดียวและเราจึงมีผู้ชนะที่นี่ ตัวเลือกหมายเลขสองเป็นตัวเลือกที่เฉพาะเจาะจงที่สุดของทั้งหมดและจะทำให้ปุ่มของเรามีพื้นหลังสีเขียว 34 ค่าของการประกาศที่ชนะเรียกว่าค่าเรียงซ้อนเนื่องจากเป็นผลลัพธ์ของการเรียงซ้อน

ดังนั้นเราจึงเริ่มต้นด้วยค่าที่ประกาศไว้มากมายในกรณีนี้คือสีน้ำเงินสีเขียวสีม่วงและสีเหลืองหนึ่งในนั้นชนะและกลายเป็นค่าเรียงซ้อนซึ่งอยู่ในตัวอย่างของเราสีเขียว

ตอนนี้ลองนึกภาพภาคสี่มีสององค์ประกอบจากนั้นตัวเลือกทั้งสองและสี่จะมีความจำเพาะเหมือนกันใช่ไหม จะเกิดอะไรขึ้นในกรณีนี้และฉันสัญญาว่าตอนนี้เกือบจะจบแล้ว ถ้า ณ จุดนี้ยังคงมีความสัมพันธ์กันการประกาศ CSS สุดท้ายที่เขียนในโค้ดคือสิ่งที่จะนำไปใช้ ดังนั้นอีกครั้งหากทุกอย่างเท่ากันหากตัวเลือกการประกาศทั้งหมดมีความจำเพาะเหมือนกันนั่นเป็นเพียงการประกาศสุดท้ายที่จะใช้เพื่อจัดรูปแบบองค์ประกอบที่เลือก


0

เป็นกระบวนการที่ใช้เพื่อแก้ไขข้อขัดแย้งในข้อกำหนดสไตล์ชีต

นั่นคือขั้นตอนการแก้ไขความขัดแย้งโดยพื้นฐานที่ทำตามลำดับความสำคัญที่กล่าวถึงใน CSS


0

CSS ย่อมาจาก Cascading Style Sheet ตามลักษณะที่เป็นธรรมชาติของพวกเขายิ่งไปกว่านั้นสไตล์ชีตแบบเรียงซ้อนจะแทนที่สไตล์ที่เทียบเท่ากันให้สูงขึ้น (เว้นแต่สไตล์ที่สูงขึ้นจะเฉพาะเจาะจงมากขึ้น) ดังนั้นเราจึงสามารถกำหนดรูปแบบพื้นฐานที่จุดเริ่มต้นของสไตล์ชีตซึ่งใช้ได้กับทุกเวอร์ชันของการออกแบบของเราจากนั้นจึงแทนที่ส่วนที่เกี่ยวข้องด้วยแบบสอบถามสื่อเพิ่มเติมในเอกสาร


0

Cascading หมายถึงการเทลงในขั้นตอนหรือเพิ่มในขั้นตอน สไตล์ชีตมีรหัสสำหรับจัดแต่งทรงผมองค์ประกอบ html และลักษณะการเขียนโค้ดในสไตล์ชีตเป็นแบบเรียงซ้อน หรือเพียงแค่กลับไปที่โค้ดย้อนกลับในเลเยอร์สำหรับแต่ละองค์ประกอบ html ของเพจ html ในสไตล์ชีตทำให้สไตล์ชีตเรียงซ้อน


0

Cascading เป็นอัลกอริทึมที่กำหนดน้ำหนักให้กับกฎสไตล์แต่ละแบบ เมื่อใช้กฎหลายข้อกฎที่มีน้ำหนักมากที่สุดจะมีความสำคัญ


0

เมื่อนำสไตล์อย่างน้อยหนึ่งสไตล์ไปใช้กับองค์ประกอบเดียวกัน CSS ดำเนินการชุดของกฎที่เรียกว่าการเรียงซ้อนซึ่งจะประเมินความแข็งแกร่งของความจำเพาะของรูปแบบที่ใช้ทั้งสองรูปแบบและกำหนดผู้ชนะ ได้แก่ กฎสไตล์ที่มีน้ำหนักมากกว่าจะชนะหากทั้งสองกฎมี น้ำหนักเท่ากันจากนั้นกฎใช้การชนะครั้งล่าสุด


0

Cascade และความจำเพาะสิ่งที่คุณต้องรู้:

  1. ประกาศ CSS ที่มีเครื่องหมาย! important มีลำดับความสำคัญสูงสุด

  2. แต่ใช้เท่านั้น! important เป็นทรัพยากรสุดท้าย การใช้ข้อมูลจำเพาะที่ถูกต้องจะดีกว่า - โค้ดที่บำรุงรักษาได้มากกว่า

  3. สไตล์อินไลน์จะมีลำดับความสำคัญเหนือสไตล์ในสไตล์ชีตภายนอกเสมอ

  4. ตัวเลือกที่มี 1 ID มีความเฉพาะเจาะจงมากกว่าตัวเลือกที่มี 1,000 คลาส

  5. ตัวเลือกที่มี 1 คลาสมีความเฉพาะเจาะจงมากกว่าที่มี 1,000 องค์ประกอบ

  6. ตัวเลือกสากล * ไม่มีค่าความจำเพาะ (0,0,0)

  7. พึ่งพาความเฉพาะเจาะจงมากกว่าลำดับตัวเลือก

  8. แต่ต้องพึ่งพาลำดับเมื่อใช้สไตล์ชีทของบุคคลที่สามให้ใส่สไตล์ชีตผู้แต่งของคุณเป็นอันดับสุดท้ายเสมอ


0

ในการเลือกรูปแบบ CSS ที่จะใช้กับองค์ประกอบ HTML ความเฉพาะเจาะจงจะลบล้างความทั่วไปตามชุดกฎที่เรียงซ้อนกันซึ่งจะจัดการความขัดแย้งระหว่างสไตล์:

  1. หากไม่มี CSS HTML จะแสดงตามรูปแบบเริ่มต้นของเบราว์เซอร์
  2. แท็ก CSSตัวเลือก (ตรงกับแท็ก HTML) จะลบล้างค่าเริ่มต้นของเบราว์เซอร์
  3. คลาส CSS selectors (with.) แทนที่การอ้างอิงแท็ก
  4. รหัส CSS selectors (with #) แทนที่การอ้างอิงคลาส
  5. อินไลน์โค้ด CSSลงในแท็ก HTML แทนที่ ID คลาสและแท็ก CSS
  6. การเพิ่ม! สำคัญให้กับสไตล์ CSS จะลบล้างสิ่งอื่น ๆ
  7. หากตัวเลือก CSS เหมือนกันเบราว์เซอร์จะรวมคุณสมบัติเข้าด้วยกัน หากคุณสมบัติ CSS ผลลัพธ์ขัดแย้งกันเบราว์เซอร์จะเลือกค่าคุณสมบัติที่ปรากฏในภายหลังหรือล่าสุดในโค้ด

ตัวเลือก CSS ที่จับคู่แท็กคลาสและ / หรือรหัสที่เฉพาะเจาะจงมากขึ้นจะมีลำดับความสำคัญ จากตัวอย่างต่อไปนี้ตัวแรกจะมีความสำคัญเหนือกว่าวินาทีโดยไม่คำนึงถึงลำดับการปรากฏใน CSS:

ol#identity li.firstname { color: red; }
#identity .firstname { color: blue; }

-2
CSS doc    
p{font-size: 12pt;}
p{font-size: 14pt;}

<p>My Headline<p>

จะแสดงผลแบบอักษร p ที่ 14pt เนื่องจาก "ใกล้" กับองค์ประกอบจริงมากขึ้น (สไตล์ชีตภายนอกโหลดจากด้านบนของไฟล์ไปยังด้านล่างของไฟล์) หากคุณใช้สไตล์ชีตที่เชื่อมโยงแล้วรวม CSS บางส่วนไว้ในส่วนหัวของเอกสารของคุณหลังจากเชื่อมโยงกับเอกสาร CSS ภายนอกแล้วการประกาศ "in head" จะชนะเพราะยิ่งใกล้เคียงกับองค์ประกอบที่กำหนด นี่เป็นความจริงสำหรับตัวเลือกที่มีน้ำหนักเท่ากันเท่านั้น ดูhttp://www.stuffandnonsense.co.uk/archives/css_specificity_wars.htmlสำหรับคำอธิบายที่ดีเกี่ยวกับน้ำหนักของตัวเลือกที่กำหนด

ทั้งหมดที่กล่าวมาคุณสามารถพิจารณา 'มรดก' เป็นส่วนหนึ่งของน้ำตกได้เช่นกัน - เพื่อวัตถุประสงค์ในทางปฏิบัติทั้งหมด สิ่งที่ "เรียงซ้อน" ลงจากองค์ประกอบที่มี


นี่หมายความว่าสไตล์ที่วางอยู่ระหว่างสสารแม้ว่าจะไม่ได้นำไปที่องค์ประกอบที่กำหนดก็ตาม ไม่ถูกต้องถ้าฉันทำตาม
Daniel Springer

ดูเหมือนว่าจะมีการแก้ไข ไม่ว่าในกรณีใดฉันไม่เข้าใจว่าสิ่งนี้ตอบคำถามอย่างไร
Daniel Springer
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.