Twoje Centrum Szkoleniowe

Nauczmy się dziś czegoś nowego!

Kurs tworzenia stron - HTML + CSS

Pseudoklasy i pseudoelementy: interakcje i stylizacja

Pseudoklasy i pseudoelementy pozwalają na bardziej zaawansowaną kontrolę nad wyglądem elementów, umożliwiając stylizację na podstawie stanu interakcji użytkownika (np. najechanie myszką) lub struktury dokumentu (np. pierwszy element listy). Dzięki nim możemy tworzyć bardziej interaktywne i estetyczne strony bez konieczności używania JavaScriptu.

 

Dlaczego pseudoklasy i pseudoelementy są ważne?

    • Interaktywność: Umożliwiają reakcję na działania użytkownika, takie jak najechanie myszką czy fokus na elemencie.
    • Zaawansowana stylizacja: Pozwalają stylizować konkretne części elementów, np. pierwszą literę akapitu.
    • Dostępność: Ułatwiają tworzenie dostępnych interfejsów, które reagują na różne stany elementów.
    • Oszczędność kodu: Dzięki nim możemy osiągnąć efekty bez konieczności dodawania dodatkowych znaczników HTML czy użycia JavaScriptu.

 

Co to są pseudoklasy?

Pseudoklasy to specjalne słowa kluczowe w CSS, które są dodawane do selektorów, aby określić stan elementu lub jego pozycję w drzewie DOM. Używamy ich, aby stylizować elementy w określonych sytuacjach.

Składnia pseudoklas

selector:pseudoklasa {
  /* Style */
}

 

Przykład:

a:hover {
  color: red;
}

 

Powyższy przykład zmienia kolor tekstu linku na czerwony, gdy użytkownik najedzie na niego myszką.

 

Co to są pseudoelementy?

Pseudoelementy pozwalają na stylizację określonych części elementu lub dodanie treści przed lub po elementach bez modyfikacji HTML. Pozwalają nam na dostęp do części elementu, które nie są bezpośrednio dostępne w drzewie DOM.

Składnia pseudoelementów

selector::pseudoelement {
  /* Style */
}

 

Przykład:

p::first-letter {
  font-size: 2em;
}

 

Ten przykład powiększa pierwszą literę każdego akapitu.

 

Różnica między pseudoklasami a pseudoelementami

    • Pseudoklasy (np. :hover, :active): Odnoszą się do stanu elementu lub jego pozycji w strukturze dokumentu.
    • Pseudoelementy (np. ::before, ::after): Odnoszą się do części elementu lub pozwalają na tworzenie wirtualnych elementów.

Uwaga: W starszych wersjach CSS pseudoelementy były zapisywane z jednym dwukropkiem (np. :before), ale w CSS3 zaleca się używanie dwóch dwukropków (::before), aby odróżnić je od pseudoklas.

 

Najczęściej używane pseudoklasy

1. Pseudoklasy dynamiczne (interaktywne)

:hover

Stylizuje element, gdy kursor myszy znajduje się nad nim.

Przykład:

button:hover {
  background-color: #3498db;
}

 

:active

Stylizuje element w momencie, gdy jest aktywowany (np. kliknięcie przycisku).

Przykład:

button:active {
  background-color: #2980b9;
}

 

:focus

Stylizuje element, który ma fokus (np. pole formularza po kliknięciu lub naciśnięciu klawisza Tab).

Przykład:

input:focus {
  border-color: #e74c3c;
}

 

:visited

Stylizuje linki, które zostały odwiedzone przez użytkownika.

Przykład:

a:visited {
  color: purple;
}

 

2. Pseudoklasy strukturalne

:first-child i :last-child

Stylizują pierwszy lub ostatni element wśród rodzeństwa.

Przykład:

li:first-child {
  font-weight: bold;
}

li:last-child {
  font-style: italic;
}

 

:nth-child(n)

Stylizuje element na podstawie jego pozycji wśród rodzeństwa.

Przykład:

/* Każdy drugi element */
li:nth-child(2n) {
  background-color: #ecf0f1;
}

/* Trzeci element */
li:nth-child(3) {
  color: red;
}

 

:nth-of-type(n)

Podobne do :nth-child, ale odnosi się do typu elementu.

Przykład:

p:nth-of-type(2) {
  font-size: 1.2em;
}

 

:not(selector)

Stylizuje elementy, które nie pasują do danego selektora.

Przykład:

button:not(.primary) {
  background-color: #bdc3c7;
}

 

