Textarea nasıl yapılır
<textarea> birden fazla satır için bir metin alanıdır: mesajlar, yorumlar, açıklamalar. rows görünür yüksekliğini satır cinsinden belirler. Birkaç satır yaz ve Send'e bas:
<input> etiketinden iki farkı var: textarea'nın kapanış etiketi gerekir ve başlangıç metni bir value özelliği yerine etiketlerin arasına girer. name değeri, satır sonları dahil metin değer olarak gönderilir.
Textarea özellikleri
| Özellik | Ne yapar |
|---|---|
name | Metnin gönderildiği anahtar |
rows | Satır cinsinden görünür yükseklik (varsayılan 2) |
cols | Karakter cinsinden görünür genişlik (varsayılan 20); CSS width genellikle daha iyidir |
placeholder | Boşken gösterilen ipucu |
maxlength, minlength | Karakter cinsinden uzunluk sınırları |
required | Boş olmamalı |
readonly | Seçilip kopyalanabilir, düzenlenemez; yine de gönderilir |
disabled | Kullanılamaz; gönderilmez |
wrap | soft (varsayılan) ya da hard, aşağıya bak |
spellcheck | true ya da false |
Varsayılan metin etiketlerin arasına girer
<textarea> ile </textarea> arasındaki her şey, boşluklar, tab'lar ve satır sonları dahil, tam olarak yazıldığı gibi başlangıç metnidir. Yalnızca açılış etiketinden hemen sonraki tek bir satır sonu yok sayılır. Bu da girintiyi bir tuzağa çevirir:
İkinci textarea dört boşlukla başlar ve bir satır sonu ile iki boşluk daha ile biter; okurun hepsini silmesi gerekir. Varsayılan metni etiketlere bitişik yaz.
Bir textarea içindeki HTML işlenmez; etiketlerin arasındaki <b>hi</b> olduğu gibi bu metin olarak görünür.
Genişlik, yeniden boyutlandırma ve otomatik büyüme
Tarayıcılar okurun bir textarea'yı köşesinden sürükleyerek yeniden boyutlandırmasına izin verir. CSS resize bunu sınırlar, box-sizing: border-box ile width: 100% de onun kapsayıcısını tam olarak doldurmasını sağlar:
Sonuncusu her tuş vuruşunda yüksekliğini sıfırlar ve sonra onu scrollHeight (içeriğinin ve padding'inin yüksekliği) artı kenarlıklarına ayarlar. İçine birkaç satır yaz: hiçbir zaman kaydırma çubuğu göstermez. En kullanıcı dostu varsayılan resize: vertical olur: uzun cevaplar yer bulur ve kimse alanı yerleşimden daha geniş sürükleyemez.
Chromium tarayıcıları otomatik büyümeyi yalnızca CSS ile field-sizing: content kullanarak yapabilir. Bunu desteklemeyen tarayıcılar satırı yok sayar ve normal boyutu korur, bu yüzden eklemek güvenlidir; ama her okurun büyüyen kutuyu alması gerekiyorsa script'i tut.
maxlength ve karakter sayacı
maxlength girdiyi belirli bir karakter sayısında durdurur. Tek başına hiçbir uyarı vermez, yani okur bunu ancak yazma çalışmayı bıraktığında fark eder. Bir sayaç bunu çözer:
aria-describedby ekran okuyucuların sayacı alanla birlikte okumasını sağlar, aria-live="polite" de tuş vuruşları arasında sayaçtaki değişiklikleri duyurur. maxlength yalnızca tarayıcı tarafından uygulanır, bu yüzden sunucunun da uzunluğu kontrol etmesi gerekir.
Gönderilen metindeki satır sonları
Okurun satır sonları metinle birlikte gönderilir. Gönderilen veride her biri bir satır başı ve satır besleme çiftine dönüşür (URL kodlanmış bir formda %0D%0A); çoğu sunucunun beklediği budur. Metni daha sonra bir sayfada satır sonlarıyla göstermek için ya çıktıda onları <br> etiketine çevir ya da elemente white-space: pre-line stili ver.
wrap="hard" (cols gerektirir) daha da ileri gider: metnin görsel olarak kaydığı yerlere de satır sonları ekler, böylece sunucu cols karakterden uzun olmayan satırlar alır. Varsayılan olan wrap="soft" yalnızca okurun yazdığı satır sonlarını gönderir.
Textarea'ya stil vermek
Chrome ve Firefox textarea'lara yaklaşık 13px boyutunda monospace bir yazı tipi verir; bir textarea'nın çoğu zaman sırıtmasının nedeni budur. font: inherit bunu düzeltir. Kenarlığı değiştirirsen görünür bir odak stili bırak:
Placeholder metni okunabilir bir kontrasta ulaşmalı; birçok tasarımın kullandığı açık gri okunması zordur. Ve her alanda olduğu gibi placeholder bir label değildir: okur yazmaya başladığı anda kaybolur. Label'lar HTML label sayfasında anlatılıyor.
Sık yapılan hatalar
<textarea value="...">.valueözelliği yoktur; metni etiketlerin arasına koy.- Varsayılan metne HTML ile birlikte girinti vermek. Boşluklar değerin bir parçası olur.
- Kendiliğinden kapanan bir
<textarea />. Boş bir element değildir;</textarea>olmadan sayfanın geri kalanı metin olarak onun içine yutulur. font: inheritolmaması, bu durumda alan küçük monospace bir yazı tipi kullanır.- Küçük sabit bir yükseklikle
resize: none. Uzun cevaplar minik, kayan bir kutuda kalır. - Yalnızca
maxlengthdeğerine güvenmek. Uzunluğu sunucuda da doğrula.
Sıkça Sorulan Sorular
HTML'de textarea nasıl oluşturulur?
Bir form içine, bir <label> ile birlikte <textarea name="message" rows="4"></textarea> yaz. <input> etiketinden farklı olarak kapanış etiketi vardır ve etiketlerin arasındaki her şey başlangıç metnidir.
Bir textarea'nın varsayılan değeri nasıl ayarlanır?
Metni etiketlerin arasına koy: <textarea name="bio">Hello</textarea>. HTML'de textarea'nın value özelliği yoktur. JavaScript'te textarea.value değerini oku ve ayarla.
Bir textarea'nın yeniden boyutlandırılmasını nasıl engellerim?
CSS'te resize: none ayarla. resize: vertical genellikle daha kullanıcı dostudur: okur uzun metinler için onu yine uzatabilir, ama yana doğru sürükleyerek yerleşimini bozamaz.
Bir textarea'daki karakter sayısını nasıl sınırlarım?
maxlength="280" ekle. Tarayıcı o uzunlukta girdi almayı durdurur. Okur ne kadar yer kaldığını bilsin diye yanına input olayında güncellenen bir sayaç koy ve uzunluğu sunucuda da kontrol et.
Textarea'm neden farklı bir yazı tipi kullanıyor?
Chrome ve Firefox textarea'lara varsayılan olarak yaklaşık 13px boyutunda monospace bir yazı tipi verir. Sayfanın geri kalanıyla eşleşmesi için font: inherit ekle.