Nicolas Guilhou Nicolas Guilhou http://nicolas-guilhou.com/ aujourd'hui à 20:59 aujourd'hui à 20:59 Voir input et mourir <p>HTML5 c’est bien. CSS3 aussi.<br /> Bon ok faut pas vouloir faire un dégradé rapidement qui soit compatible Gecko/Webkit, ni faire en une ou deux lignes une boîte avec des coins arrondis.<br /> En plus on a de nouveaux jouets, comme les <a href="http://dev.w3.org/html5/markup/input.search.html">input type=‘search’</a>. Justement en parlant de ça, il se trouve que pour un client je me suis retrouvé devant une maquette où se trouve un champs de recherche habituel, celui-ci étant habillé de gris entre autres choses… À charge pour moi de faire une intégration HTML5/CSS3 de la chose.</p> <p>Comme je passe pas mes journées à intégrer des inputs j’ai commencé par des tests. Et là, c’est le drame.<br /> Voici une page html standard pour mon test :</p> <pre class="prettyprint lang-html">&lt;!DOCTYPE html&gt; &lt;html lang="fr"&gt; &lt;head&gt; &lt;meta charset="utf-8" /&gt; &lt;title&gt;input[type="search"]&lt;/title&gt; &lt;meta http-equiv="X-UA-Compatible" content="chrome=1"&gt; &lt;/head&gt; &lt;body&gt; &lt;form id="search"&gt; &lt;input type="search" placeholder="Rechercher…" name="q" autocomplete="off"&gt; &lt;/form&gt; &lt;/body&gt; &lt;/html&gt; </pre> <p>On peut constater d’emblée une différence fondamentale de rendu entre Gecko et Webkit</p> <p></p> <p></p> <p></p> <p></p> <p></p> <p></p> <p></p> <p><figure> <img src="http://nicolas-guilhou.com/images/articles/search_ex.png" title="rendus gecko et webkit de l'élément input search" alt="rendus gecko et webkit de l'élément input search" /> <figcaption>Différences de rendu entre Gecko et Webkit pour <code>&lt;input type="search"&gt;</code></figcaption> </figure></p> <p></p> <p></p> <p></p> <p></p> <p></p> <p></p> <p></p> <p>Qu’importe me dis-je, je m’en vais y mettre un coup de <span class="caps">CSS</span> dans sa face et on verra bien qui est le maître du monde. Dont acte :</p> <pre class="prettyprint lang-css"> #search input[type="search"] { display: block; background-color: #666; color: #fff; border: 1px solid #666; border-top-color: #454545; border-left-color: #454545; padding: 10px; font-size: 16px; -webkit-border-radius: 6px; -moz-border-radius: 6px; border-radius: 6px; width: 190px; } </pre> <p>Et quand on vérifie le rendu dans Gecko et Webkit on se rend compte qu’on a pas le cul sorti des ronces</p> <p></p> <p></p> <p></p> <p></p> <p></p> <p></p> <p></p> <p><figure> <img src="http://nicolas-guilhou.com/images/articles/search_ex_css1.png" title="gros fail de webkit" alt="gros fail de webkit" /><br /> <figcaption>Les <span class="caps">CSS</span> c’est beau… quand ça marche</figcaption> </figure></p> <p></p> <p></p> <p></p> <p></p> <p></p> <p></p> <p></p> <p>Diantre, normalement ça marche. Et pas là… Après avoir vérifié et revérifié le html et la css — les coquilles ça arrive — j’ai ouvert ma page dans Safari et en vérifiant la page avec l’inspecteur web j’ai découvert avec horreur que Webkit utilise ses propres règles <span class="caps">CSS</span> pour afficher un <code>input type="search"</code>.</p> <p>Là où Gecko se borne — pour l’instant — à afficher un input tout à fait classique, Webkit utilise des règles <span class="caps">CSS</span> <em>très</em> propriétaires pour singulariser ce type d’élément de formulaire. Si on scrute avec l’inspecteur voilà ce que nous dit Webkit :</p> <pre class="prettyprint lang-css">input[type="search"] { -webkit-appearance: searchfield; box-sizing: border-box; } </pre> <p>Donc, si on court-circuite la façon dont Webkit gère l’affichage il y a de fortes chances que notre super <span class="caps">CSS</span> s’applique aussi correctement. Après avoir cherché un peu voilà ce qu’il faut déclarer pour Webkit :</p> <pre class="prettyprint lang-css">#search input[type="search"] { -webkit-appearance: textfield; -webkit-box-sizing: content-box; box-sizing: content-box; } </pre> <p>Voilà, court-circuit de <code>-webkit-appearance</code> et <code>-webkit-box-sizing</code> et avec le code css complet on a <em>enfin</em> un affichage identique d’un navigateur à l’autre.</p> <p>La <span class="caps">CSS</span> finale :</p> <pre class="prettyprint lang-css">#search input[type="search"] { display: block; -webkit-appearance: textfield; -webkit-box-sizing: content-box; box-sizing: content-box; background-color: #666; color: #fff; border: 1px solid #666; border-top-color: #454545; border-left-color: #454545; padding: 10px; font-size: 16px; -webkit-border-radius: 6px; -moz-border-radius: 6px; width: 190px; } </pre> <p>On vient de quitter une époque ou la simple évocation de “compatibilité IE6” provoquait des vomissements et des crises d’eczéma chez les webdesigners pour se retrouver dans une ère où il faut être encore plus prudent, très au courant des derniers développements, et aussi très malin pour ne pas avoir à ré-écrire dans 18 mois tout ou partie de nos <span class="caps">CSS</span>. Je ne sais pas si on y a gagné en flexibilité, au moins on y a gagné en possibilités nouvelles… on verra dans quelques mois ce qu’il en coûte. Ou pas.</p> <p></p> <p></p> <p></p> <p></p> <p></p> <p><figure> <img src="http://nicolas-guilhou.com/images/articles/search_ex_css2.png" title="Résultat final" alt="Résultat final" /><br /> <figcaption>Où l’on s’aperçoit qu’on s’est fait chier pour pas grand-chose</figcaption> </figure></p> <p></p> http://nicolas-guilhou.com/news/2011/12/07/Voir_input_et_mourir NEWS-6 Wed, 07 Dec 2011 08:38:47 +0100