Les faux contrôles de formulaires

De temps en temps, je reçois une maquette avec un formulaire à intégrer qui contient quelque chose comme ça :

Une liste déroulante personnalisée

Ceci est une liste déroulante personnalisée. C’est vachement pratique pour repérer les webdesigners débutants, les graphistes print qui font du web, ou encore les webdesigners qui pensent que le design est la finalité d’une page web (indice : ce n’est pas le cas).

Si vous êtes intégrateur, vous savez déjà que vous allez devoir faire quelque chose de très sale pour arriver à ce résultat graphique. Les contrôles de formulaires sont par défauts très limités à modifier en CSS. Ceci est dû au fait que ce sont en fait des éléments remplacés par le navigateur par des contrôles propres au système d’exploitation. L’avantage, c’est que le formulaire pourra s’adapter au fonctionnement du système d’exploitation. Par exemple sur iOS, vous aurez droit à la roue du juste prix. L’inconvénient, c’est que vous êtes assez limité au niveau de la présentation.

CSS3 apporte quelques solutions (notamment avec la propriété appearance), mais on est loin d’une solution universelle. La moins pire des solutions à l’heure actuelle consiste à utiliser du JavaScript pour remplacer les contrôles de formulaire par de faux contrôles. La bibliothèque Uniform (en jQuery) fait ça plutôt bien.

Mais ça implique d’énormes compromis. Il y a quelques semaines, Aviv Ben-Yosef rappelait sur son blog pourquoi il faut éviter les faux contrôles de formulaires en HTML.

Voici une liste des pour et contre de l’utilisation de tels contrôles graphiques.

Pour : 

  • C’est joli.

Contre :

  • Ça alourdit le temps de téléchargement de la page, et donc aussi le nombre de requêtes.
  • Ça ralentit le chargement de la page côté client. Vous devrez attendre que tous vos scripts soient chargés avant de pouvoir utiliser votre formulaire.
  • Ça diminue l’ergonomie de votre site. Les contrôles de formulaires système ont l’avantage d’être familiers pour les internautes. Même si vous avez fait une charte de liste déroulante super jolie et ergonomique, ça demandera du temps de compréhension supplémentaire à vos visiteurs.
  • Ça réduit l’interopérabilité de votre site. Oui, ça fonctionne bien sur les machines à l’heure à laquelle vous avez développé votre site. Mais rien ne vous garantit que ça ne fonctionnera encore sur les machines de demain.
  • Ça détruit l’accessibilité de votre page. Les faux contrôles générés en HTML deviennent totalement inutilisables.
  • Ça a un impact sur le temps d’intégration, et donc le coût de votre projet.

