CSS: 2023 r.

Nagłówek ujęty w ramki przez usługę porównywania cen

CSS Wrapped: 2023!

Niesamowite! Rok 2023 był dla CSS bardzo ważny.

Od #Interop2023 po wiele nowych stron w kategorii CSS i UI, które umożliwiają korzystanie z funkcji, które deweloperzy uważali kiedyś za niemożliwe na platformie internetowej. Obecnie każda nowoczesna przeglądarka obsługuje zapytania dotyczące kontenera, subgrid, selektor :has() oraz całą gamę nowych przestrzeni i funkcji kolorów. W Chrome obsługujemy animacje sterowane przewijaniem oparte wyłącznie na CSS oraz płynne animacje między widokami za pomocą przejść między widokami. Co więcej, pojawiło się wiele nowych prymitywów, które ułatwiają pracę deweloperom, np. zagnieżdżanie CSSstyl skodyfikowany.

Co to był za rok! Dlatego kończymy ten przełomowy rok, aby uczcić i docenić ciężką pracę deweloperów przeglądarek oraz całej społeczności internetowej, dzięki której wszystko to było możliwe.

Podstawy architektoniczne

Zacznijmy od zmian w podstawowym języku CSS i jego możliwościach. To funkcje, które stanowią podstawę tworzenia i organizowania stylów oraz zapewniają deweloperom dużą swobodę działania.

Funkcje trygonometryczne

Obsługa przeglądarek

  • Chrome: 111.
  • Edge: 111.
  • Firefox: 108.
  • Safari: 15.4.

Źródło

W Chrome 111 dodano obsługę funkcji trygonometrycznych sin(), cos(), tan(), asin(), acos(), atan()atan2(), udostępniając je we wszystkich głównych silnikach. Te funkcje są bardzo przydatne do tworzenia animacji i układów. Teraz łatwiej jest na przykład rozmieszczać elementy w kółku wokół wybranego punktu środkowego.

Funkcje trygonometryczne – prezentacja

Dowiedz się więcej o funkcjach trygonometrycznych w CSS.

Zaznaczenie złożone n-ty*

Obsługa przeglądarek

  • Chrome: 111.
  • Edge: 111.
  • Firefox: 113.
  • Safari: 9.

Dzięki selektorowi pseudoklasy :nth-child() można wybierać elementy w DOM według ich indeksu. Dzięki mikroskładnikom An+B możesz dokładnie określić, które elementy chcesz wybrać.

Domyślnie pseudoelementy :nth-*() uwzględniają wszystkie elementy podrzędne. Od wersji 111 Chrome możesz opcjonalnie przekazywać listę selektorów do funkcji :nth-child():nth-last-child(). Dzięki temu możesz wstępnie odfiltrować listę dzieci, zanim An+B wykona swoje zadanie.

W tym pokazie logika 3n+1 jest stosowana tylko do małych lalek, które są wstępnie odfiltrowywane za pomocą funkcji of .small. Za pomocą menu możesz dynamicznie zmieniać używany selektor.

Demo złożonego wyboru n-*

Dowiedz się więcej o kompleksowych wyborach n-ty*.

Zakres

Obsługa przeglądarek

  • Chrome: 118.
  • Edge: 118.
  • Firefox: za pomocą flagi.
  • Safari: 17.4.

Źródło

W Chrome 118 dodano obsługę @scope, czyli reguły at, która umożliwia ograniczenie dopasowywania selektora do określonego poddrzewa dokumentu. Dzięki stylizacji ograniczonej do zakresu możesz dokładnie określić, które elementy chcesz wybrać, bez konieczności pisania zbyt szczegółowych selektorów lub ścisłego łączenia ich ze strukturą DOM.

Poddrzewo ograniczone jest zdefiniowane przez węzeł ograniczający (górna granica) i opcjonalny limit ograniczający (dolna granica).

@scope (.card) {  } /* scoping root */
@scope (.card) to (.card__content) {  } /* scoping root + scoping limit*/

Reguły stylów umieszczone w bloku zakresu będą kierowane tylko na elementy w wyodrębnionym poddrzewie. Na przykład poniższa reguła stylu ograniczona do zakresu obejmuje tylko elementy <img>, które znajdują się między elementem .card a dowolnym zagnieżdżonym komponentem zgodnym z selektorem [data-component].

@scope (.card) to ([data-component]) {
  img {  }
}

W tym pokazie elementy <img> w komponencie karuzeli nie są dopasowywane ze względu na zastosowany limit zakresu.

Zrzut ekranu wersji demonstracyjnej

Zrzut ekranu z demonstracją funkcji @scope

Prezentacja na żywo funkcji Scope

Demo @scopeCSS

Więcej informacji o @scope znajdziesz w artykule „Jak za pomocą @scope ograniczyć zasięg selektorów”. Z tego artykułu dowiesz się więcej o selektorze :scope, sposobie obsługi specyficzności, zakresach bez wstępu i wpływie @scope na kaskadę.

