Interakcja

Urządzenia z małym ekranem, takie jak telefony komórkowe, często mają ekrany dotykowe. Urządzenia z dużymi ekranami, takie jak laptopy i komputery stacjonarne, są często wyposażone w takie elementy jak mysz lub trackpad. Łatwo utożsamiać małe ekrany z ekranami dotykowymi, a duże ze wskaźnikami.

Rzeczywistość jest jednak bardziej zróżnicowana. Niektóre laptopy mają funkcje ekranu dotykowego. Użytkownicy mogą używać ekranu dotykowego lub trackpada albo obu tych opcji naraz. Możesz też korzystać z zewnętrznej klawiatury lub myszy z urządzeniem z ekranem dotykowym, takim jak tablet.

Zamiast zgadywać mechanizm wprowadzania danych na podstawie rozmiaru ekranu, korzystaj z funkcji multimediów w CSS.

Wskaźnik

Za pomocą funkcji multimediów pointer możesz przetestować 3 możliwe wartości: none, coarse i fine.

Jeśli przeglądarka zgłasza wartość pointer o wartości none, może to oznaczać, że użytkownik korzysta z Twojej witryny za pomocą klawiatury.

Jeśli przeglądarka zgłasza wartość pointer o wartości coarse, oznacza to, że główny mechanizm wprowadzania nie jest zbyt dokładny. Palec na ekranie dotykowym to precyzyjny wskaźnik.

Jeśli przeglądarka zgłasza wartość pointer o wartości fine, oznacza to, że główny mechanizm wprowadzania umożliwia szczegółową kontrolę. Najlepiej użyć myszy lub rysika.

Możesz dostosować rozmiar elementów interfejsu do wartości pointer. Możesz odwiedzić tę stronę na różnych urządzeniach, by zobaczyć, jak dostosowuje się interfejs.

W tym przykładzie przyciski zostały powiększone w przypadku przybliżonych wskaźników:

button {
  padding: 0.5em 1em;
}
@media (pointer: coarse) {
  button {
    padding: 1em 2em;
  }
}

Możesz też zmniejszyć elementy w przypadku szczegółowych wskaźników, ale zachowaj ostrożność:

Nie
@media (pointer: fine) {
  button {
    padding: 0.25em 0.5em;
  }
}

Nawet jeśli ktoś ma główny mechanizm wprowadzania danych umożliwiający szczegółową kontrolę, dobrze się zastanów, zanim zmniejszysz rozmiar elementów interaktywnych. Prawo Fitts nadal obowiązuje. Mniejszy cel wymaga większej koncentracji nawet przy drobnym wskazówce. Większy obszar docelowy jest korzystny dla wszystkich, niezależnie od urządzenia wskazującego.

Dowolny wskaźnik

Funkcja multimediów pointer podaje dokładność głównego mechanizmu wprowadzania danych. Wiele urządzeń ma jednak więcej niż jeden mechanizm wprowadzania danych. Może się zdarzyć, że ktoś wejdzie w interakcję z Twoją witryną, używając jednocześnie ekranu dotykowego i myszy.

any-pointer różni się od funkcji multimediów pointer tym, że podaje w raportach, czy któreś urządzenie wskazujące przejdzie test.

Wartość any-pointer wynosząca none oznacza, że nie jest dostępne żadne urządzenie wskazujące.

Wartość any-pointer wynosząca coarse oznacza, że co najmniej jedno urządzenie wskazujące nie jest bardzo dokładne. Nie musi to jednak być główny mechanizm wprowadzania danych.

Wartość any-pointer wynosząca fine oznacza, że co najmniej jedno urządzenie wskazujące może mieć szczegółową kontrolę. Nie musi to być jednak główny mechanizm wprowadzania danych.

Zapytanie o media any-pointer zwróci pozytywny wynik, jeśli dowolny mechanizm wprowadzania danych zaliczy test, dlatego przeglądarka może zgłosić wynik dla funkcji any-pointer: fine oraz any-pointer: coarse. W takim przypadku kolejność zapytań o multimedia ma znaczenie. Pierwszeństwo ma pierwszeństwo.

W tym przykładzie, jeśli urządzenie ma zarówno precyzyjny, jak i przybliżony mechanizm wprowadzania danych, stosowane są style przybliżone.

