<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Iptima &#187; feuilles de style</title>
	<atom:link href="http://www.iptima.com/tag/feuilles-de-style/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.iptima.com</link>
	<description>... Miscellanées multimedia ®</description>
	<lastBuildDate>Tue, 08 Jun 2010 10:42:20 +0000</lastBuildDate>
	
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>Concevoir une feuille de style pour les périphériques mobiles</title>
		<link>http://www.iptima.com/2010/02/22/concevoir-une-feuille-de-style-pour-les-peripheriques-mobiles/</link>
		<comments>http://www.iptima.com/2010/02/22/concevoir-une-feuille-de-style-pour-les-peripheriques-mobiles/#comments</comments>
		<pubDate>Mon, 22 Feb 2010 22:07:32 +0000</pubDate>
		<dc:creator>Vincent Roulet</dc:creator>
				<category><![CDATA[Conception]]></category>
		<category><![CDATA[WebDesign]]></category>
		<category><![CDATA[3G]]></category>
		<category><![CDATA[accessibilité]]></category>
		<category><![CDATA[Cascading Style Sheets]]></category>
		<category><![CDATA[contenu alternatif]]></category>
		<category><![CDATA[Css]]></category>
		<category><![CDATA[feuilles de style]]></category>
		<category><![CDATA[General Packet Radio Service]]></category>
		<category><![CDATA[Global System for Mobile Communications]]></category>
		<category><![CDATA[Gprs]]></category>
		<category><![CDATA[Gsm]]></category>
		<category><![CDATA[Html]]></category>
		<category><![CDATA[HyperText Markup Language]]></category>
		<category><![CDATA[Ihm]]></category>
		<category><![CDATA[images]]></category>
		<category><![CDATA[impression]]></category>
		<category><![CDATA[interface homme-machine]]></category>
		<category><![CDATA[iPhone]]></category>
		<category><![CDATA[Pda]]></category>
		<category><![CDATA[Personal Digital Assistant]]></category>
		<category><![CDATA[radio-téléphone]]></category>
		<category><![CDATA[sémantique]]></category>
		<category><![CDATA[smartphone]]></category>
		<category><![CDATA[téléphone mobile]]></category>
		<category><![CDATA[Xhtml]]></category>

		<guid isPermaLink="false">http://www.iptima.com/?p=382</guid>
		<description><![CDATA[Pour les périphériques de poche, c&#8217;est-à-dire les téléphones mobiles, Smartphones et autres Pda, la gestion des feuilles de style est complexe&#160;: les modèles sont très nombreux, et n&#8217;interprètent pas toujours correctement les directives Html.

D&#8217;abord, les résolutions des écrans sont multiples, les navigateurs parfois spécifiques, plus ou moins élaborés, voire conformes. Il faut donc trouver un [...]]]></description>
			<content:encoded><![CDATA[<p>Pour les <em>périphériques de poche</em>, c&#8217;est-à-dire les téléphones mobiles, <em>Smartphones</em> et autres <acronym title="Personal Digital Assistant">Pda</acronym>, la gestion des feuilles de style est complexe&#160;: les modèles sont très nombreux, et n&#8217;interprètent pas toujours correctement les directives <acronym title="HyperText Markup Language">Html</acronym>.</p>
<p><span id="more-382"></span></p>
<p>D&#8217;abord, les résolutions des écrans sont multiples, les navigateurs parfois spécifiques, plus ou moins élaborés, voire conformes. Il faut donc trouver un poids <em>moyen</em>, car il serait vain de concevoir une version dédiée pour chaque modèle&#160;! Le succès actuel de l&#8217;<a href="www.apple.com/fr/iphone/" onclick="window.open(this.href); return false;" title ="aller sur le site de l'iPhone (s'ouvre dans une nouvelle fenêtre)">iPhone</a> peut, toutefois, conduire à envisager un développement spécifique pour des raisons de stratégie commerciale.</p>
<p>Aussi, utilisons-nous deux outils en ligne pour émuler le fonctionnement des périphériques de poche&#160;:</p>
<ul>
<li><a href="http://www.opera.com/mini/demo/" onclick="window.open(this.href); return false;" title ="aller sur le site d'Opera Mini Demo (s'ouvre dans une nouvelle fenêtre)">Opera Mini Demo</a>,</li>
<li><a hreflang="en" href="http://mtld.mobi/" onclick="window.open(this.href); return false;" title ="aller sur le site de dotMobi (s'ouvre dans une nouvelle fenêtre)">dotMobi</a>.</li>
</ul>
<p>Dès que le rendu est correct avec <a href="http://www.opera.com/mini/demo/" onclick="window.open(this.href); return false;" title ="aller sur le site d'Opera Mini Demo (s'ouvre dans une nouvelle fenêtre)">Opera Mini Demo</a> et validé par le <a hreflang="en" href="http://validator.w3.org/mobile/" onclick="window.open(this.href); return false;" title ="aller sur le site du W3C mobileOK Checker (s'ouvre dans une nouvelle fenêtre)">W3C mobileOK Checker</a> (la page d&#8217;accueil <a href="http://www.iptima.com/" onclick="window.open(this.href); return false;" title ="aller sur le site Iptima (s'ouvre dans une nouvelle fenêtre)">Iptima</a> obtient le score de 99/100 et le présent article 98/100&#8230; scores perfectibles&#160;!), nous validons le développement.</p>
<p>Ensuite, certains navigateurs de périphériques de poche n&#8217;identifient pas le <em>medium</em> <em>Handled</em> dans l&#8217;en-tête des pages <acronym title="HyperText Markup Language">Html</acronym>, et ne retiennent que le <em>medium</em> <em>Screen</em>&#160;!</p>
<p>Afficher un contenu identique est illusoire, n&#8217;en déplaise aux tenants des mises en page <em>liquides</em> ou <em>fluides</em>&#160;: les bannières ou les images ne sont pas redimensionnables le plus souvent, et toujours trop larges pour un téléphone, et leur largeur est forcément fixe&#160;!</p>
<p>Aussi faut-il servir un contenu spécifique pour les périphériques de poche, soit en l&#8217;adaptant soit en le créant. Le principe est simple&#8230; Lors de la demande de connexion, le navigateur est identifié&#160;: s&#8217;il est reconnu comme mobile, il est redirigé vers le contenu alternatif. Sur le plan technique, la mise en œuvre n&#8217;est guère plus compliquée (il suffit de consulter <a href="http://www.iptima.com/" onclick="window.open(this.href); return false;" title ="aller sur le site Iptima (s'ouvre dans une nouvelle fenêtre)">Iptima</a> avec son radio-téléphone ou d&#8217;utiliser <a href="http://www.opera.com/mini/demo/" onclick="window.open(this.href); return false;" title ="aller sur le site d'Opera Mini Demo (s'ouvre dans une nouvelle fenêtre)">Opera Mini Demo</a> pour voir une illustration&#160;!), mais dépasserait le cadre de cet article. Nous essaierons d&#8217;y revenir prochainement.</p>
<p>Une feuille de style pour périphérique de poche doit être courte, car le délai de son téléchargement a de l&#8217;importance. De plus, il est inutile de vouloir perfectionner à outrance l&#8217;aspect de la page, car certains navigateurs restent sourds aux raffinements (comme la suppression des puces dans les listes), et il vaut mieux se concentrer sur l&#8217;essentiel&#160;: marges et couleurs, à assortir au site principal.</p>
<p>À l&#8217;instar des feuilles de style dédiées à l&#8217;impression, nous avons décidé d&#8217;utiliser essentiellement des unités relatives et réduites, en raison de l&#8217;étroitesse de l&#8217;écran, avec l&#8217;unité <em>em</em> ou <em>%</em>. L&#8217;affichage des polices de caractères se limite à une seule valeur. Les largeurs des bordures sont relatives. Nous avons aussi renoncé à appliquer un fond de couleur pour recourir à un arrière-plan transparent. Les images sont toujours centrées, en raison de l&#8217;étroitesse de l&#8217;écran.</p>
<p class="left"><code>body {<br />
&#160;&#160;background-color: transparent;<br />
&#160;&#160;color: #000000;<br />
&#160;&#160;font-family: sans-serif;<br />
&#160;&#160;/* Permet de spécifier une police sans empattements plus lisible sur un écran. */<br />
&#160;&#160;font-size: 1em;<br />
&#160;&#160;margin: 1em<br />
}<br />
#header {<br />
&#160;&#160;border-bottom: medium solid #ffa97a;<br />
&#160;&#160;border-top: medium solid #ffa97a;<br />
&#160;&#160;padding-bottom: 0.25em;<br />
&#160;&#160;text-align: center<br />
}<br />
img {<br />
&#160;&#160;display: block;<br />
&#160;&#160;margin-left: auto;<br />
&#160;&#160;margin-right: auto<br />
}<br />
ol.commentlist li, ol.pinglist li {<br />
&#160;&#160;border: thin dotted #666666;<br />
&#160;&#160;list-style-position: inside;<br />
&#160;&#160;list-style-type: decimal;<br />
&#160;&#160;margin: 0.9375em 0 0 0.9375em;<br />
&#160;&#160;/* margin: 15px 0 0 15px; dans la feuille de style pour l'écran du site principal */<br />
&#160;&#160;padding: 0.3125em;<br />
&#160;&#160/* padding: 5px; dans la feuille de style pour l'écran du site principal */<br />
}<br />
</code></p>
<p>Nous pouvons aussi cacher certains conteneurs, même si le contenu alternatif devrait permettre d&#8217;obvier à l&#8217;affichage de ces éléments&#8230;</p>
<p class="left"><code>#adsense, #advertising {<br />
&#160;&#160;display: none<br />
</code></p>
<p>Enfin, nous avons prévu d&#8217;afficher la signification des acronymes juste après leur affichage avec les <em>pseudo-classes</em> <em>acronym:after</em>, <em>abbr:after</em>, car l&#8217;équivalent des souris sur les <acronym title="Personal Digital Assistant">Pda</acronym> ne permettent pas toujours le survol. Ainsi, le lecteur connaît instantanément la signification. Tant pis pour les téléphones et les utilisateurs qui ne reconnaîtront pas cette règle&#8230;</p>
<p class="left"><code>acronym:after, abbr:after {<br />
&#160;&#160;content: &#34; [&#34;attr(title)&#34;]&#34;;<br />
&#160;&#160;text-decoration: none<br />
</code></p>
<p>Attention&#160;! il est tentant de redimensionner les images trop larges avec une feuille de style&#160;: l&#8217;image originale sera téléchargée, et obligera le navigateur à effectuer le redimensionnement, ralentissant l&#8217;affichage de la page.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.iptima.com/2010/02/22/concevoir-une-feuille-de-style-pour-les-peripheriques-mobiles/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Concevoir une feuille de style pour l&#8217;impression</title>
		<link>http://www.iptima.com/2010/02/22/concevoir-une-feuille-de-style-pour-limpression/</link>
		<comments>http://www.iptima.com/2010/02/22/concevoir-une-feuille-de-style-pour-limpression/#comments</comments>
		<pubDate>Mon, 22 Feb 2010 16:49:28 +0000</pubDate>
		<dc:creator>Vincent Roulet</dc:creator>
				<category><![CDATA[Conception]]></category>
		<category><![CDATA[WebDesign]]></category>
		<category><![CDATA[3G]]></category>
		<category><![CDATA[accessibilité]]></category>
		<category><![CDATA[Cascading Style Sheets]]></category>
		<category><![CDATA[Css]]></category>
		<category><![CDATA[feuilles de style]]></category>
		<category><![CDATA[General Packet Radio Service]]></category>
		<category><![CDATA[Gprs]]></category>
		<category><![CDATA[Html]]></category>
		<category><![CDATA[HyperText Markup Language]]></category>
		<category><![CDATA[Ihm]]></category>
		<category><![CDATA[images]]></category>
		<category><![CDATA[impression]]></category>
		<category><![CDATA[interface homme-machine]]></category>
		<category><![CDATA[Pda]]></category>
		<category><![CDATA[Personal Digital Assistant]]></category>
		<category><![CDATA[radio-téléphone]]></category>
		<category><![CDATA[sémantique]]></category>
		<category><![CDATA[smartphone]]></category>
		<category><![CDATA[téléphone mobile]]></category>
		<category><![CDATA[Xhtml]]></category>

		<guid isPermaLink="false">http://www.iptima.com/?p=369</guid>
		<description><![CDATA[Les feuilles de style pour les imprimantes ne peuvent convenir à celles utilisées pour les écrans&#160;: un Design harmonieux sur un moniteur se révèle désastreux à l&#8217;impression, comme les fonds colorés. En outre, les imprimantes utilisent une résolution plus élevée, et la notion de pixel est difficilement transposable pour le papier. Enfin, il impossible de [...]]]></description>
			<content:encoded><![CDATA[<p>Les feuilles de style pour les imprimantes ne peuvent convenir à celles utilisées pour les écrans&#160;: un <em>Design</em> harmonieux sur un moniteur se révèle désastreux à l&#8217;impression, comme les fonds colorés. En outre, les imprimantes utilisent une résolution plus élevée, et la notion de pixel est difficilement transposable pour le papier. Enfin, il impossible de prévoir les caractéristiques de l&#8217;imprimante et les préférences de l&#8217;utilisateur&#160;: impression en noir et blanc&#160;? impression en mode portrait ou paysage&#160;?&#8230; taille de la feuille&#160;?&#8230;</p>
<p><span id="more-369"></span></p>
<p>Les feuilles de style dédiées à l&#8217;impression sont toujours reconnues avec les navigateurs, contrairement à <em>handled</em> pour les périphériques de poche&#160;: pourquoi utiliser une solution complexe et coûteuse en ressources comme JavaScript ou <acronym title="pre-hypertext processing">Php</acronym>&#160;?</p>
<p>Si une impression normée s&#8217;avère souhaitable, il vaut mieux alors générer un document <acronym title="Portable Document Format">Pdf</acronym> à la volée.</p>
<p>Cependant, il n&#8217;est pas judicieux de concevoir une feuille de style sophistiquée dans les moindres détails&#160;: comme le recours à l&#8217;impression reste marginal, les règles peuvent être rudimentaires.</p>
<p>Aussi avons-nous décidé de <em>lâcher prise</em> pour l&#8217;impression&#160;: nous allons utiliser des unités relatives avec <em>em</em>, nous ne spécifierons pas une police de caractères, et afficherons du noir et blanc. Ainsi, le navigateur gèrera par défaut l&#8217;impression&#8230; avec des résultats moins hasardeux&#160;!</p>
<p>En revanche, nous avons développé une solution spécifique pour la gestion des liens, des acronymes et des images, qui permet de tirer parti astucieusement des spécificités du <em>medium</em> <em>Print</em>.</p>
<h3>Quelques propriétés&#8230;</h3>
<p>D&#8217;abord, appelons le <em>medium</em> <em>Print</em> dans l&#8217;en-tête de nos pages <acronym title="HyperText Markup Language">Html</acronym>&#8230;</p>
<p class="left"><code>&#60;link rel=&#34;stylesheet&#34; href=&#34;http://www.monsite.com/styles/print.css&#34; type=&#34;text/css&#34; media=&#34;print&#34; /&#62;<br />
</code></p>
<p>Réglons ensuite l&#8217;apparence de notre site&#8230;</p>
<p class="left"><code>body {<br />
&#160;&#160;color: #000000;<br />
&#160;&#160;/* Nous imprimons en noir et blanc */<br />
&#160;&#160;font-family: serif;<br />
&#160;&#160;/* Permet de spécifier une police à empattements plus lisible sur le papier. */<br />
&#160;&#160;font-size: 1em;<br />
&#160;&#160;margin: 1.5em<br />
}<br />
</code></p>
<p>Ensuite, cachons les éléments purement décoratifs ou non significatifs, images ou non&#8230;</p>
<p class="left"><code>#adsense, #advertising {<br />
&#160;&#160;display: none<br />
}<br />
</code></p>
<p>Imprimons nos liens en noir et blanc&#8230;</p>
<p class="left"><code>h1, h2, h3, h4, h5, h6 {<br />
&#160;&#160;color: #000000;<br />
&#160;&#160;padding: 0.5em;<br />
&#160;&#160;text-align: center;<br />
&#160;&#160;text-decoration: none<br />
}<br />
h1.a, h1 a:link, h1 a:visited, h2.a, h2 a:link, h2 a:visited, h3.a, h3 a:link, h3 a:visited, h4.a, h4 a:link, h4 a:visited, h5.a, h5 a:link, h5 a:visited, h6.a, h6 a:link, h6 a:visited {<br />
&#160;&#160;color: #000000;<br />
&#160;&#160;text-decoration: none<br />
}<br />
</code></p>
<p>Préférons les unités relatives pour les bordures&#8230;</p>
<p class="left"><code>.postmetadata {<br />
&#160;&#160;border: thin solid #999999;<br />
&#160;&#160;/* Il existe trois unités relatives pour désigner la largeur de la bordure : 'thin', 'medium', ou 'thick'. */<br />
&#160;&#160;margin: 1em;<br />
&#160;&#160;padding: 1em<br />
}<br />
</code></p>
<p>Continuons à jouer avec les unités relatives&#8230;</p>
<p class="left"><code>ol.commentlist li, ol.pinglist li {<br />
&#160;&#160;border: thin dotted #666666;<br />
&#160;&#160;list-style-position: inside;<br />
&#160;&#160;list-style-type: decimal;<br />
&#160;&#160;margin: 1.5em 0 0 1.5em;<br />
&#160;&#160;/* margin: 15px 0 0 15px; dans la feuille de style pour l'écran */<br />
&#160;&#160;padding: 0.5em;<br />
&#160;&#160;/* padding: 5px dans la feuille de style pour l'écran */<br />
}<br />
</code></p>
<h3>Gestion des liens et des acronymes</h3>
<p>Par défaut, les liens et les acronymes sont imprimés en l&#8217;état, c&#8217;est-à-dire soulignés ou non. Néanmoins, un lien souligné n&#8217;est guère informatif pour le lecteur de la version imprimée, et il devra retourner sur le site pour retrouver l&#8217;adresse&#160;! Aussi pourquoi ne pas afficher l&#8217;adresse du lien ou la signification de l&#8217;acronyme juste après l&#8217;affichage&#160;? <acronym title="Cascading Style Sheets">Css</acronym> permet aisément de spécifier la propriété avec <em>:a:after</em>&#8230;</p>
<p class="left"><code>h1 a:after, h2 a:after, h3 a:after, h4 a:after, h5 a:after {<br />
&#160;&#160;border-bottom: thin solid #000000;<br />
&#160;&#160;content: &#34; [&#34;attr(href)&#34;]&#34;;<br />
&#160;&#160/* Noter l'espace juste après le premier guillemet pour éviter que le contenu ne colle au lien. */<br />
}<br />
acronym:after, abbr:after {<br />
&#160;&#160;border-bottom: thin dotted #000000;<br />
&#160;&#160;content: &#34; [&#34;attr(title)&#34;]&#34;<br />
}<br />
</code></p>
<h3>Gestion des images</h3>
<p>Pour les images, il ne semble pas toujours utile de les imprimer. En effet, la plupart des images ne présente aucune valeur informative, et l&#8217;impression d&#8217;une image d&#8217;une résolution de 72 pixels par pouce se révèle souvent catastrophique. C&#8217;est pourquoi, nous avons pris le parti de ne pas les afficher à l&#8217;impression (au passage, les droits d&#8217;auteur sont ainsi préservés), mais de signaler leur existence par deux moyens&#160;: avec le contenu de la balise <em>alt</em>, d&#8217;une part, et, d&#8217;autre part, avec la mention <em>[img]</em> (nous avons repris sobrement le nom de la balise <acronym title="HyperText Markup Language">Html</acronym> pour assurer l&#8217;internationalisation de la feuille de style). Ces deux affichages peuvent sembler redondants, mais la <em>pseudo-classe</em> img:after n&#8217;est pas gérée par tous les navigateurs. Ainsi, le lecteur ne perd aucune information essentielle&#160;!</p>
<p class="left"><code>dl.gallery {<br />
&#160;&#160;text-align: left /* Nos images sont placées dans des listes de définition */<br />
}<br />
.gallery_dt, .gallery_dd {<br />
&#160;&#160;margin-left: 0 /* Évite le décalage à droite imposé par le navigateur */<br />
}<br />
.gallery dt a img {<br />
&#160;&#160;display: none<br />
}<br />
.gallery dt a img:after {<br />
&#160;&#160;content: &#34; [&#34;attr(alt)&#34;] [alt]&#34;<br />
}<br />
.gallery dt:after {<br />
&#160;&#160;color: #333333;<br />
&#160;&#160;content: &#34;[img] &#34;;<br />
&#160;&#160;font-style: italic<br />
}<br />
.gallery dd:after {<br />
&#160;&#160;color: #333333;<br />
&#160;&#160;font-style: normal<br />
}<br />
.gallery dt, .gallery_dd {<br />
&#160;&#160;font-style: italic<br />
}<br />
</code></p>
<p><em>Nota</em>. Le marquage sémantique d&#8217;une liste de définition permet une gestion plus fine de l&#8217;affichage.</p>
<p>Si l&#8217;on ne souhaite pas se passer de l&#8217;impression des images, peut-être vaut-il mieux proposer, à titre alternatif, le téléchargement d&#8217;une image à la résolution spécifique.</p>
<p>En revanche, nous ne savons pas gérer correctement les veuves (<em>Widows</em>) et les orphelines (<em>Orphans</em>) pour éviter l&#8217;affichage disgracieux de lignes isolées en haut ou en bas de page&#160;: gageons que <acronym title="Cascading Style Sheets">Css</acronym> 3, voire l&#8217;évolution des navigateurs, permettra de combler nos attentes de typographe&#160;!</p>
<p><em>Lien intéressant</em>&#160;: <a href="http://www.pompage.net/pompe/impression/" onclick="window.open(this.href); return false;" title="lire l'article Faites bonne impression avec les CSS (s'ouvre dans une nouvelle fenêtre)"><em>Faites bonne impression avec les CSS</em></a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.iptima.com/2010/02/22/concevoir-une-feuille-de-style-pour-limpression/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Varier l&#8217;apparence des liens hypertextes selon le contenu</title>
		<link>http://www.iptima.com/2010/02/21/varier-lapparence-des-liens-hypertextes-selon-le-contenu/</link>
		<comments>http://www.iptima.com/2010/02/21/varier-lapparence-des-liens-hypertextes-selon-le-contenu/#comments</comments>
		<pubDate>Sun, 21 Feb 2010 13:25:24 +0000</pubDate>
		<dc:creator>Vincent Roulet</dc:creator>
				<category><![CDATA[Conception]]></category>
		<category><![CDATA[WebDesign]]></category>
		<category><![CDATA[accessibilité]]></category>
		<category><![CDATA[Cascading Style Sheets]]></category>
		<category><![CDATA[Css]]></category>
		<category><![CDATA[feuilles de style]]></category>
		<category><![CDATA[Ihm]]></category>
		<category><![CDATA[interface homme-machine]]></category>
		<category><![CDATA[sémantique]]></category>

		<guid isPermaLink="false">http://www.iptima.com/?p=357</guid>
		<description><![CDATA[Le soulignement des liens hypertextes dans un document est considéré comme intrusif et inesthétique. Voilà pourquoi, certains auteurs préconisent de renvoyer les hyerliens après le texte&#160;: cette solution manque pourtant d&#8217;ergonomie pour les lecteurs, et est coûteuse en ressources.

Aussi préférons-nous colorer nos liens hypertextes. Le lecteur distingue instantanément la différence, sans être gêné dans dans [...]]]></description>
			<content:encoded><![CDATA[<p>Le soulignement des liens hypertextes dans un document est considéré comme intrusif et inesthétique. Voilà pourquoi, certains auteurs préconisent de renvoyer les hyerliens après le texte&#160;: cette solution manque pourtant d&#8217;ergonomie pour les lecteurs, et est coûteuse en ressources.</p>
<p><span id="more-357"></span></p>
<p>Aussi préférons-nous colorer nos liens hypertextes. Le lecteur distingue instantanément la différence, sans être gêné dans dans le fil de la lecture.</p>
<p>Cependant, si nous décidons d&#8217;utiliser la couleur verte dans nos titres en incluant un lien hypertexte en rouge, le résultat ne sera pas fort heureux&#160;! De même, si nous colorons les citations en bleu, un lien hypertexte s&#8217;y affichera en rouge&#8230; Comment y remédier&#160;? <acronym title="Cascading Style Sheets">Css</acronym> permet aisément de répondre au problème et de <em>contextualiser</em> les hyperliens.</p>
<p>D&#8217;abord, déclarons la couleur de nos liens hypertextes pour l&#8217;ensemble du document&#8230;</p>
<p class="left"><code>a {<br />
&#160;&#160;color: red;<br />
&#160;&#160;text-decoration: none<br />
}<br />
</code></p>
<p>Ensuite, déclarons la couleur de nos titres&#8230;</p>
<p class="left"><code>h1, h2, h3, h4, h5, h6 {<br />
&#160;&#160;color: green<br />
}<br />
</code></p>
<p>Enfin, déclarons la couleur de nos citations&#8230;</p>
<p class="left"><code>blockquote, cite, q {<br />
&#160;&#160;color: blue<br />
}<br />
</code></p>
<p>Faute d&#8217;avoir trouvé une solution plus congruente, nous avons décidé que les hyperliens contenus dans un titre ou une citation auraient la même couleur que le titre ou la citation, c&#8217;est-à-dire son <em>parent</em>. En revanche, ils seront soulignés pour être identifiables.</p>
<p>Le soulignement peut sembler discutable. On pourrait s&#8217;en passer pour des raisons visuelles, sachant que les liens conserveront leur valeur sémantique. Cependant, il nous semble dommage de priver le lecteur d&#8217;une information accessible, d&#8217;autant que cette <em>contextualisation</em> s&#8217;applique à des portions courtes de texte.</p>
<p>Ainsi&#8230;</p>
<p class="left"><code>h1 a, h2 a, h3 a, h4 a, h5 a, h6 a {<br />
&#160;&#160;border-bottom: 1px green solid; /* Nous préférons déclarer une bordure qu'un soulignement automatique dont le rendu est souvent trop proche du texte */<br />
&#160;&#160;color: green;<br />
&#160;&#160;text-decoration: none<br />
}<br />
blockquote a, cite a, q a {<br />
&#160;&#160;border-bottom: 1px blue solid;<br />
&#160;&#160;color: blue;<br />
&#160;&#160;text-decoration: none;<br />
}<br />
</code></p>
<p>Sur ce principe, nous pouvons décliner à loisir l&#8217;apparence des hyperliens dans notre feuille de style.</p>
<p>Nous n&#8217;avons pas encore présenté les <em>pseudo-classes</em> <em>link</em>, <em>visited</em>, <em>hover</em>, <em>active</em> (<em>LoVe HAte</em> est un moyen mnémotechnique pour les retenir)&#160;: elles doivent être écrites dans cet ordre pour qu&#8217;elles fonctionnent, mais ne doivent pas forcément se suivre&#8230; contrairement à une opinion répandue&#160;! Elles sont fort simples à utiliser&#8230;</p>
<p class="left"><code>a:link { /* apparence des liens actifs */<br />
&#160;&#160;color: green;<br />
&#160;&#160;text-decoration: none<br />
}<br />
a:visited { /* apparence des liens visités */<br />
&#160;&#160;color: yellow;<br />
&#160;&#160;text-decoration: none<br />
}<br />
a:hover { /* apparence des liens lors du survol avec la souris */<br />
&#160;&#160;border-bottom: 1px green solid;<br />
&#160;&#160;color: green;<br />
&#160;&#160;text-decoration: none;<br />
}<br />
a:active { /* apparence des liens lors du clic de la souris */<br />
&#160;&#160;color: green;<br />
&#160;&#160;text-decoration: none<br />
}<br />
</code></p>
<p>Il suffit ensuite d&#8217;appliquer ces <em>pseudo-classes</em> une à une sur les éléments à personnaliser.</p>
<p>De la même façon, pouvons-nous personnaliser l&#8217;apparence de la balise <em>acronym</em> ou <em>abbr</em> selon le contexte, par exemple dans les titres&#8230;</p>
<p class="left"><code>h2 acronym, h2 abbr, h3 acronym, h3 abbr, h4 acronym, h4 abbr, h5 acronym, h5 abbr, h6 acronym, h6 abbr {<br />
&#160;&#160;border-bottom: 1px #green dotted;<br />
&#160;&#160;cursor: help<br />
}<br />
</code></p>
<p>Voici un exemple tiré d&#8217;une feuille de style que nous utilisons en production.</p>
<p class="left"><code>a:link {<br />
/* Cette feuille de style gagnerait à être simplifiée, mais elle est didactique */<br />
&#160;&#160;color: #770010;<br />
&#160;&#160;text-decoration: none<br />
}<br />
a:visited {<br />
&#160;&#160;color: #607800;<br />
&#160;&#160;text-decoration: none<br />
}<br />
a:hover {<br />
&#160;&#160;border-bottom: 1px #770010 solid;<br />
&#160;&#160;color: #770010;<br />
&#160;&#160;text-decoration: none<br />
}<br />
a:active {<br />
&#160;&#160;color: #770010;<br />
&#160;&#160;text-decoration: none<br />
}<br />
/****** Titres ******/<br />
h1, h2, h3, h4, h5, h6 {<br />
/* Couleur par défaut des titres */<br />
&#160;&#160;color: #607800<br />
}<br />
h1 a:link, h2 a:link, h3 a:link, h4 a:link, h5 a:link, h6 a:link {<br />
/* Liens actifs dans les titres */<br />
/* Exemple. &#60;h2&#62;&#60;a href=&#34;http://www.idtgv.fr/&#34; title =&#34;aller sur le site Interactif Détente Tgv (s'ouvre dans une nouvelle fenêtre)\&#34;&#62;iDTGV&#60;/a&#62;&#60;/h2&#62; */<br />
&#160;&#160;border-bottom: 1px #607800 solid;<br />
&#160;&#160;color: #607800;<br />
&#160;&#160;text-decoration: none<br />
}<br />
h1 a:visited, h2 a:visited, h3 a:visited, h4 a:visited , h5 a:visited , h6 a:visited {<br />
/* Liens visités dans les titres */<br />
&#160;&#160;border-bottom: 1px #607800 solid;<br />
&#160;&#160;color: #607800;<br />
&#160;&#160;text-decoration: none<br />
}<br />
h1 a:hover, h2 a:hover, h3 a:hover, h4 a:hover, h5 a:hover, h6 a:hover {<br />
/* Liens visités lors du survol avec la souris dans les titres */<br />
&#160;&#160;border-bottom: 1px #770010 solid;<br />
&#160;&#160;color: #770010;<br />
&#160;&#160;text-decoration: none<br />
}<br />
h2 a:active, h3 a:active, h4 a:active, h5 a:active, h6 a:active {<br />
/* Liens lors du clic de la souris dans les titres */<br />
&#160;&#160;border-bottom: 1px #607800 solid;<br />
&#160;&#160;color: #607800;<br />
&#160;&#160;text-decoration: none<br />
}<br />
h2.post_title a:link, h2.post_title a:visited, h2.post_title a:hover, h2.post_title a:active, h3.post_title a:link, h3.post_title a:visited, h3.post_title a:hover, h3.post_title a:active {<br />
/* Liens dans les titres d'articles */<br />
&#160;&#160;border-bottom: none;<br />
&#160;&#160;color: #770010;<br />
&#160;&#160;text-decoration: none<br />
}<br />
h2.page_title a:link, h2.page_title a:visited, h2.page_title a:hover, h2.page_title a:focus, h2.page_title a:active {<br />
/* Liens dans les titres d'articles */<br />
&#160;&#160;border-bottom: none;<br />
&#160;&#160;color: #770010;<br />
&#160;&#160;text-decoration: none<br />
}<br />
h1 acronym, h1 abbr, h2 acronym, h2 abbr, h3 acronym, h3 abbr, h4 acronym, h4 abbr, h5 acronym, h5 abbr, h6 acronym, h6 abbr {<br />
/* Acronymes et abbréviations dans les titres */<br />
/* Exemple. &#60;h2&#62;&#60;acronym title=&#34;Interactif Détente Tgv&#34;&#62;iDTGV&#60;/acronym&#62;&#60;/h2&#62; */<br />
&#160;&#160;border-bottom: 1px #607800 dotted;<br />
&#160;&#160;cursor: help<br />
}<br />
/****** Citations ******/<br />
cite, q {<br />
&#160;&#160;color: #333333;<br />
&#160;&#160;font-style: normal;<br />
&#160;&#160;font-weight: 600 /* par défaut, la valeur 'bold' vaut 700 et 'normal' vaut 500<br />
}<br />
blockquote {<br />
&#160;&#160;color: #333333;<br />
&#160;&#160;font-style: normal;<br />
&#160;&#160;font-weight: 600;<br />
&#160;&#160;margin: 0 10px<br />
}<br />
h1 q, h2 q, h3 q, h4 q, h5 q, h6 q, h1 cite, h2 cite, h3 cite, h4 cite, h5 cite, h6 cite {<br />
/* Citations dans les titres */<br />
/* Exemple. &#60;h2&#62;&#60;q&#62;Dormir nuit&#60;/q&#62; déclare le marchand de sable&#60;/h2&#62; */<br />
&#160;&#160;color: #607800;<br />
&#160;&#160;font-style: italic<br />
}<br />
blockquote a:link, cite a:link, q a:link {<br />
/* Liens actifs dans les citations */<br />
/* Exemple. &#60;p&#62;&#60;q&#62;Je consulte fréquemment le site &#60;a href=&#34;http://www.sncf.com/&#34; title =&#34;aller sur le site de la Société Nationale des Chemins de Fer Français&#34;&#62;Sncf&#60;/a&#62;.&#60;/q&#62;&#60;/p&#62;*/<br />
&#160;&#160;border-bottom: 1px #333333 solid;<br />
&#160;&#160;color: #333333;<br />
&#160;&#160;font-style: normal;<br />
&#160;&#160;text-decoration: none<br />
}<br />
blockquote a:visited, cite a:visited, q a:visited {<br />
/* Liens visités dans les citations */<br />
&#160;&#160;border-bottom: 1px #333333 solid;<br />
&#160;&#160;color: #333333;<br />
&#160;&#160;font-style: normal;<br />
&#160;&#160;text-decoration: none<br />
}<br />
blockquote a:hover, cite a:hover, q a:hover {<br />
/* Liens lors du survol avec la souris dans les citations */<br />
&#160;&#160;border-bottom: 1px #333333 solid;<br />
&#160;&#160;color: #333333;<br />
&#160;&#160;font-style: normal;<br />
&#160;&#160;text-decoration: none<br />
}<br />
blockquote a:active, cite a:active, q a:active {<br />
/* Liens lors du clic de la sourisdans les citations */<br />
&#160;&#160;border-bottom: 1px #333333 solid;<br />
&#160;&#160;color: #333333;<br />
&#160;&#160;font-style: normal;<br />
&#160;&#160;text-decoration: none<br />
}<br />
blockquote em a:link, cite em a:link, q em a:link {<br />
/* Liens actifs dans les citations lorsque le texte est écrit avec emphase, c'est-à-dire en italique */<br />
/* Exemple. &#60;p&#62;&#60;q&#62;&#60;em&#62;Voyager avec la &#60;a href=&#34;http://www.sncf.com/&#34; title =&#34;aller sur le site de la Société Nationale des Chemins de Fer Français&#34;&#62;Sncf&#60;/a&#62; ou &#60;a href=&#34;http://www.airfrance.fr/&#34; title =&#34;aller sur le site d'Air France (s'ouvre dans une nouvelle fenêtre)&#34;&#62;Air France&#60;/a&#62;&#60;/em&#62; est une question récurrente&#60;/q&#62;, explique-t-il.&#60;/p&#62; */<br />
&#160;&#160;border-bottom: 1px #333333 solid;<br />
&#160;&#160;color: #333333;<br />
&#160;&#160;font-style: italic;<br />
&#160;&#160;text-decoration: none<br />
}<br />
blockquote em a:visited, cite em a:visited, q em a:visited {<br />
/* Liens visités dans les citations lorsque le texte est écrit avec emphase, c'est-à-dire en italique */<br />
&#160;&#160;border-bottom: 1px #333333 solid;<br />
&#160;&#160;color: #333333;<br />
&#160;&#160;font-style: italic;<br />
&#160;&#160;text-decoration: none<br />
}<br />
blockquote em a:hover, cite em a:hover, q em a:hover {<br />
/* Liens lors du survol avec la souris dans les citations lorsque le texte est écrit avec emphase, c'est-à-dire en italique */<br />
&#160;&#160;border-bottom: 1px #333333 solid;<br />
&#160;&#160;color: #333333;<br />
&#160;&#160;font-style: italic<br />
}<br />
blockquote em a:active, cite em a:active, q em a:active {<br />
/* Liens lors du clic de la souris dans les citations lorsque le texte est écrit avec emphase, c'est-à-dire en italique */<br />
&#160;&#160;border-bottom: 1px #333333 solid;<br />
&#160;&#160;color: #333333;<br />
&#160;&#160;font-style: italic<br />
}<br />
blockquote cite, q cite {<br />
/* Citation courte incluse à une citation longue */<br />
&#160;&#160;font-style: italic;<br />
&#160;&#160;font-weight: bold<br />
}<br />
/****** Acronymes et abréviations ******/<br />
acronym, abbr {<br />
&#160;&#160;border-bottom: 1px #000000 dotted;<br />
&#160;&#160;cursor: help<br />
}<br />
blockquote acronym, blockquote abbr, cite acronym, cite abbr, q acronym, q abbr {<br />
/* Acronyme ou abréviation incluse à une citation */<br />
/* Exemple. &#60;p&#62;&#60;q&#62;Le &#60;acronym title=&#34;Train à Grande Vitesse&#34&#62;Tgv&#60;/acronym&#62; reste moins rapide que l'avion.&#60;/q&#62;&#60;/p&#62; */<br />
&#160;&#160;border-bottom: 1px #333333 dotted;<br />
&#160;&#160;cursor: help;<br />
&#160;&#160;font-style: normal<br />
}<br />
em acronym, em abbr {<br />
/* Acronyme ou abréviation incluse à une citation lorsque le texte est écrit avec emphase, c'est-à-dire en italique */<br />
/* Exemple. &#60;p&#62;&#60;em&#62;Le &#60;acronym title=&#34;Train à Grande Vitesse&#34;&#62;Tgv&#60;/acronym&#62; est-il aussi rapide que l'avion ?&#60;/em&#62;, se demande-t-il.&#60;/p&#62; */<br />
&#160;&#160;border-bottom: 1px #333333 dotted;<br />
&#160;&#160;cursor: help;<br />
&#160;&#160;font-style: italic<br />
}<br />
blockquote em acronym, blockquote em abbr, cite em acronym, cite em abbr, q em acronym, q em abbr {<br />
/* Acronyme ou abréviation lorsque le texte est écrit avec emphase, c'est-à-dire en italique */<br />
/* Exemple. &#60;p&#62;&#60;q&#62;La plupart des voyageurs se demande &#60;em&#62;le &#60;acronym title=&#34;Train à Grande Vitesse&#34;&#62;Tgv&#60;/acronym&#62; est-il moins rapide que l'avion ?&#60;/em&#62;.&#60;/q&#62;, explique-t-il.&#60;/p&#62; */<br />
&#160;&#160;border-bottom: 1px #333333 dotted;<br />
&#160;&#160;cursor: help;<br />
&#160;&#160;font-style: italic<br />
}<br />
</code></p>
<p>Les possibilités de varier le style sont infinies, même s&#8217;il est difficile de prévoir l&#8217;ensemble des cas lors de l&#8217;écriture de la feuille de style.</p>
<p>Le principe de la personnalisation des liens hypertextes est facile à transposer avec d&#8217;autres attributs.</p>
<p>À ce propos, et le concept n&#8217;est pas facile à comprendre pour les débutants, les feuilles de style en cascade ne constituent pas une juxtaposition de règles hétéroclites définissant chaque élement d&#8217;une page <em>Web</em>. Par <em>cascade</em>, il faut comprendre <em>factorisation</em>&#160;: chaque règle suit la précédente (c&#8217;est le principe de l&#8217;<em>héritage</em> entre <em>parent</em> et <em>enfants</em>) ou l&#8217;infirme.</p>
<p>Aussi faut-il ne pas oublier de refléter l&#8217;arbre logique du document dans l&#8217;écriture des styles, en respectant l&#8217;ordre d&#8217;apparition des éléments dans la page, c&#8217;est-à-dire leur héritage, de gauche à droite.</p>
<p>Ainsi, si nous voulons supprimer les puces devant chaque liste du document, nous écrirons&#8230;</p>
<p class="left"><code>li {<br />
&#160;&#160;list-style-type: none<br />
</code></p>
<p>Partant de cette règle, nous pouvons toutefois ajouter des puces devant un élément particulier, par exemple dans le conteneur <em>post</em>, en écrivant&#160;:</p>
<p class="left"><code>.post li {<br />
&#160;&#160;list-style-type: square<br />
</code></p>
<p>Ici, il faut peser avec soin l&#8217;intérêt d&#8217;une règle générale&#160;: il est contre-productif de déclarer la suppression des puces dans l&#8217;ensemble du document pour les ajouter ensuite à chaque élément&#160;! Cependant, la redondance peut présenter l&#8217;avantage de simplifier la lecture et la maintenance du code.</p>
<p>Enfin, il est encore plus simple pour maintenir une feuille de style de regrouper les attributs par sélecteurs&#160;: couleurs, bordures, alignements, polices de caractères&#8230; Ainsi, si l&#8217;on souhaite changer une couleur, elle s&#8217;appliquera instantanément à tous les attributs concernés, grâce à cette <em>explosion</em>. La ré-écriture d&#8217;une feuille de style sous cette forme est fastidieuse, mais elle permet ensuite de gagner du temps.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.iptima.com/2010/02/21/varier-lapparence-des-liens-hypertextes-selon-le-contenu/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Centrer parfaitement une galerie d&#8217;images</title>
		<link>http://www.iptima.com/2010/02/18/centrer-une-galerie-dimages/</link>
		<comments>http://www.iptima.com/2010/02/18/centrer-une-galerie-dimages/#comments</comments>
		<pubDate>Thu, 18 Feb 2010 11:39:59 +0000</pubDate>
		<dc:creator>Vincent Roulet</dc:creator>
				<category><![CDATA[Conception]]></category>
		<category><![CDATA[WebDesign]]></category>
		<category><![CDATA[WordPress]]></category>
		<category><![CDATA[Cascading Style Sheets]]></category>
		<category><![CDATA[Css]]></category>
		<category><![CDATA[Extensible HyperText Markup Language]]></category>
		<category><![CDATA[feuilles de style]]></category>
		<category><![CDATA[Flash]]></category>
		<category><![CDATA[Galerie]]></category>
		<category><![CDATA[get_option]]></category>
		<category><![CDATA[Html]]></category>
		<category><![CDATA[Hypertext Preprocessor]]></category>
		<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[Mark Newhouse]]></category>
		<category><![CDATA[MySql]]></category>
		<category><![CDATA[Php]]></category>

		<guid isPermaLink="false">http://www.iptima.com/?p=284</guid>
		<description><![CDATA[Nous nous sommes longtemps interrogé sur la manière de centrer parfaitement  la dernière ligne d&#8217;une galerie, quel que soit le nombre d&#8217;images. En effet, sur la plupart des sites n&#8217;utilisant pas des effets dynamiques comme JavaScript ou Flash, les images restantes d&#8217;une dernière ligne incomplète sont inexorablement alignées à gauche&#160;: les exemples sont nombreux.

Voici [...]]]></description>
			<content:encoded><![CDATA[<p>Nous nous sommes longtemps interrogé sur la manière de centrer parfaitement  la dernière ligne d&#8217;une galerie, quel que soit le nombre d&#8217;images. En effet, sur la plupart des sites n&#8217;utilisant pas des effets dynamiques comme JavaScript ou <a hreflang="en" href="http://www.adobe.com/products/flashplayer/" onclick="window.open(this.href); return false;" title ="aller sur le site de Flash Player (s'ouvre dans une nouvelle fenêtre)">Flash</a>, les images restantes d&#8217;une dernière ligne incomplète sont inexorablement alignées à gauche&#160;: les exemples sont nombreux.</p>
<p><span id="more-284"></span></p>
<p>Voici un problème relativement simple à formuler, mais dont la solution ne saute pas aux yeux. Après avoir parcouru en vain les arcanes du <em>Web</em> francophone puis anglophone, nous avons développé notre propre technique, que nous présentons ici.</p>
<p><em>Nota</em>. Dans notre présentation, par commodité, <em>O</em> désignera une image, tandis que <em>X</em> désignera une espace. (C&#8217;est notre modeste contribution à  l&#8217;<em><acronym title="American Standard Code for Information Interchange">Ascii</acronym> Art</em>&#160;!) Nous partirons aussi du postulat qu&#8217;une galerie correspond à des images de petites tailles alignées les unes avec les autres sur une page, dont leur largeur (et, idéalement, leur hauteur&#160;!) est équivalente.</p>
<p>Ainsi, pour cinq images, l&#8217;affichage sur une colonne s&#8217;effectue ainsi&#8230;</p>
<p class="center"><code>OXOXOXOXO</code></p>
<p>Pour les images restantes, le navigateur renvoie <em>logiquement</em>, sauf instruction contraire, les images restantes les unes à la suite des autres&#8230;</p>
<p>S&#8217;il reste quatre images&#8230;</p>
<p class="center"><code>OXOXOXOXX</code></p>
<p>S&#8217;il reste trois images&#8230;</p>
<p class="center"><code>OXOXOXXXX</code></p>
<p>S&#8217;il reste deux images&#8230;</p>
<p class="center"><code>OXOXXXXXX</code></p>
<p>S&#8217;il reste une image&#8230;</p>
<p class="center"><code>OXXXXXXXX</code></p>
<p>Or, ce résultat ne nous semble pas satisfaisant sur le plan visuel, car nous avons une fâcheuse tendance à cultiver la symétrie (&#8230; qui peut expliquer certains choix esthétiques&#8230; étonnants&#160;!).</p>
<p>Nous voulons obtenir l&#8217;affichage suivant&#8230;</p>
<p>S&#8217;il reste quatre images&#8230;</p>
<p class="center"><code>XOXOXOXOX</code></p>
<p>S&#8217;il reste trois images&#8230;</p>
<p class="center"><code>XXOXOXOXX</code></p>
<p>S&#8217;il reste deux images&#8230;</p>
<p class="center"><code>XXXOXOXXX</code></p>
<p>S&#8217;il reste une image&#8230;</p>
<p class="center"><code>XXXXOXXXX</code></p>
<p>Ainsi l&#8217;affichage nous semblera harmonieux, puisque les espaces seront équilibrés. Il ressemblera à&#160;:</p>
<p class="center"><code>OXOXOXOXO<br />
XOXOXOXOX<br />
XXOXOXOXX<br />
XXXOXOXXX<br />
XXXXOXXXX</code></p>
<p>Autrement posé, il s&#8217;agit de styler différemment les lignes complètes et la ligne incomplète, <em>orpheline</em>.</p>
<p>Aussi allons-nous <em>motoriser</em> les images. Nous utilisons <acronym title="pre-hypertext processing">Php</acronym>, mais le raisonnement peut être transposé à d&#8217;autres langages de programmation.</p>
<h3>Programmons les images</h3>
<p>Retournons à l&#8217;école pour un raisonnement arithmétique simple&#8230; Le nombre d&#8217;images à afficher (inconnu à l&#8217;avance - sinon, l&#8217;effort serait inutile&#160;!) est-il divisible par <em>3</em>, dans l&#8217;ensemble des nombres entiers <strong>Z</strong>&#160;? Dans l&#8217;<strong>affirmative</strong>, des lignes <em>pleines</em> s&#8217;afficheront. Dans la <strong>négative</strong>, quel sera le reste de la division&#160;? <em>2</em> ou <em>1</em>.</p>
<p>Ainsi&#8230;</p>
<ul>
<li>&#8230; pour 58 images, 58/3 = 19 images, reste 1 image&#160;;</li>
<li>&#8230; pour 104 images, 104/3 = 34 images, restent 2 images.</li>
</ul>
<p>(Pour une ligne de cinq images, le même raisonnement conduirait à avoir cinq cas possibles.)</p>
<p>Voici un exemple de code&#8230;</p>
<p class="left"><code>&#60;?php<br />
&#36;images = array('paris.jpg', 'marseille.jpg', 'lyon.jpg', 'lille.jpg', 'strasbourg.jpg');<br />
&#36;result = count(&#36;images);<br />
&#36;target = 3;<br />
/* La &#34;cible&#34; (c'est-à-dire une ligne &#34;pleine&#34;) est de trois images */<br />
&#36;orphans = fmod(&#36;result, &#36;target); // &#34;orphans&#34; comme &#34;orphelines&#34;<br />
/* 'fmod' retourne le reste d'une division */<br />
&#36;total = (&#36;result - &#36;orphans); // &#34;total&#34; pour une ligne pleine<br />
foreach(&#36;images as &#36;key =&#62; &#36;image)<br />
/* Nous utilisons la deuxième forme d'une boucle 'foreach' qui permet d'utiliser la valeur &#36;key utile dans les calculs. */<br />
{<br />
&#160;&#160;if ((&#36;key + 1) &#60;= &#36;total) // Pour trois images<br />
/* La valeur + 1 permet d'éviter que le résultat soit égal à zéro à la fin de la boucle. Nous aurions pu assigner la valeur au début des instructions... pour ne pas avoir à la ré-écrire ensuite dans les deux conditions suivantes ! Tant que le total n'est pas dépassé, l'instruction s'applique. */<br />
&#160;&#160;&#160;&#160;{<br />
&#160;&#160;&#160;&#160;&#160;&#160;echo '&#60;dl class=&#34;gallery_c&#34;&#62;'; // On créée la liste de définition &#34;gallery_c&#34; (voir ci-dessous)<br />
&#160;&#160;&#160;&#160;}<br />
&#160;&#160;else<br />
&#160;&#160;&#160;&#160;{<br />
&#160;&#160;&#160;&#160;if (((&#36;key + 1) &#62; &#36;total) &#38;&#38; (&#36;orphans == 2)) // Pour deux images<br />
/* La première condition permet de vérifier que le total est dépassé. S'il ne reste plus de lignes pleines et que le nombre d'images restantes est de deux, l'instruction s'applique. */<br />
&#160;&#160;&#160;&#160;&#160;&#160;{<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;echo '&#60;dl class=&#34;gallery_b&#34;&#62;'; // On créée la liste de définition &#34;gallery_b&#34;, (voir ci-dessous)<br />
&#160;&#160;&#160;&#160;&#160;&#160;}<br />
&#160;&#160;&#160;&#160;if (((&#36;key + 1) &#62; &#36;total) &#38;&#38; (&#36;orphans == 1)) // Pour une image<br />
/* La première condition permet de vérifier que le total est dépassé. S'il ne reste plus de lignes pleines et que le nombre d'image restante est de une, l'instruction s'applique. */<br />
&#160;&#160;&#160;&#160;&#160;&#160;{<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;echo '&#60;dl class=&#34;gallery_a&#34;&#62;'; // On créée la  liste de définition &#34;gallery_a&#34; (voir ci-dessous)<br />
&#160;&#160;&#160;&#160;&#160;&#160;}<br />
&#160;&#160;}<br />
&#160;&#160;echo &#36;image;<br />
/* La boucle 'foreach' affiche ensuite chaque image tour à tour. */<br />
&#160;&#160;echo '&#60;/dl&#62;'; // On ferme la liste de définitions<br />
}<br />
?&#62;</code></p>
<p>Ou sans les commentaires&#8230;</p>
<p class="left"><code>&#60;?php<br />
&#36;images = array('paris.jpg', 'marseille.jpg', 'lyon.jpg', 'lille.jpg', 'strasbourg.jpg');<br />
&#36;result = count(&#36;images);<br />
&#36;target = 3;<br />
&#36;orphans = fmod(&#36;result, &#36;target);<br />
&#36;total = (&#36;result - &#36;orphans);<br />
foreach(&#36;images as &#36;key =&#62; &#36;image)<br />
{<br />
&#160;&#160;if ((&#36;key + 1) &#60;= &#36;total)<br />
&#160;&#160;&#160;&#160;{<br />
&#160;&#160;&#160;&#160;&#160;&#160;echo '&#60;dl class=&#34;gallery_c&#34;&#62;';<br />
&#160;&#160;&#160;&#160;}<br />
&#160;&#160;else<br />
&#160;&#160;&#160;&#160;{<br />
&#160;&#160;&#160;&#160;if (((&#36;key + 1) &#62; &#36;total) &#38;&#38; (&#36;orphans == 2))<br />
&#160;&#160;&#160;&#160;&#160;&#160;{<br />
&#160;&#160;&#160;&#160;&#160;&#160;echo '&#60;dl class=&#34;gallery_b&#34;&#62;';<br />
&#160;&#160;&#160;&#160;}<br />
&#160;&#160;&#160;&#160;&#160;&#160;}<br />
&#160;&#160;&#160;&#160;if (((&#36;key + 1) &#62; &#36;total) &#38;&#38; (&#36;orphans == 1))<br />
&#160;&#160;&#160;&#160;&#160;&#160;{<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;echo '&#60;dl class=&#34;gallery_a&#34;&#62;';<br />
&#160;&#160;&#160;&#160;&#160;&#160;}<br />
&#160;&#160;}<br />
&#160;&#160;echo &#36;image;<br />
&#160;&#160;echo '&#60;/dl&#62;';<br />
}<br />
?&#62;</code></p>
<p>Les images ont été placées dans un tableau à titre didactique. Naturellement, en production, il faudra recourir à une méthode plus simple.</p>
<p>C&#8217;est pourquoi, nous présentons le code utilisé avec <em>WordPress</em>, mais qui peut être utilisé dans n&#8217;importe quel environnement&#8230;</p>
<p class="left"><code>&#60;?php<br />
&#36;gallery_bottom = get_post_meta(&#36;post-&#62;ID, 'gallery_bottom', false);<br />
/* Avec WordPress, 'get_post_meta' permet de récupérer le(s) enregistrements correspondant dans une table MySql. Ensuite, on retrouve l'interaction habituelle entre Php et MySql. Les enregistrements des images sont enregistrées dans une table sous la forme : source, titre, légende (optionnel), Copyright (optionnel)...<br />
http://www.monsite.com/uploads/france.jpg,france,photo de la France,© Wikimedia Commons<br />
http://www.monsite.com/uploads/suisse.jpg,suisse,photo de la Suisse,© Wikimedia Commons<br />
http://www.monsite.com/uploads/portugal.jpg,portugal,photo du Portugal,© Wikimedia Commons<br />
http://www.monsite.com/uploads/danemark.jpg,danemark,photo du Danemark,© Wikimedia Commons<br />
 */<br />
if (&#36;gallery_bottom)<br />
{<br />
&#160;&#160;&#36;resulttgb = count(&#36;gallery_bottom); // &#34;tgb&#34; comme &#34;Temporary Gallery Bottom&#34; pour individualiser le processus<br />
&#160;&#160;&#36;targettgb = 3;<br />
&#160;&#160;&#36;orphanstgb = fmod(&#36;resulttgb, &#36;targettgb);<br />
&#160;&#160;&#36;totaltgb = (&#36;resulttgb - &#36;orphanstgb);<br />
&#160;&#160;foreach(&#36;gallery_bottom as &#36;key =&#62; &#36;tgb)<br />
&#160;&#160;{<br />
&#160;&#160;&#160;&#160;list(&#36;fulltgb, &#36;alttgb, &#36;txtatgb, &#36;txtbtgb) = explode(&#34;,&#34;, &#36;tgb);<br />
&#160;&#160;&#160;&#160;/* On coupe la chaîne en segments pour récupérer chaque élément. */<br />
&#160;&#160;&#160;&#160;&#36;extfull = array(&#34;.jpg&#34;, &#34;.jpeg&#34;, &#34;.png&#34;, &#34;.gif&#34;);<br />
&#160;&#160;&#160;&#160;&#36;extthumb = array(&#34;-100x100.jpg&#34;, &#34;-100x100.jpeg&#34;, &#34;-100x100.png&#34;, &#34;-100x100.gif&#34;);<br />
&#160;&#160;&#160;&#160;/* Chaque élément est remplacé dans l'ordre des deux tableaux. On convertit le nom de l'image pour afficher le nom de sa vignette, et éviter une double saisie de l'utilisateur. Naturellement, les images &#34;-100x100.jpg&#34; sont déjà stockées ! Ainsi, 'france.jpg' devient 'france-100x100.jpg'. */<br />
&#160;&#160;&#160;&#160;&#36;srctgb = str_ireplace(&#36;extfull, &#36;extthumb, &#36;fulltgb);<br />
&#160;&#160;&#160;&#160;/* 'str_ireplace' n'est pas sensible à la casse, et permet, par exemple, de transformer &#34;.GIF&#34; en &#34;.gif&#34;. */<br />
&#160;&#160;&#160;&#160;{<br />
&#160;&#160;&#160;&#160;&#160;&#160;if ((&#36;key + 1) &#60;= &#36;totaltgb)<br />
&#160;&#160;&#160;&#160;&#160;&#160;{<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;echo '&#60;dl class=&#34;gallery_c&#34;&#62;';<br />
&#160;&#160;&#160;&#160;&#160;&#160;}<br />
&#160;&#160;&#160;&#160;&#160;&#160;else<br />
&#160;&#160;&#160;&#160;&#160;&#160;{<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;if (((&#36;key + 1) &#62; &#36;totaltgb) &#38;&#38; (&#36;orphanstgb == 2))<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;{<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;echo '&#60;dl class=&#34;gallery_b&#34;&#62;';<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;}<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;if (((&#36;key + 1) &#62; &#36;totaltgb) &#38;&#38; (&#36;orphanstgb == 1))<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;{<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;echo '&#60;dl class=&#34;gallery_a&#34;&#62;';<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;}<br />
&#160;&#160;&#160;&#160;&#160;&#160;}<br />
&#160;&#160;&#160;&#160;&#160;&#160;echo '&#60;dt&#62;&#60;a href=&#34;'.&#36;fulltgb.'&#34; title=&#34;'.&#36;alttgb.'&#34;&#62;&#60;img src=&#34;'.&#36;srctgb.'&#34; alt=&#34;'.&#36;alttgb.'&#34; title=&#34;'.&#36;alttgb.'&#34; /&#62;&#60;/a&#62;&#60;/dt&#62;';<br />
&#160;&#160;&#160;&#160;&#160;&#160;/* On concatène chaque élément récupéré tout à l'heure avec 'explode' dans une chaîne Html pour provoquer l'affichage de la vignette et du lien vers l'image. Par commodité, on utilise la même valeur pour les champs 'alt' et 'title'.*/<br />
&#160;&#160;&#160;&#160;&#160;&#160;if (&#36;txtatgb) // Puisque le champ est optionnel<br />
&#160;&#160;&#160;&#160;&#160;&#160;{<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;echo '&#60;dd&#62;'.&#36;txtatgb.'&#60;/dd&#62;';<br />
&#160;&#160;&#160;&#160;&#160;&#160;}<br />
&#160;&#160;&#160;&#160;&#160;&#160;if (&#36;txtbtgb) // Puisque le champ est optionnel<br />
&#160;&#160;&#160;&#160;&#160;&#160;{<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;echo '&#60;dd&#62;'.&#36;txtbtgb.'&#60;/dd&#62;';<br />
&#160;&#160;&#160;&#160;&#160;&#160;}<br />
&#160;&#160;&#160;&#160;&#160;&#160;echo '&#60;/dl&#62;';<br />
&#160;&#160;&#160;&#160;}<br />
&#160;&#160;}<br />
&#160;&#160;echo '&#60;div class=&#34;spacer&#34;&#62;&#60;/div&#62;'; // Pour éviter le flottement d'un élément adjacent avec la propriété Css 'clear: both;' chère à Mark Newhouse<br />
}<br />
?&#62;</code></p>
<p>Ou sans les commentaires&#8230;</p>
<p class="left"><code>&#60;?php<br />
&#36;gallery_bottom = get_post_meta(&#36;post-&#62;ID, 'gallery_bottom', false);<br />
if (&#36;gallery_bottom)<br />
{<br />
&#160;&#160;&#36;resulttgb = count(&#36;gallery_bottom);<br />
&#160;&#160;&#36;targettgb = 3;<br />
&#160;&#160;&#36;orphanstgb = fmod(&#36;resulttgb, &#36;targettgb);<br />
&#160;&#160;&#36;totaltgb = (&#36;resulttgb - &#36;orphanstgb);<br />
&#160;&#160;foreach(&#36;gallery_bottom as &#36;key =&#62; &#36;tgb)<br />
&#160;&#160;{<br />
&#160;&#160;&#160;&#160;&#9;list(&#36;fulltgb, &#36;alttgb, &#36;txtatgb, &#36;txtbtgb) = explode(&#34;,&#34;, &#36;tgb);<br />
&#160;&#160;&#160;&#160;&#36;extfull = array(&#34;.jpg&#34;, &#34;.jpeg&#34;, &#34;.png&#34;, &#34;.gif&#34;);<br />
&#160;&#160;&#160;&#160;&#36;extthumb = array(&#34;-100x100.jpg&#34;, &#34;-100x100.jpeg&#34;, &#160;&#160;&#160;&#160;&#34;-100x100.png&#34;, &#34;-100x100.gif&#34;);<br />
&#160;&#160;&#160;&#160;&#36;srctgb = str_ireplace(&#36;extfull, &#36;extthumb, &#36;fulltgb);<br />
&#160;&#160;&#160;&#160;{<br />
&#160;&#160;&#160;&#160;&#160;&#160;if ((&#36;key + 1) &#60;= &#36;totaltgb)<br />
&#160;&#160;&#160;&#160;&#160;&#160;{<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;echo '&#60;dl class=&#34;gallery_c&#34;&#62;';<br />
&#160;&#160;&#160;&#160;&#160;&#160;}<br />
&#160;&#160;&#160;&#160;&#160;&#160;else<br />
&#160;&#160;&#160;&#160;&#160;&#160;{<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;if (((&#36;key + 1) &#62; &#36;totaltgb) &#38;&#38; (&#36;orphanstgb == 2))<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;{<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;echo '&#60;dl class=&#34;gallery_b&#34;&#62;';<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;}<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;if (((&#36;key + 1) &#62; &#36;totaltgb) &#38;&#38; (&#36;orphanstgb == 1))<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;{<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;echo '&#60;dl class=&#34;gallery_a&#34;&#62;';<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;}<br />
&#160;&#160;&#160;&#160;&#160;&#160;}<br />
&#160;&#160;&#160;&#160;&#160;&#160;echo '&#60;dt&#62;&#60;a href=&#34;'.&#36;fulltgb.'&#34; title=&#34;'.&#36;alttgb.'&#34;&#62;&#60;img src=&#34;'.&#36;srctgb.'&#34; alt=&#34;'.&#36;alttgb.'&#34; title=&#34;'.&#36;alttgb.'&#34; /&#62;&#60;/a&#62;&#60;/dt&#62;';<br />
&#160;&#160;&#160;&#160;&#160;&#160;if (&#36;txtatgb)<br />
&#160;&#160;&#160;&#160;&#160;&#160;{<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;echo '&#60;dd&#62;'.&#36;txtatgb.'&#60;/dd&#62;';<br />
&#160;&#160;&#160;&#160;&#160;&#160;}<br />
&#160;&#160;&#160;&#160;&#160;&#160;if (&#36;txtbtgb)<br />
&#160;&#160;&#160;&#160;&#160;&#160;{<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;echo '&#60;dd&#62;'.&#36;txtbtgb.'&#60;/dd&#62;';<br />
&#160;&#160;&#160;&#160;&#160;&#160;}<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;echo '&#60;/dl&#62;';<br />
&#160;&#160;&#160;&#160;&#160;&#160;}<br />
&#160;}<br />
&#160;echo '&#60;div class=&#34;spacer&#34;&#62;&#60;/div&#62;';<br />
}<br />
?&#62;</code></p>
<p><em>Nota.</em> Depuis que <em>WordPress</em> intègre la gestion des vignettes, nous n&#8217;utilisons plus les champs personnalisés&#160;!</p>
<h3>Stylons les images</h3>
<p>Nous avons utilisé les listes de définition pour afficher les images. La structure de ces listes est commode, grâce à l&#8217;attribut &#60;dd&#62;, optionnel, qui permet ou non d&#8217;ajouter une légende, en restant compatible <acronym title="eXtensible HyperText Markup Language">Xhtml</acronym> Strict. Un exemple d&#8217;utilisation est donné dans l&#8217;excellent article <a href="http://www.pompage.net/pompe/listesdefinitions/" onclick="window.open(this.href); return false;" title="lire l'article Les listes de définitions : mal utilisées ou mal comprises ? (s'ouvre dans une nouvelle fenêtre)"><em>Les listes de définitions&#160;: mal utilisées ou mal comprises&#160;?</em></a></p>
<p>Si une ligne est complète, c&#8217;est-à-dire comporte trois images, l&#8217;attribut <em>gallery_c</em> est utilisé pour les images. Si une ligne est incomplète et comporte deux images, l&#8217;attribut <em>gallery_b</em> est utilisé pour les images. Si une ligne est incomplète et comporte une image, l&#8217;attribut <em>gallery_c</em> est utilisé pour l&#8217;image.</p>
<p class="left"><code>dl.gallery_a, dl.gallery_b {<br />
&#160;&#160;float: left /* Inutile de provoquer le flottement de la dernière galerie, puisqu'il n'y a qu'une image ! */<br />
}<br />
dl.gallery_a dt, dl.gallery_b dt, dl.gallery_c dt, dl.gallery_a dd, dl.gallery_b dd, dl.gallery_c dd {<br />
&#160;&#160;text-align: center<br />
}<br />
dl.gallery_a dd, dl.gallery_b dd, dl.gallery_c dd {<br />
&#160;&#160;font-weight: bold<br />
}<br />
dl.gallery_a {<br />
&#160;&#160;width: 33.33% /* Nous fûmes longtemps persuadé que la version 5.5 d'Internet Explorer interprétait mal les décimales, à tort ! */<br />
}<br />
dl.gallery_b {<br />
&#160;&#160;width: 50%<br />
}<br />
dl.gallery_c {<br />
&#160;&#160;display: block;<br />
&#160;&#160;margin-left: auto;<br />
&#160;&#160;margin-right: auto;<br />
&#160;&#160;width: 100%<br />
}<br />
</code></p>
<p>Avec les largeurs fixes, il devient plus délicat d&#8217;aligner correctement les images, et le code est nettement moins élégant.</p>
<p>Ainsi, soit une feuille de style qui comporte les propriétés suivantes, sachant que la largeur du conteneur est de 625 pixels et celle d&#8217;une image est de 129 pixels avec ses bordures et ses marges&#8230;</p>
<p class="left"><code>dl.gallery_a, dl.gallery_b, dl.gallery_c {<br />
&#160;&#160;float: left<br />
}<br />
dl.gallery_a {<br />
&#160;&#160;margin: 15px 248px /* 248 pixels + 129 pixels + 248 pixels = 625 pixels */<br />
}<br />
dl.gallery_b {<br />
&#160;&#160;margin: 15px 91px /* 91 pixels + 129 pixels + 91 pixels + 91 pixels + 129 pixels + 91 pixels = 622 pixels - on doit se contenter de cette approximation - 91 pixels + 91 pixels, puisque les marges se juxtaposent */<br />
}<br />
dl.gallery_c {<br />
&#160;&#160;margin: 15px 39px; /* 39 pixels + 129 pixels + 39 pixels + 39 pixels + 129 pixels + 39 pixels + 39 pixels + 129 pixels + 39 pixels = 621 pixels - on doit se contenter de cette approximation - 39 pixels + 39 pixels, puisque les marges se juxtaposent */<br />
}<br />
</code></p>
<p><em>Nota</em>. Pour déterminer facilement, la largeur des espaces entre les images, il suffit d&#8217;appliquer le calcul&#160;:</p>
<p class="center"><code>(((largeur du conteneur ou de la page - (nombre d'images x largeur de chaque image))/((nombre d'images + 1) x 2)))</code></p>
<p>Par exemple, la largeur d&#8217;un conteneur est de 618 pixels (cette valeur simple est arbitraire&#160;!). Nous voulons y placer trois images de 150 pixels.</p>
<ul>
<li>Largeur du conteneur ou de la page&#160;: 618 pixels.</li>
<li>Nombre d&#8217;images&#160;: 3.</li>
<li>Largeur de chaque image&#160;: 150 pixels.</li>
<li>150 pixels x 3 images = 450 pixels.</li>
<li>Nombre d&#8217;espaces nécessaires&#160;: 3 images + 1.</li>
<li>Soient <em>(((618 - (3 x 150))/((3 + 1) x 2))) = <strong>21</strong></em>.</li>
<li>Soient (((618 pixels - (3 images x 150 pixels))/((3 espaces + 1) x 2))) = <strong>21 pixels</strong>.</li>
</ul>
<p>Nous avons utilisé des listes de définitions pour centrer nos images, mais notre solution peut s&#8217;adapter à d&#8217;autres types de balises et de contenu.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.iptima.com/2010/02/18/centrer-une-galerie-dimages/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Ajouter des «&#160;Widgets&#160;» à un thème WordPress</title>
		<link>http://www.iptima.com/2008/08/19/ajouter-des-%c2%ab-widgets-%c2%bb-a-un-theme-wordpress/</link>
		<comments>http://www.iptima.com/2008/08/19/ajouter-des-%c2%ab-widgets-%c2%bb-a-un-theme-wordpress/#comments</comments>
		<pubDate>Tue, 19 Aug 2008 17:55:40 +0000</pubDate>
		<dc:creator>Vincent Roulet</dc:creator>
				<category><![CDATA[Conception]]></category>
		<category><![CDATA[WordPress]]></category>
		<category><![CDATA[Cascading Style Sheets]]></category>
		<category><![CDATA[Css]]></category>
		<category><![CDATA[Extensible HyperText Markup Language]]></category>
		<category><![CDATA[feuilles de style]]></category>
		<category><![CDATA[Html]]></category>
		<category><![CDATA[HyperText Markup Language]]></category>
		<category><![CDATA[Hypertext Preprocessor]]></category>
		<category><![CDATA[Php]]></category>
		<category><![CDATA[Widgets]]></category>
		<category><![CDATA[Xhtml]]></category>

		<guid isPermaLink="false">http://www.iptima.com/?p=152</guid>
		<description><![CDATA[Dans WordPress, il est désormais possible d&#8217;ajouter des Widgets dans quatre zones&#160;:

l&#8217;en-tête,
le contenu,
la colonne latérale,
le pied de page.


Le nombre de zones n&#8217;est pas limité&#160;: on peut très bien imaginer un thème avec deux colonnes latérales de Widgets et un pied de page avec trois zones de Widgets&#160;!
La plupart des thèmes disponibles se contente de proposer [...]]]></description>
			<content:encoded><![CDATA[<p>Dans <em>WordPress</em>, il est désormais possible d&#8217;ajouter des <em>Widgets</em> dans quatre zones&#160;:</p>
<ul>
<li>l&#8217;en-tête,</li>
<li>le contenu,</li>
<li>la colonne latérale,</li>
<li>le pied de page.</li>
</ul>
<p><span id="more-152"></span></p>
<p>Le nombre de zones n&#8217;est pas limité&#160;: on peut très bien imaginer un thème avec deux colonnes latérales de <em>Widgets</em> et un pied de page avec trois zones de <em>Widgets</em>&#160;!</p>
<p>La plupart des thèmes disponibles se contente de proposer une ou plusieurs colonnes latérales <em>Widget Ready</em>. Or, pour des raisons esthétiques ou de séméiologie (!), on peut vouloir afficher <em>WordPress</em> sur une colonne, avec les informations complémentaires dans le pied de page.</p>
<p>Nous allons donc voir ici, à travers quelques codes simples que nous avons développés (nous préfèrerons ici la pratique à la théorie, car <em>c&#8217;est en forgeant qu&#8217;on devient forgeron</em>), comment ajouter des <em>Widgets</em> à un thème dans une colonne ou dans un pied de page. Leur adaptation demandera un minimum d&#8217;effort, nous en sommes persuadé&#8230;</p>
<p>Dans notre premier thème, nous nous contenterons d&#8217;afficher une deuxième colonne latérale dans le corps de la page affichant des <em>Widgets</em>&#160;; dans le deuxième, nous créerons un pied de page développé, qui comprendra trois zones de <em>Widgets</em>. </p>
<p>Précisions au préalable que la <em>widgetization</em> d&#8217;un thème demande la modification de trois fichiers&#160;:</p>
<ul>
<li>le fichier <em>functions.php</em>,</li>
<li>la feuille de style que nous appellerons par commodité <em>styles.css</em>,</li>
<li>le fichier de destination, <em>sidebar.php</em> ou <em>footer.php</em>, selon la zone de destination des <em>widgets</em> dans nos exemples présentés ici.</li>
</ul>
<h3>Le fichier <em>functions.php</em></h3>
<p>Le fichier <em>functions.php</em> comportera l&#8217;instruction suivante pour notre thème à la deuxième colonne&#160;:</p>
<p><code>&#60;?php<br />
if (function_exists('register_sidebar'))<br />
register_sidebar(array('name'=&#62;'barre',<br />
&#160;&#160;'before_widget' =&#62; '&#60;div id=&#34;%1&#36;s&#34; class=&#34;widget_sidebar %2&#36;s&#34;&#62;',<br />
&#160;&#160;'after_widget' =&#62; '&#60;/div&#62;',<br />
&#160;&#160;'before_title' =&#62; '&#60;h2 class=&#34;widgettitle&#34;&#62;',<br />
&#160;&#160;'after_title' =&#62; '&#60;/h2&#62;',<br />
 ));<br />
 ?&#62;</code></p>
<p>Ici, <em>sidebar</em> a été utilisé au singulier, car nous demandons la création d&#8217;une seule zone. </p>
<p>Pour notre pied de page développé, nous écrirons&#160;:</p>
<p><code>&#60;?php<br />
if (function_exists('register_sidebar'))<br />
register_sidebars(3,array(<br />
&#160;&#160;'before_widget' =&#62; '&#60;div id=&#34;%1&#36;s&#34; class=&#34;widget_sidebar %2&#36;s&#34;&#62;',<br />
&#160;&#160;'after_widget' =&#62; '&#60;/div&#62;',<br />
&#160;&#160;'before_title' =&#62; '&#60;h2 class=&#34;widgettitle&#34;&#62;',<br />
&#160;&#160;'after_title' =&#62; '&#60;/h2&#62;',<br />
));</code></p>
<p>Ici, la déclaration est la même que précédemment, à l&#8217;exception du chiffre <strong>3</strong> qui précise le nombre de <em>Sidebars</em> attendu et de l&#8217;ajout de la marque du <strong>pluriel</strong> à <em>sidebar</em>.</p>
<p>Cette solution présente un inconvénient ergonomique&#160;: aucun nom ne sera donné à la zone, au risque de créer une confusion dans l&#8217;esprit de l&#8217;utilisateur. Aussi vaut-il mieux déclarer un par un chaque <em>widget</em>, en leur attribuant un nom significatif&#160;: par exemple, <em>pied_gauche</em>, <em>pied_centre</em> et <em>pied_droit</em>.</p>
<h3>Le fichier <em>style.css</em></h3>
<p>Après avoir déclaré les <em>Widgets</em> et le formatage attendu, nous pouvons les styliser dans le fichier <em>style.css</em> comme suit dans notre thème à la colonne&#160;:</p>
<p><code>#sidebar {<br />
/* 8 juin 2010. La syntaxe de cette feuille de style est laide comme les suivantes dans l'article, car nous avons progressé depuis la rédaction de l'article. Cependant, nous laissons l'article en l'état... qui pourra peut-être éclairer les débutants. */<br />
&#160;&#160;float: left;<br />
&#160;&#160;margin: 0 0 0 20px;<br />
&#160;&#160;padding: 0<br />
&#160;&#160;width: 320px<br />
}<br />
#sidebar ul {<br />
&#160;&#160;margin-bottom: 20px<br />
}<br />
#sidebar a {<br />
&#160;&#160;color: #000<br />
}<br />
.widget_sidebar {<br />
&#160;&#160;display: block;<br />
&#160;&#160;float: left;<br />
&#160;&#160;font-size:1em;<br />
&#160;&#160;margin: 0 0 5px 0;<br />
&#160;&#160;padding: 0;<br />
&#160;&#160;width: 320px<br />
}<br />
.widget_sidebar h1, .widget_sidebar h2, .widget_sidebar h3 {<br />
&#160;&#160;background: #ffe6e6;<br />
&#160;&#160;border-bottom: 1px solid #000;<br />
&#160;&#160;border-top: 1px solid #000;<br />
&#160;&#160;color: #fff;<br />
&#160;&#160;margin: 0;<br />
&#160;&#160;padding : 2px 0px 2px 5px<br />
}<br />
.widget_sidebar ul h2 {<br />
&#160;&#160;border-bottom: dashed 1px #000;<br />
&#160;&#160;font-size: 1.5em;<br />
&#160;&#160;padding-bottom: 10px<br />
}<br />
.widget_sidebar ul li {<br />
&#160;&#160;border-bottom: dashed 1px #000;<br />
&#160;&#160;font-size: 1.1em;<br />
&#160;&#160;line-height: 1.6em;<br />
&#160;&#160;list-style: none<br />
}<br />
.widget_sidebar ul ul li {<br />
&#160;&#160;border-bottom: dashed 1px #000<br />
}<br />
#sidebar a:hover {<br />
&#160;&#160;text-decoration: underline<br />
}<br />
.widget_sidebar p {<br />
&#160;&#160;font-size: 1em;<br />
&#160;&#160;padding: 10px;<br />
&#160;&#160;text-align: center<br />
}<br />
/*--------------Widgets--------------*/<br />
li.widget h2 {<br />
&#160;&#160;color: #000;<br />
}<br />
/*-------------Calendar-----------------*/<br />
#wp-calendar {<br />
&#160;&#160;margin-top: 5px;<br />
&#160;&#160;text-align: left;<br />
&#160;&#160;width: 180px<br />
}<br />
#wp-calendar th {<br />
&#160;&#160;margin-top: 5px<br />
}<br />
#wp-calendar caption {<br />
&#160;&#160;margin-top: 5px;<br />
&#160;&#160;font-size: 1.2em<br />
</code></p>
<p>Pour le pied de page, nous le styliserons ainsi&#8230;</p>
<p><code>#footer_sidebar {<br />
&#160;&#160;display: block;<br />
&#160;&#160;height: 260px;<br />
&#160;&#160;margin-left: 25px;<br />
&#160;&#160;margin-right: 25px;<br />
&#160;&#160;padding-top: 25px<br />
}<br />
#footer_sidebar_1 {<br />
&#160;&#160;float: left;<br />
&#160;&#160;margin-right: 25px;<br />
&#160;&#160;width: 180px<br />
}<br />
#footer_sidebar_2 {<br />
&#160;&#160;float: left;<br />
&#160;&#160;margin-right: 25px;<br />
&#160;&#160;width: 180px<br />
}<br />
#footer_sidebar_3 {<br />
&#160;&#160;float: left;<br />
&#160;&#160;width: 180px<br />
}<br />
#footer ul {<br />
&#160;&#160;margin-bottom: 20px<br />
}<br />
.widget_sidebar h1, .widget_sidebar h2, .widget_sidebar h3 {<br />
&#160;&#160;color: #000;<br />
&#160;&#160;border-bottom: 1px solid #000;<br />
&#160;&#160;border-top: 1px solid #000;<br />
&#160;&#160;margin: 0;<br />
&#160;&#160;padding: 2px 0px 2px 0px;<br />
&#160;&#160;text-align: center<br />
}<br />
.widget_sidebar ul h2 {<br />
&#160;&#160;border-bottom: dashed 1px #000;<br />
&#160;&#160;font-size: 1.5em;<br />
&#160;&#160;padding-bottom: 10px<br />
}<br />
.widget_sidebar ul li {<br />
&#160;&#160;border-bottom: dashed 1px #000;<br />
&#160;&#160;font-size: 1.1em;<br />
&#160;&#160;list-style: none;<br />
&#160;&#160;line-height: 1.6em<br />
}<br />
.widget_sidebar ul ul li {<br />
&#160;&#160;border-bottom: dashed 1px #000<br />
}<br />
#sidebar a:hover {<br />
&#160;&#160;text-decoration: underline<br />
}<br />
.widget_sidebar p {<br />
&#160;&#160;color: #000;<br />
&#160;&#160;font-size: 1em;<br />
&#160;&#160;padding: 10px;<br />
&#160;&#160;text-align: center<br />
}<br />
/*--------------Widgets--------------*/<br />
li.widget h2 {<br />
&#160;&#160;color: #000<br />
}<br />
/*-------------Calendar-----------------*/<br />
#wp-calendar {<br />
&#160;&#160;margin-top: 5px;<br />
&#160;&#160;text-align: left;<br />
&#160;&#160;width: 180px<br />
}<br />
#wp-calendar th {<br />
&#160;&#160;margin-top: 5px<br />
}<br />
#wp-calendar caption {<br />
&#160;&#160;font-size: 1.2em;<br />
&#160;&#160;margin-top: 5px<br />
</code></p>
<p>(<em>Nota</em>. Pour les exemples, nous nous sommes contenté de la couleur noire, qui n&#8217;affichera pas grand&#8217;chose&#160;!)</p>
<h3>Déclaration des <em>Widgets</em> dans les fichiers de destination</h3>
<p>Enfin, il reste à déclarer les <em>Widgets</em> dans la colonne de notre premier thème. Il suffit d&#8217;ajouter à notre fichier <em>sidebar.php</em> la déclaration&#8230;<br />
<code>&#60;?php<br />
if ( !function_exists('dynamic_sidebar')<br />
|| !dynamic_sidebar(1) ) : ?&#62;<br />
&#60;?php endif; ?&#62;</code></p>
<p>Pour notre fichier <em>footer.php</em> du deuxième thème, l&#8217;instruction sera&#160;:</p>
<p><code>&#60;div id=&#34;footer_sidebar&#34;&#62;<br />
&#160;&#160;&#60;div id=&#34;footer_sidebar_1&#34;&#62;<br />
&#160;&#160;&#60;?php if (!function_exists('dynamic_sidebar')<br />
|| !dynamic_sidebar(1)) : ?&#62;<br />
&#160;&#160;&#60;?php endif; ?&#62;<br />
&#160;&#160;&#60;/div&#62;<br />
&#160;&#160;&#60;div id=&#34;footer_sidebar_2&#34;&#62;<br />
&#160;&#160;&#60;?php if (!function_exists('dynamic_sidebar')<br />
|| !dynamic_sidebar(2)) : ?&#62;<br />
&#160;&#160;&#60;?php endif; ?&#62;<br />
&#160;&#160;&#60;/div&#62;<br />
&#160;&#160;&#60;div id=&#34;footer_sidebar_3&#34;&#62;<br />
&#160;&#160;&#60;?php if (!function_exists('dynamic_sidebar')<br />
|| !dynamic_sidebar(3)) : ?&#62;<br />
&#160;&#160;&#60;?php endif; ?&#62;<br />
&#160;&#160;&#60;/div&#62;<br />
&#60;/div&#62;</code></p>
<p>Traditionnellement, cette déclaration est placée en tête du fichier, le restant étant laissé vide. Néanmoins, il est possible de coder <em>en dur</em> certains éléments, et d&#8217;ajouter la déclaration à la suite. Ainsi, l&#8217;ajout de <em>Widgets</em> dans l&#8217;interface d&#8217;administration de <em>WordPress</em> n&#8217;affectera pas le codage.</p>
<p>À l&#8217;usage, nous avons noté un dysfonctionnement. Si trois zones de <em>widgets</em> sont prévues dans le pied de page à gauche, au centre et à droite, la zone centrale ne peut être laissée vide&#160;: sinon, les <em>Widgets</em> placés dans la zone de droite occupent le centre. Pour obvier à cet inconvénient, il suffit d&#8217;ajouter un <em>Widget</em> texte vide dans la zone centrale, avec un espace insécable.</p>
<p>(<em>Nota</em>. Nous prions nos lecteurs de nous excuser pour les anglicismes, plus ou moins incontournables en la matière&#160;!)</p>
]]></content:encoded>
			<wfw:commentRss>http://www.iptima.com/2008/08/19/ajouter-des-%c2%ab-widgets-%c2%bb-a-un-theme-wordpress/feed/</wfw:commentRss>
		<slash:comments>31</slash:comments>
		</item>
		<item>
		<title>Accessibilité avec WordPress</title>
		<link>http://www.iptima.com/2007/09/21/accessibilite-avec-wordpress/</link>
		<comments>http://www.iptima.com/2007/09/21/accessibilite-avec-wordpress/#comments</comments>
		<pubDate>Fri, 21 Sep 2007 18:50:17 +0000</pubDate>
		<dc:creator>Vincent Roulet</dc:creator>
				<category><![CDATA[Conception]]></category>
		<category><![CDATA[WordPress]]></category>
		<category><![CDATA[abréviations]]></category>
		<category><![CDATA[accessibilité]]></category>
		<category><![CDATA[Cascading Style Sheets]]></category>
		<category><![CDATA[Css]]></category>
		<category><![CDATA[déficients visuels]]></category>
		<category><![CDATA[Extensible HyperText Markup Language]]></category>
		<category><![CDATA[feuilles de style]]></category>
		<category><![CDATA[handicapés]]></category>
		<category><![CDATA[handicaps]]></category>
		<category><![CDATA[Html]]></category>
		<category><![CDATA[HyperText Markup Language]]></category>
		<category><![CDATA[images]]></category>
		<category><![CDATA[liens]]></category>
		<category><![CDATA[politique d'accessibilité]]></category>
		<category><![CDATA[raccourcis claviers]]></category>
		<category><![CDATA[scripts]]></category>
		<category><![CDATA[sémantique]]></category>
		<category><![CDATA[Tableaux]]></category>
		<category><![CDATA[W3c]]></category>
		<category><![CDATA[Xhtml]]></category>

		<guid isPermaLink="false">http://www.iptima.com/2007/09/21/accessibilite-avec-wordpress/</guid>
		<description><![CDATA[L&#8217;accessibilité des sites est une question fondamentale dans la conception de sites Web. Pour l&#8217;instant, aucune obligation n&#8217;est imposée aux maîtres-toile privés, mais il semble que la réglementation doive évoluer.

Aussi avons-nous cherché une solution nous permettant de rendre accessible notre weblogue.
Après avoir décrit les principes de l&#8217;accessibilité, nous essaierons de dégager des solutions pour WordPress
Considérations [...]]]></description>
			<content:encoded><![CDATA[<p>L&#8217;accessibilité des sites est une question fondamentale dans la conception de sites Web. Pour l&#8217;instant, aucune obligation n&#8217;est imposée aux <em>maîtres-toile</em> privés, mais il semble que la réglementation doive évoluer.</p>
<p><span id="more-56"></span></p>
<p>Aussi avons-nous cherché une solution nous permettant de rendre accessible notre weblogue.</p>
<p>Après avoir décrit les principes de l&#8217;accessibilité, nous essaierons de dégager des solutions pour <em>WordPress</em></p>
<h3>Considérations générales sur l&#8217;accessibilité</h3>
<p>Rendre un site accessible, c&#8217;est permettre sa consultation non seulement par des déficients visuels ou moteurs (sans compter les handicapés auditifs, cognitifs ou neurologiques), mais aussi par des internautes disposant d&#8217;une connexion en bas débit assurée par <acronym title="Réseau Téléphonique Commuté">Rtc</acronym> ou par <acronym title="Global System for Mobile Communications">Gsm</acronym>. Enfin, c&#8217;est respecter la navigation et prendre en compte les différences linguistiques. La connaissance de ces contraintes et des solutions correspondantes permet de mieux concevoir ses pages au bénéfice de l&#8217;ensemble de ses visiteurs.</p>
<h4>Accessibilité pour les déficients visuels</h4>
<p>Les déficients visuels correspondent aux mal-voyants, daltoniens et aux aveugles. Pour les mal-voyants, il faut autoriser un redimensionnement du texte en utilisant des tailles de police proportionnelles. Idéalement, il faudrait que l&#8217;ensemble des valeurs des feuilles de style soient exprimé en valeurs relatives, par exemple avec l&#8217;unité <em>em</em>. Le contraste doit être suffisant entre les entre couleur de texte et couleur de fond pour les daltoniens.</p>
<p>Quant aux non-voyants, ils utilisent des lecteurs Braille. JavaScript ne peut servir à naviguer ou à informer, sans équivalents textuels. Autrement exprimé, le langage JavaScript ne doit ajouter qu&#8217;une fonctionnalité supplémentaire mais ne jamais la remplacer. Pour la même raison, les textes ne peuvent être affichés sous la forme d&#8217;images. Les images doivent être légendées avec les balises <em>alt</em> et <em>title</em>&#160;; lorsque les images ne sont pas significatives, c&#8217;est-à-dire décoratives, les balises peuvent être laissées vides.</p>
<p>Il faut utiliser <acronym title="Cascading Style Sheets">Css</acronym> et la sémantique <acronym title="eXtensible HyperText Markup Language">Xhtml</acronym> en renonçant à l&#8217;usage de tableaux pour la mise en page, hormis pour la présentation de données. Pour ne pas pas entretenir la confusion, un lien hypertexte doit s&#8217;ouvrir dans la même fenêtre. Il convient de préciser dans le lien hypertexte la langue utilisée, lorsque la ressource est dans une langue différente de celle du texte&#160;; à cet effet, on utilise dans l&#8217;appel du lien une balise de forme <em></em> pour un document en anglais. Enfin, la signification des acronymes doit être précisée, car elle est lue par les lecteurs Braille.</p>
<p>Afin de valider l&#8217;accessibilité de son site pour les déficients visuels, la solution la plus probante consiste à utiliser un navigateur en mode texte&#160;: si chaque information est affichée, la conception du site est correcte.</p>
<p><!--next--></p>
<h4>Accessibilité pour les handicapés moteurs</h4>
<p>Comme les handicapés moteurs ne peuvent recourir à une souris, il faut envisager une navigation spécifique. À cet effet, le concepteur d&#8217;un site peut prévoir que la navigation s&#8217;opérera à l&#8217;aide la touche <em>tabulation</em> du clavier&#160;: chaque lien hypertexte (ou entrée de formulaire) est affecté d&#8217;une valeur <em>tabindex</em>. Prenons la valeur <em>tabindex=&#8221;3&#8221;</em>&#160;: depuis le haut de la page, trois appuis sur la touche <em>tabulation</em> donneront le <em>focus</em> à ce lien, qui s&#8217;ouvrira en pressant la touche <em>Entrée</em>. Pour informer le visiteur de la valeur, il suffit de l&#8217;indiquer dans la balise <em>title</em> du lien. Lorsqu&#8217;aucun <em>tabindex</em> n&#8217;est défini dans la page, l&#8217;appui sur la touche <em>tabulation</em> permet en principe de naviguer de lien en lien, du haut en bas de la page.</p>
<p>Une autre solution passe par la mise en œuvre de raccourcis claviers (ou <em>Accesskeys</em>)&#160;: l&#8217;utilisateur appuie sur une combinaison de touches pour parvenir à l&#8217;information souhaitée. Cette solution, séduisante en théorie, n&#8217;est pourtant pas la panacée. En effet, les raccourcis clavier demandent des contorsions digitales à un utilisateur handicapé&#160;! Ensuite, même lorsqu&#8217;ils sont reconnus par les agents utilisateurs, les raccourcis clavier peuvent entrer en conflit avec les raccourcis implémentés dans ces navigateurs. Pour cette raison, le nombre d&#8217;<em>Accesskeys</em> est fort limité. Le gouvernement britannique fournit des directives d&#8217;accessibilité en proposant les raccourcis claviers suivants&#160;:</p>
<ul>
<li>S - passer la navigation</li>
<li>1 - accueil</li>
<li>2 - actualités</li>
<li>3 - plan du site</li>
<li>4 - recherche</li>
<li>5 - foire aux questions</li>
<li>6 - aide</li>
<li>7 - procédure de plainte ou contact</li>
<li>8 - conditions d&#8217;utilisation</li>
<li>9 - retour d&#8217;information</li>
<li>0 - liste des raccourcis clavier</li>
</ul>
<p>Ainsi, pour utiliser le raccourci clavier 0, il suffira d&#8217;ajouter au lien la valeur <em>Accesskey=&#8221;0&#8221;</em>.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.iptima.com/2007/09/21/accessibilite-avec-wordpress/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
	</channel>
</rss>
