Notre espace de noms npm a changé. Les développeurs doivent mettre à jour leurs projets pour continuer à accéder à nos composantes Web.

Recherche semi-automatique

Utilisez la recherche semi-automatique pour faire des suggestions aux utilisateurs, et pour accélérer et faciliter vos recherches.

  • Contenu:
    @use 'sass:math';
    @use '@ongov/ontario-design-system-global-styles/dist/styles/scss/1-variables/global.variables' as globalVariables;
    @use '@ongov/ontario-design-system-global-styles/dist/styles/scss/1-variables/spacing.variables' as spacing;
    @use '@ongov/ontario-design-system-global-styles/dist/styles/scss/1-variables/colours.variables' as colours;
    @use '@ongov/ontario-design-system-global-styles/dist/styles/scss/1-variables/breakpoints.variables' as breakpoints;
    @use '@ongov/ontario-design-system-global-styles/dist/styles/scss/1-variables/z-index.variables' as zIndex;
    
    $ontario-search-autosuggest-box-shadow: #0000001a;
    
    .ontario-search-autocomplete__suggestion-list {
    	background-color: colours.$ontario-colour-white;
    	border-radius: 0 0 globalVariables.$global-radius globalVariables.$global-radius;
    	border-top: 2px solid $ontario-search-autosuggest-box-shadow;
    	box-shadow: 0px 3px 8px 1px $ontario-search-autosuggest-box-shadow;
    	clip-path: inset(0px -8px -8px -8px);
    	display: none;
    	height: auto;
    	margin: (-0.75 * spacing.$spacing-1) spacing.$spacing-7 spacing.$spacing-7 (0.5 * spacing.$spacing-1);
    	overflow: hidden;
    	position: absolute;
    	width: calc(100% - spacing.$spacing-1);
    	z-index: zIndex.$ontario-z-index-above-high;
    
    	li {
    		list-style-type: none;
    		padding: spacing.$spacing-2 spacing.$spacing-4;
    
    		&:active {
    			box-shadow: 0 0 0 4px colours.$ontario-colour-focus inset;
    		}
    
    		&:last-child {
    			padding-bottom: spacing.$spacing-2;
    		}
    	}
    }
    
    .ontario-search-autocomplete__suggestion-list--selected {
    	background-color: colours.$ontario-colour-button-tertiary--hover;
    }
    
    .ontario-search-autocomplete__suggestion-list__list-item:focus {
    	outline: none;
    }
    
    .ontario-search__overlay {
    	position: fixed;
    	top: 0;
    	left: 0;
    	width: 100%;
    	height: 100%;
    	background-color: rgba(colours.$ontario-colour-white, 0.95);
    	z-index: zIndex.$ontario-z-index-above-medium;
    }
    
    .ontario-search__overlay-open {
    	.ontario-search__input-container,
    	.ontario-search-autocomplete__suggestion-list {
    		z-index: zIndex.$ontario-z-index-above-high;
    		position: absolute;
    		width: 100%;
    	}
    
    	.ontario-search__input-container {
    		top: spacing.$spacing-4;
    	}
    
    	.ontario-search-autocomplete__suggestion-list {
    		top: 4.06rem; /* Position below the search input box */
    		left: 0;
    		width: calc(100% - spacing.$spacing-6);
    	}
    }
    
    .ontario-search__overlay-open.ontario-search__input-suggestion-container {
    	position: fixed;
    	width: 100%;
    	top: 0;
    	z-index: zIndex.$ontario-z-index-above-high;
    }
    
    .ontario-search-autocomplete__suggestion-list-open {
    	.ontario-search__submit {
    		z-index: zIndex.$ontario-z-index-above-high;
    		border-radius: 0 globalVariables.$global-radius 0 0;
    		bottom: 0.0625rem;
    	}
    }
    
    .ontario__visually-hidden {
    	position: absolute;
    	width: 1px;
    	height: 1px;
    	margin: -1px;
    	padding: 0;
    	border: 0;
    	clip: rect(0, 0, 0, 0);
    	overflow: hidden;
    }
    
  • URL: /components/raw/search-autocomplete/search-autocomplete.scss
  • Chemin du système de fichiers: fractal/components/components/search-autocomplete/search-autocomplete.scss
  • Taille: 2.9 KB
  • Contenu:
    .ontario-search-autocomplete__suggestion-list{background-color:#fff;border-radius:0 0 4px 4px;border-top:2px solid #0000001a;box-shadow:0px 3px 8px 1px #0000001a;-webkit-clip-path:inset(0px -8px -8px -8px);clip-path:inset(0px -8px -8px -8px);display:none;height:auto;margin:-0.1875rem 2.5rem 2.5rem .125rem;overflow:hidden;position:absolute;width:calc(100% - .25rem);z-index:4}.ontario-search-autocomplete__suggestion-list li{list-style-type:none;padding:.5rem 1rem}.ontario-search-autocomplete__suggestion-list li:active{box-shadow:0 0 0 4px #009adb inset}.ontario-search-autocomplete__suggestion-list li:last-child{padding-bottom:.5rem}.ontario-search-autocomplete__suggestion-list--selected{background-color:#e8e8e8}.ontario-search-autocomplete__suggestion-list__list-item:focus{outline:none}.ontario-search__overlay{position:fixed;top:0;left:0;width:100%;height:100%;background-color:rgba(255,255,255,.95);z-index:2}.ontario-search__overlay-open .ontario-search__input-container,.ontario-search__overlay-open .ontario-search-autocomplete__suggestion-list{z-index:4;position:absolute;width:100%}.ontario-search__overlay-open .ontario-search__input-container{top:1rem}.ontario-search__overlay-open .ontario-search-autocomplete__suggestion-list{top:4.06rem;left:0;width:calc(100% - 2rem)}.ontario-search__overlay-open.ontario-search__input-suggestion-container{position:fixed;width:100%;top:0;z-index:4}.ontario-search-autocomplete__suggestion-list-open .ontario-search__submit{z-index:4;border-radius:0 4px 0 0;bottom:.0625rem}.ontario__visually-hidden{position:absolute;width:1px;height:1px;margin:-1px;padding:0;border:0;clip:rect(0, 0, 0, 0);overflow:hidden}
  • URL: /components/raw/search-autocomplete/search-autocomplete.css
  • Chemin du système de fichiers: fractal/components/components/search-autocomplete/search-autocomplete.css
  • Taille: 1.7 KB

Guiding principle: Give users control.


Quand utiliser cette composante

La recherche semi-automatique suggère à l’utilisateur des recherches basées sur les caractères qu’il tape dans un champ de recherche.

Cela permet à l’utilisateur de naviguer parmi les recherches suggérées et lui donne un aperçu du contenu du site Web.

On parle aussi de recherche autosuggérée, de frappe continue, de recherche prédictive, de recherche à mesure de la frappe et de suggestions d’interrogation.

La mise en œuvre réussie de la recherche semi-automatique peut se traduire par :

  • une baisse de la charge mentale de l’utilisateur pendant la frappe
  • moins de fautes d’orthographe ou de saisie
  • une navigation plus exacte

Quand faire des suggestions

Une liste de suggestions de recherche devrait s’afficher quand un utilisateur entre un caractère valide dans le champ de saisie.

Les caractères valides sont définis en fonction des paramètres de recherche de l’application. Les suggestions devraient apparaître ou changer à mesure que l’utilisateur ajoute ou supprime des caractères.

S’il n’y a pas de suggestions de recherche concordant avec la saisie de l’utilisateur, cachez la liste de type menu et laissez l’utilisateur effectuer une saisir manuelle.


Fonctionnalités de la composante

La composante de recherche semi-automatique inclut ce qui suit :

A. séparation entre la liste de type menu de suggestions et la zone de recherche
B. état de survol et actif pour chaque suggestion de recherche
C. suggestion de recherche avec le texte en gras qui complète la suggestion
D. liste de type menu avec un maximum de six suggestions de recherche
E. ombrage faisant contraster la liste de type menu de suggestions avec le fond de la page

Example


Diagramme des caractéristiques qui composent la recherche semi-automatique, incluant la séparation, l’état de survol, la liste de type menu et l’ombrage sur la liste de type menu.

Cette composante n’inclut pas actuellement l’historique des recherches précédentes ou une recherche avec une portée catégorisée (par exemple « [rechercher terme] dans [catégorie] »).


États d’interaction avec le menu de recherche

Frappe active

Des suggestions de recherche devraient apparaître une fois que l’utilisateur saisit un caractère valide. Les suggestions varieront selon :

  • ce que l’utilisateur tape
  • le nombre de concordances dans le contenu du site

Survol et sélection

Les utilisateurs devraient pouvoir survoler la liste des suggestions de recherche sur leur bureau avec leur clavier ou leur souris.

Ils peuvent choisir une suggestion en cliquant dessus ou en appuyant sur la touche Entrée lorsqu’ils la survolant.

Le fait de choisir une suggestion déclenche la recherche, ce qui amène l’utilisateur à la page des résultats de la recherche pour le terme choisi.

Example - Hover state


Diagramme montrant trois états de la recherche semi-automatique : l’état de survol, l’état de sélection active d’une suggestion de recherche et l’état de recherche soumise.

Example - Active select state


Diagramme montrant trois états de la recherche semi-automatique : l’état de survol, l’état de sélection active d’une suggestion de recherche et l’état de recherche soumise..

Example - Selected and submitted search


Diagramme montrant trois états de la recherche semi-automatique : l’état de survol, l’état de sélection active d’une suggestion de recherche et l’état de recherche soumise.

La liste de type menu complète devrait toujours apparaître au-dessus du pli et être au centre de l’attention.

Pratiques exemplaires

Faire

  • inclure jusqu’à quatre à six suggestions de recherche
  • montrer les suggestions dès que l’utilisateur saisit le premier caractère valide
  • suggérer des termes ou phrases courts et faciles à lire et à balayer
  • mettre en gras la partie de la suggestion qui complète le texte saisi par l’utilisateur
  • mettre en évidence la suggestion de recherche sélectionnée avec un état actif
  • utiliser un fond de page blanc pour aider à montrer le contraste de la liste de menus
  • pour une recherche basée sur les en-têtes, superposer une page assombrie sur la liste de type menu pour augmenter sa visibilité

Ne pas faire

  • mettre en gras la portion de texte dans les suggestions qui concorde avec ce que l’utilisateur a tapé
  • utiliser les barres de défilement dans la liste de type menu de suggestions
  • ajouter des éléments visuels comme des icônes, du remplissage, des séparateurs ou des couleurs de rangées qui alternent
  • faire plus de six suggestions — les utilisateurs ignoreront les suggestions, ce qui ralentira le processus de recherche

Faire


Diagramme montrant un exemple de la façon de disposer la recherche semi-automatique dans une taille de réponse mobile et deux exemples montrant ce qu’il ne faut pas faire, notamment utiliser une barre de défilement dans la liste de type menu de suggestion s et mettre en gras les suggestions de recherche.

Ne pas faire


Diagramme montrant un exemple de la façon de disposer la recherche semi-automatique dans une taille de réponse mobile et deux exemples montrant ce qu’il ne faut pas faire, notamment utiliser une barre de défilement dans la liste de type menu de suggestion s et mettre en gras les suggestions de recherche.

Ne pas faire


Diagramme montrant un exemple de la façon de disposer la recherche semi-automatique dans une taille de réponse mobile et deux exemples montrant ce qu’il ne faut pas faire, notamment utiliser une barre de défilement dans la liste de type menu de suggestion s et mettre en gras les suggestions de recherche.

Spécifications techniques

Utilisation

Pour utiliser la composante de recherche semi-automatique dans votre projet, voici les étapes à suivre :

  1. Téléchargez le fichier ontario-search.js à partir du référentiel.
  2. Importez le fichier ontario-search.js dans votre projet en utilisant une étiquette <script> (par exemple <script src="path/to/ontario-search.js"></script>)
  3. Déclarez votre liste de suggestions sur mesure comme un éventail à l’intérieur de la variable customSuggestions dans le fichier JavaScript.
  4. Appelez la fonction addSuggestions et ajoutez les customSuggestions en tant qu’argument à la fonction. Le fait d’ajouter l’appel de la fonction addSuggestions(customSuggestions) dans la fonction de charge fait en sorte que les suggestions personnalisées se chargent correctement dans la composante semi-automatique lorsque la page se charge entièrement.

Exemple

L’exemple montre une façon de mettre en place la composante. Vous pouvez remplacer l’exemple par votre propre code.

 window.addEventListener('load', () => {
       const customSuggestions = [
    "Suggestion 1",
           "Suggestion 2",
           "Suggestion 3",
       ];
       addSuggestions(customSuggestions);
 });

Accessibilité

Les utilisateurs peuvent interagir de bien des façons avec la composante semi-automatique :

  • les flèches vers le haut et le bas déplacent l’attention entre les éléments quand la liste de menus de suggestions est agrandie
  • le fait d’appuyer sur la touche d’entrée ou de cliquer sur la souris sélectionne la suggestion de recherche, ce qui l’ajoute au champ de recherche et termine la recherche
  • la touche esc ferme le menu déroulant

Focus Management

La composante de recherche semi-automatique a un système de gestion de la focalisation intégré qui mettra en évidence les suggestions à mesure que l’utilisateur navigue au travers avec son clavier (flèches vers le haut et le bas) ou sa souris (clics et survol).

Le système de gestion de la focalisation répond et s’adapte à l’interaction choisie par l’utilisateur. Cela signifie que l’utilisateur peut alterner entre son clavier et sa souris pour choisir une suggestion.

Attributes

En langage HTML, le rôle d’une zone de recherche est souvent désigné comme une zone de liste déroulante à des fins d’accessibilité parce qu’elle combine les caractéristiques d’un champ de saisie de texte et d’un menu déroulant. Une zone de liste déroulante permet aux utilisateurs d’interagir avec elle au moyen du clavier et de la souris. Cela donne la flexibilité pour des préférences en termes d’interaction et besoins d’accessibilité différents.

Aria-Controls

Utilisez aria-controls pour établir un lien entre un champ de saisie et l’élément qu’il influence ou possède. Cet attribut permet aux technologies d’aide de comprendre la relation entre le champ d’entrée et son contenu associé.

Aria-autocomplete

La propriété aria-autocomplete est cruciale pour définir le comportement de la fonctionnalité de recherche semi-automatique. Pour la recherche semi-automatique, utilisez le modèle de liste (aria-autocomplete=”list”). Il présente une collection de valeurs possibles dans un élément distinct qui apparaît sous le champ de saisie de la recherche, ce qui aide les utilisateurs à choisir une suggestion.

Autocomplete

Réglez l’attribut semi-automatique à faux afin que la fonctionnalité semi-automatique du navigateur n’interfère pas avec la composante semi-automatique du système de conception.

Aria-haspopup

Incluez aria-haspopup=”list” pour montrer que le champ de saisie de la recherche déclenche une liste avec des suggestions.

Aria-expanded

Utilisez l’état aria-expanded dans le champ de saisie de la recherche pour communiquer l’état d’affichage de la liste de type menu de suggestions.

Exemple

<input
    type="search"
    name="search"
    id=""
    autocomplete="off"
    aria-autocomplete="list"
    aria-controls="suggestion-list"
    aria-expanded="false"
    role="combobox"
    class="ontario-input ontario-search__input"
/>

L’exemple montre le champ de saisie de la recherche configuré avec aria-autocomplete=”list” et aria-haspopup=”list”. Cela indique qu’il fournit une liste de suggestions semi-automatiques, qui s’affiche dans une fenêtre distincte.

Pour montrer que le champ de saisie gère la liste de suggestions semi-automatiques :

  • mettez aria-controls=”suggestion-list” dans le champ de saisie de la recherche pour montrer qu’il contrôle la liste de type menu de suggestions avec l’identifiant "suggestion-list"
  • structurez l’élément flash associé comment un <ul> contenant des options de suggestions individuelles, représentées comme des éléments <li>
  • donne à chaque suggestion <li> un élément role="option" pour indiquer son rôle comme option dans la liste

En outre, mettez aria-expanded="false" dans le champ de saisie de la recherche pour montrer que la liste de type menu de suggestions est actuellement cachée ou réduite. Quand la liste de type menu de suggestions est agrandie, aria-expanded devrait changer d’une manière dynamique à "true".

Si vous avez des questions ou souhaitez donner de la rétroaction, veuillez communiquer avec nous.