Twoje Centrum Szkoleniowe

Nauczmy się dziś czegoś nowego!

Kurs tworzenia stron - HTML + CSS

Nowości w CSS: funkcje eksperymentalne i przyszłe specyfikacje

Dziś zajmiemy się nowościami w CSS, skupiając się na funkcjach eksperymentalnych i przyszłych specyfikacjach, które kształtują przyszłość front-endu. CSS (Cascading Style Sheets) nieustannie ewoluuje, wprowadzając nowe możliwości dla deweloperów w tworzeniu bardziej dynamicznych, responsywnych i atrakcyjnych wizualnie stron.

Poznasz najnowsze funkcje i właściwości, które są w trakcie standaryzacji lub są już dostępne w niektórych przeglądarkach jako funkcje eksperymentalne. Dowiesz się, jak z nich korzystać, jakie problemy rozwiązują i jak mogą ulepszyć Twoje projekty. Przyjrzymy się również najlepszym praktykom w implementacji tych funkcji oraz narzędziom, które ułatwią Ci pracę z najnowszymi technologiami CSS.

 

Dlaczego warto znać nowości w CSS?

    • Innowacyjność: Nowe funkcje pozwalają tworzyć bardziej zaawansowane i nowoczesne interfejsy użytkownika.
    • Efektywność: Możesz osiągnąć te same efekty przy mniejszej ilości kodu i bez użycia zewnętrznych bibliotek.
    • Przewaga konkurencyjna: Znajomość najnowszych technologii daje Ci przewagę na rynku pracy i w realizacji projektów.
    • Przygotowanie na przyszłość: Śledzenie rozwoju CSS pozwala Ci być na bieżąco i łatwiej adaptować się do zmian.

 

Nowe funkcje i przyszłe specyfikacje w CSS

1. CSS Variables Level 2 (Zagnieżdżanie zmiennych)

Opis:

    • CSS Variables (Custom Properties) zostały wprowadzone w CSS3 i pozwalają na tworzenie własnych zmiennych.
    • Level 2 wprowadza możliwość zagnieżdżania zmiennych i korzystania z nich w bardziej zaawansowany sposób.

Przykład:

:root {
  --spacing-unit: 8px;
  --spacing-large: calc(var(--spacing-unit) * 2);
}

.container {
  padding: var(--spacing-large);
}

 

2. Funkcje matematyczne: min(), max(), clamp()

Opis:

    • Pozwalają na bardziej elastyczne definiowanie wartości, uwzględniając różne warunki.
    • min() wybiera najmniejszą wartość spośród podanych.
    • max() wybiera największą wartość.
    • clamp() ogranicza wartość do podanego zakresu.

Przykład:

.element {
  width: clamp(200px, 50%, 600px);
}

 

    • Tutaj szerokość elementu będzie nie mniejsza niż 200px, nie większa niż 600px i dostosuje się do 50% dostępnej przestrzeni.

3. Nowe selektory: :is(), :where(), ulepszony :not()

Opis:

    • :is() i :where() ułatwiają pisanie złożonych selektorów.
    • :not() został rozszerzony o możliwość przyjmowania wielu argumentów.

Przykład:

/* Zamiast pisać */
ul li, ol li, menu li {
  color: blue;
}

/* Możesz użyć */
:is(ul, ol, menu) li {
  color: blue;
}

 

4. Container Queries

Opis:

    • Pozwalają na stylowanie elementów w zależności od rozmiaru ich kontenera, a nie całego viewportu.
    • Rozwiązują problem, gdzie elementy musiały być stylizowane globalnie za pomocą media queries.

Przykład:

@container (min-width: 500px) {
  .element {
    display: flex;
  }
}

 

Uwaga: Container Queries są w fazie eksperymentalnej i nie są jeszcze szeroko wspierane.

5. Nesting (Zagnieżdżanie) w CSS

Opis:

    • Pozwala na zagnieżdżanie selektorów w podobny sposób, jak w preprocesorach CSS (np. Sass).
    • Upraszcza kod i poprawia czytelność.

Przykład:

.nav {
  display: flex;

  & .nav-item {
    margin-right: 10px;

    &:hover {
      color: red;
    }
  }
}

 

Uwaga: Wymaga włączenia funkcji eksperymentalnych lub użycia narzędzi takich jak PostCSS.

6. CSS Houdini

Opis:

    • Inicjatywa mająca na celu dać deweloperom większą kontrolę nad przetwarzaniem CSS w przeglądarkach.
    • Pozwala na tworzenie własnych właściwości CSS, parserów i rozszerzeń.

Przykład:

    • Worklets: Możesz pisać własne skrypty, które rozszerzają możliwości CSS.

