Studia przypadków dotyczące zapytań dotyczących kontenerów

Swetha Gopalakrishnan
Swetha Gopalakrishnan
Saurabh Rajpal
Saurabh Rajpal

Zapytania dotyczące kontenerów zapewniają bardzo dynamiczne i elastyczne podejście do projektowania responsywnego. Zapytania dotyczące kontenera używają reguły at @container. Działa ona podobnie do zapytania medialnego z użyciem @media, ale zamiast tego @container wysyła zapytanie do nadrzędnego kontenera w celu uzyskania informacji o stylu zamiast do viewportu i agenta użytkownika.

Zapytania dotyczące kontenera są częścią nowej wersji domyślnej.

Obsługa przeglądarek

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

Źródło

Zapytania o kontenery umożliwiają komponentom dostosowanie się do ich lokalizacji w interfejsie, odpowiadając na rozmiar kontenera. Na przykład element karty może dostosowywać swój rozmiar i style do kontenera, w którym się znajduje, czy to paska boczna, sekcja główna czy siatka w głównej części strony.

Jak widać na ilustracji poniżej, możesz łączyć zapytania dotyczące multimediów w przypadku makroschematów, zapytania dotyczące kontenera w przypadku mikroschematów oraz zapytania dotyczące multimediów na podstawie preferencji użytkownika, aby tworzyć wydajny system projektowania responsywnego. Dowiedz się więcej o zapytaniach dotyczących kontenerów i nowym responsywnym układzie.

Obraz pokazujący, jak różne typy stylizacji współdziałają ze sobą.
web.dev – nowe elastyczne projektowanie witryn

Ten artykuł należy do serii, w której omawiamy, jak firmy zajmujące się e-handlem ulepszają swoje witryny za pomocą nowych funkcji CSS i interfejsu użytkownika. Tym razem przyjrzymy się temu, jak niektóre firmy korzystały z zapytań dotyczących kontenerów i jakie przyniosło im to korzyści.

redBus

redBus obsługuje i serwuje inny kod w wersjach mobilnej i komputerowej. Po wdrożeniu zapytań kontenerowych na stronach Things-to-do i cargo firma mogła scalić ten kod w jedną bazę kodu dla tych witryn. Dzięki temu są one responsywne i oszczędzają czas programowania. Poniższy przykład pokazuje to na przykładzie strony ładunku:

Kod

W tym przykładzie .bpdpCardWrapper jest kontenerem nadrzędnym o nazwie bpdpSection.

Jeśli kontener bpdpSection ma minimalną szerokość 744 pikseli, wartości font-size i line-height komponentów wybranych przez .bpdpCardContainer i .subTxt, .bpdpAddress zostaną zaktualizowane.

//Code for Container Queries
.bpdpCardWrapper {
   container-type: inline-size;
   container-name: bpdpSection;
}
@container bpdpSection (min-width: 744px){
   .bpdpCardContainer{
      font-size: 1rem;
      line-height: 1.5rem;
   }

   .subTxt, .bpdpAddress{
       font-size: 0.875rem;
       line-height: 1.25rem;
   }
}

Wpływ

Przed (wiele baz kodu) Po (pojedyncza baza kodu)
Infrastruktura oddzielna infrastruktura (wysokie koszty); Ta sama infrastruktura (niższe koszty).
Projektowanie Oddzielne interfejsy, ale słaba spójność. Trudne do rozwiązania, ale możliwe.
Wyniki Łatwe w obsłudze, ponieważ system jest oddzielny, ale dubluje wysiłki związane ze zwiększaniem wydajności. Jest to kwestia specyficzna dla strony i funkcji, ale wynik redBusa w PageSpeedInsights wynosi ponad 80.
Programowanie oddzielne zespoły programistów, Skrócenie czasu o 30–40%.

Tokopedia

Na stronach ze szczegółami produktów w Tokopedia znajdują się różne karty z informacjami o sklepie i produkcie. Wcześniej układ tej strony był podzielony na 3 kolumny, a czasami nazwa produktu po lewej stronie była przycinana na mniejszych ekranach (patrz film „Wcześniej”).

Aby rozwiązać ten problem z układem, zespół szybko i łatwo wdrożył zapytania dotyczące kontenera. Po wdrożeniu tej funkcji firma mogła korzystać z elastycznego układu, w którym nazwa produktu była zawsze w pełni widoczna (patrz film „Po” poniżej).

Przed

Przed wdrożeniem zapytań dotyczących kontenerów słowa „ISKU 10 in 1 Obengsatu..” w lewym górnym rogu są obcinane na mniejszych ekranach.

Po

Wdrażanie zapytań dotyczących kontenera dostosowuje układ, zachowując tekst w widocznym obszarze.

Kod

Podany niżej kod wysyła zapytanie o rozmiar kontenera nadrzędnego o nazwie infowrapper. Jeśli maksymalna szerokość infowrapper wynosi 360 pikseli, komponenty podrzędne width, margin,padding zostaną dopasowane.

Ustawienie container-type na inline-size wysyła zapytanie o rozmiar kierunku w dokumencie elementu nadrzędnego. W przypadku języków łacińskich, takich jak angielski, będzie to szerokość nadrzędnego kontenera, ponieważ tekst jest wyrównany do lewej.

export const styCredibilityContainer = css`
  container-name: infowrapper;
  container-type: inline-size;
`;

export const styBtnShopFollow = css`
  margin-left: auto;
  width: 98px;
  @container infowrapper (max-width: 360px) {
    width: 100%;
    margin-top: 2px;
    margin-bottom: 8px;
    padding-left: 60px;
  }
`;

export const styBottomRow = css`
  margin-top: 4px;
  padding-left: 60px;
  display: flex;
  align-items: center;

  @container infowrapper (max-width: 360px) {
    padding-left: 0px;
  }

  > div {
    text-align: left;
    margin-top: 0 !important;
  }
`;

Co warto wziąć pod uwagę podczas korzystania z zapytań dotyczących kontenera

Tokopedia znalazła zastosowanie, szukając w swojej witrynie wielokropka tekstowego. Wskazano kontenery, które mogą być za małe, przez co treści są przycinane dla użytkownika.

Innym przydatnym zastosowaniem zapytań dotyczących kontenerów w przypadku witryn e-commerce jest sprawdzanie, czy nie ma w nich ponownie użytych komponentów. Na przykład przycisk Dodaj do koszyka może być wyświetlany inaczej w zależności od nadrzędnego kontenera (np. tylko ikona, jeśli znajduje się na karcie produktu, oraz ikona z tekstem, jeśli jest to główny przycisk wezwania do działania na stronie). Przycisk może być dobrym kandydatem na zapytanie dotyczące kontenera.

Możesz stopniowo ulepszać swoją witrynę. Możesz na przykład zacząć od mniejszych przypadków użycia, takich jak przykład elipsy z Tokopedia, i wdrożyć tam zapytania dotyczące kontenera. Następnie stopniowo znajduj więcej przypadków i ulepszaj usługę porównywania cen.

Zasoby:

Zapoznaj się z innymi artykułami z tej serii, aby dowiedzieć się, jak firmy e-commerce korzystały z nowych funkcji CSS i interfejsu, takich jak animacje sterowane przewijaniem, wyskakujące okienka, zapytania dotyczące kontenera i selektor has().