Utiliser les propriétés personnalisées (custom properties en anglais) pour gérer vos couleurs
Donné un nom fonctionnel ou plus simplement numérote vos couleurs !
body {
background:var(--color1);
color:var(--color2);
}
Définissez le jeu de couleurs du navigateur avec la propriété color-scheme ;
Lorsqu'un utilisateur sélectionne un de ces jeux de couleurs, le système d'exploitation fait des ajustements à l'interface utilisateur. Cela comprend les contrôles de formulaires, les barres de défilement et les valeurs utilisées par le système de couleurs CSS.
Mode clair par défaut
:root {
--color1:white;
--color2:black;
--color3:#F2F2F2;
color-scheme: only light;
}
La valeur only sert à désactiver le remplacement de couleur du mode nuit du moteur de rendu Blink
Seuls les liens des extensions Firefox sont répertoriés parce que ce navigateur fait partie des environnements de test officiels à la différence de Chrome.
Motif de conception
— ajouté le
1 juin 2023
Décrit structure, rôles et propriétés et comportement d’un composant JavaScript(widget).
Faites-le glisser dans votre barre d'outils ou cliquez avec le bouton droit de la souris et ajoutez-les à vos favoris. Vous pouvez ensuite les exécuter quand vous en avez envie.
La modèle BUSE est un ensemble de principe de conception, de regle d'usage et d'organisation afin de mettre en place du code SCSS maintenable.
L'ensemble de ses règles n'est pas immuable et doit être adapté à vos besoins. Les cas fondateurs du modèle
Un nom mémotechnique
Base :
Function, mixin, variable, reset
Utilitaire :
Les éléments de base réutilisable et partageable
Structure :
Les squelettes responsive sans le contenu
Element :
Spécificité d'un usage
Satellite :
Les bibliothèques externes et leurs surcharges
Principe de conception de l'architecture
Avoir une arborescence simple et compréhensible par tous
Appliquer des règles de nomenclature et les respecter
Décider de tout cela avec son équipe, les impliquer
L'ensemble des fichiers SCSS doit être regroupé et classé dans des répertoires
Préfixé chaque dossier par une numérotation afin de les faire apparaitre dans un ordre logique : du plus abstrait au plus spécifique
Chacun de ses répertoires possède un fichier index nommé __index.scss
Le double undersore permet que le fichier se retrouve toujours en haut de l'arborescence.
L'index sert de fichier d'intermédiaire pour importer tous les fichiers ou les index des sous-dossiers à la racine de ce répertoire.
Les imports sont classés par ordre alphabétique où par besoin quand c'est nécessaire
Utiliser des sous-dossiers dès lors que deux fichiers ou plus aborde le même thème
Au même niveau, l'on peux ajouter des feuille spécifique, qui importerait tous les styles de texte et lien/bouton pour les appliques dans un éditeur WYSIWYG par exemple
Bonne pratique
Établir des règles
Que l'on travaille seul où a plusieurs, il est essentiel d'établir des règles sans exception, pour ne pas à avoir à faire du cas par cas et a complexifié votre projet.
Des règles sur la nomenclature de fichier, de dossier, de nom de classe, de type de sélecteur, de norme d'indentation et de tous ce qui vous semble utile, de chose que vous avait pu rencontrer par le passé et que vous ne souhaitez pas revoir !
Idéalement il faut mettre tous ça par écrit, sur un page de votre style guide
Bannir les imbrications
Même si les imbrications peuvent faciliter la vie et que cette fonctionnalité est en working draft coté CSS, voir
CSS Nesting Module
Son abus ou son utilisation pour des composants complexes est inapproprié. Pour avoir une règle simple, mieux vaut l'interdire !
À partir de deux fichiers traitant du même thème on, crée un sous-dossier avec un index
CSS réinitialisation
On n'utilise pas de CSS reset tout fait, on créé son propre fichier en fonction de son besoin.
Beaucoup de réinitialisations ne sont plus à jour ou peuvent ajouter des contraintes
Convention de nommage
Un savant mélange de BEM et de OOCSS afin de gommer les imperfections
On n'utilise pas les imbrications
On n'utilise pas les id
On n'utilise pas de !important
On n'utilise pas les classes de style pour cibler un élément en JavaScript
On préfixe par js__ les classe pour le JavaScript
On travail en utilitaire
On utilise des sélecteurs à un seul niveau, __ pour un sous-élément
On ne déclare que ce que l'on utilise
Pas de fonction pour généré tout l'espacement possible en toutes les tailles, direction, point de rupture
On utilise les initiles des propriété et valeur pour faires les utilitaires des espacement, du flexbox et cssgrid .mt-2 pour marin-top de taille 2 .df pour display:flex .ji-c pour justify-items: center;
Quelques mauvaises expériences
Mauvaises traductions
Je comptais ajouter un nouveau composant réutilisable pour géré les cadre, lorsque je découvrir qu'il en existait déjà un mais il était nommé card.
Hors cadre en anglais c'est frame
Je pense qu'il y a confusion entre le sous-élément carte qui reprend une partie des propriétés d'un cadre.
Imbrication sur des composants complexes
En voulant changer la couleur de soulignement d'un lien actif sur un mega menu responsif, je suis tomber sur un fichier faisant plus de 300 lignes de code imbriqué, écris en BEM.
Des &__item il y en avait des dizaines sans compter tous les états actif, hover, focus...
Impossible de faire une simple recherche Ctrl + F
13 décembre 2006 : Convention relative aux droits des personnes handicapées de l’ONU
Signé par tous les États membres dons la France (le 18 février 2010)
Incapacité physique, mentales, intellectuelle ou sensoriel
C'est le manque d'adaptation qui crée la situation de handicap
Différents types de handicaps physique et sensoriel
Visuel (contraste, tache, vision)
Cognitif (décodage, DYS)
Physique
Polyhandicap : multiple handicap
En accessibilité on ne cible pas par type de handicap (car il y en trop), mais par besoin
L'universalité inclut l'accessibilité.
Le W3C ce veut Universalité : matériel, logiciel, infra, langue, culture, localisation et aptitudes physique ou mentale
Accessibilité c'est différent du référencement et de la performance, c'est même parfois contre-productif
Les personnes en situation de handicap n'ont pas de possibilité de résoudre leur problème À ne pas confondre avec le handicap situationnel qui peut être résolu sans aide, par exemple si on est dans un milieu trop ensoleillé ou dans un véhicule qui bouge
Pourquoi faire de l'accessibilité
Le numérique, c'est une promesse d'inclusion
Faire des choses qui n'étaient pas faisables en autonomie
Parfois la seule méthode pour communiquer
Parler des personnes en situation de handicap
Respect de leur droit
Ne pas parler de «ça sert à tout le monde», car ils vont penser que c'est de l'amélioration alors que l'accessibilité entraine des contraintes
Exemple de besoin
Navigation clavier (par forcement clavier dalleur, ça peut être des boutons au niveau de la tete)
Uniquement a la souris : dispositif qui déplace le curseur (eyes tracking pa exemple
Description élément visuel (aveugle, mal voyante)
Description audio (sourd, malentendant)
Naviguer à son rythme, maitrise son environnement (trouble psychique)
Personnalise l'affichage (couleur, taille police, police etc.
Perte acuité visuel, audition, mental
Appréhension technologique, peur de casser, faire mal
Technologie d'assistance, quel exemple : Plage braille, clavier mono manuel, headstick, eye-tracking, clavier visuel, lecteur écran, contacteur au souffle, trackball, contrôle par la pensée (à l'état de recherche) etc
Norme et référentiel
Norme
UAAG pour les agents utilisateurs (navigateur, lecteur d'écran) : affichage par le navigateur de l’info-bulle d’un lien à la souris et au clavier.
ATAG pour les outils d’édition de contenus (CMS) : alternatives aux boutons de mise en forme, production de contenus conformes.
WCAG pour les contenus web : alternatives aux éléments graphiques.
L’API ARIA pour les composants riches.
Version du WCAG :
Avant la 2.1, pour les non voyant essentiellement
version 2.1 : basse vision, troubles cognitifs, difficultés d’apprentissage et DYS
version 2.2 : prévue pour début 2023
Trois niveaux d'accessibilité WCAG
A : Accès à l’information et d’une utilisabilité de base : 80% des critères.
AA : Améliorations et la prise en charge de contextes particuliers (les couleur par exemple)
AAA : Ne peut pas s'appliquer à tous les types de contenus et de situations
En France, le niveau légal requis est le double A (AA) : pour être conforme il faut que tous les critères A et AA applicable du référentiel, soient conformes.
Il n’est pas recommandé de faire de la conformité au niveau AAA une politique générale pour des sites entiers parce qu’il n’est pas possible de satisfaire tous les critères de succès de niveau AAA pour certains contenus.
En France on a créé un révérenciel; donner une méthode opérationnelle pour vérifier que les WCAG sont bien respectées sans avoir à tout lire (rédaction indépendantes des technologies et souvent abstraites)
« On entend par “aménagement raisonnable” les modifications et ajustements nécessaires et appropriés n’imposant pas de charge disproportionnée ou indue apportés, en fonction des besoins dans une situation donnée, pour assurer aux personnes handicapées la jouissance ou l’exercice, sur la base de l’égalité avec les autres, de tous les droits de l’homme et de toutes les libertés fondamentales. »
Article 2 de la CRDPH.
En d'autre termes, en cas de dérogation sur un cas particulier, il faudrait fournir tous de même une alternative
Sauf si cette alternative représente elle aussi une charge disproportionnée
Alors il faut pouvoir permettre à l'utilisateur de faire un signalement et de lui répondre dans un délai raisonnable
Refus d'aménagement raisonnable est puni par l'article 225-2 du Code pénal
La loi prévoit entre 3 et 5 ans d'emprisonnement et entre 45 000 et 75 000 euros d'amende.
Commme aria-label et aria-labelledby ne sont exploités que par les lecteurs d’écrans.
La meilleure solution est de proposer une alternative (modal, nouvelle page ou afficher/masquer)
Mettre un alt trés général puis le bouton «lire la description détaillée de l'infographie» par exemple
<img src="img.png" alt="infographie" />
<a href="description.html">Description détaillée de l'infographie</a>
<img src="img.png" alt="infographie" />
<button aria-expanded="false">Description détaillée de l'infographie</button>
Image captcha
L’alternative de l’image doit permettre d’identifier la nature de l’image
<img src="" alt="Code de confirmation à saisir"/>
Proposer une alternative
Captcha sonore; pas idéal, le son peut être dangereux pour certaines typologies
Captcha de logique; pas conseiller car problématique pour certaines typologies
Envoi du code par email/SMS; Recommander si possible car plus lourd techniquement
Le captcha de google est conforme !
Texte en image
Interdit sauf pour les logos
ou proposer un mécanisme de remplacement :
Déclencher par l'utilisateur via une option accessibilité
via un plugin
Images légendées
Légende : texte adjacent à une image
Si un alt est renseigné, il faudrat reporter son contenu dans le aria-label et dans la figcaption
<figure role="group|figure" aria-label="alt-image Légende de l’image">
<img src="…" alt="alt-image" />
<figcaption>
alt-image Légende de l’image
</figcaption>
</figure>
<figure role="group|figure" aria-label="Légende de l’image">
<img src="…" alt="" />
<figcaption>
Légende de l’image
</figcaption>
</figure>
Si un lien est présent dans le figcaption, reporté unique son intitulé dans le aria-label
Même si leur utilisation pour faire de la mise en forme n'est pas interdite cela n'est pas conseillée
Si c'est tout de même utilisé pour faire de la mise en en forme, il ne faut pas utiliser des balises ou d’attributs de tableaux de données : <th><thead><tfoot><caption>scopeheaderscolgroupaxisrole="columnheader"role="rowheader"
role="presentation" sur la balise table
Cette propriété supprime la sémantique du tableau, penser à redonner de la structure aux textes (titres, paragraphes, listes ...) dans ces cas.
Si la propriété summary="" est présente (HTML4), videz la !
Déclaration des entêtes<th scope="[col|row]">
Permets d'indiquer la direction de la cellule d'entête
Le scope est obligatoire si plusieurs entré
<table>
<caption>Parc et fréquentation des autres hébergements collectifs touristiques en 2018</caption>
<tr>
<th scope="col">Type d’hébergement professionnel</th>
<th scope="col">Nombre d’établissements</th>
[...]
</tr>
<tr>
<td>Résidences de tourisme</td>
<td>2 426</td>
[...]
</tr>
</table>
Équivalents ARIA
Tableau : role="table"
Titre : aria-label="Nom du tableau" ou aria-labelledby="id_titre"
Entêtes de colonne : role="columnheader"
Entêtes de rangée : role="rowheader"
Cellules : role="cell"
<p id="titre">Parc et fréquentation des autres hébergements collectifs touristiques en 2018</p>
<div role="table" aria-labelledby="titre">
<div role="row">
<div role="columnheader">Type d’hébergement professionnel</div>
<div role="columnheader">Nombre d’établissements</div>
[...]
</div>
<div role="row">
<div role="cell">Résidences de tourisme</div>
<div role="cell">2 426</div>
[...]
</div>
</div>
Tableaux complexes
Un tableau est complexe quand il contient plus d'une ligne d'entête (col ou row) ou s'il y a des fusions cellule
Titre et résumé de l’organisation du tableau
Dans le caption ou via le aria-labelledby="", mettre le titre + un résumé de l’organisation du tableau (HTML5)
Pour le résumé pour les versions précédentes de HTML, le mettre dans summary=""(HTML4)
<caption>
Figure 2 - Répartition des déchets non dangereux non minéraux hors boues de l’industrie
manufacturière par type en 2016
<span class="sr-only">
Les industries agroalimentaires (IAA) et les industries manufacturières (hors IAA)
sont présentées sur 2 colonnes, avec, pour chacune d’elles la quantité en milliers
de tonnes le pourcentage. Une troisième colonne présente le total des deux industries,
en milliers de tonnes et en pourcentage.
</span>
</caption>
Le sommaire, pouvant être utile à d'autres usagers que ceux utilisant un lecteur d'écran, il est préférable de le mettre dans un bloc qui s'affiche via un bouton de type afficher / masquer
<caption>
Figure 2 - Répartition des déchets non dangereux non minéraux hors boues de l’industrie
manufacturière par type en 2016
<button type="button" aria-expanded="false">Résumé de l’organisation du tableau</button>
<span class="hide">
Les industries agroalimentaires (IAA) et les industries manufacturières (hors IAA)
sont présentées sur 2 colonnes, avec, pour chacune d’elles la quantité en milliers
de tonnes le pourcentage. Une troisième colonne présente le total des deux industries,
en milliers de tonnes et en pourcentage.
</span>
</caption>
Version alternative
Pour les tableaux complexes préférés une alternative car cela inclura tout le monde et non seulement les lecteurs d'écran (et c'est plus simple à développer !)
Passage en mode liste par exemple
On affiche un bouton pour afficher la version alternative
Plus besoin de mettre le résumé et header s'il y a une alternative
Cellules d’en-têtes
Identifier les cellules d’en-têtes via un attribut id et lier les cellules de données via l’attribut headers.
L'intitulé permet de comprendre ou le lien va nous emmener
ou
Le contexte le permet (Titre, paragraphe et phrase précédente)
«la suite», si le texte est seul, ce n'est pas explicite
«la suite», précédé d'un article (titre ou paragraphe), c'est conforme
Mais on peut améliorer l'intitulé !
Si un lien n'est pas explicite pour le voyant, ce n'est pas une faute, mais plutôt un problème d'UX
Le nom visible doit être contenu dans le nom accessible
Pour expliciter un intitulé :
via un texte caché en sr-only : non voyant uniquement
title : tous le monde
aria-label ou aria-labelledby : pas natif donc pas pour tout le monde
aria-label
Doit comporter l'intitulé du lien
<a href="#url" aria-label="Retour Accueil du site">Retour</a>
aria-label surcharge l'intitulé, c'est pour ça que l'on doit mettre l'intitulé dedans
title
Le title sera restitué par les lecteurs d'écran et à la souris
Par défaut le title est restitué en plus de l'intitulé, mais certain le configure pour etre que seul le title soit restitué
Doit comporter l'intitulé du lien
<a href="#url" title="Retour Accueil du site">Retour</a>
Liens identiques
Des liens dons l'intitulé et le contexte sont identiques et ont la même destination
Si ce n'est pas le cas :
Ajouter un titre pour préciser la différence entre les liens
Changer le contexte
Liens vides
Pas de lien vides
Attention au lien avec des images, aux polices d'icônes où les mise en forme en CSS uniquement (content:"")
Mettre un alt sur les images liens
<a href="#lien">
<img alt="intitule">
</a>
Ajouter un aria-label ou aria-labelledby sur le lien si besoin, utilisé si possible les propriétés natives
Ou une alternative accessible
Avec un datepicker non conforme, l'ajout d'un input saisissable rend le composant conforme
(attention à ne pas être piégé dans une boucle de focus)
Rôle pertinent
Lien : changement d'URL
Bouton ou implémentation du motif ARIA button : action, événement, fonction JavaScript etc...
Même pour les single page application ;
Un composant qui déclenche l'ouverture d'une page ou d'un onglet doit être un lien même si ce sont des actions Javascript
<a role="link" tabindex="0" onclick="myFunction()"></a>
<!-- ou -->
<a href="#" onclick="myFunction()"></a>
État et changements d'état
État sélectionné d'un bouton
<button aria-pressed="false">Filtrer par nom</button>
<button aria-pressed="true">Filtrer par nom</button>
Composant inactif, on utilisera l'attribut disabled
L'attribut aria-expanded="true/false" est défini sur un élément pour indiquer si un contrôle est développé
Sur un groupe d'éléments liés, indiquer à l'utilisateur qu'il s'agit de l'élément actuel aria-current
Lorsqu'un composant change d'état, que sa fonctionnalité est modifiée, on peut également passer par un changement de nom accessible ou de description (par exemple, la transformation d'un bouton lecture en pause, on vérifiera que l'intitulé a bien été modifié pour retranscrire la fonctionnalité qui sera déclenchée à la prochaine activation du bouton, pas uniquement l'apparence visuelle).
un texte explicatif précédant le changement de contexte
Ne pas faire de rechargement de page, d'une partie ou de changement de page par défaut, mettre un bouton pour faire l'action
un bouton ou un lien explicite
Message de statut
Informer les technologies d’assistance des messages d’alerte de confirmation ou de statut, sans déplacer le focus de l'utilisateur.
Ne pas en abuser, parfois contre-productif
Si le focus est déplacé sur le message ok/Ko général alors pas besoin de mettre le role="alert" ou si la page se recharge et que le bloc est dans le DOM
Dans tous les cas on fait une reprise de focus.
En cas d'erreur, ont se déplace l'utilisateur sur le premier champ en erreur/ ou message de confirmation + le mieux et de mettre aussi un message dans le titre de la page
aria-live="assertive" : le contenu est vocalisé immédiatement
aria-live="polite" : le contenu est vocalisé dès que l'utilisateur est disponible
aria-atomic="true" restitue tout, à ne pas utiliser dans un tchat par exemple
aria-atomic="false" restitue uniquement le dernier ajout
Messages d'erreurs
— Haute priorité
role="alert"
Le "alert" est restituée correctement
<p role="alert">Ceci est une alerte ajoutée dynamiquement</p>
Méthode alternative :
aria-live="assertive"
et aria-atomic="true"
Messages d'informations
— Attends que ce soit son tour pour être vocalisé
Pas très fiable coté restitution, préféré le "alert" si ça beug
<p role="status">Ceci est un status ajouté dynamiquement</p>
Méthode alternative :
aria-live="polite"
et aria-atomic="true"
<p><span id="myLiveRegion1" aria-live="polite">Mais je sais rester polie</span></p>
Messages de notifiactions
role="log"
Méthode alternative :
aria-live="polite"
et aria-atomic="false"
Messages d’attente
role="progressbar"
Seulement pour des tâches qui prennent beaucoup de temps.
Motif de conception (design pattern) : décrit structure, rôles et propriétés et comportement d’un composant JavaScript(widget).
ARIA authoring practices
Environnement de test
Il est nécessaire de réaliser des tests de restitution et d'utilisation avec les lecteurs d'écran de la base de référence.
Guide sur les lecteurs d'écran.
Environnement de bureau
Technologie d’assistance
Navigateur
NVDA (dernière version)
Firefox
JAWS (version précédente)
Firefox
VoiceOver (dernière version)
Safari
Environnement mobile
Système
Technologie d’assistance
Navigateur
iOS
VoiceOver (dernière version)
Safari
Android
Talkback (dernière version)
Chrome
Pour tester un site web sur un terminal mobile, l’environnement de test devra comporter une des deux combinaisons (iOS ou Android). À noter que dans le cas d’un site web mobile grand public, il est fortement conseillé de tester dans les deux environnements.
Contenus d’introduction, peut contenir des titres, de la navigation
Une balise <header> peux être utiliser dans une <section>
<main>
Unique ou une seule balise est visible simultanément
<section>≠<div>
une <div> n'a pas de valeur sémantique
une <section> avec titre aria-label ou aria-labelledby : région déclarée dans les plans des lecteurs d'écran, ne pas en abusé car cela alourdit la page et complexifié inutilement le plan
<nav>
Réservé aux zones de navigation principale et secondaire
Les navigations secondaires comprennent :
menu de sous-rubrique
navigation dans les collections de pages
navigation dans les résultats de recherche
le Fil d'ariane
les liens d’évitement
Ne pas utiliser <nav> pour les listes de lien !
Le bouton "burger" doit être inclus dans l'élément <nav>
La navigation principale peut inclure le bouton burger et être inclus dans la même balise <nav>
Ou en cas de plusieurs <nav>, le bouton doit être dans une balise <nav> seul
<aside>
Optionnel
Contenus indirectement reliés au contenu principal, peuvent être consultés de manière indépendante
<footer>
Obligatoire pour le pied de page du document
Contenus de pied de page, d’articles ou de contenus regroupés par <section>
Titrage du contenu
Hiérarchie cohérente, de h1 à h6
Dans la version 4 du RGAA, la règle est plus souple
il peux y avoir des saut entre les titre h2h4
ne pas avoir de h1 peut etre conforme dans certain cas
avoir plusieurs h1 c'est conforme aussi
Uniquement les titres nécessaires, un texte ne gras n'est pas un titre
role="heading" aria-level="[level]"
Permet de déclarer un titrage aux technologies d'assistance sans utiliser les balises sémantique, à utiliser en cas de conflit avec les équipe SEO par exemple
Liste de définition : dl dt/dd
C'est assez lourd pour les lecteurs d'écran, préféré de simples listes sauf pour la réalisation d'un glossaire
Pour une légende d'un schéma, une liste non ordonnée est plus adaptée
Un équivalant aux balises sémantiques :
Si pas de possibilité de faire une liste sémantique :
role="list" équivalent à un ul
role="listitem" équivalent à un li
<div role="list">
<div role="listitem">Favoriser l’information…</div>
<div role="listitem">Permettre aux personnes…</div>
</div>
Les suites de liens doivent être structurées avec des listes.
Citations
Citation en ligne<q>, mal restitué par NVDA préféré la citation de bloc
Citation en bloc<blockquote>
<blockquote>
<p>Aimer, ce n'est pas se regarder l'un l'autre, c'est regarder ensemble dans la même direction.</p>
<cite>Antoine De Saint-Exupéry</cite>
</blockquote>
Cadres iframe et frame
Contenu pertinent, ajouté un title
<iframe title="Publicité"></iframe>
Pas de titre dans le cas de cadres techniques (Google Analytics, etc.) mais cacher avec aria-hidden="true".
Depuis RGAA 4 : tailles de polices en px autorisées. (non conseillé car les tailles de police en pixels ne permettent pas d’agrandir les textes sur certains navigateurs)
Quand un site propose un dispositif d’agrandissement des caractères (A+/A-), c'est cette fonctionnalité qui sera soumise à la conformité, mieux vaut laisser les navigateurs gérés !
Texte lisible avec agrandissement jusqu'à 200% :
Zoom texte :Firefox : « Affichage > Zoom texte seul » : agrandissement à 200% (Ctrl + 6 fois)
Ou utilisation des fonctions de zoom du navigateur (zoom graphique)
Linéarisation des contenus
Les contenus doivent rester présents, lisibles et utilisables sans utilisation des deux ascenseurs :
Consultation verticale : 320px de large minimum
Consultation horizontale : 256px de hauteur minimum
Les tableaux ont le droit d'être affiché avec un scroll
Adaptation des textes
Les textes doivent rester lisibles dans les conditions suivantes :
interlignage augmenté de 1,5 fois la taille de police ;
marge suivante : 2 fois la taille de police
espacement des lettres : 0,12 fois la taille de la police
espacement des mots : 0,16 fois la taille de la police
Le message doit être visible est restitué
Les textes liés par les propriétés aria-labelledby ou aria-describedby font partie des propriétés de l’élément, ils sont donc toujours disponibles, y compris lorsqu’ils sont cachés par CSS avec display:none ou visibility:hidden
Champ obligatoire : format attendu à fournir (a faire de facon global si possible)
Message générique dans le titre de la page : « erreur sur le formulaire » est très suffisant
Dans le message d'erreur on peut donner :
un exemple réel 01/02/23 au lieu du JJ/MM/AAAA, pour une date c'est clairement mieux, mais pour une adresse email c'est moins intéressant
de l'aide à la complétion, pas obligatoire mais mieux
Les exemples de format ne doivent pas être que dans les placeholders car ce n'est pas accessible
Personnaliser les messages d’erreurs natif
L'API Constraint validation permet de personnaliser les messages d’erreurs générés par les type d’input particuliers.
var email = document.getElementById("emailform");
email.addEventListener('invalid', function() {
if (this.value.trim() !== '') {
this.setCustomValidity("Saisie invalide. Exemple valide\n: toto@foobar.com");
}
}, false);
Modification, mises à jour ou récupération des données
Si le formulaire
modifie ou supprime des données ;
ou transmet des données sensibles, réponses à un examen ;
a des conséquences financières, juridiques.
L'utilisateurs doit pouvoir
vérifier, modifier ou annuler les saisies avant envoie du formulaire ;
ou il existe un mécanisme de confirmation explicite via une case à cocher ou une étape supplémentaire.
Pour les formulaires de signature électronique, type mandat SEPA, la modification peut être désactivé comme le but de ces formulaires est de valider les données saisies précédemment
Champs avec saisi automatique
Pour les champs qui collectent des informations personnelles sur l’utilisateur, la nature du champ (finalité) est déterminable à partir du code (attributs/propriétés).
honorific-prefix - Abréviation, civilité ou titre ;
given-name - Prénom ;
additional-name - Prénoms additionnels ;
family-name - Nom de famille ;
honorific-suffix - Suffixe honorifique ;
nickname - Surnom, diminutif ;
organization-title - Fonction, intitulé de poste ;
username - Nom d’utilisateur ;
new-password - Nouveau mot de passe (par exemple, lors de la création d’un compte ou d’un changement de mot de passe) ;
current-password - Mot de passe actuel pour le compte identifié par le champ username (par exemple, lors d’une connexion) ;
organization - Nom de l’organisation correspondant à la personne, à l’adresse ou à l’information de contact dans les autres champs associés avec ce champ ;
address-line1 - Adresse postale (une ligne par champ, ligne 1) ;
address-line2 - Adresse postale (une ligne par champ, ligne 2) ;
address-line3 - Adresse postale (une ligne par champ, ligne 3) ;
address-level4 - Le niveau administratif le plus détaillé, pour les adresses pourvues de quatre niveaux administratifs ;
address-level3 - Le troisième niveau administratif, pour les adresses pourvues d’au moins trois niveaux administratifs ;
address-level2 - Le deuxième niveau administratif, pour les adresses pourvues d’au moins deux niveaux administratifs ;
address-level1 - Le plus large niveau administratif d’une adresse, c’est-à-dire la province dans laquelle se trouve la localité ;
country - Code pays ;
country-name - Nom de pays ;
postal-code - Code postal, code CEDEX (si le CEDEX est présent, ajouter “CEDEX”, et ce qui le suit doit être ajouté dans le champ address-level2) ;
cc-name - Nom complet figurant sur le moyen de paiement ;
cc-given-name - Prénom figurant sur le moyen de paiement ;
cc-additional-name - Prénoms additionnels figurant sur le moyen de paiement cc-family-name - Nom de famille figurant sur le moyen de paiement ;
cc-number - Code identifiant le moyen de paiement (e.g., un numéro de carte bancaire) ;
cc-exp - Date d’expiration du moyen de paiement ;
cc-exp-month - Le mois de la date d’expiration du moyen de paiement ;
cc-exp-year - L’année de la date d’expiration du moyen de paiement ;
cc-csc - Code de sécurité du moyen de paiement (also known as the card security code (CSC), card validation code (CVC), card verification value (CVV), signature panel code (SPC), credit card ID (CCID), etc.) ;
cc-type - Type de moyen de paiement (e.g. Visa) ;
transaction-currency - La devise qui a la préférence de l’utilisateur lors d’une transaction ;
transaction-amount - Le montant qui a la préférence de l’utilisateur lors d’une transaction (e.g., en réponse à une enchère ou à un prix soldé) ;
language - Langue préférée ;
bday - Date d’anniversaire ;
bday-day - Le jour de la date d’anniversaire ;
bday-month - Le mois de la date d’anniversaire ;
bday-year - L’année de la date d’anniversaire ;
sex - Identité sexuelle ;
url - Page d’accueil ou une autre page Web correspondant à l’organisation, la personne, l’adresse ou à l’information de contact dans les autres champs associés avec ce champ ;
photo - Photographie, icône ou une autre image correspondant à l’organisation, la personne, l’adresse ou à l’information de contact dans les autres champs associés avec ce champ ;
tel - Numéro de téléphone complet, y compris le code pays ;
tel-country-code - Code pays du numéro de téléphone ;
tel-national - Numéro de téléphone sans la partie code pays, avec un préfixe interne au pays, s’il y a lieu ;
tel-area-code - Indicatif régional du numéro de téléphone, avec un préfixe interne au pays, s’il y a lieu ;
tel-local - Numéro de téléphone sans la partie code pays ni l’indicatif régional ;
tel-local-prefix - La première partie du composant du numéro de téléphone qui suit l’indicatif régional, lorsque ce composant est scindé en deux parties ;
tel-local-suffix - La seconde partie du composant du numéro de téléphone qui suit l’indicatif régional, lorsque ce composant est scindé en deux parties ;
tel-extension - Numéro de téléphone d’un poste interne ;
email - Adresse électronique ;
impp - URL correspondant d’un protocole de messagerie instantanée (par exemple, "aim:goim?screenname=example" ou "xmpp:fred@example.net").
Pas d'obligation de le mettre dans le <main>, peut-être en fin de contenu ou dans le pied de page !
Tous les liens sont fonctionnels avec des intitulés pertinents
Ordre de tabulation, piège au clavier
Ordre de tabulation cohérent avec le code ; titre avant paragraphe, ordre des conteneurs ( vérifier avec le site sans styles)
Pas de piège au clavier (focus figé, focus sur un élément invisible, bug JS, boucle infinie)
Attention au datepicker, pensez à mettre un bouton calendrier pour ouvrir et surtout fermer le calendrier pour éviter toute boucle
Ne jamais utiliser des tabindex supérieurs à 0, laissez le navigateur faire
Il peut avoir plusieurs tabindex="0" et tabindex="-1" dans une page
tabindex="0"
Permets de capturer le focus et être atteint via la navigation au clavier
Inclut l'élément dans le parcours séquentiel de tabulation pour un élément qui ne prend pas le focus, une div par exemple
tabindex="-1"
L'élément peut capturer le focus mais ne peut pas être atteint via la navigation au clavier
Exclu du parcours séquentiel un élément qui prend le focus (lien, button…)
Permets à l'élément ne prenant pas nativement le focus de le recevoir (méthode javascript focus)
Attention l'élément restera accessible par les techniques d'assistance (différent d'aria hidden="true")
Accès au contenu additionnel affiché
L'élément doit être atteint au clavier
La zone doit rester visible tant que le focus se trouve dans l'élément
Penser à mettre un bouton fermer pour pouvoir revenir à l'endroit initial (un bouton qui ouvre un pop-in après le footer dans le code)
Raccourcis clavier
Désactiver ou permettre de configurer les raccourcis
Ou le raccourci n'est effectif que lorsque le focus est dans le composant sur lequel il s'applique
L’utilisateur doit pouvoir supprimer ou augmenter la limite de temps ;
La limite de temps est de vingt heures au moins ;
Cas particulier lorsque la limite de temps est essentielle.
Il faut penser à ceux qui on besoin plus de temps que les autres pour faire les mêmes manipulations, pour un utilisateur de contacteur au souffle ou autre par exemple
Afficher un message dans une modale par exemple pour prolonger ou supprimer la limite de session
Rafraichissement automatique
L'utilisateur peut arrêter et relancer le rafraîchissement ;
L'utilisateur est alerté de l’imminence d’un rafraichissement et peut augmenter le délai de 10 fois au moins.
Que le rafraîchissement soit total soit partiel, proposer un bouton pour désactiver/activer le live upload par exemple
Nouvelles fenêtres
Pas de nouvelles fenêtres sans action de l’utilisateur
Une seule fenêtre s'ouvre à la fois
Documents en téléchargement
Document accessible ;
Ou alternative accessible : HTML, .doc, .odt structurés.
Pensez à fournir une alternative, notamment pour les PDF qui sont très difficile a rendre accessible
De préférence, le contrôle doit être le premier élément de la page.
Indépendance de l’orientation
Le contenu doite être consultable portrait et paysage, ne pas bloquer
Sauf si l'orientation est essentielle
Gestes complexes
Les fonctionnalités utilisables par des gestes multipoints (zoom sur une carte) ou basés sur un tracé (swipe) :
peuvent être réalisées avec un geste à point unique et/ou sans trajectoire,
sauf si le geste est essentiel(ex. le dessin d’une signature).
Sur une slider au swipe, ajouter une navigation avec des boutons !
Annulation du pointeur
Aucun événement ne doit être déclenché sur l’action descendante (down : mousedown sur desktop / touchstart sur mobile)
ou prévoir un mécanisme qui permet d’interrompre l'exécution de l'action avant la fin ;
ou un mécanisme permet d’annuler l'action.
Activation par le mouvement
Les fonctions qui sont déclenchées en déplaçant l’appareil (en secouant ou en basculant) ou lorsque l’utilisateur effectue un mouvement capté par les dispositifs de l’appareil (eg. une caméra) peuvent être :
actionnées par des composants classiques (un bouton) ;
désactivées pour éviter un déclenchement accidentel ;
sauf si le mouvement est essentiel pour la fonction.
Il est fortement conseillé de tester dans les deux environnements mobile
Tabulation
Ordre de tabulation cohérent avec le code ; titre avant paragraphe, ordre des conteneurs ( vérifier avec le site sans styles)
Pas de piège au clavier
Ne jamais utiliser des tabindex supérieurs à 0, laissez le navigateur faire
tabindex="0"
Permets de capturer le focus et être atteint via la navigation au clavier
Inclut l'élément dans le parcours séquentiel de tabulation pour un élément qui ne prend pas le focus, une div par exemple
tabindex="-1"
L'élément peut capturer le focus mais ne peut pas être atteint via la navigation au clavier
Exclu du parcours séquentiel un élément qui prend le focus (lien, button…)
Permets à l'élément ne prenant pas nativement le focus de le recevoir (méthode javascript focus)
Attention l'élément restera accessible par les techniques d'assistance (différent d'aria hidden="true")
Accès au contenu additionnel affiché doit être atteint au clavier
La zone doit rester visible tant que le focus se trouve dans l'élément
Penser à mettre un bouton fermer pour pouvoir revenir à l'endroit initial
Désactiver ou permettre de configurer les raccourcis
Base HTML
Ordre des éléments logique (titre avant paragraphe) abusé du flex order ou grid
Respect de la sémantique HTML
<!DOCTYPE html>
<html lang="fr">
<title>Titre pertinents et unique</title>
<header role="banner"></header>
<main id="contenu" role="main" tabindex="-1"></main>
<nav role="navigation"></nav><!--navigation principale et secondaire-->
<aside role="complementary"></aside>
<footer role="contentinfo"></footer>
<div role="search">
<form></form>
</div>
<blockquote>
<p>Aimer, ce n'est pas se regarder l'un l'autre,
c'est regarder ensemble dans la même direction.</p>
<cite>Antoine De Saint-Exupéry</cite>
</blockquote>
Tableau complexes : ajoute un résumé de l’organisation du tableau pour tous (afficher/masquer)
<caption>
Figure 2 - Répartition des déchets non dangereux non minéraux hors boues de l’industrie
manufacturière par type en 2016
<button type="button" aria-expanded="false">Résumé de l’organisation du tableau</button>
<span class="hide">
Les industries agroalimentaires (IAA) et les industries manufacturières (hors IAA)
sont présentées sur 2 colonnes, avec, pour chacune d’elles la quantité en milliers
de tonnes le pourcentage. Une troisième colonne présente le total des deux
industries, en milliers de tonnes et en pourcentage.
</span>
</caption>
Proposer une alternative pour tous (afficher/masquer) en mode liste par exemple
aria-label n'est pas correctement traduit par google translate
Préféré les méthodes : sr-only ou title
Formulaire
label visible et nom accessible (Le placeholder n’est pas suffisant)
Si title et placeholder alors leur contenu sont identiques
Les labels et les champs doivent être accolés
Regroupement des ensemble de radio, checkbox, période de date (début et fin) ou d'ajout d'une répétition (une personne : nom, prénom et age)
Les textes liés par les propriétés aria-labelledby ou aria-describedby font partie des propriétés de l’élément, ils sont donc toujours disponibles, y compris lorsqu’ils sont cachés par CSS avec display:none ou visibility:hidden
En cas de rechargement : Préfixé le titre de la page par « erreur sur le formulaire »
Indication de format de saisie : requise que pour les champs obligatoires, mais conseillé globalement
Si possible dans le label sinon aria-label, aria-labelledby ou title
<label for="date">Votre date de naissance</label>
<input type="text" aria-describedby="aidedate" id="date" />
<p id="aidedate">La date est de la forme 12/07/1981</p>
Champs qui collectent des informations personnelles sur l’utilisateur : autocompleteListe des valeurs
Suppression ou modification de données à caractère personnel : pouvoir annuler la suppression ou re-modifier par la suite ou confirmer explicitement par une case a coché supplémentaire
Aria
Privilégier le natif et testez !
Ne pas changer la sémantique (validator w3c siu besoin)
Tout composant interactif doit avoir un nom accessible
Un composant qui déclenche l'ouverture d'une page ou d'un onglet doit être un lien même si ce sont des actions Javascript
<a role="link" tabindex="0" onclick="myFunction()"></a>
<!-- ou -->
<a href="#" onclick="myFunction()"></a>
État et changements d'état : Ne pas faire de rechargement de page, d'une partie ou de changement de page par défaut, mettre un bouton pour faire l'action
inactif disabled
Bouton qui affiche masque aria-expanded="true/false"
aria-live="assertive" : le contenu est vocalisé immédiatement
aria-live="polite" : le contenu est vocalisé dès que l'utilisateur est disponible
aria-atomic="true" restitue tout, à ne pas utiliser dans un tchat par exemple
aria-atomic="false" restitue uniquement le dernier ajout
Ne pas en abuser, parfois contre-productif, repositionner le focus peut être plus pertinent
Message
Messages d'erreurs : <p role="alert">Ceci est une alerte</p> ou aria-live="assertive"+aria-atomic="true"
Messages d'informations : <p role="status">Ceci est une information</p> ou aria-live="polite"+aria-atomic="true" Message d'erreur général en début de formulaire
<div tabindex="-1" role="status">
<p>Le formulaire contient des erreurs. Veuillez vérifier votre saisie puis envoyer à
nouveau votre demande s’il vous plaît.</p>
</div>
Messages de notifications : role="log" ou aria-live="polite" et aria-atomic="false"
Messages d’attente
Seulement pour des tâches qui prennent beaucoup de temps.
<div role="progressbar" aria-valuenow="20" aria-valuemin="0" aria-valuemax="100">20 %</div>
<!-- ou -->
<div role="progressbar" aria-valuenow="20" aria-valuemin="0" aria-valuetext="Étape 2 : Copie des fichiers…" aria-valuemax="100">
Étape 2 : Copie des fichiers…
</div>
Repositionner le focus sur un élément pertinent, par exemple la zone mise à jour
Laisser le contrôle à l'utilisateur
L’utilisateur doit pouvoir supprimer ou augmenter la limite de temps (20h minium)
L'utilisateur peut arrêter et relancer un rafraîchissement automatique, proposer un bouton pour désactiver/activer le live upload par exemple
Pas de nouvelles fenêtres sans action de l’utilisateur
Une seule fenêtre s'ouvre à la fois
Documents en téléchargement : accessible ou alternative
Évité de lancer une vidéo, un son ou un slider automatiquement sinon bouton pause
Évité les effet de flash (3 flash par seconde)
Le contenu doite être consultable portrait et paysage, ne pas bloquer
Toutes fonctionnalités utilisables par des gestes doit avoir des équivalences en boutons
Prévoir un mécanisme qui permet d’interrompre l'exécution de l'action avant la fin en cas de mousedown sur desktop et touchstart sur mobile
L’utilisateur doit pouvoir supprimer ou augmenter la limite de temps ;
La limite de temps est de vingt heures au moins ;
Cas particulier lorsque la limite de temps est essentielle.
Il faut penser à ceux qui on besoin plus de temps que les autres pour faire les mêmes manipulations, pour un utilisateur de contacteur au souffle ou autre par exemple
Afficher un message dans une modale par exemple pour prolonger ou supprimer la limite de session
Rafraichissement automatique
L'utilisateur peut arrêter et relancer le rafraîchissement ;
L'utilisateur est alerté de l’imminence d’un rafraichissement et peut augmenter le délai de 10 fois au moins.
Que le rafraîchissement soit total soit partiel, proposer un bouton pour désactiver/activer le live upload par exemple
Nouvelles fenêtres
Pas de nouvelles fenêtres sans action de l’utilisateur
Une seule fenêtre s'ouvre à la fois
Documents en téléchargement
Document accessible ;
Ou alternative accessible : HTML, .doc, .odt structurés.
Pensez à fournir une alternative, notamment pour les PDF qui sont très difficile a rendre accessible
De préférence, le contrôle doit être le premier élément de la page.
Indépendance de l’orientation
Le contenu doite être consultable portrait et paysage, ne pas bloquer
Sauf si l'orientation est essentielle
Gestes complexes
Les fonctionnalités utilisables par des gestes multipoints (zoom sur une carte) ou basés sur un tracé (swipe) :
peuvent être réalisées avec un geste à point unique et/ou sans trajectoire,
sauf si le geste est essentiel(ex. le dessin d’une signature).
Sur une slider au swipe, ajouter une navigation avec des boutons !
Annulation du pointeur
Aucun événement ne doit être déclenché sur l’action descendante (down : mousedown sur desktop / touchstart sur mobile)
ou prévoir un mécanisme qui permet d’interrompre l'exécution de l'action avant la fin ;
ou un mécanisme permet d’annuler l'action.
Activation par le mouvement
Les fonctions qui sont déclenchées en déplaçant l’appareil (en secouant ou en basculant) ou lorsque l’utilisateur effectue un mouvement capté par les dispositifs de l’appareil (eg. une caméra) peuvent être :
actionnées par des composants classiques (un bouton) ;
désactivées pour éviter un déclenchement accidentel ;
sauf si le mouvement est essentiel pour la fonction.
Pas d'obligation de le mettre dans le <main>, peut-être en fin de contenu ou dans le pied de page !
Tous les liens sont fonctionnels avec des intitulés pertinents
Ordre de tabulation, piège au clavier
Ordre de tabulation cohérent avec le code ; titre avant paragraphe, ordre des conteneurs ( vérifier avec le site sans styles)
Pas de piège au clavier (focus figé, focus sur un élément invisible, bug JS, boucle infinie)
Attention au datepicker, pensez à mettre un bouton calendrier pour ouvrir et surtout fermer le calendrier pour éviter toute boucle
Ne jamais utiliser des tabindex supérieurs à 0, laissez le navigateur faire
Il peut avoir plusieurs tabindex="0" et tabindex="-1" dans une page
tabindex="0"
Permets de capturer le focus et être atteint via la navigation au clavier
Inclut l'élément dans le parcours séquentiel de tabulation pour un élément qui ne prend pas le focus, une div par exemple
tabindex="-1"
L'élément peut capturer le focus mais ne peut pas être atteint via la navigation au clavier
Exclu du parcours séquentiel un élément qui prend le focus (lien, button…)
Permets à l'élément ne prenant pas nativement le focus de le recevoir (méthode javascript focus)
Attention l'élément restera accessible par les techniques d'assistance (différent d'aria hidden="true")
Accès au contenu additionnel affiché
L'élément doit être atteint au clavier
La zone doit rester visible tant que le focus se trouve dans l'élément
Penser à mettre un bouton fermer pour pouvoir revenir à l'endroit initial (un bouton qui ouvre un pop-in après le footer dans le code)
Raccourcis clavier
Désactiver ou permettre de configurer les raccourcis
Ou le raccourci n'est effectif que lorsque le focus est dans le composant sur lequel il s'applique
Le message doit être visible est restitué
Les textes liés par les propriétés aria-labelledby ou aria-describedby font partie des propriétés de l’élément, ils sont donc toujours disponibles, y compris lorsqu’ils sont cachés par CSS avec display:none ou visibility:hidden
Champ obligatoire : format attendu à fournir (a faire de facon global si possible)
Message générique dans le titre de la page : « erreur sur le formulaire » est très suffisant
Dans le message d'erreur on peut donner :
un exemple réel 01/02/23 au lieu du JJ/MM/AAAA, pour une date c'est clairement mieux, mais pour une adresse email c'est moins intéressant
de l'aide à la complétion, pas obligatoire mais mieux
Les exemples de format ne doivent pas être que dans les placeholders car ce n'est pas accessible
Personnaliser les messages d’erreurs natif
L'API Constraint validation permet de personnaliser les messages d’erreurs générés par les type d’input particuliers.
var email = document.getElementById("emailform");
email.addEventListener('invalid', function() {
if (this.value.trim() !== '') {
this.setCustomValidity("Saisie invalide. Exemple valide\n: toto@foobar.com");
}
}, false);
Modification, mises à jour ou récupération des données
Si le formulaire
modifie ou supprime des données ;
ou transmet des données sensibles, réponses à un examen ;
a des conséquences financières, juridiques.
L'utilisateurs doit pouvoir
vérifier, modifier ou annuler les saisies avant envoie du formulaire ;
ou il existe un mécanisme de confirmation explicite via une case à cocher ou une étape supplémentaire.
Pour les formulaires de signature électronique, type mandat SEPA, la modification peut être désactivé comme le but de ces formulaires est de valider les données saisies précédemment
Champs avec saisi automatique
Pour les champs qui collectent des informations personnelles sur l’utilisateur, la nature du champ (finalité) est déterminable à partir du code (attributs/propriétés).
honorific-prefix - Abréviation, civilité ou titre ;
given-name - Prénom ;
additional-name - Prénoms additionnels ;
family-name - Nom de famille ;
honorific-suffix - Suffixe honorifique ;
nickname - Surnom, diminutif ;
organization-title - Fonction, intitulé de poste ;
username - Nom d’utilisateur ;
new-password - Nouveau mot de passe (par exemple, lors de la création d’un compte ou d’un changement de mot de passe) ;
current-password - Mot de passe actuel pour le compte identifié par le champ username (par exemple, lors d’une connexion) ;
organization - Nom de l’organisation correspondant à la personne, à l’adresse ou à l’information de contact dans les autres champs associés avec ce champ ;
address-line1 - Adresse postale (une ligne par champ, ligne 1) ;
address-line2 - Adresse postale (une ligne par champ, ligne 2) ;
address-line3 - Adresse postale (une ligne par champ, ligne 3) ;
address-level4 - Le niveau administratif le plus détaillé, pour les adresses pourvues de quatre niveaux administratifs ;
address-level3 - Le troisième niveau administratif, pour les adresses pourvues d’au moins trois niveaux administratifs ;
address-level2 - Le deuxième niveau administratif, pour les adresses pourvues d’au moins deux niveaux administratifs ;
address-level1 - Le plus large niveau administratif d’une adresse, c’est-à-dire la province dans laquelle se trouve la localité ;
country - Code pays ;
country-name - Nom de pays ;
postal-code - Code postal, code CEDEX (si le CEDEX est présent, ajouter “CEDEX”, et ce qui le suit doit être ajouté dans le champ address-level2) ;
cc-name - Nom complet figurant sur le moyen de paiement ;
cc-given-name - Prénom figurant sur le moyen de paiement ;
cc-additional-name - Prénoms additionnels figurant sur le moyen de paiement cc-family-name - Nom de famille figurant sur le moyen de paiement ;
cc-number - Code identifiant le moyen de paiement (e.g., un numéro de carte bancaire) ;
cc-exp - Date d’expiration du moyen de paiement ;
cc-exp-month - Le mois de la date d’expiration du moyen de paiement ;
cc-exp-year - L’année de la date d’expiration du moyen de paiement ;
cc-csc - Code de sécurité du moyen de paiement (also known as the card security code (CSC), card validation code (CVC), card verification value (CVV), signature panel code (SPC), credit card ID (CCID), etc.) ;
cc-type - Type de moyen de paiement (e.g. Visa) ;
transaction-currency - La devise qui a la préférence de l’utilisateur lors d’une transaction ;
transaction-amount - Le montant qui a la préférence de l’utilisateur lors d’une transaction (e.g., en réponse à une enchère ou à un prix soldé) ;
language - Langue préférée ;
bday - Date d’anniversaire ;
bday-day - Le jour de la date d’anniversaire ;
bday-month - Le mois de la date d’anniversaire ;
bday-year - L’année de la date d’anniversaire ;
sex - Identité sexuelle ;
url - Page d’accueil ou une autre page Web correspondant à l’organisation, la personne, l’adresse ou à l’information de contact dans les autres champs associés avec ce champ ;
photo - Photographie, icône ou une autre image correspondant à l’organisation, la personne, l’adresse ou à l’information de contact dans les autres champs associés avec ce champ ;
tel - Numéro de téléphone complet, y compris le code pays ;
tel-country-code - Code pays du numéro de téléphone ;
tel-national - Numéro de téléphone sans la partie code pays, avec un préfixe interne au pays, s’il y a lieu ;
tel-area-code - Indicatif régional du numéro de téléphone, avec un préfixe interne au pays, s’il y a lieu ;
tel-local - Numéro de téléphone sans la partie code pays ni l’indicatif régional ;
tel-local-prefix - La première partie du composant du numéro de téléphone qui suit l’indicatif régional, lorsque ce composant est scindé en deux parties ;
tel-local-suffix - La seconde partie du composant du numéro de téléphone qui suit l’indicatif régional, lorsque ce composant est scindé en deux parties ;
tel-extension - Numéro de téléphone d’un poste interne ;
email - Adresse électronique ;
impp - URL correspondant d’un protocole de messagerie instantanée (par exemple, "aim:goim?screenname=example" ou "xmpp:fred@example.net").
Depuis RGAA 4 : tailles de polices en px autorisées. (non conseillé car les tailles de police en pixels ne permettent pas d’agrandir les textes sur certains navigateurs)
Quand un site propose un dispositif d’agrandissement des caractères (A+/A-), c'est cette fonctionnalité qui sera soumise à la conformité, mieux vaut laisser les navigateurs gérés !
Texte lisible avec agrandissement jusqu'à 200% :
Zoom texte :Firefox : « Affichage > Zoom texte seul » : agrandissement à 200% (Ctrl + 6 fois)
Ou utilisation des fonctions de zoom du navigateur (zoom graphique)
Linéarisation des contenus
Les contenus doivent rester présents, lisibles et utilisables sans utilisation des deux ascenseurs :
Consultation verticale : 320px de large minimum
Consultation horizontale : 256px de hauteur minimum
Les tableaux ont le droit d'être affiché avec un scroll
Adaptation des textes
Les textes doivent rester lisibles dans les conditions suivantes :
interlignage augmenté de 1,5 fois la taille de police ;
marge suivante : 2 fois la taille de police
espacement des lettres : 0,12 fois la taille de la police
espacement des mots : 0,16 fois la taille de la police
Contenus d’introduction, peut contenir des titres, de la navigation
Une balise <header> peux être utiliser dans une <section>
<main>
Unique ou une seule balise est visible simultanément
<section>≠<div>
une <div> n'a pas de valeur sémantique
une <section> avec titre aria-label ou aria-labelledby : région déclarée dans les plans des lecteurs d'écran, ne pas en abusé car cela alourdit la page et complexifié inutilement le plan
<nav>
Réservé aux zones de navigation principale et secondaire
Les navigations secondaires comprennent :
menu de sous-rubrique
navigation dans les collections de pages
navigation dans les résultats de recherche
le Fil d'ariane
les liens d’évitement
Ne pas utiliser <nav> pour les listes de lien !
Le bouton "burger" doit être inclus dans l'élément <nav>
La navigation principale peut inclure le bouton burger et être inclus dans la même balise <nav>
Ou en cas de plusieurs <nav>, le bouton doit être dans une balise <nav> seul
<aside>
Optionnel
Contenus indirectement reliés au contenu principal, peuvent être consultés de manière indépendante
<footer>
Obligatoire pour le pied de page du document
Contenus de pied de page, d’articles ou de contenus regroupés par <section>
Titrage du contenu
Hiérarchie cohérente, de h1 à h6
Dans la version 4 du RGAA, la règle est plus souple
il peux y avoir des saut entre les titre h2h4
ne pas avoir de h1 peut etre conforme dans certain cas
avoir plusieurs h1 c'est conforme aussi
Uniquement les titres nécessaires, un texte ne gras n'est pas un titre
role="heading" aria-level="[level]"
Permet de déclarer un titrage aux technologies d'assistance sans utiliser les balises sémantique, à utiliser en cas de conflit avec les équipe SEO par exemple
Liste de définition : dl dt/dd
C'est assez lourd pour les lecteurs d'écran, préféré de simples listes sauf pour la réalisation d'un glossaire
Pour une légende d'un schéma, une liste non ordonnée est plus adaptée
Un équivalant aux balises sémantiques :
Si pas de possibilité de faire une liste sémantique :
role="list" équivalent à un ul
role="listitem" équivalent à un li
<div role="list">
<div role="listitem">Favoriser l’information…</div>
<div role="listitem">Permettre aux personnes…</div>
</div>
Les suites de liens doivent être structurées avec des listes.
Citations
Citation en ligne<q>, mal restitué par NVDA préféré la citation de bloc
Citation en bloc<blockquote>
<blockquote>
<p>Aimer, ce n'est pas se regarder l'un l'autre, c'est regarder ensemble dans la même direction.</p>
<cite>Antoine De Saint-Exupéry</cite>
</blockquote>
Cadres iframe et frame
Contenu pertinent, ajouté un title
<iframe title="Publicité"></iframe>
Pas de titre dans le cas de cadres techniques (Google Analytics, etc.) mais cacher avec aria-hidden="true".
Ou une alternative accessible
Avec un datepicker non conforme, l'ajout d'un input saisissable rend le composant conforme
(attention à ne pas être piégé dans une boucle de focus)
Rôle pertinent
Lien : changement d'URL
Bouton ou implémentation du motif ARIA button : action, événement, fonction JavaScript etc...
Même pour les single page application ;
Un composant qui déclenche l'ouverture d'une page ou d'un onglet doit être un lien même si ce sont des actions Javascript
<a role="link" tabindex="0" onclick="myFunction()"></a>
<!-- ou -->
<a href="#" onclick="myFunction()"></a>
État et changements d'état
État sélectionné d'un bouton
<button aria-pressed="false">Filtrer par nom</button>
<button aria-pressed="true">Filtrer par nom</button>
Composant inactif, on utilisera l'attribut disabled
L'attribut aria-expanded="true/false" est défini sur un élément pour indiquer si un contrôle est développé
Sur un groupe d'éléments liés, indiquer à l'utilisateur qu'il s'agit de l'élément actuel aria-current
Lorsqu'un composant change d'état, que sa fonctionnalité est modifiée, on peut également passer par un changement de nom accessible ou de description (par exemple, la transformation d'un bouton lecture en pause, on vérifiera que l'intitulé a bien été modifié pour retranscrire la fonctionnalité qui sera déclenchée à la prochaine activation du bouton, pas uniquement l'apparence visuelle).
un texte explicatif précédant le changement de contexte
Ne pas faire de rechargement de page, d'une partie ou de changement de page par défaut, mettre un bouton pour faire l'action
un bouton ou un lien explicite
Message de statut
Informer les technologies d’assistance des messages d’alerte de confirmation ou de statut, sans déplacer le focus de l'utilisateur.
Ne pas en abuser, parfois contre-productif
Si le focus est déplacé sur le message ok/Ko général alors pas besoin de mettre le role="alert" ou si la page se recharge et que le bloc est dans le DOM
Dans tous les cas on fait une reprise de focus.
En cas d'erreur, ont se déplace l'utilisateur sur le premier champ en erreur/ ou message de confirmation + le mieux et de mettre aussi un message dans le titre de la page
aria-live="assertive" : le contenu est vocalisé immédiatement
aria-live="polite" : le contenu est vocalisé dès que l'utilisateur est disponible
aria-atomic="true" restitue tout, à ne pas utiliser dans un tchat par exemple
aria-atomic="false" restitue uniquement le dernier ajout
Messages d'erreurs
— Haute priorité
role="alert"
Le "alert" est restituée correctement
<p role="alert">Ceci est une alerte ajoutée dynamiquement</p>
Méthode alternative :
aria-live="assertive"
et aria-atomic="true"
Messages d'informations
— Attends que ce soit son tour pour être vocalisé
Pas très fiable coté restitution, préféré le "alert" si ça beug
<p role="status">Ceci est un status ajouté dynamiquement</p>
Méthode alternative :
aria-live="polite"
et aria-atomic="true"
<p><span id="myLiveRegion1" aria-live="polite">Mais je sais rester polie</span></p>
Messages de notifiactions
role="log"
Méthode alternative :
aria-live="polite"
et aria-atomic="false"
Messages d’attente
role="progressbar"
Seulement pour des tâches qui prennent beaucoup de temps.
Motif de conception (design pattern) : décrit structure, rôles et propriétés et comportement d’un composant JavaScript(widget).
ARIA authoring practices
Environnement de test
Il est nécessaire de réaliser des tests de restitution et d'utilisation avec les lecteurs d'écran de la base de référence.
Guide sur les lecteurs d'écran.
Environnement de bureau
Technologie d’assistance
Navigateur
NVDA (dernière version)
Firefox
JAWS (version précédente)
Firefox
VoiceOver (dernière version)
Safari
Environnement mobile
Système
Technologie d’assistance
Navigateur
iOS
VoiceOver (dernière version)
Safari
Android
Talkback (dernière version)
Chrome
Pour tester un site web sur un terminal mobile, l’environnement de test devra comporter une des deux combinaisons (iOS ou Android). À noter que dans le cas d’un site web mobile grand public, il est fortement conseillé de tester dans les deux environnements.
L'intitulé permet de comprendre ou le lien va nous emmener
ou
Le contexte le permet (Titre, paragraphe et phrase précédente)
«la suite», si le texte est seul, ce n'est pas explicite
«la suite», précédé d'un article (titre ou paragraphe), c'est conforme
Mais on peut améliorer l'intitulé !
Si un lien n'est pas explicite pour le voyant, ce n'est pas une faute, mais plutôt un problème d'UX
Le nom visible doit être contenu dans le nom accessible
Pour expliciter un intitulé :
via un texte caché en sr-only : non voyant uniquement
title : tous le monde
aria-label ou aria-labelledby : pas natif donc pas pour tout le monde
aria-label
Doit comporter l'intitulé du lien
<a href="#url" aria-label="Retour Accueil du site">Retour</a>
aria-label surcharge l'intitulé, c'est pour ça que l'on doit mettre l'intitulé dedans
title
Le title sera restitué par les lecteurs d'écran et à la souris
Par défaut le title est restitué en plus de l'intitulé, mais certain le configure pour etre que seul le title soit restitué
Doit comporter l'intitulé du lien
<a href="#url" title="Retour Accueil du site">Retour</a>
Liens identiques
Des liens dons l'intitulé et le contexte sont identiques et ont la même destination
Si ce n'est pas le cas :
Ajouter un titre pour préciser la différence entre les liens
Changer le contexte
Liens vides
Pas de lien vides
Attention au lien avec des images, aux polices d'icônes où les mise en forme en CSS uniquement (content:"")
Mettre un alt sur les images liens
<a href="#lien">
<img alt="intitule">
</a>
Ajouter un aria-label ou aria-labelledby sur le lien si besoin, utilisé si possible les propriétés natives
Même si leur utilisation pour faire de la mise en forme n'est pas interdite cela n'est pas conseillée
Si c'est tout de même utilisé pour faire de la mise en en forme, il ne faut pas utiliser des balises ou d’attributs de tableaux de données : <th><thead><tfoot><caption>scopeheaderscolgroupaxisrole="columnheader"role="rowheader"
role="presentation" sur la balise table
Cette propriété supprime la sémantique du tableau, penser à redonner de la structure aux textes (titres, paragraphes, listes ...) dans ces cas.
Si la propriété summary="" est présente (HTML4), videz la !
Déclaration des entêtes<th scope="[col|row]">
Permets d'indiquer la direction de la cellule d'entête
Le scope est obligatoire si plusieurs entré
<table>
<caption>Parc et fréquentation des autres hébergements collectifs touristiques en 2018</caption>
<tr>
<th scope="col">Type d’hébergement professionnel</th>
<th scope="col">Nombre d’établissements</th>
[...]
</tr>
<tr>
<td>Résidences de tourisme</td>
<td>2 426</td>
[...]
</tr>
</table>
Équivalents ARIA
Tableau : role="table"
Titre : aria-label="Nom du tableau" ou aria-labelledby="id_titre"
Entêtes de colonne : role="columnheader"
Entêtes de rangée : role="rowheader"
Cellules : role="cell"
<p id="titre">Parc et fréquentation des autres hébergements collectifs touristiques en 2018</p>
<div role="table" aria-labelledby="titre">
<div role="row">
<div role="columnheader">Type d’hébergement professionnel</div>
<div role="columnheader">Nombre d’établissements</div>
[...]
</div>
<div role="row">
<div role="cell">Résidences de tourisme</div>
<div role="cell">2 426</div>
[...]
</div>
</div>
Tableaux complexes
Un tableau est complexe quand il contient plus d'une ligne d'entête (col ou row) ou s'il y a des fusions cellule
Titre et résumé de l’organisation du tableau
Dans le caption ou via le aria-labelledby="", mettre le titre + un résumé de l’organisation du tableau (HTML5)
Pour le résumé pour les versions précédentes de HTML, le mettre dans summary=""(HTML4)
<caption>
Figure 2 - Répartition des déchets non dangereux non minéraux hors boues de l’industrie
manufacturière par type en 2016
<span class="sr-only">
Les industries agroalimentaires (IAA) et les industries manufacturières (hors IAA)
sont présentées sur 2 colonnes, avec, pour chacune d’elles la quantité en milliers
de tonnes le pourcentage. Une troisième colonne présente le total des deux industries,
en milliers de tonnes et en pourcentage.
</span>
</caption>
Le sommaire, pouvant être utile à d'autres usagers que ceux utilisant un lecteur d'écran, il est préférable de le mettre dans un bloc qui s'affiche via un bouton de type afficher / masquer
<caption>
Figure 2 - Répartition des déchets non dangereux non minéraux hors boues de l’industrie
manufacturière par type en 2016
<button type="button" aria-expanded="false">Résumé de l’organisation du tableau</button>
<span class="hide">
Les industries agroalimentaires (IAA) et les industries manufacturières (hors IAA)
sont présentées sur 2 colonnes, avec, pour chacune d’elles la quantité en milliers
de tonnes le pourcentage. Une troisième colonne présente le total des deux industries,
en milliers de tonnes et en pourcentage.
</span>
</caption>
Version alternative
Pour les tableaux complexes préférés une alternative car cela inclura tout le monde et non seulement les lecteurs d'écran (et c'est plus simple à développer !)
Passage en mode liste par exemple
On affiche un bouton pour afficher la version alternative
Plus besoin de mettre le résumé et header s'il y a une alternative
Cellules d’en-têtes
Identifier les cellules d’en-têtes via un attribut id et lier les cellules de données via l’attribut headers.
Commme aria-label et aria-labelledby ne sont exploités que par les lecteurs d’écrans.
La meilleure solution est de proposer une alternative (modal, nouvelle page ou afficher/masquer)
Mettre un alt trés général puis le bouton «lire la description détaillée de l'infographie» par exemple
<img src="img.png" alt="infographie" />
<a href="description.html">Description détaillée de l'infographie</a>
<img src="img.png" alt="infographie" />
<button aria-expanded="false">Description détaillée de l'infographie</button>
Image captcha
L’alternative de l’image doit permettre d’identifier la nature de l’image
<img src="" alt="Code de confirmation à saisir"/>
Proposer une alternative
Captcha sonore; pas idéal, le son peut être dangereux pour certaines typologies
Captcha de logique; pas conseiller car problématique pour certaines typologies
Envoi du code par email/SMS; Recommander si possible car plus lourd techniquement
Le captcha de google est conforme !
Texte en image
Interdit sauf pour les logos
ou proposer un mécanisme de remplacement :
Déclencher par l'utilisateur via une option accessibilité
via un plugin
Images légendées
Légende : texte adjacent à une image
Si un alt est renseigné, il faudrat reporter son contenu dans le aria-label et dans la figcaption
<figure role="group|figure" aria-label="alt-image Légende de l’image">
<img src="…" alt="alt-image" />
<figcaption>
alt-image Légende de l’image
</figcaption>
</figure>
<figure role="group|figure" aria-label="Légende de l’image">
<img src="…" alt="" />
<figcaption>
Légende de l’image
</figcaption>
</figure>
Si un lien est présent dans le figcaption, reporté unique son intitulé dans le aria-label
13 décembre 2006 : Convention relative aux droits des personnes handicapées de l’ONU
Signé par tous les États membres dons la France (le 18 février 2010)
Incapacité physique, mentales, intellectuelle ou sensoriel
C'est le manque d'adaptation qui crée la situation de handicap
Différents types de handicaps physique et sensoriel
Visuel (contraste, tache, vision)
Cognitif (décodage, DYS)
Physique
Polyhandicap : multiple handicap
En accessibilité on ne cible pas par type de handicap (car il y en trop), mais par besoin
L'universalité inclut l'accessibilité.
Le W3C ce veut Universalité : matériel, logiciel, infra, langue, culture, localisation et aptitudes physique ou mentale
Accessibilité c'est différent du référencement et de la performance, c'est même parfois contre-productif
Les personnes en situation de handicap n'ont pas de possibilité de résoudre leur problème À ne pas confondre avec le handicap situationnel qui peut être résolu sans aide, par exemple si on est dans un milieu trop ensoleillé ou dans un véhicule qui bouge
Pourquoi faire de l'accessibilité
Le numérique, c'est une promesse d'inclusion
Faire des choses qui n'étaient pas faisables en autonomie
Parfois la seule méthode pour communiquer
Parler des personnes en situation de handicap
Respect de leur droit
Ne pas parler de «ça sert à tout le monde», car ils vont penser que c'est de l'amélioration alors que l'accessibilité entraine des contraintes
Exemple de besoin
Navigation clavier (par forcement clavier dalleur, ça peut être des boutons au niveau de la tete)
Uniquement a la souris : dispositif qui déplace le curseur (eyes tracking pa exemple
Description élément visuel (aveugle, mal voyante)
Description audio (sourd, malentendant)
Naviguer à son rythme, maitrise son environnement (trouble psychique)
Personnalise l'affichage (couleur, taille police, police etc.
Perte acuité visuel, audition, mental
Appréhension technologique, peur de casser, faire mal
Technologie d'assistance, quel exemple : Plage braille, clavier mono manuel, headstick, eye-tracking, clavier visuel, lecteur écran, contacteur au souffle, trackball, contrôle par la pensée (à l'état de recherche) etc
Norme et référentiel
Norme
UAAG pour les agents utilisateurs (navigateur, lecteur d'écran) : affichage par le navigateur de l’info-bulle d’un lien à la souris et au clavier.
ATAG pour les outils d’édition de contenus (CMS) : alternatives aux boutons de mise en forme, production de contenus conformes.
WCAG pour les contenus web : alternatives aux éléments graphiques.
L’API ARIA pour les composants riches.
Version du WCAG :
Avant la 2.1, pour les non voyant essentiellement
version 2.1 : basse vision, troubles cognitifs, difficultés d’apprentissage et DYS
version 2.2 : prévue pour début 2023
Trois niveaux d'accessibilité WCAG
A : Accès à l’information et d’une utilisabilité de base : 80% des critères.
AA : Améliorations et la prise en charge de contextes particuliers (les couleur par exemple)
AAA : Ne peut pas s'appliquer à tous les types de contenus et de situations
En France, le niveau légal requis est le double A (AA) : pour être conforme il faut que tous les critères A et AA applicable du référentiel, soient conformes.
Il n’est pas recommandé de faire de la conformité au niveau AAA une politique générale pour des sites entiers parce qu’il n’est pas possible de satisfaire tous les critères de succès de niveau AAA pour certains contenus.
En France on a créé un révérenciel; donner une méthode opérationnelle pour vérifier que les WCAG sont bien respectées sans avoir à tout lire (rédaction indépendantes des technologies et souvent abstraites)
« On entend par “aménagement raisonnable” les modifications et ajustements nécessaires et appropriés n’imposant pas de charge disproportionnée ou indue apportés, en fonction des besoins dans une situation donnée, pour assurer aux personnes handicapées la jouissance ou l’exercice, sur la base de l’égalité avec les autres, de tous les droits de l’homme et de toutes les libertés fondamentales. »
Article 2 de la CRDPH.
En d'autre termes, en cas de dérogation sur un cas particulier, il faudrait fournir tous de même une alternative
Sauf si cette alternative représente elle aussi une charge disproportionnée
Alors il faut pouvoir permettre à l'utilisateur de faire un signalement et de lui répondre dans un délai raisonnable
Refus d'aménagement raisonnable est puni par l'article 225-2 du Code pénal
La loi prévoit entre 3 et 5 ans d'emprisonnement et entre 45 000 et 75 000 euros d'amende.
Selon le motif de conception du W3C, lorsqu'une boîte de dialogue s'ouvre, le focus doit déplacer vers un élément à l'intérieur de la boîte de dialogue
Tab :
Déplace le focus sur le prochain élément tabulable de la boîte de dialogue.
Si le focus est sur le dernier élément tabulable de la boîte de dialogue, il est déplacé vers le premier élément tabulable de la boîte de dialogue.
Shift + Tab :
Déplace le focus sur l'élément tabulable précédent dans la boîte de dialogue.
Si le focus est sur le premier élément tabbable de la boîte de dialogue, il est déplacé vers le dernier élément tabbable de la boîte de dialogue.
Echap : Ferme la boîte de dialogue.
Code
Le code suivant est largement inspiré de celui Yogesh Chavan avec quelques optimisations pour une meilleur re-utilisation
function trapFocusIn(modal) {
modal.addEventListener("keydown", function (e) {
let isTabPressed = e.key === "Tab" || e.keyCode === 9;
if (!isTabPressed) {
return;
}
let focusableElement = modal.querySelectorAll(
'button, [href], input, select, textarea, [tabindex]:not([tabindex="-1"])'
);
let firstFocusableElement = focusableElement[0];
let lastFocusableElement = focusableElement[focusableElement.length - 1];
if (e.shiftKey) {
// if shift key pressed for shift + tab combination
if (document.activeElement === firstFocusableElement) {
lastFocusableElement.focus(); // add focus for the last focusable element
e.preventDefault();
}
} else {
// if tab key is pressed
if (document.activeElement === lastFocusableElement) {
// if focused has reached to last focusable element then focus first focusable element after pressing tab
firstFocusableElement.focus(); // add focus for the first focusable element
e.preventDefault();
}
}
});
}
Mon premier meuble sur mesure.
J'avais réalisé un tableau qui calculait automatiquement la taille des planches selon les épaisseurs que je saisiser comme la taille du meuble était fixe
Luminaire
— 21 novembre 2021
Impossible de mettre une suspension au-dessus de ma table à manger sans faire de gros travaux et en réalisant quelque chose de propre
Un lampadaire est idéal pour ce genre de situation mais leurs prix sont exorbitants si l'on veut quelque chose d'esthétique
Horloge Lego
— 18 décembre 2021
Une commande de ma belle-mère qui voulait que je lui réalisasse quelque chose en Lego.
Il est difficile de se procurer une liste de pièces définies (hors énorme quantité), je suis partis sur quelque chose d'assez abstrait et artistique, réalisable avec une boîte de base que l'on trouve facilement.
Ma belle-mère étant dingue d'horloge, il était évident que je lui en réalise une
Bougoir
— 01 janvier 2022
Réalisé à partir à partir d'une palette en bois
Je voulais faire une forme géométrique, mais ce fut impossible à faire avec les outils à ma disposition.
J'ai fini par arrondir les angles, le résultat reste sympa même si pas du tout symétrique comme il était alors prévu
Cuisine enfant
— 04 septembre 2022
Aménagement toilette
— 16 septembre 2022
Lit étagère
— 8 octobre 2022
Lampe vertical
— 15 octobre 2022
Miroir (WIP)
— 19 octobre 2022
Concept de deux miroirs juxtaposés, l'un avec un cadre le plus propre possible et l'autre réalisé a à base de chutes de bois de découpe précédente
Reste a poncé, huilé, assemblé....
Heroku : Plate-forme d'applications en ligne
À partir du 28 novembre 2022, les ressources gratuites Heroku Dynos, Heroku Postgres et Heroku Data for Redis® ne seront plus disponibles.
De la création du projet à sa mise en production
Créer un projet Strapi V4 :
Dans un terminal à l'emplacement du dossier de projet désiré
yarn create strapi-app dossier-du-projet --quickstart
Une fois l'installation terminée, le navigateur ouvre automatiquement un nouvel onglet. Il faut enregistrer le premier utilisateur qui sera le super admin
Commit/push le projet sur GitHub
Allez sur Heroku.com, se connecté,
Cliquez sur "create a new app"
Entrez le nom de votre application (Heroku vous dira si le nom est disponible).
Choisissez GitHub, puis recherchez le dépôt que vous souhaitez déployer
Activez les déploiements automatiques, puis déployer
Si vous avez une erreur, pas de panique, on continue !
Utiliser l'add-on Postgres de Heroku comme base de données
Cliquez sur le menu "Ressources"
puis dans la barre de recherche "Heroku Postgres"
Submit Order Form
menu "Settings"
En cliquant sur "Reveal Config Vars" vous afficherez uniquement DATABASE_URL.
Voici à quoi devrait ressembler la syntaxe complète postgres://{user}:{password}@{hostname}:{port}/{database-name}
Ajouter les "key value" selon votre DATABASE_URL postgres://aaaaaaaa:bbbbbbbbbbbbbbbbbbbbbbbbbbbb@ccc-cc-ccc-cc:dddd/eeeeeee
KEY
VALUE
DATABASE_USERNAME
aaaaaaaa
DATABASE_PASSWORD
bbbbbbbbbbbbbbbbbbbbbbbbbbb
DATABASE_HOST
ccc-cc-ccc-cc
DATABASE_PORT
dddd
DATABASE_AUTHENTICATION_DATABASE
eeeeeee
DATABASE_NAME
eeeeeee
et à la racine de votre projet, dans le fichier .env vous trouveriez quatre autres jeux de "key value" à ajouter à la suite
KEY
VALUE
ADMIN_JWT_SECRET
fffffffffff/fffff==
API_TOKEN_SALT
ggggg/ggggggggggg==
APP_KEYS
hhh/hhhh==,hhh/hhhh==,hhh/hhhh==,hhh/hhhh==,
JWT_SECRET
iiiiiiiiiiiiiiiiiiiiiiiiiiiiiiii==
Ajoutez les variables d'environnement à Strapi
Dans le dossier ./Config de votre projet, créez les sous-dossier env/production puis les fichiers database.js et server.js à l'intérieur, ajoutez-y les codes suivant
Renommez le «Repository name», peut être fait plus tard dans les réglages de Github
Cliquez sur le bouton «Save & Deploy»
Le site se déploie, cela ne prend qu'une dizaine de seconde.
L'URL passe en vert quand c'est terminé avec plus bas la mention «Your site is deployed ✓»
Un des deux mails que vous recevraient vous invitera à crer le premier utilisateur sur le CMS.
Cliquez sur le lien dans le mail
Vous allez être redirigé sur votre site, ajouter à la fin de l'URL «/admin»
Vous êtes inviter à saisir un mot de passe sinon saisir votre adresse mail et cliquez sur le lien «Forgot password?»
Developpement
Mise en place
Clone le dépôt {site} sur Github
Installer le projet en mettant dans la console npm install @11ty/eleventy
Lancer le build : npx @11ty/eleventy --serve
Accédé au CMS
Allez dans le fichier : {site}\admin\config.yml
Ajoutez à la ligne 9
# Please run "npx netlify-cms-proxy-server" for local backend
local_backend: true
Ma collection de Manga grandissant sans cesse.
Il me venait difficile de suivre à quel tome de quelle série j'en étais.
Mon system de liste dans un carnet était à bout de souffle
J'ai donc entrepris de faire un mini-site Liste de lecture à la place.
Initialement «Mangathèque», il se diversifie au fil des années (Comics, Roman, Bande Dessinée), même si la grande majorité des ouvrages référencer reste des mangas
Choix d’affichage : séries en cours, terminées ou les deux par ordre alphabétique
2009 : Version 2
Design plus chaleureux rappelant un château japonnais
Ajout d’un favicon pour les navigateur web :
Ajout du choix d’affichage séries abandonnées et du classement par préférence (notation sur 6)
Une seconde version ajoutera un abécédaire au debut de chaque lettre en guise d’intercalaire et un lien vers la page otions
2010 : Version 3
Réorganisation de l’affichage
Ajout de plus de statistiques
Optimisation des fonctions
Correction des beugs
2011 : Version 4
Nouveau design
Agrandissement des zones cliquables de l’abécédaire
Réduction des informations visibles par défaut
La notation passe à une note sur 10, avec de nouveaux smiley pour les représenter
Ajout d’une icon iPhone personnalisé
Ajout d’un system accordéon qui affiche des informations supplémentaires (auteur, éditeur, résumé et avis si renseigné.) Selon le type d’affichage en cours. L’index étant toujours la liste des mangas en cours les seules informations supplémentaires sont l’auteur et l’éditeur pour ne pas alourdir la page. Sur celle qui affiche tous les mangas, toutes les informations suplémentaires apparaissent.
Fusion de la page Option et Identification
Refonte totale des fonctions, simplification et optimisation pour un rendu plus rapide.
2013 : Version 5
Barre de menu toujours visible
Suppression de l’abécédaire en guise d’intercalaire
Image adapter au écran classique et Retina/HD
Ajout des icons mobile (iphone, windows phone, android ) personnalisé
Favicon :
Suppression de l’accordéon d’information supplémentaire qui était peu utile et qui alourdissez le site
Fusion de la page Option/Identification et de la liste
Utilisation de la librairie Minifield, bien plus légère que jQuery
2022 : Version 6
Nouvelle version avec une approche plus hétéroclite ;
Manga, Comics, Roman, Bande Dessinée etc...
Thème sombre par défaut et un clair en option. La préférence est enregistrée dans le Local Storage
BDD via une feuille de calcul Google
Une animation se joue le temps du chargement des données, mais comme c'est très rapide, on pas le temps d'en profiter !
Affichage du menu via le header ou le footer
Selon la position du clic/tap, le menu s'ouvre du côté (droite/gauche) correspondant et du sens (haut/bas) de manière que le bouton fermé soit le premier accessible.
Il est possible de fermer le menu également en cliquant à l'extérieur du menu
Option qui permet d'avoir une interface et un menu avec les labels
Ajout des icons mobile (iphone, windows phone, android ) personnalisé
Tous les deux ans en moyenne, je réalise une nouvelle version de mon portfolio.
Le site étant en lui-même le projet le plus récent que j'ai à présenter, il me permet surtout d'expérimenter des méthodologies, d'appliquer des idées de conception et d'utiliser des technologies.
Ce qui ma pousser à faire une nouvelle version, c'est le résultat que j'ai obtenu sur Website Carbon Calculator et comme cela faisait un moment que je vois passer des articles sur les générateurs de site statique, je me suis dit que l'heure était venu
A faire
Image
Compression
Ajouter les images en webp article
Réduction des images à partir d'image retina
Conversion en format « webP » et « avif »
Tag
11 janvier 2022
Mise à jour des informations de licence et d'auteur sur package.json du site
Correction du design des liens suite au passage du site en https://
Ajout d'un meta description par défaut
Ajout d'une Content Security Policy<meta http-equiv="Content-Security-Policy" content="default-src 'self';"> annulé car cela désactive les styles et scripts inline
Ajout de "créer un site statique" au recueil (wip)
20 avril 2021
Rédaction suite et fin : site perso
18 avril 2021
Changement de style de base des listes non ordonnée
Modification graisse style de base
Ajout style de lien secondaire
Ajout style liste sommaire
Script pour scroll horizontalement avec un molette normal
Suite de la rédaction : site perso
Repasse styleguide
17 avril 2021
Rédaction en cours : historique portfolio site perso
Ajout d'un composant qui scroll horizontalement
16 avril 2021
Amélioration du rendu des images en pixel art
Ajout des vignettes de concours
Ajout projet wet
15 avril 2021
Optimisation des images de la mosaïque
13 avril 2021
Test image responsive
11 avril 2021
Changement de la mosaïque :
Améliore l'affichage en mobile
Diminution du code
Changement d'aspect au survol
10 avril 2021
Repasse rédactionnel sur Metalfest et Kirby
Rédaction et mise en forme pour Radiophonix, Aux délices d'Ahmed, Formz et Faire part mariage
Rédaction et mise en forme en cours pour Pixel Art
05 avril 2021
Design citation
Couleur de fond clair pour les images sombre dans le thème sombre
Ajout de 2 tailles pour faire des mises en pages en large
Ajout intro facultatif au macro du styleguide
Rédaction et mise en forme : Cuyz, Kirby, Norder's Meat
21 mars 2021
Script machine à écrire sur la page d'accueil uniquement
Mise en place lien d'évitement
Repasse rédactionnel sur la réalisation t-shirt Metalfest
20 mars 2021
Ajout des pages de réalisation pour la mosaïque, contenu rédiger
Simplification de l'organisation des couleurs
Mise en forme des éléments de mosaïques s'il n'y a pas d'image
Dynamisation de la taille d'un élément de mosaïque
Mise en place du script machine à écrire
17 mars 2021
Article "intitulé de poste" + lien caché dans le header
Ajout d'un mailto crypté pour le contact au lieu d'une page avec un formulaire.
Ajoute "↗" apres les liens ne provenant pas pierre.tl, ptl9.netlify.app ou étant local.
C'est pas idéal mais ca fonctionne pour les pages écrite en markdown
10 mars 2021
Réorganisation des couleurs
Ajout des styles pour le focus des liens/label
Ajout de la mosaïque des realisation (en cours)
Ajustement des listes non ordonnée
Ajout d'élément dans la liste des choses à faire
Ajout de 3 réalisations pour la mosaïque (rédaction et dynamisation en cours)
Ajout de metadata, amélioration du layout standard, ajout d'une todolist, styleguide, repasse sur les styles
26 février 2021
Ajout du journal de bord, repasse design menu
25 février 2021
Dynamisation des menus en Nunjucks et réorganisation des fichiers, merci Bryan Robinson
Dans mes sources d'inspiration je suis tombée sur un site qui afficher un texte et le corriger façon machine à écrire j'ai beaucoup aimé le style ne pas la façon de faire donc j'ai recréé un code JavaScript permettant de faire le même résultat mettre un un codeoen. Je compte l'utiliser pour l'intitulé de mon job qui est quelque chose de très controversée dans le métier français faire un lien vers l'article en question
Anciennement Mangathèque, pour sa version sixième version j'ai envie de faire plein de changement technique et assez peu finalement d'évolution fonctionnelle
Objectif
Fini MySQL et PHP, on passe à des données provenant d'un Google Sheet
Redesign dans un ton plus moderne et simpliste, voir les inspirations
Animation du logo avec Animate pour un petit effet Wahoo
Ajout d'une recherche
Inspirations
J'aime beaucoup l'association des couleurs : rouge, blanc, noir, gris
et la grosse illustration du Tori et de la montagne
Google sheet as BDD
Google a modifié quelque chose car les méthodes pour passer un sheet en json ne fonctionnent plus, j'ai tenté pas mal d'outil en ligne qui fait toujours le travail mais sans payer les limites sont trop facilement atteints.
Pour arriver enfin à avoir un résultat basique en Javascript
C'est une première partie mais ça ne sera pas suffisant.
La manipulation du « json » va être coton (me faudrait un dev pour faire ça correctement), donc je vais voir pour contourner le problème avec
listjs comme je veux de toute façon l'utiliser pour la recherche.
La présente checklist se compose de 240 règles. Chacune d’entre elle est discutée de manière
communautaire. La checklist est diffusée sous licence ouverte. Chaque règle contribue à
produire mieux et plus vite de meilleurs sites et applications web.
Le site fournit aux utilisateurs la possibilité de connaître les nouveaux contenus ou
services.
↳Journal de bord
Les informations relatives aux droits de copie et de réutilisation sont disponibles depuis
toutes les pages.
↳Licence
Le code source de chaque page contient une métadonnée qui en décrit le contenu.
↳Utilise en une par défaut si une page n'en a pas de spécifique
Les dates sont présentées dans des formats explicites.
↳Repasse sur toutes les pages
La première occurrence d'une abréviation ou d'un acronyme dans le corps de chaque
page donne accès à sa signification.
↳Tous les jours je me bas contre l'abus d'abréviations et d'acronymes et j'en avais plein dans mon site !
La date de publication des contenus qui le nécessitent est indiquée
↳Ajout de la date des réalisations et recueils sous le titre de page
Un lexique ou un glossaire adapté au public visé explique le vocabulaire sectoriel ou
technique.
↳Non applicable
Les contenus publicitaires ou sponsorisés sont identifiés comme tels.
↳Ni de pub, ni sponso ici
Les conditions de modération des espaces publics sont indiquées.
↳Non applicable
Les contenus ou fichiers destinés à des espaces publics peuvent être vérifiés avant leur
envoi définitif.
↳Non applicable
Les espaces publics proposent au moins un moyen de signaler les abus.
↳Non applicable
Chaque graphique est accompagné de ses données numériques
↳Non applicable
La page des résultats de recherche indique le nombre de résultats, le nombre de pages
de résultats, et le nombre de résultats par page.
↳Fait
Données personnelles
La politique de confidentialité et de respect de la vie privée est disponible depuis toutes
les pages.
↳Deja dans le footer !
La procédure d'accès et de rectification des données personnelles est décrite.
↳Non applicable
La création de compte est possible sans recours à un système d'identification tiers.
↳Non applicable
La création d'un compte est soumise à un processus de confirmation.
↳Non applicable
Le site propose un mécanisme de prévention des usurpations de compte ou d'identité
↳Non applicable
Les comptes ou abonnements ouverts en ligne peuvent être fermés par le même moyen.
↳Non applicable
Si le site propose un espace personnel ou abonné, il est possible de sauvegarder les
contenus personnels.
↳Non applicable
La connexion à tous les services proposés est possible avec les mêmes identifiants
↳Non applicable
Il est possible de se déconnecter des espaces privés.
↳Non applicable
Le site accepte les alias mail contenant le signe +
↳Pas de problème sur le formulaire de contact
Medium down : Les colonnes font 100% et sont espacé de $espace-m Large : La deuxième colonne est de la taille indiqué moins la taille de la gouttière $espace-m
Colonne 1
Colonne 2
<div class="d-flex">
<div class="w-">Largeur du contenu</div>
<div class="w-">Largeur du contenu</div>
</div>
Pagination pour la recherche : utilise listjs.com
Cette recherche impose les classe CSS page, active, disabled et interdit l'utilisation de pagination sinon plus rien ne fonctionne !
Lorem ipsum dolor sit amet, consectetur adipisicing elit. Accusantium ad aperiam cum, dolor eius error et explicabo fugiat harum laudantium minima obcaecati ratione reiciendis sint sit vel vitae voluptas voluptates?
Lorem ipsum dolor sit amet, consectetur adipisicing elit. Accusantium ad aperiam cum, dolor eius error et explicabo fugiat harum laudantium minima obcaecati ratione reiciendis sint sit vel vitae voluptas voluptates?
Lorem ipsum dolor sit amet, consectetur adipisicing elit. Accusantium ad aperiam cum, dolor eius error et explicabo fugiat harum laudantium minima obcaecati ratione reiciendis sint sit vel vitae voluptas voluptates?
Lorsque que j'ai parcourus le net en recherche d'inspiration pour la nouvel version de mon site, je suis tomber sur un site avec un
effet machine à écrire sur un texte.
Utilisation
À ce moment là encore j'hésite sur l'intitulé de mon poste et je me suis dit que c'était une bonne façon de montrer cette indécision
Pour simplifier le header et parce-que mon site n'est pas un simple portfolio sur mon métier, j'ai décidé de le supprimer.
Voici le rendu de ce moment la :
Quand nos amis du numérique Digital grand amateur d'anglicisme ainsi que des commerciaux et recruteurs cherchant plus un intitulé à la mode qu'autre chose, ils se sont tourné sur l'équivalent anglais «Front-End Developper»
Sauf qu'au même moment, pléthore de techno basée sur du Javascript arrive à la mode. Pas mal de développeurs back se reconvertissent sans pour autant toucher une bille en HTML, CSS, qualité, accessibilité, SEO etc…
En 2015 déjà Marie Guillaumet et STPo ouvraient le débat dans le métier francophone sur cette dénomination foireuse, suivi en 2017 par Julie Moyat pour cité que ces trois la.
De nos jours en parcourant les profils Twitter de nombreux professionnel, c'est la véritable foire à la saucisse de l'intitulé 😅
Alors du coup je suis quoi ?
J'ai longuement hésitez avec tous ce que j'ai pus lire sur le sujet.
Je vais rester simple :
Historiquement dans mon boulot cela a toujours été les développeurs et les intégrateurs.
Le rôle de chacun et le qui fait quoi est clair.
À savoir que lorsque je suis allé en mairie pour ajouter mon enfant sur mon livret de famille, seul une profession en français était accepté, oublié donc ce à base de «Front-End» quelque-chose.
Voici dans les grandes lignes ce que je fais tous les jours :
Transformer et interpréter des maquettes graphiques en code
Concevoir et documenter le design system
Concevoir des modules éditoriaux souples, mais qui ne sorte pas de la charte
Faire attention au respect de la charte et harmoniser ses évolutions
Décliner des interfaces
Décorréler le SEO de l'aspect graphique
Dynamiser des composants pour rendre les développeurs plus autonomes
Optimiser les images, les .svg et le code
Critiquer un projet, en argumentant et en faisant des propositions d'amélioration
Apporte des idées et conseil selon un besoin
Faire des recommandations ergonomiques
Faire des croquis et schémas pour illustrer une idée, un parcours
Penser avant tous aux visiteurs (prospect et client)
Bannir les abréviations et les acronymes
Faire du responsif (et non seulement pour les résolutions à la mode)
Faire des sites accessibles et prêcher la bonne parole
Dans le menu Repositories, cliquez sur le bouton New
Label
Saisie
Remarque
Repository name
mon-projet
un nom simple et court
add .gitignore
Node
Choose a license
GNU General Public License v3.0
Open source et qui doit le rester
PhpStorm
— 1
Mettre en place l'environement sur l'IDE
Menu Git
clone
url : coller le lien du dépot
Directory : Ajouter un dossier du nom du projet avec un antislash \mon-projet
Dans le terminal :
npm install -y pour installer npm
npm install -g @11ty/eleventy pour installer eleventy
npx eleventy --serve pour lancer la dev/preview
Coloration syntaxique de Nunjucks
Go to File -> Settings -> Editor -> File Types
Find Twig, it's identical template engine but for PHP and add custom extension. click green plus and type *.nunj. Now all *.nunj files are parsed as Twig so in the end - support Nunjucks.
Eleventy
— 1
Eleventy est un générateur de site statique,
il fonctionne nativement avec de nombreux moteur de template, comme Nunjucks
Exclure de Git le site compilé
Dans le fichier .gitignore, ajouter
# eleventy
_site/
Exclure de la compilation d'Eleventy un dossier/fichier
Modifier ou ajouter le fichier .eleventyignore à la racine du projet
gitpod.io un éditeur de code dans le cloud ou un IDE Online
C'est une version rafraîchissante des éditeurs de code cloud (ou des IDE, si vous voulez) qui vise à garder votre code toujours testé et à jour. En d'autres termes, il est profondément intégré à GitHub et chaque fois que vous ajoutez du code, il exécute vos tests et vos pipelines CI / CD pour s'assurer que le code est toujours à 100% d'intégrité. Vaut le détour si vous aimez l'expérience VSCode et que vous voulez quelque chose qui prend en charge tous les principaux langages et frameworks back-end / front-end (Django, Rails, Revel, vous l'appelez).
Lorem ipsum dolor sit amet, consectetur adipisicing elit. Accusantium ad aperiam cum, dolor eius error et explicabo fugiat harum laudantium minima obcaecati ratione reiciendis sint sit vel vitae voluptas voluptates?
Lorem ipsum dolor sit amet, consectetur adipisicing elit. Accusantium ad aperiam cum, dolor eius error et explicabo fugiat harum laudantium minima obcaecati ratione reiciendis sint sit vel vitae voluptas voluptates?
Lorem ipsum dolor sit amet, consectetur adipisicing elit. Accusantium ad aperiam cum, dolor eius error et explicabo fugiat harum laudantium minima obcaecati ratione reiciendis sint sit vel vitae voluptas voluptates?
Pagination pour la recherche : utilise listjs.com
Cette recherche impose les classe CSS page, active, disabled et interdit l'utilisation de pagination sinon plus rien ne fonctionne !
Medium down : Les colonnes font 100% et sont espacé de $espace-m Large : La deuxième colonne est de la taille indiqué moins la taille de la gouttière $espace-m
Colonne 1
Colonne 2
<div class="d-flex">
<div class="w-">Largeur du contenu</div>
<div class="w-">Largeur du contenu</div>
</div>
J'adore le concept de reprendre le code vestimentaire des t-shirts de concert Metal et de le détourner en une sorte de tableau périodique des métaux de transition, mais :
Les logotypes ne reprennent pas le style torturé habituel
La date en bas du t-shirt correspond a priori à rien
La face avant du t-shirt est entièrement noire, sans illustration ni reprise du logo
Au début, un cube à deux faces pour exprimer ma double facette de codeur/designer
Sur les versions suivantes, le cube est toujours présent mais seulement suggéré par un empilement de calque transparent.
Chaque couleur symbolise une catégorie.
Les trois principaux, rouge, vert, bleu sont une double référence.
Au système de codage des couleurs en informatique mais aussi à icône des logiciels de la suite Adobe :
Rouge : Animation (Flash)
Verte : Site web (Dreamweaver)
Bleu : Graphisme (Photoshop)
À partir de la version de 2009, la couleur intermédiaire, cyan, représente la catégorie «jeu»,
puis dans la version 2012, la couleur «orange» pour le «laboratoire» et le blanc qui est l'ensemble des couleurs, me représente.
Mon prénom et mes initiales accompagnant le logo dans cette version sont blancs tandis que le reste du texte est en gris.
Cette version ajoutera aussi un contour pour mieux faire ressortir le logo
La version de 2013 adoucira les couleurs.
En 2015, je trouverais un juste milieu entre les couleurs flashy du début et la version pâle.
Depuis 2020, le logo proposera un contour moins régulier, fait main, pour symboliser l'artisanat
Depuis 2021, un resign total, basé sur l'avatar que j'utilise actuellement partout :
Les cadres des images sont des iPhone 2G (1re génération)
Au survol, l'image change pour laisser la place à une autre identique avec une porte si le site était disponible
ou avec des rubans de chantier pour les sites en construction, maintenance etc...
C'est une équipe d'e-sport de la communauté Reborn Spartan.
« Norber » est un anagramme de Reborn.
Un de leurs membres avait réalisé le logo, je n’ai eu qu’à le rendre plus lisible et harmonieux
Radiophonix est un projet collaboratif de plateforme libre et gratuite de partage et d’écoute d'histoire audio, aussi connu sous le nom de "sagas MP3"
J’ai rejoins Nathan, le papa et développeur du projet.
Il ma laisser carte blanche sur le logo, le design et l'intégration
En 2019, nous étions invités à tenir un stand lors de la convention du MP3@paris.
Pour cette occasion, j'ai créé une carte de visite et une bâche publicitaire
Logo
— 10/12/2016
La partie haute du X de Radiophonix suggère un livre ouvert avec des ondes sonores en émanant
Carte de visite
— 16/04/2019
Les cartes de visite finales sont épaisses avec un liseré orange qui rappelle les couleurs du logo et du site
Bâche publicitaire
— 04/06/2019
Nous avions prévu d’imprimer une bâche, mais faute de temps nous avons fait une impression classique en A3
Nous souhaitons une devanture pour un chariot ambulant
Le texte « Aux délices d’Ahmed » doit être présent ainsi que des visuels de crêpes, gaufres, chocolat chaud, glaces, boissons
FormZ est une extension du système de gestion de contenu TYPO3
Carte blanche pour le design, par contre le logo doit être unicolore et il doit être lisible en tout petit format car il sera utilisé en icon dans le backend du CMS
Le pixel art, aussi appelé art du pixel ou art des pixels au Québec, désigne une composition numérique qui utilise une définition d'écran basse et un nombre de couleurs limité
C'est une icône informatique symbolisant un site web. Les navigateurs web peuvent utiliser la favicon dans la barre d'adresse, les signets, les onglets ou encore les autres raccourcis
Régulière retropixel.fr organise un concours pixel art.
Voici mes participation, les contraintes lié au concours et mes récompense lorsque j’en est obtenu.
Concours #45 : Robots Factory
— 22 Mai 2013
Contraintes
Dessiner la chaîne de production d’un robot
32 couleurs maximum (J’en est utilisé 16)
Animation autorisées
Taille de la création : 700*60px
Récompense
Médaille d'or
Concours #44 : Bi-Animals
— 14 Avril 2013
Contraintes
Melanger 2 animaux de façon à en obtenir un nouveau
20 couleurs maximum
Animation autorisées, pas de transparence
Taille de la création : 128*128px
Récompense
Pas pour cette fois !
Concours #41 : Infiltrated
— 22 Octobre 2012
Contraintes
Realiser un mock up de jeu d’infiltration
16 couleurs maximum
Animation autorisées, pas de transparence
Taille de la création : 240*160px
Récompense
Médaille de bronze
Concours #39 : Mélange de thèmes
— 17 Juillet 2012
Contraintes
Mélanger 2 thèmes parmi : Forêt, Espace, Océan, Electricité, Musique
20 couleurs maximum (J’en est utilisé 13)
Animation autorisées
Taille de la création : 256*96px
Récompense
Pas pour cette fois !
Concours #38 : RP Building
— 2 Juillet 2012
Contraintes
Imaginer un bâtiment pour Retropixel en Isométrie et de nuit
Pas de limite de couleurs
Animation autorisées
Taille de la création : 300*250px
Récompense
Médaille d'argent
Concours #35 : Back to the past
— 14 Avril 2012
Contraintes
Dessiner un mock up de Space Shooter
Palette imposé de 27 couleurs :
Animation autorisées
Taille de la création : 240*320px
Work In Progress animé :
Récompense
Médaille d'or
Concours #34 : Il fait pas chaud dehors !
— 2 février 2012
Contraintes
Bannière pour Retropixel avec le thème suivant : « L’hiver est dur cette année, venez vous réchauffez dans la communauté du pixel. »
5 couleurs maximum
Animation autorisées
Taille de la création : 88*31px
Récompense
Médaille d'or
Concours #32 : Mercredi, c’est…
— 22 Juillet 2012
Contraintes
Série de mini concours d’un duré de 1 semaine au lieu d’un mois généralement.
Le but est de dessiner un avatar (64*64 px) qui représente ce que dit une phrase imposé.
« Un squelette émotionné se bat avec Frankenstein dans un bar »
Palette de 10 couleurs imposées :
Animation autorisées
Taille de la création : 64*64px
Récompense
Médaille de bronze
Concours #32 : Mercredi, c’est…
— 15 Juillet 2012
Contraintes
Série de mini concours d’un duré de 1 semaine au lieu d’un mois généralement.
Le but est de dessiner un avatar (64*64 px) qui représente ce que dit une phrase imposé.
« Un poisson débile joue avec une imprimante dans une source d’eau chaude »
Palette de 10 couleurs imposées :
Animation autorisées
Taille de la création : 64*64px
Récompense
Médaille de bronze
Concours #30 : Bannière Steampunk
— 5 Juin 2011
Contraintes
Le logo doit être aux allures Steampunk
30 couleurs maximum
Pas de transparence
Taille de la création :370*65px
Work In Progress animé :
Récompense
Médaille de bronze
Concours #29 : Léonard est un génie
— 24 Mars 2011
Contraintes
Dessiner une machine en vous inspirant de croquis imposé de Léonard De Vinci
16 couleurs maximum
Transparence et animation autorisé
Taille de la création :96*96px
Récompense
Médaille de bronze
Concours #27 : Bonnet de Noël
— 23 Décembre 2010
Contraintes
Intégrer le bonnet imposé dans un avatar spécial noel
16 couleurs maximum
Transparence et animation autorisé
Taille de la création :64*64px
Récompense
Médaille de bronze
Concours #22 : Voyage Pixelo-temporel
— 15 Février 2010
Contraintes
Réaliser trois scènes, d’un même lieu, à trois périodes strictement différentes en utilisant le template imposé
16 couleurs maximum
Pas de transparence ni d’animation autorisé
Taille de la création :125*70px
Récompense
Médaille de bronze
Concours #21 : Pixel Kit
— 17 Septembre 2009
Contraintes
Créer un kit, un inventaire, une collection pour une collection réelle ou fictive
Pas de limite de couleurs
Transparence et animation autorisé
Taille de la création :200*250px
Récompense
Médaille de bronze
Concours #20 : À l’abandon…
— 14 Aout 2009
Contraintes
Réaliser une scènes d'un lieu abandonnée
16 couleurs maximum
Pas de transparence ni d’animation autorisé
Taille de la création :217*100px
Récompense
Médaille de bronze
Concours #19 : L’Envolée Pixellisée
— 5 Juillet 2009
Contraintes
Créer une illustration sur le thème de l’envol et en intégrant cette forme
Pas de limite de couleurs
Pas de transparence ni d’animation autorisé
Taille de la création :200*250px
Récompense
Pas pour cette fois !
Concours #17 : Pixellise-moi une Histoire !
— 3 Avril 2009
Vous avez carte blanche pour réaliser la page de maintenance du site du jour de son lancement :
Un texte en français et en néerlandais vous est imposé, ansi que l'affichage du logo.
Tout doit être compris dans un unique fichier html, pas d'appel vers des styles, image ou polices externe
poweo.be
Animation en CSS : défilement de la silhouette urbaine
Image en base64
Page responsive
Multilangue
Konami code,
sur mobile ;
Les flèches sont remplacées vers des «Drag»
Le «B», «A» par deux «Tap»
Retropixel est une grande communauté francophone entièrement dédiée au Pixel-Art.
Je les ai rejoint en 2009 par curiosité et je suis rapidement devenus modérateur puis administrateur
J'ai réalisé de multiples fonctionnalités et visuels
Kinematik, c’est une équipe de deux personnes spécialiser dans la réalisation de vidéo de mariage
Nous avons besoin d’un site vitrine en une seule page qui nous présente ainsi que nos formules.
La page d’accueil doit contenir le visuel fournis.
Le logo et la charte du site doit également partir de ce visuel
L’image de l’en-tête est un slider paramétrable dans les préférences
Le fond rouge/vert/jaune dans les encadrés des serveurs de jeu corresponde au nombre de slot disponible :
0 à 5 -> rouge
6 à 10 -> jaune
10 et + -> vert
T-shirt
— 1 octobre 2010
Ajustement du thème
— 16 septembre 2010
Accueil
Modification des images qui encadrent le contenu
Réajustements divers
Liste des serveurs
Ajout d’un système d’affichage par accordéon pour la rubrique Serveur pour améliorer la lisibilité, ici c’est la catégorie « Trakckmania » qui est déployer
Page groupe
Ajout d’un classement par onglets des groupes de la Team
Localisation des joueurs
Ajout d’une nouvelle rubrique au menu général, la MTC Maps :
Elle consiste à utiliser l’API de google map et afficher sur cette dernière la localisation des membres selon ce qu’ils ont paramétré dans le profil.
Pour chaque membre affiché, diverses informations sont récupérées dans la base de données comme leur pseudo, leur avatar, les jeux qu’il pratique et leur statut.
Les Trublions sont un regroupement de passionner de musique Metal qui a pour objectif de nous compter l’origine et l’essence des bien trop nombreux style mais aussi de faire des chroniques d’album, des interviews, des lives reports et j’en passe.
Initialement, j’étais un de leurs fervents lecteurs, puis pour égailler les liens de promotion vers leur blog, je leur ai réalisé une bannière avec leur logo et leur baseline
Et des favicons déclinait de leur logo
Bien vite, j’ai intégré l’équipe pour illustrer sous forme de bannière leur article. En ce temps là, j’hébergeais les images et je leur fournissais un script qu’il avait simplement à copier coller dans leurs signatures
Au début, je déclinais la bannière pour finir par conserver uniquement le logo
Le site et son design originel se voulant minimaliste en ne proposant que le strict nécessaire pour commencer, j’ai conservé le concept d’onglet en 3 étape en le modernisant un peu
Intégration et ajout de script jQuery pour améliorer l’interaction du site avec ses utilisateurs
Création d’un formulaire en ligne à la place de la diffusion d’une adresse mail
Création d’un script photoshop pour simplifier le traitement des images
Fichier zippé de touts les fichiers/images nécessaire fournis avec une explication détaillé sur l’utilisation du systeme de grille et de l’utilisation des effets d’animation désactivable