Uwaga: Jest to zaawansowany temat i wymaga dobrej znajomości JavaScript.

7. Nowe właściwości związane z układem

a) aspect-ratio

Opis:

    • Umożliwia ustawienie proporcji szerokości do wysokości elementu.
    • Ułatwia tworzenie responsywnych układów bez dodatkowych trików.

Przykład:

.image {
  width: 100%;
  aspect-ratio: 16 / 9;
}

 

b) gap w Flexbox

Opis:

    • Wcześniej dostępne tylko w CSS Grid, teraz gap, row-gap i column-gap działają również w Flexboxie.

Przykład:

.flex-container {
  display: flex;
  gap: 20px;
}

 

8. Nowe jednostki: lvh, svh, dvh

Opis:

    • Rozwiązują problemy z jednostkami vh na urządzeniach mobilnych.
    • lvh: Large Viewport Height.
    • svh: Small Viewport Height.
    • dvh: Dynamic Viewport Height.

Przykład:

.full-height {
  height: 100dvh;
}

 

9. Funkcje koloru: color(), color-mix()

Opis:

    • Umożliwiają bardziej zaawansowane operacje na kolorach.
    • color(): Definiowanie kolorów w różnych przestrzeniach barw.
    • color-mix(): Mieszanie dwóch kolorów.

Przykład:

.button {
  background-color: color-mix(in srgb, red 50%, blue);
}

 

10. Subgrid w CSS Grid Level 2

Opis:

    • Pozwala na dziedziczenie siatki przez elementy potomne.
    • Ułatwia tworzenie złożonych układów z zagnieżdżonymi siatkami.

Przykład:

.grid-container {
  display: grid;
  grid-template-columns: 1fr 1fr;
}

.grid-item {
  display: grid;
  grid-template-columns: subgrid;
}

 

 

Jak korzystać z funkcji eksperymentalnych?

1. Sprawdź wsparcie przeglądarek

    • Używaj narzędzi takich jak Can I use: https://caniuse.com/
    • Sprawdź, czy dana funkcja jest obsługiwana przez przeglądarki, które są ważne dla Twoich użytkowników.

2. Używaj prefiksów

    • Niektóre funkcje mogą wymagać użycia prefiksów przeglądarek, np. -webkit-, -moz-.
    • Przykład:
      .element {
        display: -webkit-box;
        display: -ms-flexbox;
        display: flex;
      }

       

3. Włącz eksperymentalne funkcje w przeglądarce

    • W celach testowych możesz włączyć funkcje eksperymentalne w ustawieniach przeglądarki.
    • Uwaga: Nie jest to rozwiązanie dla produkcji.

4. Używaj narzędzi do przetwarzania CSS

    • PostCSS: Narzędzie do przetwarzania CSS, które pozwala na użycie funkcji przyszłych specyfikacji już teraz.
    • Autoprefixer: Automatycznie dodaje prefiksy do CSS.

5. Polyfills i fallbacki

    • Zapewnij alternatywne stylizacje dla przeglądarek, które nie obsługują nowych funkcji.
    • Przykład:
      .element {
        width: 100%;
        max-width: 600px;
        /* Fallback */
        height: auto;
        /* Nowa funkcja */
        aspect-ratio: 16 / 9;
      }

       

 

Dobre praktyki

1. Progressive Enhancement (Stopniowe ulepszanie)

    • Twórz strony w taki sposób, aby podstawowa funkcjonalność była dostępna dla wszystkich, a nowe funkcje dodają wartość dla przeglądarek, które je obsługują.

2. Feature Queries

    • Używaj @supports, aby sprawdzić, czy przeglądarka obsługuje daną funkcję.

Przykład:

@supports (aspect-ratio: 1 / 1) {
  .element {
    aspect-ratio: 1 / 1;
  }
}

 

3. Testuj na różnych przeglądarkach

    • Regularnie testuj swoją stronę na różnych przeglądarkach i urządzeniach.
    • Używaj narzędzi do testowania kompatybilności.

4. Dokumentacja i społeczność

    • Śledź aktualizacje w specyfikacjach CSS.
    • Korzystaj z dokumentacji i uczestnicz w społecznościach deweloperów.

 

Częste problemy i ich rozwiązania

1. Funkcja nie działa w niektórych przeglądarkach

    • Rozwiązanie: Sprawdź wsparcie w caniuse.com i zapewnij fallback lub polyfill.

2. Prefiksy nie są dodane

    • Rozwiązanie: Użyj Autoprefixera lub dodaj prefiksy ręcznie.

3. Niezgodność z preprocesorami CSS

    • Rozwiązanie: Upewnij się, że Twój preprocesor jest skonfigurowany do obsługi nowych funkcji lub zaktualizuj go.

 