Umieszczanie

Obsługa przeglądarek

  • Chrome: 120.
  • Edge: 120.
  • Firefox: 117.
  • Safari: 17.2.

Źródło

Przed zagnieżcheniem każdy selektor musiał być zadeklarowany oddzielnie od pozostałych. Prowadzi to do powtarzania się elementów, tworzenia dużej ilości plików stylów i rozproszonego procesu tworzenia. Teraz selektory można kontynuować, łącząc je z powiązanymi regułami stylu.

dl {
  /* dt styles */
  
  dt {
    /* dl dt styles */
  }

  dd {
    /* dl dd styles */
  }
}

/* same as */
dt {
  /* dt styles */
}

dl dt {
  /* dl dt styles */
}

dl dd {
  /* dl dd styles */
}

Prezentacja ekranu w ramach etapu testowego

Nesting Live Demo

Zmień selektor łagodnego zagnieżdżenia, aby wybrać zwycięzcę wyścigu

Umieszczanie w ramach może zmniejszyć rozmiar arkusza stylów, ograniczyć nadmiar selektorów powtarzających się elementów oraz scentralizować style komponentów. Początkowo ta składnia została wydana z ograniczeniem wymagającym użycia & w różnych miejscach, ale to ograniczenie zostało zniesione w ramach aktualizacji składnia umożliwiającej zagnieżdżanie.

Dowiedz się więcej o zagnieżdżaniu.

Subgrid

Obsługa przeglądarek

  • Chrome: 117.
  • Edge: 117.
  • Firefox: 71.
  • Safari: 16.

Źródło

CSS subgrid umożliwia tworzenie bardziej złożonych siatek z lepszym wyrównaniem układów podrzędnych. Umożliwia to siatce, która znajduje się wewnątrz innej siatki, przyjęcie wierszy i kolumn zewnętrznej siatki jako własnych, używając wartości subgrid jako wartości wierszy lub kolumn siatki.

Screencast subgrid

Prezentacja na żywo dotycząca subgrid

Nagłówek, tekst i stopka dostosowują się do dynamicznych rozmiarów swoich elementów równorzędnych.

Subgrid jest szczególnie przydatny do dopasowywania elementów siostrzanych do ich dynamicznych treści. Dzięki temu copywriterzy, autorzy treści UX i tłumacze nie muszą już tworzyć tekstu, który „pasuje” do układu. Dzięki siatce szczegółowej układ można dostosować do treści.

Dowiedz się więcej o subgridzie.

Typografia

W 2023 r. wprowadziliśmy kilka ważnych zmian w typografii internetowej. Szczególnie warte uwagi jest pole text-wrap. Ta właściwość umożliwia dostosowanie układu typograficznego w przeglądarce bez konieczności tworzenia dodatkowych skryptów. Zapomnij o niewygodnej długości wierszy i poznaj bardziej przewidywalną typografię.

Pierwsza litera

Obsługa przeglądarek

  • Chrome: 110.
  • Edge: 110.
  • Firefox: nieobsługiwane.
  • Safari: 9.

Źródło

Na początku roku w Chrome 110 pojawiła się właściwość initial-letter, która jest niewielką, ale potężną funkcją CSS, która określa styl umieszczania liter początkowych. Litery możesz ustawić w pozycji obniżonej lub podniesionej. Właściwość ta przyjmuje 2 argumenty: pierwszy określa, jak głęboko ma być wstawiona litera w odpowiednim akapicie, a drugi – o ile litera ma być podniesiona nad akapit. Możesz też połączyć oba te rozwiązania, jak w tym filmie demonstracyjnym.

Zrzut ekranu z pierwszą literą

Zrzut ekranu pokazujący wersję demonstracyjną funkcji początkowej litery

Demo z pierwszą literą

Zmieniaj wartości initial-letter dla pseudoelementu ::first-letter, aby obserwować zmiany.

Dowiedz się więcej o literze początkowej.

text-wrap: balance and pretty

Jako programista nie znasz ostatecznego rozmiaru, rozmiaru czcionki ani nawet języka nagłówka lub akapitu. Wszystkie zmienne potrzebne do efektywnego i estetycznego łamania tekstu znajdują się w przeglądarce. Przeglądarka zna wszystkie czynniki, takie jak rozmiar czcionki, język i przydzielone miejsce, co sprawia, że jest idealnym narzędziem do obsługi zaawansowanego układu tekstu o wysokiej jakości.

Właśnie w tym celu służą 2 nowe techniki przenoszenia tekstu: balancepretty. Wartość balance ma na celu tworzenie spójnego bloku tekstu, a wartość pretty ma zapobiegać występowaniu znaków samotnych oraz zapewniać prawidłowe dzielenie wyrazów. Oba te zadania były tradycyjnie wykonywane ręcznie, więc to wspaniałe, że można je zlecić przeglądarce i że działa ona w przypadku dowolnego przetłumaczonego języka.

