<?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 - Tag - 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>Thu, 29 Jul 2010 14:58:37 +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>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>
    
    
    
          <comments>http://jeremie.patonnier.net/post/2010/06/23/Ameliorez-vos-liens-avec-la-generation-de-contenu-CSS#comment-form</comments>
      <wfw:comment>http://jeremie.patonnier.net/post/2010/06/23/Ameliorez-vos-liens-avec-la-generation-de-contenu-CSS#comment-form</wfw:comment>
      <wfw:commentRss>http://jeremie.patonnier.net/feed/atom/comments/36</wfw:commentRss>
      </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/#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>
    
  <item>
    <title>Le modèle de boite flexible en CSS 3</title>
    <link>http://jeremie.patonnier.net/post/2009/11/10/Le-modele-de-boite-flexible-en-CSS-3</link>
    <guid isPermaLink="false">urn:md5:edd632c94b4e34fcb11596331cd9a968</guid>
    <pubDate>Tue, 10 Nov 2009 12:13:00 +0100</pubDate>
    <dc:creator>Jeremie</dc:creator>
        <category>Web</category>
        <category>css</category><category>webdesign</category>    
    <description>&lt;p&gt;La future norme CSS3 introduits plusieurs façons différentes d'appréhender la mise en page d'un document web. Il y a quelques temps, &lt;a hreflang=&quot;fr&quot; href=&quot;http://jeremie.patonnier.net/post/2009/07/16/CSS-3-Le-module-Template-Layout&quot;&gt;je vous ai parlé du module &quot;Template Layout&quot;&lt;/a&gt;. Cette fois je vais vous présenter le module &quot;Flexible Box Layout&quot; qui est sans doute le plus prometteur de tous, d'autant plus qu'il commence déjà à être implémenté (non, pas dans IE, arrêtez de rêver&amp;nbsp;!) &lt;/p&gt;
