Pertanyaan CSS pemula. Saya pikir width:auto
sebuah display:block
elemen berarti 'mengisi ruang yang tersedia'. Namun untuk suatu <input>
elemen, tampaknya tidak demikian. Sebagai contoh:
<body>
<form style='background-color:red'>
<input type='text' style='background-color:green;display:block;width:auto'>
</form>
</body>
Dua pertanyaan kemudian:
Apakah ada definisi yang tepat tentang apa lebar: otomatis artinya? Spesifikasi CSS tampak tidak jelas bagi saya, tetapi mungkin saya melewatkan bagian yang relevan.
Apakah ada cara untuk mencapai perilaku yang saya harapkan untuk bidang masukan - yaitu. mengisi ruang yang tersedia seperti elemen level blok lainnya?
Terima kasih!
Jawaban:
Sebuah
<input>
lebar 's dihasilkan dari nyasize
atribut. Default-nyasize
adalah yang mendorong lebar otomatis.Anda dapat mencoba
width:100%
seperti yang diilustrasikan dalam contoh saya di bawah ini.Tidak mengisi lebar:
Lebar isian:
Ukuran lebih kecil, lebar lebih kecil:
MEMPERBARUI
Inilah yang terbaik yang bisa saya lakukan setelah beberapa menit. Ini 1px off di FF, Chrome, dan Safari, dan sempurna di IE. (Masalahnya adalah # ^ & * IE menerapkan batas secara berbeda dari orang lain sehingga tidak konsisten.)
sumber
border:2px inset #eee; margin:-2px
. Belum mengujinya sendiri tapi sesuatu seperti itu."Apakah ada definisi tentang arti lebar: otomatis? Spesifikasi CSS tampaknya tidak jelas bagi saya, tetapi mungkin saya melewatkan bagian yang relevan."
Tidak ada yang benar-benar menjawab pertanyaan poster asli bagian atas.
Inilah jawabannya: http://www.456bereastreet.com/archive/201112/the_difference_between_widthauto_and_width100/
sumber
Seperti yang dinyatakan dalam jawaban lain, lebar: otomatis tidak berfungsi karena lebar yang dihasilkan oleh atribut ukuran masukan, yang tidak dapat disetel ke "otomatis" atau yang serupa.
Ada beberapa solusi yang dapat Anda gunakan untuk membuatnya berfungsi baik dengan model kotak, tetapi sejauh yang saya tahu tidak ada yang fantastis.
Pertama Anda dapat mengatur padding di lapangan menggunakan persentase, pastikan lebar ditambahkan hingga 100%, misalnya:
Hal lain yang dapat Anda coba adalah menggunakan pemosisian absolut, dengan kiri dan kanan disetel ke 0. Menggunakan markup ini:
Dan CSS ini:
Pemosisian absolut ini akan menyebabkan input mengisi fieldset induk secara horizontal, terlepas dari padding atau margin input. Namun kerugian besar dari ini adalah Anda sekarang harus berurusan dengan ketinggian fieldset, yang akan menjadi 0 kecuali Anda mengaturnya. Jika semua input Anda memiliki tinggi yang sama, ini akan bekerja untuk Anda, cukup atur tinggi fieldset ke berapa pun tinggi input yang seharusnya.
Selain ini ada beberapa solusi JS, tetapi saya tidak suka menerapkan gaya dasar dengan JS.
sumber
Karena
input
'swidth
dikendalikan oleh itusize
atribut, ini adalah bagaimana saya menginisialisasi sebuahinput
width
menurut isinya:sumber
#angular
jawaban khusus ini bukan jawaban yang valid untuk pertanyaan OP (dan saya tidak menaikkan suara), saya datang ke topik ini hanya untuk menemukan ide khusus ini.Ini mungkin tidak persis seperti yang Anda inginkan, tetapi solusi saya adalah menerapkan gaya autowidth ke div pembungkus - lalu atur input Anda ke 100%.
sumber
Satu-satunya pilihan yang dapat saya pikirkan adalah menggunakan
width:100%
. Jika Anda ingin memiliki padding pada kolom input juga, daripada hanya menempatkan wadahlabel
di sekitarnya, pindahkan pemformatan ke label itu, sementara juga tentukan padding ke label. Bidang masukan kaku.sumber
Jawaban 1 - "respon" memberikan jawaban / link yang bagus untuk itu. Singkatnya, "auto" adalah defaultnya, jadi ini seperti menghilangkan setiap perubahan pada lebar sebuah elemen
Jawaban 2 - gunakan
width: 100%
saja. Ini akan mengisi 100% dari wadah induk, dalam hal ini, "formulir".sumber
Tautan yang benar-benar luar biasa yang menggambarkan fitur luar biasa yang mutlak:
https://css-tricks.com/snippets/css/a-guide-to-flexbox
https://www.htmllion.com/css-flexbox.html
Intinya:
display: flex;
.flex-grow: 1;
pada setiap elemen yang terkandung.Edit - contoh :
sumber