Saya mencoba merancang kotak centang menggunakan yang berikut ini:
<input type="checkbox" style="border:2px dotted #00f;display:block;background:#ff0000;" />
Namun gaya tersebut tidak diterapkan. Kotak centang masih menampilkan gaya standarnya. Bagaimana cara memberikan gaya yang ditentukan?
Jawaban:
MEMPERBARUI:
Jawaban di bawah ini merujuk pada keadaan sebelum ketersediaan luas dari CSS 3. Di browser modern (termasuk Internet Explorer 9 dan yang lebih baru), lebih mudah untuk membuat penggantian kotak centang dengan gaya yang Anda sukai, tanpa menggunakan JavaScript.
Berikut ini beberapa tautan bermanfaat:
Perlu dicatat bahwa masalah mendasar tidak berubah. Anda masih tidak dapat menerapkan gaya (batas, dll.) Langsung ke elemen kotak centang dan memiliki gaya yang mempengaruhi tampilan kotak centang HTML. Apa yang telah berubah, bagaimanapun, adalah bahwa sekarang mungkin untuk menyembunyikan kotak centang yang sebenarnya dan menggantinya dengan elemen gaya Anda sendiri, hanya menggunakan CSS. Khususnya, karena CSS sekarang memiliki
:checked
pemilih yang didukung secara luas , Anda dapat membuat penggantian Anda dengan benar mencerminkan status kotak yang dicentang.JAWABAN TUA
Inilah artikel yang berguna tentang kotak centang styling . Pada dasarnya, penulis menemukan bahwa itu sangat bervariasi dari peramban ke peramban, dan banyak peramban selalu menampilkan kotak centang default, tidak peduli bagaimana Anda mengaturnya. Jadi sebenarnya tidak ada cara yang mudah.
Tidak sulit untuk membayangkan solusi di mana Anda akan menggunakan JavaScript untuk overlay gambar pada kotak centang dan klik pada gambar itu menyebabkan kotak centang yang sebenarnya diperiksa. Pengguna tanpa JavaScript akan melihat kotak centang default.
Diedit untuk menambahkan: inilah skrip bagus yang melakukan ini untuk Anda ; itu menyembunyikan elemen kotak centang nyata, menggantinya dengan rentang gaya, dan mengarahkan kembali peristiwa klik.
sumber
Ada cara untuk melakukan ini hanya dengan menggunakan CSS. Kita dapat (ab) menggunakan
label
elemen dan gaya elemen itu sebagai gantinya. Peringatannya adalah bahwa ini tidak akan berfungsi untuk Internet Explorer 8 dan versi yang lebih rendah.sumber
input
tidak pernah mengambil fokus keyboard, jadi ini tidak terjangkau oleh keyboard.Anda dapat mencapai efek kotak centang kustom yang cukup keren dengan menggunakan kemampuan baru yang datang dengan kelas
:after
dan:before
pseudo. Keuntungannya adalah: Anda tidak perlu menambahkan apa pun ke DOM, hanya kotak centang standar.Perhatikan ini hanya akan berfungsi untuk browser yang kompatibel. Saya percaya ini terkait dengan fakta bahwa beberapa browser tidak memungkinkan Anda untuk mengatur
:after
dan:before
memasukkan elemen. Yang sayangnya berarti untuk saat ini hanya browser WebKit yang didukung. Firefox + Internet Explorer masih akan memungkinkan kotak centang berfungsi, hanya dihapus, dan ini mudah-mudahan akan berubah di masa mendatang (kode tidak menggunakan awalan vendor).Ini adalah solusi browser WebKit saja (Chrome, Safari, browser Mobile)
Lihat Contoh Biola
Bonus gaya Webkit flipswitch biola
sumber
Sebelum Anda mulai (per Jan 2015)
Pertanyaan dan jawaban asli sekarang ~ 5 tahun. Dengan demikian, ini adalah sedikit pembaruan.
Pertama, ada sejumlah pendekatan ketika datang ke styling kotak centang. prinsip dasarnya adalah:
Anda harus menyembunyikan kontrol kotak centang default yang ditata oleh browser Anda, dan tidak dapat diganti dengan cara apa pun yang berarti menggunakan CSS.
Dengan kontrol yang disembunyikan, Anda masih harus dapat mendeteksi dan mengganti status yang dicentang
Status kotak centang yang dicentang perlu direfleksikan dengan menata elemen baru
Solusinya (pada prinsipnya)
Hal di atas dapat dilakukan dengan sejumlah cara - dan Anda akan sering mendengar menggunakan elemen pseudo CSS3 adalah cara yang benar. Sebenarnya, tidak ada cara benar atau salah, itu tergantung pada pendekatan yang paling cocok untuk konteks Anda akan menggunakannya. Yang mengatakan, saya punya yang lebih disukai.
Bungkus kotak centang Anda dalam sebuah
label
elemen. Ini berarti bahwa meskipun tersembunyi, Anda masih dapat mengaktifkan statusnya untuk mengklik di mana saja di dalam label.Sembunyikan kotak centang Anda
Tambahkan elemen baru setelah kotak centang yang akan Anda gaya sesuai. Itu harus muncul setelah kotak centang sehingga dapat dipilih menggunakan CSS dan gaya tergantung pada
:checked
negara. CSS tidak dapat memilih 'mundur'.Solusinya (dalam kode)
Tampilkan cuplikan kode
Penyempitan (menggunakan ikon)
Tapi hey! Saya mendengar Anda berteriak. Bagaimana jika saya ingin menunjukkan tanda centang kecil atau tanda silang di kotak? Dan saya tidak ingin menggunakan gambar latar belakang!
Nah, di sinilah elemen pseudo CSS3 bisa ikut berperan. Ini mendukung
content
properti yang memungkinkan Anda untuk menyuntikkan ikon Unicode yang mewakili kedua negara. Atau, Anda dapat menggunakan sumber ikon font pihak ketiga seperti font yang mengagumkan (meskipun pastikan Anda juga mengatur yang relevanfont-family
, misalnya untukFontAwesome
)sumber
display: none
.visibility: hidden;
denganopacity: 0 !important;
jika Anda masih mengalami masalah dengan tab.Saya akan mengikuti saran jawaban SW4 - untuk menyembunyikan kotak centang dan untuk menutupinya dengan rentang kustom, menyarankan HTML ini:
Label bungkus dengan rapi memungkinkan mengklik teks tanpa perlu menghubungkan atribut "untuk-id". Namun,
Jangan menyembunyikannya menggunakan
visibility: hidden
ataudisplay: none
Ini bekerja dengan mengklik atau mengetuk, tetapi itu adalah cara lumpuh untuk menggunakan kotak centang. Beberapa orang masih menggunakan jauh lebih efektif Tabuntuk memindahkan fokus, Spacemengaktifkan, dan bersembunyi dengan metode yang menonaktifkannya. Jika formulirnya panjang, seseorang akan menyimpan pergelangan tangan seseorang untuk digunakan
tabindex
atauaccesskey
atribut. Dan jika Anda mengamati perilaku kotak centang sistem, ada bayangan yang layak di hover. Kotak centang yang ditata dengan baik harus mengikuti perilaku ini.Jawaban cobberboy merekomendasikan Font Awesome yang biasanya lebih baik daripada bitmap karena font adalah vektor yang dapat diskalakan. Bekerja dengan HTML di atas, saya menyarankan aturan CSS ini:
Sembunyikan kotak centang
Saya menggunakan hanya negatif
z-index
karena contoh saya menggunakan kulit kotak centang yang cukup besar untuk menutupnya sepenuhnya. Saya tidak merekomendasikanleft: -999px
karena tidak dapat digunakan kembali di setiap tata letak. Jawaban Bushan wagh menyediakan cara antipeluru untuk menyembunyikannya dan meyakinkan browser untuk menggunakan tabindex, jadi itu adalah alternatif yang baik. Pokoknya, keduanya hanya hack. Cara yang tepat hari ini adalahappearance: none
, lihat jawaban Joost :Label kotak centang gaya
Tambahkan skin kotak centang
\00f096
adalah Font Awesome'ssquare-o
, padding disesuaikan untuk memberikan garis putus-putus pada fokus (lihat di bawah).Tambahkan kotak centang kulit yang dicentang
\00f046
adalah Font Awesome'scheck-square-o
, yang tidak sama lebarsquare-o
, yang merupakan alasan untuk gaya lebar di atas.Tambahkan garis fokus
Safari tidak menyediakan fitur ini (lihat komentar @Jason Sankey), Anda harus menggunakannya
window.navigator
untuk mendeteksi browser dan melewatkannya jika itu adalah Safari.Tetapkan warna abu-abu untuk kotak centang yang dinonaktifkan
Atur hover shadow pada kotak centang non-cacat
Demo Fiddle
Cobalah untuk mengarahkan mouse ke kotak centang dan gunakan Tabdan Shift+ Tabuntuk memindahkan dan Spaceberalih.
sumber
Anda dapat menata kotak centang dengan tipu daya kecil menggunakan
label
elemen contoh di bawah ini:Dan FIDDLE untuk kode di atas. Perhatikan bahwa beberapa CSS tidak berfungsi di versi browser yang lebih lama, tapi saya yakin ada beberapa contoh JavaScript yang bagus di luar sana!
sumber
Sederhana untuk diterapkan dan solusi mudah disesuaikan
Setelah banyak pencarian dan pengujian saya mendapatkan solusi ini yang mudah diterapkan dan lebih mudah untuk disesuaikan. Dalam solusi ini :
Sederhana menempatkan CSS yang mengalir di bagian atas halaman Anda dan semua gaya kotak centang akan berubah seperti ini:
sumber
Anda dapat menghindari menambahkan markup tambahan. Ini berfungsi di mana-mana kecuali IE untuk Desktop (tetapi berfungsi di IE untuk Windows Phone dan Microsoft Edge) melalui pengaturan CSS
appearance
:sumber
Saya lebih suka menggunakan font ikon (seperti FontAwesome) karena mudah untuk memodifikasi warna mereka dengan CSS, dan mereka skala sangat baik pada perangkat kepadatan pixel tinggi. Jadi inilah varian CSS murni lainnya, menggunakan teknik yang mirip dengan yang di atas.
(Di bawah ini adalah gambar statis sehingga Anda dapat memvisualisasikan hasilnya; lihat JSFiddle untuk versi interaktif.)
Seperti halnya solusi lain, ia menggunakan
label
elemen. Yang berdekatanspan
memegang karakter kotak centang kami.Inilah JSFiddle untuk itu.
sumber
font-family: FontAwesome;
denganfont-family: 'Font Awesome\ 5 Free';
, dan memperbarui konten unicode jika Anda ingin membuatnya dalam versi baru.Baru-baru ini saya menemukan solusi yang cukup menarik untuk masalah ini.
Anda dapat menggunakan
appearance: none;
untuk mematikan gaya default kotak centang dan kemudian menulis sendiri di atasnya seperti dijelaskan di sini (Contoh 4) .Contoh biola
Tampilkan cuplikan kode
Sayangnya dukungan browser sangat buruk untuk
appearance
opsi. Dari pengujian pribadi saya, saya hanya dapat menggunakan Opera dan Chrome dengan benar. Tapi ini akan menjadi cara untuk membuatnya tetap sederhana ketika dukungan yang lebih baik datang atau Anda hanya ingin menggunakan Chrome / Opera."Bisakah saya menggunakan?" tautan
sumber
appearance
itulah yang kita butuhkan untuk ini; hanya perlu diingat itu "tidak standar dan tidak di jalur standar" .Dengan CSS murni, tidak ada yang disukai
:before
dan:after
, tanpa transformasi, Anda dapat mematikan tampilan default dan menatanya dengan gambar latar inline seperti contoh berikut. Ini berfungsi di Chrome, Firefox, Safari, dan sekarang Edge (Chromium Edge).sumber
Solusi saya
sumber
Anda cukup menggunakan
appearance: none
di browser modern, sehingga tidak ada gaya default dan semua gaya Anda diterapkan dengan benar:sumber
Ingin TIDAK JavaScript, TIDAK ada perpustakaan eksternal, Kepatuhan aksesibilitas, dan baik Kotak centang dan Tombol Radio?
Saya telah menggulir dan menggulir dan banyak jawaban ini hanya membuang aksesibilitas keluar pintu dan melanggar WCAG di lebih dari satu cara. Saya memasukkan tombol radio karena sebagian besar waktu ketika Anda menggunakan kotak centang khusus Anda ingin tombol radio kustom juga.
biola :
Terlambat ke pesta tetapi entah bagaimana ini masih sulit di
20192020 jadi saya telah menambahkan tiga solusi saya yang dapat diakses dan mudah untuk diterima.Ini semua adalah JavaScript gratis , perpustakaan eksternal * gratis , dan dapat diakses ...
Jika Anda ingin plug-n-play dengan semua ini cukup salin style sheet dari biola, edit kode warna dalam CSS agar sesuai dengan kebutuhan Anda, dan segera lanjutkan. Anda dapat menambahkan ikon tanda centang svg kustom jika Anda ingin untuk kotak centang. Saya telah menambahkan banyak komentar untuk orang-orang non-CSS'y.
Jika Anda memiliki teks yang panjang atau wadah kecil dan menemukan pembungkusan teks di bawah kotak centang atau input tombol radio maka cukup konversi ke divs seperti ini .
Penjelasan yang lebih panjang: Saya membutuhkan solusi yang tidak melanggar WCAG, tidak bergantung pada JavaScript atau perpustakaan eksternal, dan yang tidak memecah navigasi keyboard seperti memilih tab atau bilah spasi, yang memungkinkan acara fokus, solusi yang memungkinkan untuk kotak centang yang dinonaktifkan yang keduanya diperiksa dan dicentang, dan akhirnya solusi di mana saya bisa menyesuaikan tampilan kotak centang namun saya inginkan dengan berbeda
background-color
's,border-radius
,svg
latar belakang, dllSaya menggunakan beberapa kombinasi jawaban ini dari @Jan Turoň untuk menghasilkan solusi saya sendiri yang sepertinya berfungsi cukup baik. Saya telah melakukan biola tombol radio yang menggunakan banyak kode yang sama dari kotak centang untuk membuat ini berfungsi dengan tombol radio juga.
Saya masih mempelajari aksesibilitas, jadi jika saya melewatkan sesuatu, silakan beri komentar dan saya akan mencoba memperbaikinya di sini adalah contoh kode dari kotak centang saya:
sumber
Berikut ini adalah solusi CSS sederhana tanpa kode jQuery atau JavaScript.
Saya menggunakan ikon FontAwseome tetapi Anda dapat menggunakan gambar apa pun
sumber
label
atauspan
elemen. Itu hanya bekerja!Dari googling saya, ini adalah cara termudah untuk penataan kotak centang. Cukup tambahkan
:after
dan:checked:after
CSS berdasarkan desain Anda.sumber
Ubah gaya kotak centang dengan CSS3 polos, tidak memerlukan manipulasi JS & HTML.
sumber
Template yang sederhana dan ringan juga:
https://jsfiddle.net/rvgccn5b/
sumber
input
s hanya didukung di Chrome, kode Anda tidak berfungsi sama di setiap browser.Saya pikir cara termudah untuk melakukannya adalah dengan menata
label
dan membuatcheckbox
tidak terlihat.HTML
CSS
The
checkbox
, meskipun tersembunyi, masih dapat diakses, dan nilainya akan dikirim ketika formulir dikirimkan. Untuk browser lama Anda mungkin harus mengubah kelas darilabel
untuk diperiksa menggunakan JavaScript karena saya tidak berpikir versi lama Internet Explorer memahami::checked
padacheckbox
.sumber
::checked
salah — seharusnya:checked
. (b)checkbox
salah — seharusnya[type=checkbox]
Astaga! Semua solusi ini telah membawa saya pada kesimpulan bahwa kotak centang HTML agak menyebalkan jika Anda ingin menata.
Sebagai peringatan, ini bukan implementasi CSS. Saya hanya berpikir saya akan berbagi solusi yang saya buat kalau-kalau ada orang lain yang merasa berguna.
Saya menggunakan
canvas
elemen HTML5 .Keuntungannya adalah Anda tidak harus menggunakan gambar eksternal dan mungkin dapat menghemat bandwidth.
Kelemahannya adalah jika browser karena alasan tertentu tidak dapat merendernya dengan benar, maka tidak ada fallback. Meskipun apakah ini tetap menjadi masalah di 2017 masih bisa diperdebatkan.
Memperbarui
Saya menemukan kode lama cukup jelek, jadi saya memutuskan untuk menulis ulang.
Ini demo yang berfungsi .
Versi baru menggunakan prototipe dan pewarisan diferensial untuk membuat sistem yang efisien untuk membuat kotak centang. Untuk membuat kotak centang:
Ini akan segera menambahkan kotak centang ke DOM dan menghubungkan acara. Untuk menanyakan apakah kotak centang dicentang:
Juga penting untuk dicatat adalah bahwa saya menyingkirkan loop.
Perbarui 2
Sesuatu yang saya lalai untuk menyebutkan dalam pembaruan terakhir adalah bahwa menggunakan kanvas memiliki kelebihan lebih dari sekadar membuat kotak centang yang terlihat namun Anda ingin melihatnya. Anda juga bisa membuat kotak centang multi-negara , jika Anda mau.
Saya sedikit memodifikasi yang
Checkbox
digunakan dalam cuplikan terakhir sehingga lebih umum, sehingga memungkinkan untuk "memperpanjang" dengan kotak centang yang memiliki 3 status. Ini demo . Seperti yang Anda lihat, itu sudah memiliki lebih banyak fungsi daripada kotak centang bawaan.Sesuatu untuk dipertimbangkan ketika Anda memilih antara JavaScript dan CSS.
Kode lama, tidak dirancang dengan baik
Demo yang Bekerja
Pertama, atur kanvas
Selanjutnya, cari cara untuk memiliki pembaruan kanvas itu sendiri.
Bagian terakhir adalah membuatnya interaktif. Untungnya, ini sangat sederhana:
Di sinilah Anda mungkin memiliki masalah di IE, karena model penanganan peristiwa aneh mereka dalam JavaScript.
Saya harap ini membantu seseorang; itu pasti sesuai dengan kebutuhan saya.
sumber
unchecked (e.g. unchecked -> checked -> "kinda" checked -> unchecked
; negara dapat mewakili "eksplisit salah", "eksplisit benar", "gunakan default", misalnya). Saya sedang mempertimbangkan untuk menambahkan contoh pada jawabannya.Ini adalah cara paling sederhana dan Anda dapat memilih kotak centang mana yang memberikan gaya ini.
CSS:
HTML:
sumber
Ubah gaya kotak centang Anda dengan cara sederhana.
Inilah tautan JsFiddle
sumber
Ini adalah versi CSS / HTML saja, tidak memerlukan jQuery atau JavaScript sama sekali, HTML sederhana dan bersih dan CSS sangat sederhana dan singkat.
Ini JSFiddle
http://jsfiddle.net/v71kn3pr/
Ini HTML-nya:
Inilah CSS-nya
Ini dapat disesuaikan untuk dapat memiliki masing-masing radio atau kotak centang, gerombolan kotak centang dan kelompok tombol radio.
Ini html / css, akan memungkinkan Anda untuk juga menangkap klik pada label, sehingga kotak centang akan dicentang dan tidak dicentang bahkan jika Anda mengklik hanya pada label.
Jenis kotak centang / tombol radio ini berfungsi dengan baik dalam bentuk apa pun, tidak ada masalah sama sekali. Telah diuji menggunakan PHP, ASP.NET (.aspx), JavaServer Faces , dan ColdFusion juga.
sumber
sumber
sumber
Tidak, Anda masih tidak dapat menata kotak centang itu sendiri, tetapi saya (akhirnya) menemukan cara untuk menata ilusi sambil menjaga fungsionalitas mengklik kotak centang. Ini berarti bahwa Anda dapat beralih bahkan jika kursor tidak diam tanpa risiko memilih teks atau memicu seret-dan-jatuhkan!
Solusi ini mungkin juga cocok dengan tombol radio.
Berikut ini berfungsi di Internet Explorer 9, Firefox 30.0 dan Chrome 40.0.2214.91 dan hanya merupakan contoh dasar. Anda masih dapat menggunakannya dalam kombinasi dengan gambar latar belakang dan elemen pseudo.
http://jsfiddle.net/o0xo13yL/1/
sumber
Karena browser seperti Edge dan Firefox tidak mendukung: before: after pada tag input checkbox, berikut ini adalah alternatif murni dengan HTML dan CSS. Tentu saja Anda harus mengedit CSS sesuai dengan kebutuhan Anda.
Buat HTML untuk kotak centang seperti ini:
Terapkan gaya ini untuk kotak centang untuk mengubah label warna
sumber
Tampaknya Anda dapat mengubah warna kotak centang dalam skala abu-abu hanya dengan menggunakan CSS.
Berikut ini mengonversi kotak centang dari hitam menjadi abu-abu (sesuai keinginan saya):
sumber
Implementasi SCSS / SASS
Pendekatan yang lebih modern
Bagi mereka yang menggunakan SCSS (atau mudah dikonversi ke SASS), berikut ini akan sangat membantu. Secara efektif, buat elemen di sebelah kotak centang, yang merupakan elemen yang akan Anda gaya. Ketika kotak centang diklik, CSS mengatur ulang elemen kakak (ke gaya baru Anda yang dicentang). Kode di bawah ini:
sumber
Peringatan : berikut ini benar pada saat penulisan, tetapi sementara itu hal-hal telah berkembang.
Peramban modern AFAIK menampilkan kotak centang menggunakan kontrol OS asli, jadi tidak ada cara untuk menatanya.
sumber