Mengapa display:block;width:auto;
pada input teks saya tidak berperilaku seperti div dan mengisi lebar kontainer?
Saya mendapat kesan bahwa div hanyalah elemen blok dengan lebar otomatis. Dalam kode berikut tidak boleh div dan input memiliki dimensi yang identik?
Bagaimana saya mendapatkan input untuk mengisi lebar? Lebar 100% tidak akan berfungsi, karena input memiliki bantalan dan batas (menyebabkan lebar akhir 1 piksel + 5 piksel + 100% + 5 piksel + 1 piksel). Memperbaiki lebar bukan pilihan, dan saya mencari sesuatu yang lebih fleksibel.
Saya lebih suka jawaban langsung untuk solusi. Ini tampak seperti kekhasan CSS dan memahaminya mungkin berguna nantinya.
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
<html>
<head>
<title>width:auto</title>
<style>
div, input {
border: 1px solid red;
height: 5px;
padding: 5px;
}
input, form {
display: block;
width: auto;
}
</style>
</head>
<body>
<div></div>
<form>
<input type="text" name="foo" />
</form>
</body>
</html>
Saya harus menunjukkan saya sudah bisa melakukan ini dengan solusi pembungkus. Terlepas dari mengacaukan dengan semantik halaman dan hubungan pemilih CSS, saya mencoba memahami sifat masalah dan apakah itu dapat diatasi dengan mengubah sifat INPUT itu sendiri.
Ok, ini SANGAT aneh! Saya telah menemukan bahwa solusinya adalah dengan menambahkan max-width:100%
ke input width:100%;padding:5px;
. Namun ini menimbulkan lebih banyak pertanyaan (yang akan saya tanyakan dalam pertanyaan terpisah), tetapi tampaknya lebar menggunakan model kotak CSS normal dan lebar maksimum menggunakan model kotak batas Internet Explorer. Aneh sekali.
Oke, yang terakhir itu sepertinya adalah bug di Firefox 3. Internet Explorer 8 dan Safari 4 membatasi lebar max hingga 100% + padding + border yang menurut spesifikasi harus dilakukan. Akhirnya, Internet Explorer melakukan sesuatu yang benar.
Ya Tuhan, ini luar biasa! Dalam proses bermain dengan ini, dan dengan banyak bantuan dari guru terhormat Dean Edwards dan Erik Arvidsson , saya berhasil menyatukan tiga solusi terpisah untuk membuat cross-browser sejati 100% lebar pada elemen dengan padding dan border sewenang-wenang. Lihat jawaban di bawah ini. Solusi ini tidak memerlukan markup HTML tambahan, hanya kelas (atau pemilih) dan perilaku opsional untuk warisan Internet Explorer.
input
elemen yang tampaknya tidak sesuai dengan spesifikasi CSS 2.1, sementara pertanyaan yang Anda tautkan menanyakan bagaimana mencegah kotak berlebih yang terjadi dengan sempurna dalam batas-batas spesifikasi CSS 2.1. Baik pertanyaan dan solusinya tumpang tindih tetapi menyebutnya duplikat yang tepat sama sekali salah.Jawaban:
Lihat apa yang saya temukan, solusi menggunakan gaya yang relatif tidak diketahui
box-sizing:border-box
dari CSS 3. Ini memungkinkan lebar 100% 'benar' pada elemen apa pun terlepas dari padding dan / atau batas elemen tersebut.Solusi ini mendukung Internet Explorer 6 dan Internet Explorer 7 melalui perilaku yang ditulis oleh Erik Arvidsson dengan beberapa penyesuaian dari Dean Edwards untuk mendukung persentase dan lebar non-pixel lainnya.
Contoh kerja
Behavior (boxsizing.htc)
sumber
width:100%
tetapi tidak jika Anda menggunakanwidth:auto
, lihat di sini: jsfiddle.net/hGuzEAlasan ini terjadi adalah bahwa ukuran input teks ditentukan oleh atribut ukurannya. tambahkan size = "50" di dalam tag <input>. Kemudian ubah ke size = "100" - lihat apa yang saya maksud?
Saya menduga ada solusi yang lebih baik, tetapi satu-satunya yang terlintas dalam pikiran adalah sesuatu yang saya temukan pada pertanyaan "Fitur tersembunyi HTML" pada SO: Gunakan div yang dapat diedit konten, alih-alih input. Melewati input pengguna ke formulir terlampir (jika itu yang Anda butuhkan) mungkin sedikit rumit.
Fitur tersembunyi dari HTML
sumber
button
yang tidak memilikisize
atribut?input
elemen yang diganti.Taruhan terbaik Anda adalah untuk membungkus input dalam div dengan batas, margin, dll., Dan masukkan input dengan lebar 100% dan tanpa batas, tanpa margin, dll.
Sebagai contoh,
sumber
Anda bisa memalsukannya, seperti ini:
sumber
Coba ini:
sumber
Anda juga bisa memalsukannya, seperti ini:
sumber
Tambahkan ini ke gaya Anda:
sumber