Narzędzia wspomagające pracę z nowościami w CSS

1. PostCSS

    • Opis: Narzędzie do przetwarzania CSS z wieloma wtyczkami.
    • Strona: https://postcss.org/

2. Autoprefixer

    • Opis: Wtyczka do PostCSS, która automatycznie dodaje prefiksy.
    • Strona: https://github.com/postcss/autoprefixer

3. Can I use

    • Opis: Serwis do sprawdzania wsparcia funkcji webowych w przeglądarkach.
    • Strona: https://caniuse.com/

4. CSS Houdini Paint API

    • Opis: Eksperymentalne narzędzie do tworzenia niestandardowych właściwości CSS.
    • Strona: https://houdini.how/

 

Przykładowa implementacja nowych funkcji

HTML (index.html)

<!DOCTYPE html>
<html lang="pl">
<head>
  <meta charset="UTF-8">
  <title>Nowości w CSS</title>
  <link rel="stylesheet" href="style.css">
</head>
<body>
  <div class="container">
    <h1>Nowe funkcje CSS</h1>
    <div class="grid">
      <div class="grid-item">Element 1</div>
      <div class="grid-item">Element 2</div>
      <div class="grid-item">Element 3</div>
    </div>
    <button class="button">Kliknij mnie</button>
  </div>
</body>
</html>

 

CSS (style.css)

/* Użycie zmiennych CSS */
:root {
  --primary-color: color-mix(in srgb, blue, red 50%);
  --spacing: 16px;
}

/* Nowe funkcje */
.container {
  padding: var(--spacing);
  background-color: var(--primary-color);
}

.grid {
  display: grid;
  grid-template-columns: repeat(auto-fill, minmax(200px, 1fr));
  gap: var(--spacing);
}

.grid-item {
  aspect-ratio: 1 / 1;
  background-color: white;
  display: flex;
  align-items: center;
  justify-content: center;
}

.button {
  margin-top: var(--spacing);
  padding: clamp(8px, 2vw, 16px);
}

/* Użycie :is() */
.grid-item:is(:hover, :focus) {
  background-color: yellow;
}

/* Feature Queries */
@supports (container-type: inline-size) {
  .container {
    container-type: inline-size;
  }

  @container (min-width: 600px) {
    .grid-item {
      background-color: lightblue;
    }
  }
}

 

 

Podsumowanie

W tej lekcji nauczyliśmy się:

    • Jakie są najnowsze funkcje i przyszłe specyfikacje w CSS, takie jak clamp(), aspect-ratio, :is() czy Container Queries.
    • Jak korzystać z funkcji eksperymentalnych, uwzględniając wsparcie przeglądarek i najlepsze praktyki.
    • Jak używać narzędzi takich jak PostCSS i Autoprefixer do pracy z nowymi funkcjami.
    • Dobrych praktyk, takich jak Progressive Enhancement i Feature Queries, aby zapewnić kompatybilność i dostępność strony.
    • Jak testować i debugować problemy związane z nowymi funkcjami CSS.

Nowości w CSS otwierają przed nami wiele możliwości, pozwalając tworzyć bardziej zaawansowane i efektywne strony internetowe. Śledzenie tych zmian i eksperymentowanie z nowymi funkcjami pozwoli Ci być na bieżąco i rozwijać swoje umiejętności jako deweloper.

 

Zadania do samodzielnego wykonania

    1. Zastosuj nowe funkcje CSS w swoim projekcie:

      • Wykorzystaj clamp(), min(), max() do ustalania wartości.
      • Dodaj aspect-ratio do elementów graficznych.
    2. Eksperymentuj z selektorami:

      • Użyj :is() i :where() w swoim kodzie CSS, aby uprościć selektory.
    3. Przetestuj Container Queries:

      • Sprawdź, czy możesz zaimplementować podstawowe Container Queries w swoim projekcie, pamiętając o wsparciu przeglądarek.
    4. Użyj narzędzi do przetwarzania CSS:

      • Zainstaluj PostCSS i Autoprefixer, aby korzystać z nowych funkcji i zapewnić kompatybilność.
    5. Sprawdź wsparcie przeglądarek:

      • Używając caniuse.com, sprawdź, które funkcje są obsługiwane przez przeglądarki Twoich użytkowników.

 

Ciekawostka

Czy wiesz, że rozwój CSS jest kierowany przez grupę roboczą W3C, która składa się z przedstawicieli firm takich jak Apple, Google, Microsoft i Mozilla? Dzięki temu nowe funkcje są projektowane z myślą o szerokim wsparciu i potrzebach deweloperów. Proces standaryzacji jest długi i skomplikowany, ale dzięki temu CSS staje się coraz bardziej potężnym narzędziem.

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