Hal-hal seperti a:link
atau div::after
...
Informasi tentang perbedaan tersebut tampaknya langka.
css
css-selectors
pseudo-class
pseudo-element
tybro0103
sumber
sumber
Jawaban:
The CSS 3 selector rekomendasi cukup jelas tentang keduanya, tapi aku akan mencoba untuk menunjukkan perbedaan pula.
Kelas semu
Deskripsi resmi
Sumber
Apa artinya ini?
Sifat penting dari pseudo-class dinyatakan dalam kalimat pertama: " pemilihan izin konsep pseudo-class [...] " . Ini memungkinkan penulis stylesheet untuk membedakan antara elemen berdasarkan informasi yang "terletak di luar pohon dokumen" , misalnya status tautan saat ini (
:active
,:visited
). Itu tidak disimpan di mana pun di DOM, dan tidak ada antarmuka DOM untuk mengakses opsi ini.Di sisi lain,
:target
dapat diakses melalui manipulasi DOM (Anda dapat menggunakannyawindow.location.hash
untuk menemukan objek dengan JavaScript), tetapi ini "tidak dapat diekspresikan menggunakan pemilih sederhana lainnya" .Jadi pada dasarnya pseudo-class akan menyempurnakan himpunan elemen yang dipilih sebagai pemilih sederhana lainnya dalam urutan pemilih sederhana . Perhatikan bahwa semua pemilih sederhana dalam urutan penyeleksi sederhana akan dievaluasi pada saat yang bersamaan. Untuk daftar lengkap pseudo-class, periksa rekomendasi pemilih CSS3.
Contoh
Contoh berikut akan mewarnai semua baris genap dengan abu-abu (
#ccc
), semua baris tidak rata yang tidak dapat dibagi 5 putih dan setiap baris lainnya berwarna magenta.table tr:nth-child(2n) td{ background-color: #ccc; } table tr:nth-child(2n+1) td{ background-color: #fff; } table tr:nth-child(2n+1):nth-child(5n) td{ background-color: #f0f; }
Elemen semu
Deskripsi resmi
Sumber
Apa artinya ini?
Bagian terpenting di sini adalah bahwa "elemen semu memungkinkan penulis untuk merujuk ke [..] informasi yang tidak dapat diakses " dan bahwa mereka "juga dapat memberikan cara kepada penulis untuk merujuk ke konten yang tidak ada dalam dokumen sumber (mis.,
::before
dan::after
pseudo-elemen memberikan akses ke konten yang dihasilkan). ". Perbedaan terbesar adalah mereka benar-benar membuat elemen virtual baru tempat aturan dan bahkan penyeleksi kelas pseudo dapat diterapkan. Mereka tidak memfilter elemen, mereka pada dasarnya memfilter konten (::first-line
,::first-letter
) dan membungkusnya dalam wadah virtual, yang dapat diatur oleh pembuatnya sesuka dia (yah, hampir).Misalnya
::first-line
pseudo-elemen tidak dapat direkonstruksi dengan JavaScript, karena sangat bergantung pada font yang digunakan saat ini, ukuran font, lebar elemen, elemen mengambang (dan mungkin waktu pada hari itu). Yah, itu tidak sepenuhnya benar: seseorang masih dapat menghitung semua nilai itu dan mengekstrak baris pertama, namun melakukannya adalah aktivitas yang sangat rumit.Saya kira perbedaan terbesar adalah "hanya satu elemen semu yang dapat muncul per pemilih" . Catatan mengatakan bahwa hal ini dapat berubah, tetapi mulai tahun 2012 saya tidak yakin kami melihat perilaku yang berbeda di masa mendatang ( masih dalam CSS4 ).
Contoh
Contoh berikut akan menambahkan tag bahasa ke setiap kutipan pada halaman tertentu menggunakan pseudo-class
:lang
dan pseudo-element::after
:q:lang(de)::after{ content: " (German) "; } q:lang(en)::after{ content: " (English) "; } q:lang(fr)::after{ content: " (French) "; } q:not(:lang(fr)):not(:lang(de)):not(:lang(en))::after{ content: " (Unrecognized language) "; }
TL; DR
Kelas semu bertindak sebagai penyeleksi sederhana dalam urutan penyeleksi dan dengan demikian mengklasifikasikan elemen pada karakteristik non-presentasi, elemen semu membuat elemen virtual baru.
Referensi
W3C
sumber
:not(.someclass):nth-child(even)
tidak bermaksud untuk menyaring elemen yang tidak memiliki.someclass
, dan di antara elemen yang tersisa menyaring kejadian genap. Sebaliknya itu merupakan unsur yang baik:not(.someclass)
dan:nth-child(even)
dari induknya pada saat yang sama. Penjelasan yang lebih mendalam dapat ditemukan di jawaban ini dan jawaban ini .Kelas pseudo memfilter elemen yang ada.
a:link
berarti semua<a>
itu:link
.Pseudo-element adalah elemen palsu baru.
div::after
berarti elemen yang tidak ada setelah<div>
s.::selection
adalah contoh lain dari elemen semu.Ini tidak berarti semua elemen yang dipilih; itu berarti rentang konten yang dipilih, yang dapat mencakup bagian dari banyak elemen.
sumber
div::after
adalah anak daridiv
, terjadi setelah isinya daripada elemen itu sendiri.Deskripsi singkat yang membantu saya memahami perbedaannya:
sumber
Dari dokumen Sitepoint:
sumber
Di bawah ini adalah jawaban sederhananya:
Kami menggunakan pseudo-class ketika kami perlu menerapkan css berdasarkan status elemen. Seperti:
:hover
):focus
). dll.Kami menggunakan pseudo-element ketika kami perlu menerapkan css ke bagian tertentu dari sebuah elemen atau konten yang baru disisipkan . Seperti:
::first-letter
)::before
,::after
)Di bawah ini adalah contoh keduanya:
<html> <head> <style> p::first-letter { /* pseudo-element */ color: #ff0000; } a:hover { /* pseudo-class */ color: red; } </style> </head> <body> <a href="#" >This is a link</a> <p>This is a paragraph.</p> </body> </html>
sumber
Jawaban konseptual:
Pseudo-element merujuk pada hal-hal yang merupakan bagian dari dokumen, tetapi Anda belum mengetahuinya. Misalnya huruf pertama. Sebelumnya Anda hanya memiliki teks. Sekarang Anda memiliki huruf pertama yang bisa Anda targetkan. Ini adalah konsep baru, tetapi selalu menjadi bagian dari dokumen. Ini juga mencakup hal-hal seperti
::before
; Meskipun tidak ada konten aktual di sana, konsep tentang sesuatu sebelum sesuatu yang lain selalu ada - sekarang Anda yang menentukannya.Kelas pseudo adalah status dari sesuatu di DOM. Sama seperti kelas adalah tag yang Anda kaitkan dengan elemen, kelas semu adalah kelas yang dikaitkan oleh browser atau DOM atau apa pun, biasanya sebagai respons terhadap perubahan status. Ketika seorang pengguna mengunjungi sebuah tautan - tautan itu dapat mengambil status 'dikunjungi'. Anda dapat membayangkan browser menerapkan kelas 'mengunjungi' ke elemen Anchor.
:visited
akan menjadi bagaimana Anda memilih kelas semu itu.sumber
Kelas Semu
Kelas semu adalah cara memilih bagian tertentu dari dokumen HTML, pada prinsipnya tidak berdasarkan pada pohon dokumen HTML itu sendiri dan elemennya atau pada karakteristik seperti nama, atribut, atau konten, tetapi pada kondisi bayangan lain seperti pengkodean bahasa atau status dinamis dari suatu elemen.
Pseudo-class mendefinisikan status dinamis dari elemen yang masuk dan keluar dari waktu ke waktu, atau melalui intervensi pengguna. CSS2 memperluas konsep ini untuk memasukkan komponen dokumen konseptual virtual atau bagian yang disimpulkan dari pohon dokumen misalnya anak pertama. Kelas semu beroperasi seolah-olah kelas hantu ditambahkan ke berbagai elemen.
BATASAN: Tidak seperti pseudo-elemen, pseudo-class dapat muncul di mana saja dalam rantai pemilih.
Contoh kode kelas semu:
a:link /* This selects any "a" element whose target has not been visited.*/ { padding : 4px; text-decoration : none; width : 10%; color : #000000; /* black text color */ background-color : #99FF99; /* set to a pastel green */ border-top : 2px solid #ccffcc; /* highlight color */ border-left : 2px solid #ccffcc; /* highlight color */ border-bottom : 2px solid #003300; /* shadow color */ border-right : 2px solid #003300; /* shadow color */ } a:visited /* This selects any "a" element whose target has been visited.*/ { padding : 4px; text-decoration : none; color : #000000; /* black text color */ background-color : #ccccff; /* set to a lavender */ border-top : 2px solid #ffffff; /* highlight color */ border-left : 2px solid #ffffff; /* highlight color */ border-bottom : 2px solid #333366; /* shadow color * border-right : 2px solid #333366; /* shadow color */ } a:hover /* This selects any "a" element which is in a hover state. This is a state during pointer movement within the rendering region of an element. The user designates an element but does not activate it. */ { color : #000000; /* black text color */ background-color : #99cc99; /* desaturated color */ border-top : 2px solid #003300; /* shadow color */ border-left : 2px solid #003300; /* shadow color */ border-bottom : 2px solid #ccffcc; /* highlight color */ border-right : 2px solid #ccffcc; /* highlight color */ } a:focus /* This selects any "a" element which currently has focus. Focus is a state during which an element accepts keyboard input or other forms of text input. */ { padding : 4px; text-decoration : none; width : 10%; color : #000000; /* black text color */ background-color : #ffff99; /* set to a pastel yellow */ border-top : 2px solid #ffffcc; /* highlight color */ border-left : 2px solid #ffffcc; /* highlight color */ border-bottom : 2px solid #666633; /* shadow color */ border-right : 2px solid #666633; /* shadow color */ } a:active /* This selects any "a" element which is in a state of activation. Active is a state during pointer activation (eg: press and release of a mouse) within the rendering region of an element.*/ { padding : 4px; text-decoration : none; width : 10%; color : #000000; /* black text color */ background-color : #ff99ff; /* set to a pink */ border-top : 2px solid #ffccff; /* highlight color */ border-left : 2px solid #ffccff; /* highlight color */ border-bottom : 2px solid #663366; /* shadow color */ border-right : 2px solid #663366; /* shadow color */ }
Halaman yang menunjukkan rendering kode kelas-semu di atas
Elemen semu
PSEUDO-ELEMENTS digunakan untuk menangani sub-bagian elemen. Mereka memungkinkan Anda menyetel gaya pada bagian konten elemen melebihi apa yang ditentukan dalam dokumen. Dengan kata lain, mereka mengizinkan elemen logis untuk didefinisikan yang sebenarnya tidak ada dalam pohon elemen dokumen. Elemen logika memungkinkan struktur semantik tersirat untuk ditangani di pemilih CSS.
BATASAN: Elemen semu hanya dapat diterapkan pada konteks tingkat dokumen dan eksternal - bukan untuk gaya sebaris. Elemen semu dibatasi di tempat mereka dapat muncul dalam aturan. Mereka mungkin hanya muncul di akhir rantai pemilih (setelah subjek selektor). Nama tersebut harus muncul setelah nama kelas atau ID yang ditemukan di pemilih. Hanya satu elemen semu yang dapat ditentukan per pemilih. Untuk mengatasi beberapa elemen pseudo pada satu elemen struktur, pernyataan pemilih / deklarasi beberapa gaya harus dibuat.
Elemen semu dapat digunakan untuk efek tipografi umum seperti huruf awal dan penutup lepas. Mereka juga dapat menangani konten yang dihasilkan yang tidak ada dalam dokumen sumber (dengan "sebelum" dan "setelah") Contoh style sheet dari beberapa pseudo-elemen dengan properti dan nilai yang ditambahkan mengikuti.
/ * Aturan berikut memilih huruf pertama dari heading 1 dan mengatur fonta menjadi 2em, kursif, dengan latar belakang hijau. Huruf pertama memilih huruf / karakter pertama yang dirender untuk elemen level blok. * /
h1:first-letter { font-size : 2em; font-family : "Lucida Handwriting", "Lucida Sans", "Lucida Console", cursive; background-color : #ccffcc; } /* The following rule selects the first displayed line in a paragraph and makes it bold. First-line selects the first rendered line on the output device of a block-level element. */ p:first-line { font-weight : bold; } /* The following rule selects any content placed before a blockquote and inserts the phrase "Quote of the day:" in bold small caps with a green background. */ blockquote:before { content : "Quote of the day:"; background-color : #ccffcc; font-weight : bold; font-variant : small-caps; } /* The following rule selects any content placed before a "q" element and inserts the smart open quote. */ q:before { content : open-quote; } /* The following rule selects any content placed after a "q" element and inserts the smart close quote. */ q:after{ content : close-quote; }
Sumber: Link
sumber
Singkatnya, dari Pseudo-class di MDN:
Dan, dari Pseudo-elements di MDN:
sumber