<textarea> to znacznik HTML, który tworzy wielowierszowe pole tekstowe do wprowadzania dłuższych treści przez użytkowników. W przeciwieństwie do <input type="text">, który akceptuje jedną linię, textarea pozwala wprowadzać całe akapity, komentarze i wiadomości.
Najczęściej umieszczaj <textarea> wewnątrz elementu <form>, aby wysłać dane na serwer i je przetworzyć.
Podstawowa składnia
Najprostszy przykład pola textarea wygląda tak:
<textarea></textarea>
Aby dodać tekst domyślny, wpisz go między znacznikami otwierającym i zamykającym. Nie używaj atrybutu value w <textarea>.
<textarea>Domyślny tekst w polu</textarea>
Pełny przykład z podstawowymi atrybutami wymiarów:
<textarea name="message" rows="10" cols="30">
Tu wpisz swoją wiadomość...
</textarea>
Kluczowe atrybuty
Wymiary pola
rows definiuje liczbę widocznych wierszy, a cols — liczbę widocznych kolumn (przybliżoną szerokość znaku w monospacie). Przykład:
<textarea rows="5" cols="40"></textarea>
Atrybuty funkcjonalne
Najczęściej używane atrybuty wraz z krótkim opisem i przykładem:
| Atrybut | Opis | Przykład |
|---|---|---|
| name | Nazwa pola przesyłana z formularzem | name="komentarz" |
| placeholder | Tekst podpowiedzi wyświetlany w pustym polu | placeholder="Napisz swój komentarz" |
| maxlength | Maksymalna liczba znaków wprowadzanych przez użytkownika | maxlength="500" |
| readonly | Pole tylko do odczytu (użytkownik nie może edytować) | readonly |
| disabled | Wyłącza element (nie wysyła się z formularzem) | disabled |
Atrybuty dostępowe
Przykładowe użycie z atrybutami wpływającymi na dostępność i identyfikację:
<textarea id="feedback" class="form-textarea" title="Pole do wpisania opinii" lang="pl"></textarea>
Krótki opis kluczowych atrybutów:
- id – unikalny identyfikator powiązany z
<label>przezfor; - class – nazwa(e) klas CSS do stylizacji i selektorów;
- title – dodatkowa podpowiedź w formie dymku przy najechaniu myszką;
- lang – deklaracja języka treści, pomocna dla czytników ekranu.
Praktyczne przykłady
Formularz z komentarzem
Oto prosty formularz z polem komentarza i limitami znaków:
<form action="send.php" method="POST">
<label for="comment">Twój komentarz:</label>
<textarea id="comment" name="user_comment" rows="6" cols="50" placeholder="Udostępnij swoją opinię..." maxlength="1000"></textarea>
<button type="submit">Wyślij</button>
<button type="reset">Wyczyść</button>
</form>
Pole biografii z ograniczeniami
Przykład pola tylko do odczytu z limitem znaków:
<textarea name="bio" rows="5" cols="40" placeholder="Opowiedz o sobie" maxlength="500" readonly>Jestem programistą z 10-letnim doświadczeniem...</textarea>
Stylizacja CSS
Domyślnie użytkownik może zmieniać rozmiary pola <textarea> przez przeciąganie jego rogu — kontrolujesz to właściwością CSS resize. Oto przykłady konfiguracji:
/* Zablokuj zmianę rozmiaru */
textarea { resize: none; }
/* Pozwól zmianę tylko w pionie */
textarea { resize: vertical; }
/* Pozwól zmianę tylko w poziomie */
textarea { resize: horizontal; }
Dodatkowe, czytelne stylizacje stanu domyślnego i focus:
textarea {
font-family: 'Courier New', monospace;
font-size: 14px;
padding: 10px;
border: 2px solid #ddd;
border-radius: 5px;
line-height: 1.5;
}
textarea:focus {
outline: none;
border-color: #4CAF50;
box-shadow: 0 0 5px rgba(76, 175, 80, 0.3);
}
Interakcja z JavaScriptem
Pobranie wartości
Tak pobierzesz aktualną zawartość pola:
// Bezpośrednio przez ID
const textarea = document.getElementById('comment');
const text = textarea.value;
// Lub przez name w formularzu
const form = document.querySelector('form');
const commentValue = form.elements['user_comment'].value;
Słuchanie zdarzeń
Obsługa najważniejszych zdarzeń pola tekstowego:
const textarea = document.getElementById('comment');
// Zdarzenie przy zmianie zawartości
textarea.addEventListener('change', function() {
console.log('Zawartość zmieniona:', this.value);
});
// Zdarzenie podczas pisania (real-time)
textarea.addEventListener('input', function() {
console.log('Ilość znaków:', this.value.length);
});
// Gdy pole uzyskuje focus
textarea.addEventListener('focus', function() {
this.style.borderColor = '#4CAF50';
});
Licznik znaków
Skrypt licznika, który pokazuje liczbę pozostałych znaków względem limitu:
const textarea = document.getElementById('comment');
const counter = document.getElementById('charCount');
const maxChars = 500;
textarea.addEventListener('input', function() {
const remaining = maxChars - this.value.length;
counter.textContent = `Pozostało znaków: ${remaining}`;
if (remaining < 0) {
counter.style.color = 'red';
} else {
counter.style.color = 'green';
}
});
HTML do licznika znaków z limitem ustawionym na 500:
<textarea id="comment" maxlength="500" rows="5" cols="50"></textarea>
<p id="charCount">Pozostało znaków: 500</p>
Walidacja przed wysłaniem
Przykład prostej walidacji treści w momencie wysyłki formularza:
const form = document.querySelector('form');
form.addEventListener('submit', function(e) {
const textarea = this.elements['user_comment'];
if (textarea.value.trim() === '') {
e.preventDefault();
alert('Pole komentarza nie może być puste!');
} else if (textarea.value.length < 10) {
e.preventDefault();
alert('Komentarz musi mieć co najmniej 10 znaków!');
}
});
Dobre praktyki
Aby zadbać o czytelność, dostępność i wygodę użytkownika, kieruj się poniższymi zasadami:
- Zawsze używaj
<label>– połącz je atrybutamifor/id, by poprawić dostępność i UX; - Dodaj
placeholder– podpowiedz użytkownikowi oczekiwany format lub zakres treści; - Ustaw rozsądne limity – kontroluj długość wpisu przez
maxlengthi informuj o limicie; - Stylizuj wyraźnie – wyróżnij pole od otaczającego tekstu i zadbaj o czytelny stan focus;
- Obsługuj zdarzenia – reaguj w czasie rzeczywistym na
input/changedla lepszego feedbacku; - Pamiętaj o responsywności – stosuj elastyczne jednostki (np. procenty) i testuj na urządzeniach mobilnych.