Katakanlah saya memiliki kotak teks yang ingin saya isi satu baris penuh. Saya akan memberikan gaya seperti ini:
input.wide {display:block; width: 100%}
Ini menyebabkan masalah karena lebarnya didasarkan pada isi kotak teks. Kotak teks memiliki margin, batas, & padding secara default, yang membuat kotak teks lebar 100% lebih besar dari kontainernya.
Misalnya, di sini di sebelah kanan:
Apakah ada cara untuk membuat kotak teks mengisi lebar wadahnya tanpa meluas di luarnya?
Berikut ini beberapa contoh HTML untuk menunjukkan apa yang saya maksud:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" >
<head>
<title>Untitled Page</title>
<style type="text/css">
#outer{border: 1px solid #000; width: 320px; margin: 0px;padding:0px}
#inner{margin: 20px; padding: 20px; background: #999;border: 1px solid #000;}
input.wide {display:block; margin: 0px}
input.normal {display:block; float: right}
</style>
</head>
<body>
<div id="outer">
<div id="inner">
<input type="text" class="wide" />
<input type="text" class="normal" />
<div style="clear:both;"></div>
</div>
</div>
</body>
</html>
Jika ini dijalankan, Anda dapat melihat dengan melihat kotak teks "normal" bahwa kotak teks "lebar" menonjol di luar wadah. Kotak teks "normal" mengapung ke tepi aktual wadah. Saya mencoba membuat kotak teks "lebar" mengisi wadahnya, tanpa melebar melebihi batas seperti kotak teks "normal".
Ya: dengan menggunakan properti 'ukuran-kotak: batas-kotak' properti CSS3, Anda dapat mendefinisikan kembali apa arti 'lebar' untuk menyertakan padding dan border eksternal.
Sayangnya karena ini CSS3, dukungan tidak terlalu matang, dan karena proses spek belum selesai, sementara itu memiliki nama sementara yang berbeda di browser. Begitu:
Alternatif jadul hanya untuk menempatkan jumlah 'padding-right' pada elemen <div> atau <td> yang terlampir sama dengan tentang berapa banyak padding kiri-dan-kanan / batas dalam 'px' menurut Anda browser akan berikan input. (Biasanya 6px untuk IE <8.)
sumber
Ini memecahkan masalah bagi saya!
Tanpa perlu div eksternal. Cukup terapkan ke kotak teks yang Anda berikan.
Dengan properti ini "Properti lebar dan tinggi (dan properti min / maks) mencakup konten, bantalan, dan tepian, tetapi bukan margin"
Lihat deskripsi properti di w3schools .
Semoga ini bisa membantu seseorang!
sumber
Baru saja menemukan masalah ini sendiri, dan satu-satunya solusi yang dapat saya temukan yang berfungsi di semua browser pengujian saya (IE6, IE7, Firefox) adalah sebagai berikut:
Kode:
Di sini, total horizontal overflow untuk elemen input adalah 6px - 2x (padding + border) - jadi kami menetapkan padding-right untuk DIV bagian dalam 6px.
sumber
dukungan ukuran kotak sebenarnya cukup bagus: http://caniuse.com/#search=box-sizing
Jadi, kecuali Anda menargetkan IE7, Anda harus dapat memecahkan masalah seperti ini menggunakan properti ini. Lapisan seperti sass atau kurang memudahkan untuk menangani aturan awalan seperti itu, btw.
sumber
Sebenarnya, itu karena CSS mendefinisikan 100% relatif terhadap seluruh lebar wadah, termasuk margin, batas, dan lapisannya; itu berarti bahwa ruang berhasil. untuk isinya adalah jumlah yang lebih kecil dari 100%, kecuali wadah tidak memiliki margin, batas, atau lapisan.
Ini kontra-intuitif dan dianggap oleh banyak orang sebagai kesalahan yang sekarang kita terjebak . Ini secara efektif berarti bahwa% dimensi tidak baik untuk apa pun selain wadah tingkat atas, dan bahkan kemudian, hanya jika itu tidak memiliki margin, batas atau bantalan.
Perhatikan bahwa margin, batas, dan padding bidang teks adalah termasuk dalam ukuran CSS yang ditentukan untuk itu - itu adalah wadah yang membuang hal-hal.
Saya telah lumayan mengatasinya dengan menggunakan 98%, tapi itu adalah solusi yang kurang sempurna, karena bidang input cenderung semakin pendek karena wadah semakin besar.
EDIT: Saya menemukan pertanyaan serupa - Saya belum pernah mencoba jawaban yang diberikan, dan saya tidak tahu pasti apakah itu berlaku untuk masalah Anda, tetapi sepertinya itu akan terjadi.
sumber
Salah satu solusi yang mungkin berhasil (berfungsi untuk saya) adalah menerapkan margin negatif pada input (kotak teks) ... atau lebar tetap untuk ie7 atau untuk menjatuhkan dukungan ie7. Ini menghasilkan pixel perfect width .. Bagi saya 7 nya jadi saya menambahkan 3 dan 4 tetapi masih pixel perfect ..
Saya memiliki masalah yang sama dan saya benci memiliki divs tambahan untuk perbatasan dll!
Jadi, inilah solusi saya yang sepertinya berhasil!
Anda harus menggunakan stylesheet ie7 only untuk menghindari starhacks.
sumber
Jika Anda tidak dapat menggunakan,
box-sizing:border-box
Anda dapat mencoba menghapuswidth:100%
dan meletakkansize
atribut yang sangat besar di<input>
elemen, namun kekurangannya adalah Anda harus memodifikasi html, dan tidak dapat melakukannya dengan CSS saja:sumber
Jika Anda tidak perlu melakukannya secara dinamis (misalnya, formulir Anda memiliki lebar tetap), Anda dapat mengatur lebar
<input>
elemen anak dengan lebar wadahnya dikurangi dekorasi seperti bantalan, margin, perbatasan, dll .:sumber
Jika Anda tidak dapat menggunakan ukuran kotak (mis. Saat Anda mengonversi HTML ke PDF menggunakan iText). Coba ini:
CSS
HTML
sumber
Ini bekerja:
'Lebar' pertama adalah aturan fallback untuk browser lama.
sumber
Cukup masukan gaya untuk mengimbangi bantalan tambahan. Dalam contoh berikut, padding pada input akan 10px di kiri dan kanan untuk offset padding total 20px:
sumber