@media (any-pointer: fine) {
  button {
    padding: 0.5em 1em;
  }
}
@media (any-pointer: coarse) {
  button {
    padding: 1em 2em;
  }
}

Najedź

Funkcja multimediów hover informuje, czy główny mechanizm wprowadzania danych może najeżdżać kursorem na elementy. Zwykle oznacza to, że na ekranie jest jakiś kursor sterowany za pomocą myszy lub trackpada.

W odróżnieniu od funkcji multimediów pointer, która rozróżnia wskaźniki przybliżone i precyzyjne, funkcja multimediów hover jest binarna. Jeśli główne urządzenie wejściowe umożliwia najeżdżanie na elementy, raportuje wartość hover. W przeciwnym razie wartość to none.

W tym przykładzie niektóre dodatkowe ikony są dostępne po najechaniu na nie kursorem myszy, ale tylko wtedy, gdy główne urządzenie wejściowe umożliwia najechanie kursorem na element.

button .extra {
  visibility: visible;
}
@media (hover: hover) {
  button .extra {
    visibility: hidden;
  }
  button:hover .extra {
    visibility: visible;
  }
}

Gdy najedziesz kursorem myszy na ten przycisk, pojawi się ikona. Jeśli jednak użyjesz klawiatury, aby nacisnąć klawisz Tab, aby przejść do przycisku, ikona pozostanie niewidoczna. Podczas korzystania z klawiatury ustawiasz fokus, a nie najeżdżając na nie kursorem. Komputer z podłączoną myszką zgłasza, że główny mechanizm wprowadzania danych umożliwia najechanie na nie kursorem myszy. Jednak osoby korzystające z klawiatury z podłączoną myszką nie będą miały dostępu do stylów :hover. Warto więc połączyć style :hover i :focus, aby uwzględnić obie interakcje.

button .extra {
  visibility: visible;
}
@media (hover: hover) {
  button .extra {
    visibility: hidden;
  }
  button:is(:hover, :focus) .extra {
    visibility: visible;
  }
}

Nawet jeśli główne urządzenie wejściowe umożliwia najeżdżanie na elementy, zachowaj ostrożność, aby ukryć informacje po najechaniu kursorem. Informacje stają się trudniejsze do znalezienia. Nie ukrywaj ważnych informacji ani ważnych elementów interfejsu za pomocą najeżdżania kursorem.

Dowolny najechanie kursorem

Zapytanie o media hover raportuje tylko informacje o głównym mechanizmie wprowadzania. Niektóre urządzenia mają wiele mechanizmów wejściowych: ekran dotykowy, mysz, klawiaturę, trackpad.

Podobnie jak funkcja any-pointer raportuje mechanizmy wprowadzania danych, zasada any-hover ma wartość prawdziwą, jeśli dowolny z dostępnych mechanizmów wprowadzania danych umożliwia najeżdżanie kursorem na elementy.

Jeśli chcesz odwrócić działanie logiczne z poprzedniego przykładu, możesz ustawić style po najechaniu kursorem jako domyślnymi, a potem je usunąć, jeśli any-hover ma wartość none.

button .extra {
  visibility: hidden;
}
button:hover .extra,
button:focus .extra {
  visibility: visible;
}
@media (any-hover: none) {
  button .extra {
    visibility: visible;
  }
}

Na urządzeniach nieposiadających mechanizmu wprowadzania danych, które umożliwia najeżdżanie kursorem, dodatkowa ikona jest zawsze widoczna.

Klawiatury wirtualne

Użytkownicy do przeglądania interfejsów używają kursorów i palców, ale do wprowadzania informacji potrzebny jest klawiatura. Może to być w porządku, jeśli urządzenie ma podłączoną klawiaturę fizyczną, ale jeśli użytkownik ma pod ręką urządzenie z ekranem dotykowym, jest to nieco bardziej skomplikowane. Te urządzenia są wyposażone w ekranową klawiaturę wirtualną.

Typy danych wejściowych

W przeciwieństwie do klawiatury fizycznej, klawiatury wirtualne można dostosować do oczekiwanego sposobu wprowadzania tekstu. Jeśli podasz informacje o oczekiwanym wejściu, urządzenia będą mogły wyświetlać najbardziej odpowiednią klawiaturę wirtualną.

