<?xml version="1.0" encoding="utf-8"?><?xml-stylesheet title="XSL formatting" type="text/xsl" href="http://jeremie.patonnier.net/feed/rss2/xslt" ?><rss version="2.0"
  xmlns:dc="http://purl.org/dc/elements/1.1/"
  xmlns:wfw="http://wellformedweb.org/CommentAPI/"
  xmlns:content="http://purl.org/rss/1.0/modules/content/"
  xmlns:atom="http://www.w3.org/2005/Atom">
<channel>
  <title>Chez Jérémie - Mot-clé - CSS</title>
  <link>http://jeremie.patonnier.net/</link>
  <atom:link href="http://jeremie.patonnier.net/feed/tag/CSS/rss2" rel="self" type="application/rss+xml"/>
  <description>Chez Jérémie, parfois c'est sérieux, parfois non !</description>
  <language>fr</language>
  <pubDate>Tue, 04 Jul 2017 19:32:17 +0200</pubDate>
  <copyright>Creative Commons BY-NC-SA 2.0 Fr</copyright>
  <docs>http://blogs.law.harvard.edu/tech/rss</docs>
  <generator>Dotclear</generator>

  
  <item>
    <title>Des kiwis sans pépins</title>
    <link>http://jeremie.patonnier.net/post/2012/05/06/Des-kiwis-sans-p%C3%A9pins</link>
    <guid isPermaLink="false">urn:md5:77877dcd5557c5019ff40f80ee02e0ac</guid>
    <pubDate>Sun, 06 May 2012 22:52:00 +0200</pubDate>
    <dc:creator>Jeremie</dc:creator>
        <category>Web</category>
        <category>conférence</category><category>CSS</category><category>Kiwi Party</category>
    <description>    &lt;p&gt;J&amp;#8217;ai eu la chance de participer à la &lt;a href=&quot;http://kiwiparty.fr/&quot;&gt;Kiwi Party&lt;/a&gt; organisé le 4 mai 2012 par l&amp;#8217;agence Alsacréations. En toute simplicité, j&amp;#8217;ai envie de dire&amp;#160;: «&amp;#160;c&amp;#8217;était vachement bien&amp;#160;!&amp;#160;».&lt;/p&gt;
&lt;p&gt;Avant toute chose, un grand bravo au staff qui a assuré grave pour faire de cette journée un franche réussite et un remerciement tout spécial à Mme. Goetter qui a passé 15 jours en cuisine pour nous offrir un goutaÿ™ épique &lt;img src=&quot;/themes/default/smilies/smile.png&quot; alt=&quot;:)&quot; class=&quot;smiley&quot; /&gt;&lt;/p&gt;
&lt;p&gt;En suite, un grand merci également a tous ceux qui sont venu à Strasbourg pour assister à l’événement. votre enthousiasme, votre plaisir manifeste à être là ont fait de ce moment un moment exceptionnel.&lt;/p&gt;
&lt;p&gt;Au niveau des conférences, nous avons eu droit à un panel de très bon orateurs avec des sujets allant du référencement au développement en passant par l&amp;#8217;accessibilité et la conception. Une partie des conférences ayant eu lieu en parallèle les unes des autres, je n&amp;#8217;ai pas pu voir tout ce que je voulais, mais heureusement, elles ont toutes été filmées. Vivement que ces vidéos soient diffusées car j&amp;#8217;ai hâte de voir les conférences de Vincent de Oliveira sur les effets graphiques avancés et celle de Frédéric Kayser sur la gestion des images pour le Web.&lt;/p&gt;
&lt;p&gt;Parmi celles que j&amp;#8217;ai pu voir, deux ont plus particulièrement retenu mon attention&amp;#160;: &lt;/p&gt;
&lt;ol&gt;&lt;li&gt;«&amp;#160;Le développement HTML5 au sein de Windows 8&amp;#160;» présenté par David Rousset. Il s&amp;#8217;est agit d&amp;#8217;une excellente introduction aux principes de développement d&amp;#8217;applications HTML5 pour Windows 8. Ce fut vraiment l&amp;#8217;occasion de voir à qu&amp;#8217;elle point Microsoft a décidé de jouer le jeu des standards du Web. Et même si toute la couche d&amp;#8217;accès au système (appelée WindowsRT) reste encore une API JavaScript propriétaire, je suis persuadé que le développement des Web API standards permettra à Microsoft de d&amp;#8217;offrir toujours plus d’interopérabilité.&lt;/li&gt;
&lt;li&gt;«&amp;#160;Conquérir l&amp;#8217;internet des objets avec les technologies web&amp;#160;» présenté par Steren Giannini. Si j&amp;#8217;ai malheureusement raté le début de la conférence, ce que j&amp;#8217;en ai vu m&amp;#8217;a passionné. En particulier, il est vraiment intéressant de voir à quel point le Web sort de plus en plus des navigateurs traditionnels pour aller se nicher là ou on ne l&amp;#8217;attend pas. C&amp;#8217;est également très instructif de réaliser à quel point la diversité des supports rend toute forme de prédiction sur l&amp;#8217;usage, l&amp;#8217;interactivité ou le rendu visuel complètement hasardeuse.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;De mon coté, j&amp;#8217;ai eu la lourde tache de clôturer la journée en proposant une introduction aux transitions et animations CSS3. Je suis bien sur très mal placé pour juger ma performance, mais le nombre de retours extrêmement positifs que l&amp;#8217;on m&amp;#8217;a fait laisse penser que ça s&amp;#8217;est plutôt bien passé (J&amp;#8217;ai même eu droit à une tape sur l&amp;#8217;épaule et à un «&amp;#160;super&amp;#160;» de la part de Karl Dubost&amp;#8230; je croie que désormais, je peux mourir l’esprit en paix :P). Les slides de cette présentation sont bien sur disponible en ligne&amp;#160;:&lt;/p&gt;
&lt;iframe style=&quot;width: 533px; height: 400px&quot; src=&quot;http://jeremie.patonnier.net/experiences/KiwiParty2012/&quot; allowfullscreen=&quot;allowfullscreen&quot; frameborder=&quot;0&quot;&gt;&lt;/iframe&gt;
&lt;p&gt;Voila encore merci à tous. Vivement l&amp;#8217;année prochaine &lt;img src=&quot;/themes/default/smilies/smile.png&quot; alt=&quot;:)&quot; class=&quot;smiley&quot; /&gt;&lt;/p&gt;</description>

    

      </item>
  
  <item>
    <title>Lier CSS à Javascript : une mauvaise idée</title>
    <link>http://jeremie.patonnier.net/post/2012/02/13/Lier-CSS-a-Javascript-une-mauvaise-idee</link>
    <guid isPermaLink="false">urn:md5:bd702df765735f2c2f802713e3b5baa5</guid>
    <pubDate>Mon, 13 Feb 2012 09:30:00 +0100</pubDate>
    <dc:creator>Jeremie</dc:creator>
        <category>Web</category>
        <category>CSS</category><category>HTML</category><category>javascript</category>
    <description>&lt;p&gt;J&amp;#8217;ai récemment &lt;a href=&quot;https://twitter.com/#%21/JeremiePat/status/168436209142595584&quot;&gt;lancé un twitt&lt;/a&gt; qui a généré un nombre important et plutôt surprenant de réactions. Vous n&amp;#8217;êtes pas sans savoir qu&amp;#8217;actuellement, l’utilisation des préfixes vendeur en CSS est une source de grande tension. Parmi toutes les solutions qui existent pour essayer de limiter l&amp;#8217;impact de l&amp;#8217;usage de ces préfixes, le script &lt;a hreflang=&quot;en&quot; href=&quot;http://leaverou.github.com/prefixfree/&quot;&gt;-prefix-free&lt;/a&gt; de Lea Verou est une solution actuellement très en vogue&amp;#8230; mais dont je déconseille très fortement l&amp;#8217;usage.&lt;/p&gt;    &lt;p&gt;Soyons clair, je n&amp;#8217;ai pas l&amp;#8217;intention d&amp;#8217;alimenter le débat sur l&amp;#8217;opportunité ou non d&amp;#8217;utiliser les préfixes vendeur. Si vous les utilisez, utilisez les bien, utilisez toutes les variantes de tous les vendeurs. C&amp;#8217;est tout.&lt;/p&gt;
&lt;p&gt;Non, mon sujet ici, ce sont tous ces scripts Javascript qui vont conditionner l&amp;#8217;usage de CSS lorsqu&amp;#8217;ils sont utilisés dans un navigateur Web. -prefix-free bien sûr, mais également &lt;a hreflang=&quot;en&quot; href=&quot;http://lesscss.org/&quot;&gt;less.js&lt;/a&gt;, &lt;a hreflang=&quot;en&quot; href=&quot;https://github.com/scottjehl/Respond&quot;&gt;respond.js&lt;/a&gt;, &lt;a hreflang=&quot;en&quot; href=&quot;http://imsky.github.com/cssFx/&quot;&gt;cssFX&lt;/a&gt;, &lt;a hreflang=&quot;en&quot; href=&quot;https://github.com/pyrsmk/mediatizr&quot;&gt;mediatizr&lt;/a&gt;, &lt;a hreflang=&quot;en&quot; href=&quot;https://developers.google.com/webfonts/docs/webfont_loader&quot;&gt;WebFont loader&lt;/a&gt;, etc. Je n&amp;#8217;ai pas ici la prétention de vous convaincre de ne pas les utiliser. D&amp;#8217;une part parce que vous faites bien ce que vous voulez (c&amp;#8217;est aussi ça le Web) et d&amp;#8217;autre part parce qu&amp;#8217;il m&amp;#8217;arrive même à moi de m&amp;#8217;en servir et ce serait quand même assez gonflé de ma part de vous dire «&amp;#160;faites ce que je dit, pas ce que je fait&amp;#160;» &lt;img src=&quot;/themes/default/smilies/wink.png&quot; alt=&quot;;)&quot; class=&quot;smiley&quot; /&gt;&lt;/p&gt;
&lt;p&gt;L&amp;#8217;idée, c&amp;#8217;est plutôt de vous détailler les risques auxquels vous vous exposez pour que vous puissiez ensuite faire votre choix en votre âme et conscience.&lt;/p&gt;
&lt;h2&gt;Performance&lt;/h2&gt;
&lt;p&gt;L&amp;#8217;usage de ces scripts induit un certain nombre de biais dans les performances de vos sites. Souvent, les scripts comme -prefix-free sont appréciés car «&amp;#160;ils permettent de réduire le poids des CSS&amp;#160;». Ce qui est vrai mais au prix du poids du script lui-même (le jeu en vaut-il la chandelle) et de requêtes HTTP supplémentaires (vous êtes sûr de n&amp;#8217;avoir aucun problème de latence&amp;#160;?). &lt;/p&gt;
&lt;p&gt;Au delà de ces points largement discutables il y a tout de même quelques autres éléments à considérer&amp;#160;:&lt;/p&gt;
&lt;ol&gt;&lt;li&gt;Le rendu complet de votre site est suspendu au chargement de vos scripts. Le temps de rendu peut donc être altéré si vous êtes sur des connexions de mauvaise qualité comme du EDGE en réseau mobile. Cela peut se constater de manière bénigne avec la présence d&amp;#8217;un léger &lt;a hreflang=&quot;en&quot; href=&quot;http://bluerobot.com/web/css/fouc.asp/&quot;&gt;FOUC&lt;/a&gt; ou bien plus gravement en cas de problème de chargement du script ce qui peut complètement casser votre design.&lt;/li&gt;
&lt;li&gt;Le rendu devient également dépendant des performances globales d’exécution de vos scripts. Avec un seul petit script qui va agir sur une petite feuille de style, vous ne verrez jamais de problème. Mais que va-t-il se passer avec plusieurs centaines de Ko de scripts et de feuilles de style&amp;#160;? Par exemple, un script comme -prefix-free est un script linéaire&amp;#160;: plus la feuille de style sera grosse, plus il prendra de temps pour s’exécuter car il l&amp;#8217;examine entièrement. Que se passera-t-il alors si ce script est ralenti ou gêné ou traité après tous les autres scripts de la page (ce qui inclut vos scripts, mais également ceux que vous ne connaissez pas et qui sont utilisés par les extensions ou les bookmarklets de l&amp;#8217;utilisateur)&amp;#160;?&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Bref, utiliser ce genre de script vous fait consommer des ressources que vous pourriez utiliser pour des choses plus importantes que du style avec tout les effets de bords potentiels que je viens de vous énumérer.&lt;/p&gt;
&lt;h2&gt;Maintenabilité&lt;/h2&gt;
&lt;p&gt;Un des principaux avantages mis en avant pour ces scripts, c&amp;#8217;est la simplification de la maintenance. Raphael Goetter l&amp;#8217;a d’ailleurs bien &lt;a hreflang=&quot;fr&quot; href=&quot;http://blog.goetter.fr/post/17482780022/prefix-free-pour-ou-contre&quot;&gt;expliqué sur son blogue&lt;/a&gt;. Là, je crois qu&amp;#8217;il faut s&amp;#8217;y arrêter quelques minutes.&lt;/p&gt;
&lt;p&gt;Chaque script apporte son lot d&amp;#8217;avantages, mais il apporte également son lot de problèmes. Aucun script n&amp;#8217;étant parfait du premier coup, vous allez également devoir assurer sa maintenance. Il vous faudra le mettre à jour en fonction de ses propres évolutions ou prendre le risque de vous retrouver coincé avec un outil qui ne vous rendra plus les services que vous attendiez.&lt;/p&gt;
&lt;p&gt;Il faut prendre en considération que ces scripts sont intimement liés à vos feuilles de style car plus vous les voudrez génériques plus ils seront volumineux et potentiellement bugués. Concrètement, cela veut dire qu&amp;#8217;à chaque fois que vous allez mettre vos feuilles de style à jour, vous allez devoir vous assurer que le script fait bien son travail. Cela signifie plus de tests et en cas d&amp;#8217;erreur, plus de temps pour débuguer car vous aurez alors deux sources d&amp;#8217;erreurs potentielles.&lt;/p&gt;
&lt;p&gt;C&amp;#8217;est particulièrement vrai avec un script du type de -prefix-free. Pour vous épargner de saisir quelques lignes de CSS en plus, vous vous rajoutez un risque projet non-négligeable. Tant que ça marchera, oui, vous gagnerez du temps. Par contre, à la seconde ou vous allez rencontrer un problème, vous allez perdre beaucoup de temps. Sera-ce plus ou moins que le temps gagné&amp;#160;? Difficile à dire car cela dépendra énormément de votre connaissance des technologies en jeu ainsi que des outils que vous utilisez. Mais encore une fois, pourquoi prendre un risque là ou vous n&amp;#8217;en aviez pas avant&amp;#160;?&lt;/p&gt;
&lt;h2&gt;Et l&amp;#8217;utilisateur dans tout ça&amp;#160;?&lt;/h2&gt;
&lt;p&gt;Alors malgré tout ça, faut-il vraiment renoncer à utiliser tous ces scripts pourtant bien pratiques&amp;#160;? Il n&amp;#8217;y a pas de réponse simple à ça. Pour être franc, il n&amp;#8217;y a jamais de réponse simple en matière d&amp;#8217;utilisation des technologies Web. Les contextes projets sont tous différents et certains justifient pleinement l&amp;#8217;usage de ces scripts.&lt;/p&gt;
&lt;p&gt;Néanmoins, avant de les utiliser, je vous invite à vous poser les questions suivantes&amp;#160;:&lt;/p&gt;
&lt;ol&gt;&lt;li&gt;&lt;strong&gt;Le script que je vais utiliser me permet-il de compenser un manque de compétences (techniques ou organisationnelles) de l&amp;#8217;équipe projet&amp;#160;?&lt;/strong&gt;&lt;br /&gt;Dans l&amp;#8217;affirmative, cela reviens à essayer de mettre un pansement sur une plaie ouverte. Si la plaie est petite, cela permettra de patienter le temps que l&amp;#8217;équipe se forme aux techniques requises. Si la plaie est profonde, ça ne fera que retarder le moment où il faudra prendre des mesures drastiques (et donc coûteuses) pour éviter l&amp;#8217;infection.&lt;br /&gt;Préférez un bon plan de formation à moyen terme et à court terme, prévoyez l&amp;#8217;intervention d&amp;#8217;un développeur sénior capable d’épauler l&amp;#8217;équipe. Si vous travaillez seul, faites l&amp;#8217;effort de vous former ou changez de métier.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Le script que je vais utiliser est-il là uniquement pour mon propre confort&amp;#160;?&lt;/strong&gt;&lt;br /&gt;Si c&amp;#8217;est le cas, sachez que j&amp;#8217;ai alors assez peu de considération pour vous (je sais, ça vous fait un belle jambe, mais au moins c&amp;#8217;est dit). Ce genre d&amp;#8217;attitude égoïste est exactement ce qui fait que le Web ouvert, standard et interopérable s&amp;#8217;étiole. Si vous pouvez faire la même chose sans utiliser de script, faites le. Vous rendrez service à tout le monde en commençant par vous-même &lt;img src=&quot;/themes/default/smilies/wink.png&quot; alt=&quot;;)&quot; class=&quot;smiley&quot; /&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Le script que je vais utiliser me permet-il d&amp;#8217;améliorer l’expérience utilisateur&amp;#160;?&lt;/strong&gt;&lt;br /&gt;Là, effectivement on peut sans doute se permettre de l&amp;#8217;utiliser. L&amp;#8217;utilisateur devrait toujours être votre point de référence. Quand vous réalisez un site Web, il y aura toujours au final un utilisateur qui va s&amp;#8217;en servir. C&amp;#8217;est compliqué de se dire qu&amp;#8217;on travaille pour un utilisateur. En effet, trop souvent, les promoteurs et acteurs d&amp;#8217;un projet se concentrent sur leur propres préoccupations. Les developpeurs et la pureté technique, les responsables métier et leur ROI, les chefs de projet et leur suivi budgétaire, Les designers et leur égo démesuré&amp;#8230; autant d’écueils qu&amp;#8217;on a tous un jour rencontrés. L&amp;#8217;utilisateur, c&amp;#8217;est un peu la petite lumière dans la nuit&amp;#8230; ne le perdez jamais de vue, c&amp;#8217;est votre bouée de sauvetage.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Alors voilà, malgré toute ma bonne volonté et même si je trouve que -prefix-free ou cssFX sont de très beaux projets, les utiliser revient, pour moi, à répondre «&amp;#160;oui&amp;#160;» à ma deuxième question. Vous comprendrez donc qu&amp;#8217;en ce qui me concerne, je ne peux pas cautionner son usage sur un site en production. Je peux comprendre qu&amp;#8217;on n&amp;#8217;ait pas envie de passer des heures à maintenir des listes sans fin de propriétés préfixées. Mais dans ce cas, faites plutôt le choix des préprocesseurs CSS (LESS, SASS, etc.) qui vous permettront de manipuler des feuilles de style plus simples tout en vous assurant qu&amp;#8217;elles comporteront bien tous les préfixes qui vont bien au moment de leur publication.&lt;/p&gt;
&lt;p&gt;&lt;em&gt;PS&amp;#160;: Merci à Julien et Richard pour la relecture de mon orthographe déficiente &lt;img src=&quot;/themes/default/smilies/smile.png&quot; alt=&quot;:)&quot; class=&quot;smiley&quot; /&gt;&lt;/em&gt;&lt;/p&gt;</description>

    

      </item>
  
  <item>
    <title>Des effets pour le Web</title>
    <link>http://jeremie.patonnier.net/post/2012/01/12/Des-effets-pour-le-Web</link>
    <guid isPermaLink="false">urn:md5:16a6f2bb353a700e14ca0bed0405a292</guid>
    <pubDate>Thu, 12 Jan 2012 09:00:00 +0100</pubDate>
    <dc:creator>Jeremie</dc:creator>
        <category>Web</category>
        <category>CSS</category><category>Firefox</category><category>Internet Explorer</category><category>SVG</category><category>webdesign</category><category>Webkit</category>
    <description>&lt;p&gt;Cet article est la traduction d&amp;#8217;&lt;a hreflang=&quot;en&quot; href=&quot;http://drublic.de/blog/effects-for-the-web/&quot;&gt;un article de Christian «&amp;#160;Schepp&amp;#160;» Schaefer&lt;/a&gt; à propos des nouvelles propriétés de filtres CSS3 et montre comment commencer à les utiliser tout en proposant des solution de repli basées sur ce que supportent les navigateurs actuels.&lt;/p&gt;    &lt;p&gt;A la fin des années 90, CSS 2.1 nous a fourni un ensemble d&amp;#8217;outils de base pour pouvoir enfin se débarrasser des mises en page en tableaux. Maintenant c&amp;#8217;est le tour de CSS3 qui nous donne de nouveaux outils plus précis pour gérer les détails de mise en forme&amp;#160;: Les fontes embarquées, les coins arrondis, les dégradés, la transparence des éléments et des couleurs, les ombre portées sur le texte et les boites, etc.&lt;/p&gt;
