Cara membuat textarea
<textarea> adalah kolom teks untuk lebih dari satu baris: pesan, komentar, deskripsi. rows mengatur tinggi yang terlihat dalam jumlah baris. Ketik beberapa baris lalu tekan Send:
Ada dua hal yang berbeda dari <input>: textarea butuh tag penutup, dan teks awalnya ditulis di antara tag, bukan di atribut value. name-nya dikirim dengan teksnya sebagai nilai, termasuk pindah barisnya.
Atribut textarea
| Atribut | Fungsinya |
|---|---|
name | Kunci yang dipakai untuk mengirim teksnya |
rows | Tinggi yang terlihat dalam baris (default 2) |
cols | Lebar yang terlihat dalam karakter (default 20); width di CSS biasanya lebih baik |
placeholder | Petunjuk yang ditampilkan selama kolomnya kosong |
maxlength, minlength | Batas panjang dalam karakter |
required | Tidak boleh kosong |
readonly | Bisa dipilih dan disalin, tidak bisa diedit; tetap dikirim |
disabled | Tidak bisa dipakai; tidak dikirim |
wrap | soft (default) atau hard, lihat di bawah |
spellcheck | true atau false |
Teks default ditulis di antara tag
Semua yang ada di antara <textarea> dan </textarea> adalah teks awalnya, persis seperti yang ditulis: termasuk spasi, tab dan pindah baris. Hanya satu pindah baris tepat sesudah tag pembuka yang diabaikan. Karena itu indentasi bisa menjadi jebakan:
Textarea kedua diawali empat spasi dan diakhiri pindah baris serta dua spasi lagi, yang semuanya harus dihapus pembaca. Tulis teks default-nya menempel langsung ke tag.
HTML di dalam textarea tidak dirender; <b>hi</b> di antara tag-nya tampil sebagai teks apa adanya.
Lebar, mengubah ukuran dan membesar otomatis
Browser membuat pembaca bisa menarik sudut textarea untuk mengubah ukurannya. resize di CSS membatasinya, dan width: 100% dengan box-sizing: border-box membuatnya memenuhi container-nya dengan pas:
Textarea terakhir mengatur ulang tingginya lalu mengaturnya menjadi scrollHeight (tinggi konten dan padding-nya) ditambah border-nya, setiap kali ada tombol yang ditekan. Ketik beberapa baris di sana: textarea itu tidak pernah menampilkan scrollbar. resize: vertical adalah default yang paling ramah: jawaban panjang mendapat ruang, dan tidak ada yang bisa menarik kolomnya lebih lebar dari layout.
Browser berbasis Chromium bisa membuat textarea membesar otomatis hanya dengan CSS lewat field-sizing: content. Browser yang belum mendukungnya mengabaikan baris itu dan tetap memakai ukuran normal, jadi aman ditambahkan, tapi pertahankan script-nya kalau setiap pembaca harus mendapat kotak yang membesar.
maxlength dan penghitung karakter
maxlength menghentikan input pada jumlah karakter tertentu. Kalau dipakai sendirian, atribut ini tidak memberi peringatan apa pun, jadi pembaca baru sadar saat ketikannya tidak lagi berfungsi. Penghitung memperbaikinya:
aria-describedby membuat screen reader membacakan penghitung bersama kolomnya, dan aria-live="polite" mengumumkan perubahannya di sela-sela ketikan. maxlength hanya ditegakkan oleh browser, jadi server juga harus memeriksa panjangnya.
Pindah baris di teks yang dikirim
Pindah baris yang diketik pembaca ikut dikirim bersama teksnya. Di data yang dikirim, setiap pindah baris menjadi pasangan carriage return dan line feed (%0D%0A di form dengan URL encoding), yang diharapkan oleh kebanyakan server. Untuk menampilkan teks itu di halaman nanti beserta pindah barisnya, ubah menjadi <br> saat ditampilkan atau atur gaya elemennya dengan white-space: pre-line.
wrap="hard" (yang butuh cols) melangkah lebih jauh: atribut ini juga menyisipkan pindah baris di tempat teksnya terbungkus secara visual, sehingga server menerima baris yang tidak lebih panjang dari cols karakter. Nilai default-nya, wrap="soft", hanya mengirim pindah baris yang diketik pembaca.
Styling textarea
Chrome dan Firefox memberi textarea font monospace sekitar 13px, dan itulah kenapa textarea sering terlihat tidak cocok dengan halamannya. font: inherit memperbaikinya. Pertahankan gaya fokus yang terlihat kalau kamu mengubah border-nya:
Teks placeholder sebaiknya punya kontras yang cukup untuk dibaca; abu-abu muda yang dipakai banyak desain sulit dibaca. Dan seperti di setiap kolom, placeholder bukan label: placeholder hilang begitu pembaca mengetik. Label dibahas di label HTML.
Kesalahan umum
<textarea value="...">. Tidak ada atributvalue; letakkan teksnya di antara tag.- Memberi indentasi pada teks default mengikuti HTML-nya. Spasinya menjadi bagian dari nilai.
<textarea />yang menutup sendiri. Textarea bukan void element; tanpa</textarea>, sisa halaman tertelan ke dalamnya sebagai teks.- Tanpa
font: inherit, sehingga kolomnya memakai font monospace yang kecil. resize: nonedengan tinggi tetap yang kecil. Jawaban panjang berakhir di kotak kecil yang harus digulir.- Hanya mengandalkan
maxlength. Validasi panjangnya di server juga.
Pertanyaan yang sering diajukan
Bagaimana cara membuat textarea di HTML?
Tulis <textarea name="message" rows="4"></textarea> di dalam form, dengan sebuah <label>. Berbeda dengan <input>, textarea punya tag penutup, dan apa pun di antara tag-nya adalah teks awalnya.
Bagaimana cara mengatur nilai default textarea?
Letakkan teksnya di antara tag: <textarea name="bio">Hello</textarea>. Di HTML, textarea tidak punya atribut value. Di JavaScript, baca dan atur textarea.value.
Bagaimana cara mencegah ukuran textarea diubah?
Atur resize: none di CSS. resize: vertical biasanya lebih ramah: pembaca tetap bisa membuatnya lebih tinggi untuk teks panjang, tapi tidak bisa merusak layout-mu dengan menariknya lebih lebar.
Bagaimana cara membatasi jumlah karakter di textarea?
Tambahkan maxlength="280". Browser berhenti menerima input di panjang itu. Tampilkan penghitung di sebelahnya, yang diperbarui pada event input, supaya pembaca tahu berapa ruang yang tersisa, dan periksa panjangnya di server juga.
Kenapa textarea-ku memakai font yang berbeda?
Secara default Chrome dan Firefox memberi textarea font monospace sekitar 13px. Tambahkan font: inherit supaya sama dengan bagian halaman lainnya.