<?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; CSS Orienté Objet</title>
	<atom:link href="http://www.guillaumevoisin.fr/tag/css-oriente-objet/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>Tip CSS: écrivez moins avec LESS !</title>
		<link>http://www.guillaumevoisin.fr/css/tip-css-ecrivez-moins-avec-less</link>
		<comments>http://www.guillaumevoisin.fr/css/tip-css-ecrivez-moins-avec-less#comments</comments>
		<pubDate>Mon, 15 Nov 2010 16:20:31 +0000</pubDate>
		<dc:creator>Gui</dc:creator>
				<category><![CDATA[CSS]]></category>
		<category><![CDATA[Tips]]></category>
		<category><![CDATA[CSS Orienté Objet]]></category>
		<category><![CDATA[less]]></category>

		<guid isPermaLink="false">http://www.guillaumevoisin.fr/?p=854</guid>
		<description><![CDATA[Je vous parlais il y a quelque temps d&#8217;avoir une approche orientée objet dans l&#8217;écriture des feuilles de styles, voici ...]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.guillaumevoisin.fr/blogwp/wp-content/uploads/2010/11/less.jpg"><img class="alignnone size-full wp-image-855" title="Réécrivez vos feuilles de style avec LESS" src="http://www.guillaumevoisin.fr/blogwp/wp-content/uploads/2010/11/less.jpg" alt="" width="590" height="228" /></a></p>
<p>Je vous parlais il y a quelque temps d&#8217;avoir une <a href="http://www.guillaumevoisin.fr/blog/internet/le-css-oriente-objet" rel="external">approche orientée objet dans l&#8217;écriture des feuilles de styles</a>, voici maintenant un réel <a href="http://lesscss.org/" rel="external">framework Javascript &laquo;&nbsp;LESS&nbsp;&raquo;</a> qui apporte à vos CSS un <strong>réel comportement objet</strong>.</p>
<p>Le but de LESS est de vous apporter un <strong>confort et un gain de temps</strong> dans l&#8217;écriture des CSS ainsi qu&#8217;une <strong>réelle logique de développement</strong>. L&#8217;approche Orientée Objet a déjà fait ses preuves en matière de web, tous les CMS sont basés sur des frameworks orientés objet, alors pourquoi pas le CSS ?</p>
<p><span id="more-854"></span></p>
<h2>Principe</h2>
<p>Il y a <strong>deux méthodes</strong> pour faire fonctionner ce framework. La première, que nous n&#8217;utiliserons pas ici, est de <strong>compiler le CSS</strong> au <strong>format .less</strong> directement depuis une console (basé sur Ruby), la deuxième est d&#8217;<strong>appeler un fichier JS qui va interpréter à la volée</strong> ce CSS.</p>
<h2>Introduction</h2>
<p>Pour démontrer l&#8217;éfficacité de LESS, nous allons créer une simple page web &#8211; deux colonnes avec un peu de CSS.</p>
<p>Voici notre page HTML :</p>
<div id="_mcePaste" style="position: absolute; left: -10000px; top: 0px; width: 1px; height: 1px; overflow: hidden;">brewfestgb</div>
<pre class="brush: xml; title: ; notranslate">
&lt;head&gt;
     &lt;title&gt;Ecrivez moins avec Less&lt;/title&gt;
     &lt;meta http-equiv=&quot;Content-Type&quot; content=&quot;text/html; charset=utf-8&quot; /&gt;

     &lt;link href=&quot;css/style.less&quot; rel=&quot;stylesheet/less&quot; type=&quot;text/css&quot; /&gt;
	 &lt;script type=&quot;text/javascript&quot;
	 src=&quot;http://lesscss.googlecode.com/files/less-1.0.35.min.js&quot;&gt;&lt;/script&gt;
&lt;/head&gt;
&lt;body&gt;

&lt;div id=&quot;global&quot;&gt;

	&lt;div id=&quot;header&quot;&gt;
		&lt;h1&gt;Mon beau titre&lt;/h1&gt;
	&lt;/div&gt;

	&lt;div id=&quot;container&quot;&gt;

		&lt;div id=&quot;page&quot;&gt;
			&lt;h2&gt;Content&lt;/h2&gt;
			&lt;p&gt;Lorem ipsum ...&lt;/p&gt;

			&lt;p&gt;Lorem ipsum ...&lt;/p&gt;

			&lt;p&gt;Lorem ipsum ...&lt;/p&gt;
		&lt;/div&gt;

		&lt;div id=&quot;sidebar&quot;&gt;

			&lt;div class=&quot;box&quot;&gt;
				&lt;h3&gt;Title&lt;/h3&gt;
				&lt;p&gt;Lorem ipsum ...&lt;/p&gt;
			&lt;/div&gt;

			&lt;div class=&quot;box&quot;&gt;
				&lt;h3&gt;Title&lt;/h3&gt;
				&lt;p&gt;Lorem ipsum ...&lt;/p&gt;
			&lt;/div&gt;

			&lt;div class=&quot;box&quot;&gt;
				&lt;h3&gt;Title&lt;/h3&gt;
				&lt;p&gt;Lorem ipsum ...&lt;/p&gt;
			&lt;/div&gt;

		&lt;/div&gt;

	&lt;/div&gt;

&lt;/div&gt;

&lt;/body&gt;
</pre>
<p>Et voici maintenant le CSS classique associé :</p>
<pre class="brush: css; title: ; notranslate">
body{
	background:#222;
	font-family:Trebuchet MS;
}

p{
	color:#BBBBBB;
	font-size:0.7em;
	margin-bottom:0.5em
}

#header{
	background: #eee;
	-moz-border-radius:0.5em;
	padding:5px 10px
}

#header h1{
	color:#777;
	margin:0
}