Screencast z zawijaniem tekstu

Prezentacja na żywo zawijania tekstu

W tym pokazie możesz porównać efekty balance i pretty na nagłówku oraz akapicie, przesuwając suwak. Spróbuj przetłumaczyć wersję demonstracyjną na inny język.

Dowiedz się więcej o text-wrap: balance.

Kolor

Rok 2023 był rokiem kolorów na platformie internetowej. Dzięki nowym przestrzeniom barw i funkcjom, które umożliwiają dynamiczne motywy kolorów, możesz tworzyć żywe, bogate motywy, na które zasługują użytkownicy, a także je dostosowywać.

Kolory HD (poziom kolorów 4)

Obsługa przeglądarek

  • Chrome: 111.
  • Edge: 111.
  • Firefox: 113.
  • Safari: 15.

Źródło

Obsługa przeglądarek

  • Chrome: 111.
  • Edge: 111.
  • Firefox: 113.
  • Safari: 15.

Źródło

Od sprzętu do oprogramowania, od CSS do migających świateł – komputery muszą wykonać wiele pracy, aby odwzorować kolory tak dobrze, jak je widzimy. W 2023 r. wprowadziliśmy nowe kolory, więcej kolorów, nowe przestrzenie barw, funkcje kolorów i nowe możliwości.

CSS i kolory mogą teraz: – Sprawdzać, czy sprzęt użytkownika obsługuje kolory HDR o szerokiej gamie. – Sprawdź, czy przeglądarka użytkownika obsługuje składnię kolorów, np. Oklch lub Display P3. – Określ kolory HDR w modelach Oklab, Oklch, HWB, Display P3, Rec.2020, XYZ i innych. – tworzyć gradienty z kolorami HDR, – interpolować gradienty w alternatywnych przestrzeniach kolorów. – Mieszanie kolorów za pomocą color-mix(). – tworzenie wariantów kolorów za pomocą względnej składni kolorów;

Screencast na urządzeniu Color 4

Color 4 Demo

W tym pokazie możesz porównać efekty działania opcji „balance” i „pretty” na nagłówku i akapicie, przeciągając suwak. Spróbuj przetłumaczyć wersję demonstracyjną na inny język.

Dowiedz się więcej o kolorach 4 i przestrzeniach barw.

Funkcja color-mix

Obsługa przeglądarek

  • Chrome: 111.
  • Edge: 111.
  • Firefox: 113.
  • Safari: 16.2.

Źródło

Mieszanie kolorów to klasyczne zadanie, które w 2023 r. będzie można wykonywać w CSS. Możesz nie tylko mieszać kolory z białym lub czarnym, ale też z przeźroczystością. Wszystko to możesz robić w dowolnej przestrzeni barw. Jest to jednocześnie funkcja kolorów podstawowych i zaawansowanych.

Screencast funkcji color-mix()

Demonstracja funkcji color-mix()

W wersji demonstracyjnej możesz wybrać 2 kolory za pomocą selektora kolorów, przestrzeń barw i procentowy udział każdego koloru w mieszance.

color-mix() można traktować jako moment w gradientzie. Gradient pokazuje wszystkie kroki potrzebne do przejścia od koloru niebieskiego do białego, a color-mix() tylko jeden krok. Gdy zaczniesz uwzględniać przestrzenie kolorów, zacznie się robić ciekawie. Dowiesz się, jak bardzo mieszanie przestrzeni kolorów może wpływać na wyniki.

Dowiedz się więcej o funkcji color-mix().

Składnia koloru względnego

Składnia kolorów względnych (RCS) to uzupełnienie metody color-mix() służącej do tworzenia wersji kolory. Jest on nieco bardziej zaawansowany niż color-mix(), ale też wykorzystuje inną strategię pracy z kolorami. color-mix() może mieszać kolor biały, aby rozjaśnić kolor, a RCS zapewnia precyzyjny dostęp do kanału jasności i możliwość korzystania z calc() na tym kanale w celu zmniejszenia lub zwiększenia jasności w sposób programowy.

Screencast dotyczący RCS

Prezentacja na żywo RCS

Zmieniaj kolory i sceny. Każdy z nich używa składnika koloru względnego do tworzenia wariantów na podstawie koloru podstawowego.

RCS umożliwia wykonywanie względnych i bezwzględnych manipulacji kolorem. Zmiana względna polega na tym, że bierze się bieżącą wartość nasycenia lub jasności i modyfikuje ją za pomocą calc(). Zmiana bezwzględna to taka, w której zastępujesz wartość kanału zupełnie nową, np. ustawiasz przezroczystość na 50%. Ta składnia udostępnia przydatne narzędzia do tworzenia motywów, wariantów na czas i innych rozwiązań.

Dowiedz się więcej o względnej składni kolorów.

Elastyczne projektowanie

