Saya kesulitan memahami perilaku :after
properti CSS . Menurut spesifikasi ( disini dan disini ):
Seperti yang ditunjukkan oleh namanya,
:before
dan:after
pseudo-elemen menentukan lokasi konten sebelum dan sesudah konten pohon dokumen elemen.
Tampaknya ini tidak membatasi elemen mana yang dapat memiliki properti :after
(atau :before
). Namun, tampaknya hanya bekerja dengan spesifik elemen ... <p>
karya, <img>
tidak, <input>
tidak, <table>
tidak. Saya bisa menguji lebih banyak, tetapi intinya dibuat. Perhatikan bahwa ini tampaknya cukup konsisten di seluruh browser. Apa yang menentukan apakah suatu objek dapat menerima properti :before
dan :after
?
sumber
<before></before>
" di sumbernya.<before></before>
. Saya seharusnya mengatakan "berpura-pura DOM" atau sesuatu. Intinya adalah untuk menunjukkan itu:before
dan:after
berada di dalam elemen, bukan di luarnya.:before
dan:after
tidak berfungsi untuk elemen yang diganti; ia hanya mengatakan bahwa ia tidak "sepenuhnya mendefinisikan" bagaimana dan bahwa ini akan didefinisikan di masa depan (yang belum terjadi sejauh ini). Apa yang terjadi di DOM tidak relevan di sini. Meskipun browser tidak mendukung elemen pseudo ini untuk beberapa elemen, ini tidak ada dalam spesifikasi, hanya implementasi yang dilakukan.::before
dan::after
tidak berfungsi untuk elemen void (kosong) yang tidak pernah memiliki konten aktual, sebelum / sesudah itu dapat diterapkan. Tapi yang mengejutkan, mereka bekerja untukhr
elemen di hampir semua browser.:before
dan:after
tidak diharuskan bekerja untuk elemen yang diganti, dan spesifikasi CSS tidak menentukan bagaimana mereka akan bekerja untuk mereka, dan konsep elemen yang diganti agak kabur.Spesifikasi CSS 2.1 dengan jelas menyarankan bahwa mereka dapat bekerja untuk elemen yang diganti, hanya mengatakan bahwa itu tidak "sepenuhnya mendefinisikan" bagaimana. Hal ini berkaitan dengan masalah bahwa elemen yang diganti diharapkan memiliki rendering visualnya sendiri, yang tidak dikontrol oleh CSS, sedangkan pseudo-elemen harus menambahkan sesuatu ke konten elemen. Spesifikasi menambahkan bahwa ini akan didefinisikan "secara lebih rinci" dalam spesifikasi yang akan datang, tetapi sejauh ini belum terjadi.
Vendor browser baru saja memutuskan untuk menghindari masalah dengan tidak mengimplementasikan elemen semu ini untuk beberapa elemen sama sekali.
Tidak jelas sama sekali apa artinya "elemen yang diganti", dan artinya tampaknya telah berubah. Hal ini sering diartikan sebagai makna yang sama dengan elemen kosong (elemen dengan
EMPTY
konten yang dideklarasikan, yaitu elemen yang tidak dapat memiliki konten apa pun), tetapi CSS 2.1 sendiri menunjukkan contoh style sheet dengan selektorbr:before
(meskipun browser telah mengabaikan ini, menerapkannyabr
sendiri cara). Dapat dikatakan bahwa semakin banyak elemen telah pindah ke lingkup rendering CSS, setidaknya sebagian. Misalnya,input
elemen (termasuk font, warna, dll.) Sebagian besar dapat dikontrol dengan CSS di browser modern.Browser saat ini (Firefox, IE, Chrome) tampaknya tidak mendukung
:after
dan:before
pseudo-elemen untuk elemen kosong selainhr
. Untukhr
, IE dan Chrome menempatkan konten yang dihasilkan di dalam kotak berbatasan, yang merupakan implementasi darihr
; konten membuat kotak lebih tinggi. Firefox menempatkan konten dari kedua elemen pseudo (!) Setelah aturan horizontal yang diimplementasikanhr
. Variasi ini menggambarkan jenis masalah "interaksi" yang dirujuk dalam CSS 2.1.Sering diklaim bahwa elemen semu ini tidak dapat digunakan untuk elemen kosong karena definisi HTML-nya tidak mengizinkan konten apa pun. Ini adalah kesalahan kategori. Aturan sintaks dari bahasa markup tidak membatasi apa yang dapat Anda lakukan di CSS
Untuk menyimpulkan,
:after
dan:before
saat ini tidak dapat digunakan untuk elemen kosong (kecuali sedikit untukhr
), tetapi ini terutama karena implementasi dan dapat berubah di masa mendatang.sumber
Elemen yang tidak memiliki tag penutup adalah elemen kosong dan tidak dapat menampilkan konten di dalamnya:
https://www.w3.org/TR/html5/syntax.html#void-elements
Semua browser Blink, Webkit, dan Quantum memungkinkan Anda membuat elemen semu hanya pada kotak centang tetapi ini kontroversial karena tidak ada spesifikasi yang mengizinkan perilaku ini.
Berikut contohnya: https://codepen.io/equinusocio/pen/BOBaEM/
sumber