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.
inputelemen 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.