Par pitié, n’imposez pas ça à vos visiteurs.

  1. Pauland, le

    Complètement d’accord !

  2. PinGoo, le

    Amen !
    A faire passer aux webdesigner and co.

  3. Identitools, le

    La même, j’approuve totalement.

  4. Yoyo, le

    D’accord également, mais quand le graphiste inculte en met un peu partout, et quand le client les veut absolument, parce que selon lui, c’est indispensable.
    On se retrouve avec un code alourdi à cause d’incompétents…

  5. Aurel, le

    Je l’ai fait récemment pour un site et c’est vrai que c’est galère.
    D’ailleurs comme contre je rajouterai le temps d’intégration et de tests qui peuvent être assez long pour une utilité plus que discutable…

  6. Melusine29, le

    Je suis totalement d’accord. C’est galère et long à faire et au final on obtient pas forcément (au pixel près) ce que veut le client et on est obligé de lui expliquer pourquoi !
    A faire passer au webdesigner ^^

  7. Minvielle, le

    Par extension, j’ai aussi un peu de mal avec les fausses alert, pour exactement les même raisons… Pourquoi remplacer une alert js qui est certes moche mais intégrée au système ?

  8. Yannick, le

    QUOI ??? MAIS TU BRIDE MA CREATIVITE !!!!

    Ceci est, j’en suis certain à 95%, le type de réactions des créas si on leur dit de ne pas les customiser !

  9. Gaël, le

    Je suis graphiste et je suis d’accord !!

    95% du temps les internautes voient un formulaire avec les éléments systèmes, il n’y a donc aucun intérêt à modifier un code visuel évident pour chaque internaute.

  10. griZouw, le

    C’est surtout que ça fait chier royalement les intégrateurs :-)
    Parce que les « contres » que tu as cité peuvent très bien s’appliquer aussi aux boutons et input de formulaires, comme le bouton de ce formulaire de commentaire par exemple :-)

    Si on va dans votre logique, on fait des sites a la Jakob Nielsen (http://www.useit.com).

  11. PinGoo, le

    et donc dans POUR tu rajouterais quoi : ?

  12. Yvain Liechti, le

    La plus part du temps une liste déroulante comme celle si est mal conçu.
    Ne répondant pas de la même façon que celle du système :
    – contrôlable au clavier
    – orienté le déroulement en fonction de la place disponible
    – auto sélection quand on tape au clavier
    – gestion d’une liste trop longue
    – z-index

    à chaque fois un de ces points est bâclé ou en tout cas pas compatible avec certains navigateur. Tous les respecter représente une bonne couche de javascript (lourde)

    Ce petit élément nécessite effectivement énormément de travail pour y gagner un peu en ergonomie. À moins que vous ayez un ergonome très compétant pour assurer vos désirs graphiques, s’il vous plais ne prenez pas le risque d’utiliser ce genre de fantaisie.

  13. Brunus, le

    Et dans le pire des cas, on demande à l’intégrateur de faire un mix entre uniform et PIECss…parce que le truc doit être réalisé en CSS, sans image bitmap, et en même temps compatible avec les IE qui ne gèrent pas les border-radius et autres box-shadow…sisi…ça peut arriver !

  14. Nicolas Chambrier, le

    @Minvielle Le cas des alert() est totalement différent: il y a bien des manières dont on peut vouloir notifier l’utilisateur. On peut vouloir une modale, ou pas. On peut vouloir que ce soit discret, ou en plein milieu de la page (selon la gravité de la notification par exemple). Bref, il y a tout un tas de vraies bonnes raisons et notamment ergonomiques, pour ne pas garder l’alerte système :)

  15. Rob., le

    Bonjour,

    ça me fait penser aux webdesigner qui font leurs maquettes sur mac et qui maquette les formulaire avec les éléments de Safari.
    Une fois livré le client gueule parce qu’il est sur Windows/IE (forcement) parce que les formulaires sont « dégueux ».

  16. Victor Brito, le

    En matière d’accessibilité, il y a des solutions, comme celle présentée par Roger Johansson dans un billet intitulé An accessible, keyboard friendly custom select menu (http://www.456bereastreet.com/archive/201111/an_accessible_keyboard_friendly_custom_select_menu/). Il n’empêche que c’est, effectivement, toujours plus simple et plus pratique de lâcher prise en matière de design.

  17. David, le

    Alléluia, voila un article qui fait plaisir à lire, je me sens moins seul.

  18. sacripant, le

    Et pourquoi ce serait un « select » ? S’il est entouré d’autres éléments de formulaire, ok, on évite les design impossible.
    Mais si c’est un item d’une toolBar pour basculer vers un autre site (genre canon France vers Canon Espagne, cet élément graphique n’est pas nécessairement un select. Une ul – li -a peut faire l’affaire et avoir ce design.

    Autre point à soulever. Les navigateurs et OS imposant une partie du design et de l’ergonomie des éléments de formulaire. Comme l’introduit Rob. Quel design doit être utilisé pour les éléments de formulaire sur une maquette ?

  19. dew, le

    Je ne vois personne parler de WAI-ARIA et de jQuery Mobile.

  20. noob spotted, le

    >> Parce que les « contres » que tu as cité peuvent très bien s’appliquer aussi aux boutons et input de formulaires, comme le bouton de ce formulaire de commentaire par exemple <<

    Styliser un bouton ou un input, c'est 3 lignes de CSS.

    Styliser un select, c'est 50 lignes de jQuery, 4 ou 5 div inutiles, 20 lignes de CSS.

    Merci de ne pas désinformer le lecteur.

  21. griZouw, le

    @monsieur au dessus qui se prend pour dieu le père avec son « noob spotted », t’es pas sur le forum de World Of Warcraft ou sur Jeuxvideo.com, merci de rester courtois :-)

    Je parlais surtout de l’ergonomie. Parce que les points qui concernent le chargement, on peut les appliquer a un tas de trucs, comme les webfonts par exemple … ah ué mais la ça prend 1min30 pour l’appliquer du coup y a personne qui râle :-D Et pourtant 90% des webfonts ont un rendu complètement dégueulasse digne de windows 3.1, et personne dis rien :-)

    Pour ceux qui parlent de petit détail pour pas grand chose au final : « C’est avec des petits détails qu’on fait de grande chose » :-)

    On ne m’ôtera pas de l’idée que ce débat fait des remous parce que c’est le truc le plus chiant a thémer dans une page web :-)

    T’facon, j’veux pas vous déprimer, mais les webdesigners qui arrêtent de themer les formulaires au complet, ça risque par d’arriver :-)

    PS : C’est moi ou le bouton d’ajout de commentaire est plus themé ? :D

  22. Stéphanie, le

    Cela résume assez bien ma pensée. J’ajouterais dans la liste des causes, les 150 UI packs qu’on nous sert tous les jours à toutes les sauces avec des super drop down custom etc et les shots sur dribbble avec des UI customisées à l’extrême. Je me suis toujours demandée comment on passe de Photoshop à CSS quand on voit la complexité visuelle de certaines éléments. C’est joli. Point.
    Hélas de plus en plus de clients prennent ces packs pour modèles, et il devient de plus en plus compliqué, même avec toutes la volonté et les bons arguments du monde, de leur faire comprendre pourquoi on ne peut pas leur faire la super drop-down comme ils l’ont vu sur le shot de superawesome designer sur dribbble (true story)

  23. Bartdude, le

    Grizouw > Les boutons, c’est un mauvais exemple je pense, ceux-ci ne demandent justement pas trop de fioritures pour être stylés, et donner à un quelconque élément une fonctionnalité de bouton n’est pas non plus très couteux ni handicapant.

    Par contre, en ce qui concerne l’accessibilité et l’interropérabilité, il est indéniable qu’un pseudo-contrôle sera toujours plus gênant que le contrôle d’origine…
    Il est vrai cependant que résumer les « pour » à un « c’est joli » est un peu casse gueule, car c’est bien souvent également le seul « pour » des autres effet graphiques, et dans cette optique on ne ferait effectivement plus que des sites fonctionnels, qui chargent vite, portables et accessibles, sans se soucier de ce « détail » qu’est le design.

  24. malak, le

    mmmh assez subjectif comme article :) vous me direz « c’est normal pour sur un blog ». Bien qu’étant développeur je pense qu’attribuer tous les contres à tous les types constituant un formulaire et résumer le pour au simple « c’est joli » revient à créer des amalgames et surtout c’est un peu facile ;)

    – L’ergonomie est un faux « contre » rien n’empêche d’avoir un formulaire design et ergonomique, et par définition ergonomique veut dire que c’est intuitif et facile d’utilisation donc si ça l’est véritablement, aucun temps supplémentaires pour l’utilisateur.

    Personnellement je trouve que le seul vrai point contre, c’est l’accessibilité, le reste ça peut encore se maitriser ou se négocier lol…

  25. nfroidure, le

    @malak: Rien n’empêche de faire un select en Js qui soit accessible. Seulement dans les faits, c’est toujours une bouze immonde car l’intégrateur a les nerfs de devoir travailler sur des faux contrôles pourris.

    Par contre, pour le temps de chargement, l’ergonomie et pour la pérennité : 100% d’accord. Combien de sites avec faux contrôles sont utilisables avec un mobile sans zoomer/dé-zoomer frénétiquement ?

  26. Loëck, le

    Hum, je suis pas tout à fait d’accord.

    je trouve que c’est désormais TRÈS facile d’implémenter ça (http://ivaynberg.github.com/select2/select2-latest.html), parfois c’est même plus pratique qu’un SELECT normal. Pour le mobile ? Une condition pour les désactiver en JS, et voilà.

    Après oui, c’est plus lourd, ça prends plus de temps à faire. Personnellement, à l’utilisation j’ai tendance à préféré les SELECT modifiés (quand ils sont bien fait).

  27. pascal weber, le

    Travaillant dans une petite agence je cumule conception graphique et intégration (ce qui à mon sens devrait être le cas pour tout le monde car j’ai du mal à imaginer qu’on puisse concevoir l’aspect de quelque chose sans connaître le code sous-jacent mais c’est un autre débat). La guéguerre graphistes vs intégrateurs m’est donc étrangère. Cependant plus je lis ce blog et plus la lecture des commentaires quasi-haineux des intégrateurs m’inspirent deux conclusions : #1 les graphistes doivent impérativement savoir intégrer (en plus d’être experts en ergonomie et accessibilité) et #2 les intégrateurs doivent impérativement être tenus éloignés du design car ce concept leur échappe visiblement complètement.

  28. Gring, le

    Le html a été initialement conçu pour afficher du texte indépendamment de la machine qui le lit. On avait donc du texte à police, à taille et à mise en page à géométrie variable.

    Et puis le web commercial est arrivé, et là, tout le monde s’est mis à faire des pages où tout doit être contrôlé pour des raisons d’image de marque, comme s’il s’agissait de quelque chose d’imprimé. Le métier d’intégrateur web est apparu, condamnant des milliers de gens à s’arracher les cheveux, car devant faire quelque chose avec des technologies conçues pour faire le contraire.

    Ce post critique à juste titre une démarche qui va dans le sens de l’esthétique, pourtant il est présent sur une page dont le contenu est verrouillé dans un cadre d’un millier de pixels de large, alors que j’ai un écran qui en affiche près de 2000, ce qui laisse deux énormes espaces blancs, ce qui en plus me force à scroller pour lire la totalité du contenu.

    Cher HTeuMeuLeu, je suis d’accord avec vous, et vous encourage d’aller au bout de votre démarche et de définir la largeur du contenu de votre blog relativement à la largeur de l’écran qui l’affiche, et non pas en px (oui, je sais, c’est une unité relative).

  29. Guillaume, le

    Je n’ai qu’une question. Quand le formulaire est le seul et unique intérêt de la page, n’est-ce pas un peu dommage. Je ne parle pas des formulaires à rallongent d’un tunnel d’achat par exemple, mais sur un petit jeu-concours il est intéressant de savoir comment le faire sans sortir l’utilisateur de l’univers qu’on lui propose.