Interazione

I dispositivi con schermi di piccole dimensioni, come i telefoni cellulari, spesso sono dotati di touchscreen. I dispositivi con schermi di grandi dimensioni, come laptop e computer desktop, spesso sono dotati di hardware come mouse o trackpad. Si può avere la tentazione di trovare schermi piccoli con schermi tattili e schermi grandi con puntatori.

Ma la realtà è più articolata. Alcuni laptop sono dotati di touchscreen. Gli utenti possono interagire con un touchscreen, un trackpad o entrambi. Analogamente, è possibile utilizzare una tastiera o un mouse esterni con un dispositivo touchscreen come un tablet.

Anziché provare a dedurre il meccanismo di input dalle dimensioni dello schermo, utilizza le funzionalità multimediali in CSS.

Puntatore

Puoi testare tre possibili valori con la funzionalità dei contenuti multimediali pointer: none, coarse e fine.

Se un browser riporta un valore pointer pari a none, è possibile che l'utente stia utilizzando una tastiera per interagire con il tuo sito web.

Se un browser segnala un valore pointer pari a coarse, significa che il meccanismo di input principale non è molto accurato. Un dito su un touchscreen è un puntatore approssimativo.

Se un browser segnala un valore pointer pari a fine, significa che il meccanismo di input primario è in grado di avere un controllo granulare. Un mouse o uno stilo sono un puntatore efficace.

Puoi regolare le dimensioni degli elementi dell'interfaccia in base al valore pointer. Prova a visitare questo sito web con diversi tipi di dispositivi per vedere come l'interfaccia si adatta.

In questo esempio, i pulsanti sono più grandi per i puntatori approssimativi:

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

È anche possibile ridurre gli elementi per i puntatori piccoli, ma fai attenzione a questa operazione:

Cosa non fare
@media (pointer: fine) {
  button {
    padding: 0.25em 0.5em;
  }
}

Anche se qualcuno dispone di un meccanismo di input primario in grado di controllare in modo dettagliato, pensaci due volte prima di ridurre la dimensione degli elementi interattivi. Si applica comunque la legge di Fit. Un bersaglio più piccolo richiede una maggiore concentrazione anche con un puntatore più preciso. Un'area target più ampia va a vantaggio di tutti, indipendentemente dal dispositivo di puntamento.

Qualsiasi puntatore

La funzionalità dei contenuti multimediali pointer riporta la precisione del meccanismo di immissione principale. Tuttavia, molti dispositivi hanno più di un meccanismo di input. È possibile che un utente stia interagendo contemporaneamente con il tuo sito web utilizzando un touchscreen e un mouse.

any-pointer è diverso dalla funzionalità dei contenuti multimediali pointer in quanto indica se un dispositivo di puntamento supera il test.

Il valore none di any-pointer indica che non è disponibile nessun dispositivo di puntamento.

Un valore any-pointer pari a coarse indica che almeno un dispositivo di puntamento non è molto preciso. Ma questo potrebbe non essere il meccanismo di input principale.

Un valore any-pointer pari a fine indica che almeno un dispositivo di puntamento è in grado di avere un controllo granulare. Ma ripeto, potrebbe non essere il meccanismo di input principale.

Poiché la query multimediale any-pointer restituirà un risultato positivo se uno dei meccanismi di input supera il test, è possibile che un browser segnali un risultato per any-pointer: fine e anche un risultato per any-pointer: coarse. In questo caso, l'ordine delle query supporti è importante. L'ultimo avrà la precedenza.

In questo esempio, se il dispositivo ha un meccanismo di input sia granulare che approssimativo, vengono applicati gli stili coarse.

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

Passaci il mouse sopra

La funzionalità multimediale hover indica se il meccanismo di input principale può passare il mouse sopra gli elementi. Questo di solito significa che sullo schermo è presente un qualche tipo di cursore controllato da un mouse o un trackpad.

A differenza della funzionalità dei contenuti multimediali di pointer, che differenzia i puntatori granulari e approssimativi, la funzionalità dei contenuti multimediali di hover è binaria. Se il dispositivo di input principale è in grado di passare il mouse sopra gli elementi, verrà segnalato il valore hover. In caso contrario, il valore è none.

In questo esempio, alcune icone supplementari sono disponibili al passaggio del mouse, ma solo se il dispositivo di input principale è in grado di passare il mouse sopra un elemento.

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

Se passi il mouse sopra il pulsante, viene visualizzata l'icona. Tuttavia, se utilizzi la tastiera per accedere al pulsante con il tasto Tab, l'icona rimane invisibile. Quando usi la tastiera, sei attivo e non passi il mouse sopra. Un computer con un mouse collegato segnala che è possibile passare il mouse sopra il meccanismo di input principale, il che è vero. Tuttavia, chiunque usi una tastiera mentre è collegato un mouse non usufruirà dei vantaggi degli stili :hover. Pertanto, è una buona idea combinare gli stili :hover e :focus per coprire entrambe le interazioni.

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

