Kurs HTML

11.7. Pseudoelement ::placeholder

Strona główna > Kurs CSS > Rozdział 11: Pseudoelementy > 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.