Ini adalah salah satu masalah kecil CSS yang terus menerus mengganggu saya. Bagaimana orang-orang di sekitar Stack Overflow menyelaraskan secara vertikal checkboxes
dan browserlabels
secara konsisten ? Setiap kali saya menyelaraskannya dengan benar di Safari (biasanya menggunakan pada ), mereka sepenuhnya mati di Firefox dan IE. Perbaiki di Firefox, dan Safari serta IE pasti akan kacau. Saya membuang waktu untuk hal ini setiap kali saya membuat kode formulir.vertical-align: baseline
input
Berikut kode standar yang saya gunakan:
<form>
<div>
<label><input type="checkbox" /> Label text</label>
</div>
</form>
Saya biasanya menggunakan reset Eric Meyer, jadi elemen form relatif bersih dari penggantian. Menantikan tips atau trik yang Anda tawarkan!
height
danline-height
atribut, memberikan tampilan ke jsfiddle.net/wepw5o57/3position
dantop
akan menyelesaikan masalah ini Contoh: jsfiddle.net/ynkjc22sJawaban:
Setelah lebih dari satu jam mengutak-atik, menguji, dan mencoba gaya markup yang berbeda, saya pikir saya mungkin memiliki solusi yang layak. Persyaratan untuk proyek khusus ini adalah:
Sebelum saya masuk ke penjelasan, saya hanya akan memberi Anda kode:
Berikut ini contoh kerjanya di JSFiddle .
Kode ini mengasumsikan bahwa Anda menggunakan reset seperti Eric Meyer yang tidak mengesampingkan margin input form dan padding (karenanya menempatkan margin dan reset padding di input CSS). Jelas dalam lingkungan hidup Anda mungkin akan bersarang / mengesampingkan hal-hal untuk mendukung elemen input lainnya, tetapi saya ingin menjaga hal-hal sederhana.
Hal yang perlu diperhatikan:
*overflow
deklarasi inline IE hack (hack bintang-properti). Baik IE 6 dan 7 akan menyadarinya, tetapi Safari dan Firefox akan mengabaikannya. Saya pikir itu mungkin CSS yang valid, tetapi Anda masih lebih baik dengan komentar bersyarat; hanya menggunakannya untuk kesederhanaan.vertical-align
pernyataan yang konsisten di seluruh browser adalahvertical-align: bottom
. Pengaturan ini dan kemudian posisi relatif ke atas berperilaku hampir identik di Safari, Firefox dan IE dengan hanya satu atau dua piksel perbedaan.overflow: hidden
karena beberapa alasan memotong ruang ekstra dan memungkinkan pemosisian IE untuk bertindak sangat mirip dengan Safari dan Firefox.Semoga ini bisa membantu orang lain! Saya belum mencoba teknik khusus ini pada proyek apa pun selain yang saya kerjakan pagi ini, jadi pasti pipa jika Anda menemukan sesuatu yang bekerja lebih konsisten.
sumber
Kadang-kadang vertikal-align membutuhkan dua elemen inline (span, label, input, dll ...) di samping satu sama lain agar berfungsi dengan baik. Kotak centang berikut dipusatkan dengan benar di IE, Safari, FF, dan Chrome, meskipun ukuran teks sangat kecil atau besar.
Mereka semua mengapung di sebelah satu sama lain di baris yang sama, tetapi nowrap berarti bahwa seluruh teks label selalu berada di sebelah kotak centang.
Kelemahannya adalah tag SPAN ekstra yang tidak berarti.
Sekarang, jika Anda memiliki teks label yang sangat panjang yang perlu dibungkus tanpa membungkus di bawah kotak centang, Anda akan menggunakan teks teks padding dan negatif pada elemen label:
sumber
display: block; float: left;
tampaknya berlebihanBekerja dari solusi One Crayon , saya memiliki sesuatu yang bekerja untuk saya dan lebih sederhana:
Render pixel-for-pixel yang sama di Safari (yang dasar saya percaya) dan baik Firefox dan IE7 memeriksa baik. Ini juga berfungsi untuk berbagai ukuran font label, besar dan kecil. Sekarang, untuk memperbaiki garis dasar IE pada seleksi dan input ...
Pembaruan: (Edit Pihak Ketiga)
Posisi yang tepat
bottom
tergantung pada font-family dan ukuran font! Saya menemukan menggunakanbottom: .08em;
untuk kotak centang & elemen radio adalah nilai umum yang baik. Saya mengujinya di Chrome / Firefox / IE11 di windows dengan font Arial & Calibri menggunakan beberapa ukuran font kecil / sedang / besar.sumber
Satu hal mudah yang tampaknya berfungsi dengan baik adalah menerapkan penyesuaian posisi vertikal kotak centang dengan penyelarasan vertikal. Itu masih akan bervariasi di seluruh browser, tetapi solusinya tidak rumit.
Referensi
sumber
vertical-align
danposition: relative
karena itu juga bekerja di IE9 dengan benar :)em
mencoba
vertical-align: middle
juga kode Anda sepertinya:
sumber
<label for="blah">
hanya diperlukan jika Anda menggunakan sesuatu yang tidak masuk akal untuk dibungkus label (seperti kotak teks; Saya biasanya akan menggunakan<label for="blah">Foo</label><input id="blah" type="text" />
contoh itu). Dengan kotak centang, saya merasa lebih sedikit markup untuk membungkusnya.Coba solusi saya, saya mencobanya di IE 6, FF2 dan Chrome dan itu membuat piksel demi piksel di ketiga browser.
sumber
Satu-satunya solusi yang berfungsi dengan baik bagi saya adalah:
Diuji hari ini di Chrome, Firefox, Opera, IE 7 dan 8. Contoh: Fiddle
sumber
Saya belum sepenuhnya menguji solusi saya, tetapi tampaknya berhasil dengan baik.
HTML saya sederhana:
Saya kemudian mengatur semua kotak centang
24px
untuk tinggi dan lebar. Untuk membuat teks sejajar, saya membuat labelline-height
juga24px
dan menetapkanvertical-align: top;
seperti:EDIT: Setelah pengujian IE saya menambahkan
vertical-align: bottom;
input dan mengubah CSS label. Anda mungkin menemukan Anda membutuhkan case css IE bersyarat untuk memilah padding - tetapi teks dan kotak inline.Jika ada yang menemukan bahwa ini tidak berhasil, mohon beri tahu saya. Ini dia beraksi (di Chrome dan IE - permintaan maaf karena tangkapan layar diambil pada retina dan menggunakan paralel untuk IE):
sumber
Saya biasanya menggunakan ketinggian garis untuk menyesuaikan posisi vertikal teks statis saya:
Semoga itu bisa membantu.
sumber
Caranya adalah dengan menggunakan perataan vertikal hanya dalam sel tabel atau blok inline jika menggunakan tag label.
sumber
Akhirnya mari kita lihat sumber masalahnya
Kotak centang diberikan menggunakan gambar (satu dapat mengatur yang khusus melalui CSS). Berikut adalah kotak centang (tidak dicentang) di FireFox, disorot dengan inspektur DOM:
Dan inilah kotak centang tanpa gaya yang sama di Chrome:
Anda dapat melihat margin (oranye); padding tidak ada (akan ditampilkan hijau). Jadi, apa margin palsu ini di sebelah kanan dan di bawah kotak centang? Ini adalah bagian dari gambar yang digunakan untuk kotak centang . Itu sebabnya menggunakan hanya
vertical-align: middle
tidak cukup dan itu adalah sumber masalah lintas-browser.Jadi apa yang bisa kita lakukan tentang ini?
Salah satu opsi yang jelas adalah - ganti gambar! Untungnya, seseorang dapat melakukan ini melalui CSS dan menggantinya dengan gambar eksternal, gambar base64 (in-CSS), in-CSS svg atau hanya elemen pseudo. Ini adalah pendekatan yang kuat (lintas browser!), Dan ini adalah contoh penyesuaian yang dicuri dari pertanyaan ini :
Anda mungkin ingin membaca lebih banyak artikel mendalam tentang gaya seperti itu seperti beberapa yang tercantum di sini ; itu di luar jangkauan jawaban ini.
Ok, masih bagaimana dengan solusi no-custom-images-or-pseudo-elements?
TL; DR: sepertinya ini tidak akan berfungsi, gunakan kotak centang khusus sebagai gantinya
Pertama, mari kita perhatikan bahwa jika di browser lain ikon pseudo-margin di dalam kotak centang itu berubah-ubah, tidak ada solusi yang konsisten. Untuk membangunnya, kita harus menjelajahi anatomi gambar seperti itu di browser yang ada.
Jadi browser apa yang memiliki margin semu di kotak centang? Saya sudah memeriksa Chrome 75, Vivaldi 2.5 (berbasis Chromium), FireFox 54 (jangan tanya kenapa ketinggalan jaman), IE 11, Edge 42, Safari ?? (meminjam satu menit, lupa memeriksa versinya). Hanya Chrome dan Vivaldi yang memiliki margin semu seperti itu (saya menduga semua browser berbasis Chromium juga, seperti Opera).
Berapa ukuran margin semu itu? Untuk mengetahui ini, orang dapat menggunakan kotak centang yang diperbesar:
hasil saya adalah ~ 7% dari lebar / tinggi dan karenanya 0,9-1.0px dalam satuan absolut. Akurasi mungkin dipertanyakan, meskipun: coba nilai yang berbeda
zoom
untuk kotak centang. Dalam pengujian saya di Chrome dan Vivaldi, ukuran relatif dari margin semu sangat berbeda padazoom
nilai 10, 20 dan pada nilai 11-19 (??):scale
tampaknya lebih konsisten:jadi mungkin ~ 14% dan 2px adalah nilai yang benar.
Sekarang kita tahu (?) Ukuran pseudo-margin, mari kita perhatikan ini tidak cukup. Apakah ukuran ikon kotak centang sama untuk semua browser? Sayang! Inilah yang diperlihatkan oleh pemeriksa DOM untuk kotak centang yang tidak distilasi:
Sekarang sebelum kita membahas solusi atau trik, mari kita tanyakan: apa yang benar penyelarasan yang ? Apa yang ingin kita capai? Untuk titik tertentu itu masalah selera, tetapi pada dasarnya saya bisa memikirkan aspek "bagus" berikut:
teks dan kotak centang pada baseline yang sama (saya sengaja tidak menyesuaikan ukuran kotak centang di sini):
atau memiliki garis tengah yang sama dalam hal huruf kecil:
atau garis tengah yang sama dalam hal huruf kapital (lebih mudah untuk melihat perbedaan untuk ukuran font yang berbeda):
dan juga kita harus memutuskan apakah ukuran kotak centang harus sama dengan tinggi huruf kecil, huruf besar atau yang lain (lebih besar, lebih kecil atau antara huruf kecil dan kapital).
Untuk diskusi ini, mari panggil alignment nice jika kotak centang berada pada baseline yang sama dengan teks dan memiliki ukuran huruf kapital (pilihan yang sangat diperdebatkan):
Sekarang alat apa yang harus kita miliki:
?
Mengenai ukuran kotak centang penyesuaian : ada
width
,height
,size
,zoom
,scale
(memiliki aku melewatkan sesuatu?).zoom
danscale
jangan izinkan untuk mengatur ukuran absolut, sehingga mereka hanya dapat membantu dengan menyesuaikan ke ukuran teks, tidak mengatur ukuran lintas-browser (kecuali kita dapat menulis aturan khusus browser).size
tidak bekerja dengan Chrome (apakah itu bekerja dengan IE lama? Lagi pula, itu tidak menarik).width
danheight
bekerja di Chrome dan peramban lain, sehingga kami dapat menetapkan ukuran umum, tetapi sekali lagi, di Chrome itu menetapkan ukuran seluruh gambar, bukan kotak centang itu sendiri. Catatan: minimum (lebar, tinggi) yang menentukan ukuran kotak centang (jika lebar ≠ tinggi, area di luar kotak centang ditambahkan ke "pseudo-margin").Sayangnya, pseudo-margin di kotak centang Chrome tidak disetel ke nol untuk lebar dan ketinggian apa pun, sejauh yang saya bisa lihat.
Saya khawatir tidak ada metode hanya CSS yang dapat diandalkan hari ini.
Mari kita pertimbangkan perataan vertikal.
vertical-align
tidak dapat memberikan hasil yang konsisten ketika disetel kemiddle
ataubaseline
karena margin semu Chrome, satu-satunya opsi nyata untuk mendapatkan "sistem koordinat" yang sama untuk semua browser adalah menyelaraskan label dan input ketop
:(pada gambar: penyelarasan vertikal: atas, bawah dan bawah tanpa bayangan kotak)
Jadi apa hasil yang kita dapatkan dari ini?
Cuplikan di atas berfungsi dengan Chrome (browser berbasis Chromium), tetapi browser lain memerlukan ukuran yang lebih kecil dari kotak centang. Tampaknya tidak mungkin untuk menyesuaikan ukuran dan perataan vertikal dengan cara yang bekerja di sekitar kekhasan gambar kotak centang Chromium. Saran terakhir saya adalah: gunakan kotak centang khusus - dan Anda akan menghindari frustrasi :)
sumber
Sekarang flexbox didukung di semua browser modern, sesuatu seperti ini sepertinya pendekatan yang lebih mudah bagi saya.
Inilah demo versi awalan lengkap:
Tampilkan cuplikan kode
sumber
Saya pikir ini adalah cara termudah
sumber
Saya tidak suka posisi relatif karena itu membuat elemen yang diberikan di atas segalanya pada levelnya (bisa mendapatkan di atas sesuatu jika Anda memiliki tata letak yang kompleks).
Saya telah menemukan yang
vertical-align: sub
membuat kotak centang terlihat cukup baik selaras di Chrome, Firefox dan Opera. Tidak dapat memeriksa Safari karena saya tidak memiliki MacOS dan IE10 sedikit tidak aktif, tetapi saya merasa ini solusi yang cukup baik untuk saya.Solusi lain mungkin untuk mencoba dan membuat CSS spesifik untuk setiap browser dan menyempurnakannya dengan beberapa penyelarasan vertikal dalam% / piksel / EM: http://css-tricks.com/snippets/css/browser-specific-hacks/
sumber
Ini bekerja dengan baik untuk saya:
sumber
Jawaban yang dipilih dengan 400+ upvotes tidak berfungsi untuk saya di Chrome 28 OSX, mungkin karena itu tidak diuji dalam OSX atau bahwa itu bekerja di apa pun di sekitar tahun 2008 ketika pertanyaan ini dijawab.
Waktu telah berubah, dan solusi CSS3 baru sekarang layak. Solusi saya menggunakan pseudoelements untuk membuat kotak centang khusus . Jadi ketentuannya (pro atau kontra, namun Anda melihatnya) adalah sebagai berikut:
Solusi ini menyembunyikan kotak centang , dan menambah dan gaya pseudoelements ke label untuk membuat kotak centang yang terlihat. Karena label terkait dengan kotak centang tersembunyi, bidang input masih akan diperbarui dan nilai akan dikirimkan bersama formulir.
Dan jika Anda tertarik, inilah pendapat saya tentang tombol radio: http://jsfiddle.net/DtKrV/2/
Semoga seseorang menemukan ini berguna!
sumber
Saya tidak pernah memiliki masalah dengan melakukannya seperti ini:
sumber
Jika Anda menggunakan Formulir Web ASP.NET Anda tidak perlu khawatir tentang DIV dan elemen lain atau ukuran tetap. Kami dapat menyelaraskan
<asp:CheckBoxList>
teks dengan mengaturfloat:left
ke tipe input CheckboxList di CSS.Silakan periksa kode contoh berikut:
.Aspx kode:
sumber
Jika Anda menggunakan Bootstrap Twitter, Anda bisa menggunakan
checkbox
kelas di<label>
:sumber
Dengan kotak centang tipe input yang dibungkus di dalam label dan melayang ke kiri seperti:
ini bekerja untuk saya:
Pastikan ketinggian identik dengan garis-tinggi (blocklevel).
sumber
Cetak kode tinggi dan lebar kotak centang, lepas padding-nya, dan buat tingginya ditambah margin vertikal sama dengan tinggi-line label. Jika teks label inline, apungkan kotak centang. Firefox, Chrome, dan IE7 + memberikan contoh berikut secara identik: http://www.kornea.com/css-checkbox-align
sumber
sumber
Saya biasanya meninggalkan kotak centang tanpa label dan kemudian membuat "label" nya sebagai elemen yang terpisah. Ini menyebalkan, tetapi ada banyak perbedaan antar browser antara bagaimana kotak centang dan labelnya ditampilkan (seperti yang Anda perhatikan) bahwa ini adalah satu-satunya cara saya bisa mengendalikan bagaimana segala sesuatu terlihat.
Saya juga akhirnya melakukan ini dalam pengembangan winforms, untuk alasan yang sama. Saya pikir masalah mendasar dengan kontrol kotak centang adalah bahwa itu benar-benar dua kontrol yang berbeda: kotak dan label. Dengan menggunakan kotak centang, Anda menyerahkannya kepada pelaksana kontrol untuk memutuskan bagaimana kedua elemen tersebut ditampilkan di sebelah satu sama lain (dan mereka selalu salah, di mana salah = bukan apa yang Anda inginkan).
Saya sangat berharap seseorang memiliki jawaban yang lebih baik untuk pertanyaan Anda.
sumber
CSS:
HTML:
Kode di atas akan menempatkan item daftar Anda dalam threecol dan hanya mengubah lebar sesuai.
sumber
Berikut ini memberikan konsistensi pixel-sempurna di seluruh browser, bahkan IE9:
Pendekatannya cukup masuk akal, sampai-sampai jelas:
Ini menghasilkan aturan umum yang berlaku secara global:
Dengan ukuran font yang dapat disesuaikan per formulir, bidang, atau elemen.
Diuji di Chrome, Safari, dan Firefox terbaru di Mac, Windows, Iphone, dan Android. Dan IE9.
Metode ini kemungkinan berlaku untuk semua jenis input yang tidak lebih tinggi dari satu baris teks. Terapkan aturan jenis yang sesuai.
sumber
Jadi saya tahu ini telah dijawab berkali-kali, tetapi saya merasa saya memiliki solusi yang jauh lebih elegan daripada yang sudah disediakan. Dan bukan hanya 1 solusi elegan, tapi 2 solusi terpisah untuk menggelitik kesukaan Anda. Dengan itu, semua yang perlu Anda ketahui dan lihat terkandung dalam 2 JS Fiddle, dengan komentar.
Solusi # 1 bergantung pada "Kotak centang" asli dari browser yang diberikan, meskipun dengan twist ... Yang terkandung dalam div yang lebih mudah untuk memposisikan cross-browser, dengan overflow: disembunyikan untuk memotong kelebihan kotak centang 1px membentang (Ini agar Anda tidak bisa melihat batas FF yang jelek)
HTML sederhana: (ikuti tautan untuk meninjau css dengan komentar, blok kode adalah untuk memenuhi stackoverflow) http://jsfiddle.net/KQghJ/
Solusi # 2 menggunakan "Checkbox Toggle Hack" untuk beralih keadaan CSS dari DIV, yang telah diposisikan dengan benar di seluruh browser, dan setup dengan sprite sederhana untuk kotak centang tidak dicentang dan diperiksa. Semua yang diperlukan adalah menyesuaikan posisi latar belakang dengan kata Checkbox Toggle Hack. Ini, menurut saya, adalah solusi yang lebih elegan karena Anda memiliki kontrol lebih besar atas kotak centang & radio Anda, dan dapat menjamin semuanya terlihat sama di seluruh browser.
HTML sederhana: (ikuti tautan untuk mengulas CSS dengan komentar, blok kode adalah untuk memuaskan StackOverflow) http://jsfiddle.net/Sx5M2/
Jika ada yang tidak setuju dengan metode ini, silakan tinggalkan saya komentar, saya akan senang mendengar umpan balik tentang mengapa orang lain belum menemukan solusi ini, atau jika mereka punya, mengapa saya tidak melihat jawaban di sini mengenai mereka? Jika ada yang melihat salah satu dari metode ini gagal, akan menyenangkan untuk melihatnya juga, tetapi ini telah diuji di browser terbaru dan mengandalkan metode HTML / CSS yang cukup lama, dan universal sejauh yang saya lihat.
sumber
Yay terima kasih! Ini juga telah membuatku gila selamanya.
Dalam kasus khusus saya, ini bekerja untuk saya:
Saya menggunakan reset.css yang mungkin menjelaskan beberapa perbedaan, tetapi ini tampaknya bekerja dengan baik untuk saya.
sumber
position: relative;
memiliki beberapa masalah di IE dengan z-index dan animasi seperti slideUp / slideDown jQuery.CSS:
jQuery:
Penataan mungkin membutuhkan penyesuaian tergantung pada ukuran font yang digunakan
<label>
PS:
Saya menggunakan ie7js untuk membuat css bekerja di IE6.
sumber
Gunakan sederhana
vertical-align: sub
, seperti pokrishka sudah disarankan.Biola
Kode HTML:
Kode CSS:
sumber
Solusi sederhana:
Diuji di Chrome, Firefox, IE9 +, Safari, iOS 9+
sumber