3. Pseudoklasy stanu

:disabled, :enabled

Stylizują elementy formularza w zależności od ich stanu.

Przykład:

input:disabled {
  background-color: #ecf0f1;
}

 

:checked

Stylizuje zaznaczone elementy formularza (np. checkboxy, radio buttony).

Przykład:

input[type="checkbox"]:checked + label {
  text-decoration: line-through;
}

 

 

Najczęściej używane pseudoelementy

1. ::before i ::after

Pozwalają na dodanie generowanej treści przed lub po zawartości elementu.

Przykład:

h1::before {
  content: "🔥 ";
}

h1::after {
  content: " 🎉";
}

 

2. ::first-letter

Stylizuje pierwszą literę elementu.

Przykład:

p::first-letter {
  font-size: 2em;
  color: #e74c3c;
}

 

3. ::first-line

Stylizuje pierwszą linię tekstu w elemencie.

Przykład:

p::first-line {
  font-weight: bold;
}

 

4. ::selection

Stylizuje część tekstu zaznaczoną przez użytkownika.

Przykład:

::selection {
  background-color: #3498db;
  color: #fff;
}

 

5. ::placeholder

Stylizuje tekst zastępczy w polach formularza.

Przykład:

input::placeholder {
  color: #bdc3c7;
  font-style: italic;
}

 

 

Praktyczne przykłady

1. Tworzenie przycisku z efektem najechania

HTML:

<button class="btn">Kliknij mnie</button>

 

CSS:

.btn {
  background-color: #2ecc71;
  color: #fff;
  padding: 15px 30px;
  border: none;
  cursor: pointer;
  transition: background-color 0.3s;
}

.btn:hover {
  background-color: #27ae60;
}

 

Wyjaśnienie:

    • Używamy pseudoklasy :hover, aby zmienić kolor tła przycisku, gdy użytkownik najeżdża na niego myszką.
    • Właściwość transition dodaje płynny efekt przejścia.

2. Stylizacja linków w menu nawigacyjnym

HTML:

<nav>
  <ul>
    <li><a href="#">Strona główna</a></li>
    <li><a href="#">O nas</a></li>
    <li><a href="#">Usługi</a></li>
    <li><a href="#">Kontakt</a></li>
  </ul>
</nav>

 

CSS:

nav ul {
  list-style: none;
  padding: 0;
  display: flex;
}

nav li {
  margin-right: 20px;
}

nav a {
  text-decoration: none;
  color: #34495e;
  position: relative;
}

nav a::after {
  content: "";
  position: absolute;
  width: 0;
  height: 2px;
  background-color: #3498db;
  bottom: -5px;
  left: 0;
  transition: width 0.3s;
}

nav a:hover::after {
  width: 100%;
}

 

Wyjaśnienie:

    • Używamy pseudoelementu ::after, aby dodać linię pod linkiem.
    • Przy najechaniu na link (:hover), linia rozszerza się na całą szerokość, tworząc efekt podkreślenia.

3. Tworzenie listy z naprzemiennymi kolorami tła

HTML:

<ul class="lista">
  <li>Element 1</li>
  <li>Element 2</li>
  <li>Element 3</li>
  <li>Element 4</li>
  <li>Element 5</li>
</ul>

 

CSS:

.lista li:nth-child(odd) {
  background-color: #ecf0f1;
}

.lista li:nth-child(even) {
  background-color: #bdc3c7;
}

 

Wyjaśnienie:

    • Używamy pseudoklasy :nth-child() z wartościami odd (nieparzyste) i even (parzyste), aby zmienić tło elementów listy naprzemiennie.

4. Stylizacja formularza z efektami interakcji

HTML:

<form>
  <label for="email">E-mail:</label>
  <input type="email" id="email" placeholder="Wpisz swój e-mail">
  <button type="submit">Wyślij</button>
</form>

 

CSS:

input {
  border: 1px solid #ccc;
  padding: 10px;
  transition: border-color 0.3s;
}

input:focus {
  border-color: #3498db;
}

input::placeholder {
  color: #bdc3c7;
}

button {
  background-color: #3498db;
  color: #fff;
  padding: 10px 20px;
  border: none;
  cursor: pointer;
}

button:disabled {
  background-color: #bdc3c7;
  cursor: not-allowed;
}

 

