<?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>Développement Web, Webdesign, SEO, Multimédia - Guillaume Voisin, Ingénieur Web &#187; classes CSS</title>
	<atom:link href="http://www.guillaumevoisin.fr/tag/classes-css/feed" rel="self" type="application/rss+xml" />
	<link>http://www.guillaumevoisin.fr</link>
	<description>Switch on creativity !</description>
	<lastBuildDate>Tue, 07 Feb 2012 13:26:57 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
		<item>
		<title>Le CSS Orienté Objet</title>
		<link>http://www.guillaumevoisin.fr/internet/le-css-oriente-objet</link>
		<comments>http://www.guillaumevoisin.fr/internet/le-css-oriente-objet#comments</comments>
		<pubDate>Thu, 24 Sep 2009 10:09:58 +0000</pubDate>
		<dc:creator>Gui</dc:creator>
				<category><![CDATA[CSS]]></category>
		<category><![CDATA[Développement]]></category>
		<category><![CDATA[Internet]]></category>
		<category><![CDATA[classes CSS]]></category>
		<category><![CDATA[CSS Orienté Objet]]></category>
		<category><![CDATA[héritage]]></category>
		<category><![CDATA[POO]]></category>
		<category><![CDATA[structure]]></category>

		<guid isPermaLink="false">http://www.guillaumevoisin.fr/blog/?p=348</guid>
		<description><![CDATA[La Programmation Orientée Objet est un concept qui a fait ses preuves dans la conception de sites internet. En effet, ...]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.guillaumevoisin.fr/blogwp/wp-content/uploads/2009/09/css.jpg"><img class="alignnone size-full wp-image-862" title="CSS" src="http://www.guillaumevoisin.fr/blogwp/wp-content/uploads/2009/09/css.jpg" alt="" width="591" height="148" /></a></p>
<p>La <a href="http://fr.wikipedia.org/wiki/Programmation_orient%C3%A9e_objet">Programmation Orientée Objet</a> est un <strong>concept qui a fait ses preuves</strong> dans la conception de sites internet.</p>
<p>En effet, elle permet d&#8217;avoir un code <strong>structuré</strong>, <strong>facilement réutilisable et dont la mise à jour est rapide et aisée</strong>.</p>
<p><span id="more-348"></span></p>
<h2>Pourquoi ne pas l&#8217;adapter au CSS ?</h2>
<p>A priori, le CSS n&#8217;a pas grand chose à voir avec de la <acronym title="Programmation Orientée Objet">POO</acronym>. Pourtant, à y regarder de plus près, on y retrouve des concepts bien familiers:</p>
<ul>
<li>Système de Classes</li>
<li>Propriétés</li>
<li>Héritage</li>
</ul>
<h2>Comment l&#8217;appliquer au CSS</h2>
<h3>Les classes CSS</h3>
<p>Plutôt que d&#8217;attribuer à chaque élément de mise en page une classe CSS dont les propriétés sont <strong>spécifiques </strong>à cet élément précis, on peut tout à fait prévoir de créer des <strong>classes génériques</strong> que l&#8217;on utilisera au besoin selon la mise en page souhaitée.</p>
<p><span style="color: #ff6600;">Exemple ci-dessous d&#8217;une mise en page dite &laquo;&nbsp;spécifique&nbsp;&raquo;:</span></p>
<p><em>index.html</em></p>
<pre class="brush: xml; title: ; notranslate">
&lt;div class=&quot;photo&quot;&gt;
  &lt;p&gt;Une photo: &lt;img src=&quot;maphoto.jpg&quot; alt=&quot;Ma Photo&quot; /&gt;&lt;/p&gt;
&lt;/div&gt;
</pre>
<p><em>style.css</em></p>
<pre class="brush: css; title: ; notranslate">
.photo{
    float:left;
    font-style:italic;
    font-weight:bold;
    width:50%
}
</pre>
<p>Il est évident que le code CSS ci-dessous est <strong>exclusivement réservé</strong> à cet élément &laquo;&nbsp;photo&nbsp;&raquo;. Pour des éléments quasi <strong>similaires </strong>(correspondance de deux voire trois propriétés), le code CSS devient <strong>redondant</strong>, ce qui implique un <strong>alourdissement du poids </strong>de la feuille de style et la nécessité de passer dans chacune des classes concernées lors de mises à jour.</p>
<p><span style="color: #ff6600;">Exemple ci-dessous d&#8217;une mise en page dite &laquo;&nbsp;orientée objet&nbsp;&raquo;</span></p>
<p><em>index.html</em></p>
<pre class="brush: xml; title: ; notranslate">
&lt;div class=&quot;floatleft strong italic half&quot;&gt;
  &lt;p&gt;Une photo: &lt;img src=&quot;maphoto.jpg&quot; alt=&quot;Ma Photo&quot; /&gt;&lt;/p&gt;
&lt;/div&gt;
</pre>
<p><em>style.css</em></p>
<pre class="brush: css; title: ; notranslate">
.floatleft{
    float:left
}

.strong{
    font-weight:bold
}

.italic{
    font-style:italic
}

.half{
    width:50%
}
</pre>
<p>Ici au contraire, le code est:</p>
<ul>
<li>&laquo;&nbsp;générique&nbsp;&raquo;,</li>
<li>réutilisable sur d&#8217;autres éléments,</li>
<li>compréhensible,</li>
<li>explicite,</li>
<li>n&#8217;alourdit pas la feuille de style (seulement un peu l&#8217;index.html vous me direz &#8230;)</li>
</ul>
<p>La nomenclature des classes CSS est importante et doit être bien écrite pour être réutilisable. Ainsi, il ne faut pas écrire:</p>
<pre class="brush: css; title: ; notranslate">
p.chapeau span.lettrine{
    font-size:2.5em
}
</pre>
<p>Mais</p>
<pre class="brush: css; title: ; notranslate">
.chapeau .lettrine{
    font-size:2.5em
}
</pre>
<p>De cette façon, vous pouvez changer à souhait le code xhtml mais aussi utiliser ces classes sur d&#8217;autres éléments.</p>
<h3>L&#8217;héritage</h3>
<p>Quoique vous fassiez, vous l&#8217;utilisez. A partir du moment où vous définissez un <strong>sous ensemble</strong>, c&#8217;est de l&#8217;héritage. Par exemple :</p>
<pre class="brush: css; title: ; notranslate">
.mondiv .header p{
    margin:0 10px
}
</pre>
<p>Après, il convient de l&#8217;utiliser à bon escient.</p>
<p>Trop de détails encombre la feuille de style et oblige à redéfinir les propriétés par la suite.</p>
<p>Ainsi:</p>
<pre class="brush: css; title: ; notranslate">
#header #bandeau .top ul li a{
    text-decoration:underline
}
</pre>
<p>peut se réduire à :</p>
<pre class="brush: css; title: ; notranslate">
#header .top li a{
    text-decoration:underline
}
</pre>
<p>De manière générale, il est plus intéressant d&#8217;appliquer des styles par héritage que par définition de classes. De cette manière, il est plus simple de changer la structure sans devoir repasser sur chacun des éléments afin d&#8217;y changer la classe.</p>
<p>Exemple:</p>
<pre class="brush: xml; title: ; notranslate">
&lt;div&gt;
  &lt;ul&gt;
    &lt;li&gt;&lt;p class=&quot;itemlist&quot;&gt;Item 1&lt;/p&gt;&lt;/li&gt;
    &lt;li&gt;&lt;p class=&quot;itemlist&quot;&gt;Item 2&lt;/p&gt;&lt;/li&gt;
  &lt;/ul&gt;
