Saya memiliki cuplikan CSS dan HTML berikut ini sedang ditampilkan.
textarea
{
border:1px solid #999999;
width:100%;
margin:5px 0;
padding:3px;
}
<div style="display: block;" id="rulesformitem" class="formitem">
<label for="rules" id="ruleslabel">Rules:</label>
<textarea cols="2" rows="10" id="rules"/>
</div>
Apakah masalahnya adalah area teks menjadi 8px lebih lebar (2px untuk batas + 6px untuk bantalan) daripada induknya. Apakah ada cara untuk terus menggunakan border dan padding tetapi membatasi ukuran total textarea
dengan lebar induk?
html
css
stylesheet
Eric Schoonover
sumber
sumber
Jawaban:
Mengapa tidak melupakan peretasan dan lakukan dengan CSS?
Yang sering saya gunakan:
Lihat dukungan browser di sini .
sumber
Jawaban untuk banyak masalah pemformatan CSS tampaknya adalah "tambahkan lagi <div>!"
Jadi, dalam semangat itu, sudahkah Anda mencoba menambahkan pembungkus div yang batas / padding diterapkan dan kemudian meletakkan textarea lebar 100% di dalamnya? Sesuatu seperti (belum diuji):
sumber
mari kita pertimbangkan hasil akhir yang diberikan kepada pengguna tentang apa yang ingin kita capai: sebuah textarea empuk dengan baik perbatasan dan padding, yang karakteristiknya adalah bahwa diklik mereka memberikan fokus ke textarea kita, dan keuntungan dari lebar 100% otomatis tipikal elemen blok.
Pendekatan terbaik menurut saya adalah menggunakan solusi tingkat rendah sejauh mungkin, untuk mencapai dukungan browser maksimum. Dalam hal ini satu-satunya HTML bisa berfungsi dengan baik, menghindari penggunaan Javascript (yang bagaimanapun kita semua suka).
Tag LABEL datang dalam bantuan kami karena memiliki perilaku seperti itu dan diizinkan mengandung elemen input yang harus dialaminya. Gaya standarnya adalah salah satu elemen sebaris, jadi, dengan memberi label gaya tampilan blok, kami dapat memanfaatkan lebar 100% otomatis termasuk padding dan border, sedangkan textarea bagian dalam tidak memiliki batas, tanpa padding, dan lebar 100% .
Melihat pada spesifik W3C keuntungan lain yang mungkin kita perhatikan adalah:
Lihat spesifikasi W3C untuk informasi lebih rinci.
Contoh sederhana:
Padding dan border elemen .textareaContainer adalah elemen yang ingin kami berikan kepada textarea. Coba edit mereka untuk mengubahnya sesuai keinginan. Saya memberi padding besar dan terlihat dan berbatasan dengan elemen .textareaContainer untuk membiarkan Anda melihat perilaku mereka ketika diklik.
sumber
Jika Anda tidak terlalu peduli tentang lebar padding, solusi ini sebenarnya akan menjaga padding dalam persentase juga ..
Tidak sempurna, tetapi Anda akan mendapatkan lapisan dan lebarnya menambahkan hingga 100% jadi semuanya bagus
sumber
Saya menemukan solusi lain di sini yang sangat sederhana: tambahkan padding-right ke wadah textarea. Ini menjaga margin, batas, dan bantalan pada textarea, yang menghindari masalah yang ditunjukkan Beck tentang sorotan fokus yang diletakan chrome dan safari di sekitar textarea.
Padding-right penampung harus merupakan jumlah margin efektif, batas, dan pelapis di kedua sisi textarea, ditambah setiap pelapis yang mungkin Anda inginkan untuk wadah. Jadi, untuk kasus di pertanyaan awal:
sumber
Kode ini berfungsi untuk saya dengan IE8 dan Firefox
sumber
Anda dapat menggunakan properti ukuran kotak, didukung oleh semua browser yang memenuhi standar utama dan IE8 +. Anda masih membutuhkan solusi untuk IE7. Baca lebih lanjut di sini .
sumber
Tidak, Anda tidak dapat melakukannya dengan CSS. Itulah alasan Microsoft awalnya memperkenalkan model kotak yang lain, dan mungkin lebih praktis . Model kotak yang akhirnya menang, membuatnya tidak praktis untuk mencampur persentase dan unit.
Saya tidak berpikir itu baik-baik saja dengan Anda untuk mengekspresikan padding dan lebar perbatasan dalam persentase orang tua juga.
sumber
Saya mencari solusi inline-styling daripada solusi CSS, dan ini adalah yang terbaik yang bisa saya lakukan untuk textarea responsif:
sumber
Jika Anda membalut dan mengimbanginya seperti ini:
sisi kanan textarea benar-benar sejajar dengan sisi kanan wadah, dan teks di dalam textarea sejajar sempurna dengan teks tubuh dalam wadah ... dan sisi kiri textarea 'menonjol keluar' sedikit. terkadang lebih cantik.
sumber
Gunakan properti ukuran kotak :
Itu akan membantu
sumber
Bagi orang-orang yang menggunakan Bootstrap, textarea.form-control dapat menyebabkan masalah ukuran textarea juga. Chrome dan Firefox tampaknya menggunakan ketinggian yang berbeda dengan Bootstrap CSS berikut:
sumber
Saya sering memperbaiki masalah itu dengan
calc()
. Anda cukup memberi textarea lebar 100% dan jumlah padding tertentu, tetapi Anda harus mengurangi total padding kiri dan kanan dari lebar 100% yang Anda berikan ke textarea:Atau jika Anda ingin memberikan teks perbatasan:
sumber
Bagaimana dengan margin negatif?
sumber
sumber