{"id":1862,"date":"2012-01-23T08:26:17","date_gmt":"2012-01-23T07:26:17","guid":{"rendered":"https:\/\/www.creativejuiz.fr\/blog\/?p=1862"},"modified":"2015-01-18T16:16:32","modified_gmt":"2015-01-18T15:16:32","slug":"astuces-html-css-experimentations-parfois-foireuses","status":"publish","type":"post","link":"https:\/\/www.creativejuiz.fr\/blog\/veille-technologique\/astuces-html-css-experimentations-parfois-foireuses","title":{"rendered":"Astuces HTML et CSS : mes derni\u00e8res exp\u00e9rimentations (parfois foireuses)"},"content":{"rendered":"<p>Ces derni\u00e8res semaines, j&rsquo;ai tent\u00e9 de trouver de nouvelles m\u00e9thodes pour faciliter la t\u00e2che dans l&rsquo;int\u00e9gration de certains \u00e9l\u00e9ments pr\u00e9cis d&rsquo;un site Web. Je me suis \u00e9galement essay\u00e9 a des choses plus pouss\u00e9es, comme le remplacement du JS d&rsquo;un slideshow par du CSS.<!--more--><\/p>\n<p>\u00c0 force d&rsquo;essayer, j&rsquo;ai trouv\u00e9 des choses, pas toujours ce que je cherchais, mais voici quelques donn\u00e9es qui int\u00e9resseront certains d&rsquo;entre vous.<\/p>\n<p>Ces essais et remarques, je les tweete assez souvent, quasiment tout le temps, mais vous n&rsquo;\u00eates pas oblig\u00e9s de <a href=\"https:\/\/twitter.com\/geoffreycrofte\" title=\"Me suivre sur Twitter\">me suivre<\/a>, alors voici un r\u00e9capitulatif.<\/p>\n<h2>Pseudo-\u00e9l\u00e9ments <code class=\"pseudo-e\">before<\/code> et <code class=\"pseudo-e\">after<\/code> sur un champ de formulaire.<\/h2>\n<p>En travaillant sur un formulaire HTML5, j&rsquo;ai souhait\u00e9 automatiser la pr\u00e9sentation classique des champs requis pr\u00e9c\u00e9d\u00e9s ou suivis d&rsquo;une petite \u00e9toile pour signifier le besoin d&rsquo;information.<br \/>\nJe me suis donc tourn\u00e9 vers les pseudo-\u00e9l\u00e9ments <code class=\"pseudo-e\">before<\/code> et <code class=\"pseudo-e\">after<\/code>, plus pr\u00e9cis\u00e9ment <code class=\"pseudo-e\">after<\/code> afin de proposer quelque chose dans ce go\u00fbt :<\/p>\n<p class=\"center\"><img decoding=\"async\" src=\"https:\/\/www.creativejuiz.fr\/blog\/wp-content\/uploads\/2012\/01\/champ-input-required-css.png\" alt=\"\" title=\"\" width=\"350\" height=\"100\" class=\"aligncenter size-full wp-image-1864\" srcset=\"https:\/\/www.creativejuiz.fr\/blog\/wp-content\/uploads\/2012\/01\/champ-input-required-css.png 350w, https:\/\/www.creativejuiz.fr\/blog\/wp-content\/uploads\/2012\/01\/champ-input-required-css-300x85.png 300w\" sizes=\"(max-width: 350px) 100vw, 350px\" \/><\/p>\n<p>Ma tentative de code \u00e9tait la suivante (pour ce qui est du positionnement) :<\/p>\n<pre class=\"code\"><code class=\"css\">[required]:after { \r\n   content: \"*\";\r\n   position: absolute;\r\n   top:0; right:0;\r\n   width: 15px; height: 15px;\r\n}<\/code><\/pre>\n<p>En fait \u00e7a ne fonctionne pas. <code class=\"pseudo-e\">after<\/code> et <code class=\"pseudo-e\">before<\/code> ne fonctionnent pas sur les \u00e9l\u00e9ments de formulaire.<\/p>\n<h2 id=\"pseudo-element-animated-webkit\">Les animations sur <code class=\"pseudo-e\">before<\/code> et <code class=\"pseudo-e\">after<\/code> sur Webkit<\/h2>\n<p>Si vous essayez ce type de code sur Webkit, rien ne bougera.<\/p>\n<pre class=\"code\"><code class=\"css\">div:before {\r\n   width: 200px;\r\n   -webkit-transition: width 1s;\r\n}\r\ndiv:hover:before {\r\n   width: 240px;\r\n}<\/code><\/pre>\n<p>C&rsquo;est probablement un probl\u00e8me qui sera corrig\u00e9 dans une des prochaines versions de Chrome\/Safari, mais pour le moment sous Safari 5.1.2 et Chrome 16 cette technique ne fonctionne pas.<br \/>\nVous aurez plus de d\u00e9tails dans un article que je pr\u00e9pare sur la r\u00e9alisation d&rsquo;<a href=\"http:\/\/creativejuiz.fr\/trytotry\/juizy-slideshow-full-css3-html5\/\" hreflang=\"en\">un slideshow en HTML5 et CSS3<\/a>. Comparez Chrome et Firefox sur la d\u00e9mo suivante.<\/p>\n<p class=\"center\"><a class=\"demonstration\" href=\"http:\/\/dabblet.com\/gist\/1653135\" title=\"Voir la d\u00e9mo de l'animation du pseudo-\u00e9l\u00e9ment sur Dabblet.com\">D\u00e9monstration <\/a> et <a href=\"http:\/\/dabblet.com\/gist\/1694007\" class=\"demonstration\" title=\"Voir une deuxi\u00e8me d\u00e9mo de l'animation d'un pseudo-\u00e9l\u00e9ment sur Dabblet.com\">D\u00e9monstration<\/a><\/p>\n<h2 id=\"keyframes-is-too-strong\"><code>@keyframes<\/code> c&rsquo;est vraiment trop fort&hellip; non mais vraiment!<\/h2>\n<p>La valeur d&rsquo;une propri\u00e9t\u00e9 d\u00e9finie lors d&rsquo;une animation est tellement prioritaire qu&rsquo;il est impossible de l&rsquo;\u00e9craser.<br \/>\nVoici par exemple, un code qui aurait pour objectif d&rsquo;animer un \u00e9l\u00e9ment positionn\u00e9. Au survol du parent de cet \u00e9l\u00e9ment, nous arr\u00eatons l&rsquo;animation, et nous repla\u00e7ons l&rsquo;\u00e9l\u00e9ment \u00e0 sa position d&rsquo;origine :<\/p>\n<pre class=\"code\"><code class=\"css\">div {\r\n   position: absolute;\r\n   top:0; left:0;\r\n   width: 100px; height: 100px;\r\n   background: #999;\r\n   animation: 10s anim infinite;\r\n}\r\n@keyframes anim {\r\n   0%, 100% { left: 0; top:0; }\r\n   25% { left: 200px; top:0 }\r\n   50% { left: 200px; top:200px }\r\n   75% { left:0; top:200px; }\r\n}\r\nbody:hover div {\r\n   animation-play-state: paused;\r\n   top:0 !important; \/* \"important\" est inutile ici *\/\r\n   left:0 !important;\r\n}<\/code><\/pre>\n<p>Cette m\u00e9thode est totalement inutile. Il suffit de voir la d\u00e9monstration, sur laquelle j&rsquo;ai volontairement rajout\u00e9 un effet de transition (visible uniquement sur Firefox) pour vous pr\u00e9senter l&rsquo;ind\u00e9cision du bloc \u00e0 trouver sa position.<\/p>\n<p class=\"center\"><a class=\"demonstration\" href=\"http:\/\/dabblet.com\/gist\/1653181\" title=\"Voir la d\u00e9monstration de l'effet d'animation sur Dabblet.com\">D\u00e9monstration<\/a><\/p>\n<h2>Attention \u00e0 votre mani\u00e8re d&rsquo;utiliser <code>@keyframes<\/code><\/h2>\n<p>J&rsquo;ai d\u00e9j\u00e0 mentionn\u00e9 l&rsquo;utilisation des <code>@keyframes<\/code> et ce que je pensais \u00eatre une bonne pratique dans leur mise en place.<br \/>\nVoici l&rsquo;article qui y fait mention : <a href=\"\/blog\/veille-technologique\/comment-bien-utiliser-les-animations-en-css3\">Comment bien utiliser les keyframes en CSS3<\/a><br \/>\nPour r\u00e9sumer : l&rsquo;\u00e9l\u00e9ment qui profite d&rsquo;une animation ne doit pas devenir invisible ou inutilisable pour les navigateurs qui ne comprennent pas cette animation.<\/p>\n<h2>Le champ de formulaire de type <code>search<\/code> est diff\u00e9rent&#8230;<\/h2>\n<p>Hey oui ! Il poss\u00e8de une <code>appearance<\/code> de type <code>searchfield<\/code> et non de type <code>textfield<\/code>. De plus, sous Webkit, le type de boite est <code>border-box<\/code>.<br \/>\nCe type signifie que lorsque vous d\u00e9finissez une largeur de 200 pixels, une marge interne de 20 pixels et une bordure de 1 pixel, ne vous attendez pas \u00e0 avoir un champ de 242 pixels de large, mais bien un champ de 200 pixels de large.<br \/>\nPour \u00e9craser ce style par d\u00e9faut de Webkit, voici une base CSS :<\/p>\n<pre class=\"code\"><code class=\"css\">[type=\"search\"] {\r\n   -webkit-box-sizing: content-box;\r\n   -webkit-appearance: textfield; \/* optionnel *\/\r\n}<\/code><\/pre>\n<p>Ainsi le comportement vis \u00e0 vis du <code>padding<\/code> et du <code>border-width<\/code> rajout\u00e9s sera le m\u00eame que sur les autres \u00e9l\u00e9ments de formulaire.<\/p>\n<p class=\"center\"><a class=\"demonstration\" href=\"http:\/\/dabblet.com\/gist\/1653228\" title=\"Voir la d\u00e9monstration du champ de formulaire search sur Dabblet.com\">D\u00e9monstration<\/a><\/p>\n<h2>Le champ de formulaire de type <code>tel<\/code> n&rsquo;a pas de <code>pattern<\/code> \u00e0 respecter<\/h2>\n<p>Pour ceux qui utilisent les <em lang=\"en\">Web Forms<\/em> de HTML5, vous connaissez certainement la sp\u00e9cificit\u00e9 des champs de type <code>url<\/code> et <code>email<\/code> ?<br \/>\nSi c&rsquo;est le cas, vous aurez remarqu\u00e9 que la soumission des donn\u00e9es est sujette \u00e0 un contr\u00f4le de la syntaxe des informations pour ces champs. Si vous ne rentrez pas un bon format d&rsquo;e-mail ou d&rsquo;URL, la soumission du formulaire est suspendue.<\/p>\n<p class=\"center\"><img decoding=\"async\" src=\"https:\/\/www.creativejuiz.fr\/blog\/wp-content\/uploads\/2012\/01\/required-url-type.png\" alt=\"\" title=\"\" width=\"302\" height=\"89\" class=\"aligncenter size-full wp-image-1876\" srcset=\"https:\/\/www.creativejuiz.fr\/blog\/wp-content\/uploads\/2012\/01\/required-url-type.png 302w, https:\/\/www.creativejuiz.fr\/blog\/wp-content\/uploads\/2012\/01\/required-url-type-300x88.png 300w\" sizes=\"(max-width: 302px) 100vw, 302px\" \/><\/p>\n<p>Le type <code>tel<\/code> est diff\u00e9rent puisqu&rsquo;il ne propose pas de <code>pattern<\/code> par d\u00e9faut \u00e0 respecter.<br \/>\nPour cr\u00e9er un <code>pattern<\/code> pour ce champ il va falloir le faire manuellement gr\u00e2ce \u00e0 l&rsquo;attribut \u00e9ponyme.<\/p>\n<pre class=\"code\"><code class=\"html\">&lt;input type=&quot;tel&quot; pattern=&quot;^((\\+\\d{1,3}(-| )?\\(?\\d\\)?(-| )?\\d{1,5})|(\\(?\\d{2,6}\\)?))(-| )?(\\d{3,4})(-| )?(\\d{4})(( x| ext)\\d{1,5}){0,1}$&quot; required&gt;<\/code><\/pre>\n<p>Plut\u00f4t imbuvable comme code ! :p<br \/>\nLa valeur de l&rsquo;attribut <code>pattern<\/code> est une expression r\u00e9guli\u00e8re (<em>regexp<\/em>) qui est cens\u00e9e contr\u00f4ler un format international de num\u00e9ro de t\u00e9l\u00e9phone.<br \/>\nAvec ce format de valeur attendu, il sera impossible \u00e0 l&rsquo;utilisateur de rentrer autre chose qu&rsquo;un num\u00e9ro de t\u00e9l\u00e9phone.<br \/>\nAttention, cette m\u00e9thode n&rsquo;est pas une alternative \u00e0 un contr\u00f4le c\u00f4t\u00e9 serveur.<\/p>\n<p>Il y a au final, plus d&rsquo;exp\u00e9rimentations foireuses que d&rsquo;astuces, mais j&rsquo;esp\u00e8re qu&rsquo;elles vous serviront et vous permettront de gagner du temps.<br \/>\nBonne semaine !<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Ces derni\u00e8res semaines, j&rsquo;ai tent\u00e9 de trouver de nouvelles m\u00e9thodes pour faciliter la t\u00e2che dans l&rsquo;int\u00e9gration de certains \u00e9l\u00e9ments pr\u00e9cis d&rsquo;un site Web. Je me suis \u00e9galement essay\u00e9 a des choses plus pouss\u00e9es, comme le remplacement du JS d&rsquo;un slideshow par du CSS.<\/p>\n","protected":false},"author":4,"featured_media":1872,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"_bluesky_dont_syndicate":"","_bluesky_syndication_accounts":"","_bluesky_syndication_text":"","footnotes":""},"categories":[17,12],"tags":[120,228,288,428,432,215,423,121],"coauthors":[597],"class_list":["post-1862","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-css-css3","category-veille-technologique","tag-animation","tag-astuce","tag-css2-1","tag-css3","tag-formulaire","tag-html","tag-pseudo-element","tag-transition"],"acf":[],"aioseo_notices":[],"_links":{"self":[{"href":"https:\/\/www.creativejuiz.fr\/blog\/wp-json\/wp\/v2\/posts\/1862","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.creativejuiz.fr\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.creativejuiz.fr\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.creativejuiz.fr\/blog\/wp-json\/wp\/v2\/users\/4"}],"replies":[{"embeddable":true,"href":"https:\/\/www.creativejuiz.fr\/blog\/wp-json\/wp\/v2\/comments?post=1862"}],"version-history":[{"count":0,"href":"https:\/\/www.creativejuiz.fr\/blog\/wp-json\/wp\/v2\/posts\/1862\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.creativejuiz.fr\/blog\/wp-json\/wp\/v2\/media\/1872"}],"wp:attachment":[{"href":"https:\/\/www.creativejuiz.fr\/blog\/wp-json\/wp\/v2\/media?parent=1862"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.creativejuiz.fr\/blog\/wp-json\/wp\/v2\/categories?post=1862"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.creativejuiz.fr\/blog\/wp-json\/wp\/v2\/tags?post=1862"},{"taxonomy":"author","embeddable":true,"href":"https:\/\/www.creativejuiz.fr\/blog\/wp-json\/wp\/v2\/coauthors?post=1862"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}