Podstawy elastycznego projektowania witryn

W miarę zwiększania liczby użytkowników telefonów komórkowych w internecie projektanci stron internetowych stają się coraz ważniejszym narzędziem układania treści w sposób dopasowany do ekranów o różnej wielkości. Elastyczne projektowanie witryn (wstępnie zdefiniowane przez Ethana Marcotte'a w publikacji A List Apart) to strategia, która pozwala reagować na potrzeby użytkowników i możliwości ich urządzeń, dostosowując układ witryny do używanych urządzeń. Na przykład strona elastyczna może wyświetlać treści w jednej kolumnie na telefonie, w 2 kolumnach na tablecie oraz w 3 lub 4 kolumnach na komputerze stacjonarnym.

Wraz z poszerzaniem ekranu zmienia się kształt widżetu.

Urządzenia z dostępem do internetu mają wiele różnych rozmiarów ekranów, dlatego ważne jest, aby Twoja witryna dostosowywała się do obecnych i przyszłych rozmiarów ekranów. Nowoczesne elastyczne projektowanie stron uwzględnia też tryby interakcji, takie jak ekrany dotykowe. Chcemy zapewnić jak najlepsze wrażenia wszystkim użytkownikom.

Ustawianie widocznego obszaru

Strony zoptymalizowane pod kątem różnych urządzeń muszą zawierać metatag viewport w nagłówku dokumentu. Ten tag informuje przeglądarkę o sposobie kontrolowania wymiarów i skalowania strony.

W trosce o wygodę użytkowników przeglądarki mobilne renderują stronę na szerokość ekranu komputera (zwykle około 980px, choć czas ten może się różnić w zależności od urządzenia). Następnie próbują poprawić wygląd treści, zwiększając rozmiar czcionki i skalując jej zawartość, by pasowała do ekranu. Może to powodować niespójność czcionek i wymagać od użytkowników powiększenia treści, aby móc je zobaczyć i z nimi pracować.

<!DOCTYPE html>
<html lang="en">
  <head>
        <meta name="viewport" content="width=device-width, initial-scale=1">
      </head>
  

Użycie wartości meta viewport width=device-width powoduje dopasowanie szerokości ekranu do pikseli niezależnych od urządzenia (DIP), czyli standardowej wizualnej jednostki piksela (która może składać się z wielu fizycznych pikseli na ekranie o wysokiej gęstości). Dzięki temu strona może dopasowywać zawartość do różnych rozmiarów ekranu.

Zrzut ekranu strony z tekstem nieczytelnym, ponieważ jest bardzo pomniejszony.
Strona bez metatagu viewport wczytuje się w bardzo zbliżeniu, przez co tekst jest mało czytelny. Zobacz ten przykład na Glitch
Zrzut ekranu tej samej strony z tekstem w rozmiarze umożliwiającym odczytanie.
Po ustawieniu metatagu viewport możesz czytać stronę bez powiększania. Zobacz przykład w Glitch

Niektóre przeglądarki zachowują stałą szerokość strony po przełączeniu na orientację poziomą i zamiast przewijania powiększają obraz, aby wypełnić ekran. Dodanie wartości initial-scale=1 informuje przeglądarki o ustawianiu relacji 1:1 między pikselami CSS a pikselami niezależnymi od urządzenia niezależnie od orientacji urządzenia. Pozwoli to stronom korzystać z pełnej szerokości poziomej.

Nie ma tagu <meta name="viewport"> z wartością width lub initial-scale. Audyt Lighthouse może pomóc Ci zautomatyzować proces sprawdzania, czy dokumenty HTML prawidłowo używają metatagu viewport.

Dopasowywanie rozmiaru zawartości do widocznego obszaru

Zarówno na komputerach, jak i na urządzeniach mobilnych użytkownicy przewijają strony w kierunku pionowym, a nie poziomym. Zmuszanie użytkownika do przewijania w poziomie lub do pomniejszenia widoku strony w celu wyświetlenia całej strony negatywnie wpływa na wrażenia użytkowników.

Podczas tworzenia witryny mobilnej z tagiem meta viewport często zdarza się, że treści strony są przypadkowo tworzone w sposób, który nie pasuje do określonego widocznego obszaru. Na przykład obraz wyświetlany szerzej niż widok może powodować przewijanie poziome. Aby temu zapobiec, dostosuj treści tak, aby mieściły się w widoku.

Zawartość nie jest odpowiednio dopasowana do widocznego obszaru. Audyt Lighthouse może pomóc Ci zautomatyzować proces wykrywania treści, które wystają poza widoczny obszar.

Obrazy

Obraz o stałych wymiarach powoduje przewijanie strony, jeśli jest większa niż widoczny obszar. Zalecamy, aby wszystkie obrazy miały max-width 100%, co powoduje ich zmniejszenie, aby pasowały do dostępnej przestrzeni, a jednocześnie zapobiega rozciąganiu się obrazu poza pierwotny rozmiar.

W większości przypadków możesz to zrobić, dodając do arkusza stylów ten kod:

img {
  max-width: 100%;
  display: block;
}

Dodaj wymiary obrazu do elementu img

Nawet jeśli ustawisz atrybut max-width: 100%, zalecamy dodanie atrybutów width i height do tagów <img>, aby przeglądarka mogła zarezerwować miejsce na obrazy przed ich załadowaniem. Pomaga to zapobiegać przesuniięciom układu.

Układ

Wymiary ekranu i szerokość w pikselach CSS różnią się znacznie w zależności od urządzenia (np. telefony i tablety, a nawet różne telefony), dlatego nie należy polegać na określonej szerokości widocznego obszaru.

W przeszłości wymagane było podanie wartości procentowych w elementach układu. Korzystanie z pikselowych pomiarów wymaga od użytkownika przewijania poziomego na małych ekranach:

Zrzut ekranu układu z 2 kolumnami, w którym większość drugiej kolumny znajduje się poza obszarem widoku
Układ pływający z użyciem pikseli. Zobacz ten przykład na Glitch

Użycie procentów powoduje, że kolumny są węższe na mniejszych ekranach, ponieważ każda kolumna zajmuje zawsze ten sam procent szerokości ekranu:

Nowoczesne techniki układu CSS, takie jak Flexbox, Układ siatki i Multicol, znacznie ułatwiają tworzenie takich elastycznych siatek.

Flexbox

Użyj Flexboxa, gdy masz zestaw elementów o różnych rozmiarach i chcesz, aby mieściły się one wygodnie w jednym lub kilku wierszach, przy czym mniejsze elementy powinny zajmować mniej miejsca, a większe więcej.

.items {
  display: flex;
  justify-content: space-between;
}

Za pomocą Flexbox możesz wyświetlać elementy jako pojedynczy wiersz lub zawijane do wielu wierszy, gdy ilość dostępnego miejsca się zmniejsza.

Więcej informacji o Flexbox.

Układ siatki CSS

Układ siatki CSS tworzy elastyczne siatki. Możesz ulepszyć wcześniejszy przykład z elementem wyśrodkowanym, używając układu siatki i jednostki fr, która reprezentuje część dostępnej przestrzeni w kontenerze.

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

Możesz też użyć układu siatki, aby tworzyć zwykłe układy siatki z tak dużą liczbą elementów, jak się mieści. Liczba dostępnych utworów zmniejsza się wraz ze zmniejszaniem rozmiaru ekranu. Ten pokaz demonstracyjny przedstawia siatkę zawierającą tyle kart, ile mieści się w każdym wierszu, z minimalnym rozmiarem 200px.

Więcej informacji o układzie siatki CSS

Układ z wieloma kolumnami

W przypadku niektórych typów układu możesz użyć układu wielokolumnowego (multicol), który tworzy elastyczną liczbę kolumn za pomocą właściwości column-width. W tym pokazie strona dodaje kolumny, gdy jest miejsce na kolejną kolumnę 200px.

Więcej informacji o kolumnach wielopoziomowych

Korzystanie z zapytań multimedialnych CSS w celu zapewnienia responsywności

Czasami konieczne może być wprowadzenie bardziej rozległych zmian w układzie, aby obsługiwać określone rozmiary ekranu, które nie są obsługiwane przez opisane wcześniej techniki. W tym przypadku przydatne stają się zapytania o multimedia.

Zapytania multimedialne to proste filtry, które możesz stosować do stylów CSS, aby zmieniać te style w zależności od typu urządzenia renderującego zawartość. Mogą też zmieniać styl w zależności od funkcji urządzenia, takich jak szerokość, wysokość i orientacja, a także to, czy urządzenie jest używane jako ekran dotykowy.

Aby zapewnić różne style do drukowania, możesz ustawić typ wyjściowy i włączyć arkusz stylów dla stylów do drukowania:

<!DOCTYPE html>
<html lang="en">
  <head>
        <link rel="stylesheet" href="print.css" media="print">
      </head>
  

Możesz też użyć zapytania o media, aby uwzględnić style drukowania w głównym arkuszu stylów:

@media print {
  /* print styles go here */
}

W przypadku elastycznego projektowania stron najczęściej występują zapytania dotyczące funkcji urządzenia, więc możesz dostosować układ do ekranów dotykowych lub mniejszych ekranów.

Zapytania o multimedia na podstawie rozmiaru widocznego obszaru

Zapytania o multimedia pozwalają tworzyć środowisko elastyczne, które stosuje określone style do określonego rozmiaru ekranu. Zapytania dotyczące rozmiaru ekranu mogą sprawdzać te kwestie:

  • width (min-width, max-width)
  • height (min-height, max-height)
  • orientation
  • aspect-ratio

Wszystkie te funkcje są doskonale obsługiwane przez przeglądarki. Więcej informacji, w tym informacje o obsłudze przeglądarek, znajdziesz w artykułach width, height, orientation i aspect-ratio w MDN.

Zapytania o multimedia na podstawie możliwości urządzenia

Biorąc pod uwagę szeroką gamę urządzeń, programiści nie mogą zakładać, że każde duże urządzenie to zwykły komputer stacjonarny lub laptop, ani że każde małe urządzenie ma ekran dotykowy. Niektóre nowsze dodatki do specyfikacji zapytań o multimedia umożliwiają testowanie funkcji takich jak typ wskaźnika używanego do interakcji z urządzeniem oraz to, czy użytkownik może przytrzymać wskaźnik nad elementami.

  • hover
  • pointer
  • any-hover
  • any-pointer

Wyświetl tę wersję demonstracyjną na różnych urządzeniach, takich jak komputer stacjonarny, telefon lub tablet.

Te nowsze funkcje są dobrze obsługiwane we wszystkich nowoczesnych przeglądarkach. Więcej informacji znajdziesz na stronach MDN dotyczących najechania kursorem, dowolnego najechania kursorem, wskaźnika i dowolnego wskaźnika.

Użyj właściwości any-hoverany-pointer

Funkcje any-hoverany-pointer sprawdzają, czy użytkownik może przytrzymać wskaźnik nad elementami (czyli najechać kursorem), lub czy w ogóle może używać wskaźnika, nawet jeśli nie jest to jego główny sposób interakcji z urządzeniem. Należy zachować szczególną ostrożność podczas korzystania z tych funkcji, aby na przykład nie zmuszać użytkownika ekranu dotykowego do przełączania się na mysz. Jednak any-hoverany-pointer mogą być przydatne, jeśli ważne jest określenie, jakie urządzenie ma użytkownik. Na przykład laptop z ekranem dotykowym i gładzikiem powinien obsługiwać wskaźniki grube i precyzyjne, a także umożliwiać nawigację za pomocą kursora.

Jak wybierać punkty przerwania

Nie definiuj punktów przerwania na podstawie klas urządzeń, produktów, nazw marek czy systemu operacyjnego. Utrudnia to utrzymanie kodu. Pozwól, aby treść określiła, jak zmienia się jej układ, aby mieścił się w kontenerze.

Wybierz główne punkty przecięcia, zaczynając od małych, a potem zwiększając ich liczbę.

Najpierw zaprojektuj treści tak, aby pasowały do małego ekranu, a potem poszerzaj ekran, aż pojawi się punkt kontrolny. Pozwala to zminimalizować liczbę punktów przerwania na stronie i je zoptymalizować na podstawie treści.

W tym przykładzie omówiono widżet prognozy pogody, który znajduje się na początku tej strony. Najpierw musisz zadbać o to, aby prognoza dobrze wyglądała na małym ekranie:

Zrzut ekranu aplikacji pogodowej w wersji mobilnej
Widok aplikacji w wąskim oknie.

Następnie zmień rozmiar przeglądarki, aż między elementami będzie zbyt dużo pustej przestrzeni, co spowoduje, że widżet będzie wyglądał dobrze. Decyzja jest subiektywna, ale więcej niż 600px zdecydowanie za szerokie.

Zrzut ekranu aplikacji pogodowej z dużą przerwą między elementami
Przy takim rozmiarze układ aplikacji powinien się zmienić.

Aby wstawić punkt przerwania w miejscu 600px, utwórz 2 zapytania o media na końcu kodu CSS komponentu: jedno do użycia, gdy przeglądarka ma rozmiar 600px lub węższy, a drugie, gdy jest szersza niż 600px.

@media (max-width: 600px) {

}

@media (min-width: 601px) {

}

Na koniec zoptymalizuj kod CSS. W zapytaniu o multimedia dla max-width w układance 600px dodaj kod CSS przeznaczony tylko do małych ekranów. W zapytaniu o multimedia dla min-width601px dodaj kod CSS dla większych ekranów.

W razie potrzeby wybierz mniejsze punkty przerwania

Oprócz wybierania głównych punktów przecięcia, gdy układ ulega znacznym zmianom, warto też dostosować się do drobnych zmian. Na przykład między głównymi punktami kontrolnymi warto dostosować marginesy lub wypełnienie elementu albo zwiększyć rozmiar czcionki, aby element wyglądał bardziej naturalnie w łayoucie.

W tym przykładzie zastosowano ten sam schemat co w poprzednim, zaczynając od optymalizacji układów na mniejsze ekrany. Najpierw zwiększ czcionkę, gdy szerokość widoku jest większa niż 360px. Następnie, gdy będzie już wystarczająco dużo miejsca, możesz rozdzielić temperatury wysokie i niskie tak, aby znajdowały się w tym samym wierszu, i powiększyć ikony pogody.

@media (min-width: 360px) {
  body {
    font-size: 1.0em;
  }
}

@media (min-width: 500px) {
  .seven-day-fc .temp-low,
  .seven-day-fc .temp-high {
    display: inline-block;
    width: 45%;
  }

  .seven-day-fc .seven-day-temp {
    margin-left: 5%;
  }

  .seven-day-fc .icon {
    width: 64px;
    height: 64px;
  }
}

W przypadku dużych ekranów zalecamy ograniczenie maksymalnej szerokości panelu prognozy, aby nie zajmował on całej szerokości ekranu.

@media (min-width: 700px) {
  .weather-forecast {
    width: 700px;
  }
}

Optymalizacja tekstu pod kątem czytania

Klasyczna teoria czytelności sugeruje, że idealna kolumna powinna zawierać 70–80 znaków na wiersz (około 8–10 słów w języku angielskim). Rozważ dodawanie punktu przerwania za każdym razem, gdy szerokość bloku tekstowego przekracza 10 słów.

Zrzut ekranu strony z tekstem na urządzeniu mobilnym
Wysyłaj SMS-y z urządzenia mobilnego.
Zrzut ekranu strony z tekstem w przeglądarce na komputerze
To samo zdanie w przeglądarce na komputerze z dodanym punktem przerwania, aby ograniczyć długość wiersza.

W tym przykładzie czcionka Roboto o wartości 1em wyświetla 10 słów na wiersz na mniejszym ekranie, ale na większych ekranach potrzebny jest punkt przełamania. W tym przypadku, jeśli szerokość przeglądarki jest większa niż 575px, idealna szerokość treści to 550px.

@media (min-width: 575px) {
  article {
    width: 550px;
    margin-left: auto;
    margin-right: auto;
  }
}

Unikanie ukrywania treści (:#unikaj ukrywania treści)

Zachowaj ostrożność przy wybieraniu treści do ukrycia lub wyświetlenia w zależności od rozmiaru ekranu. Nie ukrywaj treści tylko dlatego, że nie mieszczą się na ekranie. Rozmiar ekranu nie pozwala przewidzieć, co użytkownik chce zobaczyć. Na przykład usunięcie z prognozy pogody informacji o liczbie pyłków może być poważnym problemem dla osób cierpiących na alergie wiosenne, które potrzebują tych informacji, aby zdecydować, czy mogą wyjść na zewnątrz.

Wyświetlanie punktów przerwania zapytań dotyczących multimediów w Narzędziach deweloperskich w Chrome

Po skonfigurowaniu punktów kontrolnych zapytań o multimedia sprawdź, jak wpływają one na wygląd witryny. Możesz zmienić rozmiar okna przeglądarki, aby wywołać punkty kontrolne, ale narzędzia dla deweloperów w Chrome mają wbudowaną funkcję, która pokazuje, jak strona wygląda w przypadku różnych punktów kontrolnych.

Zrzut ekranu z Narzędziami deweloperskimi z otwartą aplikacją pogodową i wybraną szerokością 822 pikseli
Narzędzia deweloperskie pokazują aplikację pogodową w szerszym widocznym obszarze.
Zrzut ekranu przedstawiający Narzędzia deweloperskie z otwartą aplikacją pogodową i wybraną szerokością 436 pikseli.
Narzędzia deweloperskie pokazują aplikację pogodową w węższym obszarze.

Aby wyświetlić stronę w różnych punktach przełamania:

  1. Otwórz Narzędzia deweloperskie.
  2. Włącz Tryb urządzenia. Domyślnie otworzy się on w trybie dostosowującym się do urządzenia.
  3. Aby wyświetlić zapytania o multimedia, otwórz menu Tryb urządzenia i wybierz Pokaż zapytania o multimedia. Punkty przełamania są widoczne jako kolorowe paski nad stroną.
  4. Kliknij jeden z pasków, aby wyświetlić stronę, gdy aktywne jest to zapytanie o multimedia. Kliknij prawym przyciskiem myszy pasek, aby przejść do definicji zapytania o multimedia.