Elastyczne projektowanie witryn ewoluowało w 2023 r. W tym przełomowym roku wprowadziliśmy nowe funkcje, które całkowicie zmieniły sposób tworzenia responsywnych stron internetowych, i wprowadziliśmy nowy model responsywnego projektowania opartego na komponentach. Połączenie zapytań dotyczących kontenera i :has() obsługuje komponenty, które mają swoje elastyczne i logiczne style na podstawie rozmiaru ich elementu nadrzędnego, a także obecności lub stanu ich elementów podrzędnych. Oznacza to, że możesz w końcu oddzielić układ na poziomie strony od układu na poziomie komponentu i raz napisać logikę, aby używać komponentu wszędzie.

Zapytania dotyczące kontenera z rozmiarami

Obsługa przeglądarek

  • Chrome: 105.
  • Edge: 105.
  • Firefox: 110.
  • Safari: 16.

Źródło

Zamiast stosować do stylów CSS informacje o globalnym rozmiarze widoku, zapytania kontenera umożliwiają zapytanie elementu nadrzędnego na stronie. Oznacza to, że komponenty mogą być stylizowane dynamicznie w wielu układach i widokach. W Walentynki tego roku (14 lutego) zapytania dotyczące rozmiaru kontenera stały się stabilne we wszystkich nowoczesnych przeglądarkach.

Aby korzystać z tej funkcji, najpierw skonfiguruj ograniczenie dla elementu, którego dotyczy zapytanie, a następnie, podobnie jak w przypadku zapytania o media, użyj @container z parametrami rozmiaru, aby zastosować style. Wraz z zapytaniami w kontenerze otrzymujesz rozmiary zapytań w kontenerze. W tej prezentacji rozmiar zapytania kontenera cqi (reprezentujący rozmiar kontenera wbudowanego) jest używany do określania rozmiaru nagłówka karty.

@container Screencast

@container Demo

Dowiedz się więcej o używaniu zapytań dotyczących kontenerów.

Zapytania dotyczące kontenera stylów

Obsługa przeglądarek

  • Chrome: 111.
  • Edge: 111.
  • Firefox: nieobsługiwane.
  • Safari: 18.

Źródło

Zapytania o styl zostały częściowo zaimplementowane w Chrome 111. W przypadku zapytań dotyczących stylów możesz obecnie wysyłać zapytania o wartość właściwości niestandardowych w elemencie nadrzędnym, gdy używasz @container style(). Możesz na przykład sprawdzić, czy istnieje wartość właściwości niestandardowej lub czy jest ona ustawiona na określoną wartość, np. @container style(--rain: true).

Zrzut ekranu z zapytaniem o styl

Zrzut ekranu pokazujący karty pogodowe w zapytaniach do kontenera

Demo zapytania o styl

Zmieniaj kolory i sceny. Każdy z nich używa składnika koloru względnego do tworzenia wariantów na podstawie koloru podstawowego.

Chociaż brzmi to podobnie do używania nazw klas w CSS, zapytania o styl mają pewne zalety. Po pierwsze, za pomocą zapytań o style możesz w razie potrzeby aktualizować wartość w CSS w celu tworzenia pseudostanów. W przyszłych wersjach implementacji będzie można też wysyłać zapytania o zakresy wartości, aby określić zastosowany styl (np. style(60 <= --weather <= 70)), oraz styl na podstawie pary „właściwość–wartość” (np. style(font-style: italic)).

Dowiedz się więcej o używaniu zapytań dotyczących stylów.

:has()

Obsługa przeglądarek

  • Chrome: 105.
  • Edge: 105.
  • Firefox: 121.
  • Safari: 15.4.

Źródło

Od prawie 20 lat programiści prosili o wprowadzenie w CSS „selekcjonera nadrzędnego”. Jest to możliwe dzięki selektorowi :has(), który został wprowadzony w Chrome 105. Na przykład użycie .card:has(img.hero) spowoduje wybranie elementów .card, które mają element podrzędny .card.

Zrzut ekranu funkcji :has()

Zrzut ekranu pokazujący przykład funkcji :has()

:has() Prezentacja na żywo

CSS :has()demo: karta bez/z obrazem

Funkcja :has() przyjmuje jako argument listę względnych selektorów, dzięki czemu możesz wybrać znacznie więcej niż element nadrzędny. Za pomocą różnych kombinatorów CSS można nie tylko przemieszczać się w drzewie DOM, ale też dokonywać selekcji bocznych. Na przykład li:has(+ li:hover) wybierze element <li>, który poprzedza element <li> nad którym znajduje się kursor.

:has() Screencast

Demo funkcji :has()

CSS :has() demo: Dock

Dowiedz się więcej o selektorze CSS :has().

Aktualizowanie zapytania dotyczącego mediów

Obsługa przeglądarek

  • Chrome: 113.
  • Edge: 113.
  • Firefox: 102.
  • Safari: 17.

Źródło

