CSS : Syntaxe de rigueur
Il y a 36 façons d'écrire une feuille de style CSS, autant d'organisations envisageables, mais une organisation générale « commune » est appréciable, notamment pour des travaux collectifs où plusieurs personnes ont la possibilité de s'occuper des styles CSS.
Il ne s'agit pas d'imposer sa façon de faire à tous, mais un minimum d'organisation logique permet assurement plus de facilité pour le travail en groupe.
Au delà du travail en groupe, sur le forum Alsacréations par exemple, lorsqu'un membre nous soumet son code CSS, un code organisé serait vraiment mieux, en effet, rien de plus énervant que de perdre son temps à déchiffrer la feuille de style de quelqu'un d'autre !
Le pire reste les déclarations de style sur une seule ligne, un vrai calvaire pour s'y retrouver
(sauf pour des déclarations uniques, où une seule propriété est indiquée, c'est pour ce cas assez lisible).
La cascade CSS et sa syntaxe
CSS signifie Cascading Style Sheet, soit feuille de style en cascade, où les mots importants sont style et cascade. Pour ce qui est de la partie style, les lecteurs réguliers d'Alsacréations sauront de quoi il s'agit, sinon se référer aux nombreux tutoriels, mais la partie cascade est peut être moins évidente pour certains, l'accent n'est pas souvent mis sur ce point pourtant fondamental dans la mise en forme CSS.
Il existe déjà des ressources et explications sur le sujet, je ne m'y attarderai donc pas, je me contente de vous les indiquer :
- Chez MarcArea.com, un très bon explicatif ;
- L'éternel Openweb.eu.org avec le tout aussi éternel Laurent Denis nous offre un article bien complet sur le sujet.
Pour ceux qui n'ont pas le courage de tout lire (il faudra y passer tout de même !), grosso modo, c'est le degré d'importance des différents sélecteurs en fonction de l'endroit où ils sont déclarés (feuille de style externe, interne, style en ligne, etc) et de la façon dont ils sont déclarés et c'est ce point qui nous interessera ici.
En effet, suivant la manière dont vous déclarez vos sélecteurs, ils n'ont pas le même poids, les deux articles pré-cités l'expliquent très bien, et c'est là qu'une rigueur de syntaxe est de mise et où au final, au delà du gain en clarté du code, vous gagnerez en précision et en efficacité dans vos déclarations de style.
Prenons un exemple pour bien comprendre
Soit la structure HTML suivante :
<body> <div id="conteneur"> <p class="important">Un paragraphe, il a une classe <code>important</code>. Ce paragraphe est contenu dans la balise <code><div></code> nommée (via <code>id</code>) <code>conteneur</code>.</p> <p class="explication">Un autre paragraphe, celui-ci a une classe <code>explication</code>. Ce paragraphe est contenu dans la balise <code><div></code> nommée (via <code>id</code>) <code>conteneur</code>.</p> <p>Un dernier paragraphe neutre sans classe, mais dans lequel se trouve un élément isolé <strong class="important">important</strong> avec la classe <code>important</code> lui aussi et un élément isolé <span class="explication">d'explication</span> lui avec la classe <code>explication</code>. Ce paragraphe est contenu dans la balise <code><div></code> nommée (via <code>id</code>) <code>conteneur</code>.</p> </div> <p class="important">Un paragraphe, il a une classe <code>important</code>. Ce paragraphe est directement enfant de <code><body></code></p> <p class="explication">Un autre paragraphe, celui-ci a une classe <code>explication</code>. Ce paragraphe est directement enfant de <code><body></code></p> <p>Un dernier paragraphe neutre sans classe, mais dans lequel se trouve un élément isolé <strong class="important">important</strong> avec la classe <code>important</code> lui aussi et un élément isolé <span class="explication">d'explication</span> lui avec la classe <code>explication</code>. Ce paragraphe est directement enfant de <code><body></code>.</p> </body>
La première partie est une division qui contient 3 paragraphes avec différentes classes ou pas de classe, cette division est nommée grâce à un id pour permettre une sélection plus fine. La seconde partie est sensiblement la même à ceci près que les paragraphes sont directement enfant du <body>.
Appliquons ces diverses déclarations de style :
/*----------------------------------------------+
+ Styles généraux +
+----------------------------------------------*/
body { font: 0.9em "Trebuchet MS", helvetica, sans-serif }
p
{
margin: 5px;
padding: 5px;
line-height: 1.3em;
text-align: justify
}
/*----------------------------------------------+
+ Styles pour éléments importants et +
+ d'explication de l'ensemble de la page +
+----------------------------------------------*/
*.important { color: #f00 }
*.explication { color: #080 }
/*----------------------------------------------+
+ Styles pour le conteneur 1 +
+----------------------------------------------*/
div#conteneur
{
width: 33%;
margin: 5px;
border: 1px dotted #555
}
/*----------------------------------------------+
+ Elements importants du conteneur 1 +
+----------------------------------------------*/
div#conteneur p.important
{
border-left: 2px solid #f00;
background: #fee
}
div#conteneur strong.important
{
font-variant: small-caps;
font-size: 0.9em;
letter-spacing: 0.05em
}
/*----------------------------------------------+
+ Elements d'explications du conteneur 1 +
+----------------------------------------------*/
div#conteneur p.explication
{
border-left: 2px solid #080;
background: #ded
}
div#conteneur span.explication { font-style: italic }
Vous pouvez voir le résultat dans cet exemple du code ci-dessus pour vous rendre compte de ce qu'est la cascade CSS. Vous pouvez ainsi vous rendre compte que .uneclass est différent de span.uneclass ou encore strong.uneclass qui sont 3 sélecteurs différents. A noter que .uneclass est en fait le sélecteur raccourci de *.uneclass qui sélectionne tous les éléments ayant pour classe uneclass. Vous voyez aussi que l'on peut mettre en forme 2 éléments de même classe différement en fonction de leur emplacement dans le code HTML, la distinction se faisant avec le sélecteur div#conteneur. Une classe peut aussi prendre différents styles en fonction de l'élément HTML auquel elle est attachée.
Voici pour les bases générales de ce qu'est la cascade CSS, vous vous rendez bien compte que la rigueur est de mise lorsque vous faites vos feuilles de style CSS.
Au delà de l'aspect technique des choses
Voilà pour le récapitulatif technique, mais je vous reconseille vivement la lecture des articles proposés au début. Ce qui va nous interesser pour aujourd'hui, c'est la façon rédiger ses feuilles de style tant au niveau de l'organisation qu'au niveau de la syntaxe.
Comme nous l'avons vu précédement, la syntaxe des sélecteurs joue un rôle important, écrire précisement les choses permet plus de précision et de « finesse » pour atteindre les éléments que l'on souhaite, au delà de ce point, c'est aussi une écriture qui, de par sa précision, permet de savoir plus facilement ce qui est mis en forme sans jongler avec le code HTML toutes les 2 minutes. En effet avec des syntaxes du type #monid ou .maclass, on ne sait pas à quel élément HTML correspond #monid ni .maclass, y a-t-il différentes balises qui ont la classe maclass et qui doivent être gérées différement, l'élément monid est-il une division, un titre, un paragraphe, une liste ?
Autant de questions qui trouvent réponses en regardant la source HTML ce qui est plutôt fastidieux, en effet imaginez que votre feuille de style soit faite pour l'ensemble de votre site, il y aura certaines déclarations qui ne serviront que pour certaines pages uniquement, alors si vous devez chercher la page en question pour voir à quoi correspond le code CSS qui vous interesse, vous n'êtes pas arrivé ! L'autre solution est d'écrire directement ses sélecteurs CSS de façon rigoureuse et précise en précisant que l'élément monid est une division par exemple, div#monid et que maclass doit être appliquée à tous les éléments de la page (*.maclass) ou avec certains éléments qui seront traités différement (monelement.maclass).
Cette façon de procéder vous fera gagner en lisibilité, en efficacité et les mises à jour de votre code CSS seront accelerées. Par ailleurs dans le cas d'un travail en groupe, imaginez qu'une première personne ait fait la partie HTML, à priori il n'y a plus à y toucher, cette même personne crée le code CSS avec des sélecteurs clairs et précis, il aura gagné en efficacité pour une éventuelle retouche du code, mais aussi et surtout son code CSS sera extrêmement facile à reprendre et à modifier par une tierse personne et cette dernière n'aura pas à se soucier du code HTML (ou pratiquement pas) puisque les éléments seront indiqués dans les sélecteurs, il saura que h1#titre est un titre de niveau 1 avec ses marges par défaut, sa graisse de police et sa taille de caractère alors qu'avec #titre il aurait été obligé d'aller voir la source HTML s'assurer que #titre n'est pas une division contenant un titre de niveau par exemple.
Vous pouvez aussi choisir une organisation générale de la feuille de style, un choix invariant pour vous (et votre équipe de codeurs CSS si vous travaillez à plusieurs), ce choix est totalement arbitraire, mais faites en un et respectez le, vous gagnerez du temps par la suite au moment de modifier une partie de votre code.
Vous pouvez par exemple choisir de mettre en forme les éléments dans l'ordre parent/enfant du code HTML, vous commencez par mettre en forme les éléments de plus haute parenté (<body>, enfant direct de <body> etc) puis les derniers éléments enfants. Toujours dans le même soucis d'organisation vous pouvez ajouter des commentaires dans votre code pour les différentes parties, un commentaire assez voyant histoire qu'il serve à quelque chose comme par exemple quelque chose de ce style :
/*-----------------------------------+ + Votre commentaire + +-----------------------------------*/
Ceci n'est qu'un exemple, vous pouvez faire comme bon vous semble, mais assurez vous de toujours utiliser le même ordre pour que cette organisation serve à quelque chose et si vous travaillez à plusieurs, choisissez une organisation commune. Certaines personnes indentent leur code pour séparer les zone par exemple, je n'aime pas cette méthode personnelement parcequ'elle étend le code sur la droite et ce n'est pas très pratique, mais c'est un choix personnel.
Dans le même ordre d'idée, au niveau des déclarations de style en elles mêmes, fixez vous un ordre, commencez par exemple par la mise en forme au niveau dimension, positionement, puis le choix des couleurs, images de fond, puis la mise en forme du texte etc. En utilisant cet ordre pour chacune des déclarations vous gagnerez encore en efficacité.
Récapitulatif
En choisissant une organisation précise et rigoureuse dans l'écriture de votre code CSS vous pourrez :
- gagner en efficacité et en précision au niveau de vos sélecteurs (limitation du nombre de class et d'id et du balisage HTML inutile) ;
- être plus rapide lors de la reprise de votre code ou du code de quelqu'un d'autre qui aurait utilisé les mêmes principes généraux ;
- vous éviter quelques erreurs bêtes, en effet être un peu plus rigoureux au niveau de la syntaxe vous évite des petites erreurs ;
- avoir la satisfaction d'un code bien écrit !
Lien complémentaire : Traduction de Pompage.net, CSS efficaces
L'idée expliquée dans cet article, c'est l'utilisation des propriétés raccourcies et groupées pour, encore une fois, avoir un code plus clair mais aussi gagner de la place.
Dernier point rapide, n'hésitez pas à utiliser les sélecteur avancé du type monelement[unattribut] comme par exemple pour les champs input[type=text] qui permet de s'occuper uniquement des champs de type texte, celà évite l'utilisation d'une class supplémentaire. Notez bien que ceci ne fonctionne pas sur Internet Explorer, à vous de voir où sont vos priorités ;).
Nota Bene : Le point virgule final des déclarations de style n'est pas obligatoire, il ne devrait en fait pas être indiqué !
Par Olivier PATRY - dimanche 10 juillet 2005 à 16:25
Standards et Accessibilité - #174 - Lu 11267 fois - Intérêt du billet: 3.16(25) - Fil RSS




Trackbacks
Le samedi 23 juillet 2005 à 14:43, de Tutoriels :: #
Les trackbacks pour ce billet sont fermés.
Evaluez ce billet
Commentaires
Le lundi 11 juillet 2005 à 18:43, par Yazerty :: site :: #
Le lundi 11 juillet 2005 à 18:50, par Lisaraël :: site :: #
Le lundi 11 juillet 2005 à 19:00, par Olivier :: site :: #
Le lundi 11 juillet 2005 à 19:12, par Shemu :: site :: #
Le lundi 11 juillet 2005 à 21:01, par excargot :: site :: #
Le lundi 11 juillet 2005 à 22:08, par Laurent Denis :: #
Le lundi 11 juillet 2005 à 22:29, par Laurent Denis :: #
Le lundi 11 juillet 2005 à 22:32, par Olivier :: site :: #
Le lundi 11 juillet 2005 à 22:57, par Pascal :: site :: #
Le mardi 12 juillet 2005 à 00:07, par panjhy :: #
Le mardi 12 juillet 2005 à 01:00, par neolao :: site :: #
Le mardi 12 juillet 2005 à 11:00, par Olivier :: site :: #
Le mardi 12 juillet 2005 à 11:47, par Ced :: site :: #
Le mardi 12 juillet 2005 à 11:49, par Kurt :: #
Le mardi 12 juillet 2005 à 13:04, par solo :: site :: #
Le mardi 12 juillet 2005 à 15:35, par Vero :: #
Le mardi 12 juillet 2005 à 20:07, par neolao :: site :: #
Le mercredi 13 juillet 2005 à 09:16, par Thomas Mathey :: site :: #
Le mercredi 13 juillet 2005 à 11:32, par Olivier :: site :: #
Le mercredi 13 juillet 2005 à 21:06, par Laurent Denis :: #
Le jeudi 14 juillet 2005 à 00:11, par Etienne :: #
Le mardi 19 juillet 2005 à 13:38, par Ced :: site :: #
Le mardi 19 juillet 2005 à 13:52, par Raphael :: site :: #
Ajouter un commentaire
Les commentaires pour ce billet sont fermés.