&lt;p lang=&quot;en&quot;&gt;&lt;strong&gt;Update:&lt;/strong&gt; &lt;em&gt;Dear English readers, I've made &lt;/em&gt;&lt;a style=&quot;font-style: italic;&quot; hreflang=&quot;en&quot; href=&quot;http://hacks.mozilla.org/2010/04/the-css-3-flexible-box-model/&quot;&gt;an English version of this article available on hacks.mozilla.org&lt;/a&gt;&lt;em&gt;.&lt;/em&gt; &lt;/p&gt;
&lt;p lang=&quot;en&quot;&gt;&lt;strong&gt;Update 2:&lt;/strong&gt; &lt;em&gt;There's a &lt;/em&gt;&lt;a style=&quot;font-style: italic;&quot; hreflang=&quot;zh&quot; href=&quot;http://www.denisdeng.com/wp-trackback.php?p=938&quot;&gt;Chinese version&lt;/a&gt;&lt;em&gt; available... amazing!&lt;/em&gt;&lt;/p&gt;    &lt;h2&gt;Un modèle de boite flexible&lt;/h2&gt;
&lt;p&gt;CSS3 introduit donc un nouveau modèle de boite en plus du modèle de boite traditionnel issu de CSS 1 et 2. Un modèle de boite flexible permet de déterminer la façon dont des boites sont distribuées au sein d'autres boites (horizontalement ou verticalement) et comment elles se répartissent l'espace disponible entre elles.&lt;/p&gt;
&lt;p&gt;Pour ceux qui connaissent, ce modèle de boite est utilisé par XUL (le langage de définition d'interface des produits Mozilla). Des mécanismes similaires sont utilisés par de nombreux autres langages de description d'interface comme XAML ou GladeXML.&lt;/p&gt;
&lt;p&gt;Pour résumer de manière un peu simpliste, le modèle de boite flexible est exactement ce qu'il vous faut si vous voulez réaliser des designs liquides (qui s'adaptent automatiquement à la taille de la fenêtre du navigateur) ou élastiques (qui s'adaptent à la taille de la police typographique de l'utilisateur)&lt;/p&gt;
&lt;p&gt;Pour la suite de l'article, tous mes exemples se baseront sur le code HTML suivant&amp;nbsp;:&lt;/p&gt;
&lt;pre class=&quot;sh_html&quot;&gt;&amp;lt;body&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;div id=&quot;boite1&quot;&amp;gt;1&amp;lt;/div&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;div id=&quot;boite2&quot;&amp;gt;2&amp;lt;/div&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;div id=&quot;boite3&quot;&amp;gt;3&amp;lt;/div&amp;gt;&lt;br /&gt;&amp;lt;/body&amp;gt;&lt;/pre&gt;
&lt;h2&gt;Distribuer des boites, kézaco&amp;nbsp;?&lt;/h2&gt;
&lt;p&gt;Par défaut, le modèle de boite CSS traditionnel distribue les boites verticalement, les unes au dessous des autres selon l'ordre du flux HTML. Dans le cadre du modèle de boite flexible, on peut spécifier cela explicitement et même inverser l'ordre d'affichage des boites. Le passage au modèle de boite flexible se fait de manière explicite en utilisant la propriété &lt;code&gt;display&lt;/code&gt; avec la valeur &lt;code&gt;box&lt;/code&gt; (ou &lt;code&gt;inline-box&lt;/code&gt;) sur une boite qui en contient d'autres.&lt;/p&gt;
&lt;h3&gt;Distribution horizontale ou verticale&lt;/h3&gt;
&lt;p&gt;La propriété &lt;code&gt;box-orient&lt;/code&gt; permet de spécifier l'axe de distribution. Cette propriété prend plusieurs valeurs, mais les plus simple à comprendre sont &lt;code&gt;vertical&lt;/code&gt; et &lt;code&gt;horizontal&lt;/code&gt;. Les autres valeurs (&lt;code&gt;inline-axis&lt;/code&gt; et &lt;code&gt;block-axis&lt;/code&gt;) ont les mêmes effets, mais permettent en plus de jouer sur la ligne de base de l'alignement (les boites sont alors considérées comme des boites &quot;en ligne&quot;).&lt;/p&gt;
&lt;pre class=&quot;sh_css&quot;&gt;body{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; display : box;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; box-orient : horizontal;&lt;br /&gt;}&lt;/pre&gt;
&lt;p&gt;&lt;a hreflang=&quot;fr&quot; href=&quot;http://jeremie.patonnier.net/experiences/modele-de-boite-flexible/exemple-simple.html#exemple1&quot;&gt;&lt;img title=&quot;Disposition horizontal des boites&quot; alt=&quot;&quot; src=&quot;http://jeremie.patonnier.net/public/boite-flexible/exemple1.png&quot; /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h3&gt;Distribution inversée&lt;/h3&gt;
&lt;p&gt;La propriété &lt;code&gt;box-direction&lt;/code&gt; permet de spécifier l'ordre de disposition des boites. En effet, une fois que vous avez spécifier votre axe de distribution, les boites se disposent selon l'ordre du flux HTML, de haut en bas dans le cadre d'une distribution verticale et de gauche à droite dans le cas d'une distribution horizontale. En utilisant la valeur reverse, vous pouvez inverser l'ordre de disposition des boites par rapport à leur apparition dans le flux HTML. J'ignore ce que cela donnera au point de vue accessibilité, cependant dans la mesure ou ces déclarations sont explicites quand à l'ordre du flux à suivre (contrairement à ce qui se fait avec les techniques du modèle de boites CSS traditionnel), les navigateurs qui implémentent déjà ce modèle de boites arrivent sans trop de difficultés à gérer les mécanismes d'accessibilité de base (l'ordre des tabulations par exemple).&lt;/p&gt;
&lt;p&gt;Méfiez-vous de cette propriété car elle influe sur le comportement d'autres propriétés et peut donc donner lieu à des résultats contre intuitif.&lt;/p&gt;
&lt;pre class=&quot;sh_css&quot;&gt;body{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; display : box;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; box-orient : vertical;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; box-direction : reverse;&lt;br /&gt;}&lt;/pre&gt;
&lt;p&gt;&lt;a hreflang=&quot;fr&quot; href=&quot;http://jeremie.patonnier.net/experiences/modele-de-boite-flexible/exemple-simple.html#exemple2&quot;&gt;&lt;img title=&quot;Disposition verticale inversé des boites&quot; alt=&quot;&quot; src=&quot;http://jeremie.patonnier.net/public/boite-flexible/exemple2.png&quot; /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h3&gt;Distribution explicite&lt;/h3&gt;
&lt;p&gt;La propriété &lt;code&gt;box-ordinal-group&lt;/code&gt; permet de définir explicitement l'ordre de distribution des boites. Là on obtient l'ultime degrés de la personnalisation en pouvant définir soit même l'ordre de distribution des boites, quelque soit l'ordre des boites dans le flux HTML. Ces groupes sont définie par un nombre commençant à 1 (la valeur par défaut). Le modèle de boite va donc commencer par distribuer ces groupes puis ensuite les boites au seins d'un même groupe. La distribution se fait du plus petit (le groupe 1) au plus grand (le groupe 2). Il y a un petit flou dans la spécification (en tout cas je n'ai pas su la décrypter avec certitude) sur l'influence exacte de &lt;code&gt;box-direction&lt;/code&gt; vis à vis du positionnement des groupes, donc attention si vous mélanger l'usage de &lt;code&gt;box-ordinal-group&lt;/code&gt; et &lt;code&gt;box-direction&lt;/code&gt;.&lt;/p&gt;
&lt;pre class=&quot;sh_css&quot;&gt;body{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; display : box;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; box-orient : vertical;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;#boite1{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; box-ordinal-group : 2;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;#boite2{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; box-ordinal-group : 2;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;#boite3{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; box-ordinal-group : 1;&lt;br /&gt;}&lt;/pre&gt;
&lt;p&gt;&lt;a hreflang=&quot;fr&quot; href=&quot;http://jeremie.patonnier.net/experiences/modele-de-boite-flexible/exemple-simple.html#exemple3&quot;&gt;&lt;img title=&quot;Disposition verticale arbitraire&quot; alt=&quot;&quot; src=&quot;http://jeremie.patonnier.net/public/boite-flexible/exemple3.png&quot; /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;Et la flexibilité dans tout ça&amp;nbsp;?&lt;/h2&gt;
&lt;p&gt;Si déjà, pouvoir influer sur l'ordre du flux HTML est énorme, là ou ça devient vraiment fun c'est quand on commence à gérer l'espace disponible.&lt;/p&gt;
&lt;h3&gt;La taille des boites&lt;/h3&gt;
&lt;p&gt;Par défaut une boite n'est pas flexible. Elle n'est flexible que si elle à la propriété &lt;code&gt;box-flex&lt;/code&gt; avec une valeur supérieur ou égal à 1.&lt;/p&gt;
&lt;p&gt;Si une boite n'est pas flexible, elle prendra le maximum de place possible afin que sont contenu soit affiché sans débord (overflow). Ce maximum pouvant être fixé avec les propriétés &lt;code&gt;width&lt;/code&gt; et &lt;code&gt;height&lt;/code&gt; (ou leur version &lt;code&gt;min-*&lt;/code&gt; et &lt;code&gt;max-*&lt;/code&gt;).&lt;/p&gt;
&lt;p&gt;Si une boite est déclarée flexible, sa taille va être calculée en fonction de 2 critères&amp;nbsp;:&lt;/p&gt;
&lt;ol&gt;&lt;li&gt;Les déclaration de taille explicites (&lt;code&gt;width&lt;/code&gt;, &lt;code&gt;height&lt;/code&gt;, &lt;code&gt;min-*&lt;/code&gt; et &lt;code&gt;max-*&lt;/code&gt;)&lt;/li&gt;
&lt;li&gt;La taille du conteneur et l'espace restant.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;De cette manière, si aucune des boites n'a de déclaration de taille explicite, elle auront toute une taille proportionnel à celle du conteneur. Cela se fera sur le principe suivant , la taille d'une boite est égale à la taille du conteneur multipliée par la valeur de la propriété &lt;code&gt;box-flex&lt;/code&gt; de la boite divisée par la somme des valeurs des propriétés &lt;code&gt;box-flex&lt;/code&gt; de toutes les boites incluse dans le conteneur.&lt;/p&gt;
&lt;p&gt;Par contre, si une ou plusieurs boites ont une taille explicitement définie, la taille de toutes ses boites est cumulé et les boites flexibles se répartissent l'espace restant sur le principe précédent.&lt;/p&gt;
&lt;p&gt;Ça à l'aire un peu compliqué comme ça, mais vous allez voir, avec quelques exemple, on comprend mieux.&lt;/p&gt;
&lt;h4&gt;Toutes les boites sont flexibles&lt;/h4&gt;
&lt;p&gt;Dans l'exemple ci-dessous, la boite 1 est deux fois plus grande que la boite 2 et la boite 2 à la même taille que la boite 3. Ça ressemble beaucoup à ce que l'on aurait obtenu si on avait utilisé des boites avec des largeurs exprimées en pourcentage. Il y a néanmoins une différence fondamental. Si vous rajoutez une boite, vous n'avez pas besoin de recalculer le pourcentage correspondant de chaque boite. Avec le modèle de boite flexible, à chaque fois que vous allez rajouter une boite, toute les autres se feront plus petites pour laisser de la place à la nouvelle sans intervention de votre part.&lt;/p&gt;
&lt;pre class=&quot;sh_css&quot;&gt;body{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; display : box;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; box-orient : horizontal;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;#boite1{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; box-flex : 2;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;#boite2{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; box-flex : 1;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;#boite3{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; box-flex : 1;&lt;br /&gt;}&lt;/pre&gt;&lt;p&gt;&lt;a hreflang=&quot;fr&quot; href=&quot;http://jeremie.patonnier.net/experiences/modele-de-boite-flexible/exemple-simple.html#exemple4&quot;&gt;&lt;img title=&quot;Flexibilité des tailles de boites&quot; alt=&quot;&quot; src=&quot;http://jeremie.patonnier.net/public/boite-flexible/exemple4.png&quot; /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h4&gt;Certaines boites ont une taille prédéfinie&lt;/h4&gt;
&lt;p&gt;Dans l'exemple ci-après, la boite 3, qui n'est pas flexible, fera 160px de large et il restera 240 px d'espace libre à distribuer entre la boite 1 et la boite 2, ce qui donnera une largeur de 160px pour la boite 1 (240px x 2/3) et 80px pour la boite 2 (240px x 1/3). Rien ne vous empêche de faire en sorte que la boite 3 soit également flexible. Dans ce cas, le comportement sur la taille de cette boite ressemble à l'application de la propriété CSS &lt;code&gt;min-width&lt;/code&gt;.&lt;/p&gt;
&lt;pre class=&quot;sh_css&quot;&gt;body{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; display : box;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; box-orient : horizontal;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; width : 400px;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;#boite1{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; box-flex : 2;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;#boite2{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; box-flex : 1;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;#boite3{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; width : 160px;&lt;br /&gt;}&lt;/pre&gt;
&lt;p&gt;&lt;a hreflang=&quot;fr&quot; href=&quot;http://jeremie.patonnier.net/experiences/modele-de-boite-flexible/exemple-simple.html#exemple5&quot;&gt;&lt;img title=&quot;Mélange de boites flexibles et rigides&quot; alt=&quot;&quot; src=&quot;http://jeremie.patonnier.net/public/boite-flexible/exemple5.png&quot; /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h3&gt;La gestion du débord&lt;/h3&gt;
&lt;p&gt;Dans la mesure, ou l'on peut mélanger des boites flexibles, des boites rigides et des boites flexibles avec des tailles prédéfinies, on peut se retrouver avec des boites dont la taille cumulé est supérieur ou inférieur à la taille de la boite qui les contient. Donc soit on a trop d'espace, soit on en a pas assez&amp;nbsp;!&lt;/p&gt;
&lt;h4&gt;Il y a trop d'espace, qu'est-ce que j'en fait&amp;nbsp;?&lt;/h4&gt;
&lt;p&gt;L'espace surnuméraire va se répartir en suivant les règles imposées par les propriétés &lt;code&gt;box-align&lt;/code&gt; et &lt;code&gt;box-pack&lt;/code&gt;. &lt;/p&gt;
&lt;p&gt;La propriété &lt;code&gt;box-pack&lt;/code&gt; va gérer la répartition horizontal de l'espace et peut prendre 4 valeurs&amp;nbsp;: &lt;code&gt;start&lt;/code&gt;, &lt;code&gt;end&lt;/code&gt;, &lt;code&gt;justify&lt;/code&gt; et &lt;code&gt;center&lt;/code&gt;&amp;nbsp;:&lt;/p&gt;
&lt;ol&gt;&lt;li&gt;&lt;code&gt;start&lt;/code&gt;&amp;nbsp;: les boites sont positionné à gauche et tout l'espace restant est positionné à droite&amp;nbsp;;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;end&lt;/code&gt;&amp;nbsp;: les boites sont positionné à droite et tout l'espace restant est positionné à gauche&amp;nbsp;;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;justify&lt;/code&gt;&amp;nbsp;: l'espace se répartis de manière équitable entre les boites&amp;nbsp;;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;center&lt;/code&gt;&amp;nbsp;: l'espace se répartis de manière équitable aux extrémités du conteneur.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;La propriété &lt;code&gt;box-align&lt;/code&gt; va gérer la répartition vertical de l'espace et peut prendre 5 valeurs&amp;nbsp;: &lt;code&gt;start&lt;/code&gt;, &lt;code&gt;end&lt;/code&gt;, &lt;code&gt;center&lt;/code&gt;, &lt;code&gt;baseline&lt;/code&gt; et &lt;code&gt;stretch&lt;/code&gt;&amp;nbsp;:&lt;/p&gt;
&lt;ol&gt;&lt;li&gt;&lt;code&gt;start&lt;/code&gt;&amp;nbsp;: Les boites s'alignent sur le bord haut du conteneur et l'espace restant est placé en dessous des boites&amp;nbsp;;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;end&lt;/code&gt;&amp;nbsp;: Les boites s'alignent sur le bord bas du conteneur et l'espace restant est placé au dessus des boites&amp;nbsp;;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;center&lt;/code&gt;&amp;nbsp;: les lignes médiane des boites s'alignent sur la ligne médiane du conteneur et l'espace restant se répartie équitablement au dessus et au dessous des boites&amp;nbsp;;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;baseline&lt;/code&gt;&amp;nbsp;: le bord bas des boites s'alignent sur la ligne de base typographique du conteneur (&lt;em&gt;c'est une interprétation simplifié de la spécification, mais ça donne une idée du comportement&lt;/em&gt;)&lt;/li&gt;
&lt;li&gt;&lt;code&gt;stretch&lt;/code&gt;&amp;nbsp;: Les boites sont étiré pour combler l'espace restant.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Attention à l'interprétation de ces deux propriétés. Elles sont fortement influencé par l'usage des propriétés &lt;code&gt;box-orient&lt;/code&gt; et &lt;code&gt;box-direction&lt;/code&gt; et peuvent donner lieu à des comportements contre-intuitifs (les comportements des valeur &lt;code&gt;start&lt;/code&gt; et &lt;code&gt;end&lt;/code&gt; peuvent être complètement inversés par exemple). J'espère que d'ici à la version final de la spécification, on aura plus d'éclaircissement (et d'exemple) sur ces interactions entre propriétés.&lt;/p&gt;
&lt;pre class=&quot;sh_css&quot;&gt;body{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; display : box;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; box-orient : horizontal;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; /* Le contenu de body est centré horizontalement */&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; box-pack : center;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; /* et verticalement ... \o/ */&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; box-align : center;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; width : 100%;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; height : 100%;&lt;br /&gt;}&lt;/pre&gt;&lt;p&gt;&lt;a hreflang=&quot;fr&quot; href=&quot;http://jeremie.patonnier.net/experiences/modele-de-boite-flexible/exemple-simple.html#exemple6&quot;&gt;&lt;img title=&quot;Boites centrées horitontalement et verticalement&quot; alt=&quot;&quot; src=&quot;http://jeremie.patonnier.net/public/boite-flexible/exemple6.png&quot; /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h4&gt;Il n'y a pas assez d'espace, comment est gérer le débord&amp;nbsp;?&lt;/h4&gt;
&lt;p&gt;Comme dans le modèle de boite traditionnel, c'est la propriété &lt;code&gt;overflow&lt;/code&gt; qui permet de spécifier le mode de débord des éléments surnuméraire, pas de surprise à ce niveau là.&lt;/p&gt;
&lt;p&gt;Néanmoins, là aussi il faut faire attention. En effet, l'usage des propriété &lt;code&gt;box-orient&lt;/code&gt; et &lt;code&gt;box-direction&lt;/code&gt; peut avoir des effets surprenant comme le fait de voir les élément déborder à droite plutôt qu'à gauche ou en haut plutôt qu'en bas. Prenez le temps d'expérimenter ça tranquillement avant de vous arracher les cheveux sur une mise en page complexe.&lt;/p&gt;
&lt;p&gt;Enfin, cerise sur le gâteau, il est possible d'éviter un débord en privilégiant un affichage sur plusieurs lignes (ou colonnes en fonction de l'orientation) grâce à la propriété &lt;code&gt;box-lines : multiple&lt;/code&gt;.&lt;/p&gt;
&lt;h2&gt;Et sinon, ça marche dans la vraie vie&amp;nbsp;?&lt;/h2&gt;
&lt;p&gt;Oui, Gecko et Webkit implémente tous les deux une version expérimental de ce modèle de boite (les propriétés sont respectivement préfixées par -moz- et par -webkit- et leur comportement n'est pas garanti). Ce qui signifie que Firefox, Safari, Chrome et les autres navigateurs utilisant ces moteurs de rendu sont capables de s'en servir (à priori depuis un certain temps déjà, Firefox 3.0 et Safari 3 supportant déjà cette fonctionnalité). Si vous avez le bon gout d'utiliser un de ces navigateurs moderne, voici &lt;a hreflang=&quot;fr&quot; href=&quot;http://jeremie.patonnier.net/experiences/modele-de-boite-flexible/exemple-blog.html&quot;&gt;une petite démo en ligne du modèle de boite flexible&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Pour les autres, voila comment devrait s'afficher l'exemple précédent&amp;nbsp;:&lt;/p&gt;
&lt;p&gt;&lt;img title=&quot;Exemple de mise en page d'un blog avec le modèle de boite flexible&quot; alt=&quot;&quot; src=&quot;http://jeremie.patonnier.net/public/boite-flexible/exemple-blog.png&quot; /&gt;&lt;/p&gt;
&lt;h2&gt;Conclusion&lt;/h2&gt;
&lt;p&gt;Si vous n'avez que faire de Internet Explorer, vous pouvez d'ors et déjà commencer à utiliser cette méthode pour gérer vos mises en page. Attention tout de même. Il s'agit de la première itération d'un &quot;Working Draft&quot; du W3C. Il va donc nécessairement y avoir des changements. Ceci dit, les implémentation de Gecko et de Webkit sont extrêmement cohérente et aboutis donc, si changement il y a, ils ne devraient pas être trop important.&lt;/p&gt;
&lt;p&gt;Ce modèle de boite permet de résoudre simplement des problèmes assez récurrent de web design (gestion des formulaires, placement des pieds de page, centrage vertical, dissociation du flux rendu et du flux HTML, etc.). Je vous encourage vivement à vous familiariser avec car il pourrait bien faire partie de notre quotidien de Webdesigner assez rapidement (si Microsoft décide de l'implémenter, ça peut arriver très vite).&lt;/p&gt;
&lt;p&gt;Les implémentations disponibles sont déjà suffisamment complètes pour faire beaucoup de choses. Néanmoins, la collision entre le modèle de boite traditionnel et le modèle de boite flexible n'est pas encore très claire (par exemple, impossible d'utiliser la propriété &lt;code&gt;position : relative&lt;/code&gt; avec une propriété &lt;code&gt;left&lt;/code&gt; ou &lt;code&gt;top&lt;/code&gt; sur un élément ayant la propriété &lt;code&gt;box-ordinal-group&lt;/code&gt;). Cela va s'affiner, mais ne vous étonnez pas si vos réflexes habituels sont un peu mis à mal. Autre point un peu délicat, l'interaction entre les différentes propriétés spécifiques à ce modèle de boite peuvent parfois donner lieux à des résultats franchement déroutant. Ça vous rappellera sans doute l'époque ou vous avez découvert les boites flottantes &lt;img src=&quot;/themes/default/smilies/wink.png&quot; alt=&quot;;-)&quot; class=&quot;smiley&quot; /&gt;&lt;/p&gt;
&lt;h3&gt;A lire également sur le sujet&lt;/h3&gt;
&lt;ul&gt;&lt;li&gt;Shawn J. Goff&amp;nbsp;: &lt;a hreflang=&quot;en&quot; href=&quot;http://shawnjgoff.com/blog/css3-flexible-box-layout-module&quot;&gt;CSS3 Flexible Box Layout Module&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;CSS3.info&amp;nbsp;: &lt;a hreflang=&quot;en&quot; href=&quot;http://www.css3.info/introducing-the-flexible-box-layout-module/&quot;&gt;Introducing the flexible box layout module&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;W3C&amp;nbsp;: &lt;a hreflang=&quot;en&quot; href=&quot;http://www.w3.org/TR/css3-flexbox/&quot;&gt;Flexible Box Layout Module&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;</description>
    
    
    
      </item>
    
  <item>
    <title>La préséance des sélecteurs CSS</title>
    <link>http://jeremie.patonnier.net/post/2009/08/18/La-preseance-des-selecteurs-CSS</link>
    <guid isPermaLink="false">urn:md5:80d9ad3586dd92cd33d4e7a7302dd728</guid>
    <pubDate>Wed, 26 Aug 2009 20:00:00 +0200</pubDate>
    <dc:creator>Jeremie</dc:creator>
        <category>Web</category>
        <category>css</category>    
    <description>&lt;p&gt;Comment savoir quelle règle CSS va s'appliquer à un éléments, en particulier quand deux règles entre en conflit ? Pour déterminer cela, les sélecteurs CSS on un poids et une priorité qui va permettre aux navigateurs de calculer la préséance des règles à appliquer. Voyons un peu comment ça ce passe.&lt;/p&gt;    &lt;p&gt;Avant de se plonger des les arcanes de la méthode de calculs, revenons à quelques petites considérations pratiques, bien utiles dans la vie quotidienne du développeur web&amp;nbsp;: &lt;/p&gt;
&lt;ul&gt;&lt;li&gt;Plus vous ciblez précisément l'élément à styliser, plus il y a de chance que ce soit ce style qui s'applique à cet élément.&lt;/li&gt;
&lt;li&gt;Firebug est votre ami&amp;nbsp;: lorsque vous sélectionnez un élément dans la vue HTML de Firebug, celui-ci vous montre les styles CSS qui s'y appliquent par ordre d'importance.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Voila pour la vraie vie, maintenant voyons comment ça marche de manière un peu plus savante.&lt;/p&gt;
&lt;p&gt;Pour les anglophone puriste, sachez que tout est décris dans la norme CSS 2.1, à cet endroit là très précisément&amp;nbsp;: &lt;a hreflang=&quot;en&quot; href=&quot;http://www.w3.org/TR/CSS2/cascade.html#specificity&quot;&gt;http://www.w3.org/TR/CSS2/cascade.html#specificity&lt;/a&gt; Je vais essayer de vous en faire une retranscription humainement compréhensible.&lt;/p&gt;
&lt;h3&gt;Priorité et poids !&lt;/h3&gt;
&lt;p&gt;En CSS, certains sélecteurs sont considérés comme plus prioritaire que d'autre. Concrètement, peu importe le nombre de sélecteurs, certain passerons avant les autres et détermineront donc la règle qui va s'appliquer. La priorité des sélecteurs CSS est la suivante (du plus important au moins important)&amp;nbsp;:&lt;/p&gt;
&lt;ol&gt;&lt;li&gt;Une déclaration de style &quot;en ligne&quot; (dans le code HTML avec l'attribut style) est toujours prioritaire sur tout le reste (c'est tout de même un cas un peu particulier, j'y reviendrai plus loin)&lt;/li&gt;
&lt;li&gt;Le sélecteur d'identifiant &lt;code&gt;#&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Les sélecteurs faisant référence à des attributs d'éléments HTML (sélecteurs de classe &lt;code&gt;.&lt;/code&gt; et d'attribut &lt;code&gt;[]&lt;/code&gt;) et les pseudo classes&lt;/li&gt;
&lt;li&gt;Le nom des éléments (&lt;code&gt;p&lt;/code&gt;, &lt;code&gt;div&lt;/code&gt;, &lt;code&gt;strong&lt;/code&gt;, etc.) et les pseudo éléments&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;em&gt;Si vous êtes attentif, vous aurez remarqué que je n'ai pas parlé des sélecteurs d'enfant, de frère ou de
parent ni du sélecteur générique &lt;code&gt;*&lt;/code&gt;, c'est normal, ils ne comptent pour rien. Ils n'ont aucune priorité et ils n'ont aucun poids... bref, il ne permettent pas de déterminer une quelconque priorité d'application des règles CSS.&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;Ainsi, si pour un même élément vous avez une règle de sélection qui utilise le sélecteur &lt;code&gt;#&lt;/code&gt;, et une autre qui utilise 50 sélecteurs de classe, c'est la règle avec le sélecteur &lt;code&gt;#&lt;/code&gt; qui s'appliquera d'abord. Par exemple, imaginons le cas suivant&amp;nbsp;:&lt;/p&gt;
&lt;pre class=&quot;sh_html&quot;&gt;&amp;lt;p id=&quot;content&quot; class=&quot;alert&quot;&amp;gt;Ceci est un message important que je veux afficher en rouge !&amp;lt;/p&amp;gt;&lt;/pre&gt;&lt;p&gt;Si vous utilisez les règles ci-après, le texte apparaitra en vert (la règle &lt;code&gt;#content&lt;/code&gt; est prioritaire sur la règle &lt;code&gt;.alert&lt;/code&gt;)&amp;nbsp;:&lt;/p&gt;
&lt;pre class=&quot;sh_css&quot;&gt;#content{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; color : #0C0;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;.alert{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; color : #900;&lt;br /&gt;}&lt;/pre&gt;&lt;p&gt;Par contre, avec les règles de sélection suivantes, le texte du paragraphe apparaitra bien en rouge (la règle &lt;code&gt;.alert&lt;/code&gt; est prioritaire sur la règle &lt;code&gt;p&lt;/code&gt;)&amp;nbsp;:&lt;/p&gt;
&lt;pre class=&quot;sh_css&quot;&gt;p{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; color : #0C0;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;.alert{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; color : #900;&lt;br /&gt;}&lt;/pre&gt;&lt;p&gt;C'est seulement quand vous avez des sélecteurs de même priorité dans votre règle de sélection qu'il va falloir calculer le poids de cette règle de sélection. Pour faire simple, c'est la règles qui à le plus de sélecteur de la plus haute priorité qui s'applique.&lt;/p&gt;
&lt;h4&gt;Une notation pour comprendre&lt;/h4&gt;
&lt;p&gt;Pour matérialiser cette double notion de priorité (préséance absolue) et de poids (préséance par le nombre), le W3C propose une notation à 4 nombres&amp;nbsp;: &quot;&lt;code&gt;a, b, c, d&lt;/code&gt;&quot; ou &lt;code&gt;a&lt;/code&gt; représente le nombre de sélecteurs de la plus haute priorité (la déclaration de style en ligne) et &lt;code&gt;d&lt;/code&gt; le nombre de sélecteurs de la plus basse priorité (les noms d'élément et les pseudo éléments).&lt;/p&gt;
&lt;p&gt;En utilisant cette notation, on peut donc immédiatement voir quel est le style qui va s'appliquer à un élément. Par exemple, si on reprend notre exemple précédent, voila ce que ça donnera&amp;nbsp;:&lt;/p&gt;
&lt;ol&gt;&lt;li&gt;0, 1, 0, 0&amp;nbsp;: &lt;code&gt;#content {...}&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;0, 0, 1, 0&amp;nbsp;: &lt;code&gt;.alert {...}&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;0, 0, 0, 1&amp;nbsp;: &lt;code&gt;p {...}&lt;/code&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Vous me direz que sur un exemple aussi simple, c'est s'embêter pour rien. Je ne vous contredirais pas. Mais ça prend du sens quand on commence à avoir des règles un peu plus complexe comme celles-ci&amp;nbsp;:&lt;/p&gt;
&lt;ol&gt;&lt;li&gt;0,1,0,1&amp;nbsp;: &lt;code&gt;p#content {...}&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;0,1,0,0&amp;nbsp;: &lt;code&gt;#content {...}&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;0,0,2,1&amp;nbsp;: &lt;code&gt;p:not(:last-child()) {...}&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;0,0,1,2&amp;nbsp;: &lt;code&gt;h1 + p.alert {...}&lt;/code&gt; Notez que le sélecteur &lt;code&gt;+&lt;/code&gt; n'est ni compté ni comptable&lt;/li&gt;
&lt;li&gt;0,0,1,1&amp;nbsp;: &lt;code&gt;p[id=&quot;content&quot;] {...}&lt;/code&gt; Notez que la sélection d'ID par ce biais est moins prioritaire qu'avec le sélecteur &lt;code&gt;#&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;0,0,1,0&amp;nbsp;: &lt;code&gt;.alert {...}&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;0,0,0,2&amp;nbsp;: &lt;code&gt;body &amp;gt; p {...}&lt;/code&gt; Notez que le sélecteur &lt;code&gt;&lt;code&gt;&amp;gt;&lt;/code&gt;&lt;/code&gt; n'est ni compté ni comptable&lt;/li&gt;
&lt;li&gt;0,0,0,1&amp;nbsp;: &lt;code&gt;p {...}&lt;/code&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;h3&gt;Et la cascade dans tout ça ?&lt;/h3&gt;
&lt;p&gt;Ben oui, CSS ça veut dire&amp;nbsp;: &quot;Cascading Style Sheets&quot;, autrement dit &quot;feuilles de style en &lt;strong&gt;cascade&lt;/strong&gt;&quot;. Si je vous ai bien seriné avec la méthode de calcul de la préséance des règles de style, il faut savoir que celle-ci s'inscrit dans le cadre plus général de la &quot;cascade&quot; qui est définie comme suit&amp;nbsp;:&lt;/p&gt;
&lt;ol&gt;&lt;li&gt;On vérifie que des règles sont applicables au type de média concerné (vérification de la porté de la règle &lt;code&gt;@media&lt;/code&gt;)&lt;/li&gt;
&lt;li&gt;On définie un premier niveau de préséance en fonction de l'origine de la règle&amp;nbsp;:
&lt;ol&gt;
&lt;li&gt;Les feuilles de style de l'utilisateur &lt;ins&gt;avec&lt;/ins&gt; la règle &lt;code&gt;!important&lt;/code&gt; sont toujours appliqués prioritairement sur tout le reste&lt;/li&gt;
&lt;li&gt;Les feuilles de style de l'auteur &lt;ins&gt;avec&lt;/ins&gt; la règle &lt;code&gt;!important&lt;/code&gt; viennent en suite.&lt;/li&gt;
&lt;li&gt;Les feuilles de style de l'auteur &lt;ins&gt;sans&lt;/ins&gt; la règle &lt;code&gt;!important&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Les feuilles de style de l'utilisateur &lt;ins&gt;sans&lt;/ins&gt; la règle &lt;code&gt;!important&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Les style définie par défaut par le navigateur quand rien d'autre ne s'est appliqué&lt;/li&gt;
&lt;/ol&gt;
&lt;/li&gt;
&lt;li&gt;On calcul la préséance des règles au sein de chaque origine comme vu ci-dessus&lt;/li&gt;
&lt;li&gt;Si enfin, pour une même origine donnée, deux règles ont la même préséance, c'est la dernière déclarée (la plus basse dans le code source) qui s'applique.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Dans la plus part des cas, en temps que webdesigner, vous vous situerez quasiment exclusivement dans le cas d'un calcul de préséance sur une feuille de style auteur et vous vous soucierez finalement assez peu de la cascade, mais c'est toujours bon de s'en souvenir, surtout quand un client viens vous dire &quot;oui-mais-ça-marche-pas-chez-moi&quot;.&lt;/p&gt;
&lt;p&gt;Un petit exemple pour bien comprendre le rôle de la cascade. Si vous définissez la règle &lt;code&gt;#content&lt;/code&gt; (préséance 0,1,0,0) dans votre feuille de style auteur et que l'utilisateur définie dans sa propre feuille de style la règle &lt;code&gt;p&lt;/code&gt; (préséance 0,0,0,1), c'est bien votre style qui va s'appliquer. Néanmoins, si l'utilisateur rajoute le mot clé &lt;code&gt;!important&lt;/code&gt; dans sa règle &lt;code&gt;p&lt;/code&gt;, alors ces celle-ci qui s'appliquera, même si la préséance propre à votre règle est plus élevé. La cascade prend le pas sur la préséance.&lt;/p&gt;
&lt;h4&gt;Un petit mot sur les styles en ligne&lt;/h4&gt;
&lt;p&gt;L'utilisation de l'attribut HTML &lt;code&gt;style&lt;/code&gt; est très problématique. Au delà des questions de séparation fond/forme et de la maintenabilité du code HTML, cet attribut est compliqué à gérer. En effet, si vous relisez ce que j'ai écrit sur la cascade, ou se situe cet attribut en terme d'origine pour déterminer sa préséance ? Je n'ai rien trouvé ni dans la norme CSS ni dans la norme HTML qui détermine explicitement cette origine. Néanmoins, quelques test confirme l'intuition que l'on pourrait avoir, les styles en ligne appartiennent à la 3ème origine&amp;nbsp;: &quot;les feuilles de style de l'auteur &lt;ins&gt;sans&lt;/ins&gt; la règle &lt;code&gt;!important&lt;/code&gt;&quot;.&lt;/p&gt;
&lt;p&gt;Cela veux dire qu'il est possible de surcharger un style en ligne en faisant usage de la règle &lt;code&gt;!important&lt;/code&gt;. Ceci étant, je vous encourage vivement à éviter ce genre de recours &quot;de la dernière chance&quot; car cela rendra votre code vraiment très difficile à maintenir.&lt;/p&gt;
&lt;p&gt;Voila, avec toute ses informations, vous ne devriez pas avoir de problèmes à comprendre pourquoi vos styles ne sont pas pris en compte alors que vous êtes pourtant sur d'avoir tout bien fait comme il faut... parfois, juste en comptant un peu, on s'en sort &lt;img src=&quot;/themes/default/smilies/smile.png&quot; alt=&quot;:-)&quot; class=&quot;smiley&quot; /&gt;&lt;/p&gt;
&lt;h3&gt;Un peu de lecture ailleurs&lt;/h3&gt;
&lt;ul&gt;&lt;li&gt;&lt;a hreflang=&quot;en&quot; href=&quot;http://www.smashingmagazine.com/2009/08/17/taming-advanced-css-selectors/&quot;&gt;http://www.smashingmagazine.com/2009/08/17/taming-advanced-css-selectors/&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a hreflang=&quot;en&quot; href=&quot;http://www.adobe.com/devnet/dreamweaver/articles/css_specificity_02.html&quot;&gt;http://www.smashingmagazine.com/2007/07/27/css-specificity-things-you-should-know/&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a hreflang=&quot;en&quot; href=&quot;http://www.adobe.com/devnet/dreamweaver/articles/css_specificity_02.html&quot;&gt;http://www.adobe.com/devnet/dreamweaver/articles/css_specificity_02.html&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a hreflang=&quot;en&quot; href=&quot;http://meyerweb.com/eric/css/link-specificity.html&quot;&gt;http://meyerweb.com/eric/css/link-specificity.html&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a hreflang=&quot;en&quot; href=&quot;http://www.stuffandnonsense.co.uk/archives/css_specificity_wars.html&quot;&gt;http://www.stuffandnonsense.co.uk/archives/css_specificity_wars.html&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;</description>
    
    
    
      </item>
    
  <item>
    <title>CSS 3 : Le module &quot;Template Layout&quot;</title>
    <link>http://jeremie.patonnier.net/post/2009/07/16/CSS-3-Le-module-Template-Layout</link>
    <guid isPermaLink="false">urn:md5:5e0d191f5475f4c49bb37b8f2f7b0ae2</guid>
    <pubDate>Thu, 16 Jul 2009 20:10:00 +0200</pubDate>
    <dc:creator>Jeremie</dc:creator>
        <category>Web</category>
        <category>css</category><category>html</category><category>webdesign</category>    
    <description>&lt;p&gt;Le future norme CSS3 est composée de modules qui sont normalisés plus ou moins indépendamment. Parmi eux, il y en un, discret, mais qui représente quasiment le sain Graal de la mise en page en CSS : le module &quot;Template Layout&quot;. &lt;a hreflang=&quot;en&quot; href=&quot;http://meyerweb.com/eric/thoughts/2009/02/17/wanted-layout-system/&quot;&gt;Eric Mayer s'est récement fait la voix des Web Designer&lt;/a&gt; afin d'insister sur le besoins que représente un système de mise en page totalement indépendant du flux de la source HTML. Ok, ce module n'est encore implémenté par aucun navigateur, quoi que... mais voyons ce que cela pourrait apporter.&lt;/p&gt;    &lt;p&gt;Avoir un système de mise en page qui permettrai de s'affranchir du flux de la source HTML... le rêve de tout les Web Designer. Aujourd'hui ce rêve est à porter de main, grâce au &lt;a hreflang=&quot;en&quot; href=&quot;http://www.w3.org/TR/css3-layout/&quot;&gt;module &quot;Template Layout&quot; de CSS 3&lt;/a&gt;. Pas de fausse joie, à ce jour ce module est jeune (seulement 2 itérations en &quot;Working Draft&quot; dont la première date de 2005) et aucun constructeur de navigateur n'envisage de l'implémenter pour le moment, même à titre expérimental.&lt;/p&gt;
&lt;h3&gt;Comment ça marche ?&lt;/h3&gt;
&lt;p&gt;Dans sa forme la plus basique, le système de gabarit proposé par ce module repose sur l'utilisation de deux propriétés CSS existantes : &lt;code&gt;display&lt;/code&gt; et &lt;code&gt;position&lt;/code&gt;. &lt;/p&gt;
&lt;p&gt;&lt;code&gt;display&lt;/code&gt; va permettre de définir la grille de positionnement. La technique mise en œuvre ressemble à de l'ASCII Art puisqu'on utilise des lettres réparties sur plusieurs lignes pour définir le gabarit. Chaque lettre du gabarit définie une zone (&quot;Slot&quot; en anglais) dans lequel on pourra placer n'importe quel élément HTML.&lt;/p&gt;
&lt;p&gt;Par exemple, un gabarit classique (1 en-tête, 2 colones et 1 pied de page) peut être représenté de la manière suivante&lt;sup&gt;&lt;a href=&quot;http://jeremie.patonnier.net/post/2009/07/16/#note1&quot;&gt;1&lt;/a&gt;&lt;/sup&gt; :&lt;/p&gt;
&lt;pre class=&quot;sh_css&quot;&gt;body{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; display : &quot;aa&quot;&lt;br /&gt;              &quot;bc&quot;&lt;br /&gt;              &quot;dd&quot;;&lt;br /&gt;}&lt;/pre&gt;&lt;p&gt;C'est la propriété &lt;code&gt;position&lt;/code&gt; qui nous permettra d'assigner un élément HTML à un des emplacements. Pour cela, il suffit d'utiliser la lettre représentant la zone désirée comme valeur de la propriété &lt;code&gt;position&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;Concrètement, cela se matérialisera de la manière suivante :&lt;/p&gt;
&lt;pre class=&quot;sh_css&quot;&gt;#header { position : a ; }&lt;br /&gt;#footer { position : d ; }&lt;br /&gt;#content{ position : b ; }&lt;br /&gt;#sidebar{ position : c ; }&lt;/pre&gt;&lt;h4&gt;Mouais, mais en quoi c'est vraiment détaché de ma structure HTML ?&lt;/h4&gt;
&lt;p&gt;Imaginons que vous ayez un élément &lt;code&gt;h2&lt;/code&gt; dans votre partie &lt;code&gt;#content&lt;/code&gt;, mais que vous vouliez que celui ci soit visuellement placé dans la zone d'en-tête. Avec les techniques actuelles (floating, positionnement absolu, etc), c'est un vrai casse-tête qui n'a pas de solution élégante. Avec cette nouvelle technique il suffit de rajouter la règle suivante :&lt;/p&gt;
&lt;pre class=&quot;sh_css&quot;&gt;#content &amp;gt; h2 { position : a ; }&lt;/pre&gt;&lt;p&gt;De cette manière votre élément h2 va se placer dans la zone d'en-tête ou il se comportera exactement comme s'il était un élément enfant de cette zone. Les différents éléments placés dans cette zone s'y empileront dans l'ordre natif du flux HTML.&lt;/p&gt;
&lt;h4&gt;Mais cette zone, elle est virtuelle, comment je fait pour la styliser ?&lt;/h4&gt;
&lt;p&gt;Et oui, dans notre exemple, les élément &lt;code&gt;#header&lt;/code&gt; et &lt;code&gt;h2&lt;/code&gt; font tout les deux partie de la zone d'en-tête, mais ne sont pas relier au niveau du flux HTML, ou si peu (il ne sont pas enfant d'un même élément qui représente cet en-tête). Bref, structurellement parlant, ils n'ont rien en commun. Cependant, il est tout de même possible de faire &quot;comme si&quot;. En effet, pour styliser cette zone d'en-tête virtuel, on peut utiliser le pseudo-élément &lt;code&gt;::slot()&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;Ainsi, si je veux que ma zone d'en-tête ait un arrière plan rose, il suffit de faire :&lt;/p&gt;
&lt;pre class=&quot;sh_css&quot;&gt;body::slot(a){&lt;br /&gt;    background : #FCC;&lt;br /&gt;}&lt;/pre&gt;&lt;p&gt;Malheureusement, à partir de là, je trouve que la spécification est mal fichue. En effet, les styles applicables au pseudo élément &lt;code&gt;::slot()&lt;/code&gt; sont très restreints. On ne peux modifier que les propriétés d'arrière plan, la propriété &lt;code&gt;vertical-align&lt;/code&gt; et la propriété &lt;code&gt;overflow&lt;/code&gt;. En l'état, il est impossible de modifier les bordures (iiirk !) ou d'appliquer les règles de colonages (mmmh ?) ni même de fixer... la hauteur et la largeur (huuu ?).&lt;/p&gt;
&lt;h4&gt;Quoi ! On ne peut pas spécifier la taille des zones du gabarit ?&lt;/h4&gt;
&lt;p&gt;En fait, si, on peut spécifier la hauteur et la largeur des zones du gabarit mais pas via le pseudo élément &lt;code&gt;::slot()&lt;/code&gt;. De mon point de vue, je trouve ça contre intuitif et en désaccord avec les habitudes déjà connu qu'on peut avoir des CSS. En effet, les largeurs et hauteurs des zones ne sont pas spécifiées à l'aide des propriétés &lt;code&gt;width&lt;/code&gt; et &lt;code&gt;height&lt;/code&gt;, mais directement via la propriété &lt;code&gt;display&lt;/code&gt;. Oui, oui, vous avez bien lu : &quot;via la propriété &lt;code&gt;display&lt;/code&gt;&quot; !&lt;/p&gt;
&lt;p&gt;Ainsi dans notre exemple, si l'on veut avoir un en-tête d'une hauteur de 100px, un corps d'une hauteur qui s'ajuste en fonction du flux et un pied de page d'une hauteur de 2em, il suffit de spécifier les hauteurs voulu après la déclaration de chaque ligne du gabarit. Ce qui donnera (notez la présence du symbole &lt;code&gt;/&lt;/code&gt;) :&lt;/p&gt;
&lt;pre class=&quot;sh_css&quot;&gt;body{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; display : &quot;aa&quot; /100px&lt;br /&gt;              &quot;bc&quot;&lt;br /&gt;              &quot;dd&quot; /2em;&lt;br /&gt;}&lt;/pre&gt;&lt;p&gt;Et si on veut spécifier une largeur automatique pour la colonne de contenu principal et en même temps une largeur fixe de 150px pour la colonne de droite me diriez vous ? Et bien pour cela, il suffit de spécifier vos largeurs à la fin de votre déclaration &lt;code&gt;display&lt;/code&gt; dans l'ordre des colonnes de votre gabarit de la manière suivante&lt;sup&gt;&lt;a href=&quot;http://jeremie.patonnier.net/post/2009/07/16/#note2%22&quot;&gt;2&lt;/a&gt;&lt;/sup&gt; :&lt;/p&gt;
&lt;pre class=&quot;sh_css&quot;&gt;body{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; display : &quot;a   a&quot;  /100px&lt;br /&gt;              &quot;b   c&quot;&lt;br /&gt;              &quot;d   d&quot;  /2em&lt;br /&gt;               * 150px;&lt;br /&gt;}&lt;/pre&gt;&lt;p&gt;Notez l'utilisation du caractère &lt;code&gt;*&lt;/code&gt; pour spécifier une largeur qui doit être calculée automatiquement en fonction de l'espace disponible pour cette colonne. Il est également possible de spécifier des largeurs minimum et maximum pour les gabarit fluide, mais je ne vous assomme pas avec ça car je suis près à parier que cela va évoluer (par exemple, il n'est pas possible de spécifier des hauteurs minimum et maximum pour le moment !!!)&lt;/p&gt;
&lt;h4&gt;Et au fait, pour les bordure on fait comment ?&lt;/h4&gt;
&lt;p&gt;Comme je vous le disais précédement, il est impossible de spécifier une bordure pour une zone (ni même un &lt;code&gt;padding&lt;/code&gt; ou un &lt;code&gt;margin&lt;/code&gt;), et de mon point de vu, c'est un très gros manque pour ce module. Ceci dit, il est éventuellement possible de tricher en créant des zones vides ou des espaces entre ces zones. Pour cela vous pouvez utiliser le symbole &lt;code&gt;.&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;Par exemple, on peut simplement centrer un gabarit de cette manière :&lt;/p&gt;
&lt;pre class=&quot;sh_css&quot;&gt;body{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; display : &quot;.  a    a   .&quot;  /100px&lt;br /&gt;              &quot;.  b    c   .&quot;&lt;br /&gt;              &quot;.  d    d   .&quot;  /2em&lt;br /&gt;               * 50% 150px *;&lt;br /&gt;}&lt;/pre&gt;&lt;p&gt;Tout cela reste malheureusement un peu insatisfaisant et je soupçonne des raisons liées à la difficulté de maitre en œuvre ce module. Ceci dit, cela évoluera sans doute très vite dès que les première implémentation verront le jour.&lt;/p&gt;
&lt;h3&gt;Ok, c'est cool, mais on ne peut pas s'en servir ! Non ?&lt;/h3&gt;
&lt;p&gt;Effectivement, aucun navigateur n'implémente nativement cette fonctionnalité à ce jour. Néanmoins, &lt;a hreflang=&quot;en&quot; href=&quot;http://code.google.com/p/css-template-layout/&quot;&gt;il existe une implémentation en Javascript sous la forme d'un plugin jQuery&lt;/a&gt; (développé par &lt;a hreflang=&quot;en&quot; href=&quot;http://a.deveria.com/?p=236&quot;&gt;Alexis Deveria&lt;/a&gt;) qui ouvre cette fonctionnalité à tout les navigateurs (allez jeter un coup d'œil aux &lt;a hreflang=&quot;en&quot; href=&quot;http://a.deveria.com/csstpl/&quot;&gt;demos&lt;/a&gt;, c'est bluffant). Alors oui, vous pouvez commencer à jouer avec les possibilité de ce module.&lt;/p&gt;
&lt;p&gt;Néanmoins, temps que ce module ne sera pas plus stable, je vous invite à ne pas en faire usage dans un environnement de production industriel, ou alors avec parcimonie. C'est encore hautement expérimentale.&lt;/p&gt;
&lt;p&gt;Mais franchement... ça déchire grave ! &lt;img src=&quot;/themes/default/smilies/laugh.png&quot; alt=&quot;:-D&quot; class=&quot;smiley&quot; /&gt;&lt;/p&gt;
&lt;hr /&gt;
&lt;ol&gt;&lt;li id=&quot;note1&quot;&gt;la présentation sur plusieurs ligne est là pour simplifier la
lecture du gabarit, mais il est tout à fait possible de tout mettre sur
une seul ligne&lt;/li&gt;
&lt;li id=&quot;note2&quot;&gt;les espaces surnuméraires n'ont aucune influence sur le gabarit, il sont là pour simplifier la lecture&lt;/li&gt;
&lt;/ol&gt;</description>
    
    
    
      </item>
    
  <item>
    <title>Passez à la vitesse superieure avec CSS 3</title>
    <link>http://jeremie.patonnier.net/post/2009/06/30/Passez-a-la-vitesse-superieure-avec-CSS-3</link>
    <guid isPermaLink="false">urn:md5:04a7db3e8a8036a6464762b590f9542e</guid>
    <pubDate>Tue, 30 Jun 2009 20:00:00 +0200</pubDate>
    <dc:creator>Jeremie</dc:creator>
        <category>Web</category>
        <category>css</category><category>webdesign</category>    
    <description>&lt;p&gt;&lt;em&gt;Cet article est une traduction de l'article &quot;&lt;/em&gt;&lt;a style=&quot;font-style: italic;&quot; hreflang=&quot;en&quot; href=&quot;http://www.smashingmagazine.com/2009/06/15/take-your-design-to-the-next-level-with-css3/&quot; lang=&quot;en&quot;&gt;Take Your Design To The Next Level With CSS3&lt;/a&gt;&lt;em&gt;&quot; rédigé par Inayaili de Leon pour &lt;/em&gt;&lt;a style=&quot;font-style: italic;&quot; hreflang=&quot;en&quot; href=&quot;http://www.smashingmagazine.com&quot; lang=&quot;en&quot;&gt;Smashing Magazine&lt;/a&gt;&lt;em&gt;. Merci à eux de m'avoir autorisé à la faire. &lt;br /&gt;&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Sans être exhaustif, cet article propose un grand tour d'horizon de l'état de l'art des implémentations de la future norme CSS 3 dans nos navigateurs favoris. C'est la première fois que je réalise une telle traduction donc, toute les remarques sur ce point sont les bienvenues. Merci à tous ceux que j'ai embêtés sur Twitter et Identi.ca sur certains points de traduction (ils se reconnaitront).&lt;/em&gt;&lt;/p&gt;    &lt;hr /&gt;
&lt;p&gt;Les feuilles de styles CSS ont été créées il y a 13 ans et CSS 2.1, la norme la plus largement adopté à ce jour, existe depuis 11 ans. En observant l'écart entre les sites Web créés à cette époque et ceux d'aujourd'hui, on constate l'ampleur du chemin parcouru. Au fil des ans, le développement Web a vraiment évolué dans des directions toujours plus surprenantes.&lt;/p&gt;
&lt;p&gt;Dès lors, on peut s'interroger. Pourquoi, dès qu'on parle de CSS, se retrouve-t-on embourbé dans nos habitudes, incapable d'expérimenter ? Pourquoi continuons-nous d'utiliser du code CSS spécifique à chaque navigateur et du Javascript pour gérer la présentation ? &lt;strong&gt;Pourquoi n'utilisons-nous pas les nouveautés de CSS 3 disponibles dans les navigateurs modernes&lt;/strong&gt; pour améliorer la qualité graphique de nos sites ?&lt;/p&gt;
&lt;p&gt;C'est le moment d'utiliser ces nouveautés dans nos projets. Il ne faut pas avoir peur d'exploiter progressivement les propriétés et sélecteurs CSS 3 dans nos feuilles de style. Informer nos client des &lt;strong&gt;avantages de CSS 3&lt;/strong&gt; (et contribuer au déclin des navigateurs obsolètes) est en notre pouvoir. C'est même de notre responsabilité, en particulier si cela implique de produire des sites Web plus souples pour diminuer les couts de développement et de maintenance.&lt;/p&gt;
&lt;p&gt;Cet article va vous présenter quel sont les avantages de CSS 3 et des exemples de mises en œuvres concrètes par certains Webdesigners. L'ambition, c'est qu'à la fin de votre lecture vous sachiez quoi attendre de CSS 3 et comment l'utiliser dans vos projets.&lt;/p&gt;
&lt;p&gt;N'hésitez pas également à lire cet autre article sur le sujet :&lt;/p&gt;
&lt;ul&gt;&lt;li&gt;&lt;a hreflang=&quot;en&quot; href=&quot;http://www.smashingmagazine.com/2009/01/08/push-your-web-design-into-the-future-with-css3/&quot; lang=&quot;en&quot;&gt;Push Your Web Design Into The Future With CSS 3&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;L'utilisation des propriétés spécifiques des navigateurs&lt;/h3&gt;
&lt;p&gt;Aujourd'hui, la plupart des propriétés CSS 3 disponibles sont &lt;strong&gt;préfixées de manière spécifique par chaque navigateur&lt;/strong&gt;. En effet, d'une part les fabricants de navigateurs n'ont implémenté qu'une toute petite partie des propriétés CSS3 et d'autre part une partie des propriétés ne seront peut être jamais normalisées par le W3C. Cela permet donc de différencier les propriétés spécifiques aux navigateurs en cour de normalisation des propriétés déjà standardisées (quitte à remplacer une version spécifique par la version standards le jour ou la norme sera stabilisé).&lt;/p&gt;
&lt;p&gt;Cette approche à bien sur des défauts, a savoir des feuilles de style surchargé et un design inconsistant d'un navigateur à l'autre. Après tout, nous ne voulons plus gérer des feuilles de styles spécifiques pour chaque navigateur. Tout le monde se souvient des balises propriétaires de mise en forme que furent &lt;code&gt;&amp;lt;marquee&amp;gt;&lt;/code&gt;, &lt;code&gt;&amp;lt;blink&amp;gt;&lt;/code&gt; et bien d'autres, largement employé dans les années 90. Elles continuent de rendre certain site web inconsistant si ce n'est complètement illisible. Nous ne voulons surtout pas nous retrouver dans une tel situation, n'est-ce pas ?&lt;/p&gt;
&lt;p&gt;Ceci étant dit, n'oublions pas que les sites web &lt;a hreflang=&quot;en&quot; href=&quot;http://dowebsitesneedtolookexactlythesameineverybrowser.com/&quot;&gt;n'ont pas&lt;/a&gt; à être parfaitement identiques dans tous les navigateurs. Ainsi, le fait d'utiliser des propriétés spécifiques pour réaliser certains effets sur certains navigateurs peut parfois avoir du sens.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Les préfixes les plus communs&lt;/strong&gt; sont ceux utilisés par les navigateurs utilisant Webkit (Safari par exemple), qui à la forme &lt;code&gt;-webkit-&lt;/code&gt;, et par les navigateurs utilisant Gecko (Firefox par exemple), qui à la forme &lt;code&gt;-moz-&lt;/code&gt;. Konqueror (&lt;code&gt;-khtml-&lt;/code&gt;), Opera (&lt;code&gt;-o-&lt;/code&gt;) et Internet Explorer (&lt;code&gt;-ms-&lt;/code&gt;) ont aussi leur propre préfixe.&lt;/p&gt;
&lt;p&gt;L'utilisation de &lt;strong&gt;ses propriétés spécifiques nous conduira à produire un code CSS non-standard&lt;/strong&gt;. En temps que webdesigners professionnels, nous ne devons pas l'oublier. En effet, les puristes pourraient soutenir que l'utilisation de ces propriétés dans une feuille de style finalisée n'est pas une très bonne idée. Cependant, lorsqu'il s'agit d'expérimenter ou d'apprendre, nous pouvons envisager de les inclure dans nos feuilles de styles tout en les couplant avec les propriétés standards.&lt;/p&gt;
&lt;h4&gt;Liens utiles&lt;/h4&gt;
&lt;ul&gt;&lt;li&gt;&lt;a hreflang=&quot;en&quot; href=&quot;http://www.w3.org/TR/CSS21/syndata.html#vendor-keywords&quot; lang=&quot;en&quot;&gt;Vendor-specific extensions and W3C&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a hreflang=&quot;en&quot; href=&quot;http://www.css3.info/vendor-specific-extensions-to-css3/&quot; lang=&quot;en&quot;&gt;Vendor-specific extensions to CSS3&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a hreflang=&quot;en&quot; href=&quot;http://reference.sitepoint.com/css/vendorspecific&quot; lang=&quot;en&quot;&gt;Vendor-specific properties&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;1. Sélecteurs&lt;/h3&gt;
&lt;p&gt;Les sélecteurs CSS sont un outil incroyablement puissant : ils nous permettent de &lt;strong&gt;cibler des éléments HTML spécifiques&lt;/strong&gt; au sein de notre balisage sans avoir à recourir à des class, des ID ou du Javascript superflue. La plus part d'entre eux ne sont pas une nouveauté de CSS 3 bien qu'ils ne soient pas utilisés autant qu'ils le devraient. L'utilisation adéquate des sélecteurs peut être d'un grand secours si vous essayez de réaliser un balisage à la fois propre et léger afin de mieux séparer le fond de la forme de votre site. Ils peuvent permettre de réduire le nombre de classes et d'ID dans le balisage et rendre les feuilles de style plus simple à maintenir par les designers. &lt;/p&gt;
&lt;h4&gt;Les sélecteurs d'attributs&lt;/h4&gt;
&lt;p&gt;3 nouveaux sélecteurs d'attributs font partie de la spécification CSS3 :&lt;/p&gt;
&lt;ul&gt;&lt;li&gt;&lt;code&gt;[att^=&quot;valeur&quot;]&lt;/code&gt;&lt;br /&gt;Cible les éléments ayant un attribut &quot;att&quot; dont le contenu commence par &quot;valeur&quot;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;[att$=&quot;valeur&quot;]&lt;/code&gt;&lt;br /&gt;Cible les éléments ayant un attribut &quot;att&quot; dont le contenu se termine par &quot;valeur&quot;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;[att*=&quot;valeur&quot;]&lt;/code&gt;&lt;br /&gt;Cible les éléments ayant un attribut &quot;att&quot; dont le contenu contient la chaine &quot;valeur&quot;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;a hreflang=&quot;en&quot; href=&quot;http://tweetcc.com/&quot;&gt;&lt;img alt=&quot;Le site TweetCC&quot; src=&quot;http://media2.smashingmagazine.com/wp-content/uploads/images/css3-new-techniques/css3-tweetcc-2.jpg&quot; /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a hreflang=&quot;en&quot; href=&quot;http://tweetcc.com/&quot; lang=&quot;en&quot;&gt;tweetCC&lt;/a&gt; utilise un sélecteur d'attribut pour cibler les liens dont l'attribut &lt;code&gt;title&lt;/code&gt; se termine par le mot &quot;tweetCC&quot; :&lt;/p&gt;
&lt;pre class=&quot;sh_css&quot;&gt;a[title$=&quot;tweetCC&quot;] {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; position: absolute;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; top: 0;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; right: 0;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; display: block;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; width: 140px;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; height: 140px;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; text-indent: -9999px;&lt;br /&gt;}&lt;/pre&gt;&lt;p&gt;&lt;strong&gt;Implémentation dans les navigateurs : &lt;/strong&gt;Le seul navigateur qui ne supporte pas les sélecteurs d'attribut est IE6. Que ce soit IE7 ou IE8, Opera et les navigateurs basés sur Webkit ou sur Gecko, ils les supportent tous. De fait, utiliser ces sélecteurs dans vos feuilles de style est parfaitement sûr.&lt;/p&gt;
&lt;h4&gt;Les sélecteurs combinatoires&lt;/h4&gt;
&lt;p&gt;Le seul nouveau sélecteur combinatoire introduit dans CSS 3 est le sélecteur globale d'éléments voisins (&lt;em lang=&quot;en&quot;&gt;sibling&lt;/em&gt;). Il permet de cibler tous les voisins d'un élément qui ont le même élément parent.&lt;/p&gt;
&lt;p&gt;Par exemple, pour ajouter une bordure grise à toutes les images qui sont voisines d'une &lt;code&gt;div&lt;/code&gt; particulière (la &lt;code&gt;div&lt;/code&gt; et les images ayant le même parent), utilisez simplement la règle de style suivante :&lt;/p&gt;
&lt;pre class=&quot;sh_css&quot;&gt;div~img{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; border: 1px solid #ccc;&lt;br /&gt;}&lt;/pre&gt;&lt;p&gt;&lt;strong&gt;Implémentation dans les navigateurs :&lt;/strong&gt; Le seul navigateur qui ne supporte pas le sélecteur d'élément voisin est notre petit chouchou : Internet Explorer 6.&lt;/p&gt;
&lt;h4&gt;Les pseudo-classes&lt;/h4&gt;
&lt;p&gt;L'ajout le plus important de CSS 3 à la norme CSS est probablement l'ensemble des nouvelles pseudo-classes. Celles qui suivent sont sans doute les plus intéressantes et les plus utiles&lt;/p&gt;
&lt;ul&gt;&lt;li&gt;&lt;code&gt;:nth-child(n)&lt;/code&gt;&lt;br /&gt;Permet de cibler des éléments en se basant sur leur position dans la liste des enfants de leur élément parent. La valeur &quot;n&quot; peut être un nombre, une expression numérique ou les mots clé odd (paire) ou even (impaire) (idéal pour créer des lignes de tableau avec des alternances de couleurs). Par exemple, si vous voulez cibler un groupe de trois éléments après le quatrième élément vous n'avez qu'à écrire :&lt;br /&gt;&lt;pre class=&quot;sh_css&quot;&gt;:nth-child(3n+4){background-color: #ccc;}&lt;/pre&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;:nth-last-child(n)&lt;/code&gt;&lt;br /&gt;Sur la même logique que la pseudo-class précédente, mais uniquement pour cibler les derniers éléments enfant d'un parent. Par exemple, pour cibler les deux derniers paragraphes d'une DIV, nous n'avons qu'à utiliser la règle suivante :&lt;br /&gt;&lt;pre class=&quot;sh_css&quot;&gt;div p:nth-last-child(-n+2)&lt;/pre&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;:last-child&lt;/code&gt;&lt;br /&gt;Cible le dernier enfant d'un élément parent. C'est équivalent à :&lt;br /&gt;&lt;pre class=&quot;sh_css&quot;&gt;:nth-last-child(1)&lt;/pre&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;:checked&lt;/code&gt;&lt;br /&gt;Cible des éléments cochés, par exemple des cases à cocher activées.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;:empty&lt;/code&gt;&lt;br /&gt;Cible des éléments ne contenant ni texte ni éléments enfant.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;:not(s)&lt;/code&gt;&lt;br /&gt;Cible les éléments qui ne satisfont pas la déclaration &quot;s&quot;. Par exemple, si nous voulons mettre en noir le texte de tous les paragraphes qui n'ont pas la classe &quot;lead&quot;, nous pouvons écrire :&lt;br /&gt;&lt;pre class=&quot;sh_css&quot;&gt;p:not([class*=&quot;lead&quot;]) {color: black;}&lt;/pre&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Sur son site Internet, &lt;a hreflang=&quot;en&quot; href=&quot;http://andreagandino.com/&quot;&gt;Andrea Gandino&lt;/a&gt; utilise la pseudo-classe &lt;code&gt;:last-child&lt;/code&gt; pour cibler le dernier paragraphe de chaque billet de son blog afin de lui appliquer la propriété &lt;code&gt;margin&lt;/code&gt; avec une valeur de 0.&lt;/p&gt;
&lt;p&gt;&lt;img alt=&quot;&quot; src=&quot;http://media2.smashingmagazine.com/wp-content/uploads/images/css3-new-techniques/andrea.jpg&quot; /&gt;&lt;/p&gt;
&lt;pre class=&quot;sh_css&quot;&gt;#primary .text p:last-child {&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; margin: 0;&amp;nbsp; &lt;br /&gt;}&lt;/pre&gt;&lt;p&gt;&lt;strong&gt;Implémentation dans les navigateurs :&lt;/strong&gt; Opera et les navigateurs basés sur Webkit supportent toutes les nouvelles pseudo-classes de CSS 3. Firefox 2 et 3 (basés sur Gecko) ne supportent que &lt;code&gt;:not(s)&lt;/code&gt;, &lt;code&gt;:last-child&lt;/code&gt;, &lt;code&gt;:only-child&lt;/code&gt;, &lt;code&gt;:root&lt;/code&gt;, &lt;code&gt;:empty&lt;/code&gt;, &lt;code&gt;:target&lt;/code&gt;, &lt;code&gt;:checked&lt;/code&gt;, &lt;code&gt;:enabled&lt;/code&gt; et &lt;code&gt;:disabled&lt;/code&gt;. Néanmoins, Firefox 3.5 &lt;a hreflang=&quot;en&quot; href=&quot;https://developer.mozilla.org/en/Firefox_3.5_for_developers&quot;&gt;supportera un panel bien plus large de pseudo-classes&lt;/a&gt; et sélecteurs issus de CSS 3. A priori, aucune version de Internet Explorer ne supportent ces pseudo-classes.&lt;/p&gt;
&lt;h4&gt;Les pseudo-éléments&lt;/h4&gt;
&lt;p&gt;Le seul pseudo-élément introduit par CSS 3 est &lt;code&gt;::selection&lt;/code&gt;. Il permet de cibler les éléments sélectionnés par l'utilisateur.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Implémentation dans les navigateurs : &lt;/strong&gt;Internet Explorer et Firefox ne supporte pas le pseudo-élément &lt;code&gt;::selection&lt;/code&gt; contrairement à Safari, Opera et Chrome.&lt;/p&gt;
&lt;h4&gt;Liens utiles&lt;/h4&gt;
&lt;ul&gt;&lt;li&gt;&lt;a hreflang=&quot;en&quot; href=&quot;http://www.w3.org/TR/css3-selectors/&quot; lang=&quot;en&quot;&gt;Selectors Level 3: W3C Working Draft&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a hreflang=&quot;en&quot; href=&quot;http://www.css3.info/preview/attribute-selectors/&quot; lang=&quot;en&quot;&gt;CSS3: Attribute selectors: CSS3.info&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a hreflang=&quot;en&quot; href=&quot;http://www.css3.info/modules/selector-compat/&quot; lang=&quot;en&quot;&gt;Compatibility table: CSS3 Selectors&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a hreflang=&quot;en&quot; href=&quot;http://kimblim.dk/css-tests/selectors/&quot; lang=&quot;en&quot;&gt;CSS selectors and pseudo selectors browser compatibility&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a hreflang=&quot;en&quot; href=&quot;http://reference.sitepoint.com/css/css3attributeselectors&quot; lang=&quot;en&quot;&gt;CSS3 Attribute Selectors&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a hreflang=&quot;en&quot; href=&quot;http://reference.sitepoint.com/css/pseudoelement-selection&quot; lang=&quot;en&quot;&gt;::selection&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a hreflang=&quot;en&quot; href=&quot;http://reference.sitepoint.com/css/generalsiblingselector&quot; lang=&quot;en&quot;&gt;General Sibling Selector&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a hreflang=&quot;en&quot; href=&quot;http://reference.sitepoint.com/css/css3psuedoclasses&quot; lang=&quot;en&quot;&gt;CSS3 Pseudo-classes&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;2. RGBA et opacity&lt;/h3&gt;
&lt;p&gt;La notation RGBA permet de spécifier non seulement une couleur, mais aussi &lt;strong&gt;l'opacité de celle-ci&lt;/strong&gt;. Certains navigateurs ne supportent toujours pas cette notation, en conséquence, il est recommandé de spécifier une couleur opaque classique compréhensible par les anciens navigateurs avant de spécifier une couleur RGBA.&lt;/p&gt;
&lt;p&gt;&lt;a hreflang=&quot;en&quot; href=&quot;http://timvandamme.com/&quot;&gt;&lt;img alt=&quot;Le site de Tim Van Damme&quot; src=&quot;http://media1.smashingmagazine.com/wp-content/uploads/images/css3-new-techniques/rgba.jpg&quot; /&gt;&lt;/a&gt;&lt;br /&gt;&lt;em&gt;Tim Van Damme utilis des couleurs RGBA au survol de ses lien&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;Sur son site Internet, &lt;a hreflang=&quot;en&quot; href=&quot;http://timvandamme.com/&quot;&gt;Tim Van Damme&lt;/a&gt; utilise des couleurs RGBA au survol de certains éléments ; par exemple sur les liens &quot;network&quot; de sa page d'accueil :&lt;/p&gt;
&lt;pre class=&quot;sh_css&quot;&gt;#networks li a:hover,&amp;nbsp; &lt;br /&gt;#networks li a:focus {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; background: rgba(164, 173, 183, .15);&amp;nbsp; &lt;br /&gt;}&lt;/pre&gt;&lt;p&gt;Pour définir une couleur RGBA, nous devons spécifier les composantes rouge, bleu et vert à l'aide d'un entier compris entre 0 et 255 ou à l'aide d'un pourcentage. La valeur du canal alpha doit être comprise entre 0.0 et 1.0 ; par exemple, 0.5 pour une opacité de 50%.&lt;/p&gt;
&lt;p&gt;Il y a une grande différence entre les couleurs RGBA et la propriété &lt;code&gt;opacity&lt;/code&gt;. La notation RGBA définie une couleur qui ne s'applique qu'à une propriété de l'élément ciblé. La propriété &lt;code&gt;opacity&lt;/code&gt; définie l'opacité globale qui s'applique à l'intégralité de l'élément et à tous ses enfants.&lt;/p&gt;
&lt;p&gt;Voici un exemple de la façon d'appliquer une opacité de 80% a une DIV :&lt;/p&gt;
&lt;pre class=&quot;sh_css&quot;&gt;div{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; opacity: 0.8;&lt;br /&gt;}&lt;/pre&gt;&lt;p&gt;&lt;strong&gt;Implémentation dans les navigateurs :&lt;/strong&gt; La notation RGBA est supportée par les navigateurs basés sur Webkit. Aucune version d'Internet Explorer ne la supporte. Firefox la supporte à partir de sa version 3 et Opera à partir de sa version 9.5. La propriété &lt;code&gt;opacity&lt;/code&gt; est disponible dans Opera et dans tous les navigateurs basés sur Webkit et Gecko. Aucune version de IE ne la supporte à ce jour.&lt;/p&gt;
&lt;h4&gt;Liens utiles&lt;/h4&gt;
&lt;ul&gt;&lt;li&gt;&lt;a hreflang=&quot;en&quot; href=&quot;http://www.w3.org/TR/css3-color/&quot; lang=&quot;en&quot;&gt;CSS Color Module Level 3: W3C Working Draft&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a hreflang=&quot;en&quot; href=&quot;http://www.css3.info/preview/rgba/&quot; lang=&quot;en&quot;&gt;RGBA colors: CSS3.info&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a hreflang=&quot;en&quot; href=&quot;http://css-tricks.com/rgba-browser-support/&quot; lang=&quot;en&quot;&gt;RGBa Browser Support&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a hreflang=&quot;en&quot; href=&quot;http://en.wikipedia.org/wiki/RGBA_color_space&quot; lang=&quot;en&quot;&gt;RGBA color space&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a hreflang=&quot;en&quot; href=&quot;http://forabeautifulweb.com/blog/about/is_css3_rgba_ready_to_rock&quot; lang=&quot;en&quot;&gt;Is CSS3 RGBa ready to rock?&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a hreflang=&quot;en&quot; href=&quot;http://www.zurb.com/article/266/super-awesome-buttons-with-css3-and-rgba&quot; lang=&quot;en&quot;&gt;Super-Awesome Buttons with CSS3 and RGBA&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;3. Colones multiples&lt;/h3&gt;
&lt;p&gt;CSS 3 offre un ensemble de propriétés permettant de réaliser du multi-colonage sans avoir à faire appel à une foultitude de &lt;code&gt;div&lt;/code&gt;. Les navigateurs interprètent les propriétés et créés automatiquement les colonnes, donnant au texte un look de journal.&lt;/p&gt;
&lt;p&gt;&lt;a hreflang=&quot;en&quot; href=&quot;http://tweetcc.com/&quot;&gt;&lt;img alt=&quot;Le site TeewtCC&quot; src=&quot;http://media1.smashingmagazine.com/wp-content/uploads/images/css3-new-techniques/css3-tweetcc.jpg&quot; /&gt;&lt;/a&gt;&lt;br /&gt;&lt;em&gt;tweetCC utilise les propriétés de multi-colonage sur sa page d'accueil.&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&lt;a hreflang=&quot;en&quot; href=&quot;http://tweetcc.com/&quot; lang=&quot;en&quot;&gt;tweetCC&lt;/a&gt; affiche son texte d'introduction sur 4 colonnes sur sa page d'accueil. Ces 4 colonnes ne sont pas des &lt;code&gt;div&lt;/code&gt; flottantes ; En fait, le webdesigner utilise les propriétés de colonage de CSS3 de la manière suivante :&lt;/p&gt;
&lt;pre class=&quot;sh_css&quot;&gt;.index #content div {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; -webkit-column-count : 4;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; -webkit-column-gap : 20px;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; -moz-column-count : 4;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; -moz-column-gap : 20px;&lt;br /&gt;}&lt;/pre&gt;&lt;p&gt;Les propriétés de multi-colonage définissent au moins trois choses : le nombre de colonnes (&lt;code&gt;column-count&lt;/code&gt;), la largeur de chaque colonne (&lt;code&gt;column-width&lt;/code&gt;, pas utilisé dans ce cas) et la taille de la gouttière entre les colonnes (&lt;code&gt;column-gap&lt;/code&gt;). Si column-count n'est pas définie, le navigateur va faire au mieux selon l'espace dont il dispose.&lt;/p&gt;
&lt;p&gt;Pour ajouter un séparateur vertical entre les colonnes,&amp;nbsp; nous pouvons utiliser la propriété &lt;code&gt;column-rule&lt;/code&gt;. Cette propriété ressemble beaucoup à la propriété border :&lt;/p&gt;
&lt;pre class=&quot;sh_css&quot;&gt;div{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; column-rule: 1px solid #000000;&lt;br /&gt;}&lt;/pre&gt;&lt;p&gt;Les navigateurs qui ne supportent pas ses propriétés affichent le texte comme s'il n'y avait pas de colonnes.&lt;/p&gt;
&lt;p&gt;&lt;span&gt;Propriétés connexes : &lt;/span&gt;&lt;code&gt;column-break-after&lt;/code&gt;, &lt;code&gt;column-break-before&lt;/code&gt;, &lt;code&gt;column-span&lt;/code&gt;, &lt;code&gt;column-fill&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Implémentation dans les navigateurs : &lt;/strong&gt;Les propriétés de multi-colonage sont disponibles dans Safari 3 et 4 et dans Firefox depuis sa version 1.5.&lt;/p&gt;
&lt;h4&gt;Liens utiles&lt;/h4&gt;
&lt;ul&gt;&lt;li&gt;&lt;a hreflang=&quot;en&quot; href=&quot;http://www.w3.org/TR/css3-multicol/&quot; lang=&quot;en&quot;&gt;CSS3 module: Multi-column layout: W3C Working Draft&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a hreflang=&quot;en&quot; href=&quot;http://www.quirksmode.org/css/multicolumn.html&quot; lang=&quot;en&quot;&gt;Columns&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a hreflang=&quot;en&quot; href=&quot;http://www.csscripting.com/css-multi-column/&quot; lang=&quot;en&quot;&gt;CSS3 - Multi-Column Layout Demonstration&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a hreflang=&quot;en&quot; href=&quot;https://developer.mozilla.org/en/CSS3_Columns&quot; lang=&quot;en&quot;&gt;CSS3 Columns&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a hreflang=&quot;en&quot; href=&quot;http://forabeautifulweb.com/blog/about/designing_tweetcc/&quot; lang=&quot;en&quot;&gt;Designing tweetCC&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a hreflang=&quot;en&quot; href=&quot;http://designshack.co.uk/tutorials/introduction-to-css3-part-5-multiple-columns&quot; lang=&quot;en&quot;&gt;Introduction to CSS3 - Part 5: Multiple Columns&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;4. Arrière-plans multiples&lt;/h3&gt;
&lt;p&gt;CSS 3 permet d'appliquer plusieurs couches d'arrière-plan sur un élément en utilisant les propriétés classiques d'arrière-plan : &lt;code&gt;background-image&lt;/code&gt;, &lt;code&gt;background-repeat&lt;/code&gt;, &lt;code&gt;background-size&lt;/code&gt;, &lt;code&gt;background-position&lt;/code&gt;, &lt;code&gt;background-origin&lt;/code&gt; et &lt;code&gt;background-clip&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;La façon la plus simple d'appliquer des arrière-plans multiples, consiste à utiliser la propriété raccourcis &lt;code&gt;background&lt;/code&gt;. Grace à ça, Vous pouvez spécifier l'ensemble des propriétés ci-dessus en une seule fois. Néanmoins, les propriétés les plus utilisé sont la définition de la source de l'image, sa position et sa répétition :&lt;/p&gt;
&lt;pre class=&quot;sh_css&quot;&gt;div {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; background: url(example.jpg) top left no-repeat,&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; url(example2.jpg) bottom left no-repeat,&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; url(example3.jpg) center center repeat-y;&lt;br /&gt;}&lt;/pre&gt;
&lt;p&gt;L'ordre de définition des images définie l'ordre d'empilement ce celles-ci, la première étant &quot;la plus proche&quot; de l'utilisateur.&lt;/p&gt;
&lt;p&gt;Une version plus complexe des mêmes propriétés pourrait être :&lt;/p&gt;
&lt;pre class=&quot;sh_css&quot;&gt;div {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; background: url(example.jpg) top left (100% 2em) no-repeat,&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; url(example2.jpg) bottom left (100% 2em) no-repeat,&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; url(example3.jpg) center center (10em 10em) repeat-y;&lt;br /&gt;}&lt;/pre&gt;
&lt;p&gt;Dans ce cas, là, &lt;code&gt;(100% 2em)&lt;/code&gt; équivaux à la valeur de la propriété &lt;code&gt;background-size&lt;/code&gt; ; l'image de fond dans le coin haut/gauche sera étiré en largeur aux dimensions de la &lt;code&gt;div&lt;/code&gt; et fera 2em de haut.&lt;/p&gt;
&lt;p&gt;Actuellement,&amp;nbsp; cette fonctionnalité est très peu implémentée dans les navigateurs. Or, si cette fonctionnalité n'est pas supporté, les navigateurs n'afficherons aucun arrière-plan ce qui peut avoir un impact significatif sur le design d'un site Web. En conséquence, cette fonctionnalité de CSS 3 est franchement peu utilisée. Ceci dit, à terme, cette propriété peut avoir d'importantes conséquences sur le travail des Webdesigner et permettre de réduire considérablement le balisage nécessaire à la réalisation de ce type d'effet.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Implémentation dans les navigateurs :&lt;/strong&gt; Seul Safari et Konqueror supportent les arrière-plans multiples.&lt;/p&gt;
&lt;h4&gt;Liens utiles&lt;/h4&gt;
&lt;ul&gt;&lt;li&gt;&lt;a hreflang=&quot;en&quot; href=&quot;http://www.w3.org/TR/css3-background/#layering&quot; lang=&quot;en&quot;&gt;Layering multiple background images&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a hreflang=&quot;en&quot; href=&quot;http://www.css3.info/preview/multiple-backgrounds/&quot; lang=&quot;en&quot;&gt;Multiple backgrounds with CSS3 and CSS3.info&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a hreflang=&quot;en&quot; href=&quot;http://designshack.co.uk/tutorials/introduction-to-css3-part-6-backgrounds&quot; lang=&quot;en&quot;&gt;Introduction to CSS3, Part 6: Backgrounds&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;5. Césure&lt;/h3&gt;
&lt;p&gt;La propriété &lt;code&gt;word-wrap&lt;/code&gt; est utilisée afin de&lt;strong&gt; définir le mode de césure des mots&lt;/strong&gt;. Elle peut prendre deux valeurs : &lt;code&gt;normal&lt;/code&gt; et &lt;code&gt;break-word&lt;/code&gt;. La valeur par défaut (&lt;code&gt;normal&lt;/code&gt;) coupe les mots seulement là ou cela et requis par les règles typographiques du navigateur (au niveau du trait d'union par exemple). Si la valeur &lt;code&gt;break-word&lt;/code&gt; est utilisée, le mot peut être coupé au niveau de n'importe quel caractère afin d'éviter que celui-ci ne déborde de la zone de texte maximal définie par l'élément conteneur.&lt;/p&gt;
&lt;p&gt;&lt;a hreflang=&quot;en&quot; href=&quot;http://wordpress.org/&quot;&gt;&lt;img alt=&quot;WordPress.com&quot; src=&quot;http://media2.smashingmagazine.com/wp-content/uploads/images/css3-new-techniques/css3-wordpress-admin-2.jpg&quot; /&gt;&lt;/a&gt;&lt;br /&gt;&lt;em&gt;L'interface d'administration de WordPress utilise &lt;/em&gt;&lt;code&gt;&lt;em&gt;word-wrap&lt;/em&gt;&lt;/code&gt;&lt;em&gt; sur ses tableaux de données&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;Dans l'interface d'administration de &lt;a hreflang=&quot;en&quot; href=&quot;http://wordpress.org/&quot;&gt;WordPress&lt;/a&gt;, la propriété &lt;code&gt;word-wrap&lt;/code&gt; est utilisée dans les cellules de certains tableaux ; par exemple sur la liste des billets et des pages :&lt;/p&gt;
&lt;pre class=&quot;sh_css&quot;&gt;.widefat * {&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; word-wrap: break-word;&amp;nbsp; &lt;br /&gt;}&lt;/pre&gt;&lt;p&gt;&lt;strong&gt;Implémentation dans les navigateurs :&lt;/strong&gt; &lt;code&gt;word-wrap&lt;/code&gt; est disponible dans Internet Explorer et Safari. Firefox l'intégrera à partir de sa version 3.5.&lt;/p&gt;
&lt;h4&gt;Liens Utiles&lt;/h4&gt;
&lt;ul&gt;&lt;li&gt;&lt;a hreflang=&quot;en&quot; href=&quot;http://www.w3.org/TR/css3-text/#word-wrap&quot; lang=&quot;en&quot;&gt;Force Wrapping: the ‘word-wrap' property — CSS Text Level 3: W3C Working Draft&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a hreflang=&quot;en&quot; href=&quot;http://www.css3.info/preview/word-wrap/&quot; lang=&quot;en&quot;&gt;word-wrap: CSS3.info&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a hreflang=&quot;en&quot; href=&quot;http://www.css3.com/css-word-wrap/&quot; lang=&quot;en&quot;&gt;CSS word-wrap&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a hreflang=&quot;en&quot; href=&quot;https://developer.mozilla.org/en/CSS/word-wrap&quot; lang=&quot;en&quot;&gt;word-wrap: Mozilla Developer Center&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;6. Texte ombré&lt;/h3&gt;
&lt;p&gt;la propriété &lt;code&gt;text-shadow&lt;/code&gt; a été introduite dès CSS 2, mais reste fort peu utilisée. Cependant il y a de forte chance que cela change avec CSS 3. Cette propriété offre aux webdesigners un outil multi-navigateur permettant de rehausser leurs designs et de faire ressortir le texte.&lt;/p&gt;
&lt;p&gt;Bien évidement, dans l'éventualité ou le navigateur de l'utilisateur n'interprèterait pas cette propriété, vous devez vous assurer que votre texte reste lisible. Pour cela, pensez à contraster suffisamment les couleurs du texte et de l'arrière-plan.&lt;/p&gt;
&lt;p&gt;&lt;a hreflang=&quot;en&quot; href=&quot;http://beakapp.com/&quot;&gt;&lt;img alt=&quot;BeakApp.com&quot; src=&quot;http://media2.smashingmagazine.com/wp-content/uploads/images/css3-new-techniques/beak.gif&quot; /&gt;&lt;/a&gt;&lt;br /&gt;&lt;em&gt;BeakApp utilise la propriété &lt;/em&gt;&lt;code&gt;&lt;em&gt;text-shadow&lt;/em&gt;&lt;/code&gt;&lt;em&gt; sur la zone de contenu de son site.&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&lt;a hreflang=&quot;en&quot; href=&quot;http://beakapp.com/&quot;&gt;BeakApp.com&lt;/a&gt; utilise la propriété &lt;code&gt;text-shadow&lt;/code&gt; dans sa zone de contenu pour&lt;strong&gt; donner du relief et de la profondeur au texte&lt;/strong&gt; sans avoir à recourir à une solution de substitution à base d'image. Cet effet n'est visible que dans Safari et Google Chrome.&lt;/p&gt;
&lt;p&gt;La feuille de style du site utilise la règle suivante :&lt;/p&gt;
&lt;pre class=&quot;sh_css&quot;&gt;.signup_area p {&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; text-shadow: rgba(0,0,0,.8) 0 1px 0;&lt;br /&gt;}&lt;/pre&gt;&lt;p&gt;Nous avons dans l'ordre : la couleur de l'ombre (définie en RGBA, voir ci-avant), le décalage vers la droite, le décalage vers le bas et enfin, le rayon de dispersion.&lt;/p&gt;
&lt;p&gt;Il est possible d'appliquer plusieurs ombres en les séparant par une virgule :&lt;/p&gt;
&lt;pre class=&quot;sh_css&quot;&gt;p {&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; text-shadow: red 4px 4px 2px,&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; yellow -4px -4px 2px,&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; green -4px 4px 2px;&lt;br /&gt;}&lt;/pre&gt;&lt;p&gt;&lt;strong&gt;Implémentation dans les navigateurs :&lt;/strong&gt; Opera 9.5 et les navigateurs basés sur Webkit supportent &lt;code&gt;text-shadow&lt;/code&gt;. Cette propriété ne sera disponible dans Firefox qu'à partir de la version 3.5 et Internet Explorer ne l'implémente pas.&lt;/p&gt;
&lt;h4&gt;Liens Utiles&lt;/h4&gt;
&lt;ul&gt;&lt;li&gt;&lt;a hreflang=&quot;en&quot; href=&quot;http://www.w3.org/TR/css3-text/#text-shadow&quot; lang=&quot;en&quot;&gt;Text Shadows: the ‘text-shadow' property — W3C Working Draft&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a hreflang=&quot;en&quot; href=&quot;http://www.w3.org/Style/Examples/007/text-shadow&quot; lang=&quot;en&quot;&gt;Text shadows: Web Style Sheets CSS tips and tricks&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a hreflang=&quot;en&quot; href=&quot;http://www.css3.info/preview/text-shadow/&quot; lang=&quot;en&quot;&gt;Text-shadow, Photoshop like effects using CSS — CSS3.info&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a hreflang=&quot;en&quot; href=&quot;http://www.kremalicious.com/2008/04/make-cool-and-clever-text-effects-with-css-text-shadow/&quot; lang=&quot;en&quot;&gt;Make Cool And Clever Text Effects With CSS Text-Shadow&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a hreflang=&quot;en&quot; href=&quot;http://sam.brown.tc/entry/348/safaris-text-shadow-anti-aliasing-css-hack&quot; lang=&quot;en&quot;&gt;Safari's Text-Shadow Anti-Aliasing CSS Hack&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a hreflang=&quot;en&quot; href=&quot;http://reference.sitepoint.com/css/text-shadow&quot; lang=&quot;en&quot;&gt;text-shadow&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a hreflang=&quot;en&quot; href=&quot;https://developer.mozilla.org/en/CSS/text-shadow&quot; lang=&quot;en&quot;&gt;text-shadow: Mozilla Developer Center&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;7. La règle @font-face&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;Bien que cette fonctionnalité soit une des plus attendu de CSS 3&lt;/strong&gt; (et bien qu'elle fasse déjà partie de CSS 2), &lt;code&gt;@font-face&lt;/code&gt; est loin d'être aussi bien implémentée que les autres fonctionnalités de CSS 3 qui sont déjà disponibles. C'est principalement dû à des questions de droits d'auteurs liés aux Polices typographiques : Les polices embarquées dans un site web sont facilement téléchargeables, ce qui représente un problème majeur pour les principaux fabriquant de polices typographiques.&lt;/p&gt;
&lt;p&gt;Cependant, une solution à cette question de droits semble voir le jour. &lt;a hreflang=&quot;en&quot; href=&quot;http://blog.typekit.com/2009/05/27/introducing-typekit/&quot;&gt;TypeKit&lt;/a&gt; propose de fournir une solution de gestion des droits capable de simplifier la vie des designers et des fabriquant. Cela permettrait d'enrichir significativement l'usage des Polices Typographiques sur Internet et de rendre la règle &lt;code&gt;@font-face&lt;/code&gt; utilisable en pratique.&lt;/p&gt;
&lt;p&gt;&lt;a hreflang=&quot;en&quot; href=&quot;https://jetpack.mozillalabs.com/&quot;&gt;&lt;img alt=&quot;JetPack&quot; src=&quot;http://media1.smashingmagazine.com/wp-content/uploads/images/css3-new-techniques/css3-mozillajetpack.jpg&quot; /&gt;&lt;/a&gt;&lt;br /&gt;&lt;em&gt;Le site du projet JetPack sur le Mozilla Labs utilise la règle &lt;/em&gt;&lt;code&gt;&lt;em&gt;@font-face&lt;/em&gt;&lt;/code&gt;&lt;em&gt; pour afficher la Police DroidSans&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;Un des rares sites web à utiliser cette règle est celui du &lt;a hreflang=&quot;en&quot; href=&quot;https://jetpack.mozillalabs.com/&quot;&gt;projet JepPack sur le Mozilla Labs&lt;/a&gt;.&lt;/p&gt;
&lt;pre class=&quot;sh_css&quot;&gt;@font-face{&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; font-family: 'DroidSans';&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; src: url('../fonts/DroidSans.ttf') format('truetype');&amp;nbsp; &lt;br /&gt;}&lt;/pre&gt;&lt;p&gt;Pour pouvoir utiliser des polices typographiques embarquées sur votre site Web, vous devez déclarer chaque déclinaison séparément (par exemple, &lt;em&gt;normal&lt;/em&gt;, &lt;em&gt;bold&lt;/em&gt; et &lt;em&gt;italic&lt;/em&gt;). Assurez-vous d'utiliser uniquement des polices autorisant leur usage sur le Web et n'oubliez pas de citez les créateurs à chaque fois que cela est requis.&lt;/p&gt;
&lt;p&gt;Après avoir déclaré une police typographique à l'aide de la règle &lt;code&gt;@font-face&lt;/code&gt;, vous pouvez faire appelle à cette police en utilisant la propriété &lt;code&gt;font-family&lt;/code&gt; dans votre feuille de style.&lt;/p&gt;
&lt;pre class=&quot;sh_css&quot;&gt;p {&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; font-family: &quot;DroidSans&quot;;&amp;nbsp; &lt;br /&gt;}&lt;/pre&gt;&lt;p&gt;Si un navigateur ne supporte pas &lt;code&gt;@font-face&lt;/code&gt;, il suivra le comportement normal de la propriété &lt;code&gt;font-family&lt;/code&gt; et utilisera la première police typographique disponible parmi celles qui ont été déclarées avec cette propriété. Ce comportement peut suffire si l'utilisation de la règle &lt;code&gt;@font-face&lt;/code&gt; est un luxe réservé aux navigateurs qui la supporte. Cependant, si la police typographique joue un rôle majeur dans le design ou si elle fait partie de l'identité visuelle d'une entreprise, il vous faudra sans doute recourir à une autre solution comme &lt;a hreflang=&quot;en&quot; href=&quot;http://wiki.novemberborn.net/sifr3/&quot;&gt;sIFR&lt;/a&gt; ou &lt;a hreflang=&quot;en&quot; href=&quot;http://wiki.github.com/sorccu/cufon/about&quot;&gt;Cufón&lt;/a&gt;. N'oubliez pas que ces outils alternatifs sont plutôt adaptés à la titraille ou à de courte citations car copier/coller du texte traité de cette manière est difficile et peu convivial.&lt;/p&gt;
&lt;p&gt;&lt;a hreflang=&quot;en&quot; href=&quot;http://mezzoblue.com/archives/2009/05/07/font_embeddi/&quot;&gt;&lt;img alt=&quot;Le site Mezzoblue.com&quot; src=&quot;http://media1.smashingmagazine.com/wp-content/uploads/images/css3-new-techniques/font-embedding.gif&quot; /&gt;&lt;/a&gt;&lt;br /&gt;Ça ne serait pas génial d'avoir des polices typographiques comme ça sur le Web ? Une expérience de Dave Shea avec &lt;a hreflang=&quot;en&quot; href=&quot;http://wiki.github.com/sorccu/cufon/about&quot;&gt;Cufón&lt;/a&gt; et &lt;a hreflang=&quot;en&quot; href=&quot;http://www.josbuivenga.demon.nl/museosans.html&quot;&gt;Museo Sans&lt;/a&gt;. Magnifique !&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Implémentation dans les navigateurs :&lt;/strong&gt; La règle &lt;code&gt;@font-face&lt;/code&gt; est supportée par Safari 3.1+. Internet Explorer la supporte uniquement avec des polices au format EOT. Opera 10 et Firefox 3.5 devraient la supporter.&lt;/p&gt;
&lt;h4&gt;Liens utiles&lt;/h4&gt;
&lt;ul&gt;&lt;li&gt;&lt;a hreflang=&quot;en&quot; href=&quot;http://www.w3.org/TR/css3-webfonts/#font-descriptions&quot; lang=&quot;en&quot;&gt;Font Descriptions and @font-face — W3C Working Draft&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a hreflang=&quot;en&quot; href=&quot;http://www.css3.info/preview/web-fonts-with-font-face/&quot; lang=&quot;en&quot;&gt;Web fonts with @font-face&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a hreflang=&quot;en&quot; href=&quot;http://reference.sitepoint.com/css/at-fontface&quot; lang=&quot;en&quot;&gt;@font-face — Sitepoint&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a hreflang=&quot;en&quot; href=&quot;http://webfonts.info/wiki/index.php?title=Fonts_available_for_%40font-face_embedding&quot; lang=&quot;en&quot;&gt;Fonts available for @font-face embedding&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a hreflang=&quot;en&quot; href=&quot;http://nickcowie.com/2008/font-face/&quot; lang=&quot;en&quot;&gt;@font-face&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a hreflang=&quot;en&quot; href=&quot;http://hacks.mozilla.org/2009/06/beautiful-fonts-with-font-face/&quot; lang=&quot;en&quot;&gt;beautiful fonts with @font-face&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a hreflang=&quot;en&quot; href=&quot;http://blog.typekit.com/2009/05/27/introducing-typekit/&quot; lang=&quot;en&quot;&gt;Introducing Typekit&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;8. Angles arrondis&lt;/h3&gt;
&lt;p&gt;La propriété &lt;code&gt;border-radius&lt;/code&gt; permet de &lt;strong&gt;créer des angles arrondis sur les éléments HTML&lt;/strong&gt; sans avoir à utiliser d'images de fond. A l'heure actuelle, il s'agit probablement de la propriété CSS 3 la plus utilisé car c'est sympa d'avoir des coins arrondis sans que cela soit critique du point du vue du design ou de l'utilisabilité s'il ne sont pas affichés.&lt;/p&gt;
&lt;p&gt;Plutôt que d'ajouter des scripts incompréhensibles ou de surcharger votre balisage HTML, ajoutez quelques propriétés CSS dans votre feuille de style et croisez les doigts. Cette solution, qui a le mérite d'être plus propre et plus efficace, vous évitera de vous battre avec des techniques à base de Javascript et CSS mélangées pour garantir une gestion multi-navigateurs.&lt;/p&gt;
&lt;p&gt;&lt;a hreflang=&quot;en&quot; href=&quot;http://sam.brown.tc/&quot;&gt;&lt;img alt=&quot;Le blog de Sam Brown&quot; src=&quot;http://media2.smashingmagazine.com/wp-content/uploads/images/css3-new-techniques/css3-sambrown.jpg&quot; /&gt;&lt;/a&gt;&lt;br /&gt;&lt;em&gt;Le blog de Sam Brown utilise &lt;/em&gt;&lt;code&gt;&lt;em&gt;border-radius&lt;/em&gt;&lt;/code&gt;&lt;em&gt; sur les en-têtes, les catégories et les liens.&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;Sur son site Internet, &lt;a hreflang=&quot;en&quot; href=&quot;http://sam.brown.tc/&quot; lang=&quot;en&quot;&gt;Sam Brown&lt;/a&gt; utilise massivement la propriété &lt;code&gt;border-radius&lt;/code&gt; sur les en-têtes, les liens et certains blocs. Réaliser cet effet avec des images aurait pris beaucoup de temps. C'est une des raisons qui nous permet de &lt;strong&gt;réaliser l'avancé qu'est CSS 3 pour nos projets en termes d'efficacité des développements Web&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;Pour ajouter des coins arrondis à ses catégories d'article, Sam utilise le code CSS suivant :&lt;/p&gt;
&lt;pre class=&quot;sh_css&quot;&gt;h2 span {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; color: #1a1a1a;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; padding: .5em;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; -webkit-border-radius: 6px;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; -moz-border-radius: 6px;&lt;br /&gt;}&lt;/pre&gt;&lt;p&gt;Il est possible d'aller un peu plus loin en rajoutant la propriété standard CSS 3 et la propriété avec le préfixe de Konqueror, ce qui donne :&lt;/p&gt;
&lt;pre class=&quot;sh_css&quot;&gt;h2 span {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; color: #1a1a1a;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; padding: .5em;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; -webkit-border-radius: 6px;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; -moz-border-radius: 6px;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; -khtml-border-radius: 6px;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; border-radius: 6px;&lt;br /&gt;}&lt;/pre&gt;
&lt;p&gt;Si nous voulions appliquer la propriété à certains angles spécifiques de notre élément, nous pourrions cibler chaque coin séparément :&lt;/p&gt;
&lt;pre class=&quot;sh_css&quot;&gt;div {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; -moz-border-radius-topright: 6px;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; -moz-border-radius-topleft: 6px;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; -moz-border-radius-bottomright: 6px;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; -moz-border-radius-bottomleft: 6px;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; -webkit-border-top-right-radius: 6px;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; -webkit-border-top-left-radius: 6px;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; -webkit-border-bottom-right-radius: 6px;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; -webkit-border-bottom-left-radius: 6px;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; border-top-right-radius: 6px;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; border-top-left-radius: 6px;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; border-bottom-right-radius: 6px;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; border-bottom-left-radius: 6px;&lt;br /&gt;}&lt;/pre&gt;
&lt;p&gt;&lt;strong&gt;Implémentation dans les navigateurs :&lt;/strong&gt; la propriété &lt;code&gt;border-radius&lt;/code&gt; est supportée par tous les navigateurs basés sur Webkit et Gecko. Par contre, aucune version de Internet Explorer ni d'Opera ne la supporte.&lt;/p&gt;
&lt;h4&gt;Liens utiles&lt;/h4&gt;
&lt;ul&gt;&lt;li&gt;&lt;a hreflang=&quot;en&quot; href=&quot;http://www.w3.org/TR/css3-background/#border-radius&quot; lang=&quot;en&quot;&gt;border-radius: W3C Working Draft&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a hreflang=&quot;en&quot; href=&quot;http://www.css3.info/preview/rounded-border/&quot; lang=&quot;en&quot;&gt;Border-radius: create rounded corners with CSS! — CSS3.info&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a hreflang=&quot;en&quot; href=&quot;http://designshack.co.uk/tutorials/introduction-to-css3-part-2-borders&quot; lang=&quot;en&quot;&gt;Introduction to CSS3, Part 2: Borders&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a hreflang=&quot;en&quot; href=&quot;http://webdesignernotebook.com/css/an-ode-to-border-radius/&quot; lang=&quot;en&quot;&gt;An Ode to border-radius&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a hreflang=&quot;en&quot; href=&quot;http://www.zenelements.co.uk/blog/css3-border-radius-rounded-corners/&quot; lang=&quot;en&quot;&gt;CSS3 Border-Radius and Rounded Corners&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;9. Bordures illustrées&lt;/h3&gt;
&lt;p&gt;La propriété &lt;code&gt;border-image&lt;/code&gt; vous permet d'&lt;strong&gt;utiliser une image pour définir la bordure d'un élément&lt;/strong&gt;, vous permettant de vous libérer des styles de bordures traditionnels tel que &lt;code&gt;solid&lt;/code&gt;, &lt;code&gt;dotted&lt;/code&gt;, etc. Cette propriété offre aux designers un excellent outil pour travailler graphiquement les bords d'un élément sans avoir recourt à la propriété &lt;code&gt;background-image&lt;/code&gt; (pour les design recherché) ou pour se détacher de la rigidité des styles de bordures traditionnels. Avec cette propriété, nous pouvons également définir explicitement la façon dont une bordure doit être étirée ou répliquée.&lt;/p&gt;
&lt;p&gt;&lt;a hreflang=&quot;en&quot; href=&quot;http://www.blog.spoongraphics.co.uk/&quot;&gt;&lt;img alt=&quot;Le blog SpoonGraphics&quot; src=&quot;http://media2.smashingmagazine.com/wp-content/uploads/images/css3-new-techniques/css3-spoongraphics.jpg&quot; /&gt;&lt;/a&gt;&lt;br /&gt;&lt;em&gt;Le blog SpoonGraphics utilise la propriété &lt;/em&gt;&lt;code&gt;&lt;em&gt;border-image&lt;/em&gt;&lt;/code&gt;&lt;em&gt; pour gérer la bordure autour de ses images.&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;Le blog &lt;a hreflang=&quot;en&quot; href=&quot;http://www.blog.spoongraphics.co.uk/&quot;&gt;SpoonGraphics&lt;/a&gt; utilise la propriété &lt;code&gt;border-image&lt;/code&gt; de la manière suivante :&lt;/p&gt;
&lt;pre class=&quot;sh_css&quot;&gt;#content .post img {&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; border: 6px solid #f2e6d1;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; -webkit-border-image: url(main-border.png) 6 repeat;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; -moz-border-image: url(main-border.png) 6 repeat;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; border-image: url(main-border.png) 6 repeat;&lt;br /&gt;}&lt;/pre&gt;&lt;p&gt;Pour définir la propriété &lt;code&gt;border-image&lt;/code&gt;, nous devons spécifier l'emplacement de l'image à utiliser, quelle partie de l'image doit être utilisée pour chacun des bords de l'élément et comment l'image sera étirée et répliquée.&lt;/p&gt;
&lt;p&gt;Pour créer une &lt;code&gt;div&lt;/code&gt; avec une bordure utilisant l'image ci-après, il nous faudra utiliser le code suivant (nous ajouterons les propriétés avec les préfixes pour Opera et Konqueror dans cet exemple) :&lt;/p&gt;
&lt;p&gt;&lt;img alt=&quot;&quot; src=&quot;http://media1.smashingmagazine.com/wp-content/uploads/images/css3-new-techniques/border-image.gif&quot; /&gt;&lt;/p&gt;
&lt;pre class=&quot;sh_css&quot;&gt;div {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; border-width: 18px 25px 25px 18px;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; -webkit-border-image: url(example.png) 18 25 25 18 stretch stretch;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; -moz-border-image: url(example.png) 18 25 25 18 stretch stretch;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; -o-border-image: url(example.png) 18 25 25 18 stretch stretch;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; -khtml-border-image: url(example.png) 18 25 25 18 stretch stretch;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; border-image: url(example.png) 18 25 25 18 stretch stretch;&lt;br /&gt;}&lt;/pre&gt;&lt;p&gt;La dernière valeur de cette propriété, peut être &lt;code&gt;stretch&lt;/code&gt; (default), &lt;code&gt;round&lt;/code&gt; (seul un nombre entier d'image remplira l'espace disponible) ou &lt;code&gt;repeat&lt;/code&gt;. Dans notre exemple, les bordures de chacun des coté, seront étirées (&lt;code&gt;stretch&lt;/code&gt;). Si nous voulions seulement étirer les images des bordures du haut et du bas , nous utiliserions la règle CSS suivante :&lt;/p&gt;
&lt;p&gt;div {&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; (...)&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; border-image: url(example.png) 18 25 25 18 stretch repeat;&amp;nbsp; &lt;br /&gt;}&lt;/p&gt;
&lt;p&gt;Il est également possible de cibler chaque coin et chaque bord indépendamment si l'on veut utiliser une image différente pour chacun d'eux :&lt;/p&gt;
&lt;pre class=&quot;sh_css&quot;&gt;div {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; border-top-image: url(example.png) 5 5 stretch;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; border-right-image: url(example.png) 5 5 stretch;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; border-bottom-image: url(example.png) 5 5 stretch;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; border-left-image: url(example.png) 5 5 stretch;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; border-top-left-image: url(example.png) 5 5 stretch;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; border-top-right-image: url(example.png) 5 5 stretch;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; border-bottom-left-image: url(example.png) 5 5 stretch;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; border-bottom-right-image: url(example.png) 5 5 stretch;&lt;br /&gt;}&lt;/pre&gt;&lt;p&gt;Si un navigateur ne supporte pas la propriété &lt;code&gt;border-image&lt;/code&gt;, il&amp;nbsp; l'ignorera tout simplement et appliquera les autres propriétés des bordures comme par exemple &lt;code&gt;border-width&lt;/code&gt; et &lt;code&gt;border-color&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Implémentation dans les navigateurs :&lt;/strong&gt; Actuellement, seul les navigateurs basés sur Webkit supporte &lt;code&gt;border-image&lt;/code&gt;. Firefox l'intégrera à partir de sa version 3.5.&lt;/p&gt;
&lt;h4&gt;Liens utiles&lt;/h4&gt;
&lt;ul&gt;&lt;li&gt;&lt;a hreflang=&quot;en&quot; href=&quot;http://www.w3.org/TR/css3-background/#the-border-image&quot; lang=&quot;en&quot;&gt;The ‘border-image' property: W3C Working Draft&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a hreflang=&quot;en&quot; href=&quot;http://www.css3.info/preview/border-image/&quot; lang=&quot;en&quot;&gt;Border-image: using images for your border — CSS3.info&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://ejohn.org/blog/border-image-in-firefox/&quot; lang=&quot;en&quot;&gt;border-image in Firefox&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a hreflang=&quot;en&quot; href=&quot;http://www.lrbabe.com/sdoms/borderImage/index.html&quot; lang=&quot;en&quot;&gt;border-image demonstration page&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a hreflang=&quot;en&quot; href=&quot;http://www.launchpadhq.com/blog/2007/07/07/replicating-iphone-buttons-the-webkit-way/&quot; lang=&quot;en&quot;&gt;Replicating iPhone Buttons the “webkit” way!&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;10. Les boites ombrées&lt;/h3&gt;
&lt;p&gt;La propriété &lt;code&gt;box-shadow&lt;/code&gt; permet d'&lt;strong&gt;ajouter une ombre à un élément HTML&lt;/strong&gt; sans avoir à recourir à du balisage supplémentaire ou à une image de fond. De la même façon que la propriété &lt;code&gt;text-shadow&lt;/code&gt;, elle enrichie les possibilités graphiques offertes aux designers. Dans la mesure où cela n'affecte pas vraiment la lisibilité du contenu rien n'empèche d'ajouter cette petite touche supplémentaire.&lt;/p&gt;
&lt;p&gt;&lt;a hreflang=&quot;nl-be&quot; href=&quot;http://10to1.be/&quot;&gt;&lt;img alt=&quot;Le site 10to1&quot; src=&quot;http://media1.smashingmagazine.com/wp-content/uploads/images/css3-new-techniques/css3-10to1.jpg&quot; /&gt;&lt;/a&gt;&lt;br /&gt;10to1 utilise la propriété &lt;code&gt;box-shadow&lt;/code&gt; sur l'arrière plan de sa barre de navigation et pour ses états au survol de la souris.&lt;/p&gt;
&lt;p&gt;&lt;a hreflang=&quot;nl-be&quot; href=&quot;http://10to1.be/&quot;&gt;10to1&lt;/a&gt; rajoute un simple effet d'ombre à sa zone de navigation et l'utilise pour rajouter un effet au survol des liens :&lt;/p&gt;
&lt;pre class=&quot;sh_css&quot;&gt;#navigation {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; -webkit-box-shadow: 0 0 10px #000;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; -moz-box-shadow: 0 0 10px #000;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;#navigation li a:hover,&lt;br /&gt;#navigation li a:focus {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; -webkit-box-shadow: 0 0 5px #111;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; -moz-box-shadow: 0 0 5px #111;&lt;br /&gt;}&lt;/pre&gt;&lt;p&gt;La propriété &lt;code&gt;box-shadow&lt;/code&gt; prend plusieurs valeurs : le décalage horizontal, le décalage vertical, le rayon de flou, le rayon de propagation et la couleur de l'ombre. Les décalages horizontaux et verticaux, ainsi que la couleur de l'ombre sont les plus utilisés.&lt;/p&gt;
&lt;p&gt;Pour appliquer à une div une ombre rouge décalée de 4 pixels vers le bas et la droite sans effet de flou, nous avons besoin du code suivant :&lt;/p&gt;
&lt;pre class=&quot;sh_css&quot;&gt;div {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; -moz-box-shadow: 4px 4px 0 #f00;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; -webkit-box-shadow: 4px 4px 0 #f00;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; box-shadow: 4px 4px 0 #f00;&lt;br /&gt;}&lt;/pre&gt;&lt;p&gt;&lt;strong&gt;Implémentation dans les navigateurs :&lt;/strong&gt; Actuellement, la propriété &lt;code&gt;box-shadow&lt;/code&gt; n'est supportée que par les navigateurs basés sur Webkit. Néanmoins, elle sera également supportée par le prochain Firefox 3.5.&lt;/p&gt;
&lt;h4&gt;Liens utiles&lt;/h4&gt;
&lt;ul&gt;&lt;li&gt;&lt;a hreflang=&quot;en&quot; href=&quot;http://www.w3.org/TR/css3-background/#the-box-shadow&quot; lang=&quot;en&quot;&gt;The &quot;box-shadow&quot; property — W3C Working Draft&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a hreflang=&quot;en&quot; href=&quot;http://www.css3.info/preview/box-shadow/&quot; lang=&quot;en&quot;&gt;Box-shadow, one of CSS3's best new features — CSS3.info&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a hreflang=&quot;en&quot; href=&quot;http://westciv.com/style_master/blog/apples-navigation-bar-using-only-css&quot; lang=&quot;en&quot;&gt;Apple's Navigation bar using only CSS&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a hreflang=&quot;en&quot; href=&quot;http://webkit.org/blog/86/box-shadow/&quot; lang=&quot;en&quot;&gt;Box Shadow — Surfin' Safari blog&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;11. Model de boite&lt;/h3&gt;
&lt;p&gt;Conformément à la norme CSS 2.1, lorsque l'on calcul la taille complète d'une boite, la taille des bordures et des marges intérieur (&lt;code&gt;padding&lt;/code&gt;) doivent être ajoutées aux largeurs et hauteurs déclaré dans la feuille de style. Mais les navigateurs vieillissant, voir obsolètes, sont connus pour leur interprétation fantaisiste de cette partie de la spécification. La propriété &lt;code&gt;box-sizing&lt;/code&gt; vous permet donc de spécifier explicitement &lt;strong&gt;la façon dont un navigateur doit calculer la largeur et la hauteur d'un élément&lt;/strong&gt; donné.&lt;/p&gt;
&lt;p&gt;&lt;a hreflang=&quot;en&quot; href=&quot;http://wordpress.org/&quot;&gt;&lt;img alt=&quot;WordPress.com&quot; src=&quot;http://media2.smashingmagazine.com/wp-content/uploads/images/css3-new-techniques/css3-wordpress-admin.jpg&quot; /&gt;&lt;/a&gt;&lt;br /&gt;&lt;em&gt;WordPress utilise la propriété &lt;/em&gt;&lt;code&gt;&lt;em&gt;box-sizing&lt;/em&gt;&lt;/code&gt;&lt;em&gt; pour tout les champs et zones de textes de son espace d'administration.&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;La zone d'administration de &lt;a hreflang=&quot;en&quot; href=&quot;http://wordpress.org/&quot;&gt;WordPress&lt;/a&gt; utilise cette propriété pour toutes les balises &lt;code&gt;input&lt;/code&gt; avec un attribut &lt;code&gt;type&lt;/code&gt; ayant la valeur text et pour toutes les balises &lt;code&gt;textarea&lt;/code&gt; (entre autre choses)&lt;/p&gt;
&lt;pre class=&quot;sh_css&quot;&gt;input[type=&quot;text&quot;],&lt;br /&gt;textarea {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; -moz-box-sizing: border-box;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; -webkit-box-sizing: border-box;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; -ms-box-sizing: border-box;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; box-sizing: border-box;&lt;br /&gt;}&lt;/pre&gt;&lt;p&gt;La troisième propriété (&lt;code&gt;-ms-box-sizing&lt;/code&gt;) ne fonctionne qu'avec Internet Explorer 8. Sur d'autres éléments, le style de WordPress fait également appel à la version de la propriété pour konqueror : &lt;code&gt;-khtml-box-sizing&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;La propriété &lt;code&gt;box-sizing&lt;/code&gt; peut prendre deux valeurs : &lt;code&gt;border-box&lt;/code&gt; et &lt;code&gt;content-box&lt;/code&gt;. La valeur &lt;code&gt;content-box&lt;/code&gt; indique que les largeurs et auteurs doivent être calculé tel que définis dans le standard CSS 2.1. La valeur &lt;code&gt;border-box&lt;/code&gt; indique au navigateur qu'il doit soustraire les valeurs des propriétés &lt;code&gt;padding&lt;/code&gt; et &lt;code&gt;border&lt;/code&gt; des valeurs spécifiées dans les propriétés &lt;code&gt;width&lt;/code&gt; et &lt;code&gt;height&lt;/code&gt; pour calculer la taille réel de l'intérieur d'une boite (comme ce que font les vieux navigateurs)&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Implémentation dans les navigateurs :&lt;/strong&gt; &lt;code&gt;box-sizing&lt;/code&gt; est supporté par IE8, Opera et tous les navigateurs basés sur Webkit et sur Gecko.&lt;/p&gt;
&lt;h4&gt;Liens utiles&lt;/h4&gt;
&lt;ul&gt;&lt;li&gt;&lt;a hreflang=&quot;en&quot; href=&quot;http://www.w3.org/TR/css3-ui/#box-sizing&quot; lang=&quot;en&quot;&gt;&quot;box-sizing&quot; property: W3C Candidate Recommendation&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a hreflang=&quot;en&quot; href=&quot;http://www.css3.info/preview/box-sizing/&quot; lang=&quot;en&quot;&gt;Box-sizing, box-model fixes for the simple people: CSS3.info&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a hreflang=&quot;en&quot; href=&quot;http://helephant.com/2008/10/css3-box-sizing-attribute/&quot; lang=&quot;en&quot;&gt;CSS3 box-sizing attribute&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;12. Media Queries&lt;/h3&gt;
&lt;p&gt;Les &quot;Media Queries&quot; vous permettent de définir des styles différents selon les capacités du terminal qui les affichent. Par exemple, vous pourriez souhaiter voir la colonne de droite de votre site web se positionner sous la zone de contenu principale si celui si est affiché sur un terminal ayant une zone d'affichage inférieur à 480px :&lt;/p&gt;
&lt;pre class=&quot;sh_css&quot;&gt;#sidebar {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; float: right;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; display: inline; /* IE Double-Margin Bugfix */&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;@media all and (max-width:480px) {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; #sidebar {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; float: none;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; clear: both;&lt;br /&gt;    }&lt;br /&gt;}&lt;/pre&gt;&lt;p&gt;Il est également possible de cibler les terminaux avec un écran couleur :&lt;/p&gt;
&lt;pre class=&quot;sh_css&quot;&gt;a {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; color: grey;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;@media screen and (color) {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; a {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; color: red;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;}&lt;/pre&gt;&lt;p&gt;Les possibilités sont infinies. Cette fonctionnalité est utile dans la mesure où vous n'avez plus à écrire des feuilles de styles différentes en fonction des terminaux, ni à utiliser du Javascript pour connaitre les capacités d'affichage de chaque navigateur. Une solution plus populaire, basée sur Javascript, pour produire des gabarits plus souples, consisterait à utiliser un &lt;a hreflang=&quot;en&quot; href=&quot;http://www.smashingmagazine.com/2009/06/09/smart-fixes-for-fluid-layouts/&quot;&gt;gabarit fluide adaptatif&lt;/a&gt;, ce qui rendrait le gabarit plus sensible à la résolution des navigateurs.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Implémentation dans les navigateurs :&lt;/strong&gt; Les &quot;Media Queries&quot; sont supportées par les navigateurs basés sur Webkit et par Opera. Firefox les supportera dans sa version 3.5. Internet Explorer ne les supporte pas et ne prévois pas de les supporter dans les prochaines versions de IE.&lt;/p&gt;
&lt;h4&gt;Liens utiles&lt;/h4&gt;
&lt;ul&gt;&lt;li&gt;&lt;a hreflang=&quot;en&quot; href=&quot;http://www.w3.org/TR/css3-mediaqueries/&quot; lang=&quot;en&quot;&gt;Media Queries: W3C Candidate Recommendation&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a hreflang=&quot;en&quot; href=&quot;http://webkit.org/specs/MediaQueriesExtensions.html&quot; lang=&quot;en&quot;&gt;Extensions to CSS 3 Media Queries&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a hreflang=&quot;en&quot; href=&quot;http://www.css3.info/preview/media-queries/&quot; lang=&quot;en&quot;&gt;Media Queries: CSS3.info&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a hreflang=&quot;en&quot; href=&quot;http://helephant.com/2008/07/the-bleeding-edge-of-web-media-queries/&quot; lang=&quot;en&quot;&gt;The bleeding edge of web: media queries&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a hreflang=&quot;en&quot; href=&quot;http://dev.opera.com/articles/view/safe-media-queries/&quot; lang=&quot;en&quot;&gt;Safe media queries&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a hreflang=&quot;en&quot; href=&quot;http://www.howtocreate.co.uk/tutorials/css/mediatypes&quot; lang=&quot;en&quot;&gt;Media types&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;13. Restitution vocal&lt;/h3&gt;
&lt;p&gt;Le module de restitution vocal (speech) de CSS 3 vous permet de &lt;strong&gt;styliser le rendu vocal d'un lecteur d'écran&lt;/strong&gt;. Vous pouvez contrôler divers aspect de la restitution tel que :&lt;/p&gt;
&lt;ul&gt;&lt;li&gt;&lt;code&gt;voice-volume&lt;/code&gt;&lt;br /&gt;Permet de définir le volume en utilisant un nombre compris entre 0 et 100, un pourcentage ou un mot clé (&lt;code&gt;silent&lt;/code&gt;, &lt;code&gt;x-soft&lt;/code&gt;, &lt;code&gt;soft&lt;/code&gt;, &lt;code&gt;medium&lt;/code&gt;, &lt;code&gt;loud&lt;/code&gt; et &lt;code&gt;x-loud&lt;/code&gt;).&lt;/li&gt;
&lt;li&gt;&lt;code&gt;voice-balance&lt;/code&gt;&lt;br /&gt;Permet de contrôler la balance de la sortie son (si le système de l'utilisateur supporte la stéréo).&lt;/li&gt;
&lt;li&gt;&lt;code&gt;speak&lt;/code&gt;&lt;br /&gt;Signal au lecteur d'écran s'il doit épeler un mot, un nombre ou dire la ponctuation. Les mots clés disponibles sont &lt;code&gt;none&lt;/code&gt;, &lt;code&gt;normal&lt;/code&gt;, &lt;code&gt;spell-out&lt;/code&gt;, &lt;code&gt;digits&lt;/code&gt;, &lt;code&gt;literal-punctuation&lt;/code&gt;, &lt;code&gt;no-punctuation&lt;/code&gt; et &lt;code&gt;inherit&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;pauses&lt;/code&gt; et &lt;code&gt;rests&lt;/code&gt;&lt;br /&gt;Permet de définir une pause ou une respiration avant ou après la vocalisation du contenu d'un élément. Vous pouvez utiliser soit une valeur de temps (par exemple, &quot;2s&quot; pour 2 secondes) soit un mot clé (&lt;code&gt;none&lt;/code&gt;, &lt;code&gt;x-weak&lt;/code&gt;, &lt;code&gt;weak&lt;/code&gt;, &lt;code&gt;medium&lt;/code&gt;, &lt;code&gt;strong&lt;/code&gt; et &lt;code&gt;x-strong&lt;/code&gt;).&lt;/li&gt;
&lt;li&gt;&lt;code&gt;cues&lt;/code&gt;&lt;br /&gt;Permet d'utiliser des sons personnalisés pour délimiter des éléments particuliers et contrôler le volume de ces sons supplémentaires.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;voice-family&lt;/code&gt;&lt;br /&gt;Permet de spécifier les types de voix et combinaison de voix à utiliser (comme pour les polices typographiques).&lt;/li&gt;
&lt;li&gt;&lt;code&gt;voice-rate&lt;/code&gt;&lt;br /&gt;Permet de contrôler la vitesse de diction des éléments. Cela peut être défini à l'aide d'un pourcentage ou d'un mot clé : &lt;code&gt;x-slow&lt;/code&gt;, &lt;code&gt;slow&lt;/code&gt;, &lt;code&gt;medium&lt;/code&gt;, &lt;code&gt;fast&lt;/code&gt; et &lt;code&gt;x-fast&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;voice-stress&lt;/code&gt;&lt;br /&gt;Permet de spécifier une emphase à appliquer à l'élément en utilisant un de ces mots clés : &lt;code&gt;none&lt;/code&gt;, &lt;code&gt;moderate&lt;/code&gt;, &lt;code&gt;strong&lt;/code&gt; et &lt;code&gt;reduced&lt;/code&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Par exemple, pour demander à un lecteur d'écran de lire toutes les balises &lt;code&gt;h2&lt;/code&gt; avec une voie féminine, avec une sortie dans l'enceinte de gauche, sur un ton doux et suivi d'un son spécifique, utilisez la feuille de style suivante :&lt;/p&gt;
&lt;pre class=&quot;sh_css&quot;&gt;h2 {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; voice-family: female;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; voice-balance: left;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; voice-volume: soft;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; cue-after: url(sound.au);&lt;br /&gt;}&lt;/pre&gt;&lt;p&gt;Malheureusement, ces propriétés sont très peu supportées. Néanmoins, il est indispensable de les avoir en tête car elles pourront nous permettre d'améliorer l'accessibilité de nos sites Web à l'avenir.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Implémentation dans les navigateurs :&lt;/strong&gt; Actuellement, seul Opera pour Windows XP et 2000 supporte une partie du module speech. Pour l'utiliser, il faut se servir du préfix &lt;code&gt;-xv-&lt;/code&gt; ; par exemple : &lt;code&gt;-xv-voice-balance: right&lt;/code&gt;.&lt;/p&gt;
&lt;h4&gt;Liens utiles&lt;/h4&gt;
&lt;ul&gt;&lt;li&gt;&lt;a hreflang=&quot;en&quot; href=&quot;http://www.w3.org/TR/css3-speech/&quot; lang=&quot;en&quot;&gt;CSS3 Speech Module — W3C Working Draft&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a hreflang=&quot;en&quot; href=&quot;http://www.css3.info/preview/speech/&quot; lang=&quot;en&quot;&gt;CSS3 Speech — CSS3.info&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a hreflang=&quot;en&quot; href=&quot;http://lab.dotjay.co.uk/notes/css/aural-speech/&quot; lang=&quot;en&quot;&gt;Aural CSS: Support for CSS 2 Aural Style Sheets / CSS 3 Speech Module&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;Conclusion&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;Les propriétés CSS3 peuvent grandement contribuer à votre confort de travail&lt;/strong&gt;, en simplifiant certaines des taches les plus consommatrice de temps tout en vous permettant d'utiliser un meilleur balisage, plus claire et plus léger. Certes, certaines propriétés sont encore assez peu supportées, même par les navigateurs les plus récents. Cela ne signifie pas pour autant que nous ne devrions pas les utiliser et offrir aux visiteurs ayant des navigateurs de dernière génération une expérience graphique enrichie.&lt;/p&gt;
&lt;p&gt;Dans cette optique, gardez à l'esprit que l'&lt;strong&gt;éduquation de nos client&lt;/strong&gt; est à la fois utile et nécessaires : les sites n'ont pas besoin d'être identiques d'un navigateur à l'autre, en particulier si la différence n'impacte pas négativement l'esthétique et l'utilisabilité du site. Si l'on continue à perdre du temps et de l'argent à gérer chaque détail au pixel près (au lieu d'adopter des solutions plus souples et porteuses d'avenir), les utilisateurs n'auront aucune raison de mettre leurs navigateurs à jours. Dans un tel cas de figure, nous aurions longtemps à attendre avant de voir disparaitre les navigateurs obsolètes au profit de navigateurs robustes et modernes.&lt;/p&gt;
&lt;p&gt;Plus vite nous commenceront à expérimenter l'usage des propriétés CSS 3, plus vite elles seront implémentées dans les navigateurs les plus populaire, plus vite nous seront capable de les utiliser à grande échelle.&lt;/p&gt;
&lt;h4&gt;Références et lectures supplémentaires&lt;/h4&gt;
&lt;ul&gt;&lt;li&gt;&lt;a hreflang=&quot;en&quot; href=&quot;http://www.css3.info/preview/&quot; lang=&quot;en&quot;&gt;CSS3 Previews: CSS3.info&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a hreflang=&quot;en&quot; href=&quot;http://www.noupe.com/css3/css3-exciting-functions-and-features-30-useful-tutorials.html&quot; lang=&quot;en&quot;&gt;CSS 3: Exciting Function and Features: 30 Useful Tutorials&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a hreflang=&quot;en&quot; href=&quot;http://www.noupe.com/jquery/5-css3-techniques-for-major-browsers-using-the-power-of-jquery.html&quot; lang=&quot;en&quot;&gt;5 CSS3 Techniques For Major Browsers using the Power of jQuery&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a hreflang=&quot;en&quot; href=&quot;http://designshack.co.uk/tutorials/introduction-to-css3-part-1-what-is-it&quot; lang=&quot;en&quot;&gt;Introduction to CSS3 - Part 1: What is it?&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a hreflang=&quot;en&quot; href=&quot;http://en.wikipedia.org/wiki/Comparison_of_layout_engines_%28CSS%29&quot; lang=&quot;en&quot;&gt;Comparison of layout engines (Cascading Style Sheets) and Wikipedia&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a hreflang=&quot;en&quot; href=&quot;http://en.wikipedia.org/wiki/Progressive_enhancement&quot; lang=&quot;en&quot;&gt;Progressive enhancement&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a hreflang=&quot;en&quot; href=&quot;http://forabeautifulweb.com/blog/about/five_css_design_browser_differences_i_can_live_with/&quot; lang=&quot;en&quot;&gt;Five CSS design browser differences I can live with&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a hreflang=&quot;en&quot; href=&quot;http://www.alistapart.com/articles/progressiveenhancementwithcss/&quot; lang=&quot;en&quot;&gt;Progressive Enhancement with CSS&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a hreflang=&quot;en&quot; href=&quot;http://www.opera.com/docs/specs/opera95/css/&quot; lang=&quot;en&quot;&gt;CSS support in Opera 9.5&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;A propos de l'auteur original&lt;/h4&gt;
&lt;p&gt;&lt;a hreflang=&quot;en&quot; href=&quot;http://yaili.com/&quot; lang=&quot;pg&quot;&gt;Inayaili de León&lt;/a&gt; est une Web Designer portugaise. Elle a une vraie passion pour le webdesign et le codage de site Web ; elle adore les sites web propres et esthétiques. Elle vit à Londres (et &lt;a hreflang=&quot;en&quot; href=&quot;http://londonchronicles.com/&quot;&gt;blogue à ce propos&lt;/a&gt;) et adore les pizza (elle fait aussi des trucs avec ses chats, mais je n'ai pas compris ce que c'est). Vous pouvez lire d'autre de ses articles sur &lt;a hreflang=&quot;en&quot; href=&quot;http://webdesignernotebook.com/&quot; lang=&quot;en&quot;&gt;Web Designer Notebook&lt;/a&gt; et suivre &lt;a hreflang=&quot;en&quot; href=&quot;http://twitter.com/yaili&quot;&gt;ses aventures quotidiennes sur Twitter&lt;/a&gt;.&lt;/p&gt;</description>
    
    
    
      </item>
    
  <item>
    <title>Le webdesign des coins arrondis</title>
    <link>http://jeremie.patonnier.net/post/2009/04/20/Le-webdesign-des-coins-arrondis</link>
    <guid isPermaLink="false">urn:md5:1fac856e3a64e7104d531ed4cc5f2c18</guid>
    <pubDate>Mon, 27 Apr 2009 18:32:00 +0200</pubDate>
    <dc:creator>Jeremie</dc:creator>
        <category>Web</category>
        <category>css</category><category>webdesign</category>    
    <description>&lt;p&gt;Réaliser des boites avec des coins arrondis, c'est une tarte à la crème du webdesign. Seulement, ce n'est pas aussi simple qu'on le croit. Je me suis donc amusé à faire un petit tour des différentes solutions possibles pour réussir cela.&lt;/p&gt;    &lt;p&gt;Cet article ne se veut pas exhaustif. En effet, les techniques à mettre en œuvre et leur déclinaison dépendront grandement des contraintes imposées par le contexte d'intégration et la nature du design sur lequel vous travaillez. Mon parti-pris dans la suite de cet article est le suivant : produire une boite avec des coins arrondis extensible en hauteur et en largeur avec les quatre coins transparents. Il s'agit d'une des contraintes les plus fortes quand on réalise des coins arrondis, mais il est toujours possible de faire plus contraignant &lt;img src=&quot;/themes/default/smilies/wink.png&quot; alt=&quot;;)&quot; class=&quot;smiley&quot; /&gt;&lt;/p&gt;
&lt;h2&gt;Faire des coins arrondis sans utiliser ni image ni Javascript&lt;/h2&gt;
&lt;p&gt;Je commence par cette méthode qui est la plus restrictive : n'utiliser aucune image ni aucun script pour réaliser des bords arrondis.&lt;/p&gt;
&lt;p&gt;Pour cela, vous ne pouvez utiliser que CSS. Dans ce cas, la solution consiste à utiliser la propriété border-radius. Cette propriété fait partie du &lt;a hreflang=&quot;en&quot; href=&quot;http://www.w3.org/TR/css3-background/&quot;&gt;module &quot;Background and Border&quot; de la spécification CSS3&lt;/a&gt; qui n'est à ce jour qu'à l'état de document de travail.&lt;/p&gt;
&lt;p&gt;De fait à l'heure où j'écris ces lignes aucun navigateur ne l'implémente nativement. Seul Firefox et Safari ont un support expérimental de cette propriété via &lt;code&gt;-moz-border-radius&lt;/code&gt; (FF2+) et &lt;code&gt;-webkit-border-radius&lt;/code&gt; (S3+)&lt;/p&gt;
&lt;p&gt;Ainsi, si cette solution à le mérite de la simplicité, le défaut de support de cette propriété rend son utilisation caduque dans un cadre industriel.&lt;/p&gt;
&lt;p&gt;&amp;gt; &lt;a hreflang=&quot;fr&quot; href=&quot;http://jeremie.patonnier.net/experiences/bords-arrondis/index.html#technique1&quot;&gt;Exemple d'utilisation de la propriété CSS border-radius&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;Faire des coins arrondis avec des images, mais toujours sans Javascript&lt;/h2&gt;
&lt;p&gt;Les solutions pour réaliser des coins arrondis avec des images sont légions, aussi, je me contenterai de vous en présenter deux.&lt;/p&gt;
&lt;h3&gt;La propriété CSS &lt;code&gt;border-image&lt;/code&gt;&lt;/h3&gt;
&lt;p&gt;Il s'agit la aussi d'une nouveauté de CSS3, elle aussi issue du module &quot;Background and Border&quot;. Son support est encore plus expérimental que border-radius ! A ma connaissance, seul Firefox 3.5 et Safari 3 supportent cette propriété via &lt;code&gt;-moz-border-image&lt;/code&gt; et &lt;code&gt;-webkit-border-image&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;Cette propriété semble assez complexe à gérer la première fois que l'on met le nez dedans, mais elle offre des perspectives immenses dans la gestion des bordures au design complexe (par exemple pour des designs de type &quot;papier déchiré&quot;).&lt;/p&gt;
&lt;p&gt;Je ne vais pas partir dans des explications détaillées mais tout commence par une image type (les habitués des &quot;CSS Sprite&quot; vont apprécier) qui comprend les 4 coins, les 4 bordures et une partie central, soit 9 parties dans l'image. Par exemple, cette image de 21px x 21px (9 sections de 7px x 7px) : &lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;http://jeremie.patonnier.net/experiences/bords-arrondis/border.png&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
&lt;p&gt;Ensuite au niveau du code, cela va donner ce qui suit. Notez l'utilisation de la propriété &lt;code&gt;border&lt;/code&gt; qui permet de fournir, outre la taille de la bordure,&amp;nbsp; une alternative aux navigateurs qui ne supportent pas la propriété border-image ou bien dans le cas ou l'image serait indisponible (à cause d'un lien brisé par exemple)&lt;/p&gt;
&lt;pre class=&quot;sh_css&quot;&gt;-moz-border-image: url(border.png) 7 repeat;&lt;br /&gt;-webkit-border-image: url(border.png) 7 repeat;&lt;br /&gt;border-image: url(border.png) 7 repeat;&lt;br /&gt;&lt;br /&gt;border : 7px solid #1E4262;&lt;/pre&gt;
&lt;p&gt;&amp;gt; &lt;a hreflang=&quot;fr&quot; href=&quot;http://jeremie.patonnier.net/experiences/bords-arrondis/index.html#technique2&quot;&gt;Exemple d'utilisation de la propriété CSS border-image&lt;/a&gt;&lt;/p&gt;
&lt;h3&gt;La propriété CSS &lt;code&gt;background&lt;/code&gt; et un balisage HTML &quot;adapté&quot;&lt;/h3&gt;
&lt;p&gt;Il s'agit sans doute de la méthode la plus commune et elle se décline en de nombreuses variations selon les contraintes que l'on se fixe. Cela va de &quot;mon cadre a une taille fixe&quot; à &quot;mon cadre est extensible en hauteur et en largeur avec des coins transparent&quot;. Le nombre de coins à prendre en considération a lui aussi une influence.&lt;/p&gt;
&lt;p&gt;Pour illustrer le cas de figure le plus extrême, j'ai essayé de limiter au maximum le sur-balisage HTML mais pour les adeptes du &lt;a hreflang=&quot;fr&quot; href=&quot;http://microformats.org/wiki/plain-old-semantic-html-fr&quot;&gt;&lt;acronym title=&quot;Plain Old Semantic HTML&quot; lang=&quot;fr&quot;&gt;POSH&lt;/acronym&gt;&lt;/a&gt; ça va piquer les yeux. C'est une solution, il en existe beaucoup d'autres qui dépendent du contexte d'utilisation. Afin d'alléger le tout, je ne saurais trop vous conseiller d'éviter de gérer la transparence dans la mesure du possible. Sans cette contrainte, vous pouvez au moins diviser par deux le nombre de balises HTML nécessaires.&lt;/p&gt;
&lt;p&gt;&amp;gt; &lt;a hreflang=&quot;fr&quot; href=&quot;http://jeremie.patonnier.net/experiences/bords-arrondis/index.html#technique3&quot;&gt;Exemple d'utilisation de la propriété CSS background avec un balisage HTML spécifique&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Le principal défaut de cette méthode c'est de coupler trop étroitement la structure HTML avec la mise en forme CSS. Dans un contexte industriel, c'est un sujet important à anticiper car cela à des répercussions forte sur les coûts de maintenance.&lt;/p&gt;
&lt;h2&gt;Finalement, on peut aussi utiliser Javascript&lt;/h2&gt;
&lt;h3&gt;Utiliser un script &quot;qui fait tout&quot;&lt;/h3&gt;
&lt;p&gt;Si vous utilisez un framework Javascript, il y a fort à parier qu'il existe une extension de ce framework qui permettra de faire des coins arrondis d'une manière ou d'une autre. L'intérêt de ces extensions, c'est que vous n'avez qu'à leur dire ce que vous voulez pour qu'elles le fassent à moindre frais. Par contre, si le plug-in que vous utiliser est mal fichu, vous vous exposez à des effets de bord parfois surprenant.&lt;/p&gt;
&lt;p&gt;&amp;gt; &lt;a hreflang=&quot;fr&quot; href=&quot;http://jeremie.patonnier.net/experiences/bords-arrondis/index.html#technique4&quot;&gt;Exemple d'utilisation d'un plug-in JQuery pour réaliser des coins arrondis&lt;/a&gt;&lt;/p&gt;
&lt;h3&gt;Enrichir l'arbre DOM de votre document&lt;/h3&gt;
&lt;p&gt;Si vous préférer rester maitre de votre document, vous pouvez choisir d'enrichir vous même l'arbre DOM de votre page HTML pour lui permettre d'afficher des coins arrondis sur les éléments de votre choix. Ainsi, vous rester avec un document HTML compréhensible et facilement maintenable et vous déléguez à Javascript la responsabilité d'enrichir l'arbre DOM et les style CSS pour obtenir le rendu de votre choix.&lt;/p&gt;
&lt;p&gt;&amp;gt; &lt;a hreflang=&quot;fr&quot; href=&quot;http://jeremie.patonnier.net/experiences/bords-arrondis/index.html#technique5&quot;&gt;Exemple d'utilisation de Javascript pour enrichir l'arbre DOM d'un document&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;C'est deux solutions peuvent être intéressantes dans certains contextes industriels en permettant de préserver la séparation des rôles entre HTML et CSS. Néanmoins, elles induisent une complexité parfois difficile à maitriser du point de vue de Javascript et cela peut avoir un coût non négligeable en terme de maintenance.&lt;/p&gt;
&lt;h2&gt;En conclusion&lt;/h2&gt;
&lt;p&gt;Comme on a pu le voir, il n'y a pas vraiment de solution miracle. Tant que la spécification CSS3 sur les bordures ne sera pas plus largement implémentée, la création de coins arrondis restera un point complexe à gérer. La maintenabilité des solutions misent en œuvres dépendra grandement de la (sur)compétence des intégrateurs web et de la qualité de la documentation qu'ils produiront. Je ne saurais trop encourager à l'économie de moyen sur ce point : pensez simple, pensez efficace et surtout, pensez à ceux qui devront passer derrière vous pour maintenir votre création.&lt;/p&gt;</description>
    
    
    
      </item>
    
</channel>
</rss>