Zapytanie o multimedia update umożliwia dostosowanie interfejsu do częstotliwości odświeżania urządzenia. Funkcja może zwracać wartość fast, slow lub none, która jest powiązana z możliwościami różnych urządzeń.

Większość urządzeń, na które projektujesz, prawdopodobnie ma szybką częstotliwość odświeżania. Dotyczy to komputerów i większości urządzeń mobilnych. Czytniki e-booków i urządzenia takie jak niskonapięciowe systemy płatności mogą mieć wolną częstotliwość odświeżania. Wiedząc, że urządzenie nie radzi sobie z animacjami lub częstymi aktualizacjami, możesz oszczędzać baterię lub nieprawidłowe aktualizacje widoku.

Aktualizowanie screencasta

Aktualizacja wersji demonstracyjnej

Za pomocą opcji radiowej symuluj wartość szybkości aktualizacji i zobacz, jak wpływa ona na kaczkę.

Dowiedz się więcej o @media (aktualizacja).

Skryptowanie zapytania o multimedia

Obsługa przeglądarek

  • Chrome: 120.
  • Edge: 120.
  • Firefox: 113.
  • Safari: 17.

Źródło

Zapytanie dotyczące obsługi skryptów pozwala sprawdzić, czy JavaScript jest dostępny. To bardzo przydatne w przypadku stopniowego ulepszania. Przed tą zapytaniem o multimedia strategia wykrywania dostępności JavaScriptu polegała na umieszczeniu w pliku HTML klasy nojs i usuwaniu jej za pomocą JavaScriptu. Te skrypty można usunąć, ponieważ CSS ma teraz możliwość wykrywania JavaScriptu i odpowiedniego dostosowywania.

Dowiedz się, jak włączać i wyłączać JavaScript na stronie, aby przetestować ją za pomocą Narzędzi deweloperskich w Chrome.

Screencast dotyczący skryptów

Wersja demonstracyjna skryptów

Rozważ przełączanie motywów w witrynie. Zapytanie o multimedia w skrypcie może pomóc w przełączeniu na ustawienie systemu, ponieważ nie jest dostępny JavaScript. Możesz też rozważyć komponent przełącznika. Jeśli JavaScript jest dostępny, przełącznik można aktywować gestem, zamiast tylko włączać i wyłączać. Jeśli skrypty są wyłączone, możesz stworzyć użyteczne środowisko podstawowe.

Dowiedz się więcej o skrypcie.

Zapytanie o multimedia z ograniczoną przejrzystością

Obsługa przeglądarek

  • Chrome: 118.
  • Edge: 118.
  • Firefox: za pomocą flagi.
  • Safari: nieobsługiwane.

Źródło

Nieprzezroczyste interfejsy mogą powodować bóle głowy lub utrudniać korzystanie z aplikacji osobom z różnymi wadami wzroku. Dlatego w systemach Windows, macOS i iOS są dostępne ustawienia, które pozwalają zmniejszyć lub całkowicie usunąć przezroczystość interfejsu. To zapytanie o multimedia dla prefers-reduced-transparency pasuje do innych preferowanych zapytań o multimedia, które pozwalają na kreatywność, a jednocześnie dostosowują reklamy do użytkowników.

Screencast z półprzezroczystością

Demonstracja funkcji Reduced Transparency

W niektórych przypadkach możesz przesłać alternatywny układ, w którym nie ma nakładających się treści. W innych przypadkach można dostosować krycie koloru, aby było nieprzejrzyste lub prawie nieprzejrzyste. W tym wpisie na blogu znajdziesz więcej inspirujących demonstracji, które dostosowują się do preferencji użytkownika. Zapoznaj się z nimi, jeśli chcesz dowiedzieć się, kiedy warto używać zapytania o multimedia.

Dowiedz się więcej o @media (prefers-reduced-transparency).

Interakcja

Interakcja jest podstawą doświadczeń cyfrowych. Dzięki temu użytkownicy mogą dowiedzieć się, co kliknęli i gdzie się znajdują w przestrzeni wirtualnej. W tym roku pojawiło się wiele ciekawych funkcji, które ułatwiają tworzenie i wdrażanie interakcji, co pozwala na płynne przejścia użytkowników przez witrynę i zapewnia lepsze wrażenia z korzystania z internetu.

Wyświetlanie przejść

Obsługa przeglądarek

  • Chrome: 111.
  • Edge: 111.
  • Firefox: nieobsługiwane.
  • Safari: 18.

Źródło

Przejścia między widokami mają ogromny wpływ na wrażenia użytkownika związane z korzystaniem ze strony. Za pomocą interfejsu View Transitions API możesz tworzyć wizualne przejścia między 2 stanami strony w aplikacji jednostronicowej. Te przejścia mogą dotyczyć całej strony lub mniejszych elementów na stronie, takich jak dodawanie lub usuwanie nowego elementu z listy.

