11.7. Pseudoelement ::placeholder
Wprowadzenie: Stylizowanie tekstu zastępczego
Elementy formularzy <input>
i <textarea>
mogą posiadać atrybut placeholder
, który wyświetla tekst zastępczy (podpowiedź) w polu, zanim użytkownik zacznie w nim pisać.
Domyślnie tekst ten jest zazwyczaj wyświetlany jasnoszarym kolorem. Pseudoelement ::placeholder
pozwala **dostosować wygląd tego tekstu zastępczego**.
Uwaga: Składnia i wsparcie dla stylizowania placeholdera różniły się historycznie między przeglądarkami. Obecnie standardem jest ::placeholder
, ale dla starszych wersji mogą być potrzebne prefiksowane wersje (::-webkit-input-placeholder
, ::-moz-placeholder
, :-ms-input-placeholder
). W nowoczesnym CSS zazwyczaj wystarczy ::placeholder
.
Jak działa ::placeholder
?
Pseudoelement ::placeholder
wybiera tekst zastępczy wewnątrz elementu input
lub textarea
. Można go zastosować do konkretnego typu inputa lub globalnie.
<input type="text" placeholder="Wpisz swoje imię...">
<input type="email" placeholder="Adres e-mail" class="custom-placeholder">
<textarea placeholder="Twoja wiadomość..."></textarea>
/* Globalny styl dla wszystkich placeholderów */
::placeholder {
color: lightcoral; /* Jasnoczerwony kolor */
font-style: italic; /* Kursywa */
opacity: 1; /* Upewnij się, że jest w pełni widoczny (niektóre przeglądarki mogą zmniejszać domyślnie) */
}
/* Prefiksowane wersje dla starszych przeglądarek (opcjonalnie) */
/*
::-webkit-input-placeholder { color: lightcoral; font-style: italic; opacity: 1; }
::-moz-placeholder { color: lightcoral; font-style: italic; opacity: 1; }
:-ms-input-placeholder { color: lightcoral; font-style: italic; opacity: 1; }
*/
/* Specyficzny styl dla placeholderów w elementach .custom-placeholder */
.custom-placeholder::placeholder {
color: green;
font-style: normal;
font-weight: bold;
}
W powyższym przykładzie:
- Placeholder w pierwszym polu input i textarea będzie jasnoczerwony i napisany kursywą (styl globalny).
- Placeholder w drugim polu input (z klasą
.custom-placeholder
) będzie zielony i pogrubiony (styl specyficzny nadpisuje globalny).
Dozwolone właściwości CSS dla ::placeholder
Podobnie jak w przypadku ::selection
, zakres właściwości, które można stosować do ::placeholder
, jest **ograniczony**. Można bezpiecznie używać właściwości wpływających na wygląd tekstu:
- Czcionka:
font
(i jego składowe). - Kolor:
color
. - Tło:
background
(choć efekt może być ograniczony do tła samego tekstu). - Odstępy tekstu:
word-spacing
,letter-spacing
. - Dekoracje i transformacje:
text-decoration
,text-transform
. - Przezroczystość:
opacity
. - Wysokość linii:
line-height
.
Właściwości związane z modelem pudełkowym (margin
, padding
, border
) czy pozycjonowaniem zazwyczaj **nie działają** na ::placeholder
.
Wskazówki dotyczące użycia ::placeholder
- Kontrast: Upewnij się, że kolor tekstu placeholdera ma wystarczający kontrast z tłem pola input, aby był czytelny, ale jednocześnie różnił się od koloru tekstu wprowadzanego przez użytkownika.
- Nie zastępuj etykiet: Placeholder nie powinien zastępować etykiety (
<label>
). Etykieta jest kluczowa dla dostępności (informuje użytkowników czytników ekranu o przeznaczeniu pola) i pozostaje widoczna po rozpoczęciu pisania. Placeholder służy jako dodatkowa podpowiedź lub przykład formatu. - Krótkość i zwięzłość: Tekst placeholdera powinien być krótki i na temat.
- Testowanie: Sprawdź wygląd w różnych przeglądarkach, zwłaszcza jeśli zależy Ci na wsparciu dla starszych wersji.
Zadania praktyczne
Zadanie 1 (z rozwiązaniem)
Stwórz pole input type="search"
z placeholderem "Szukaj...". Użyj ::placeholder
, aby nadać tekstowi placeholdera szary kolor i styl kursywy.
Rozwiązanie:
HTML:
<input type="search" placeholder="Szukaj...">
CSS:
input[type="search"]::placeholder {
color: #888; /* Ciemnoszary kolor */
font-style: italic; /* Kursywa */
}
/* Opcjonalnie dla Firefoxa */
input[type="search"]::-moz-placeholder {
color: #888;
font-style: italic;
opacity: 1; /* Firefox może wymagać opacity */
}
Efekt: Tekst "Szukaj..." w polu wyszukiwania będzie szary i napisany kursywą.
Zadanie 2 (do samodzielnego wykonania)
Stwórz pole textarea
z placeholderem. Użyj ::placeholder
, aby zmienić rodzinę czcionki (font-family
) i rozmiar (font-size
) tekstu placeholdera.
Zadanie 3 (do samodzielnego wykonania)
Stwórz pole input type="text"
. Użyj ::placeholder
, aby przekształcić tekst placeholdera na wielkie litery (text-transform: uppercase;
).
FAQ - Najczęściej zadawane pytania
Czy muszę używać prefiksowanych wersji ::placeholder
?
W nowoczesnych przeglądarkach standardowy ::placeholder
jest dobrze wspierany. Prefiksy (::-webkit-input-placeholder
, ::-moz-placeholder
, :-ms-input-placeholder
) są potrzebne głównie dla zapewnienia kompatybilności ze starszymi wersjami przeglądarek (np. starsze wersje Chrome/Safari, Firefox < 19, IE 10-11). Jeśli nie musisz wspierać tych starszych wersji, sam ::placeholder
powinien wystarczyć.
Dlaczego mój styl ::placeholder
nie działa w Firefoxie?
Starsze wersje Firefoxa (przed 51) używały pseudoklasy :-moz-placeholder
, a nowsze (ale przed pełnym wsparciem standardu) używały ::-moz-placeholder
. Dodatkowo, Firefox czasami domyślnie stosuje pewną przezroczystość (opacity
) do placeholdera. Aby zapewnić spójny wygląd, często trzeba jawnie ustawić opacity: 1;
w regule dla ::-moz-placeholder
.
Czy mogę animować ::placeholder
?
Animowanie pseudoelementu ::placeholder
jest generalnie słabo wspierane lub niemożliwe za pomocą CSS transition
czy animation
. Zmiany stylu są zazwyczaj natychmiastowe.
Czy mogę użyć ::before
lub ::after
razem z ::placeholder
?
Nie, pseudoelement ::placeholder
odnosi się do samego tekstu zastępczego i nie można do niego dołączyć kolejnych pseudoelementów jak ::before
czy ::after
.