Zone de recherche

Utilisez une zone de recherche pour permettre aux utilisateurs d’effectuer des recherches par mots-clés.

  • Contenu:
    @use 'sass:math';
    @use '@ontario-digital-service/ontario-design-system-global-styles/dist/styles/scss/1-variables/global.variables' as globalVariables;
    @use '@ontario-digital-service/ontario-design-system-global-styles/dist/styles/scss/1-variables/spacing.variables' as spacing;
    @use '@ontario-digital-service/ontario-design-system-global-styles/dist/styles/scss/1-variables/colours.variables' as colours;
    @use '@ontario-digital-service/ontario-design-system-global-styles/dist/styles/scss/1-variables/breakpoints.variables' as breakpoints;
    @use '@ontario-digital-service/ontario-design-system-global-styles/dist/styles/scss/1-variables/typography.variables' as typography;
    @use '@ontario-digital-service/ontario-design-system-global-styles/dist/styles/scss/1-variables/line-heights.variables' as lineheight;
    @use '@ontario-digital-service/ontario-design-system-global-styles/dist/styles/scss/1-variables/font-weights.variables' as fontWeights;
    @use '@ontario-digital-service/ontario-design-system-global-styles/dist/styles/scss/2-tools/functions/global.functions' as globalFunctions;
    
    $ontario-input-height: globalFunctions.px-to-rem(48);
    $ontario-search-icon-size: 2rem;
    $ontario-reset-icon-size: 1.5rem;
    $ontario-search-button-width: 5rem;
    $ontario-search-button-width--mobile: 3rem;
    $ontario-search-input-padding: 8.5rem;
    $ontario-search-input-padding--mobile: 7.75rem;
    $ontario-search-desktop-width: 34rem;
    $ontario-search-mobile-width: 20.5rem;
    $ontario-reset-icon-path: '../icons/ontario-icons-close.svg';
    
    .ontario-search__container {
    	max-width: $ontario-search-desktop-width;
    	margin-bottom: spacing.$spacing-7;
    }
    
    .ontario-search__input-container {
    	position: relative;
    }
    
    .ontario-search__label {
    	margin-bottom: spacing.$spacing-2;
    }
    
    .ontario-search__input.ontario-input {
    	border: 2px solid colours.$ontario-colour-black;
    	margin-bottom: spacing.$spacing-0;
    	height: $ontario-input-height;
    	padding-left: spacing.$spacing-3;
    	padding-right: $ontario-search-input-padding;
    
    	&:invalid + input[type='reset'] {
    		display: none;
    	}
    
    	&:focus {
    		& ~ .ontario-header__search-submit {
    			background-color: colours.$ontario-colour-link;
    			color: colours.$ontario-colour-white;
    
    			&:hover {
    				background-color: colours.$ontario-colour-link--hover;
    				color: colours.$ontario-colour-white;
    			}
    		}
    	}
    
    	// Remove auto X icon for IE and Edge on input area
    	&::-ms-clear {
    		display: none;
    		width: 0;
    		height: 0;
    	}
    
    	// Remove red outline around input area on Firefox
    	&:invalid:focus {
    		box-shadow: 0 0 0 4px colours.$ontario-colour-focus;
    		-moz-box-shadow: none;
    	}
    
    	&:invalid:not(:focus) {
    		box-shadow: none;
    		-moz-box-shadow: none;
    	}
    
    	@media screen and (max-width: breakpoints.$small-breakpoint) {
    		padding-left: spacing.$spacing-4;
    		padding-right: $ontario-search-input-padding--mobile;
    		background-color: transparent;
    	}
    }
    
    .ontario-search__submit {
    	border: 0;
    	border-radius: 0 3px 3px 0;
    	background-color: colours.$ontario-colour-link;
    	color: colours.$ontario-colour-black;
    
    	display: flex;
    	justify-content: center;
    	align-items: center;
    
    	font-family: typography.$ontario-font-open-sans;
    	font-weight: fontWeights.$ontario-font-weights-semi-bold;
    	font-size: 1.125rem;
    	width: $ontario-search-button-width;
    	line-height: lineheight.$ontario-line-height-8;
    
    	position: absolute;
    	right: spacing.$spacing-0;
    	bottom: spacing.$spacing-0;
    	top: spacing.$spacing-0;
    	cursor: pointer;
    
    	&:hover {
    		background-color: colours.$ontario-colour-link--hover;
    		color: colours.$ontario-colour-white;
    	}
    
    	&:focus {
    		outline: none;
    		box-shadow: 0 0 0 globalVariables.$global-radius colours.$ontario-colour-focus;
    		background-color: colours.$ontario-colour-link--hover;
    		color: colours.$ontario-colour-white;
    	}
    
    	&:active {
    		background-color: colours.$ontario-colour-link--active;
    		color: colours.$ontario-colour-white;
    	}
    
    	svg {
    		color: colours.$ontario-colour-white;
    		margin-right: spacing.$spacing-0;
    		margin-bottom: spacing.$spacing-0;
    		width: $ontario-search-icon-size;
    		height: $ontario-search-icon-size;
    	}
    
    	@media screen and (max-width: breakpoints.$small-breakpoint) {
    		width: $ontario-search-button-width--mobile;
    	}
    }
    
    input[type='reset'].ontario-search__reset {
    	position: absolute;
    	display: flex;
    	align-items: center;
    	top: spacing.$spacing-2;
    	right: $ontario-search-button-width + spacing.$spacing-4;
    	height: $ontario-reset-icon-size;
    	width: $ontario-reset-icon-size;
    	color: colours.$ontario-colour-black;
    	margin: spacing.$spacing-0;
    	padding: spacing.$spacing-1;
    	background-size: $ontario-reset-icon-size;
    	background-image: url($ontario-reset-icon-path);
    	background-position: center center;
    	background-repeat: no-repeat;
    	background-color: transparent;
    	outline: none;
    	border: none;
    	cursor: pointer;
    
    	&:focus {
    		box-shadow: inset 0 0 0 globalVariables.$global-radius colours.$ontario-colour-focus;
    	}
    
    	@media screen and (max-width: breakpoints.$small-breakpoint) {
    		right: $ontario-search-button-width--mobile + spacing.$spacing-7;
    	}
    }
    
    // remove default cancel button for input with type="search"
    input[type='search'].ontario-search__input::-webkit-search-decoration,
    input[type='search'].ontario-search__input::-webkit-search-cancel-button,
    input[type='search'].ontario-search__input::-webkit-search-results-button,
    input[type='search'].ontario-search__input::-webkit-search-results-decoration {
    	-webkit-appearance: none;
    }
    
  • URL: /components/raw/search-box/search.scss
  • Chemin du système de fichiers: fractal/components/components/search/search.scss
  • Taille: 5.4 KB
  • Contenu:
    .ontario-search__container{max-width:34rem;margin-bottom:2.5rem}.ontario-search__input-container{position:relative}.ontario-search__label{margin-bottom:.5rem}.ontario-search__input.ontario-input{border:2px solid #1a1a1a;margin-bottom:0;height:3rem;padding-left:.75rem;padding-right:8.5rem}.ontario-search__input.ontario-input:invalid+input[type=reset]{display:none}.ontario-search__input.ontario-input:focus~.ontario-header__search-submit{background-color:#06c;color:#fff}.ontario-search__input.ontario-input:focus~.ontario-header__search-submit:hover{background-color:#00478f;color:#fff}.ontario-search__input.ontario-input::-ms-clear{display:none;width:0;height:0}.ontario-search__input.ontario-input:invalid:focus{box-shadow:0 0 0 4px #009adb;-moz-box-shadow:none}.ontario-search__input.ontario-input:invalid:not(:focus){box-shadow:none;-moz-box-shadow:none}@media screen and (max-width: 40em){.ontario-search__input.ontario-input{padding-left:1rem;padding-right:7.75rem;background-color:transparent}}.ontario-search__submit{border:0;border-radius:0 3px 3px 0;background-color:#06c;color:#1a1a1a;display:flex;justify-content:center;align-items:center;font-family:"Open Sans","Helvetica Neue",Helvetica,Arial,sans-serif;font-weight:600;font-size:1.125rem;width:5rem;line-height:1.56;position:absolute;right:0;bottom:0;top:0;cursor:pointer}.ontario-search__submit:hover{background-color:#00478f;color:#fff}.ontario-search__submit:focus{outline:none;box-shadow:0 0 0 4px #009adb;background-color:#00478f;color:#fff}.ontario-search__submit:active{background-color:#002142;color:#fff}.ontario-search__submit svg{color:#fff;margin-right:0;margin-bottom:0;width:2rem;height:2rem}@media screen and (max-width: 40em){.ontario-search__submit{width:3rem}}input[type=reset].ontario-search__reset{position:absolute;display:flex;align-items:center;top:.5rem;right:6rem;height:1.5rem;width:1.5rem;color:#1a1a1a;margin:0;padding:.25rem;background-size:1.5rem;background-image:url("../icons/ontario-icons-close.svg");background-position:center center;background-repeat:no-repeat;background-color:transparent;outline:none;border:none;cursor:pointer}input[type=reset].ontario-search__reset:focus{box-shadow:inset 0 0 0 4px #009adb}@media screen and (max-width: 40em){input[type=reset].ontario-search__reset{right:5.5rem}}input[type=search].ontario-search__input::-webkit-search-decoration,input[type=search].ontario-search__input::-webkit-search-cancel-button,input[type=search].ontario-search__input::-webkit-search-results-button,input[type=search].ontario-search__input::-webkit-search-results-decoration{-webkit-appearance:none}
  • URL: /components/raw/search-box/search.css
  • Chemin du système de fichiers: fractal/components/components/search/search.css
  • Taille: 2.6 KB

Principe directeur : Donner le contrôle à l’utilisateur


Quand utiliser cette composante

La conception de la zone de recherche fait partie d’une fonction de recherche plus large. La zone de recherche est spécifiquement axée sur la possibilité, pour l’utilisateur, de saisir sa requête et d’utiliser un bouton de recherche.

N’utilisez une zone de recherche que s’il y a suffisamment de données à la disposition des utilisateurs pour justifier la fonction de recherche, par exemple, si votre site Web ou votre application compte :

  • un ensemble de données distinct qui n’est pas interrogé par la fonction de recherche d’ontario.ca;
  • sa propre structure de navigation dans laquelle la recherche peut améliorer l’expérience de l’utilisateur.

Où placer la zone de recherche

Les utilisateurs s’attendent généralement à trouver la zone de recherche en haut de la page, dans le coin supérieur droit ou gauche.

Si vous concevez une page destinée spécifiquement à la recherche, placez la zone de recherche du côté gauche pour qu’elle soit facile à trouver.


Comment gérer un champ de recherche vide

Si l’utilisateur tente d’effectuer une recherche sans saisir de texte, indiquez-lui qu’il doit saisir des mots-clés pour la recherche.


Quand effectuer la recherche

Permettez aux utilisateurs de saisir leur requête en entier et de la soumettre afin d’exécuter la fonction de recherche.

Pour le moment, cette conception ne tient pas compte de la recherche prédictive par saisie automatique ni de la recherche par frappe anticipée.


Caractéristiques de cette composante

La zone de recherche comprend :

  1. une étiquette d’en-tête ajustable (par défaut, l’en-tête H5);
  2. une étiquette de texte d’indication facultative pour aider les utilisateurs à comprendre le contexte de ce qu’ils peuvent rechercher;
  3. un bouton principal avec une icône de loupe à titre de bouton de recherche;
  4. un champ de saisie de texte;
  5. un bouton d’effacement qui apparaît lorsque l’utilisateur saisit un caractère dans le champ de recherche.

Exemple


Un diagramme des caractéristiques d’une zone de recherche

Taille réactive de la zone de recherche

Une étude menée par Nielsen Norman Group (en anglais seulement) a révélé que la longueur moyenne des requêtes des utilisateurs est de deux mots. Dans cette optique, et afin de garantir la visibilité du bouton de recherche pour les utilisateurs qui augmentent le zoom de leur écran, nous recommandons de limiter la largeur maximale de la zone de recherche.

Le champ de recherche par défaut pour l’affichage sur un ordinateur de bureau d’une grande grille de 12 colonnes (1120 pixels) comportant des points de rupture s’étend sur 6 colonnes (544 pixels). Cette taille est établie délibérément afin de réduire les frictions causées par l’interaction et de permettre l’utilisation d’autres composantes liées à la recherche, telles que des éléments de tri ou de filtrage à côté de la zone de recherche. Dans les cas où il y a peu ou pas d’éléments liés à la recherche qui sont placés horizontalement, la zone de recherche peut s’étendre sur 8 colonnes (736 pixels). Ce ratio doit également être utilisé pour les tablettes.

Le champ de recherche s’étend sur l’ensemble des 12 colonnes (328 pixels) sur les appareils mobiles.

En ce qui concerne les points de rupture de la grille sur les ordinateurs de bureau et les tablettes, la largeur du bouton de recherche dans la composante est de 80 pixels. La largeur de ce bouton pour les appareils mobiles est de 40 pixels.

Exemple - desktop / tablet


Un exemple de zone de recherche conçue pour un ordinateur de bureau avec un bouton de recherche d’une largeur de 80 pixels.

Exemple - mobile


Un exemple de zone de recherche conçue pour un appareil mobile avec un bouton de recherche d’une largeur de 64 pixels.

Les caractères saisis n’occupent pas toute la largeur du champ de texte. Cela sert à fournir une zone cible tactile raisonnable pour les boutons d’effacement et de recherche.

À faire :


Un exemple de zone de recherche comportant un champ de saisie de caractères qui s’arrête avant le bouton d’effacement.

À ne pas faire :


Un exemple de zone de recherche comportant un champ de saisie de caractères qui s’étend sur toute la longueur du champ et qui chevauche le bouton d’effacement.

Mettez en place une fonction de défilement du texte saisi pour suivre la saisie de l’utilisateur et garder le curseur en vue même si le texte s’étend au-delà de la largeur visible du champ de saisie de texte.


Pratiques exemplaires

À faire

  • Programmer votre fonction de recherche de manière à traiter les requêtes à un seul mot et les requêtes très courtes à plusieurs mots.
  • Veiller à ce que la conception de la fonction de recherche soit minimale. Utiliser la hiérarchie typographique appropriée et un espace blanc suffisant pour mettre en évidence la composante.
  • Placer la zone de recherche sur un fond blanc.
  • Utiliser une étiquette de texte d’indication pour fournir un contexte.

À ne pas faire

  • Effectuer les recherches dans tout le contenu d’ontario.ca – limitez les recherches aux données de votre site ou de votre application Web.
  • Inscrire du texte de remplacement dans le champ de saisie de texte.
  • Surcharger la composante de recherche avec des fonctions avancées. Offrez d’abord une recherche simple, puis proposez à l’utilisateur d’autres options de tri ou de filtrage si nécessaire.

À faire :


Un exemple de champ de recherche au-dessus duquel figure du texte d’indication

À ne pas faire :


Un exemple de champ de recherche dans lequel figure du texte d’indication

Spécifications techniques

La composante de recherche exige que vous fournissiez une fonction pour gérer l’action de recherche. Remplacez doSearch() sur le bouton de soumission par votre propre fonction de recherche.


Accessibilité

  • Ajoutez role="search" sur la composante pour augmenter sa découvrabilité par les technologies d’assistance et faire apparaître le clavier de recherche sur les appareils mobiles.
  • L’attribut for de l’étiquette doit correspondre exactement à l’attribut id du champ de recherche.
  • Évitez d’inscrire du texte de remplacement dans le champ de saisie, car celui-ci n’est pas toujours reconnu par les technologies d’assistance. Placez plutôt du texte d’indication au-dessus du champ de saisie.

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