Wyjaśnienie:

    • Używamy pseudoklasy :focus, aby zmienić kolor obramowania pola po jego aktywacji.
    • Pseudoelement ::placeholder pozwala stylizować tekst zastępczy.
    • Pseudoklasa :disabled zmienia styl przycisku, gdy jest nieaktywny.

 

Dobre praktyki

    • Kolejność pseudoklas w stylizacji linków: Zaleca się stosowanie kolejności LVHA: :link, :visited, :hover, :active, aby uniknąć konfliktów stylów.

Przykład:

a:link {
  color: blue;
}

a:visited {
  color: purple;
}

a:hover {
  color: red;
}

a:active {
  color: orange;
}

 

    • Używaj pseudoklas strukturalnych zamiast klas w HTML: Zamiast dodawać klasy do elementów (np. .first, .last), użyj pseudoklas takich jak :first-child, :last-child.
    • Pamiętaj o dostępności: Upewnij się, że efekty interakcji są dostępne dla użytkowników korzystających z klawiatury lub czytników ekranu.
    • Unikaj nadmiernego zagnieżdżania: Staraj się nie komplikować selektorów, aby kod był czytelny i wydajny.

 

Częste błędy i jak ich unikać

    • Zapominanie o dwóch dwukropkach przy pseudoelementach: W CSS3 pseudoelementy powinny być zapisywane z dwoma dwukropkami (::). Jednak większość przeglądarek nadal obsługuje starszą składnię z jednym dwukropkiem.

Rozwiązanie: Stosuj dwukropek odpowiedni dla wersji CSS i przeglądarek, które chcesz wspierać.

    • Niepoprawne użycie pseudoklas z innymi selektorami: Upewnij się, że pseudoklasy są stosowane do odpowiednich elementów.

Niepoprawnie:

.container :hover {
  /* Style */
}

 

Poprawnie:

.container:hover {
  /* Style */
}

 

    • Brak specyficzności selektorów: Jeśli styl nie jest stosowany, może to być spowodowane przez niewystarczającą specyficzność selektora.

Rozwiązanie: Zwiększ specyficzność selektora lub użyj !important (ostrożnie).

    • Konflikty stylów: Upewnij się, że kolejność deklaracji pseudoklas nie powoduje nadpisywania stylów.

 

Podsumowanie

W tej lekcji nauczyliśmy się:

    • Czym są pseudoklasy i pseudoelementy oraz jaka jest między nimi różnica.
    • Jak używać najczęściej stosowanych pseudoklas, takich jak :hover, :active, :focus, :nth-child, :not.
    • Jak korzystać z pseudoelementów, takich jak ::before, ::after, ::first-letter, ::placeholder.
    • Praktycznych zastosowań pseudoklas i pseudoelementów w tworzeniu interaktywnych i estetycznych efektów na stronie.
    • Dobrych praktyk w stosowaniu pseudoklas i pseudoelementów oraz jak unikać typowych błędów.

Pseudoklasy i pseudoelementy są potężnym narzędziem w arsenale każdego web developera. Pozwalają na tworzenie zaawansowanych efektów i interakcji bez konieczności użycia JavaScriptu, co może poprawić wydajność strony i ułatwić jej utrzymanie.

 

Zadania do samodzielnego wykonania

    1. Stwórz interaktywne menu nawigacyjne:

      • Zaprojektuj menu z efektami najechania (:hover), które podkreśla aktualnie wybrany element.
      • Użyj pseudoelementów ::before lub ::after do dodania efektów wizualnych.
    2. Zaprojektuj listę komentarzy:

      • Utwórz listę komentarzy, gdzie co drugi komentarz ma inny kolor tła (użyj :nth-child).
      • Dodaj efekt powiększenia pierwszej litery każdego komentarza za pomocą ::first-letter.
    3. Eksperymentuj z pseudoklasą :not:

      • Stwórz zestaw przycisków, gdzie wszystkie przyciski mają jeden styl, z wyjątkiem tych z klasą .primary.
      • Użyj :not(.primary), aby stylizować przyciski bez klasy .primary.

 

Ciekawostka

Czy wiesz, że dzięki pseudoelementom ::before i ::after możesz tworzyć skomplikowane kształty i efekty wizualne bez dodawania dodatkowych elementów HTML? Niektórzy twórcy stron potrafią stworzyć całe ikony czy animacje tylko za pomocą CSS, wykorzystując te pseudoelementy!

Testy przypięte do lekcji
Aby uzyskać dostęp do testów i ćwiczeń interaktywnych - Zaloguj się
Aby widzieć ocenę lekcji - Zaloguj się