&lt;/div&gt;
</pre>
<p>Avec comme feuille de style:</p>
<pre class="brush: css; title: ; notranslate">
.itemlist{
    padding:5px
}
</pre>
<p>peut être remplacé par:</p>
<pre class="brush: xml; title: ; notranslate">
&lt;div class=&quot;list&quot;&gt;
  &lt;ul&gt;
    &lt;li&gt;&lt;p&gt;Item 1&lt;/p&gt;&lt;/li&gt;
    &lt;li&gt;&lt;p&gt;Item 2&lt;/p&gt;&lt;/li&gt;
  &lt;/ul&gt;
&lt;/div&gt;
</pre>
<p>et</p>
<pre class="brush: css; title: ; notranslate">
.list li p{
    padding:5px
}
</pre>
<p>Enfin, sachez qu&#8217;en utilisant trop d&#8217;héritage vous pourriez rencontrer des problèmes de redéfinition de classe.</p>
<p>En effet, mettons que vous avez cette classe dans votre page principale:</p>
<pre class="brush: css; title: ; notranslate">
#content .header p{
    color:blue
}
</pre>
<p>Et que vous voulez qu&#8217;en règle générale tous les paragraphes du &laquo;&nbsp;header&nbsp;&raquo; soient de couleur rouge. Vous écririez logiquement :</p>
<pre class="brush: css; title: ; notranslate">
.header p{
    color:red
}
</pre>
<p>Eh bien, malheureusement, cette dernière propriété ne sera pas prise en compte car la définition précédente à l&#8217;aide d&#8217;un <strong>identifiant </strong>est <strong>prioritaire </strong>par rapport à la définition par la <strong>classe</strong>.</p>
<p>Vous pourriez toutefois ruser en écrivant :</p>
<pre class="brush: css; title: ; notranslate">
.header p{
    color:red !important /* Prend le pas sur toutes les définitions */
}
</pre>
<p>Mais ce n&#8217;est pas du joli joli !</p>
<h2>Conclusion</h2>
<p>Voici donc un aperçu du <strong>CSS Orienté Objet</strong>, une façon simple, logique et structurée d&#8217;améliorer votre intrégration xHTML, qui vous fera gagner du temps précieux, et rendra votre code nettement plus lisible et réutilisable !</p>
<h2>Aller plus loin &#8230;</h2>
<ul>
<li><a href="http://www.exotux.info/index.php?post/2009/03/01/OO-CSS-ou-CSS-orient%C3%A9-objet" rel="external">Présentation du concept de CSS Orienté Objet</a></li>
<li><a href="http://www.alsacreations.com/tuto/lire/545-Comprendre-l-heritage-et-la-parente-des-styles-CSS.html" rel="external">Comprendre l&#8217;héritage CSS</a></li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://www.guillaumevoisin.fr/internet/le-css-oriente-objet/feed</wfw:commentRss>
		<slash:comments>7</slash:comments>
		</item>
	</channel>
</rss>

<!-- Performance optimized by W3 Total Cache. Learn more: http://www.w3-edge.com/wordpress-plugins/

Page Caching using disk: enhanced

Served from: guillaumevoisin.fr @ 2012-02-07 19:35:35 -->