Interfejs View Transitions API opiera się na funkcji document.startViewTranstion. Przekaż funkcję, która aktualizuje DOM do nowego stanu, a interfejs API zajmie się wszystkim za Ciebie. Polega to na zrobieniu migawki przed i po, a następnie przełączeniu się między nimi. Za pomocą kodu CSS możesz kontrolować, co zostanie uchwycone, i opcjonalnie dostosować sposób animowania tych ujęć.

VT Screencast

VT Demo

Wyświetl demonstrację przejścia

interfejs View Transitions API do aplikacji jednostronicowych wprowadzony w Chrome 111. Dowiedz się więcej o przejściach między widokami.

Funkcja przejścia liniowego

Obsługa przeglądarek

  • Chrome: 113.
  • Edge: 113.
  • Firefox: 112.
  • Safari: 17.2.

Nie daj się zmylić nazwie tej funkcji. Funkcja linear() (nie mylić z kluczowym słowem linear) umożliwia tworzenie złożonych funkcji wygładzania w prosty sposób, ale z pewnym kompromisem w kosztach precyzji.

Przed wprowadzeniem funkcji linear() w wersji 113 przeglądarki Chrome tworzenie efektów odbicia i odskoków w CSS było niemożliwe. Dzięki linear()można przybliżać te łagodne przejścia, upraszczając je do serii punktów, a następnie liniowo interpolować między tymi punktami.

Wykres wygładzający skok z kilkoma dodanymi kropkami
Pierwotna krzywa odskoku (na niebiesko) została uproszczona za pomocą zestawu kluczowych punktów (na zielono). Funkcja linear() używa tych punktów i liniowo interpoluje między nimi.

Screencast z liniowym wygaszaniem

Wygładzanie liniowe – wersja demonstracyjna

Demo usługi porównywania cen linear()

Dowiedz się więcej o linear(). Aby utworzyć krzywe linear(), użyj generatora wykładniczego liniowego.

Koniec przewijania

Obsługa przeglądarek

  • Chrome: 114.
  • Edge: 114.
  • Firefox: 109.
  • Safari: nieobsługiwane.

Źródło

Wiele interfejsów zawiera interakcje związane z przewijaniem, a czasami interfejs musi zsynchronizować informacje dotyczące bieżącej pozycji przewijania lub pobrać dane na podstawie bieżącego stanu. Przed zdarzeniem scrollend trzeba było używać nieprecyzyjnej metody limitowania czasu, która mogła się aktywować, gdy palec użytkownika nadal znajdował się na ekranie. Zdarzenie scrollend pozwala na śledzenie zakończenia przewijania w idealnym momencie, niezależnie od tego, czy użytkownik nadal wykonuje gest.

Screencast z przewijaniem

Demo końca przewijania

To było ważne dla przeglądarki, ponieważ JavaScript nie może śledzić obecności palców na ekranie podczas przewijania – te informacje są po prostu niedostępne. Fragmenty kodu nieprawidłowej próby zakończenia przewijania można teraz usunąć i zastąpić zdarzeniem o wysokiej precyzji należącym do przeglądarki.

Dowiedz się więcej o scrollend.

Animacje sterowane przewijaniem

Obsługa przeglądarek

  • Chrome: 115.
  • Edge: 115.
  • Firefox: za pomocą flagi.
  • Safari: nieobsługiwane.

Źródło

Animacje wywoływane przez przewijanie to ciekawa funkcja dostępna w Chrome 115. Dzięki nim możesz połączyć istniejącą animację CSS lub animację utworzoną za pomocą interfejsu Web Animations API z przesunięciem przewijania paska przewijania. Gdy przewijasz w górę i w dół lub w lewo i w prawo, połączona animacja będzie odtwarzać się do przodu i do tyłu.

Za pomocą ScrollTimeline możesz śledzić ogólny postęp scrollera, jak pokazano w tym filmie demonstracyjnym. Gdy przewijasz stronę do końca, tekst ujawnia się znak po znaku.

Screencast dotyczący SDA

Wersja demonstracyjna SDA

Przykład animacji CSS sterowanej przez przewijanie: linia czasu przewijania

Za pomocą ViewTimeline możesz śledzić element, gdy przechodzi przez obszar przewijania. Działa to podobnie do sposobu, w jaki IntersectionObserver śledzi element. W tym pokazie każde zdjęcie pojawia się od momentu, gdy wejdzie do obszaru przewijania, do momentu, gdy znajdzie się w środku.

Screencast z demonstracją SDA

Prezentacja na żywo SDA

Przykład animacji CSS uruchamianych przez przewijanie: widok osi czasu

Animacje sterowane przewijaniem działają z animacjami CSS i interfejsem Web Animations API, dzięki czemu możesz korzystać ze wszystkich zalet tych interfejsów API. Obejmuje to możliwość uruchamiania tych animacji poza wątkiem głównym. Teraz możesz uzyskać płynne animacje, które są uruchamiane przez przewijanie i działają w wątku pobocznym. Wystarczy do tego zaledwie kilka linii dodatkowego kodu.

