Liste des tâches
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/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/2-tools/functions/global.functions' as globalFunctions; @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/2-tools/placeholder/focus.placeholders' as placeholders; @use '@ongov/ontario-design-system-global-styles/dist/styles/scss/1-variables/font-weights.variables' as fontWeights; @use '@ongov/ontario-design-system-global-styles/dist/styles/scss/1-variables/global.variables' as globalVariables; .ontario-task-list { border-top: globalFunctions.px-to-rem(2) solid colours.$ontario-greyscale-20; margin-left: spacing.$spacing-0; padding: spacing.$spacing-0; max-width: 48rem; li:last-child { padding-bottom: globalFunctions.px-to-rem(19); } } .ontario-task { border-bottom: globalFunctions.px-to-rem(2) solid colours.$ontario-greyscale-20; padding: globalFunctions.px-to-rem(19) spacing.$spacing-0; list-style: none; &__content { display: flex; justify-content: space-between; align-items: center; @media screen and (max-width: breakpoints.$small-breakpoint) { display: flex; flex-direction: column; align-items: flex-start; } } &__label { text-align: left; margin: spacing.$spacing-0; font-size: globalFunctions.px-to-rem(19); font-weight: fontWeights.$ontario-font-weights-semi-bold; display: inline-block; @media screen and (max-width: breakpoints.$small-breakpoint) { margin-bottom: spacing.$spacing-2; } a { text-decoration: none; color: inherit; &:hover { text-decoration: underline; } } } &__link { display: block; text-decoration: none; color: colours.$ontario-colour-link; font-weight: normal; } &__hint-text--true { margin-bottom: spacing.$spacing-2; } &--error { padding-left: spacing.$spacing-4; border-left: globalFunctions.px-to-rem(4) solid colours.$ontario-colour-alert; margin-left: globalFunctions.px-to-rem(-2); } .ontario-hint { margin-bottom: spacing.$spacing-0; @media screen and (max-width: breakpoints.$small-breakpoint) { margin-top: spacing.$spacing-2; } } } .ontario-task__link { .ontario-task__label { text-decoration: underline; } } .ontario-task__link:focus { outline: none; box-shadow: none; .ontario-task__label { @extend %ontario-focus; box-shadow: 0 0 0 4px colours.$ontario-colour-focus inset; } } .ontario-task:has(.ontario-task__link) { &:hover { background-color: colours.$ontario-greyscale-5; } } @mixin link-states { &:visited .ontario-task__label { color: colours.$ontario-colour-link--visited; } &:hover .ontario-task__label { color: colours.$ontario-colour-link--hover; } &:active .ontario-task__label { color: colours.$ontario-colour-link--active; } } .ontario-task { &--status-completed, &--status-inprogress, &--status-notstarted, &--status-optional, &--status-error { .ontario-task__link { .ontario-task__label { color: colours.$ontario-colour-link; text-decoration: underline; } @include link-states; } } } .ontario-badge { text-decoration: none; .ontario-task-status--not-started & { background-color: colours.$ontario-colour-information-light; } .ontario-task-status--in-progress & { background-color: colours.$ontario-colour-information; color: colours.$ontario-colour-white; } .ontario-task-status--error & { background-color: colours.$ontario-colour-alert; color: colours.$ontario-colour-white; } .ontario-task-status--complete & { background-color: colours.$ontario-colour-white; border: globalFunctions.px-to-rem(1) solid colours.$ontario-greyscale-70; } .ontario-task-status--optional & { background-color: colours.$ontario-greyscale-5; } .ontario-task-status--cannot-start-yet & { background-color: colours.$ontario-greyscale-20; } }
- URL: /components/raw/task-list/task-list.scss
- Chemin du système de fichiers: fractal/components/components/task-list/task-list.scss
- Taille: 4.1 KB
-
Contenu:
.ontario-task__link:focus .ontario-task__label{box-shadow:0 0 0 4px #009adb;outline:4px solid transparent;transition:box-shadow .1s ease-in-out}.ontario-task-list{border-top:.125rem solid #ccc;margin-left:0;padding:0;max-width:48rem}.ontario-task-list li:last-child{padding-bottom:1.1875rem}.ontario-task{border-bottom:.125rem solid #ccc;padding:1.1875rem 0;list-style:none}.ontario-task__content{display:flex;justify-content:space-between;align-items:center}@media screen and (max-width: 40em){.ontario-task__content{display:flex;flex-direction:column;align-items:flex-start}}.ontario-task__label{text-align:left;margin:0;font-size:1.1875rem;font-weight:600;display:inline-block}@media screen and (max-width: 40em){.ontario-task__label{margin-bottom:.5rem}}.ontario-task__label a{text-decoration:none;color:inherit}.ontario-task__label a:hover{text-decoration:underline}.ontario-task__link{display:block;text-decoration:none;color:#06c;font-weight:normal}.ontario-task__hint-text--true{margin-bottom:.5rem}.ontario-task--error{padding-left:1rem;border-left:.25rem solid #cd0000;margin-left:-0.125rem}.ontario-task .ontario-hint{margin-bottom:0}@media screen and (max-width: 40em){.ontario-task .ontario-hint{margin-top:.5rem}}.ontario-task__link .ontario-task__label{text-decoration:underline}.ontario-task__link:focus{outline:none;box-shadow:none}.ontario-task__link:focus .ontario-task__label{box-shadow:0 0 0 4px #009adb inset}.ontario-task:has(.ontario-task__link):hover{background-color:#f2f2f2}.ontario-task--status-completed .ontario-task__link .ontario-task__label,.ontario-task--status-inprogress .ontario-task__link .ontario-task__label,.ontario-task--status-notstarted .ontario-task__link .ontario-task__label,.ontario-task--status-optional .ontario-task__link .ontario-task__label,.ontario-task--status-error .ontario-task__link .ontario-task__label{color:#06c;text-decoration:underline}.ontario-task--status-completed .ontario-task__link:visited .ontario-task__label,.ontario-task--status-inprogress .ontario-task__link:visited .ontario-task__label,.ontario-task--status-notstarted .ontario-task__link:visited .ontario-task__label,.ontario-task--status-optional .ontario-task__link:visited .ontario-task__label,.ontario-task--status-error .ontario-task__link:visited .ontario-task__label{color:#551a8b}.ontario-task--status-completed .ontario-task__link:hover .ontario-task__label,.ontario-task--status-inprogress .ontario-task__link:hover .ontario-task__label,.ontario-task--status-notstarted .ontario-task__link:hover .ontario-task__label,.ontario-task--status-optional .ontario-task__link:hover .ontario-task__label,.ontario-task--status-error .ontario-task__link:hover .ontario-task__label{color:#00478f}.ontario-task--status-completed .ontario-task__link:active .ontario-task__label,.ontario-task--status-inprogress .ontario-task__link:active .ontario-task__label,.ontario-task--status-notstarted .ontario-task__link:active .ontario-task__label,.ontario-task--status-optional .ontario-task__link:active .ontario-task__label,.ontario-task--status-error .ontario-task__link:active .ontario-task__label{color:#002142}.ontario-badge{text-decoration:none}.ontario-task-status--not-started .ontario-badge{background-color:#e2f0f4}.ontario-task-status--in-progress .ontario-badge{background-color:#1080a6;color:#fff}.ontario-task-status--error .ontario-badge{background-color:#cd0000;color:#fff}.ontario-task-status--complete .ontario-badge{background-color:#fff;border:.0625rem solid #4d4d4d}.ontario-task-status--optional .ontario-badge{background-color:#f2f2f2}.ontario-task-status--cannot-start-yet .ontario-badge{background-color:#ccc}
- URL: /components/raw/task-list/task-list.css
- Chemin du système de fichiers: fractal/components/components/task-list/task-list.css
- Taille: 3.7 KB
Principe directeur: Créer des tableaux accessibles à tout le monde.
À propos de cette composante
La liste des tâches permet d’afficher un ensemble d’étapes. Elle apparaît au début d’un processus de formulaire ou de demande complexe pour aider les utilisateurs à comprendre :
- les étapes à suivre pour remplir le formulaire;
- faire le suivi des tâches terminées et en attente;
- suivre l’ordre requis pour certaines tâches.
Chaque tâche établit clairement les attentes et divise le processus en étapes gérables, ce qui permet aux utilisateurs de se concentrer sur une section à la fois.
La liste des tâches sert en tant queIl faut envisager d’utiliser une liste de tâches lorsqu’un utilisateur :
- « page d’accueil » à laquelle l’utilisateur revient après avoir terminé chaque tâche;
- moyen de naviguer vers des sections précises du formulaire qui pourraient devoir être mises à jour, examinées ou remplies plus tard.
Quand utiliser cette composante
Il faut envisager d’utiliser une liste de tâches lorsqu’un utilisateur :
- a besoin de plusieurs séances pour remplir un formulaire;
- a besoin de souplesse pour effectuer une tâche dans l’ordre qu’il préfère;
- devrait connaître toutes les sections à l’avance (par exemple, pour préparer les utilisateurs à obtenir l’information dont ils ont besoin à l’avance).
Quand ne pas utiliser cette composante
Pratique exemplaire : Essayez de simplifier le service avant d’utiliser une liste de tâches.
Pour les formulaires courants qui suivent un processus linéaire, une liste de tâches n’est généralement pas requise.
Pour un formulaire long en plusieurs étapes, utilisez un indicateur d’étape pour indiquer la progression.
Caractéristiques de la composant
Exemple
Nom de la tâche
Les tâches doivent être courtes et descriptives pour aider les utilisateurs à comprendre l’activité nécessaire à l’exécution de la tâche.
Conseil facultatif
Les conseils fournissent plus de renseignements sur la nature de la tâche. Utilisez des phrases courtes et simples pour faciliter la navigation des utilisateurs de lecteurs d’écran.
Badge de l’état
Les badges de l’état permettent aux utilisateurs de voir rapidement où ils en sont. Chaque tâche doit être associée à un badge de l’état afin d’aider les utilisateurs à comprendre leur progression.
États disponibles
État | Classe CSS | Utilisation |
---|---|---|
Pas encore commencé | `ontario-task-status--not-started` | Tâches prêtes à commencer |
En cours | `ontario-task-status--in-progress` | Tâches qui ont été commencées, mais qui n’ont pas été terminées |
Terminé | `ontario-task-status--completed` | Tâches terminées |
Ne peut pas commencer | `ontario-task-status--cannot-start-yet` | Tâches qui exigent que d’autres tâches soient accomplies en premier |
Facultatif | `ontario-task-status--optional` | Tâches facultatives |
Erreur | `ontario-task-status--error` | Erreurs pour la tâche qui se produisent lorsqu’elles sont terminées |
Remarque : Il faut attribuer le nom de catégorie d’état approprié à l’élément <li class="ontario-task">
. Cela permet de s’assurer que la couleur correspondante du badge est appliquée, tel que défini dans notre CSS.
Le fonctionnement
Aperçu général
Exemple
- Présenter la liste des tâches aux utilisateurs au début d’un processus de formulaire ou de demande complexe. L’affichage initial (« page d’accueil ») devrait indiquer toutes les étapes et leur état.
- Lorsque l’utilisateur clique sur une tâche admissible, il est dirigé vers les pages du formulaire de tâche.
- Une fois que l’utilisateur a atteint la fin du formulaire, la pratique exemplaire consiste à avoir une page de révision de la section du formulaire et de laisser l’utilisateur décider quand une tâche est terminée.
- L’utilisateur doit être ramené à la page d’accueil de la liste des tâches une fois qu’il a terminé et les états de la liste des tâches doivent être mis à jour.
Considérations relatives à la liste des tâches
Ordre des tâches
L’ordre dans lequel les tâches et les étapes s’affichent doit être fondé sur ce qui est logique pour l’application. Par exemple, vous pourriez utiliser la première tâche pour poser des questions d’admissibilité afin de filtrer ou de présélectionner les utilisateurs.
Les utilisateurs suivent habituellement l’ordre présenté, alors numérotez les tâches si une séquence particulière est requise.
Dans la mesure du possible, laissez l’utilisateur effectuer les tâches dans n’importe quel ordre afin qu’il puisse remplir les sections dans l’ordre de son choix.
Regroupement des tâches
Pour améliorer l’expérience de l’utilisateur, divisez le formulaire en tâches plus petites afin de rendre le processus plus facile à gérer. Cela les aide à franchir les étapes du formulaire.
Regroupez les tâches dans des listes distinctes et placez-les sous un en-tête.
Exemple
Laissez l’utilisateur décider quand une tâche est terminée
Il est parfois utile de laisser l’utilisateur indiquer quand il a terminé chaque tâche. Vous pouvez le faire en ajoutant une question obligatoire qui demande s’il a rempli une section.
Exemple
Marquage des tâches en cours
Une tâche doit avoir le badge d’état « En cours » si un utilisateur :
- commence une tâche, mais qu’il ne l’accomplit pas (en laissant une page vide accidentellement ou intentionnellement);
- indique que sa tâche est toujours en cours dans la section de révision.
Pratique exemplairer : Les réponses laissées par l’utilisateur dans le formulaire sont enregistrées. Pour plus de détails, reportez-vous à l’article sur l’enregistrement des données.
Erreurs
Dans certains cas l’état d’erreur apparaîtra pour une tâche.
Par exemple : « L’information saisie ne correspond pas, veuillez revoir les sections marquées d’une erreur. »
Utilisez un badge d’erreur et associez-le à une alerte de page en haut de la page pour diriger les utilisateurs vers la tâche qui doit être corrigée.
Exemple
Lorsque l’utilisateur est prêt à soumettre le formulaire
Exemple
Une fois que toutes les tâches admissibles sont terminées, permettez à l’utilisateur de soumettre le formulaire avec un bouton de soumission.
Si un utilisateur tente de passer en revue et de soumettre un formulaire incomplet, signalez les sections manquantes et ajoutez un lien vers celles-ci avec une alerte de page.
Une fois la demande soumise, la page devrait afficher une révision finale du formulaire afin que les utilisateurs puissent vérifier ou modifier leurs réponses avant de soumettre leur demande.
Un écran de confirmation doit s’afficher une fois que la demande complète a été soumise.
Spécifications techniques
Accessibilité
Il est essentiel de respecter des exigences précises en matière d’accessibilité pour assurer une expérience harmonieuse pour tous.
Considérations sémantiques HTML
Élément de liste
Chaque tâche est entourée d’une balise <li>
avec role="group"
, indiquant aux technologies d’assistance que le contenu fait partie d’un ensemble plus vaste, comme une liste de tâches.
-
aria-labelledby
: Doit faire référence à l’identifiant de l’élément d’en-tête (étiquette de tâche) pour assurer une relation claire. -
aria-describedby
: Devrait faire référence à l’identifiant de l’élément<p>
du texte d’aide, le cas échéant.
Nom de la tâche
Le nom de la tâche principale est représenté par un élément d’en-tête. Cela assure une hiérarchie sémantique et fournit une étiquette descriptive pour les lecteurs d’écran.
- Ajouter un
id
à l’en-tête (par ex.,task-label
) afin qu’il puisse avoir la référencearia-labelledby
dans la balise<li>
.
État de la tâche
L’état actuel de la tâche est affiché dans une balise <div>
avec role="status"
. Cela annonce des mises à jour dynamiques de l’état des technologies d’assistance.
- L’étiquette
aria-label
sur le badge de l’état doit inclure un texte descriptif (p. ex., « État de la tâche : En cours »).
Enregistrement de données
Lorsque vous mettez en œuvre l’enregistrement automatique dans les composantes de la liste des tâches, envisagez cette approche souple en suivant les recommandations générales pour équilibrer la fonctionnalité, l’expérience utilisateur et la sécurité (selon votre cas d’utilisation particulier).
Pour les utilisateurs connectés :
Pratique exemplaire :
- L’enregistrement automatique permet d’enregistrer les progrès en toute sécurité en reliant les données aux comptes. Les sauvegardes régulières préviennent la perte de données, et le chiffrement assure la sécurité des renseignements.
- L’option d’enregistrement manuel permet aux utilisateurs de contrôler, tandis que le contrôle des versions leur permet de restaurer les états précédents. .
- Les sessions doivent prendre fin après une période d’inactivité afin de protéger les données utilisateur. L’enregistrement automatique peut également mettre à jour les états dans la liste des tâches.
Pour les utilisateurs anonymes :
Pratique exemplaire :
- Utiliser sessionStorage pour enregistrer temporairement la progression, car elle disparaît lorsque le navigateur est fermé.
- Évitez d’enregistrer localement les données sensibles afin de réduire les risques pour la sécurité. Si vous devez les enregistrer sur le serveur, anonymisez les données et utilisez des jetons de session qui vont expirer.
- Avisez clairement les utilisateurs de l’enregistrement automatique, tout en réduisant au minimum les données stockées, puis traitez efficacement les erreurs et respectez les lois sur la protection des renseignements personnels.
Si vous avez des questions ou souhaitez donner de la rétroaction, veuillez communiquer avec nous.