: after vs. :: after


134

มีความแตกต่างในการทำงานระหว่าง CSS 2.1 :afterและ::afterตัวเลือกหลอกCSS 3 หรือไม่(นอกเหนือจาก::afterไม่รองรับในเบราว์เซอร์รุ่นเก่า) มีเหตุผลในทางปฏิบัติที่จะใช้ข้อกำหนดใหม่กว่านี้หรือไม่?

คำตอบ:


133

มันเป็นความแตกต่างขององค์ประกอบระดับหลอกเทียบกับเทียม

ยกเว้นสำหรับ::first-line, ::first-letter, ::beforeและ::after(ซึ่งได้รับรอบเล็ก ๆ น้อย ๆ ในขณะที่และสามารถใช้กับทวิภาคเดียวถ้าคุณต้องการการสนับสนุน IE8) หลอกองค์ประกอบ ต้องทวิภาคคู่

Pseudo-class จะเลือกองค์ประกอบที่แท้จริงด้วยตัวเองคุณสามารถใช้:first-childหรือ:nth-of-type(n)เพื่อเลือกรายการแรกหรือเฉพาะ<p>ใน div ได้เช่น
(และสถานะขององค์ประกอบจริงเช่น:hoverและ:focus)

องค์ประกอบ Pseudoกำหนดเป้าหมายส่วนย่อยขององค์ประกอบเช่น::first-lineหรือ::first-letterสิ่งที่ไม่ใช่องค์ประกอบตามสิทธิ์ของตนเอง


คำอธิบายที่ดีกว่าที่นี่: http://bricss.net/post/10768584657/know-your-lingo-pseudo-class-vs-pseudo-element
นอกจากนี้ที่นี่: http://www.evotech.net/blog/2007/ 05 / หลังวีหลังจากสิ่งที่เป็นคู่-ลำไส้ใหญ่สัญกรณ์ /


6
เป็นเพราะความแตกต่างนี้เองที่ทำให้ "pseudo-selector" (จากคำถาม) เป็นคำที่ไร้สาระ อย่าใช้เลยทีเดียว
BoltClock

1
เว้นแต่คุณจะพูดถึงพวกเขาทั้งคู่ หรือในคำทั่วไป
albert

1
นี่เป็นคำอธิบายที่ดีของทฤษฎี แต่มีผลต่อประเด็นในทางปฏิบัติหรือไม่? การใช้ข้อกำหนด css3 มีประโยชน์จริงหรือไม่เนื่องจาก css2 จะได้งานเดียวกัน - ในเบราว์เซอร์อื่น ๆ
DRosenfeld

1
@Dominic ขอบคุณ - ฉันขอขอบคุณที่ตอบความคิดเห็นของฉัน ไม่มีคำถามว่าปัญหาของการสนับสนุนแท็ก CSS3 (อย่างน้อยที่สุดนี้) เกือบจะไม่ใช่ปัญหาแล้วในตอนนี้
DRosenfeld

1
@ BorisD Teoharov โดยเฉพาะคุณสามารถใช้:afterและใช้::afterแทนกันได้กับพฤติกรรมที่เหมือนกันยกเว้น IE8 ซึ่งตามที่คำถามบันทึกไว้ต้องใช้เครื่องหมายทวิภาคเดียว
Dominic

14

CSS Selectors เช่น::afterเป็นองค์ประกอบเสมือนบางอย่างที่ไม่มีให้เป็นองค์ประกอบที่ชัดเจนในโครงสร้าง DOM พวกเขาจะเรียกว่า " Pseudo องค์ประกอบ " และจะใช้ในการแทรกเนื้อหาบางส่วนก่อน / หลังองค์ประกอบ (เช่น::before, ::after) หรือเลือกบางส่วนขององค์ประกอบ (เช่น: ::first-letter) ปัจจุบันมีเพียง 5 องค์ประกอบหลอกมาตรฐาน: after, before, first-letter, first-line, selection.

บนมืออื่น ๆ มีชนิดอื่น ๆ ของตัวเลือกที่เรียกว่า " Pseudo-เรียน " ซึ่งถูกนำมาใช้ในการกำหนดสถานะพิเศษขององค์ประกอบ (เหมือน:hover, :focus,:nth-child(n) ) สิ่งเหล่านี้จะเลือกองค์ประกอบที่มีอยู่ทั้งหมดใน DOM ชั้นเรียนหลอกเป็นรายการยาวที่มีมากกว่า 30 รายการ

เริ่มแรก (ใน CSS2 และ CSS1) ไวยากรณ์จุดเดียวถูกใช้สำหรับทั้งคลาสหลอกและองค์ประกอบหลอก แต่ใน CSS3 ::ไวยากรณ์แทนที่:สัญกรณ์สำหรับองค์ประกอบหลอกเพื่อให้แยกแยะได้ดีขึ้น

สำหรับความเข้ากันได้แบบย้อนหลังไวยากรณ์ single-colon แบบเก่าเป็นที่ยอมรับสำหรับองค์ประกอบหลอกเช่น as :after(เบราว์เซอร์ทั้งหมดยังคงรองรับไวยากรณ์แบบเก่าที่มีเครื่องหมายอัฒภาคเดียว) เฉพาะ IE-8 ไม่รองรับไวยากรณ์ใหม่ (ใช้ single-colon หากคุณต้องการรองรับ IE8)

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