Więcej informacji o animacjach sterowanych przewijaniem znajdziesz w tym artykule lub na stronie scroll-driven-animations.style, na której znajdziesz wiele wersji demonstracyjnych.

Załącznik do przesuniętych elementów osi czasu

Obsługa przeglądarek

  • Chrome: 116.
  • Edge: 116.
  • Firefox: nieobsługiwane.
  • Safari: nieobsługiwane.

Źródło

Podczas stosowania animacji sterowanej przez przewijanie za pomocą kodu CSS mechanizm wyszukiwania kontrolującego scroller zawsze przechodzi w górę drzewa DOM, co powoduje, że jest on ograniczony tylko do przodków przewijania. Często jednak element, który wymaga animacji, nie jest podrzędnym elementu scroller, ale elementem znajdującym się w zupełnie innym poddrzewie.

Aby umożliwić animowanemu elementowi znalezienie nazwanej osi czasu przewijania nieprzodka, użyj właściwości timeline-scope w przypadku udostępnionego elementu nadrzędnego. Dzięki temu zdefiniowane elementy scroll-timeline lub view-timeline o tej nazwie mogą się do niej dołączać, co zwiększa jej zasięg. W takim przypadku każda jednostka podrzędna tej udostępnionej jednostki nadrzędnej może korzystać z tej osi czasu.

Wizualizacja poddrzewa modelu DOM z zakresem osi czasu używanym w przypadku elementu nadrzędnego udostępnionego
Jeśli w deklaracji elementu nadrzędnego udostępnionego jest element timeline-scope, element scroll-timeline zadeklarowany w scrollerze może być znaleziony przez element, który używa go jako animation-timeline

Demo Screencast

Prezentacja na żywo

Przykład animacji sterowanej przewijaniem w CSS: załącznik z opóźnionym działaniem

Dowiedz się więcej o timeline-scope.

Animacje właściwości dyskretnych

Kolejną nową funkcją w 2023 r. jest możliwość animowania oddzielnych animacji, np. animacji do i z display: none. Od wersji 116 przeglądarki Chrome możesz używać w regułach kluczowych klatek wartości displaycontent-visibility. Możesz też przeprowadzić przejście w przypadku dowolnej właściwości dyskretnej w punkcie 50% zamiast 0%. Można to zrobić za pomocą właściwości transition-behavior, używając słowa kluczowego allow-discrete, lub za pomocą właściwości transition jako skrótu.

Discrete Anim. Screencast

Discrete Anim. Prezentacja

Dowiedz się więcej o przechodzeniu na oddzielne animacje.

@starting-style

Obsługa przeglądarek

  • Chrome: 117.
  • Edge: 117.
  • Firefox: 129.
  • Safari: 17.5.

Źródło

Reguła CSS @starting-style opiera się na nowych funkcjach internetowych umożliwiających animację display: none. Ta reguła umożliwia nadanie elementowi stylu „przed otwarciem”, który przeglądarka może sprawdzić, zanim element zostanie otwarty na stronie. Jest to bardzo przydatne w przypadku animacji wejścia i animacji elementów takich jak wyskakujące okienka czy okna dialogowe. Może się to przydać również wtedy, gdy tworzysz element i chcesz go animować. Weź pod uwagę poniższy przykład, w którym atrybut popover (patrz następna sekcja) jest animowany i płynnie przemieszczany z poziomu poza widocznym obszarem do widoku i do górnej warstwy.

@starting-style Screencast

@starting-style Demo

Dowiedz się więcej o stylu@starting i innych animacjach wejścia.

Nakładka

Obsługa przeglądarek

  • Chrome: 117.
  • Edge: 117.
  • Firefox: nieobsługiwane.
  • Safari: nieobsługiwane.

Źródło

Nową właściwość CSS overlay można dodać do przejścia, aby umożliwić płynne animacje elementów z używnymi stylami najwyższej warstwy, takich jak popoverdialog. Jeśli nie użyjesz nakładki przejścia, element natychmiast wróci do stanu ucięcia, przekształcenia i przykrycia, a Ty nie zobaczysz przejścia. Podobnie overlay umożliwia płynne animacje ::backdrop po dodaniu do elementu najwyższej warstwy.

Nakładka ekranu

Prezentacja na żywo z wykorzystaniem nakładki

Dowiedz się więcej o przesłonie i innych animacjach wyjścia.

Komponenty

Rok 2023 był ważnym rokiem w zakresie łączenia stylów i komponentów HTML, ponieważ wprowadziliśmy popover i wykonaliśmy wiele prac związanych z pozycjonowaniem kotwicy oraz przyszłym stylizowaniem menu. Te komponenty ułatwiają tworzenie typowych wzorów interfejsu użytkownika bez konieczności korzystania z dodatkowych bibliotek lub tworzenia od podstaw własnych systemów zarządzania stanem.

Menu

Obsługa przeglądarek

  • Chrome: 114.
  • Edge: 114.
  • Firefox: 125.
  • Safari: 17.

