Saya perlu membuat kelas stylesheet CSS secara dinamis dalam JavaScript dan menetapkannya ke beberapa elemen HTML seperti - div, tabel, span, tr, dll dan untuk beberapa kontrol seperti asp: Textbox, Dropdownlist dan datalist.
Apa itu mungkin?
Akan menyenangkan dengan sampel.
javascript
css
stylesheet
Himadri
sumber
sumber
Jawaban:
Meskipun saya tidak yakin mengapa Anda ingin membuat kelas CSS dengan JavaScript, berikut adalah opsi:
sumber
Menemukan solusi yang lebih baik, yang berfungsi di semua browser.
Menggunakan document.styleSheet untuk menambah atau mengganti aturan. Jawaban yang diterima pendek dan praktis tetapi ini berfungsi di IE8 dan juga kurang.
Fungsinya digunakan sebagai berikut.
sumber
var styleSheetLength = styleSheet.cssRules ? styleSheet.cssRules.length : 0
dan menggantinya dengan penerapan fungsi.Jawaban singkat, ini kompatibel "pada semua browser" (khususnya, IE8 / 7):
Dan bit terakhir ini menerapkan kelas ke elemen:
Ini juga halaman pengujian kecil: https://gist.github.com/shadybones/9816763
Kuncinya adalah fakta bahwa elemen style memiliki properti "styleSheet" / "sheet" yang dapat Anda gunakan untuk menambah / menghapus aturan.
sumber
Ada plugin jQuery ringan yang memungkinkan untuk menghasilkan deklarasi CSS: jQuery-injectCSS
Sebenarnya, ia menggunakan JSS (CSS dijelaskan oleh JSON), tetapi cukup mudah ditangani untuk menghasilkan stylesheet css dinamis.
sumber
YUI sejauh ini memiliki utilitas stylesheet terbaik yang pernah saya lihat di sana. Saya mendorong Anda untuk memeriksanya, tapi inilah rasanya:
Jelas ada banyak cara lain yang lebih sederhana untuk mengubah gaya dengan cepat seperti yang disarankan di sini. Jika mereka masuk akal untuk masalah Anda, mereka mungkin yang terbaik, tetapi pasti ada alasan mengapa memodifikasi css adalah solusi yang lebih baik. Kasus yang paling jelas adalah ketika Anda perlu memodifikasi sejumlah besar elemen. Kasus utama lainnya adalah jika Anda membutuhkan perubahan gaya untuk melibatkan kaskade. Menggunakan dom untuk memodifikasi elemen akan selalu memiliki prioritas yang lebih tinggi. Ini pendekatan palu godam dan setara dengan menggunakan atribut style langsung pada elemen html. Itu tidak selalu efek yang diinginkan.
sumber
Pada IE 9. Sekarang Anda dapat memuat file teks dan mengatur properti style.innerHTML. Jadi pada dasarnya Anda sekarang dapat memuat file css melalui ajax (dan mendapatkan panggilan balik) dan kemudian hanya mengatur teks di dalam tag gaya seperti ini.
Ini berfungsi di browser lain, tidak yakin seberapa jauh ke belakang. Tetapi selama Anda tidak perlu mendukung IE8 maka itu akan berhasil.
dan kemudian Anda dapat menariknya file eksternal seperti myCss.css
sumber
Inilah solusi Vishwanath yang ditulis ulang dengan komentar:
sumber
Proyek menarik yang dapat membantu Anda dalam tugas Anda adalah JSS .
Pustaka JSS memungkinkan Anda untuk menyuntikkan di bagian DOM / kepala menggunakan
.attach()
fungsi.Ganti versi online untuk evaluasi.
Informasi lebih lanjut tentang JSS .
Sebuah contoh:
sumber
Menggunakan google closure:
Anda cukup menggunakan modul ccsom:
Kode javascript mencoba menjadi peramban silang saat meletakkan simpul css ke dalam kepala dokumen.
sumber
https://jsfiddle.net/xk6Ut/256/
Satu opsi untuk secara dinamis membuat dan memperbarui kelas CSS dalam JavaScript:
kelas CSS
.....
...
sumber
Melihat melalui jawaban dan yang paling jelas dan langsung hilang: gunakan
document.write()
untuk menulis sepotong CSS yang Anda butuhkan.Berikut ini sebuah contoh (lihat di codepen: http://codepen.io/ssh33/pen/zGjWga ):
sumber
sumber
Inilah solusi modular saya:
Anda pada dasarnya di mana saja dalam kode Anda lakukan:, di
addNewStyle('body', 'color: ' + color1);
manacolor1
variabel didefinisikan.Ketika Anda ingin "memposting" file CSS saat ini yang Anda lakukan
submitNewStyle()
,dan kemudian Anda masih dapat menambahkan lebih banyak CSS nanti.
Jika Anda ingin menambahkannya dengan "kueri media", Anda memiliki opsi.
Setelah "menambahkanNewStyles" Anda cukup menggunakan
submitNewStyleWithMedia('min-width: 1280px');
.Itu cukup berguna untuk kasus penggunaan saya, karena saya mengubah CSS situs web publik (bukan milik saya) menurut waktu saat ini. Saya mengirimkan satu file CSS sebelum menggunakan skrip "aktif", dan sisanya setelahnya (membuat situs terlihat seperti seharusnya sebelum mengakses elemen melalui
querySelector
).sumber
Untuk kepentingan pencari; jika Anda menggunakan jQuery, Anda dapat melakukan hal berikut:
Jelas Anda dapat mengubah inner css menjadi apa pun yang Anda inginkan.
Menghargai beberapa orang lebih suka JavaScript murni, tetapi berfungsi dan cukup tangguh untuk gaya penulisan / penulisan ulang secara dinamis.
sumber
Saya sedang mencari beberapa jawaban di sini, dan saya tidak dapat menemukan apa pun yang secara otomatis menambahkan lembar gaya baru jika tidak ada, dan jika tidak hanya mengubah yang sudah ada yang sudah berisi gaya yang diperlukan, jadi saya membuat fungsi baru ( harus bekerja di semua browser, meskipun tidak diuji, menggunakan addRule dan selain itu hanya JavaScript asli dasar, beri tahu saya jika berfungsi):
kemudian tambahkan saja 2 fungsi pembantu ini di dalam fungsi di atas, atau di tempat lain:
(perhatikan bahwa pada keduanya saya menggunakan for for alih-alih .filter, karena kelas gaya / daftar aturan CSS hanya memiliki properti panjang, dan tidak ada metode .filter.)
Kemudian menyebutnya:
Beri tahu saya jika itu berfungsi untuk browser Anda atau memberikan kesalahan.
sumber