{"id":996,"date":"2011-02-19T14:30:50","date_gmt":"2011-02-19T13:30:50","guid":{"rendered":"https:\/\/www.creativejuiz.fr\/blog\/?p=996"},"modified":"2015-08-05T20:53:26","modified_gmt":"2015-08-05T18:53:26","slug":"ombre-avancees-avec-css3-et-box-shadow","status":"publish","type":"post","link":"https:\/\/www.creativejuiz.fr\/blog\/tutoriels\/ombre-avancees-avec-css3-et-box-shadow","title":{"rendered":"Ombres avanc\u00e9es avec CSS3 et box-shadow"},"content":{"rendered":"<p><abbr>CSS<\/abbr>3 c&rsquo;est pour l&rsquo;aspect vendeur du nom, car au final on va aussi et surtout b\u00e9n\u00e9ficier du service de pseudo \u00e9l\u00e9ments (<code>:after<\/code> et <code>:before<\/code>) qui sont pr\u00e9vus depuis CSS2.1.<br \/>\nLes visuels que vous voyez sur la page de <a title=\"CSS3 Box-Shadow sur :before et :after\" href=\"http:\/\/www.creativejuiz.fr\/trytotry\/css3-box-shadow-after-before\" hreflang=\"en\">d\u00e9monstration<\/a> ne sont<!--more--> compos\u00e9s qu&rsquo;avec des propri\u00e9t\u00e9s <abbr>CSS<\/abbr> sur une seule et unique <code>&lt;div&gt;<\/code> (pour chaque bloc).<\/p>\n<p>Chez moi le meilleur rendu est sous Firefox, notamment pour la derni\u00e8re ombre qui est un peu os\u00e9e (au passage il semblerait que la propri\u00e9t\u00e9 <code>opacity<\/code> ne fonctionne pas sur les pseudo-\u00e9l\u00e9ments).<\/p>\n<p>Dans <a title=\"CSS3 Box-Shadow sur :before et :after\" href=\"http:\/\/www.creativejuiz.fr\/trytotry\/css3-box-shadow-after-before\" hreflang=\"en\">cette d\u00e9monstration<\/a> nous allons utiliser des propri\u00e9t\u00e9s avanc\u00e9es de CSS2.1 (<code>:before<\/code> et <code>:after<\/code>) qui sont des pseudo-\u00e9l\u00e9ments.<br \/>\nDes pseudo-\u00e9l\u00e9ments permettent de construire un \u00e9l\u00e9ment dans la structure de votre document (<abbr title=\"Document Object Model\">DOM<\/abbr>) sans vraiment en construire un&#8230; ok, \u00e7a commence bien pour l&rsquo;explication.<\/p>\n<h2>Pseudo-\u00e9l\u00e9ments <code>:after<\/code> et <code>:before<\/code><\/h2>\n<p>Imaginez que dans un site vous souhaitiez ajouter derri\u00e8re un lien la langue du site en r\u00e9f\u00e9rence (qui, pour rappel, se pr\u00e9cise gr\u00e2ce \u00e0 l&rsquo;attribut <code>hreflang<\/code> sur un \u00e9l\u00e9ment <code>&lt;a&gt;<\/code>) vous pouvez le faire en passant par du CSS :<\/p>\n<pre class=\"code\"><code class=\"language-css\">a[hreflang]:after {\r\n\tcontent : \" (\"attr(hreflang)\")\";\r\n}<\/code><\/pre>\n<p>Ainsi tous les liens porteurs de l&rsquo;attribut <code>hreflang<\/code> se verront agr\u00e9ment\u00e9s d&rsquo;un \u00ab\u00a0(en)\u00a0\u00bb, dans le cas d&rsquo;un lien anglais par exemple :<br \/>\n<a id=\"testouille\" href=\"#testouille\">Mon lien (en)<\/a><\/p>\n<h2>La base de travail<\/h2>\n<p>Sur le m\u00eame principe nous allons pouvoir construire deux pseudo-\u00e9l\u00e9ments qui vont nous servir \u00e0 composer les diff\u00e9rentes ombres que vous pouvez visualiser sur la <a title=\"CSS3 Box-Shadow sur :before et :after\" href=\"http:\/\/www.creativejuiz.fr\/trytotry\/css3-box-shadow-after-before\" hreflang=\"en\">d\u00e9monstration<\/a>.<\/p>\n<p>Pour r\u00e9sumer simplement notre d\u00e9marche nous avons des divisions :<\/p>\n<pre class=\"code\"><code class=\"language-markup\">&lt;div class=\"bloc\"&gt;Without drop shadow&lt;\/div&gt;<\/code><\/pre>\n<p>qui portent toutes la classe <code>bloc<\/code>, cette classe nous sert de base pour les styles des blocs de d\u00e9monstration (\u00e7a ressemble vaguement \u00e0 une feuille&#8230; du moins j&rsquo;esp\u00e8re).<br \/>\nLa classe <code>without<\/code>, dans le premier exemple de la page de d\u00e9monstration, me sert juste \u00e0 d\u00e9finir le bloc qui n&rsquo;a pas d&rsquo;ombrage, mais passons.<\/p>\n<p class=\"center\"><img decoding=\"async\" class=\"aligncenter size-full wp-image-1067\" style=\"border: 0;\" title=\"\" src=\"https:\/\/www.creativejuiz.fr\/blog\/wp-content\/uploads\/2011\/02\/css3-simple-bloc.jpg\" alt=\"\" width=\"291\" height=\"178\" \/><\/p>\n<p>Voici le CSS correspondant, les principales propri\u00e9t\u00e9s \u00e0 retenir sont celles de positionnement et de dimensions \u00e0 fixer, mais je vous donne tout de m\u00eame la totalit\u00e9 :<\/p>\n<pre class=\"code\"><code class=\"language-css\">.bloc {\r\n\tposition: relative;\r\n\tdisplay: inline-block;\r\n\tvertical-align: top;\r\n\tmargin: 35px 26px;\r\n\tpadding: 25px;\r\n\twidth: 220px;\r\n\theight: 110px;\r\n\tbackground: #f0e8d8;\r\n\tfont-size: 1.6em;\r\n\tline-height: 5em;\r\n\tfont-family: Georgia, Times, Serif;\r\n\ttext-align: center;\r\n\tbackground-image: linear-gradient(to bottom, #dacdb1 11%, #f0e8d8 56%);\r\n\tbox-shadow: 0 0 65px #cdbe9f inset, 0 0 20px #beae8c inset;\r\n}<\/code><\/pre>\n<p>Ensuite nous allons construire nos pseudo-\u00e9l\u00e9ments de mani\u00e8re globale :<\/p>\n<pre class=\"code\"><code class=\"language-css\">.bloc:after, .bloc:before {\r\n\tcontent: \" \";\r\n\tposition: absolute;\r\n\twidth: 50%;\r\n\theight: 100px;\r\n\tz-index: -10;\r\n}\r\n\r\n.bloc:before { background: green;}\r\n.bloc:after { background: red; }\r\n<\/code><\/pre>\n<p>Les pseudo-blocs ont une position absolue et un <code>z-index<\/code> n\u00e9gatif, le but \u00e9tant de placer ces \u00e9l\u00e9ments sous leur parent (la <code>&lt;div&gt;<\/code> dont ils d\u00e9pendent).<\/p>\n<p>Les couleurs sont l\u00e0 pour faire du rep\u00e9rage dans le positionnement des pseudo-\u00e9l\u00e9ments.<br \/>\n\u00c0 ce propos j&rsquo;avais pr\u00e9vu de vous inviter \u00e0 utiliser <a title=\"Fabuleux plugin de Joe Hewitt (nouvelle fen\u00eatre)\" href=\"https:\/\/addons.mozilla.org\/fr\/firefox\/addon\/firebug\/\" target=\"_blank\">Firebug<\/a> pour jouer avec le fond des <code>.bloc<\/code>, mais gr\u00e2ce \u00e0 une suggestion de Felipe, je vous ai d\u00e9velopp\u00e9 un petit joujou pour visualiser les pseudo-\u00e9l\u00e9ments sans vous demander trop d&rsquo;effort :p<\/p>\n<p>Bref, revenons-en \u00e0 nos moutons.<\/p>\n<p>Les pseudo-blocs sont pr\u00eats, il ne nous reste plus qu&rsquo;\u00e0 leur offrir une ombre port\u00e9e ainsi qu&rsquo;un positionnement pr\u00e9cis.<br \/>\nDans certains cas nous aurons besoin d&rsquo;autres petites choses, mais nous verrons cela au fur et \u00e0 mesure.<\/p>\n<p>Tous les codes CSS suivants vont s&rsquo;appliquer \u00e0 un \u00e9l\u00e9ment porteur de la classe <code>bloc<\/code> combin\u00e9 \u00e0 la classe dont fait r\u00e9f\u00e9rence le code CSS.<br \/>\nExemple, pour le prochain effet, nous aurons besoin d&rsquo;un \u00e9l\u00e9ment de cette forme :<\/p>\n<pre class=\"code\"><code class=\"language-markup\">&lt;div class=\"bloc simple\"&gt;Soft Drop Shadow&lt;\/div&gt;<\/code><\/pre>\n<p class=\"message note\">\u00c0 noter, certaines propri\u00e9t\u00e9s CSS3 doivent \u00eatre pr\u00e9fix\u00e9es (-webkit-, -moz-, etc.), cela d\u00e9pend du support navigateurs souhait\u00e9 et de votre projet.<\/p>\n<h2>Ombre simple<\/h2>\n<p>Il n&rsquo;est jamais de trop de rappeler certaines bases, notamment sur l&rsquo;utilisation de la propri\u00e9t\u00e9 <code>box-shadow<\/code>.<\/p>\n<p class=\"center\"><img decoding=\"async\" class=\"aligncenter size-full wp-image-1070\" style=\"border: 0;\" title=\"\" src=\"https:\/\/www.creativejuiz.fr\/blog\/wp-content\/uploads\/2011\/02\/css3-box-shadow.jpg\" alt=\"\" width=\"299\" height=\"184\" \/><\/p>\n<pre class=\"code\"><code class=\"language-css\">.simple {\r\n\tbox-shadow: 0 0 65px #cdbe9f inset, 0 0 20px #beae8c inset, 0 0 5px #816f47;\r\n}\r\n.simple:after, .simple:before { display: none; }<\/code><\/pre>\n<p>Ici nous n&rsquo;avons pas besoin des pseudo-\u00e9l\u00e9ments, nous les cachons.<br \/>\nIci il s&rsquo;agit du m\u00eame code que pour les ombres de notre base, sauf que nous ajoutons une ombre port\u00e9e.<\/p>\n<p><code>box-shadow<\/code> permet d&rsquo;attribuer plusieurs ombres \u00e0 un \u00e9l\u00e9ment. La syntaxe de base :<\/p>\n<pre class=\"code\"><code class=\"language-css\">box-shadow: 1px 2px 9px 0 #000;<\/code><\/pre>\n<p>permet la cr\u00e9ation d&rsquo;une ombre port\u00e9e dont voici les param\u00e8tres, dans l&rsquo;ordre d&rsquo;apparition :<br \/>\n<code>1px<\/code> de d\u00e9calage horizontal (vers la droite), <code>2px<\/code> de d\u00e9calage vertical (vers le bas), <code>9px<\/code>\u00a0 de diffusion et <code>0<\/code> d&rsquo;\u00e9tendue (compl\u00e8tement optionnel), <code>#000<\/code> de couleur.<br \/>\nUn param\u00e8tre optionnel, <code>inset<\/code>, plac\u00e9 apr\u00e8s la couleur, permet d&rsquo;indiquer que l&rsquo;ombre port\u00e9e est en fait une ombre interne \u00e0 l&rsquo;\u00e9l\u00e9ment. Sans ce param\u00e8tre, l&rsquo;ombre est consid\u00e9r\u00e9e comme port\u00e9e.<\/p>\n<p>La multiplication de cet ensemble d&rsquo;informations s\u00e9par\u00e9 par une virgule permet la cr\u00e9ation d&rsquo;ombres multiples.<\/p>\n<h2>Les ombres lat\u00e9rales<\/h2>\n<p>C&rsquo;est ici que l&rsquo;on va d\u00e9couvrir l&rsquo;int\u00e9r\u00eat des pseudo-\u00e9l\u00e9ments.<\/p>\n<p class=\"center\"><img decoding=\"async\" class=\"aligncenter size-full wp-image-1072\" style=\"border: 0;\" title=\"\" src=\"https:\/\/www.creativejuiz.fr\/blog\/wp-content\/uploads\/2011\/02\/css3-lateral-shadows.jpg\" alt=\"\" width=\"299\" height=\"184\" \/><\/p>\n<p>Ici nous allons positionner un des pseudo-blocs et lui donner une largeur et une hauteur, ainsi qu&rsquo;une ombre port\u00e9e.<\/p>\n<pre class=\"code\"><code class=\"language-css\">.laterals:before {\r\n\ttop: 15px;\r\n\tleft: 0;\r\n\twidth: 100%;\r\n\theight: 130px;\r\n\t\r\n\tborder-radius: 12px \/ 65px;\r\n\tbox-shadow: 0 0 10px #555;\r\n}\r\n.laterals:after { display: none; }\r\n<\/code><\/pre>\n<p>Le <code>border-radius<\/code> nous permet d&rsquo;avoir un effet l\u00e9g\u00e8rement gondol\u00e9 sur l&rsquo;ombre, ce qui ajoute un poil de r\u00e9alisme.<br \/>\nN&rsquo;oubliez pas de profiter de la fonction X-Ray pour <a title=\"Aller \u00e0 la page de d\u00e9monstration\" href=\"http:\/\/www.creativejuiz.fr\/trytotry\/css3-box-shadow-after-before\/index.html\" hreflang=\"en\">visualiser le pseudo-\u00e9l\u00e9ment<\/a> et son comportement.<\/p>\n<h2>Ombre lat\u00e9rale courbe<\/h2>\n<p>Simple mais pas trop, simple dans le sens o\u00f9 il n&rsquo;y en a que d&rsquo;un c\u00f4t\u00e9.<br \/>\nEncore une fois nous n&rsquo;allons utiliser qu&rsquo;un des deux pseudo-\u00e9l\u00e9ments.<\/p>\n<p class=\"center\"><img decoding=\"async\" class=\"aligncenter size-full wp-image-1074\" style=\"border: 0;\" title=\"\" src=\"https:\/\/www.creativejuiz.fr\/blog\/wp-content\/uploads\/2011\/02\/css3-lateral-single-shadow.jpg\" alt=\"\" width=\"299\" height=\"184\" \/><\/p>\n<p>Ici nous allons utiliser une rotation pour donner cet effet.<\/p>\n<pre class=\"code\"><code class=\"language-css\">.lateral:before {\r\n\ttop: 10px;\r\n\tleft: 8px;\r\n\twidth: 50%;\r\n\theight: 130px;\r\n\t\r\n\tbox-shadow: -7px 0 10px #555;\r\n\ttransform: rotate(-5deg);\r\n}\r\n.lateral:after { display: none; }\r\n<\/code><\/pre>\n<p>Vous pouvez voir le petit d\u00e9calage n\u00e9gatif de l&rsquo;ombre, le but \u00e9tant de le diriger vers la gauche.<\/p>\n<h2>Ombres horizontales<\/h2>\n<p>C&rsquo;est un peu le m\u00eame principe que pr\u00e9c\u00e9demment, sauf que, partant du principe qu&rsquo;on peut tr\u00e8s bien ne pas conna\u00eetre la hauteur d&rsquo;un bloc, j&rsquo;utilise cette fois les deux pseudo-\u00e9l\u00e9ments pour produire cet effets.<\/p>\n<p class=\"center\"><img decoding=\"async\" class=\"aligncenter size-full wp-image-1076\" style=\"border: 0;\" title=\"\" src=\"https:\/\/www.creativejuiz.fr\/blog\/wp-content\/uploads\/2011\/02\/css3-horizontal-shadows.jpg\" alt=\"\" width=\"299\" height=\"184\" \/><\/p>\n<p>Nos deux pseudo-\u00e9l\u00e9ments sont donc positionn\u00e9s l&rsquo;un par rapport au haut du bloc parent (la <code>&lt;div&gt;<\/code> dont il d\u00e9pend), l&rsquo;autre par rapport au bas.<\/p>\n<pre class=\"code\"><code class=\"language-css\">.horizontal:before {\r\n\ttop: 0px;\r\n\tleft: 5%;\r\n\twidth: 90%;\r\n\theight: 50px;\r\n\t\r\n\tborder-radius: 125px \/ 12px;\r\n\tbox-shadow: 0 0 8px #555;\r\n}\r\n.horizontal:after { \r\n\tbottom: 0px;\r\n\tleft: 5%;\r\n\twidth: 90%;\r\n\theight: 50px;\r\n\t\r\n\tborder-radius: 125px \/ 12px;\r\n\tbox-shadow: 0 0 8px #565656;\r\n}<\/code><\/pre>\n<p>J&rsquo;ai un peu dupliqu\u00e9 les styles pour que ce soit bien clair, mais vous pouvez bien entendu r\u00e9unir les styles communs dans une seule d\u00e9claration.<\/p>\n<h2>Ombre horizontale simple<\/h2>\n<p>C&rsquo;est l&rsquo;\u00e9tape la plus complexe de cet article je pense.<\/p>\n<p class=\"center\"><img decoding=\"async\" class=\"aligncenter size-full wp-image-1077\" style=\"border: 0;\" title=\"\" src=\"https:\/\/www.creativejuiz.fr\/blog\/wp-content\/uploads\/2011\/02\/css3-horizontal-shadow.jpg\" alt=\"\" width=\"299\" height=\"184\" \/><\/p>\n<p>En ajoutant la classe <code>single<\/code> \u00e0 notre \u00e9l\u00e9ment :<\/p>\n<pre class=\"code\"><code class=\"language-markup\">&lt;div class=\"bloc horizontal single\"&gt;Single Horizontal&lt;\/div&gt;<\/code><\/pre>\n<p>et en appliquant, en plus des pr\u00e9c\u00e9dents, ce code CSS :<\/p>\n<pre class=\"code\"><code class=\"language-css\">.single:before { display: none; }<\/code><\/pre>\n<p>Le tour est jou\u00e9 \ud83d\ude09<br \/>\nAutre solution, plut\u00f4t que de cr\u00e9er les deux ombres pour en cacher une, il vous est simplement possible de n&rsquo;en cr\u00e9er qu&rsquo;une\u2026 \u00c9vident, mais je pr\u00e9f\u00e8re le souligner.<\/p>\n<h2>Ombres courb\u00e9s<\/h2>\n<p>C&rsquo;est certainement l&rsquo;effet le plus en vogue chez les webdesigners qui souhaitent apporter une touche de profondeur \u00e0 leur design.<\/p>\n<p class=\"center\"><img decoding=\"async\" class=\"aligncenter size-full wp-image-1079\" style=\"border: 0;\" title=\"\" src=\"https:\/\/www.creativejuiz.fr\/blog\/wp-content\/uploads\/2011\/02\/css3-curved-shadows.jpg\" alt=\"\" width=\"299\" height=\"184\" \/><\/p>\n<p>Pour r\u00e9aliser cet effet nous allons devoir utiliser nos deux pseudo-\u00e9l\u00e9ments.<\/p>\n<pre class=\"code\"><code class=\"language-css\">.curve:before {\r\n\ttop: 52px;\r\n\tleft: 5px;\r\n\r\n\ttransform: rotate(-5deg);\r\n\tbox-shadow: 7px 6px 15px #333;\r\n}\r\n.curve:after {\r\n\ttop: 52px;\r\n\tright: 5px;\r\n\t\r\n\ttransform: rotate(5deg);\r\n\tbox-shadow: -7px 6px 15px #333;\r\n}<\/code><\/pre>\n<p>Trop facile !<\/p>\n<p class=\"center\"><img decoding=\"async\" class=\"aligncenter size-full wp-image-1080\" style=\"border: 0;\" title=\"\" src=\"https:\/\/www.creativejuiz.fr\/blog\/wp-content\/uploads\/2011\/02\/css3-curved-shadow.jpg\" alt=\"\" width=\"299\" height=\"184\" \/><\/p>\n<p>Toujours sur le m\u00eame principe, il vous suffira d&rsquo;ajouter la classe <code>single<\/code> styl\u00e9e plus haut pour faire disparaitre l&rsquo;ombre d&rsquo;un des deux c\u00f4t\u00e9s. De quoi simplifier bien largement vos int\u00e9grations !<\/p>\n<h2>Ombre exp\u00e9rimentale<\/h2>\n<p>Alors celle-ci&#8230; ne regardez pas sous Chrome !<br \/>\nVous ne verrez rien non plus avec le X-Ray pour la simple et bonne raison que j&rsquo;utilise l&rsquo;int\u00e9gralit\u00e9 des pseudo-\u00e9l\u00e9ments (et pas uniquement leur <code>box-shadow<\/code>), pour produire cet effet, encore exp\u00e9rimental.<\/p>\n<p class=\"center\"><img decoding=\"async\" class=\"aligncenter size-full wp-image-1082\" style=\"border: 0;\" title=\"\" src=\"https:\/\/www.creativejuiz.fr\/blog\/wp-content\/uploads\/2011\/02\/css3-experimental-shadows.jpg\" alt=\"\" width=\"306\" height=\"205\" srcset=\"https:\/\/www.creativejuiz.fr\/blog\/wp-content\/uploads\/2011\/02\/css3-experimental-shadows.jpg 306w, https:\/\/www.creativejuiz.fr\/blog\/wp-content\/uploads\/2011\/02\/css3-experimental-shadows-300x200.jpg 300w\" sizes=\"(max-width: 306px) 100vw, 306px\" \/><\/p>\n<p>Le code CSS correspondant est plut\u00f4t lourd en terme d&rsquo;ombre port\u00e9e&#8230; et plut\u00f4t difficile \u00e0 param\u00e9trer :<\/p>\n<pre class=\"code\"><code class=\"language-css\">.drop:before {\r\n\tleft: -5px;\r\n\ttop: 167px;\r\n\twidth: 280px;\r\n\theight: 4px;\r\n\tbackground: #aaa;\r\n\r\n\tborder-radius: 140px \/ 2px;\r\n\tbox-shadow: 0 0 5px #aaa, 0 0 10px #888, 0 0 15px #666;\r\n}\r\n\r\n.drop:after {\r\n\tleft: 8px;\r\n\ttop: 168px;\r\n\twidth: 255px;\r\n\theight: 2px;\r\n\tbackground: #666;\r\n\t\r\n\tborder-radius: 125px \/ 1px;\r\n\tbox-shadow: 0 0 5px #444, 0 0 8px #333, 0 0 10px #666;\r\n}<\/code><\/pre>\n<p>Le pseudo-\u00e9l\u00e9ment <code>:before<\/code> me sert d&rsquo;ombre large, les <code>drop-shadow<\/code> y sont donc plut\u00f4t complexes.<br \/>\nLe pseudo-\u00e9l\u00e9ment <code>:after<\/code> me sert d&rsquo;ombre fine, au centre de l&rsquo;ombre large, les <code>drop-shadow<\/code> sont donc l\u00e9g\u00e8rement plus simples.<br \/>\nDans les deux cas nous les transformons dans un premier temps <a title=\"Tutoriel sur les ellipses en CSS3, par Geoffrey Crofte, sur Alsacreations.com (nouvelle fen\u00eatre)\" href=\"http:\/\/www.alsacreations.com\/astuce\/lire\/979-ovale-forme-elliptique-css3-sans-image.html\" target=\"_blank\">en ellipse<\/a>.<\/p>\n<h2>Bogues<\/h2>\n<p>S&rsquo;il vous arrivait de ne pas voir apparaitre les ombres, vous \u00eates peut-\u00eatre dans le cas rencontr\u00e9 par les lecteurs et commentateurs du blog :<br \/>\nLes blocs ombr\u00e9s sont des enfants d&rsquo;au moins un autre bloc (un \u00ab\u00a0container\u00a0\u00bb quoi). Si ce bloc poss\u00e8de une couleur de fond, les ombres vont disparaitre derri\u00e8re le bloc.<br \/>\nC&rsquo;est une histoire de <code>z-index<\/code> \u00e0 r\u00e9ordonner.<br \/>\nDans notre exemple, il suffit de positionner votre \u00e9l\u00e9ment (en <code>absolute<\/code> ou <code>relative<\/code>) et de lui attribuer un <code>z-index<\/code> de <code>0<\/code>, exemple :<\/p>\n<pre class=\"code\"><code class=\"language-css\">.container {\r\n   position:relative;\r\n   z-index: 0;\r\n}<\/code><\/pre>\n<p>Merci \u00e0 <a href=\"https:\/\/www.creativejuiz.fr\/blog\/tutoriels\/ombre-avancees-avec-css3-et-box-shadow#comment-4793\">Ivan<\/a> d&rsquo;avoir fourni un exemple de code concret.<\/p>\n<h2>Le mot de la fin<\/h2>\n<p>J&rsquo;esp\u00e8re que vous n&rsquo;aurez pas eu trop de difficult\u00e9 \u00e0 suivre ce tutoriel dont les explications restent relativement sommaires.<br \/>\nLa fonction X-Ray devrait vous servir \u00e0 trouver certaines r\u00e9ponses \u00e0 vos questions, mais pour les autres n&rsquo;h\u00e9sitez pas \u00e0 me consulter via le syst\u00e8me de commentaire de ce blog.<\/p>\n<p>J&rsquo;ai bien conscience que le sujet a d\u00e9j\u00e0 \u00e9t\u00e9 abord\u00e9 ici : <a title=\"Article sur Drop Shadow en CSS3 (nouvelle fen\u00eatre)\" href=\"http:\/\/nimbupani.com\/drop-shadows-with-css3.html\" target=\"_blank\">Nimbupani<\/a> et l\u00e0 : <a title=\"D\u00e9monstration de Nicolas Gallagher (nouvelle fen\u00eatre)\" href=\"http:\/\/nicolasgallagher.com\/css-drop-shadows-without-images\/demo\/\" target=\"_blank\" hreflang=\"en\">NicolasGallagher<\/a>. Mais cet article est en r\u00e9daction depuis d\u00e9but d\u00e9cembre, et il apporte ma vision des choses, je me suis donc d\u00e9cid\u00e9 \u00e0 le terminer \ud83d\ude42<\/p>\n<p>Merci pour votre lecture !<\/p>\n<div class=\"sources\">\n<h2>Liens utiles<\/h2>\n<ul>\n<li><a title=\"CSS3 Box-Shadow sur :before et :after\" href=\"http:\/\/www.creativejuiz.fr\/trytotry\/css3-box-shadow-after-before\" hreflang=\"en\">La page de d\u00e9monstration<\/a><\/li>\n<li><a title=\"Le labo de Creative Juiz\" href=\"http:\/\/www.creativejuiz.fr\/trytotry\/\" hreflang=\"en\">Les recherches CreativeJuiz (TryToTry)<\/a><\/li>\n<li><a title=\"Article sur Drop Shadow en CSS3 (nouvelle fen\u00eatre)\" href=\"http:\/\/nimbupani.com\/drop-shadows-with-css3.html\" target=\"_blank\">Une d\u00e9monstration sur Nimbupani<\/a><\/li>\n<li><a title=\"D\u00e9monstration de Nicolas Gallagher (nouvelle fen\u00eatre)\" href=\"http:\/\/nicolasgallagher.com\/css-drop-shadows-without-images\/demo\/\" target=\"_blank\" hreflang=\"en\">D&rsquo;autres exemples de Nicolas Gallagher<\/a><\/li>\n<\/ul>\n<\/div>\n","protected":false},"excerpt":{"rendered":"<p>CSS3 c&rsquo;est pour l&rsquo;aspect vendeur du nom, car au final on va aussi et surtout b\u00e9n\u00e9ficier du service de pseudo \u00e9l\u00e9ments (:after et :before) qui sont pr\u00e9vus depuis CSS2.1. Les visuels que vous voyez sur la page de d\u00e9monstration ne sont<\/p>\n","protected":false},"author":4,"featured_media":1065,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"_bluesky_dont_syndicate":"","_bluesky_syndication_accounts":"","_bluesky_syndication_text":"","footnotes":""},"categories":[17,9,11,12],"tags":[324,325,323,322],"coauthors":[597],"class_list":["post-996","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-css-css3","category-tutoriels","category-veille-graphique","category-veille-technologique","tag-after","tag-before","tag-box-shadow","tag-ombre"],"acf":[],"aioseo_notices":[],"_links":{"self":[{"href":"https:\/\/www.creativejuiz.fr\/blog\/wp-json\/wp\/v2\/posts\/996","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.creativejuiz.fr\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.creativejuiz.fr\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.creativejuiz.fr\/blog\/wp-json\/wp\/v2\/users\/4"}],"replies":[{"embeddable":true,"href":"https:\/\/www.creativejuiz.fr\/blog\/wp-json\/wp\/v2\/comments?post=996"}],"version-history":[{"count":0,"href":"https:\/\/www.creativejuiz.fr\/blog\/wp-json\/wp\/v2\/posts\/996\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.creativejuiz.fr\/blog\/wp-json\/wp\/v2\/media\/1065"}],"wp:attachment":[{"href":"https:\/\/www.creativejuiz.fr\/blog\/wp-json\/wp\/v2\/media?parent=996"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.creativejuiz.fr\/blog\/wp-json\/wp\/v2\/categories?post=996"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.creativejuiz.fr\/blog\/wp-json\/wp\/v2\/tags?post=996"},{"taxonomy":"author","embeddable":true,"href":"https:\/\/www.creativejuiz.fr\/blog\/wp-json\/wp\/v2\/coauthors?post=996"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}