Źródło

Interfejs API Popup pomaga tworzyć elementy, które wyświetlają się na wierzchu reszty strony. Mogą to być menu, elementy dobierane przez użytkownika i etykiety. Aby utworzyć proste okno wyskakujące, dodaj atrybut popoverid do elementu, który się wyświetla, a następnie połącz jego atrybut id z przyciskiem wywołania za pomocą atrybutu popovertarget="my-popover". Interfejs Popover API obsługuje:

  • Promocja do warstwy najwyższej. Pop-upy będą wyświetlane w osobnej warstwie nad resztą strony, więc nie musisz bawić się wartością wskaźnika z-index.
  • Funkcja odrzucenia bez wyświetlania powiadomienia. Kliknięcie poza obszarem wyskakującego okienka spowoduje jego zamknięcie i przywrócenie fokusu.
  • Domyślne zarządzanie punktem ostrości. Po otwarciu wyskakującego okienka następny przystanek będzie znajdować się w wyskakującym okienku.
  • Dostęp do skrótów klawiszowych. Naciśnięcie klawisza esc lub dwukrotne kliknięcie spowoduje zamknięcie wyskakującego okienka i przywrócenie fokusu.
  • Dostępne powiązania komponentów. Semantyczne łączenie elementu wyskakującego okienka z jego aktywatorem

Screencast w wyskakującym okienku

Prezentacja na żywo wyskakującego okienka

Reguły poziome w wybranych

Kolejną niewielką zmianą w HTML, która pojawiła się w tym roku w Chrome i Safari, jest możliwość dodawania elementów poziomej linii (tagów <hr>) do elementów <select>, aby wizualnie podzielić treści. Wcześniej umieszczenie tagu <hr> w elemencie select po prostu nie powodowało renderowania. W tym roku zarówno Safari, jak i Chrome obsługują tę funkcję, co umożliwia lepsze oddzielenie treści w elementach <select>.

Wybierz zrzut ekranu

Zrzut ekranu przedstawiający poziome menu w jasnym i ciemnym trybie w Chrome

Wybierz prezentację na żywo

Dowiedz się więcej o używaniu znaku <hr> w wybranych.

:prawidłowe i nieprawidłowe pseudoklasy użytkownika

Obsługa przeglądarek

  • Chrome: 119.
  • Edge: 119.
  • Firefox: 88.
  • Safari: 16.5.

Źródło

W tym roku :user-valid:user-invalid są stabilne we wszystkich przeglądarkach. Działania tych pseudoklas :valid:invalid są podobne, ale elementy formularza pasują tylko wtedy, gdy użytkownik w znaczący sposób wejdzie w interakcję z polem wejściowym. Pole formularza, które jest wymagane i puste, będzie pasować do :invalid, nawet jeśli użytkownik nie zaczął jeszcze wchodzić w interakcję ze stroną. Ten sam element sterujący nie będzie pasować do :user-invalid, dopóki użytkownik nie zmieni danych wejściowych i nie pozostawi ich w nieprawidłowym stanie.

Dzięki tym nowym selektorom nie musisz już pisać kodu stanowego, aby śledzić zmiany wprowadzone przez użytkownika.

:user-* Screencast

:user-* Prezentacja na żywo

Dowiedz się więcej o używaniu pseudoelementów walidacji formularzy user-*.

Ekskluzywny harmonijka

Obsługa przeglądarek

  • Chrome: 120.
  • Edge: 120.
  • Firefox: 130.
  • Safari: 17.2.

Typowym wzorcem interfejsu użytkownika w internecie jest komponent harmonijka. Aby zastosować ten wzór, połącz kilka elementów <details>, często grupowanych wizualnie, aby wskazać, że należą do siebie.

Nowością w Chrome 120 jest obsługa atrybutu name w elementach <details>. Gdy używasz tego atrybutu, wiele elementów <details> o tej samej wartości name tworzy grupę semantyczną. W danym momencie można otworzyć tylko 1 element w grupie: gdy otworzysz jeden z elementów <details> z grupy, poprzednio otwarty element zostanie automatycznie zamknięty. Ten typ harmonijki nazywa się harmonijką wyłączną.

Demo wyłącznego menu

Elementy <details>, które są częścią wyłącznego elementu accordion, nie muszą być elementami braćmi. Mogą być rozproszone po całym dokumencie.

W ostatnich latach, a zwłaszcza w 2023 r., CSS przeżywa renesans. Jeśli nie znasz się na CSS lub chcesz odświeżyć podstawy, skorzystaj z naszego bezpłatnego kursu Ucz się CSS oraz innych bezpłatnych kursów dostępnych na stronie web.dev.

Życzymy Ci wesołych Świąt i liczymy, że wkrótce wykorzystasz w swojej pracy niektóre z tych wspaniałych nowych funkcji CSS i UI.

⇾ Zespół ds. interfejsu użytkownika w Chrome,