Anche se il dispositivo di input principale è in grado di passare il mouse sopra gli elementi, presta attenzione a nascondere le informazioni dietro un'interazione con il passaggio del mouse. Le informazioni diventano meno individuabili. Non utilizzare il passaggio del mouse per nascondere informazioni importanti o un importante elemento dell'interfaccia.

Qualsiasi passaggio del mouse

La query supporti hover genera report solo sul meccanismo di immissione principale. Alcuni dispositivi hanno più meccanismi di immissione: touchscreen, mouse, tastiera, trackpad.

Proprio come any-pointer riporta su uno qualsiasi dei meccanismi di input, il valore any-hover è vero se uno qualsiasi dei meccanismi di input disponibili è in grado di passare il mouse sopra gli elementi.

Se nell'esempio precedente hai deciso di invertire la logica, puoi rendere predefiniti gli stili visualizzati al passaggio del mouse e rimuoverli se any-hover ha un valore none.

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

Su un dispositivo sprovvisto di meccanismo di input che consente di passare il mouse sopra, l'icona aggiuntiva è sempre visibile.

Tastiere virtuali

Gli utenti utilizzano cursori e dita per esplorare le interfacce ma, quando è il momento di inserire le informazioni, hanno bisogno di una tastiera. Non c'è problema se al loro dispositivo è collegata una tastiera fisica, ma se usano un dispositivo touchscreen il processo è un po' più complicato. Questi dispositivi offrono tastiere virtuali sullo schermo.

Tipi di input

A differenza delle tastiere fisiche, le tastiere virtuali possono essere personalizzate in modo da corrispondere all'input previsto. Se fornisci informazioni sull'input previsto, i dispositivi possono mostrare la tastiera virtuale più appropriata.

I tipi di input HTML5 sono un ottimo modo per descrivere gli elementi input. L'attributo type accetta valori come email, number, tel, url e altri.

  <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">

Modalità di immissione

Supporto dei browser

  • Chrome: 66.
  • Edge: 79.
  • Firefox: 95.
  • Safari: 12.1.

Origine

L'attributo inputmode ti offre un controllo granulare sulle tastiere virtuali. Ad esempio, mentre c'è un type input con un valore di number, puoi utilizzare l'attributo inputmode per distinguere i numeri interi dai decimali.

Se richiedi un numero intero, ad esempio l'età di una persona, usa inputmode="numeric".

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

Se chiedi un numero che include cifre decimali, come un prezzo, usa inputmode="decimal".

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

Completamento automatico

A nessuno piace compilare moduli. In qualità di designer, puoi migliorare l'esperienza degli utenti consentendo loro di compilare automaticamente i campi dei moduli. L'attributo autocomplete offre una serie di opzioni per migliorare i moduli di contatto, di accesso e di pagamento.

<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">

Questi attributi HTML (type, inputmode e autocomplete) sono piccole aggiunte ai campi del modulo, ma possono fare un'enorme differenza per l'esperienza utente. Pensando alle funzionalità dei dispositivi dei tuoi utenti e reagendo a loro, offri maggiori possibilità agli utenti. Per informazioni più dettagliate, è disponibile un corso dedicato ad aiutarti a imparare i moduli.

In questo corso dobbiamo analizzare alcuni pattern comuni dell'interfaccia.

Verifica le tue conoscenze

Verifica le tue conoscenze sulle interazioni

Quale funzionalità dovresti usare invece di provare a dedurre il tipo di input di un utente dalle dimensioni dello schermo?

Funzionalità dei contenuti multimediali del CSS
Ad esempio @media (pointer: coarse) o @media (-any-pointer: coarse)
Chiedi all'utente con prompt() di JavaScript
Non è l'ideale se chiedi direttamente.
Tipo di media CSS handheld
Questa funzionalità è stata ritirata in Query supporti 4.

Qual è la differenza tra @media (pointer) e @media (any-pointer)?

Qualsiasi puntatore include, ad esempio, il dito.
Il puntatore include già il tocco come tipo di input.
I puntatori non includono elementi come il mouse.
I puntatori includono invece un mouse come dispositivo di input.
Qualsiasi puntatore indicherà true se altri input non principali, come lo stilo, superano il test.
any-pointer esegue query su tutti i tipi di input del dispositivo per trovare qualsiasi corrispondenza.

Quali tipi di input mostrano una tastiera virtuale più appropriata per gli utenti?

type="url"
La tastiera offrirà pulsanti per supportare la digitazione di URL.
type="tel"
La tastiera offrirà pulsanti per supportare la digitazione di numeri di telefono.
type="number"
La tastiera offrirà pulsanti per supportare la digitazione solo di numeri.
type="email"
La tastiera offrirà pulsanti per supportare la digitazione di indirizzi email.