Typy danych wejściowych HTML5 doskonale nadają się do opisywania elementów input. Atrybut type akceptuje wartości takie jak email, number, tel, url i inne.

  <label for="email">Email</label>
  <input type="email" id="email">
  <label for="number">Number</label>
  <input type="number" id="number">
  <label for="tel">Tel</label>
  <input type="tel" id="tel">
  <label for="url">URL</label>
  <input type="url" id="url">

Tryby wprowadzania

Obsługa przeglądarek

  • 66
  • 79
  • 95
  • x

Źródło

Atrybut inputmode zapewnia szczegółową kontrolę nad klawiaturami wirtualnymi. Na przykład gdy jest jeden input type z wartością number, do rozróżnienia liczb całkowitych i dziesiętnych możesz użyć atrybutu inputmode.

Jeśli chcesz podać liczbę całkowitą, np. wiek danej osoby, użyj inputmode="numeric".

<label for="age">Age</label>
<input type="number" id="age" inputmode="numeric">

Jeśli pytasz o liczbę z miejscami po przecinku, np. o cenę, użyj funkcji inputmode="decimal".

<label for="price">Price</label>
<input type="number" id="price" inputmode="decimal">

Autouzupełnij

Obsługa przeglądarek

  • 14
  • ≤79
  • 4
  • 6

Źródło

Nikt nie lubi wypełniać formularzy. Jako projektant, możesz zwiększyć komfort użytkowników, umożliwiając im automatyczne wypełnianie pól formularza. Atrybut autocomplete oferuje wiele opcji pozwalających ulepszyć formularze kontaktowe, formularze logowania i formularze płatności.

<label for="name">Name</label>
<input type="text" id="name" autocomplete="name">
<label for="country">Country</label>
<input type="text" id="country" autocomplete="country">
<label for="email">Email</label>
<input type="email" id="email" autocomplete="email">

Te atrybuty HTML – type, inputmode i autocomplete – to niewielkie uzupełnienie pól formularza, ale mogą one mieć duży wpływ na wygodę użytkowników. Przewidując możliwości urządzeń użytkowników i reagując na nie, dajesz im większe możliwości. Więcej szczegółowych informacji znajdziesz w kursie, w ramach którego nauczysz się korzystać z formularzy.

W dalszej części tego kursu omówimy kilka typowych wzorców w interfejsie.

Sprawdź swoją wiedzę

Sprawdź swoją wiedzę na temat interakcji

Której funkcji należy użyć zamiast próbować wywnioskować typ danych wejściowych użytkownika na podstawie rozmiaru ekranu?

Funkcje mediów CSS
Podobne do: @media (pointer: coarse) lub @media (-any-pointer: coarse)
Zapytaj użytkownika za pomocą parametru prompt() JavaScriptu
Nie najlepiej pytać bezpośrednio.
Typ mediów CSS: handheld
Ta opcja została wycofana w funkcji Zapytania o multimedia 4.

Jaka jest różnica między @media (pointer) a @media (any-pointer)?

Każdy wskaźnik zawiera na przykład Twój palec.
Wskaźnik uwzględnia już dotyk jako typ wprowadzania.
Wskaźniki nie zawierają takich elementów, jak mysz.
Wskaźniki zawierają mysz jako urządzenie wejściowe.
Każdy wskaźnik zwróci wartość prawda, gdy dodatkowe dane wejściowe, które nie są podstawowe, np. rysik, zostaną zaliczone.
any-pointer wysyła zapytanie o wszystkie typy danych wejściowych urządzeń w przypadku każdego dopasowania.

Które typy wprowadzania pozwalają wyświetlić klawiaturę wirtualną, która jest dla nich najlepsza?

type="url"
Na klawiaturze dostępne będą przyciski do wpisywania adresów URL.
type="tel"
Na klawiaturze dostępne będą przyciski do wpisywania numerów telefonów.
type="number"
Na klawiaturze dostępne będą przyciski do wpisywania samych cyfr.
type="email"
Na klawiaturze pojawią się przyciski do wpisywania adresów e-mail.