&lt;p&gt;Évidement, lorsqu&amp;#8217;on compare notre outillage à celui de logiciels comme Photoshop, on se dit qu&amp;#8217;on pourrait rêver mieux. Ce genre de logiciel permet, par exemple, de désaturer une image ou bien de la rendre plus nette ou plus floue. Pourquoi aurions-nous besoin de ce genre d&amp;#8217;outil pour le Web&amp;#160;? Et bien, désaturer ou flouter une partie de page Web peut être un moyen de guider le regard de vos visiteurs sur des zones choisies. Ça pourrais aussi aider vos visiteurs à concentrer leur attention sur les zones qui n&amp;#8217;ont pas été modifiées. Par exemple, on peut utiliser ce genre d&amp;#8217;effets pour mettre en scène une galerie d&amp;#8217;images&amp;#160;:&lt;/p&gt;
&lt;p&gt;&lt;a hreflang=&quot;en&quot; href=&quot;http://mikematas.com/#%21g9/2nLk/photos/one_week_in_japan_-_3_of_5&quot;&gt;&lt;img title=&quot;Mike Matas - One Week In Japan&quot; alt=&quot;Mike Matas - One Week In Japan&quot; src=&quot;http://jeremie.patonnier.net/public/web-effect/Mike-Matas-One-Week-In-Japan.png&quot; /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;D&amp;#8217;un autre coté, un effet de netteté peut être utile lorsque vous réduisez une image dans le navigateur. Sans lui, vous allez perdre un certain nombre de détails sur cette image.&lt;/p&gt;
&lt;p&gt;&lt;img alt=&quot;sharpen.jpg&quot; src=&quot;http://jeremie.patonnier.net/public/web-effect/sharpen.jpg&quot; /&gt;&lt;/p&gt;
&lt;p&gt;Voila, ce serait génial si nous pouvions avoir ce genre d&amp;#8217;effets à notre disposition, un peu comme la propriété CSS &lt;code&gt;opacity&lt;/code&gt; qui nous permet de rendre un élément transparent. Malheureusement, ce n&amp;#8217;est pas le cas.&lt;/p&gt;
&lt;h2&gt;Le &lt;em&gt;status quo&lt;/em&gt; actuel&lt;/h2&gt;
&lt;p&gt;Au lieu de cela, pour simuler un effet de désaturation/niveau de gris nous sommes actuellement obligés de passer en revue «&amp;#160;à la main&amp;#160;», via Javascript, toutes les propriétés utilisant de la couleur sur un éléments donnée pour leur attribuer la valeur de gris que l&amp;#8217;on veut. Dès que l&amp;#8217;on doit faire face à des images ou de la vidéo, c&amp;#8217;est encore plus compliqué&amp;#160;: Dans ce cas-là, nous avons besoin de nous appuyer sur la balise &lt;a hreflang=&quot;en&quot; href=&quot;http://spyrestudios.com/html5-canvas-image-effects-black-white/&quot;&gt;Canvas de HTML5 pour pouvoir changer leur couleur pixel par pixel&lt;/a&gt; puis pour remplacer l&amp;#8217;élément d&amp;#8217;origine. Même si nous nous appuyons sur des bibliothèques tel que &lt;a hreflang=&quot;en&quot; href=&quot;http://camanjs.com/examples&quot;&gt;CamanJS&lt;/a&gt; ou &lt;a hreflang=&quot;en&quot; href=&quot;http://www.iliasiovis.com/hoverizr/&quot;&gt;Hoverizr&lt;/a&gt;, ça reste quand même un truc assez sale.&lt;/p&gt;
&lt;p&gt;Un effet de flou peut également être simulé à l&amp;#8217;aide des propriétés &lt;a hreflang=&quot;de&quot; href=&quot;http://webstandard.kulando.de/post/2011/12/09/css3-text-shadow-erzeugt-blur-effekt-tag-10-im-css3-adventskalender-2011&quot;&gt;text-shadow&lt;/a&gt; et &lt;a hreflang=&quot;en&quot; href=&quot;http://tympanus.net/codrops/2011/12/14/item-blur-effect-with-css3-and-jquery/&quot;&gt;box-shadow&lt;/a&gt; en leur appliquant la même couleur que le texte ou l&amp;#8217;arrière-plan auquel elles se rapportent. Le problème, c&amp;#8217;est que cette illusion ne fonctionnera pas avec les boîtes multicolores non plus qu&amp;#8217;avec les images ou les vidéos comme précédemment. Une fois de plus, il faudra se reposer sur des manipulation à base de Canvas HTML5. Arf!&lt;/p&gt;
&lt;p&gt;&lt;a hreflang=&quot;en&quot; href=&quot;http://tympanus.net/codrops/2011/12/14/item-blur-effect-with-css3-and-jquery/&quot;&gt;&lt;img alt=&quot;Item Blur Effect with CSS3 and jQuery&quot; src=&quot;http://jeremie.patonnier.net/public/web-effect/Item-Blur-Effect-with-CSS3-and-jQuery-Google-Chrome_2011-12-18_11-37-58.png&quot; /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Á propos de la balise Canvas: La bibliothèque &lt;a hreflang=&quot;en&quot; href=&quot;https://github.com/pmura/blurry.js&quot;&gt;blurry.js&lt;/a&gt; propose une solution particulièrement brutale à cette histoire de flou. Elle va extraire tout le contenu à flouter, va le recréer dans une balise Canvas (en utilisant partiellement Cufón), va le flouter et enfin va réinjecter le tout à l&amp;#8217;emplacement de l’original.&lt;/p&gt;
&lt;p&gt;En ce qui concerne la netteté, il n&amp;#8217;existe actuellement aucun truc basé sur CSS pour réaliser un tel effet, ce qui nous laisse une fois de plus seul face à la balise Canvas.&lt;/p&gt;
&lt;h2&gt;SVG à la rescousse&lt;/h2&gt;
&lt;p&gt;Il est intéressant de noter que SVG connaît la notion de &lt;a hreflang=&quot;en&quot; href=&quot;http://electricbeach.org/?p=950&quot;&gt;filtres&lt;/a&gt; depuis des lustres avec, entre autre, les mélanges de couleurs, l&amp;#8217;ajustement de la luminosité et du contraste, les effets d&amp;#8217;éclairage, le «&amp;#160;&lt;em lang=&quot;en&quot;&gt;displacement mapping&lt;/em&gt;&amp;#160;», les flous gaussien et de déplacement, le bruit, la netteté, etc.&lt;/p&gt;
&lt;p&gt;Ainsi, maintenant que SVG est de plus en plus largement supporté, nous pourrions essayer de placer nos contenus, non plus dans du HTML, mais plutôt dans du SVG que l&amp;#8217;on placerait dans du HTML. Nous serions alors capables d&amp;#8217;&lt;a hreflang=&quot;en&quot; href=&quot;http://dev.opera.com/articles/view/how-to-do-photoshop-like-effects-in-svg/&quot;&gt;appliquer n&amp;#8217;importe quel effet à notre contenu&lt;/a&gt;. Le problème, c&amp;#8217;est que la plupart des intégrateurs HTML risquent de ne pas être très chauds pour se mettre à produire du balisage SVG de ce genre&amp;#160;:&lt;/p&gt;
&lt;pre class=&quot;sh_xml&quot;&gt;&amp;lt;text font-family=&quot;Arial&quot; font-weight=&quot;900&quot; font-size=&quot;40&quot; x=&quot;20&quot; y=&quot;55%&quot;&amp;gt;SVG Example&amp;lt;/text&amp;gt;&lt;/pre&gt;&lt;p&gt;Il existe un truc un peu plus sympa en SVG, c&amp;#8217;est la balise &lt;code&gt;foreignObject&lt;/code&gt;. &lt;a hreflang=&quot;en&quot; href=&quot;http://ajaxian.com/archives/foreignobject-hey-youve-got-html-in-my-svg&quot;&gt;Elle nous permet d&amp;#8217;inclure n&amp;#8217;importe quel type de balisage à l’intérieur d&amp;#8217;un contenu SVG&lt;/a&gt;. C&amp;#8217;est un peu comme mettre du SVG directement dans un document HTML5, mais dans l&amp;#8217;autre sens. Dès que vous avez inclus vos trucs dans du SVG, vous pouvez y appliquer des filtres comme vous le feriez pour n&amp;#8217;importe qu&amp;#8217;elle autre partis de votre contenu SVG. &lt;a hreflang=&quot;en&quot; href=&quot;http://dev.opera.com/articles/view/applying-color-tints-to-web-pages-with-s/&quot;&gt;Vous pouvez embarquer une page HTML entière et lui appliquer des filtres&lt;/a&gt;, ou &lt;a href=&quot;http://www.flother.com/examples/canvas-blur/v4/blur.svg&quot;&gt;vous restreindre à une simple image bitmap&lt;/a&gt;. Bien sûr, vous devez mettre votre contenu SVG lui-même dans une page HTML, ce qui peut conduire à quelques migraines (du HTML embarqué dans du SVG embarqué dans du HTML). Le support navigateur pour la balise &lt;code&gt;foreignObject&lt;/code&gt; est &lt;a hreflang=&quot;en&quot; href=&quot;http://caniuse.com/#feat=svg-html&quot;&gt;plutôt bon&lt;/a&gt;. Seul Internet Explorer reste à la traine. Heureusement, Internet Explorer 10 va rattraper le coup en supportant à la fois les filtres SVG et la balise &lt;code&gt;foreignObject&lt;/code&gt;.&lt;/p&gt;
&lt;h2&gt;Les filtres SVG sur du contenu HTML via CSS&lt;/h2&gt;
&lt;p&gt;Depuis sa version 3.5, Firefox va encore plus loin. Il vous permet d&amp;#8217;appliquer un filtre SVG, défini dans un document externe, à n&amp;#8217;importe quel contenu HTML en passant simplement par une feuille de style. Nous pouvons, par exemple, définir dans un document SVG un filtre de flou gaussien (feGaussianBlur) ayant un rayon de 2 pixels et lui donner l&amp;#8217;identifiant &lt;code&gt;gaussian_blur&lt;/code&gt;&amp;#160;:&lt;/p&gt;
&lt;pre class=&quot;sh_xml&quot;&gt;&amp;lt;?xml version=&quot;1.0&quot; standalone=&quot;no&quot;?&amp;gt;&lt;br /&gt;&amp;lt;!DOCTYPE svg PUBLIC &quot;-//W3C//DTD SVG 1.1//EN&quot; &lt;br /&gt;&quot;http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd&quot;&amp;gt;&lt;br /&gt;&amp;lt;svg width=&quot;1&quot; height=&quot;1&quot; version=&quot;1.1&quot; &lt;br /&gt;xmlns=&quot;http://www.w3.org/2000/svg&quot; &lt;br /&gt;xmlns:xlink=&quot;http://www.w3.org/1999/xlink&quot;&amp;gt;&lt;br /&gt;&amp;nbsp; &amp;lt;defs&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;filter id=&quot;gaussian_blur&quot;&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;feGaussianBlur in=&quot;SourceGraphic&quot; stdDeviation=&quot;2&quot; /&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/filter&amp;gt;&lt;br /&gt;&amp;nbsp; &amp;lt;/defs&amp;gt;&lt;br /&gt;&amp;lt;/svg&amp;gt;&lt;/pre&gt;&lt;p&gt;On peut alors référencer ce filtre à l&amp;#8217;aide du nom du fichier SVG et de son l&amp;#8217;identifiant au sein de notre feuille de style pour l&amp;#8217;appliquer à toutes les images&amp;#160;:&lt;/p&gt;
&lt;pre class=&quot;sh_css&quot;&gt;img {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; filter: url(blur.svg#gaussian_blur);&lt;br /&gt;}&lt;/pre&gt;&lt;p&gt;&lt;img alt=&quot;&quot; src=&quot;http://jeremie.patonnier.net/public/web-effect/Unscha_rfe-via-CSS-Filter-SVG-Mozilla-Firefox_2011-12-18_21-18-59.png&quot; /&gt;&lt;/p&gt;
&lt;p&gt;Vous pouvez voir cette &lt;a hreflang=&quot;en&quot; href=&quot;http://jeremie.patonnier.net/public/web-effect/blur/blur.html&quot;&gt;démo en &lt;em lang=&quot;en&quot;&gt;live&lt;/em&gt; ici&lt;/a&gt;. Hélas, comme je vous le disais, ça ne fonctionne qu&amp;#8217;avec Firefox.&lt;/p&gt;
&lt;p&gt;Bien heureusement, ce n&amp;#8217;est pas la fin de l&amp;#8217;histoire. Internet Explorer connaît lui aussi les filtres. Ceux-ci ne sont pas basés sur SVG, mais sur des mécanismes propres à la bibliothèque graphique de Windows&amp;#160;: DirectX. Parmi ces filtres certains sont bien connus pour nous aider à résoudre certains bugs (le filtre alpha pour les image PNG) ou pour imiter certaines fonctionnalités de CSS3 (le filtre des dégradé). Néanmoins, il en existes d&amp;#8217;autres très similaires aux filtres SVG&amp;#160;:&lt;/p&gt;
&lt;pre class=&quot;sh_css&quot;&gt;/* Flou de 2 pixels de rayon */&lt;br /&gt;filter: progid:DXImageTransform.Microsoft.Blur(pixelradius=2);&lt;br /&gt;/* Flou de mouvement de 13 pixel avec un angle de 310° */&lt;br /&gt;filter: progid:DXImageTransform.Microsoft.MotionBlur(strength=13, direction=310);&lt;br /&gt;/* niveau de gris / désaturation */&lt;br /&gt;filter: gray;&lt;br /&gt;/* Effet « Rayon X » (inversion des niveaux de gris) */&lt;br /&gt;filter: xray;&lt;br /&gt;/* cône de lumière */&lt;br /&gt;filter: light();&lt;br /&gt;/* Extrusion */&lt;br /&gt;filter: progid:DXImageTransform.Microsoft.emboss();&lt;/pre&gt;&lt;p&gt;Vous trouverez une liste complète de ces filtres ici&amp;#160;: &lt;a hreflang=&quot;en&quot; href=&quot;http://msdn.microsoft.com/en-us/library/ms673539%28v=VS.85%29.aspx&quot;&gt;http://msdn.microsoft.com/en-us/library/ms673539(v=VS.85).aspx&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Ainsi, à l&amp;#8217;aide de commentaires conditionnels, nous pouvons désormais proposer un certain nombre d&amp;#8217;effets à deux familles de navigateurs qui à elles deux représente une part non négligeable du marché&amp;#160;:&lt;/p&gt;
&lt;pre class=&quot;sh_html&quot;&gt;&amp;lt;!DOCTYPE HTML&amp;gt;&lt;br /&gt;&amp;lt;!--[if lte IE 9]&amp;gt; &amp;lt;html class=&quot;ie&quot; lang=&quot;en&quot;&amp;gt; &amp;lt;![endif]--&amp;gt;&lt;br /&gt;&amp;lt;!--[if gt IE 9]&amp;gt;&amp;lt;!--&amp;gt; &amp;lt;html lang=&quot;en&quot;&amp;gt; &amp;lt;!--&amp;lt;![endif]--&amp;gt;&lt;br /&gt;&amp;lt;head&amp;gt;&lt;br /&gt;&amp;lt;meta charset=&quot;utf-8&quot;&amp;gt;&lt;br /&gt;&amp;lt;title&amp;gt;Blur via CSS&amp;lt;/title&amp;gt;&lt;br /&gt;&amp;lt;style&amp;gt;&lt;br /&gt;img {&lt;br /&gt;&amp;nbsp; filter: url(blur.svg#gaussian_blur);&lt;br /&gt;}&lt;br /&gt;.ie img {&lt;br /&gt;&amp;nbsp; margin: -2px;&lt;br /&gt;&amp;nbsp; filter: progid:DXImageTransform.Microsoft.blur(pixelradius=2);&lt;br /&gt;&amp;nbsp; zoom: 1;&lt;br /&gt;}&lt;br /&gt;&amp;lt;/style&amp;gt;&lt;br /&gt;&amp;lt;/head&amp;gt;&lt;br /&gt;&amp;lt;body&amp;gt;&lt;br /&gt;&amp;nbsp; &amp;lt;img src=&quot;http://jeremie.patonnier.net/post/2012/01/12/stadt.jpg&quot;&lt;br /&gt;&amp;nbsp;&amp;nbsp; alt=&quot;Some rights reserved by zigazou76&quot;&lt;br /&gt;&amp;nbsp;&amp;nbsp; width=&quot;500&quot; height=&quot;333&quot;&amp;gt;&lt;br /&gt;&amp;lt;/body&amp;gt;&lt;br /&gt;&amp;lt;/html&amp;gt;&lt;/pre&gt;&lt;p&gt;&lt;em&gt;&lt;code&gt;margin: -2px&lt;/code&gt; permet de contre balancer le changement de dimension de l&amp;#8217;image provoqué par le filtre. &lt;code&gt;zoom: 1&lt;/code&gt; est necessaire pour que la plupart des filtres fonctionnent avec in IE6/7. Malheureusement, IE10 ne supporte plus les filtres propriétaires de Microsoft et n&amp;#8217;autorise pas encore les filtres SVG sur du contenu HTML &lt;img src=&quot;/themes/default/smilies/sad.png&quot; alt=&quot;:(&quot; class=&quot;smiley&quot; /&gt;&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&lt;a hreflang=&quot;en&quot; href=&quot;http://jeremie.patonnier.net/public/web-effect/blur/blur2.html&quot;&gt;Vous trouverez ici la version modifié de l&amp;#8217;exemple&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Un certain nombre de personnes ont apprécié l&amp;#8217;idée de Firefox d&amp;#8217;ouvrir les filtres SVG au contenu HTML. Ils ont donc formé un nouveau groupe au W3C appelé &lt;em lang=&quot;en&quot;&gt;W3C FX Task Force&lt;/em&gt; dont l&amp;#8217;objectif est de standardiser et simplifier l&amp;#8217;usage des filtres SVG dans tous les navigateurs. Puisque Firefox avait défriché le terrain des filtres d&amp;#8217;effets, le premier brouillon de spécification est vite arrivé sous le nom de &lt;a style=&quot;font-style: italic;&quot; href=&quot;https://dvcs.w3.org/hg/FXTF/raw-file/tip/filters/index.html&quot; target=&quot;_blank&quot;&gt;W3C Filter Effects 1.0&lt;/a&gt;. Les mécanismes proposés dans ce brouillon fonctionnent à peu près comme dans Firefox tout en offrant en plus un certain nombre de raccourcis vers les effets les plus intéressants. Les filtres bénéficiant d&amp;#8217;un raccourci fonctionnent sans l&amp;#8217;aide d&amp;#8217;un fichier SVG externe. Ils sont directement codés au cœur du navigateur. Les raccourcis en question sont&amp;#160;:&lt;/p&gt;
&lt;ul&gt;&lt;li&gt;grayscale&lt;/li&gt;
&lt;li&gt;sepia&lt;/li&gt;
&lt;li&gt;saturate&lt;/li&gt;
&lt;li&gt;hue-rotate&lt;/li&gt;
&lt;li&gt;invert&lt;/li&gt;
&lt;li&gt;opacity&lt;/li&gt;
&lt;li&gt;brightness&lt;/li&gt;
&lt;li&gt;contrast&lt;/li&gt;
&lt;li&gt;blur&lt;/li&gt;
&lt;li&gt;drop-shadow&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Un autre avantage de ces raccourcis, c&amp;#8217;est qu&amp;#8217;ils peuvent être animés via les transformations et les animations CSS&amp;#160;:&lt;/p&gt;
&lt;pre class=&quot;sh_css&quot;&gt;.foo {&lt;br /&gt;&amp;nbsp; filter: blur(2px);&lt;br /&gt;&amp;nbsp; transition: filter 1s ease-in-out;&lt;br /&gt;}&lt;br /&gt;&amp;nbsp;&lt;br /&gt;.foo:hover {&lt;br /&gt;&amp;nbsp; filter: blur(0);&lt;br /&gt;}&lt;/pre&gt;&lt;p&gt;Ce serait plus difficile et moins efficace de réaliser cela dans un document SVG.&lt;/p&gt;
&lt;p&gt;Pour finir, les effets de filtre prévois d&amp;#8217;être enrichie à l&amp;#8217;aide des &lt;a hreflang=&quot;en&quot; href=&quot;http://www.adobe.com/devnet/html5/articles/css-shaders.html&quot;&gt;&lt;em lang=&quot;en&quot;&gt;vertex shaders&lt;/em&gt; et &lt;em lang=&quot;en&quot;&gt;fragment shaders&lt;/em&gt; d&amp;#8217;OpenGL/WebGL&lt;/a&gt;. Les &lt;em lang=&quot;en&quot;&gt;vertex shaders&lt;/em&gt; permettront d&amp;#8217;appliquer un maillage 2D sur un élément que vous pourrez alors déformer en déplaçant tous les points du maillage selon une formule mathématique de votre choix. Les &lt;em lang=&quot;en&quot;&gt;fragment shaders&lt;/em&gt; d&amp;#8217;un autre côté permettront de réaliser ces transformations mathématiques sur les couleurs de chacun des pixels de cet élément. Ces deux types de filtres bénéficieront en plus de l’accélération matérielle de votre carte graphique.&lt;/p&gt;
&lt;p&gt;&lt;a hreflang=&quot;en&quot; href=&quot;http://www.adobe.com/devnet/html5/articles/css-shaders.html&quot;&gt;&lt;img alt=&quot;CSS shaders Cinematic effects for the web&quot; src=&quot;http://jeremie.patonnier.net/public/web-effect/CSS-shaders-Cinematic-effects-for-the-web-Adobe-Developer-Connection-Google_2011-12-18_19-31-01.png&quot; /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Par un heureux hasard, il y a quelques semaines les premières implémentations de ces filtres sont apparues dans les &lt;a hreflang=&quot;en&quot; href=&quot;http://nightly.webkit.org/&quot;&gt;compilations nocturnes de Webkit&lt;/a&gt; et sont à présent disponibles dans &lt;a hreflang=&quot;en&quot; href=&quot;http://tools.google.com/dlpage/chromesxs&quot;&gt;Chrome Canary&lt;/a&gt;. Ça veut dire que d&amp;#8217;ici 3 mois les filtres CSS seront disponibles dans la version stable de Chrome et à brève échéance dans Safari. Ça veut également dire que nous ne sommes pas loin de pouvoir commencer à utiliser des filtres CSS sur 90 à 95% du marché des navigateurs&amp;#160;!&lt;/p&gt;
&lt;p&gt;Si l&amp;#8217;on en revient à notre exemple, tout ce que nous avons à faire pour supporter Webkit est de rajouter un simple &lt;code&gt;-webkit-filter: blur(2px);&lt;/code&gt;. Néanmoins, il faudra faire attention de le placer &lt;strong&gt;après&lt;/strong&gt; la propriété &lt;code&gt;filter&lt;/code&gt; non-préfixée. La raison étant que lorsque Webkit supportera la version non-prefixée de la propriété &lt;code&gt;filter&lt;/code&gt;, la syntaxe propre à Firefox créra des problèmes avec la transition CSS que nous allons appliquer pour passer doucement entre la version flou et nette de l&amp;#8217;image via &lt;code&gt;-webkit-transition: -webkit-filter 1s ease-in-out;&lt;/code&gt;.&lt;/p&gt;
&lt;pre class=&quot;sh_html&quot;&gt;&amp;lt;!DOCTYPE HTML&amp;gt;&lt;br /&gt;&amp;lt;!--[if lte IE 9]&amp;gt; &amp;lt;html class=&quot;ie&quot;&amp;gt; &amp;lt;![endif]--&amp;gt;&lt;br /&gt;&amp;lt;!--[if gt IE 9]&amp;gt;&amp;lt;!--&amp;gt; &amp;lt;html&amp;gt; &amp;lt;!--&amp;lt;![endif]--&amp;gt;&lt;br /&gt;&amp;lt;head&amp;gt;&lt;br /&gt;&amp;lt;meta charset=&quot;utf-8&quot;&amp;gt;&lt;br /&gt;&amp;lt;title&amp;gt;Blur via CSS&amp;lt;/title&amp;gt;&lt;br /&gt;&amp;lt;style&amp;gt;&lt;br /&gt;img {&lt;br /&gt;&amp;nbsp; filter: url(blur.svg#gaussian_blur);&lt;br /&gt;&amp;nbsp; -webkit-filter: blur(2px);&lt;br /&gt;&amp;nbsp; -webkit-transition: -webkit-filter 1s ease-in-out;&lt;br /&gt;}&lt;br /&gt;img:hover {&lt;br /&gt;&amp;nbsp; filter: none;&lt;br /&gt;&amp;nbsp; -webkit-filter: blur(0);&lt;br /&gt;}&lt;br /&gt;.ie img {&lt;br /&gt;&amp;nbsp; margin: -2px;&lt;br /&gt;&amp;nbsp; filter: progid:DXImageTransform.Microsoft.blur(pixelradius=2);&lt;br /&gt;&amp;nbsp; zoom: 1;&lt;br /&gt;}&lt;br /&gt;.ie img:hover {&lt;br /&gt;&amp;nbsp; margin: 0;&lt;br /&gt;&amp;nbsp; filter: none;&lt;br /&gt;}&lt;br /&gt;&amp;lt;/style&amp;gt;&lt;br /&gt;&amp;lt;/head&amp;gt;&lt;br /&gt;&amp;lt;body&amp;gt;&lt;br /&gt;&amp;nbsp; &amp;lt;img src=&quot;http://jeremie.patonnier.net/post/2012/01/12/stadt.jpg&quot;&lt;br /&gt;&amp;nbsp;&amp;nbsp; alt=&quot;Some rights reserved by zigazou76&quot;&lt;br /&gt;&amp;nbsp;&amp;nbsp; width=&quot;500&quot; height=&quot;333&quot;&amp;gt;&lt;br /&gt;&amp;lt;/body&amp;gt;&lt;br /&gt;&amp;lt;/html&amp;gt;&lt;/pre&gt;
&lt;p&gt;&lt;a hreflang=&quot;en&quot; href=&quot;http://jeremie.patonnier.net/public/web-effect/blur/blur3.html&quot;&gt;La dernière version de l&amp;#8217;exemple&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Et voila, des effets de filtres pour tout le monde&amp;#160;! Faisons de 2012 l&amp;#8217;année des filtres CSS et &lt;a hreflang=&quot;en&quot; href=&quot;http://davidwalsh.name/dw-content/css-filters.php&quot;&gt;amusez-vous bien avec&lt;/a&gt;.&lt;/p&gt;</description>

    

      </item>
  
  <item>
    <title>Paris-Web 2010 : CSS3 Aujourd'hui</title>
    <link>http://jeremie.patonnier.net/post/2011/02/16/Paris-Web-2010-CSS3-Aujourd-hui</link>
    <guid isPermaLink="false">urn:md5:536dadcaa5b9be04be6eff968c198164</guid>
    <pubDate>Wed, 16 Feb 2011 13:00:00 +0100</pubDate>
    <dc:creator>Jeremie</dc:creator>
        <category>Web</category>
        <category>CSS</category><category>paris-web</category><category>vidéo</category>
    <description>Maintenant, que les vidéos sont en ligne, voici un petit retour sur Paris-Web 2010 ou j&amp;#8217;ai animé un atelier sur le thème &amp;#8220;CSS3 Aujourd&amp;#8217;hui&amp;#8221;.&lt;br /&gt;    &lt;p&gt;Depuis maintenant 5 ans, Paris-Web, c&amp;#8217;est un peu le rendez-vous annuel des faiseurs de Web français. Cette année fut assez exceptionnelle, et tous les participants (visiteurs, orateurs et organisateurs) sont tous à peu près d&amp;#8217;accord pour dire que c&amp;#8217;était un excellent millésime (si ce n&amp;#8217;est le meilleur pour l&amp;#8217;instant). Les conférences étaient d&amp;#8217;un niveau exceptionnel, l&amp;#8217;organisation sans tache et le hashtag #sharethelove a été largement employé sur Twitter pour qualifier l&amp;#8217;ambiance générale (bon, on n&amp;#8217;a pas pu éviter tous les trolls, mais ça s&amp;#8217;est bien passé).&lt;/p&gt;
&lt;p&gt;Sur les conférences, j&amp;#8217;ai noté en particulier celle de &lt;a hreflang=&quot;fr&quot; href=&quot;http://www.paris-web.fr/2010/programme/macrotypographie-page-web.php&quot;&gt;Anne-Sophie Fradier sur la macro-typographie&lt;/a&gt; (qui a subtilement servi de tremplin au projet que j&amp;#8217;ai monté avec elle et d&amp;#8217;autres d&amp;#8217;un site dédié à &lt;a hreflang=&quot;fr&quot; href=&quot;http://typographisme.net&quot;&gt;la typographie sur le Web&lt;/a&gt;) et celle de &lt;a hreflang=&quot;fr&quot; href=&quot;http://www.paris-web.fr/2010/programme/html5-et-ses-amis-nouvelles-apis.php&quot;&gt;Paul Rouget sur les nouvelles API issu de HTML5&lt;/a&gt;. Paul était super content car d&amp;#8217;une part tout a marché et les démos montrées étaient franchement bluffantes (faire un sondage en live grâce aux Web Sockets, c&amp;#8217;est un peu la classe quand même).&lt;/p&gt;
&lt;p&gt;De mon coté, j&amp;#8217;ai animé un atelier sur le thème &amp;#8220;CSS3 Aujourd&amp;#8217;hui&amp;#8221;. J&amp;#8217;y ai passé en revue ce qu&amp;#8217;il est possible de faire dès à présent avec CSS3&amp;#160;en commençant quand même sur quelques rappels importants liés à CSS2. En effet, CSS3 n&amp;#8217;est jamais qu&amp;#8217;une &amp;#8220;amélioration&amp;#8221; de CSS2. L&amp;#8217;atelier s&amp;#8217;est bien passé mais il a duré 1h30, là ou j&amp;#8217;avais du matériel pour 3h. Ceci dit, grâce à la vidéo, je me rends compte que ça ne s&amp;#8217;est pas trop vu (sauf vers la fin), même si je n&amp;#8217;ai pas pu entrer dans le code autant que je le voulais. Ceci dit, il a été possible de bien discuter avec la salle (c&amp;#8217;était le but, mais dans la vidéo c&amp;#8217;est un peu frustrant car il n&amp;#8217;y avait pas de prise de son d&amp;#8217;ambiance) et les principaux thèmes ont pu être vu.&lt;/p&gt;
&lt;p&gt;Si vous y étiez ou si vous voulez voir les exemples en même temps que vous regardez la vidéo, toutes mes slides sont disponibles&amp;#160;:&lt;/p&gt;
&lt;ul&gt;&lt;li&gt;&lt;a hreflang=&quot;fr&quot; href=&quot;http://jeremie.patonnier.net/experiences/parisweb2010/&quot;&gt;http://jeremie.patonnier.net/experiences/parisweb2010/&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Ainsi que tous les exemples de code&amp;#160;:&lt;/p&gt;
&lt;ul&gt;&lt;li&gt;&lt;a hreflang=&quot;fr&quot; href=&quot;http://jeremie.patonnier.net/experiences/parisweb2010/exemples/&quot;&gt;http://jeremie.patonnier.net/experiences/parisweb2010/exemples/&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Et donc, la vidéo de l&amp;#8217;atelier car cette année pour la première fois, certains ateliers ont été filmés (merci aux étudiants de Cifacom et à l&amp;#8217;équipe Paris-Web pour le boulot réalisé)&amp;#160;:&lt;/p&gt;
&lt;p&gt;&lt;object width=&quot;594&quot; height=&quot;475&quot; id=&quot;video&quot;&gt;
&lt;param name=&quot;movie&quot; value=&quot;http://www.dailymotion.com/swf/video/xgv2fe?additionalInfos=0&quot; /&gt;
&lt;param name=&quot;allowfullscreen&quot; value=&quot;true&quot; /&gt;
&lt;param name=&quot;allowscriptaccess&quot; value=&quot;always&quot; /&gt;
&lt;embed type=&quot;application/x-shockwave-flash&quot; src=&quot;http://www.dailymotion.com/swf/video/xgv2fe?width=594&amp;additionalInfos=0&quot; width=&quot;594&quot; height=&quot;475&quot; allowfullscreen=&quot;true&quot; allowscriptaccess=&quot;always&quot;&gt;&lt;/embed&gt;
&lt;/object&gt;&lt;/p&gt;</description>

    

      </item>
  
  <item>
    <title>Arrétez de me casser les gonades avec border-radius</title>
    <link>http://jeremie.patonnier.net/post/2011/01/03/arretez-de-me-casser-les-gonades-avec-border-radius</link>
    <guid isPermaLink="false">urn:md5:837acf50498174c4f381975e7de2362e</guid>
    <pubDate>Mon, 03 Jan 2011 09:00:00 +0100</pubDate>
    <dc:creator>Jeremie</dc:creator>
        <category>Web</category>
        <category>agacement</category><category>CSS</category><category>webdesign</category>
    <description>&lt;p&gt;Ça faisait longtemps que je ne m&amp;#8217;était pas énervé et pour bien commencer la nouvelle année, sachez le, j&amp;#8217;en ai un peu marre. Marre de quoi me diriez-vous&amp;#160;? J&amp;#8217;en ai marre de ces intégrateurs qui se gargarisent avec &lt;code&gt;border-radius&lt;/code&gt;, marre de ces gens qui ne jurent que par &lt;code&gt;box-shadow&lt;/code&gt;, marre de ces crétins qui réduisent CSS3 au module &amp;#8220;Border &amp;amp; Background&amp;#8221;. &lt;code&gt;Border-radius&lt;/code&gt;, c&amp;#8217;est l&amp;#8217;arbre qui cachent la forêt. CSS 3 est d&amp;#8217;une richesse incroyable et pour l&amp;#8217;instant, les constructeurs de navigateurs n&amp;#8217;implémentent que de toutes petites choses, le gros reste à venir (et si vous prenez 5 minutes pour aller survoler les specs, même pas les lire, juste les survoler, vous verrez qu&amp;#8217;il y a du lourd).&lt;/p&gt;
&lt;p&gt;Soyons clairs, aujourd&amp;#8217;hui, les seuls gars que je prend au sérieux à propos de CSS 3, ce sont ceux qui me parlent des sélecteurs et des Media Queries CSS 3 car c&amp;#8217;est là que se cache la vraie puissance actuelle de CSS 3 (et pour le future les transformations 2D et 3D, les différents systèmes de positionnements et de mise en page, la génération de contenu, etc. autant dire que ça va être la fête du slip le jour où on aura tout ça dans nos boites à outils). Si vous voulez vous la péter avec le module &amp;#8220;Border &amp;amp; Background&amp;#8221;, c&amp;#8217;est possible. Mais dans ce cas, c&amp;#8217;est du coté de &lt;code&gt;border-image&lt;/code&gt; qu&amp;#8217;il faut aller fouiner et surtout, surtout, arrêtez de vous extasier sur &lt;code&gt;border-radius&lt;/code&gt; et &lt;code&gt;box-shadow&lt;/code&gt; qui ne sont que de la poudre au yeux.&lt;/p&gt;    &lt;p&gt;Voilà pour l&amp;#8217;échauffement, passons à la mise à mort. Je vais vous détailler pourquoi &lt;code&gt;border-radius&lt;/code&gt; et &lt;code&gt;box-shadow&lt;/code&gt; ne sont que des résidus de cagoinces (si, si).&lt;/p&gt;
&lt;h2&gt;Le cas border-radius&lt;/h2&gt;
&lt;p&gt;Combien de fois ai-je entendu &amp;#8220;Oui, mais tu comprends, pour les bords arrondis, &lt;code&gt;border-radius&lt;/code&gt;, c&amp;#8217;est mieux&amp;#8221;. Mieux&amp;#160;? Mieux que quoi exactement&amp;#160;? Non parce que sans déconner, moi, intégrer des bords arrondis, ça fait plus de 10 ans que je le fait. Ok, ne soyons pas de mauvaise foi, &lt;code&gt;border-radius&lt;/code&gt; permet de faire des bords arrondis &amp;#8220;sans image&amp;#8221; ni &amp;#8220;sur-balisage HTML&amp;#8221; ni &amp;#8220;Javascript&amp;#8221;. C&amp;#8217;est donc bien &lt;em&gt;une autre méthode&lt;/em&gt;, parfois plus légère, pour réaliser des bords arrondis &lt;em&gt;simple&lt;/em&gt;s. Mais je ne vois pas en quoi c&amp;#8217;est &amp;#8220;mieux&amp;#8221;&amp;#160;:&lt;/p&gt;
&lt;ul&gt;&lt;li&gt;Pas d&amp;#8217;image&amp;#160;: Donc ça c&amp;#8217;est un non-argument absolue. Que dites-vous&amp;#160;? Économiser des requêtes HTTP pour les performances&amp;#160;? Vous ne connaissez pas &lt;a href=&quot;https://developer.mozilla.org/en/data_URIs&quot;&gt;les DATA URL&lt;/a&gt;&amp;#160;? Qui sont implémentées par &lt;em&gt;tous&lt;/em&gt; les navigateurs qui supportent &lt;code&gt;border-radius&lt;/code&gt; et avec &lt;a href=&quot;http://www.phpied.com/mhtml-when-you-need-data-uris-in-ie7-and-under/&quot;&gt;des équivalents pour les vieux IE&lt;/a&gt;&amp;#160;! Mmmh&amp;#160;? Réduire le poids des pages Web&amp;#160;? Non sans rire, vous en êtes à optimiser 500 octets d&amp;#8217;image (le poids maximum d&amp;#8217;une image correctement compressée pour faire l&amp;#8217;équivalent de ce que permet border-radius)&amp;#160;! Vous êtes sur que vous n&amp;#8217;avez pas autre chose à optimiser avant, comme la durée de vie du cache de vos ressources statiques par exemple&amp;#160;? Accessoirement, l&amp;#8217;utilisation d&amp;#8217;images pour gérer les bordures offre d&amp;#8217;énormes avantages graphiques car elles permettent de créer des formes bien plus subtiles et complexes donc, allez plutôt trifouiller &lt;code&gt;border-image&lt;/code&gt; et &lt;a hreflang=&quot;fr&quot; href=&quot;http://www.alsacreations.com/tuto/lire/1068-sprites-css-background-position.html&quot;&gt;apprenez à faire des sprites CSS&lt;/a&gt;, hein.&lt;/li&gt;
&lt;li&gt;Pas de sur-balisage HTML&amp;#160;: Ceci est un argument presque recevable sauf que&amp;#8230; Sauf que dans la vraie vie, ce n&amp;#8217;est vraie que si vous cherchez à intégrer des boites qui s&amp;#8217;élargissent à la fois en hauteur et en largeur et qui doivent s&amp;#8217;afficher avec des coins transparents. Une fois sortie de ce cas de figure, somme toute assez rare, il y a 9 chances sur 10 (voir 9,9 si vous vous intéressez aux sélecteurs CSS 3) que votre code source soit suffisamment balisé pour vous permettre de rajouter des bords arrondis sans avoir à vous casser la tête sur le HTML (et je ne vous parle même pas d&amp;#8217;utiliser des techniques un peu délicates comme &lt;a hreflang=&quot;en&quot; href=&quot;http://jeremie.patonnier.net/post/2010/11/22/before-et-after-des-pseudo-elements-qui-ont-du-style&quot;&gt;les pseudo-éléments CSS&lt;/a&gt;).&lt;/li&gt;
&lt;li&gt;Pas besoin de Javascript&amp;#160;: Donc, là, vous ne le voyez pas, mais je suis sous mon bureau, ravagé par une crise de fou rire. Si vous avez tout lu jusque là, vous aurez sans doute deviné que je n&amp;#8217;ai jamais utilisé une once de Javascript pour produire des bords arrondis. Mais même si c&amp;#8217;était le cas&amp;#8230; en toute honnêteté, c&amp;#8217;était quand la dernière fois que vous avez créer un site qui n&amp;#8217;embarque pas une bibliothèque Javascript à tout faire (jQuery, Prototype, YUI, etc.)&amp;#160;? Accessoirement, si vous avez pris de bonnes habitudes en terme de &lt;a hreflang=&quot;fr&quot; href=&quot;http://www.nota-bene.org/Javascript-non-intrusif-le-debat&quot;&gt;Javascript non-intrusif&lt;/a&gt;, ça ne devrait pas vous poser l&amp;#8217;ombre d&amp;#8217;un cas de conscience.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Alors, oui, &lt;code&gt;border-radius&lt;/code&gt;, ça peut être plus simple et plus rapide&amp;#8230; mais c&amp;#8217;est aussi très limité dès que vous voulez essayer de produire des bordures un peu chiadées graphiquement parlant (genre avec un petit reflet de lumière ou avec un petit déséquilibre dans les formes&amp;#8230; bref, si vous voulez un truc un peu moins raide). Et dans ce cas-là&amp;#8230; mmmh&amp;#8230; je crois qu&amp;#8217;il y a un truc en CSS 3 qui s&amp;#8217;appelle &lt;code&gt;border-image&lt;/code&gt;.&lt;/p&gt;
&lt;h2&gt;box-shadow, ni fait, ni à faire&lt;/h2&gt;
&lt;p&gt;Ayant donc d&amp;#8217;autorité décrété que &lt;code&gt;border-radius&lt;/code&gt; c&amp;#8217;était plutôt &amp;#8220;bof&amp;#8221;, je vais maintenant faire de même avec &lt;code&gt;box-shadow&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;&lt;code&gt;Box-shadow&lt;/code&gt; est cette propriété qui, comme son nom l&amp;#8217;indique, permet de créer des ombres portés et, comme son nom ne l&amp;#8217;indique pas, des effets de halo, de lumière et même&amp;#8230; de bordures&amp;#160;! Et oui&amp;#160;! En soit, c&amp;#8217;est une propriété intéressante (en tout cas beaucoup plus que &lt;code&gt;border-radius&lt;/code&gt;), dès qu&amp;#8217;on cherche à la tordre pour en faire autre choses que ce qu&amp;#8217;elle suggère. Malheureusement, elle souffres de quelques défauts que je qualifie assez volontiers de majeur&amp;#160;:&lt;/p&gt;
&lt;ul&gt;&lt;li&gt;Les ombres (ou lumières) générées sont carrées ou plus exactement, elles ont la forme exacte de la boite sur laquelle la propriété est appliquée (ce qui inclue l&amp;#8217;usage de &lt;code&gt;border-radius&lt;/code&gt; heureusement, mais pas la transparence des images, j&amp;#8217;y reviens plus loin). Certes, elles peuvent être distendues ou contractées homothétiquement, mais pas déformées à l&amp;#8217;envie. Donc, si vous souhaitez créer des effets graphiques un peu travaillés, du genre feuille-de-papier-qui-se-décolle-sur-un-coin, vous repassez par la case image (et vous ne touchez pas 20&amp;#160;000 Francs, votre client n&amp;#8217;en ayant rien à foutre que vous galériez à produire l&amp;#8217;effet qu&amp;#8217;il attend&amp;#8230; il fallait y penser avant).&lt;/li&gt;
&lt;li&gt;Si vous ne mettez pas une couleur d&amp;#8217;arrière plan à la boite qui génère l&amp;#8217;ombre, celle-ci sera&amp;#8230; troué&amp;#160;! Et oui, &lt;a hreflang=&quot;en&quot; href=&quot;http://www.w3.org/TR/css3-background/#the-box-shadow&quot;&gt;c&amp;#8217;est la spec qui le dit&lt;/a&gt;&amp;#160;: &lt;q lang=&quot;en&quot;&gt;The shadow is drawn outside the border edge only: it is clipped inside the border-box of the element.&lt;/q&gt;. En clair, la partie de l&amp;#8217;ombre qui est sous la boite correspondante n&amp;#8217;est pas rendue et puis voilà, c&amp;#8217;est tout&amp;#8230; iiirk&amp;#160;! Vous pourriez m&amp;#8217;objecter que ça peut être utile. Oui, c&amp;#8217;est vrai, mais pas toujours et comme ce n&amp;#8217;est pas paramétrable, c&amp;#8217;est chiant.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Donc, de deux choses l&amp;#8217;une&amp;#160;: Soit vous atteigniez le niveau zéro du web design (et franchement, une boite à bord arrondi et/ou avec une ombre porté, oui, c&amp;#8217;est le niveau zéro du web design&amp;#160;; le truc que tous les apprentis intégrateurs font le premier jour où ils découvrent les joies de CSS) et avez besoin de produire de simples ombres portées ou des effets de lueur interne sur une boite, dans ce cas, c&amp;#8217;est ok, cette propriété est faite pour vous&amp;#160;; soit vous voulez réalisez des effets un peu plus complexes et vous allez vite vous rendre compte que ce n&amp;#8217;est pas plus simple ou pire, que c&amp;#8217;est carrément limité et vous allez alors soit vous rabattre vers l&amp;#8217;utilisation d&amp;#8217;images (là encore, &lt;code&gt;border-image&lt;/code&gt; peut bien vous aider&amp;#8230; oui, je sais, je suis un peu lourd là, mais il faut vraiment voir toute la souplesse graphique qu&amp;#8217;offre cette propriété) soit, si vous êtes un peu plus aventureux, vous allez regarder du coté des filtres SVG (aventureux car pour l&amp;#8217;instant, l&amp;#8217;application de filtres SVG sur des éléments HTML ne fonctionne qu&amp;#8217;avec Firefox 4&amp;#8230; qui n&amp;#8217;est pas encore sorti au moment ou je publie ce coup de gueule).&lt;/p&gt;
&lt;p&gt;Je ne suis pas le seul à penser que &lt;code&gt;box-shadow&lt;/code&gt; est une propriété mal finie. En effet, les développeurs de webkit ont implémenté une autre propriété d&amp;#8217;ombre&amp;#160;: &lt;code&gt;-webkit-svg-shadow&lt;/code&gt;. Cette propriété ne fait actuellement l&amp;#8217;objet d&amp;#8217;aucune normalisation, mais elle est une tentative pour porter la souplesse des ombres SVG vers CSS sans avoir à subir toute la lourdeur des primitives de filtres SVG. L&amp;#8217;idée étant d&amp;#8217;avoir une propriété qui gère pleinement la transparence des boites HTML et des images pour créer des ombres qui ont des formes complexes. En effet, essayez d&amp;#8217;appliquer &lt;code&gt;box-shadow&lt;/code&gt; à une image transparente&amp;#8230; l&amp;#8217;ombre sera carré&amp;#160;: fail&amp;#160;! (Ceci étant dit, les développeurs de Webkit ferait mieux de travailler sur l&amp;#8217;implémentation de &lt;code&gt;box-shadow&lt;/code&gt;. Essayez de créer &lt;a hreflang=&quot;en&quot; href=&quot;http://code.google.com/p/chromium/issues/detail?id=25334&quot;&gt;une ombre interne sur une boite avec &lt;code&gt;border-radius&lt;/code&gt;&lt;/a&gt; et vous comprendrez de quoi je parle).&lt;/p&gt;
&lt;h2&gt;Conclusion&lt;/h2&gt;
&lt;p&gt;Aaaah, je me sens mieux&amp;#160;!&lt;/p&gt;
&lt;p&gt;Vous l&amp;#8217;aurez compris, en ce qui me concerne ces deux propriétés ne méritent pas l&amp;#8217;attention qu&amp;#8217;on leur porte. Certes, elles apportent des solutions élégantes à certains problèmes communs d&amp;#8217;intégration mais sans non plus porter à elles seules la révolution qu&amp;#8217;est CSS3. De fait, je ne les renie pas car elles ont leur utilité (et il m&amp;#8217;arrive même de les utiliser, si, si&amp;#160;!). Cependant, il existe moult autres propriétés CSS3&amp;#160;en cour d&amp;#8217;implémentation qui sont infiniment plus utiles (mais aussi infiniment moins sexy). En particulier, je vous invite à regarder de près ce qui ce fait au sein du &lt;a hreflang=&quot;en&quot; href=&quot;http://dev.w3.org/csswg/css3-ui/&quot;&gt;module CSS Basic UI&lt;/a&gt; avec en particulier les propriétés &lt;code&gt;box-sizing&lt;/code&gt; et &lt;code&gt;pointer-events&lt;/code&gt; qui sont assez discrètes mais super utiles au quotidien (non mais vraiment&amp;#160;!) ainsi que toutes les pseudo-classes de ce module et du &lt;a hreflang=&quot;en&quot; href=&quot;http://www.w3.org/TR/css3-selectors&quot;&gt;module CSS selecteur Level 3&lt;/a&gt;. Ah&amp;#160;! Et au fait, est-ce que je vous ai parlé de &lt;code&gt;&lt;a hreflang=&quot;en&quot; href=&quot;http://www.w3.org/TR/css3-background/#border-images&quot;&gt;border-image&lt;/a&gt;&lt;/code&gt;&amp;#160;? &lt;img src=&quot;/themes/default/smilies/wink.png&quot; alt=&quot;;)&quot; class=&quot;smiley&quot; /&gt;&lt;/p&gt;</description>

    

      </item>
  
  <item>
    <title>:before et :after, des pseudo-éléments qui ont du style</title>
    <link>http://jeremie.patonnier.net/post/2010/11/22/before-et-after-des-pseudo-elements-qui-ont-du-style</link>
    <guid isPermaLink="false">urn:md5:0d771a8d82faea70fa8a50fee43fc432</guid>
    <pubDate>Mon, 22 Nov 2010 09:00:00 +0100</pubDate>
    <dc:creator>Jeremie</dc:creator>
        <category>Web</category>
        <category>CSS</category><category>webdesign</category>
    <description>&lt;p&gt;En ces temps de buzz autour de CSS3, on en oublie les supers outils qui existent dans CSS2 et qui sont largement exploitables. Parmi ceux-ci, on trouve les pseudo-éléments :before et :after. Ces pseudo-éléments ont longtemps été négligés par les designers et intégrateurs Web pour deux raisons essentiellement&amp;#160;: Premièrement, IE6 et IE7 ne les comprennent pas, donc à l&amp;#8217;époque ou ces deux navigateur était dominant c&amp;#8217;était inutilisable&amp;#160;; Deuxièmement, les ayatollahs de l&amp;#8217;accessibilité stigmatisent assez volontiers ces deux pseudo-éléments (parfois à raison) ce qui a tendance à effrayer les designers et intégrateurs qui finalement s&amp;#8217;y intéressent peu.&lt;/p&gt;
&lt;p&gt;Pourtant, ces deux paravent masquent la puissance de ces outils. Le premier point est facilement contournable avec un peu de Javascript et le deuxième point est totalement injustifié dès lors qu&amp;#8217;on utilise ces pseudo-éléments pour ce qu&amp;#8217;ils sont&amp;#160;: des aides à la mise en forme. Je vais donc vous montrer comment fonctionnent ces pseudo-éléments, vous allez voir, c&amp;#8217;est génial &lt;img src=&quot;/themes/default/smilies/wink.png&quot; alt=&quot;;)&quot; class=&quot;smiley&quot; /&gt; &lt;/p&gt;    &lt;h2&gt;Des pseudo quoi&amp;#160;?&lt;/h2&gt;
&lt;p&gt;CSS2 définie donc deux pseudo-éléments sobrement accessible via les sélecteurs &lt;code&gt;:before&lt;/code&gt; et &lt;code&gt;:after&lt;/code&gt;. Hop, hop, hop&amp;#8230; pseudo quoi&amp;#160;? Comme son nom l&amp;#8217;indique, un pseudo-élément est un truc qui ressemble à un élément, qui a le gout d&amp;#8217;un élément, qui se comporte comme un élément&amp;#8230; mais qui n&amp;#8217;en est pas un. Et oui, les pseudo-élément CSS sont à HTML ce que la bière sans alcool est&amp;#8230; euh&amp;#8230;&amp;nbsp; à la bière.&lt;/p&gt;
&lt;p&gt;Diantre, un élément qui n&amp;#8217;en ait pas un&amp;#160;! Aurais-je donc trop bu de l&amp;#8217;alcool sus-nommé&amp;#160;? Que nenni. La principal différence technique entre un pseudo-éléments et un élément &amp;#8220;normal&amp;#8221; se résume assez simplement&amp;#160;: Les pseudo-éléments n&amp;#8217;apparaissent jamais dans l&amp;#8217;arbre DOM des documents mais influencent sur le rendu visuel de celui-ci comme si c&amp;#8217;était le cas. &lt;/p&gt;
&lt;p&gt;Cet état de fait à deux conséquences&amp;#160;:&lt;/p&gt;
&lt;ol&gt;&lt;li&gt;Toutes les aides à l&amp;#8217;accessibilité qui reposent sur l&amp;#8217;exploitation du DOM ne &amp;#8220;verront&amp;#8221; jamais les pseudo-éléments.&lt;/li&gt;
&lt;li&gt;Manipuler les pseudo-éléments via Javascript ne peut pas se faire via l&amp;#8217;API DOM, mais uniquement via des modifications de style (et encore, difficilement).&lt;/li&gt;
&lt;/ol&gt;
&lt;h2&gt;Emplacement et comportement&lt;/h2&gt;
&lt;p&gt;Maintenant que vous avez compris ce que sont ces pseudo-éléments, comment ceux-ci s&amp;#8217;intègrent dans le rendu visuel des éléments traditionnels&amp;#160;?&lt;/p&gt;
&lt;p&gt;Un pseudo-éléments est toujours défini relativement à un élément réel (c&amp;#8217;est à dire qui existe dans l&amp;#8217;arbre DOM). Cela signifie, qu&amp;#8217;il est visuellement rendu comme un enfant de cet élément réel (et pas comme un élément frère placé avant ou après l&amp;#8217;élément de référence contrairement à ce qu&amp;#8217;on pourrait croire). &lt;code&gt;:before&lt;/code&gt; désignera donc le pseudo-élément qui sera visuellement placé &lt;em&gt;avant le premier enfant&lt;/em&gt; de l&amp;#8217;élément de référence et &lt;code&gt;:after&lt;/code&gt; désignera le pseudo-élément qui sera visuellement placé &lt;em&gt;après le dernier enfant&lt;/em&gt; de l&amp;#8217;élément de référence. Notez que si
vous utilisez ces deux sélecteurs tout seul, cela reviens à faire une
utilisation implicite du sélecteur universel &lt;code&gt;*&lt;/code&gt;. Ainsi, la règle
&lt;code&gt;:before{...}&lt;/code&gt; seule est équivalente à la règle &lt;code&gt;*:before{...}&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;En outre, un pseudo-élément va se comporter visuellement de la même façon qu&amp;#8217;un élément HTML &lt;code&gt;span&lt;/code&gt;. Arrêtons-nous ici un petit moment car c&amp;#8217;est sans doute le point le plus important à comprendre pour arriver à devenir créatif avec les pseudo-élément. Je le redis&amp;#160;: un pseudo-élément va se comporter visuellement de la même façon qu&amp;#8217;un élément HTML &lt;code&gt;span&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;Un bon schéma valant mieux qu&amp;#8217;une longue explication voila ce que ça implique.&lt;/p&gt;
&lt;p&gt;&lt;img alt=&quot;before-after.png&quot; src=&quot;http://jeremie.patonnier.net/public/pseudo-elements/before-after.png&quot; /&gt;&lt;/p&gt;
&lt;p&gt;Dans le premier cas, l&amp;#8217;élément référent ne contient que du texte, les pseudo-éléments vont donc s&amp;#8217;inclure dans le flux du texte. Dans le deuxième cas, l&amp;#8217;élément référent contient un enfant de type bloc, les pseudo-éléments vont donc se placer avant et après ce bloc.&lt;/p&gt;
&lt;h2&gt; Génération de contenu&lt;/h2&gt;
&lt;p&gt;Voila, les pseudo-éléments ont trouvé leur place et on peut leur appliquer tous les styles disponibles pour les mettre en forme, c&amp;#8217;est génial&amp;#8230; sauf que&amp;#8230; Sauf que ce ne sont que des boites vides. Certes, les perspectives ouvertes sont déjà assez immenses quand on a un peu d&amp;#8217;imagination (et Dieu sait qu&amp;#8217;il faut en avoir pour faire de l&amp;#8217;intégration Web&amp;#160;!). Mais là ou ça devient vraiment fun, c&amp;#8217;est quand on commence à remplir ces pseudo-éléments avec du contenu.&lt;/p&gt;
&lt;p&gt;Normalement, c&amp;#8217;est quand on en arrive à ce point qu&amp;#8217;on assiste à une levée de boucliers des intégristes de l&amp;#8217;accessibilité&amp;#8230; les sots&amp;#160;! En général, leur argument principal est que les contenus générés n&amp;#8217;étant pas présent dans le DOM, tout les outils d&amp;#8217;accessibilité ne peuvent pas exploiter ces contenus (sans parler des navigateurs qui ne comprennent tout simplement pas les pseudo-éléments). C&amp;#8217;est vrai, et il est important de s&amp;#8217;en souvenir. Ceci étant dit, il est bon de rappeler que tout les contenus n&amp;#8217;ont pas à êtres accessibles, surtout s&amp;#8217;ils servent un objectif décoratif. Donc, OUI, c&amp;#8217;est possible de générer du contenu en CSS si celui-ci n&amp;#8217;a qu&amp;#8217;une vocation décorative. Pire&amp;#160;! J&amp;#8217;irai plus loin, je vous le recommande. En effet, générer des contenus décoratifs en CSS réduit le bruit autour des contenus devant être accessible. Et donc, bien utilisés, &lt;code&gt;:before&lt;/code&gt; et &lt;code&gt;:after&lt;/code&gt; peuvent vous aider à améliorer l&amp;#8217;accessibilité de vos sites.&lt;/p&gt;
&lt;p&gt;La génération de contenu dans un pseudo-éléments passe par l&amp;#8217;utilisation de la propriété CSS &lt;code&gt;content&lt;/code&gt;. Cette propriété peut accepter plusieurs valeurs différentes selon ce que vous voudrez générer. Notez que même si vous ne voulez qu&amp;#8217;une boite vide, vous devrez utiliser la propriété &lt;code&gt;content&lt;/code&gt; avec une chaine vide. En effet, la valeur par défaut de cette propriété (&lt;code&gt;normal&lt;/code&gt;) fait que les pseudo-éléments ne sont pas affichés.&lt;/p&gt;
&lt;h3&gt;Du texte&lt;/h3&gt;
&lt;p&gt;Le plus simple à faire c&amp;#8217;est de générer du texte. Cela ce fait très simplement de la manière suivante&amp;#160;:&lt;/p&gt;
&lt;pre class=&quot;sh_css&quot;&gt;div.alert:before{&lt;br /&gt;&amp;nbsp;&amp;nbsp; content : &quot;WARNING: &quot;; &lt;br /&gt;/* Ici, vous préfixez tous vos messages d'alerte avec un texte qui n'a pas besoin d'être accessible. C'est un choix de design &lt;ins&gt;acceptable s'il existe dans la page HTML un autre moyen d'identifier ces messages comme étant des alertes. Si ce n'est pas le cas, vous commettez une grave erreur d'accessibilité.&lt;/ins&gt;. &lt;del&gt;En effet, si vous générez beaucoup d'alertes, il peut être fastidieux d'entendre une revue d'écran vous dire &quot;WARNING-DEUX-POINTS&quot; en permanence. Ici, ce ne sera pas le cas ;-)&lt;/del&gt; */ &lt;br /&gt;}&lt;/pre&gt;
&lt;p&gt;&lt;strong&gt;MAJ du 24/11&amp;#160;:&lt;/strong&gt;&lt;em&gt; Suite au échanges dans les commentaires avec Stéphane &amp;#8220;Roudoudou d&amp;#8217;amour&amp;#8221; Deschamps, il est nécessaire de comprendre que toute insertion de texte via CSS doit être soupesé avec attention car les conséquences en terme d&amp;#8217;accessibilité peuvent être importante.&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;Notez que vous pouvez mettre n&amp;#8217;importe quel caractère Unicode dans une chaine générée. La syntaxe pour insérer un code Unicode est &lt;code&gt;\00XXXX&lt;/code&gt; ou la chaine XXXX représente le code Unicode hexadécimal de votre caractère. Petite exception à cela&lt;sup&gt;&lt;a href=&quot;http://jeremie.patonnier.net/post/2010/11/22/before-et-after-des-pseudo-elements-qui-ont-du-style#note1&quot; title=&quot;En fait ce n'est pas une exception, mais la gestion des échappements de caractères avec CSS n'est pas forcément très simple, donc, je vous encourage à vous familiariser avec la notation \00XXXX et à considérer \A comme une exception.&quot;&gt;1&lt;/a&gt;&lt;/sup&gt;, les retours à la ligne disposent d&amp;#8217;un raccourcis&amp;#160;: &lt;code&gt;\A&lt;/code&gt;. Par exemple, si vous voulez rajouter une espace insécable avant un deux-points, ça donnera&amp;#160;:&lt;/p&gt;
&lt;pre class=&quot;sh_css&quot;&gt;label:after{&lt;br /&gt;&amp;nbsp;&amp;nbsp; content : &quot;\00202F:&quot;; &lt;br /&gt;/* Là aussi, vous n'avez peut-être pas forcément envie que votre revue d'écran vous dise &quot;DEUX-POINT&quot; tout le temps hein ? */ &lt;br /&gt;}&lt;/pre&gt;
&lt;h3&gt;Des images&lt;/h3&gt;
&lt;p&gt;Il est également possible d&amp;#8217;inclure des images grâce à la fonction &lt;code&gt;url()&lt;/code&gt;. Ce qui donnera&amp;#160;:&lt;/p&gt;
&lt;pre class=&quot;sh_css&quot;&gt;div.alert:before{&lt;br /&gt;&amp;nbsp;&amp;nbsp; content : url(exclamation.png);&lt;br /&gt;}&lt;/pre&gt;
&lt;h3&gt;Des compteurs&lt;/h3&gt;
&lt;p&gt;Très utile si on veut numéroter des éléments (que ceux-ci soient ou non des listes ordonnées n&amp;#8217;a aucune importance) comme des titres par exemples. Pour cela, il faut utiliser les fonctions &lt;code&gt;counter()&lt;/code&gt; ou &lt;code&gt;counters()&lt;/code&gt; en conjonction avec les propriétés &lt;code&gt;counter-reset&lt;/code&gt; et &lt;code&gt;counter-increment&lt;/code&gt;. Je ne vais pas vous détailler l&amp;#8217;usage des compteurs qui mériterai un article à lui seul, mais cela fait également partis de ces outils sous-estimés de CSS2. Voici un petit exemple simple&amp;#160;:&lt;/p&gt;
&lt;pre class=&quot;sh_css&quot;&gt;body{&lt;br /&gt;&amp;nbsp;&amp;nbsp; counter-reset: alert; /* On défini le compteur avec un nom arbitraire */&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;div.alert:before{&lt;br /&gt;&amp;nbsp;&amp;nbsp; counter-increment : alert;&lt;br /&gt;&amp;nbsp;&amp;nbsp; content : counter(alert, decimal);&lt;br /&gt;/* avant la virgule, c'est le nom du compteur, après la virgule, c'est son style. La valeur du style est la même que pour la propriété list-style-type */&lt;br /&gt;}&lt;/pre&gt;
&lt;h3&gt;Des valeurs d&amp;#8217;attribut&lt;/h3&gt;
&lt;p&gt;Enfin, il est possible de récupérer et donc d&amp;#8217;afficher les valeurs des attributs de l&amp;#8217;élément référent qui contiendra les pseudo-éléments. Je ne vous met pas d&amp;#8217;exemple, mais je vous invite à relire l&amp;#8217;article que j&amp;#8217;ai écris sur ce sujet&amp;#160;: &lt;a href=&quot;http://jeremie.patonnier.net/post/2010/06/23/Ameliorez-vos-liens-avec-la-generation-de-contenu-CSS&quot;&gt;Améliorez vos liens avec la génération de contenu CSS&lt;/a&gt;.&lt;/p&gt;
&lt;h3&gt;Grand Schelem, Belote et Quinte Flush Royal&lt;/h3&gt;
&lt;p&gt;Et le plus beau dans tout ça, c&amp;#8217;est que vous pouvez mixer tout ça ensemble&amp;#160;:&lt;/p&gt;
&lt;pre class=&quot;sh_css&quot;&gt;body{&lt;br /&gt;&amp;nbsp;&amp;nbsp; counter-reset: alert;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;div.alert:before{&lt;br /&gt;&amp;nbsp;&amp;nbsp; counter-increment : alert;&lt;br /&gt;&amp;nbsp;&amp;nbsp; content : url(exclamation.png) &quot;\00202FWARNING\00202F&quot; counter(alert) &quot;\00202F: &quot;;&lt;br /&gt;/* Notez que je n'ai pas remis le style du compteur. Son style par défaut est &quot;decimal&quot; */&lt;br /&gt;}&lt;/pre&gt;&lt;p&gt;Ceci dit, soyez raisonnable, ce n&amp;#8217;est pas parce qu&amp;#8217;on peut le faire qu&amp;#8217;on doit le faire &lt;img src=&quot;/themes/default/smilies/wink.png&quot; alt=&quot;;)&quot; class=&quot;smiley&quot; /&gt; Pensez aussi et surtout à vos utilisateurs.&lt;/p&gt;
&lt;h2&gt;Cas d&amp;#8217;usage&lt;/h2&gt;
&lt;p&gt;La théorie c&amp;#8217;est bien, la pratique c&amp;#8217;est mieux. Voici quelques cas d&amp;#8217;usage, mais je suis sur que vous saurez en trouver d&amp;#8217;autres &lt;img src=&quot;/themes/default/smilies/wink.png&quot; alt=&quot;;)&quot; class=&quot;smiley&quot; /&gt;&lt;/p&gt;
&lt;h3&gt;puces et numérotation&lt;/h3&gt;
&lt;p&gt;Les conteurs vous permettent d&amp;#8217;une part de reprendre le contrôle des puces et numéros sur les listes, mais vous permettent également de numéroter d&amp;#8217;autre choses, des titres par exemple&amp;#160;:&lt;/p&gt;
&lt;pre class=&quot;sh_css&quot;&gt;article{&lt;br /&gt;&amp;nbsp;&amp;nbsp; counter-reset : c1 c2 c3;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;article h1{&lt;br /&gt;&amp;nbsp;&amp;nbsp; counter-increment : c1;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;article h2{&lt;br /&gt;&amp;nbsp;&amp;nbsp; counter-increment : c2;&lt;br /&gt;}&lt;br /&gt; &lt;br /&gt;article h3{&lt;br /&gt;&amp;nbsp;&amp;nbsp; counter-increment : c3;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;article h1:before{&lt;br /&gt;&amp;nbsp;&amp;nbsp; content: counter(c1) &quot;. &quot;;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;article h2:before{&lt;br /&gt;&amp;nbsp;&amp;nbsp; content: counter(c1) &quot;.&quot; counter(c2) &quot;. &quot;;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;article h3:before{&lt;br /&gt;&amp;nbsp;&amp;nbsp; content: counter(c1) &quot;.&quot; counter(c2) &quot;.&quot; counter(c3, lower-alpha) &quot;. &quot;;&lt;br /&gt;}&lt;/pre&gt;
&lt;p&gt;&amp;gt; &lt;a hreflang=&quot;fr&quot; href=&quot;http://jeremie.patonnier.net/experiences/pseudo-elements/compteurs.html&quot;&gt;Voir l&amp;#8217;exemple des conteurs sur les titres&lt;/a&gt;&lt;/p&gt;
&lt;h3&gt;Bords arrondis&lt;/h3&gt;
&lt;p&gt;Voici une utilisation avancé des pseudo-éléments. Habituellement, lorsque vous voulez réaliser des bords arrondis avec CSS2, vous êtes obligé de rajouter du balisage HTML (ou SVG, ou VML) pour pouvoir avoir assez d&amp;#8217;éléments à styler pour chacun des coins (peut importe que cet ajout de balises soit fait à priori dans la source HTML ou à posteriori via Javascript, le principe reste le même). Plutôt que de polluer le DOM du document (ce qui peut avoir des conséquences fâcheuses avec certains sélecteurs CSS2 et 3), vous pouvez avantageusement exploiter les pseudo-éléments pour afficher vos coins.&lt;/p&gt;
&lt;p&gt;En effet, en positionnant votre élément de référence de manière &lt;code&gt;relative&lt;/code&gt; et en positionnant vos pseudo-éléments de manière &lt;code&gt;absolute&lt;/code&gt; (et en exploitant correctement la propriété &lt;code&gt;z-index&lt;/code&gt;), vous vous retrouvez avec un élément qui potentiellement dispose de 3 couches d&amp;#8217;arrière-plan et de deux emplacement pour des images supplémentaires. En claire, vous pouvez empiler jusqu&amp;#8217;à 5 images pour créer des effets graphiques de malade.&lt;/p&gt;
&lt;p&gt;Schématiquement, cela donnera un empilement des éléments de ce genre&amp;#160;:&lt;/p&gt;
&lt;p&gt;&lt;img title=&quot;Ordre d'empilement des couches&quot; alt=&quot;Ordre d'empilement des couches&quot; src=&quot;http://jeremie.patonnier.net/public/pseudo-elements/before-after-2.png&quot; /&gt;&lt;/p&gt;
&lt;p&gt;Le code CSS associé à ce schémas est le suivant&amp;#160;:&lt;/p&gt;
&lt;pre class=&quot;sh_css&quot;&gt;div{&lt;br /&gt;&amp;nbsp;&amp;nbsp; position : relative;&lt;br /&gt;&amp;nbsp;&amp;nbsp; z-index : 0;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;div:before,&lt;br /&gt;div:after{&lt;br /&gt;&amp;nbsp;&amp;nbsp; content : &quot;&quot;;&lt;br /&gt;&amp;nbsp;&amp;nbsp; position : absolute;&lt;br /&gt;&amp;nbsp;&amp;nbsp; z-index : -1; /* Oui, z-index accepte les valeurs négatives */&lt;br /&gt;&amp;nbsp;&amp;nbsp; top : 0;&lt;br /&gt;&amp;nbsp;&amp;nbsp; left : 0;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp; width : 100%;&lt;br /&gt;&amp;nbsp;&amp;nbsp; height : 100%;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;div:after{&lt;br /&gt;&amp;nbsp;&amp;nbsp; z-index : -2;&lt;br /&gt;}&lt;/pre&gt;
&lt;p&gt;Cette technique souffre tout de même de quelques limites (sinon, ce ne serait pas drôle)&amp;#160;: &lt;/p&gt;
&lt;ol&gt;&lt;li&gt;Les contenus des pseudo-éléments étant considérés comme du texte en ligne, ils peuvent être délicat à positionner ailleurs que en haut et à gauche du pseudo-éléments (c&amp;#8217;est possible, mais ça donne lieu à des contorsions techniques un peu disgracieuses à mon gout)&lt;/li&gt;
&lt;li&gt;Si vous voulez avoir des coins arrondis sur une boite extensible en largeur ET en hauteur, les coins ne pourront pas être tous transparent (par contre, pour une extension sur un seul axe, c&amp;#8217;est possible).&lt;/li&gt;
&lt;li&gt;La gestion des &lt;code&gt;margin&lt;/code&gt; et &lt;code&gt;padding&lt;/code&gt; de l&amp;#8217;élément de référence demande un peu d&amp;#8217;attention pour être sur que les pseudo-éléments se comportent correctement (une petite révision du modèle de boite et du positionnement CSS n&amp;#8217;est pas inutiles &lt;img src=&quot;/themes/default/smilies/wink.png&quot; alt=&quot;;)&quot; class=&quot;smiley&quot; /&gt; ). &lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&amp;gt; &lt;a hreflang=&quot;fr&quot; href=&quot;http://jeremie.patonnier.net/experiences/pseudo-elements/bords-arrondis.html&quot;&gt;Voir l&amp;#8217;exemple des bords arrondis&lt;/a&gt;&lt;/p&gt;
&lt;h3&gt;Décoration de contenu&lt;/h3&gt;
&lt;p&gt;De manière général, les pseudo-éléments vous permettent de sortir du cadre (littéral) imposé par le modèle de boite CSS pour décorer les éléments.Voici quelques exemples simples.&lt;/p&gt;
&lt;h4&gt;La création de guillemets graphiques autour des éléments blockquote&lt;/h4&gt;
&lt;p&gt;Un exemple simple pour habiller les éléments &lt;code&gt;blockquote&lt;/code&gt; consiste à créer des guillemets avec &lt;code&gt;:before&lt;/code&gt; et &lt;code&gt;:after&lt;/code&gt; et à les &amp;#8220;faire sortir&amp;#8221; pour leur donner une valeur graphique.&lt;/p&gt;
&lt;p&gt;Notez que pour faire de &amp;#8220;vrai&amp;#8221; guillemet via CSS, il existe aussi la propriété &lt;code&gt;quote&lt;/code&gt; qui est mieux adaptée (surtout pour gérer la localisation des règles typographiques)&lt;/p&gt;
&lt;p&gt;&amp;gt; &lt;a hreflang=&quot;fr&quot; href=&quot;http://jeremie.patonnier.net/experiences/pseudo-elements/decoration.html&quot;&gt;Voir l&amp;#8217;exemple des blockquote&lt;/a&gt;&lt;/p&gt;
&lt;h4&gt;Réaliser des icônes sous forme de fontes &lt;/h4&gt;
&lt;p&gt;Avec la démocratisation de @font-face, on voit arriver certains usages un peu surprenant. C&amp;#8217;est le cas des icônes sous forme de fontes. Plutôt que d&amp;#8217;utiliser des images, on peut utiliser des polices typographiques qui contiennent des images vectorielles plutôt que des lettres. Ça permet d&amp;#8217;avoir des icônes qui vont bien supporter l&amp;#8217;agrandissement et la réduction. Au delà du fait que je trouve ça techniquement idiot (SVG est bien plus adapté à ce cas d&amp;#8217;usage), cela pose de sérieux problèmes d&amp;#8217;accessibilité. En effet, un caractère, même s&amp;#8217;il ne ressemble pas à une lettre sera compris comme tel par les navigateurs (et donc lu comme tel par les revus d&amp;#8217;écran&amp;#160;!).&lt;/p&gt;
&lt;p&gt;C&amp;#8217;est là que :before et :after peuvent aider à l&amp;#8217;accessibilité&amp;#160;! En positionnant vos icônes dans des pseudo-éléments, les aides à l&amp;#8217;accessibilité n&amp;#8217;y auront plus accès et ces icônes pourront donc être plus efficacement utilisées pour ce qu&amp;#8217;elles sont&amp;#160;: des artifices de décoration.&lt;/p&gt;
&lt;p&gt;&amp;gt; &lt;a hreflang=&quot;fr&quot; href=&quot;http://jeremie.patonnier.net/experiences/pseudo-elements/decoration.html&quot;&gt;Voir l&amp;#8217;exemple des icônes typographique&lt;/a&gt;&lt;/p&gt;
&lt;h3&gt;La tentation du remplacement de texte&lt;/h3&gt;
&lt;p&gt;Ce cas d&amp;#8217;usage est hyper limite, mais il faut que vous le connaissiez pour pouvoir lutter contre les abus et les dérives qui peuvent en découler.&amp;nbsp;&lt;/p&gt;
&lt;p&gt;Imaginez le cas suivant&amp;#160;:&lt;/p&gt;
&lt;pre class=&quot;sh_html&quot;&gt;&amp;lt;div&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;lt;span&amp;gt;Ici, mon texte d'origine&amp;lt;/span&amp;gt;&lt;br /&gt;&amp;lt;/div&amp;gt;&lt;/pre&gt;
&lt;p&gt;Avec le code CSS suivant&amp;#160;:&lt;/p&gt;
&lt;pre class=&quot;sh_css&quot;&gt;span{&lt;br /&gt;&amp;nbsp;&amp;nbsp; position : absolute;&lt;br /&gt;&amp;nbsp;&amp;nbsp; width : 0;&lt;br /&gt;&amp;nbsp;&amp;nbsp; height : 0;&lt;br /&gt;&amp;nbsp;&amp;nbsp; overflow : hidden;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;div:before{&lt;br /&gt;&amp;nbsp;&amp;nbsp; content : &quot;mon nouveau texte&quot;;&lt;br /&gt;}&lt;/pre&gt;
&lt;p&gt;Le texte d&amp;#8217;origine n&amp;#8217;est plus visible mais continue de vivre dans le DOM par contre, le texte du pseudo-éléments est visible mais littéralement inaccessible (il n&amp;#8217;existe pas dans le DOM et il n&amp;#8217;est pas sélectionnable).&lt;/p&gt;
&lt;p&gt;Réaliser un tel remplacement de texte est dangereux car c&amp;#8217;est la porte ouverte au SPAM ou pire au hijacking. Mais il peut y avoir quelques cas légitimes (bien que très certainement discutables), comme par exemple la création de liens &amp;#8220;lire la suite&amp;#8221; qui disposent de libellés plus complets et accessibles dans le DOM. Dans tout les cas, faites bien attention à ce que vous faites et pensez toujours à vos utilisateurs (tous vos utilisateurs).&lt;/p&gt;
&lt;h3&gt;Régler les problèmes de flottaison&lt;/h3&gt;
&lt;p&gt;Un des problèmes récurant lorsqu&amp;#8217;on utilise la propriété &lt;code&gt;float&lt;/code&gt;, c&amp;#8217;est que l&amp;#8217;élément qui flotte, s&amp;#8217;il est plus grand que son conteneur, peut en &amp;#8220;sortir&amp;#8221;. Pour éviter cet effet parfois disgracieux, nous sommes nombreux à avoir appris à agrémenter notre code HTML de &lt;code&gt;&amp;lt;span style=&quot;clear:both&quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;/code&gt; et autre joyeuseté du même genre. Pour éviter de polluer nos sources HTML et nos arbres DOM, il y a peu de solution. En fait, il y en deux avec CSS. &lt;/p&gt;
&lt;ol&gt;&lt;li&gt;La première consiste à utiliser la propriété &lt;code&gt;overflow&lt;/code&gt; avec la valeur &lt;code&gt;hidden&lt;/code&gt;. C&amp;#8217;est une technique très efficace, mais qui a un gros défaut&amp;#160;: absolument rien ne peut sortir de l&amp;#8217;élément, ce sera forcément tronqué. Cela peut donc être une contrainte forte, en particulier si vous utilisez des positionnements relatifs ou des marges négatives pour décaler des éléments vers l&amp;#8217;extérieur.&lt;/li&gt;
&lt;li&gt;La deuxième consiste à utiliser un pseudo-élément &lt;code&gt;:after&lt;/code&gt; et tout simplement de lui appliquer la propriété &lt;code&gt;clear&lt;/code&gt;. Et là, c&amp;#8217;est le bonheur, vous avez tous les avantages de la balise &lt;code&gt;span&lt;/code&gt; sans avoir empoisonné votre source HTML et vous évitez tous les problèmes liés à l&amp;#8217;usage de la propriété &lt;code&gt;overflow&lt;/code&gt;.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&amp;gt; &lt;a hreflang=&quot;fr&quot; href=&quot;http://jeremie.patonnier.net/experiences/pseudo-elements/float.html&quot;&gt;Voir les différentes gestion de &lt;code&gt;float&lt;/code&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;Le cas Internet Explorer&lt;/h2&gt;
&lt;p&gt;Tous les exemples précédent sont relativement simple et fonctionnent dans tous les navigateur de dernière génération mais malgré cela il y a toujours un petit problème&amp;#160;: Internet Explorer et plus particulièrement ses versions 6 et 7 (mais achevez les, vous voyez bien qu&amp;#8217;ils souffrent&amp;#160;!)&lt;/p&gt;
&lt;p&gt;Mais d&amp;#8217;abord, un petit mot sur Internet Explorer 8 qui est un excellent navigateur en terme de support de CSS2 et qui est donc capable de faire tout ce qui a été dis ci-avant. Enfin&amp;#8230; presque. Il existe un petit bug dans l&amp;#8217;implémentation des pseudo-éléments qui rend impossible la possibilité d&amp;#8217;afficher un pseudo-élément au dessus du contenu de l&amp;#8217;élément de référence. Cela peut parfois être un peu gênant lorsque vous positionnez les pseudo-éléments de manière absolue, mais rien d&amp;#8217;insurmontable graphiquement parlant, il faut juste le savoir.&lt;/p&gt;
&lt;p&gt;Par contre, IE6 et 7 ne supportent pas du tout les pseudo-éléments. Alors que faire&amp;#160;?&lt;/p&gt;
&lt;p&gt;Hélas, il n&amp;#8217;y a pas 36 solutions, et, à moins que vous ne soyez très à l&amp;#8217;aise avec les questions de dégradation harmonieuse, vous allez devoir vous tourner vers Javascript. En effet, la meilleur façon de simuler les pseudo-éléments avec ces navigateurs consiste à inclure de vrai élément dans l&amp;#8217;arborescence du DOM et à leur appliquer les même style qu&amp;#8217;a vos pseudo-éléments.&lt;/p&gt;
&lt;p&gt;Si vous utilisez jQuery, ça peut donner ça&amp;#160;:&lt;/p&gt;
&lt;pre class=&quot;sh_javascript&quot;&gt;$('div.alert')&lt;br /&gt;.prepend('&amp;lt;span class=&quot;before&quot;&amp;gt;&amp;lt;/span&amp;gt;')&lt;br /&gt;.append('&amp;lt;span class=&quot;after&quot;&amp;gt;&amp;lt;/span&amp;gt;');&lt;/pre&gt;&lt;p&gt;Cette solution marche plutôt bien mais souffre de quelques inconvénient qu&amp;#8217;il faut connaitre&amp;#160;:&lt;/p&gt;
&lt;ol&gt;&lt;li&gt;IE6 et 7 ne connaissent pas non-plus la propriété &lt;code&gt;content&lt;/code&gt;, il vous faudra donc aussi générer votre contenu via Javascript.&lt;/li&gt;
&lt;li&gt;Les éléments étant véritablement dans le DOM, ils seront visibles par les différentes aides à l&amp;#8217;accessibilité ce qui peut avoir des conséquences déplaisantes pour l&amp;#8217;utilisateur.&lt;/li&gt;
&lt;li&gt;Les déclarations de style pour les classes .before et .after devront être dupliquées. En effet, IE6 et 7 ignoreront tous les blocs de styles avec au moins une déclaration de sélecteur contenant :before et :after, même si les différents sélecteurs sont séparés par une virgule.&lt;/li&gt;
&lt;/ol&gt;
&lt;h2&gt;Conclusion&lt;/h2&gt;
&lt;p&gt;Voila pour ce tour d&amp;#8217;horizon des pseudo-éléments. Comme vous avez pu vous en rendre compte, ce sont des outils très puissant qui offrent un potentiel créatif énorme (mais qui requièrent aussi une certaine dose de responsabilité pour ne pas faire n&amp;#8217;importe quoi). &lt;/p&gt;
&lt;p&gt;Bien comprendre les possibilités de CSS2 à son plein potentiel est une étape importante pour aller vers CSS3. En effet, le module dédié à la génération de contenu en CSS3 fait littéralement exploser les limites du possible en la matière avec des fonctionnalités démentes comme le fait de pouvoir créer des pseudo-éléments dans des pseudo-élément et de pouvoir même carrément recréer un arbre DOM fantôme. Bon, pas de panique, d&amp;#8217;ici à ce que les fabricants de navigateurs se soient mis d&amp;#8217;accord sur la norme et commence à l&amp;#8217;implémenter, il va couler de l&amp;#8217;eau sous les ponts (d&amp;#8217;autant que c&amp;#8217;est un module non-prioritaire au W3C). Mais si déjà vous maitrisez ce qu&amp;#8217;offre CSS2, vous vous ouvrer de grandes portes&amp;#8230; amusez-vous bien &lt;img src=&quot;/themes/default/smilies/smile.png&quot; alt=&quot;:)&quot; class=&quot;smiley&quot; /&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;Notes&amp;#160;:&lt;/p&gt;
&lt;ol&gt;
&lt;li id=&quot;note1&quot;&gt;En fait ce n&amp;#8217;est pas une exception, mais &lt;a href=&quot;http://www.w3.org/TR/CSS2/syndata.html#escaped-characters&quot; hreflang=&quot;en&quot;&gt;la gestion des échappements de caractères avec CSS&lt;/a&gt; n&amp;#8217;est pas forcément très simple, donc, je vous encourage à vous familiariser avec la notation \00XXXX et à considérer \A comme une exception.&lt;/li&gt;
&lt;/ol&gt;</description>

    

      </item>
  
  <item>
    <title>Faire peau neuve</title>
    <link>http://jeremie.patonnier.net/post/2010/09/15/Faire-peau-neuve</link>
    <guid isPermaLink="false">urn:md5:eab26440dc4b7cd29d1c4ce791e357bb</guid>
    <pubDate>Wed, 15 Sep 2010 20:31:00 +0200</pubDate>
    <dc:creator>Jeremie</dc:creator>
        <category>Web</category>
        <category>CSS</category><category>HTML</category><category>webdesign</category>
    <description>&lt;p&gt;Depuis maintenant 2 ans que je tiens ce blog, il était grand temps de faire peau neuve. Je profite donc du &lt;a href=&quot;http://www.alsacreations.com/concours/&quot; hreflang=&quot;fr&quot;&gt;CSS Summer refresh&lt;/a&gt; organisé par Alsacreations pour dire au revoir au gabarit par défaut de Dotclear et mettre en place un vraie gabarit utilisant HTML5 et CSS3.&lt;/p&gt;    &lt;h2&gt;Partis pris graphiques&lt;/h2&gt;
&lt;p&gt;L'idée maitresse de ce design consiste à mettre l'accent sur la lisibilité. Ce site étant un blog, tout tourne autour des articles qui y sont écris, tout le reste n'est qu'accessoire. L'entête et le pied de page sont donc réduit au minimum, la zone de lecture principal prend l'essentielle de la surface visible, et la colonne de gauche ne sert quasiment que d'aide à la navigation sauf sur la page d'accueil ou je m'étale un peu.&lt;/p&gt;
&lt;p&gt;L'idée secondaire de ce design consiste à simplifier au maximum la navigation. Pour cela, étant donné la place que prend le contenu principal, j'ai choisi de rendre l'en-tête et le pied de page fixe. La colonne de gauche est partiellement fixe. En fait, cela dépend de son contenu, si elle est trop grande, elle se déplacera avec le contenu de la page, si elle est assez petite, elle restera fixe.&lt;/p&gt;
&lt;h3&gt;Couleurs&lt;/h3&gt;
&lt;p&gt;Les dominantes de couleur sont le noir est blanc, là encore pour rendre la lecture plus confortable. Néanmoins, je nuance le site à l'aide de rouge et de vert, des couleurs très naturelles, alliance de chaleur et de fraicheur. Le rouge est utilisé pour toutes les zones d'action (essentiellement les liens). Il est assombris ou affadis selon les cas afin de ne pas trop interférer avec le contenu et donc la lisibilité. Le vert est utilisé pour les zones de repos (Affichage de code source), et les actions à retardement (bouton de validation des formulaires)&lt;/p&gt;
&lt;h3&gt;Typographie&lt;/h3&gt;
&lt;p&gt;Afin de gagner en expressivité, j'utilise deux polices typographiques : Georgia pour la titraille des articles et &lt;a hreflang=&quot;en&quot; href=&quot;http://www.fontsquirrel.com/fonts/Molengo&quot;&gt;Molengo&lt;/a&gt; pour tout le reste. Molengo est une police de caractère sans empattement, ronde et équilibré. Même si elle souffre de quelques défaut de &lt;a hreflang=&quot;en&quot; href=&quot;http://en.wikipedia.org/wiki/Hinting&quot;&gt;hinting&lt;/a&gt; (regardez la largeur des futs des i et f par rapport à celle des m et n), elle supporte remarquablement bien la réduction et est très adaptée aux usages web. Elle permet de donner de la douceur au texte et de rendre la lecture plus fluide. C'est important dans la mesure ou j'ai tendance à écrire des articles long. Ce choix typographique me permet de limiter la fatigue visuel et de mieux &quot;faire passer la pilule&quot;. Dans le même ordre d'idée, au rayon des subtilités, vous n'aurez peut être pas remarqué, mais les bandeaux noir en en-tête et pied de page sont en fait gris très foncé. Cela permet de rééquilibrer le contraste avec le gris typographique naturel et&amp;nbsp; d'éviter qu'ils n'écrasent (trop) le texte.&lt;/p&gt;
&lt;h2&gt;Partis pris techniques&lt;/h2&gt;
&lt;p&gt;L'idée sous-jacente de ce re-design, c'est bien sur d'exploiter au mieux les capacités des navigateurs en terme de support de CSS2/3 et de HTML5. Pour HTML5, cela se résume à l'utilisation de certaines nouvelles balises (&lt;code&gt;section&lt;/code&gt;, &lt;code&gt;article&lt;/code&gt;, &lt;code&gt;aside&lt;/code&gt;, &lt;code&gt;header&lt;/code&gt;, &lt;code&gt;footer&lt;/code&gt;). Pour ce qui est de CSS, J'essaye au maximum d'utiliser les capacité de CSS2 (&lt;code&gt;max-width&lt;/code&gt;, &lt;code&gt;position : fixed&lt;/code&gt;, sélecteur d'attribut) et un peu de CSS3 pour rajouter quelques effets, ce qui me permet d'obtenir un design fluide qui s'adapte assez bien à tous les types de navigateurs et d'écrans.&lt;/p&gt;
&lt;h3&gt;media queries&lt;/h3&gt;
&lt;p&gt;L'utilisation du module &quot;&lt;a hreflang=&quot;en&quot; href=&quot;http://www.w3.org/TR/css3-mediaqueries/&quot;&gt;Media Queries&lt;/a&gt;&quot; de CSS3 me permet de contrôler la façon dont mon design va se dégrader selon les capacités du terminal qui affiche ma page. Ainsi, les écrans haute résolution afficherons les polices typographiques dans un corps de texte plus important afin que le texte reste toujours aussi confortable à lire. D'un autre coté, pour les écrans de très petite dimension (smartphone et écran à faible résolution), le design est simplifié et linéarisé... encore et toujours pour améliorer la lisibilité.&lt;/p&gt;
&lt;h3&gt;Couleurs transparente&lt;/h3&gt;
&lt;p&gt;Une des nouveauté de CSS3 les plus facile à utiliser, ce sont les couleurs transparentes. Elles permettent de créer des effets assez subtile de superposition sans avoir à multiplier les images. Ainsi, mes images d'arrière plan sont toujours visibles mais affadies lorsque du texte est affiché par dessus. Pour cela, il suffit d'avoir un blanc ou un gris légèrement transparent en arrière plan des textes qui viendront se superposer aux images.&lt;/p&gt;
&lt;h3&gt;transitions&lt;/h3&gt;
&lt;p&gt;Les transitions me permettent ici de rajouter un peu de douceur au design en créant des transitions de couleur un peu moins abrupte que ce que permet CSS seul d'ordinaire.&lt;/p&gt;
&lt;h3&gt;Arrière-plans multiples&lt;/h3&gt;
&lt;p&gt;La possibilité de définir des valeurs multiples pour les propriétés CSS est sans doute une des plus remarquable avancée de CSS3. Je l'utilise ici pour définir des images multiples d'arrière-plan. Cela permet dans le cadre d'un design fluide de pouvoir placer mes deux fleurs à chaque extrémité de l'écran, sans avoir à me soucier de la taille de l'écran et sans avoir à recourir à un sur-balisage HTML inutile.&lt;/p&gt;
&lt;h3&gt;Enrichissement progressif et dégradation harmonieuse&lt;/h3&gt;
&lt;p&gt;Globalement, ce design se dégrade très bien dans un navigateur qui supporte correctement CSS2 (et donc, il se dégrade très bien dans IE8, qui ne bénéficie tout simplement pas des amélioration de CSS3)&lt;/p&gt;
&lt;p&gt;Les seuls vrais problèmes interviennent avec le cauchemar du web designer : IE6 et 7. Pour ces deux navigateurs, j'ai rajouté quelques styles spécifiques pour s'assurer que la dégradation n'est pas trop déconnante.&lt;/p&gt;
&lt;p&gt;Pour vous faire une idée, le navigateur de référence lorsque j'ai créer ce design fut Firefox 3.6. Tous les navigateurs plus récent bénéficieront de tout ou partie des avancés des CSS3 pour avoir un design un peu plus léché et/ou subtile. A l'inverse, la dégradation se fait très bien dans IE8 (le design est un peu plus grossier mais conforme à la logique global) et IE6 et 7 sont clairement moins jolis mais toujours aussi utilisable et les prérequis du design (lisibilité et navigation simplifié) sont respectés.&lt;/p&gt;</description>

    

      </item>
  
  <item>
    <title>Améliorez vos liens avec la génération de contenu CSS</title>
    <link>http://jeremie.patonnier.net/post/2010/06/23/Ameliorez-vos-liens-avec-la-generation-de-contenu-CSS</link>
    <guid isPermaLink="false">urn:md5:ef0616488a7d459251e2f745cfdced87</guid>
    <pubDate>Wed, 23 Jun 2010 14:19:00 +0200</pubDate>
    <dc:creator>Jeremie</dc:creator>
        <category>Web</category>
        <category>CSS</category><category>webdesign</category>
    <description>&lt;p&gt;Les liens hypertextes sont la colonne vertébrale du Web. La plus part du temps, ils se résument à un texte graphiquement mis en évidence (historiquement, bleu et souligné). Néanmoins, techniquement et sémantiquement parlant, les liens peuvent bénéficier de méta-données qui offrent un certain nombre d'informations qui pourraient être utile à l'utilisateur mais ne sont pas mises en évidence par les navigateurs. Par exemple, l'attribut &lt;code&gt;target&lt;/code&gt; permet de définir dans quel fenêtre ou cadre va s'ouvrir le lien, ou l'attribut &lt;code&gt;hreflang&lt;/code&gt; qui permet de connaitre la langue de la page où mène le lien et je ne vous parle même pas de l'attribut &lt;code&gt;rel&lt;/code&gt;. Dans cet article je vais vous montrer comment utiliser la génération de contenu CSS pour afficher certaines de ces informations à l'utilisateur.&lt;/p&gt;    &lt;h2&gt;Le résultat attendu&lt;/h2&gt;
&lt;p&gt;L'idée est d'afficher au survol d'un lien le contenu de son attribut &lt;code&gt;hreflang&lt;/code&gt; et &lt;code&gt;target&lt;/code&gt; dans un badge en surimpression. Une image valant mieux qu'un long discourt, voila le résultat attendu&amp;nbsp;:&lt;/p&gt;
&lt;p&gt;&lt;img alt=&quot;&quot; src=&quot;http://jeremie.patonnier.net/experiences/badge/badge.png&quot; /&gt;&lt;/p&gt;
&lt;h2&gt;L'arrière plan des liens&lt;/h2&gt;
&lt;p&gt;Afin de facilité la lecture du badge et surtout son association visuelle avec le lien, on va attribuer aux liens un arrière plan coloré qui va légèrement déborder de la zone de lecture &quot;normal&quot;.&lt;/p&gt;
&lt;p&gt;On commence par leurs donner une couleur d'arrière plan au survol&amp;nbsp;:&lt;/p&gt;
&lt;pre class=&quot;sh_css&quot;&gt;a:hover{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; background : #CCD;&lt;br /&gt;}&lt;/pre&gt;&lt;p&gt;L'effet de débord est réalisé en jouant sur les propriétés &lt;code&gt;padding&lt;/code&gt; et &lt;code&gt;margin&lt;/code&gt;. L'utilisation de &lt;code&gt;padding&lt;/code&gt; va permettre d'élargir la zone visuelle. Malheureusement, cela agrandi aussi réellement la zone occupée par le lien qui va repousser ce qui l'entoure. Pour éviter cet effet, on va attribuer une valeur négative de &lt;code&gt;margin&lt;/code&gt; équivalente à chacune des valeurs de &lt;code&gt;padding&lt;/code&gt;. Cet artifice permet de donner assez facilement l'illusion d'un élément qui &quot;déborde&quot; tout en étant à sa place naturel dans le flux HTML.&lt;/p&gt;
&lt;pre class=&quot;sh_css&quot;&gt;a{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; display : inline-block;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; padding :&amp;nbsp; 0.1em&amp;nbsp; 0.6em;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; margin &amp;nbsp;: -0.1em -0.6em;&lt;br /&gt;}&lt;/pre&gt;
&lt;p&gt;Notez que la balise &lt;code&gt;a&lt;/code&gt; est une balise de type &lt;code&gt;inline&lt;/code&gt;. Cela veux dire que certains navigateurs ne vont pas appliquer (ou seulement partiellement) le &lt;code&gt;padding&lt;/code&gt; et le &lt;code&gt;margin&lt;/code&gt; à l'élément. Pour corriger cela, &lt;a href=&quot;http://jeremie.patonnier.net/post/2010/01/28/La-propri%C3%A9t%C3%A9-CSS-display-inline-block&quot;&gt;vous devez ajouter la propriété &lt;code&gt;display: inline-block&lt;/code&gt;&lt;/a&gt;. Si vos intitulés de liens sont longs, il faut se poser la question de savoir si on veut réellement réaliser un tel effet graphique. En effet, en cas de retour à la ligne avec une balise &lt;code&gt;inline-block&lt;/code&gt;, c'est l'intégralité du contenu de la balise qui passe à la ligne (ce qui peut casser la continuité et la lisibilité de votre texte) et si le contenu continue d'être trop grand pour tenir sur une seule ligne, le retour à la ligne se fera à l'intérieur de la balise &lt;code&gt;inline-block&lt;/code&gt;. C'est donc à vous de voir ce que vous voulez faire selon le contexte sachant que l'utilisation de la valeur &lt;code&gt;inline-block&lt;/code&gt; est obligatoire avec Internet Explorer 8 lorsque vous voulez créer un contenu généré, positionné de manière absolue (ce qu'on va faire ci-après). Si vous n'utilisez pas cette valeur, le badge s'affichera sous le lien&amp;nbsp;!&lt;/p&gt;
&lt;p&gt;Avec le truc du débord que je viens de vous montrer, vous allez constater un effet assez déplaisant. Au survol de votre lien le texte qui précède le lien sera masqué par l'arrière plan alors que le texte qui suit restera visible par dessus l'arrière plan. Vous pouvez régler l'empilement des éléments en jouant avec la propriété &lt;code&gt;z-index&lt;/code&gt;. Vous pouvez soit lui donner la valeur -1, mais dans ce cas, les liens vont se retrouver sous les paragraphes et ils ne seront jamais survolés par la souris (vous les voyez, mais en fait ils sont &quot;masqués&quot; par l'élément contenant le texte), soit vous lui donnez la valeur 1 et dans ce cas le lien passera entièrement au dessus du texte qui l'entoure. C'est assez intéressant graphiquement, mais pas forcément très satisfaisant en terme de lisibilité je vous montrerai un peu plus loin comment s'en sortir avec CSS 3.&lt;/p&gt;
&lt;pre class=&quot;sh_css&quot;&gt;a{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; position : relative;&amp;nbsp;/* nécessaire pour la bonne application de z-index */&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; z-index &amp;nbsp;: 1;&lt;br /&gt;}&lt;/pre&gt;&lt;h2&gt;La génération de contenu&lt;/h2&gt;
&lt;p&gt;Le badge qui contiendra les informations supplémentaires va être créer à la volé au survol d'un lien directement en utilisant CSS. Pour cela, nous allons utiliser le pseudo-élément &lt;code&gt;:after&lt;/code&gt; en conjonction avec la propriété content.&lt;/p&gt;
&lt;p&gt;Le pseudo élément &lt;code&gt;:after&lt;/code&gt; va simuler la présence d'un éléments après le contenu du lien. On appel cela un pseudo élément car ce sélecteur va créer une zone qui va avoir le même comportement qu'un élément HTML traditionnel, exactement comme si vous agissiez sur une balise &lt;code&gt;span&lt;/code&gt;. La seul différence, c'est que ce pseudo-élément n'apparait pas dans l'arbre DOM du document. Je vous reparlerai un peu plus loin de ce sujet quand on abordera les questions d'accessibilité. Ce qu'il faut retenir ici c'est que vous allez pouvoir ajouter des styles à un élément sans que vous ayez besoin de rajouter quoi que ce soit dans le balisage HTML de vos liens.&lt;/p&gt;
&lt;p&gt;La propriété &lt;code&gt;content&lt;/code&gt;, elle, va permettre de rajouter du texte et des images au sein de votre pseudo-éléments. Là encore, rien n'apparait dans l'arbre DOM de votre document HTML.&lt;/p&gt;
&lt;p&gt;Nous allons gérer ici quatre cas de figure pour notre badge&amp;nbsp;:&lt;/p&gt;
&lt;ol&gt;&lt;li&gt;Si l'attribut&lt;code&gt; hreflang&lt;/code&gt; est présent, on affichera sont contenu dans notre badge&amp;nbsp;: l'objectif est de dire visuellement à l'internaute quelle est la langue du lien qu'il va ouvrir.&lt;/li&gt;
&lt;li&gt;Si l'attribut &lt;code&gt;target&lt;/code&gt; est présent et à la valeur &lt;code&gt;_blank&lt;/code&gt;, on affichera une icône qui montre l'ouverture d'une nouvelle fenêtre dans notre badge.&lt;/li&gt;
&lt;li&gt;Si les deux attributs sont présents, on affichera et la langue et l'icône.&lt;/li&gt;
&lt;li&gt;Si aucun des deux attributs n'est présents, on n'affichera pas le badge du tout.&lt;/li&gt;
&lt;/ol&gt;
La gestion de ces quatre cas va passer par une utilisation judicieuse du sélecteur d'attribut et de la cascade&lt;br /&gt;
&lt;pre class=&quot;sh_css&quot;&gt;a:after{&lt;br /&gt;&amp;nbsp;/* On masque le badge, mais on utilisera le sélecteur générique pour définir le style global du badge */&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; display : none;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;a[hreflang]:hover:after{&lt;br /&gt;&amp;nbsp;/* On affiche le contenu de l'attribut hreflang */&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; content : attr(hreflang);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; display : block;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;a[target=&quot;_blank&quot;]:hover:after{&lt;br /&gt;&amp;nbsp;/* Si l'attribut hreflang est définie, on affichera son contenu. S'il n'existe pas, il ne s'affichera pas. Dans tous les cas, on affichera une icône qui matérialise le changement de fenêtre */&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; content : attr(hreflang) &quot; &quot; url(&quot;external.png&quot;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; display : block;&lt;br /&gt;}&lt;/pre&gt;&lt;p&gt;Assez simplement, la fonction &lt;code&gt;attr&lt;/code&gt; permet d'extraire le contenu de l'attribut et la fonction &lt;code&gt;url&lt;/code&gt; permet d'inclure une image. Notez que dans la déclaration ci-avant, dans le cas ou les deux attributs &lt;code&gt;hreflang&lt;/code&gt; et &lt;code&gt;target&lt;/code&gt; sont tous les deux définis, c'est la dernière règle CSS qui sera appliquée car &lt;a href=&quot;http://jeremie.patonnier.net/post/2009/08/18/La-preseance-des-selecteurs-CSS&quot;&gt;elle a, selon les règles de la cascade, le même poids&lt;/a&gt; que la règle précédente, mais elle la surcharge du fait de son positionnement dans le code source.&lt;/p&gt;
&lt;h2&gt;Le positionnement et le design du badge&lt;/h2&gt;
&lt;p&gt;Maintenant que le contenu du badge est générer il faut lui donner un peu de style (oui, je sais, elle un peu facile celle là :-p )&lt;/p&gt;
&lt;p&gt;On va commencer par le sortir du flux en le positionnant de manière absolu et on le fera légèrement déborder en haut et à droite. En suite, on va détailler le minimum syndical graphique&amp;nbsp;: Couleur d'arrière plan, bordures, styles typographiques, marges pour aérer un peu tout ça.&lt;/p&gt;
&lt;pre class=&quot;sh_css&quot;&gt;a{&lt;br /&gt;&amp;nbsp;/* nécessaire pour que le positionnement du badge soit relatif à son lien*/&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; position : relative;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;a:after{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; position : absolute;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; top &amp;nbsp;&amp;nbsp;: -1.3em;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; right : -1.3em;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;/* L'arrière plan est rouge foncé et le texte blanc */&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; background : #009;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; color : #FFF;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;/* On ajoute une bordure blanche de 2 pixels de larges */&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; border : 2px solid #FFF;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;/* Le texte est graissé et 1/3 plus petit que le texte du lien. Il est également mis systématiquement en majuscule */&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; font : bold 0.6em Verdana, Helvetica, Arial, sans-serif;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; text-transform : uppercase;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;/* L'ajout de marge permet de laisser le texte respirer */&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; padding : 0.4em 0.5em;&lt;br /&gt;}&lt;/pre&gt;
&lt;h2&gt;CSS 3 is sexy&amp;nbsp;!&lt;/h2&gt;
&lt;p&gt;Voila&amp;nbsp;! Avec ce que vous venez de voir, vous avez fait tous ce qu'il est possible de faire simplement avec CSS 2. Cependant, on n'est pas encore au résultat attendu. On va donc rajouter une petite touche de CSS 3 pour rendre ça plus fin, plus youpi-tralala, plus waow&amp;nbsp;!&lt;/p&gt;
&lt;h3&gt;Couleur transparentes&lt;/h3&gt;
&lt;p&gt;Actuellement, l'arrière plan de nos liens est opaque au survol, ce qui fait qu'on masque une partie du texte à cause de l'effet de &quot;débord&quot; de l'arrière plan. En utilisant une couleur semi-transparente on peut atténuer ce problème. pour cela, il suffit d'utiliser la notation &lt;code&gt;rgba&lt;/code&gt; définie dans le module &quot;&lt;a hreflang=&quot;en&quot; href=&quot;http://www.w3.org/TR/css3-background/&quot;&gt;Border &amp;amp; Background&lt;/a&gt;&quot; de CSS 3.&lt;/p&gt;
&lt;pre class=&quot;sh_css&quot;&gt;a:hover{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; background : #CCD;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; background : rgba(128, 128, 160, .4);&lt;br /&gt;}&lt;/pre&gt;
&lt;p&gt;Notez dans l'exemple ci-avant que la propriété &lt;code&gt;background&lt;/code&gt; est déclarée deux fois. C'est normal. En effet, de cette manière si un navigateur ne comprend pas la notation &lt;code&gt;rgba&lt;/code&gt; (IE8 par exemple), il ignorera la déclaration inconnu et se rabattra sur la déclaration précédente qui respecte la norme CSS 2. Le mécanisme qui consiste à ignorer une déclaration de style inconnue ou mal formée est un comportement standard. C'est une façon simple de gérer les capacités des navigateurs sans avoir à recourir à des artifices comme &lt;a hreflang=&quot;en&quot; href=&quot;http://www.modernizr.com&quot;&gt;Modernizr&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Une autre solution pour régler ce problème de sur-impression consisterai à appliquer un z-index négatif au lien et à &lt;a hreflang=&quot;en&quot; href=&quot;http://hacks.mozilla.org/2009/12/pointer-events-for-html-in-firefox-3-6/&quot;&gt;utiliser la propriété css &lt;code&gt;pointer-events&lt;/code&gt;&lt;/a&gt; définie par SVG. Néanmoins, cette solution est plus lourde à mettre en œuvre (il faut appliquer au conteneur de chaque lien la valeur &lt;code&gt;none&lt;/code&gt; et réapliquer la valeur &lt;code&gt;auto&lt;/code&gt; à tous les liens). A noter que seul Firefox, Chrome et Safari supportent la propriété &lt;code&gt;pointer-events&lt;/code&gt; sur les éléments HTML (je n'ai pas eu l'occasion de tester avec IE9, mais IE8 et Opera 10.53 ne la supportent pas).&lt;/p&gt;
&lt;h3&gt;Bords arrondis&lt;/h3&gt;
&lt;p&gt;Pour adoucir un peu l'effet on va rajouter des bords arrondis aux liens et aux badges&lt;/p&gt;
&lt;pre class=&quot;sh_css&quot;&gt;a:hover{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; -moz-border-radius : 1.3em;&lt;br /&gt;&amp;nbsp;-webkit-border-radius : 1.3em;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;  border-radius : 1.3em;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;a:after{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; -moz-border-radius : 50%;&lt;br /&gt;&amp;nbsp;-webkit-border-radius : 1.3em;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;  border-radius : 1.3em;&lt;br /&gt;}&lt;/pre&gt;&lt;p&gt;Comme souvent avec les propriété issu de CSS3, vous aller devoir faire plusieurs déclarations. En effet, peu de modules ont atteint le statut de &lt;q&gt;Candidate Recommendation&lt;/q&gt; au W3C, or, c'est seulement à partir de ce statut que les constructeurs peuvent retirer leur préfixe spécifique aux propriétés qu'ils ont implémenté. le module Border &amp;amp; Background a atteint ce statut et tous les constructeurs sont d'accord pour dire qu'en ce qui concerne la propriété border-radius, il est plus que temps de retirer ce préfixe. Opera 10.53 supporte déjà cette propriété sans préfixe et les futures IE9 et Firefox 4 (en cour de discussion) devraient aussi la supporter sans préfixe.&lt;/p&gt;
&lt;p&gt;Notez que pour le badge, avec Firefox, j'ai utilisé la valeur 50%. Cette valeur permet de créer des demi-cercles parfaits aux extrémités gauche et droite. Néanmoins, c'est un comportement spécifique à Firefox et mes tests ont montrés que certaines implémentations de Webkit (Chrome 5 par exemple)&amp;nbsp; ainsi qu'Opera ne supporte par les pourcentages avec cette propriété. En outre, de ce que je comprend de la spécification, cette déclaration devrait produire une boite ovale plutôt que deux demi cercle réparti de part et d'autre de la boite, donc, pour la propriété standard, j'ai préféré mettre également une valeur absolue.&lt;/p&gt;
&lt;h3&gt;Ombres et lumières&lt;/h3&gt;
&lt;p&gt;Notre badge commence à être pas mal, on va le finaliser en lui donnant un peu de relief avec des effets d'ombres et de lumières.&lt;/p&gt;
&lt;pre class=&quot;sh_css&quot;&gt;a:after{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; background : #900;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; background : -moz-radial-gradient(35% 35% 0deg, ellipse cover, #E00 0%, #800, 90%);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; background :&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp; radial-gradient(35% 35% 0deg, ellipse cover, #E00 0%, #800, 90%);&lt;br /&gt;&lt;br /&gt;&amp;nbsp;-webkit-box-shadow : rgba(0, 0, 0, .8) 0 2px 5px;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; -moz-box-shadow : rgba(0, 0, 0, .8) 0 2px 5px,&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; rgba(255, 247, 0, .9) 0 0 3px inset;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;  box-shadow : rgba(0, 0, 0, .8) 0 2px 5px,&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; rgba(255, 247, 0, .9) 0 0 3px inset;&lt;br /&gt;&lt;br /&gt;}&lt;/pre&gt;&lt;p&gt;On commence par ajouter un dégradé radial en arrière plan pour donner l'illusion d'un éclairage venant du haut et de la gauche (positionnement du centre du dégradé à 35% du haut de la boite et à 35% du bord gauche de la boite). Ce dégradé aura la forme d'une ellipse horizontal (0 degrés de rotation) qui couvrira toute la boite. Le dégradé va d'un rouge vif au centre à un rouge sombre prés des bords). La syntaxe des dégradés sous Webkit est très différentes de celle de Gecko et honnêtement je n'y comprend rien donc, tant pis pour Safari et Chrome (faite vous plaisir dans les commentaires si vous avez la solution qui va bien). La syntaxe de Gecko étant celle qui est en cour de standardisation, je reproduit la déclaration sans le préfixe -moz-, mais c'est un parie sur l'avenir. En effet, les dégradés CSS font partie du module &quot;&lt;a hreflang=&quot;en&quot; href=&quot;http://dev.w3.org/csswg/css3-images/&quot;&gt;Image Values&lt;/a&gt;&quot; qui en est à son tout premier draft. Autant dire que ça peut (va&amp;nbsp;?) sérieusement bouger.&lt;/p&gt;
&lt;p&gt;Ensuite on ajoute une ombre porté qui va permettre de &quot;détacher&quot; le badge de la surface de la page. Cette ombre est décalé de 2 pixels vers le bas et sont rayon de flou est de 5 pixels. Dans la mesure ou tout les navigateurs majeurs du marché qui supportent la propriété &lt;code&gt;box-shadow&lt;/code&gt; supportent également les couleurs &lt;code&gt;rgba&lt;/code&gt;, on ne va pas s'amuser à gérer une alternative sans couleur transparente (mais on pourrait :-p ).&lt;/p&gt;
&lt;p&gt;Comme &lt;code&gt;box-shadow&lt;/code&gt; supporte les déclarations multiples séparées par un virgule, on va en profiter pour rajouter une ombre intérieur (mot clé &lt;code&gt;inset&lt;/code&gt;). C'est une ombre de couleur jaune pour créer un effet de lumière spéculaire (on aurait pu le faire via le dégradé radial, mais personnellement je trouve ça plus simple via &lt;code&gt;box-shadow&lt;/code&gt;). Vous noterez que je n'ai pas appliqué cette deuxième ombre à Webkit. Cela tiens au fait que l'implémentation des ombres internes couplé à l'utilisation de &lt;code&gt;border-radius&lt;/code&gt; est une catastrophe sous Chrome 5 et Safari 4 (je n'ai pas eu l'occasion de tester avec Safari 5). En effet, l'ombre reste carré la où la boite est arrondie... horrible&amp;nbsp;!&lt;/p&gt;
&lt;h2&gt;Attention à l'accessibilité&lt;/h2&gt;
&lt;p&gt;Voilà, on a créer un jolie badge qui illumine la vie de notre internaute. Mais le loup se cache au coin du bois !&lt;/p&gt;
&lt;h3&gt;Au royaume des aveugles les borgnes sont rois.&lt;/h3&gt;
&lt;p&gt;Comme je vous le disait ci-avant, le problème majeur de la génération de contenu via CSS, c'est que ce contenu n'est pas inclus dans le DOM du document HTML. Ainsi, toute les outils d'aide à l'accessibilité qui repose sur le DOM ne pourront pas exploiter ce contenu généré. C'est par exemple le cas des revus d'écran qui vocalisent les pages Web. A ma connaissance, aucune ne prend en charge les contenus généré via CSS. Pour cette raison, il est vivement déconseillé de générer un contenu signifiant à l'aide de CSS. Dans le cas qui nous occupe ici, cette question n'est pas un problème. En effet, il s'agit uniquement d'enrichir l'expérience utilisateur, donc, tant pis pour les aveugles et les personnes utilisant de vieux navigateur (vous voyez de quoi je parle là, n'est-ce pas), ils pourront toujours utiliser les liens tel qu'ils ont l'habitude de les pratiquer, pour les autres, c'est cadeau, c'est bonheur &lt;img src=&quot;/themes/default/smilies/smile.png&quot; alt=&quot;:)&quot; class=&quot;smiley&quot; /&gt;&lt;/p&gt;
&lt;h3&gt;Les souris, ce fléau de l'humanité&amp;nbsp;!&lt;/h3&gt;
&lt;p&gt;Vous aurez noté que l'apparition et la disparition du badge sont conditionnées par l'application de la pseudo-classe &lt;code&gt;:hover&lt;/code&gt;. Cette pseudo-classe correspond au survol de la souris sur le lien. Pas de bol, certains excentriques utilisent leur clavier, d'autres utilisent des interfaces tactiles (et même si Safari sous iPhone sait s'accommoder de cette pseudo-classe, ce n'est pas le cas de tous le monde) ... pire, votre souris pourrait tomber en panne&amp;nbsp;! Vous pourriez avoir la même attitude que précédemment et décréter que &quot;tant pis pour ces êtres étranges qui sont mal équipé&quot; et en rester là. C'est toujours possible mais ce serait dommage car il est assez facile de leur offrir la même expérience en étendant légèrement nos sélecteurs CSS en incluant les pseudo-classes &lt;code&gt;:active&lt;/code&gt; et &lt;code&gt;:focus&lt;/code&gt;.&lt;/p&gt;
&lt;pre class=&quot;sh_css&quot;&gt;a[hreflang]:hover:after,&lt;br /&gt;a[hreflang]:active:after,&lt;br /&gt;a[hreflang]:focus:after{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; ...&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;a[target=&quot;_blank&quot;]:hover:after,&lt;br /&gt;a[target=&quot;_blank&quot;]:active:after,&lt;br /&gt;a[target=&quot;_blank&quot;]:focus:after{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; ...&lt;br /&gt;}&lt;/pre&gt;
&lt;h3&gt;Mon royaume pour un cheval.&lt;/h3&gt;
&lt;p&gt;Certains navigateurs sont comparables à des piétons et d'autres à des calèches grand luxe tractées par au moins 4 chevaux (ce qui sous entend également que même les navigateurs actuels les plus en pointe ont encore un long chemin à parcourir pour pouvoir être comparé à des coupés sport à injection directe&amp;nbsp;!). Vous pouvez bien sur &lt;a href=&quot;http://jeremie.patonnier.net/experiences/badge/index.html&quot;&gt;tester ce badge avec votre propre navigateur&lt;/a&gt;, et si vous n'avez pas tout un panel de navigateurs à votre disposition, voila quelques exemples de rendus&amp;nbsp;:&lt;/p&gt;
&lt;table summary=&quot;un tablea de 3 colonnes et 11 lignes&quot;&gt;
&lt;caption&gt;Tableau comparatif de quelques rendus navigateurs&lt;/caption&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th scope=&quot;col&quot;&gt;Navigateur&lt;/th&gt;
&lt;th scope=&quot;col&quot;&gt;OS&lt;/th&gt;
&lt;th scope=&quot;col&quot;&gt;Résultat du rendu&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;th scope=&quot;raw&quot;&gt;IE 6&lt;/th&gt;
&lt;td&gt;Windows XP&lt;/td&gt;
&lt;td&gt;&lt;img alt=&quot;Pas de badge ni de bords arrondis sur le lien&quot; src=&quot;http://jeremie.patonnier.net/experiences/badge/rendus/ie.6.winxp.png&quot; /&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;th scope=&quot;raw&quot;&gt;IE 7&lt;/th&gt;
&lt;td&gt;Windows XP&lt;/td&gt;
&lt;td&gt;&lt;img alt=&quot;Pas de badge ni de bords arrondis sur le lien&quot; src=&quot;http://jeremie.patonnier.net/experiences/badge/rendus/ie.7.winxp.png&quot; /&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;th scope=&quot;raw&quot;&gt;IE 8&lt;/th&gt;
&lt;td&gt;Windows XP&lt;/td&gt;
&lt;td&gt;&lt;img alt=&quot;Un bug sur le badge qui passe derrière le texte du lien&quot; src=&quot;http://jeremie.patonnier.net/experiences/badge/rendus/ie.8.winxp.png&quot; /&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;th scope=&quot;raw&quot;&gt;IE 9 (Test Drive)&lt;/th&gt;
&lt;td&gt;Windows 7&lt;/td&gt;
&lt;td&gt;&lt;img alt=&quot;Le rendu des pseudo éléments souffre du même bug que IE8&quot; src=&quot;http://jeremie.patonnier.net/experiences/badge/rendus/ie.9.testdrive2.win7.png&quot; /&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;th scope=&quot;raw&quot;&gt;Firefox 3.5&lt;/th&gt;
&lt;td&gt;Mac OS Leopard&lt;/td&gt;
&lt;td&gt;&lt;img alt=&quot;Pas de dégradé sur le badge&quot; src=&quot;http://jeremie.patonnier.net/experiences/badge/rendus/ff.3.5.macos.png&quot; /&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;th scope=&quot;raw&quot;&gt;Firefox 3.6&lt;/th&gt;
&lt;td&gt;Windows XP&lt;/td&gt;
&lt;td&gt;&lt;img alt=&quot;Le rendu optimal de référence&quot; src=&quot;http://jeremie.patonnier.net/experiences/badge/rendus/ff.3.6.winxp.png&quot; /&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;th scope=&quot;raw&quot;&gt;Firefox 3.7a5&lt;/th&gt;
&lt;td&gt;Ubuntu 10.04&lt;br /&gt;&lt;/td&gt;
&lt;td&gt;&lt;img alt=&quot;Le rendu reste optimal&quot; src=&quot;http://jeremie.patonnier.net/experiences/badge/rendus/ff.3.7a5.linux.png&quot; /&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;th scope=&quot;raw&quot;&gt;Chrome 5&lt;/th&gt;
&lt;td&gt;Windows XP&lt;/td&gt;
&lt;td&gt;&lt;img alt=&quot;Pas de dégradé ni de lueur spéculaire interne&quot; src=&quot;http://jeremie.patonnier.net/experiences/badge/rendus/chrome.5.winxp.png&quot; /&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;th scope=&quot;raw&quot;&gt;Safari 4&lt;/th&gt;
&lt;td&gt;Windows XP&lt;/td&gt;
&lt;td&gt;&lt;img alt=&quot;Pas de dégradé ni de lueur spéculaire interne&quot; src=&quot;http://jeremie.patonnier.net/experiences/badge/rendus/safari.4.winxp.png&quot; /&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;th scope=&quot;raw&quot;&gt;Safari 5&lt;/th&gt;
&lt;td&gt;Mac OSX Leopard&lt;/td&gt;
&lt;td&gt;&lt;img alt=&quot;Pas de dégradé ni de lueur spéculaire interne&quot; src=&quot;http://jeremie.patonnier.net/experiences/badge/rendus/safari.5.macos.png&quot; /&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;th scope=&quot;raw&quot;&gt;Opera 10.53&lt;/th&gt;
&lt;td&gt;Windows XP&lt;/td&gt;
&lt;td&gt;&lt;img alt=&quot;Pas de dégradé&quot; src=&quot;http://jeremie.patonnier.net/experiences/badge/rendus/opera.10.53.winxp.png&quot; /&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;th scope=&quot;raw&quot;&gt;Opera 10.60 beta&lt;/th&gt;
&lt;td&gt;Ubuntu 10.04&lt;/td&gt;
&lt;td&gt;&lt;img alt=&quot;Pas de dégradé&quot; src=&quot;http://jeremie.patonnier.net/experiences/badge/rendus/opera.10.60b.linux.png&quot; /&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;Vous noterez que, au delà des dégradations prévisibles (Dégradés, ombre, coins arrondis), c'est le rendu typographique qui diffère le plus d'un OS à l'autre (d'où l'importance d'utiliser des &lt;code&gt;em&lt;/code&gt; pour définir la taille des arrondis plutôt que des pixels). Vous noterez également un bug (?) avec IE8 (non, ne levez pas les yeux au ciel !), où le badge est positionné au dessus de l'arrière plan du lien, mais au dessous du texte (!!). Il semblerai que pour l'instant, l'équipe de IE9 ne se soit pas encore penchée sur la gestion des pseudo éléments qui se comportent exactement comme avec IE8.&lt;/p&gt;
&lt;h2&gt;Conclusion&lt;/h2&gt;
&lt;p&gt;Comme vous pouvez le voir, il n'est pas très difficile d'enrichir l'expérience des utilisateurs. On est dans un cas typique d'enrichissement progressif. Avec un navigateur ancien, l'utilisateur ne gagne rien, mais il ne perd rien non plus. Avec un navigateur moderne, il gagne en confort. Personne n'est lésé, tout le monde est gagnant.&lt;/p&gt;
&lt;p&gt;Certes, cela est intéressant pour l'utilisateur, mais cela peut également être intéressant pour vous à titre personnel. En effet, rien ne vous empêche d'utiliser cette technique dans la feuille de style utilisateur de votre navigateur préféré pour enrichir votre propre expérience de navigation sur tous les sites sur lesquels vous surfez &lt;img src=&quot;/themes/default/smilies/wink.png&quot; alt=&quot;;)&quot; class=&quot;smiley&quot; /&gt;&lt;/p&gt;
&lt;p&gt;Enfin, c'est grâce à ce genre de test qu'on peut remarquer que Webkit n'est pas aussi bon que l'affirme Apple et Google en terme de support de CSS3 (quand il ne font pas un honteux amalgame avec HTML5). Je ne parle pas des dégradés radiaux (là, c'est moi qui fait volontairement l'impasse) mais plutôt du support de &lt;code&gt;box-shadow&lt;/code&gt; couplé à &lt;code&gt;border-radius&lt;/code&gt; qui est loin de ce que propose les dernières versions de Gecko. Bon soyons claire, il ne sert à rien de se lancer dans un pinaillage du genre &quot;Ah oui mais Webkit supporte mieux tel truc que Gecko&quot;. Ce que je veux vous dire, c'est qu'il ne faut pas prendre pour argent comptant ce que racontent les constructeurs de navigateurs. Testez, testez et testez encore ! Il n'y a que ça pour vous permettre de savoir ce qui marche dans les cas qui &lt;em&gt;vous&lt;/em&gt; intéressent.&lt;/p&gt;</description>

    

      </item>
  
  <item>
    <title>@media London 2010 : Day 1</title>
    <link>http://jeremie.patonnier.net/post/2010/06/08/%40media-London-2010-Day-1</link>
    <guid isPermaLink="false">urn:md5:f1b7fcd949c1ab7f7b67baaade73e39a</guid>
    <pubDate>Tue, 08 Jun 2010 22:17:00 +0200</pubDate>
    <dc:creator>Jeremie</dc:creator>
        <category>Web</category>
        <category>@media</category><category>conférence</category><category>CSS</category>
    <description>&lt;p&gt;Cette année j'ai pu me rendre à &lt;a hreflang=&quot;en&quot; href=&quot;http://atmedia.webdirections.org/&quot;&gt;@media&lt;/a&gt; (c'est comme &lt;a hreflang=&quot;fr&quot; href=&quot;http://www.paris-web.fr/&quot;&gt;Paris Web&lt;/a&gt;, mais à Londres et en plus chère &lt;img src=&quot;/themes/default/smilies/wink.png&quot; alt=&quot;;)&quot; class=&quot;smiley&quot; /&gt; ). Ce cycle de conférences comprend 2 jours d'ateliers (1 atelier = 1 journée... autant dire qu'on rentre sérieusement dans le détail) et 2 jours de conférences. Choisir entre les différents ateliers fut une vraie torture, mais finalement, pour le premier jours, j'ai opté pour l'atelier de &lt;a hreflang=&quot;en&quot; href=&quot;http://www.stuffandnonsense.co.uk/&quot;&gt;Andy Clark&lt;/a&gt; sur le thème «&amp;nbsp;Advanced CSS styling&amp;nbsp;».&lt;/p&gt;    &lt;p&gt;Les ateliers se tiennent au &lt;a hreflang=&quot;en&quot; href=&quot;http://www.londonhouse.org.uk/&quot;&gt;Goodenough College&lt;/a&gt;. Le lieu est superbe et «&amp;nbsp;so british&amp;nbsp;»... une quasi collection de clichés sur ce qu'est une école d'enseignement supérieur anglaise (&lt;a hreflang=&quot;fr&quot; href=&quot;http://www.flickr.com/photos/jeremiepat/sets/72157624233444668/&quot;&gt;quelques photo sur Flickr&lt;/a&gt;). Un écrin parfait pour un atelier de haut niveau.&lt;br /&gt;&lt;br /&gt;En guise d'introduction, Andy commence par nous présenter le processus de standardisation et le jeu permanent qu'il existe entre le W3C et les fabricants de navigateurs. Il en profite pour démystifier le sujet en insistant sur un point clé&amp;nbsp;: la normalisation est faite pour les constructeurs par les constructeurs. Le point de vue des designer est très peu représenté (il n'y a que 2 experts invités dans le groupe de travail CSS) et chaque constructeur suie ses propres contraintes liées à son business model. Pour conclure ce premier round d'échauffement, on a eu droit a un excellent mini débat sur le thème «&amp;nbsp;&lt;a hreflang=&quot;en&quot; href=&quot;http://dowebsitesneedtolookexactlythesameineverybrowser.com&quot;&gt;Un site doit-il être exactement semblable d'un navigateur à l'autre&amp;nbsp;?&lt;/a&gt;&amp;nbsp;»... Je parle d'échauffement car la réponse est évidente et les objections toujours les mêmes. Andy en profite ici pour mettre un coup de griffe aux graphistes qui persistent à présenter des maquettes de sites sous forme d'images figées et encourage tout le monde à présenter des maquettes HTML, même si ce ne sont que de simple «&amp;nbsp;point d'étape&amp;nbsp;» tout en démontrant les bénéfices à travailler dans une logique de dégradation harmonieuse. Il estime que les maquettes fixes sont un problème car elles ne permettent pas d'anticiper certaines contraintes propre au média (par exemple, que ce passe-t-il quand un titre prévus sur une ligne est trop long et passe sur deux ligne&amp;nbsp;?) et le client étant incapable de faire cette gymnastique mental, il ne comprendra pas pourquoi le design peut évoluer d'un navigateur à l'autre.&lt;/p&gt;
&lt;p&gt;Suite à cela, on entre dans le vif du sujet avec une présentation en règles des nouveautés qu'apporte CSS3 en termes de Webdesign. Les principaux points abordés sont&amp;nbsp;: &lt;/p&gt;
&lt;ul&gt;&lt;li&gt;La gestion de la couleur avec en particulier la syntaxe rgba&amp;nbsp;;&lt;/li&gt;
&lt;li&gt;La gestion des arrières plans avec en particulier les images d'arrière plan multiples (et plus généralement l'utilisation de valeurs multiples sur un certains nombre de propriétés) et la possibilité de gérer finement le positionnement et la taille de ces images&amp;nbsp;;&lt;/li&gt;
&lt;li&gt;Les bordures avec une revue de détail des bords arrondis&amp;nbsp;;&lt;/li&gt;
&lt;li&gt;Les ombres sur le texte et sur les boites de contenu (qui permettent de faire bien plus que de simples ombres portées); &lt;/li&gt;
&lt;li&gt;La gestion de la mise en page avec un focus sur le colonage&amp;nbsp;;&lt;/li&gt;
&lt;li&gt;Les transformations 2D et 3D&amp;nbsp;;&lt;/li&gt;
&lt;li&gt;Les transitions. &lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Toutes ces nouveautés ne sont bien sur pas disponibles avec IE (on en reparlera lorsque IE9 sera là) mais Andy à une position très claire sur la question&amp;nbsp;: Il design pour le navigateur le plus avancé en termes de support de CSS3 (Safari&amp;nbsp;?) et ensuite il s'assure que la dégradation se fait correctement, quitte à prévoir un design alternatif pour certains navigateurs quand la dégradation est trop importante. Ce qui est important, ce n'est pas le design, mais l'expérience utilisateur. C'est cette expérience qui doit être préservée, pas le design. Et pour Andy, qui est un excellent designer, le design n'est clairement pas l'alpha et l'oméga de l'expérience utilisateur. En particulier, il insiste sur le fait qu'un site peut être vue sur différents navigateurs dans des situations très différentes (un macbook, un iPad et un iPhone n'offrent pas les même conditions d'utilisation... oui, c'est un fan d'Apple &lt;img src=&quot;/themes/default/smilies/smile.png&quot; alt=&quot;:)&quot; class=&quot;smiley&quot; /&gt; ). &lt;/p&gt;
&lt;p&gt;Après nous avoir bien alléché avec toute ses possibilités, se pose la question de les mettre en œuvre. Comme on a pris un peu de retard sur le programme, il se contentera d'évoquer quelques scripts permettant de contourner quelques limitation clé de certains navigateurs (par exemple &lt;a hreflang=&quot;en&quot; href=&quot;http://www.keithclark.co.uk/labs/ie-css3/&quot;&gt;ie-css3.js de Keith Clark&lt;/a&gt;) et surtout «&amp;nbsp;&lt;a hreflang=&quot;en&quot; href=&quot;http://www.modernizr.com/&quot;&gt;Modernizr&lt;/a&gt;&amp;nbsp;». A titre personnel, je suis assez réticent à utiliser ce petit bout de Javascript mais Andy le vend très bien. Ceci-dit, il l'intègre dans une logique de travail incluant un savoir-faire de haut niveau qui en fait un vrai plus à utiliser et de fait, je reste persuadé que c'est un outil qu'il ne faut pas mettre dans les mains d'un débutant. En effet, Andy maitrise à la perfection les questions de dégradation harmonieuse et d'enrichissement progressif, en conséquence il sait parfaitement quand utiliser un facilitateur comme «&amp;nbsp;Modernizr&amp;nbsp;» et quand ne pas l'utiliser, ce qui n'est pas nécessairement le cas du webdesigner moyen (en admettant que la notion de webdesigner moyen ait un sens)&lt;/p&gt;
&lt;p&gt;En guise de dessert, nous terminons l'après-midi avec la gestion des polices typographiques \o/. La quasi totalité des navigateurs actuels supporte la gestion des polices typographiques. Néanmoins, chacun utilise des formats différents (eot, ttf, woff...). On commence donc par débroussailler ce sujet en ayant droit à une petite visite des utilitaires du site &lt;a hreflang=&quot;en&quot; href=&quot;http://www.fontsquirrel.com&quot;&gt;fontsquirrel.com&lt;/a&gt;. Néanmoins, actuellement la question des droits d'utilisation des polices sur le web est un problème délicat. Andy nous présente alors &lt;a hreflang=&quot;en&quot; href=&quot;http://typekit.com&quot;&gt;typekit.com&lt;/a&gt; en détail (Disclaimer&amp;nbsp;: typekit sponsorise Andy Clark pour son intervention, mais ça n'enlève rien à la qualité de l'outil). Ce site propose un système qui permet de résoudre efficacement la question des droits d'utilisation et un ensemble d'outil permettant de se customiser ses polices aux petits oignons. Enfin, on fait un petit coucou aux &lt;a hreflang=&quot;en&quot; href=&quot;http://code.google.com/apis/webfonts/&quot;&gt;Google Font API&lt;/a&gt; qui présente une alternative gratuite à typekit mais dont le catalogue est encore assez pauvre. Objectivement, il n'y a aujourd'hui aucun frein technique à l'utilisation des polices typographiques embarquées dans les page HTML (sauf pour des questions de performances, mais c'est un autre débat).&lt;/p&gt;
&lt;p&gt;Voila pour cette première journée. Ce fut un plaisir de rencontrer Andy. C'est un webdesigner extrêmement talentueux à la fois enthousiaste et réaliste. Son prochain livre sort en Septembre, autant dire que je l'attend impatiemment :D&lt;/p&gt;</description>

    

      </item>
  
  <item>
    <title>La propriété CSS display: inline-block</title>
    <link>http://jeremie.patonnier.net/post/2010/01/28/La-propri%C3%A9t%C3%A9-CSS-display-inline-block</link>
    <guid isPermaLink="false">urn:md5:96711795893b5a0ca0b88e376cfd5480</guid>
    <pubDate>Thu, 28 Jan 2010 14:00:00 +0100</pubDate>
    <dc:creator>Jeremie</dc:creator>
        <category>Web</category>
        <category>CSS</category><category>webdesign</category>
    <description>&lt;p&gt;La propriété CSS &lt;code&gt;display&lt;/code&gt; reste sous-employée par les intégrateurs web. Ce n'est pas entièrement leur faute, les implémentations dans les navigateurs n'étant pas entièrement à la hauteur de la norme. Je reviens ici sur la valeur &lt;code&gt;inline-block&lt;/code&gt; de cette propriété qui est désormais implémenté dans tous les navigateurs du marché et qui peut facilement nous aider à sortir de la sur-utilisation de la propriété &lt;code&gt;float&lt;/code&gt;.&lt;/p&gt;    &lt;p&gt;La propriété &lt;code&gt;display&lt;/code&gt; permet d'indiquer explicitement le mode de rendu d'un élément HTML. Les valeurs les plus connues sont &lt;code&gt;none&lt;/code&gt;, &lt;code&gt;block&lt;/code&gt; et &lt;code&gt;inline&lt;/code&gt;. Pourtant il y en a beaucoup d'autres et en particulier la valeur &lt;code&gt;inline-block&lt;/code&gt; &lt;img src=&quot;/themes/default/smilies/wink.png&quot; alt=&quot;;)&quot; class=&quot;smiley&quot; /&gt; &lt;/p&gt;
&lt;h2&gt;&lt;code&gt;Block&lt;/code&gt; et &lt;code&gt;inline&lt;/code&gt;, les basiques&lt;/h2&gt;
&lt;p&gt;Chacune de ces valeurs va avoir une incidence sur la façon de rendre les éléments HTML ciblés. Malheureusement, les normes &lt;a hreflang=&quot;en&quot; href=&quot;http://www.w3.org/TR/1999/REC-html401-19991224/struct/global.html#h-7.5.3&quot;&gt;HTML 4.01&lt;/a&gt; et &lt;a hreflang=&quot;en&quot; href=&quot;http://www.w3.org/TR/2009/CR-CSS2-20090908/visuren.html#display-prop&quot;&gt;CSS 2.1&lt;/a&gt; sont assez floues sur ce que sont des éléments de type &lt;code&gt;block&lt;/code&gt; ou &lt;code&gt;inline&lt;/code&gt; et les futures normes HTML 5 et &lt;a hreflang=&quot;en&quot; href=&quot;http://www.w3.org/TR/2007/WD-css3-box-20070809/#block-level&quot;&gt;CSS 3&lt;/a&gt; sont à peines plus loquaces sur le sujet. Pour mieux comprendre ce que sont ces types de rendu, je vous propose une caractérisation de ceux-ci selon mon expérience (c'est totalement empirique, et si vous pensez que j'ai omis des choses, n'hésitez pas à le signaler).&lt;/p&gt;
&lt;h3&gt;Les caractéristiques d'un élément de type &lt;code&gt;block&lt;/code&gt; :&lt;/h3&gt;
&lt;ul&gt;&lt;li&gt;Les éléments de type &lt;code&gt;block&lt;/code&gt; peuvent contenir à la fois d'autres éléments de type &lt;code&gt;block&lt;/code&gt;, des éléments de type &lt;code&gt;inline&lt;/code&gt; ou du texte&lt;sup&gt;&lt;a href=&quot;http://jeremie.patonnier.net/post/2010/01/28/La-propri%C3%A9t%C3%A9-CSS-display-inline-block#note1&quot;&gt;1&lt;/a&gt;&lt;/sup&gt;.&lt;/li&gt;
&lt;li&gt;Il est possible de fixer une largeur et une hauteur à ces éléments&lt;/li&gt;
&lt;li&gt;Par défaut, la largeur d'un élément de type &lt;code&gt;block&lt;/code&gt; est aussi grande que celle de son conteneur&lt;/li&gt;
&lt;li&gt;Ils s'empilent naturellement les uns au-dessus des autres, dans l'ordre du flux HTML (Dans un flux de texte, ils passent à la ligne et forcent le retour à la ligne des éléments qui les suivent, les caractères invisibles présents avant et après sont ignorés)&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;Les caractéristiques d'un élément de type &lt;code&gt;inline&lt;/code&gt; :&lt;/h3&gt;
&lt;ul&gt;&lt;li&gt;Les éléments de type &lt;code&gt;inline&lt;/code&gt; ne peuvent contenir que d'autres éléments de type &lt;code&gt;inline&lt;/code&gt; ou du texte&lt;/li&gt;
&lt;li&gt;Il n'est pas possible de définir une largeur et une hauteur explicite pour ces éléments&lt;/li&gt;
&lt;li&gt;Par défaut, leur largeur et leur hauteur dépendent du contenue de l'élément&lt;/li&gt;
&lt;li&gt;Ils s'écoulent selon le flux du texte HTML&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;inline-block, un mélange des deux&amp;nbsp;!&lt;/h3&gt;
&lt;p&gt;Avec cette valeur de la propriété &lt;code&gt;display&lt;/code&gt;, vous allez avoir des éléments qui vont se comporter à la fois comme s'ils étaient de type &lt;code&gt;block&lt;/code&gt; et de type &lt;code&gt;inline&lt;/code&gt;. Concrètement, ça va donner les caractéristiques suivantes :&lt;/p&gt;
&lt;ul&gt;&lt;li&gt;Les éléments de type &lt;code&gt;inline-block&lt;/code&gt; peuvent contenir à la fois d'autres éléments de type &lt;code&gt;block&lt;/code&gt;, des éléments de type &lt;code&gt;inline&lt;/code&gt; ou du texte.&lt;/li&gt;
&lt;li&gt;Il est possible de fixer une largeur est une hauteur à ces éléments&lt;/li&gt;
&lt;li&gt;Par défaut, leurs largeurs et leurs hauteurs dépendent du contenu de l'élément&lt;/li&gt;
&lt;li&gt;Ils s'écoulent selon le flux du texte HTML&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Cela va avoir quelques conséquences :&lt;/p&gt;
&lt;ul&gt;&lt;li&gt;La hauteur d'un élément de type &lt;code&gt;inline-block&lt;/code&gt; va contrarier la hauteur des lignes de texte (même si vous l'avez fixée avec la propriété &lt;code&gt;line-height&lt;/code&gt;) et donc potentiellement compromettre le rythme vertical de votre design.&lt;/li&gt;
&lt;li&gt;Vous pouvez influer sur le positionnement de l'élément sur la ligne de base typographique en utilisant la propriété &lt;code&gt;vertical-align&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Si une partie du contenu de l'élément doit passer à la ligne, c'est tout l'élément qui passera à la ligne&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;Implémentation de cette valeur dans les navigateurs&lt;/h2&gt;
&lt;p&gt;Le plus important à retenir, c'est que tous les navigateurs du marché implémentent la valeur &lt;code&gt;inline-block&lt;/code&gt; pour la propriété &lt;code&gt;display&lt;/code&gt;. &lt;/p&gt;
&lt;p&gt;Attention tout de même à sont utilisation dans IE6 et IE7. En effet, l'implémentation de cette valeur est buggée sur ces deux navigateurs et ils ne supportent celle-ci que pour les éléments HTML qui sont nativement considérés de type &lt;code&gt;inline&lt;/code&gt; par ces navigateurs. Cela à peu d'incidence pour peu qu'on y prenne garde. De toute façon, IE6 va bien finir par disparaitre et IE7 va rapidement être remplacé par IE8. D'ailleurs, IE8 est déjà le navigateur dominant de la gamme IE sur le marché des particuliers, il est donc plus que temps d'utiliser cette valeur de la propriété &lt;code&gt;display&lt;/code&gt;.&lt;/p&gt;
&lt;h2&gt;Cas d'utilisations&lt;/h2&gt;
&lt;h3&gt;Menu de navigation&lt;/h3&gt;
&lt;p&gt;L'usage de la propriété &lt;code&gt;display:inline-block&lt;/code&gt; peut résoudre bon nombre des difficultés liées à l'usage de la propriété &lt;code&gt;float&lt;/code&gt;. Néanmoins, il faut rester prudent.&lt;/p&gt;
&lt;p&gt;&lt;a hreflang=&quot;fr&quot; href=&quot;http://jeremie.patonnier.net/experiences/inline-block/inline-block.html#exemple1&quot;&gt;Ce premier exemple&lt;/a&gt; reprend un balisage classique de menu sur une base de liste non-ordonnée. Cela fonctionne bien mais à deux conditions qui disqualifient presque l'usage de la valeur &lt;code&gt;inline-block&lt;/code&gt; ici. Premièrement, dans la mesure où la balise &lt;code&gt;LI&lt;/code&gt; est considérée nativement comme étant de type &lt;code&gt;block&lt;/code&gt;, IE6 et IE7 ne géreront pas correctement l'usage de &lt;code&gt;display&lt;/code&gt;. En outre, si vous voulez pouvoir contrôler l'espacement entre les onglets, vous devez accoler les balises &lt;code&gt;LI&lt;/code&gt; dans le code HTML. En effet, les balises étant déclarées comme &lt;code&gt;inline-block&lt;/code&gt;, elles vont suivre le flux de texte HTML ce qui veux dire que les espaces entre les balises sont affichés.&lt;/p&gt;
&lt;p&gt;&lt;a hreflang=&quot;fr&quot; href=&quot;http://jeremie.patonnier.net/experiences/inline-block/inline-block.html#exemple1&quot;&gt;&lt;img title=&quot;Un menu d'onglets&quot; alt=&quot;voir le premier exemple de menu&quot; src=&quot;http://jeremie.patonnier.net/public/inline-block/exemple1.png&quot; /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a hreflang=&quot;fr&quot; href=&quot;http://jeremie.patonnier.net/experiences/inline-block/inline-block.html#exemple2&quot;&gt;Ce deuxième exemple&lt;/a&gt; utilise un balisage plus simple (une succession de balises &lt;code&gt;A&lt;/code&gt;) et utilise les spécificités qu'offre &lt;code&gt;inline-block&lt;/code&gt; : centrage horizontal et vertical et utilisation des espaces typographiques. De fait, cette approche fonctionne parfaitement dans IE6 et IE7.&lt;/p&gt;
&lt;p&gt;&lt;a hreflang=&quot;fr&quot; href=&quot;http://jeremie.patonnier.net/experiences/inline-block/inline-block.html#exemple2&quot;&gt;&lt;img title=&quot;Un menu centré&quot; alt=&quot;Voir le deuxième exemple de menu&quot; src=&quot;http://jeremie.patonnier.net/public/inline-block/exemple2.png&quot; /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h3&gt;Nuage de tags&lt;/h3&gt;
&lt;p&gt;&lt;a hreflang=&quot;fr&quot; href=&quot;http://jeremie.patonnier.net/experiences/inline-block/inline-block.html#exemple3&quot;&gt;L'utilisation de &lt;code&gt;inline-block&lt;/code&gt; sur un nuage de tags&lt;/a&gt; offre un monde de possibilités. Le fait de pouvoir donner explicitement une hauteur et une largeur ou de pouvoir spécifier des marges explicites aux éléments ouvre d'énormes portes aux graphistes. L'avantage le plus immédiat est d'éviter que des tags en plusieurs mots soient coupés par un retour à la ligne impromptu.&lt;/p&gt;
&lt;p&gt;&lt;a hreflang=&quot;fr&quot; href=&quot;http://jeremie.patonnier.net/experiences/inline-block/inline-block.html#exemple3&quot;&gt;&lt;img title=&quot;Nuage de tags&quot; alt=&quot;Voir l'exemple de nuage de tags&quot; src=&quot;http://jeremie.patonnier.net/public/inline-block/exemple3.png&quot; /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h3&gt;Titraille dépendante du contenu&lt;/h3&gt;
&lt;p&gt;&lt;a hreflang=&quot;fr&quot; href=&quot;http://jeremie.patonnier.net/experiences/inline-block/inline-block.html#exemple4&quot;&gt;Ce dernier exemple&lt;/a&gt; montre comment cette valeur permet de gagner en subtilité sur la gestion graphique des titres en permettant de créer simplement des effets liés à la taille du contenu plutôt qu'à la taille du contenant.&lt;/p&gt;
&lt;p&gt;&lt;a hreflang=&quot;fr&quot; href=&quot;http://jeremie.patonnier.net/experiences/inline-block/inline-block.html#exemple4&quot;&gt;&lt;img title=&quot;Titraille adaptative&quot; alt=&quot;Voir l'exemple de titraille adaptative&quot; src=&quot;http://jeremie.patonnier.net/public/inline-block/exemple4.png&quot; /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;Aller plus loin&lt;/h2&gt;
&lt;p&gt;La propriété &lt;code&gt;display&lt;/code&gt; a bien d'autres valeurs : certaines sont peu ou pas implémentées (la valeur &lt;code&gt;compact&lt;/code&gt;), certaines sont partiellement implémentées et particulièrement difficiles à comprendre (la valeur &lt;code&gt;run-in&lt;/code&gt;) et certaines sont largement implémentées mais peu ou pas utilisées (les valeurs &lt;code&gt;table-*&lt;/code&gt; qui mériteraient un article à elles-seules... peut-être un jour si j'ai le temps &lt;img src=&quot;/themes/default/smilies/wink.png&quot; alt=&quot;;)&quot; class=&quot;smiley&quot; /&gt; ).&lt;/p&gt;
&lt;ul&gt;&lt;li&gt;Pour en savoir plus sur le sujet, je vous renvoie vers ma bible du support des propriétés CSS : le site &lt;a hreflang=&quot;en&quot; href=&quot;http://www.quirksmode.org/&quot;&gt;quirksmode.org&lt;/a&gt; et plus spécifiquement, sa section dédié à &lt;a hreflang=&quot;en&quot; href=&quot;http://www.quirksmode.org/css/display.html&quot;&gt;la propriété &lt;code&gt;display&lt;/code&gt;&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;Pour savoir comment contourner les limites des vieux navigateurs, je vous recommande l'excellent article de Florent Verschelde : &lt;a hreflang=&quot;fr&quot; href=&quot;http://covertprestige.info/css/inline-block/&quot;&gt;Inline-block dans tous les navigateurs modernes ?&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Pour une vue d'ensemble de la propriété &lt;code&gt;display&lt;/code&gt;, il y a cette excellent tutoriel chez Alsacréations : &lt;a hreflang=&quot;fr&quot; href=&quot;http://www.alsacreations.com/tuto/lire/610-Mise-en-page-CSS-avancee-grace-a-la-propriete-display.html&quot;&gt;Mise en page CSS avancée grace à la propriété display &lt;/a&gt;&lt;/li&gt;
&lt;li&gt;En anglais : Robert Nyman, &lt;a hreflang=&quot;en&quot; href=&quot;http://robertnyman.com/2010/02/24/css-display-inline-block-why-it-rocks-and-why-it-sucks&quot; lang=&quot;en&quot;&gt;CSS display: inline-block: why it rocks, and why it sucks&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;hr /&gt;
&lt;ol&gt;&lt;li id=&quot;note1&quot;&gt;Attention, il s'agit de la définition générale (selon la norme CSS) de ce qu'est un élément
de type &lt;code&gt;block&lt;/code&gt;. Cela ne remet pas en cause les spécificités propres à
HTML comme par exemple la balise &lt;code&gt;P&lt;/code&gt; qui selon la norme HTML 4.01/ XHTML
1.0 est bien de type &lt;code&gt;block&lt;/code&gt; mais ne peut pas contenir d'autres éléments
de type &lt;code&gt;block&lt;/code&gt;.&lt;/li&gt;
&lt;/ol&gt;</description>

    

      </item>
  
</channel>
</rss>