#container{
	overflow:hidden;
	padding:10px
}

#page{
	width:70%;
	float:left;
}

#page h2{
	color:#888;
}

#page p{
	color:#fff;
}

#sidebar{
	float:right;
	width:30%
}

#sidebar .box{
	padding:10px;
	background:#777;
	-moz-border-radius:0.3em;
	margin-bottom:1em
}

#sidebar .box h3{
	color:#111;
	margin:0
}

#sidebar .box p{
	color:#eee
}
</pre>
<p>Ce qui donne une page comme celle-ci :</p>
<p><a href="http://tuts.guillaumevoisin.fr/css/less/"><img class="alignnone size-full wp-image-857" title="Exemple de page web avec LESS" src="http://www.guillaumevoisin.fr/blogwp/wp-content/uploads/2010/11/page-less.jpg" alt="" width="590" height="364" /></a></p>
<h2>Transformation</h2>
<p>Nous allons à présent <strong>transformer cette feuille de style</strong> en un fichier .less. La liste des <a href="http://lesscss.org/docs" rel="external">fonctionnalités est disponible sur le site officiel</a>.</p>
<p>Parmi celles-ci, j&#8217;ai particulièrement apprécié :</p>
<ul>
<li>La gestion de <strong>variables</strong></li>
<li>La nouvelle forme d&#8217;<strong>héritage objet</strong> (ou <em>nested rules</em>)</li>
<li>La gestion de <strong>fonctions </strong>(ou <em>mixins</em>)</li>
<li>Les <strong>opérations mathématiques</strong></li>
</ul>
<p>Voici donc notre nouveau fichier CSS : style.less</p>
<pre class="brush: css; title: ; notranslate">
/* Définition de variables */
@primary_color: #777;
@secondary_color: #bbb;
@width: 960px;

/* Fonction pour les coins arrondis */
.rounded(@radius: 0.5em) {
	-moz-border-radius: @radius;
	-webkit-border-radius: @radius;
	border-radius: @radius;
}

body{
	/* Eclaircissement de la couleur de fond
	Grâce à la fonction de division */
	background:@primary_color/4;
	font-family:Trebuchet MS;
}

p{
	color:@secondary_color;
	font-size:0.7em;
	margin-bottom:0.5em
}

#header{
	background: @secondary_color*1.2;
	/* On applique la fonction de coins arrondis */
	.rounded(.5em);
	padding:5px 10px;

	/* Héritage objet */
	h1{
		color:@primary_color;
		margin:0
	}
	width: @width;
	margin:0 auto;
}

#container{
	overflow:hidden;
	padding:10px;
	margin:0 auto;
	width:@width
}

#page{
	width:70%;
	float:left;
	p{
		color:@secondary_color*2
	}
	h2{
		color:@primary_color*1.1
	}
}

#sidebar{
	float:right;
	width:30%;
	.box{
		padding:10px;
		background:@primary_color;
		.rounded(.3em);
		margin-bottom:1em;
		p{
			color:@secondary_color*1.2;
		}
		h3{
			color:#111;
			margin:0
		}
	}
}
</pre>
<p>Le grand atout de ce framework est la <strong>visibilité </strong>et l&#8217;<strong>accessibilité </strong>du code css qui rend la feuille de style beaucoup plus &laquo;&nbsp;propre&nbsp;&raquo; pour une future modification. Il y a même beaucoup moins de paramètres à remplacer (fini le rechercher/remplacer !).</p>
<p>L&#8217;héritage objet est très <strong>pratique </strong>et permet de gérer tout notre markup convenablement et sans s&#8217;y perdre.</p>
<p>Vous pouvez consulter la page web et les sources ici: <a href="http://tuts.guillaumevoisin.fr/css/less/" rel="external">tuts.guillaumevoisin.fr/css/less/</a></p>
<h2>Le mot de la fin</h2>
<p>J&#8217;ai été très séduit par cette librairie LESS, à tel point que <strong>je ne comprends pas pourquoi ces fonctionnalités ne sont pas inclues de base dans le CSS</strong>. Peut être avec CSS 4 ?</p>
<p>En attendant, cela reste une manière très <strong>intelligente, évolutive et maintenable </strong>de coder ses feuilles de style.</p>
<p>Que pensez-vous de cette approche et l&#8217;avez-vous déjà utilisée ?</p>
]]></content:encoded>
			<wfw:commentRss>http://www.guillaumevoisin.fr/css/tip-css-ecrivez-moins-avec-less/feed</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<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 20:08:23 -->
