Anda tidak dapat mendesain kelas pseudo pada elemen tertentu saja, dengan cara yang sama Anda tidak dapat memiliki kelas pseudo dalam atribut inline style = "..." (karena tidak ada pemilih).
Anda bisa melakukannya dengan mengubah stylesheet, misalnya dengan menambahkan aturan:
#elid:hover { background: red; }
dengan asumsi setiap elemen yang ingin Anda pengaruhi memiliki ID unik untuk memungkinkannya dipilih.
Secara teori, dokumen yang Anda inginkan adalah http://www.w3.org/TR/DOM-Level-2-Style/Overview.html yang berarti Anda dapat (diberi stylesheet yang tertanam atau ditautkan sebelumnya) menggunakan sintaksis seperti:
document.styleSheets[0].insertRule('#elid:hover { background-color: red; }', 0);
document.styleSheets[0].cssRules[0].style.backgroundColor= 'red';
IE, tentu saja, membutuhkan sintaksnya sendiri:
document.styleSheets[0].addRule('#elid:hover', 'background-color: red', 0);
document.styleSheets[0].rules[0].style.backgroundColor= 'red';
Browser lama dan kecil cenderung tidak mendukung sintaksis mana pun. Mengutak-atik gaya dinamis jarang dilakukan karena cukup menjengkelkan untuk mendapatkan yang benar, jarang dibutuhkan, dan secara historis merepotkan.
function sameOrigin(url) { var loc = window.location, a = document.createElement('a'); a.href = url; return a.hostname === loc.hostname && a.port === loc.port && a.protocol === loc.protocol; }
Saya mengumpulkan perpustakaan kecil untuk ini karena saya pikir ada kasus penggunaan yang valid untuk memanipulasi stylesheet di JS. Alasannya adalah:
sumber
Fungsi untuk mengatasi hal-hal lintas-browser:
sumber
Cukup tempatkan css di string template.
Kemudian buat elemen gaya dan tempatkan string di tag gaya dan lampirkan ke dokumen.
Kekhususan akan mengurus sisanya. Kemudian Anda dapat menghapus dan menambahkan tag gaya secara dinamis. Ini adalah alternatif sederhana untuk pustaka dan mengacaukan array stylesheet di DOM. Selamat Coding!
sumber
insertAdjacentElement
membutuhkan 2 argumen di browser utama (Chrome, Firefox, Edge), yang pertama menetapkan posisi relatif terhadap elemen referensi ( lihat di sini ). Apakah ini perubahan terbaru? (Ditambahkan 'sebelum akhir' ke jawabannya).Trik saya menggunakan pemilih atribut. Atribut lebih mudah diatur dengan javascript.
css
javascript
html
sumber
Ada alternatif lain. Alih-alih memanipulasi pseudo-class secara langsung, buat kelas nyata yang memodelkan hal yang sama, seperti kelas "melayang" atau kelas "dikunjungi". Tata kelas dengan gaya biasa "." sintaks dan kemudian Anda dapat menggunakan JavaScript untuk menambah atau menghapus kelas dari suatu elemen ketika acara yang sesuai kebakaran.
sumber
:before
&:after
adalah elemen semu, bukan kelas.Alih-alih langsung mengatur aturan pseudo-class dengan javascript, Anda dapat mengatur aturan secara berbeda di file CSS yang berbeda, dan kemudian menggunakan Javascript untuk mematikan satu stylesheet dan mengaktifkan yang lain. Metode dijelaskan di A List Apart (qv. Untuk lebih detail).
Atur file CSS sebagai,
Dan kemudian beralih di antara mereka menggunakan javascript:
sumber
Seperti yang sudah dinyatakan ini bukan sesuatu yang didukung browser.
Jika Anda tidak membuat style secara dinamis (misalnya menariknya dari database atau sesuatu), Anda harus dapat mengatasinya dengan menambahkan kelas ke badan halaman.
Css akan terlihat seperti:
Dan javascript untuk mengubah ini adalah sesuatu seperti:
sumber
element.classList.add
tidak didukung dengan baik? Saya terus melihat orang melakukanelement.className +=
.Mengganti stylesheet masuk dan keluar adalah cara untuk melakukannya. Berikut adalah perpustakaan untuk membuat stylesheet secara dinamis, sehingga Anda dapat mengatur gaya dengan cepat:
http://www.4pmp.com/2009/11/dynamic-css-pseudo-class-styles-with-jquery/
sumber
Di jquery Anda dapat dengan mudah mengatur kelas pseudo hover.
sumber
di sini adalah solusi termasuk dua fungsi: addCSSclass menambahkan kelas css baru ke dokumen, dan toggleClass menyalakannya
Contoh menunjukkan menambahkan bilah gulir khusus ke div
sumber
Jika Anda menggunakan REACT, Ada sesuatu yang disebut radium . Ini sangat berguna di sini:
sumber