Florent Verschelde lance le projet de rédiger un guide stylistique (charte rédactionnelle ou conventions de codage) pour les langages HTML et surtout CSS sous l’égide d’Alsacreations. Une description de ce projet est disponible dans ce document. Voici ma modeste contribution à cette première étape du projet qui consiste en deux séries de questions pour sonder les professionnels du web sur leurs habitudes de travail en matière de mise en forme du code.
### Comment j’écris mon HTML
1. Quelle version de HTML ou XHTML utilisez-vous ?
: Même si je m’applique à écrire du XHTML 1.0 strict, j’utilise le doctype XHTML 1.0 Transitional qui permet une certaine souplesse quand on travaille sur des documents susceptibles d’accueillir toutes sortes de fioritures comme des `target=_blank` ou des `iframe` en veux-tu en voilà 😉
2. Respectez-vous des règles strictes pour l’écriture des balises et attributs HTML même en HTML 4.01 ?
: Oui, je me conforme aux exigeances imposées par le XHTML strict 1.0 : écriture des balises en minuscules, attributs entre guillemets, attributs `selected` ou `checked` doublés (`selected= »selected »` ou `checked= »checked »`), auto-fermeture des balises `img`, `br` ou `input`, etc.
3. Quel usage faites-vous de la validation du code HTML ?
: Je prends soin de valider mes pages web régulièrement dans une optique de *débuggage* du code plutôt que pour la validation elle-même qui ne garantit pas que le document soit lisible par un être humain.
4. Quel usage faites vous des commentaires HTML ?
: Essentiellement pour mettre en valeur les parties principales de la page et indiquer la fin des blocs structurels. J’utilise aussi les lignes vides pour séparer certaines parties du code pour améliorer la lisibilité :
bla bla
bla bla
5. Quels sont les éléments HTML que vous utilisez le plus ? Y a-t-il une logique précise pour l’utilisation de tel ou tel élément (un P plutôt qu’un DIV, par exemple) ?
: En règle général, j’essaie de suivre la logique interne du contenu pour que la page ressemble à quelque chose même si les feuilles de styles sont désactivées : j’abuse des listes ordonnées ou non, des listes de définition, des paragraphes, etc. L’idée est de donner du relief à la page web pour faire ressortir la structure des idées.
: Toutefois, il m’arrive d’utiliser une `div` à la place d’un `p` lorsque le texte à baliser ne contient qu’une ligne et/ou qu’il est isolé sémantiquement parlant. C’est le cas de la *baseline* notamment.
: Dans certains cas, il peut m’arriver d’ajouter un `span` :
L’avantage ? Dans certaines mises en forme, ça permet de donner une largeur explicite à la balise `div`, tout en jouant à volonté sur le `padding` du `span` sans casser la mise en page à cause d’une mauvaise interprétation d’un modèle de boite pas toujours intuitif.
6. Quel usage faites-vous des éléments génériques DIV et SPAN ?
: Même si cela semble aller à l’encontre de ma réponse précédente, je commence par structurer ma page dans les grandes lignes avec la position des différents « blocs » à l’esprit. Comme il s’agit souvent de découper un *template* réalisé sous Photoshop, il serait hypocrite de faire comme si seul le sens avait de l’importance… Je place donc mes `div` dans mon document HTML puis je les reportent dans mon fichier CSS.
: Les balises `div` me servent surtout à `div`iser le contenu en blocs gérés ensuite via la feuille de style : création de colonnes, application de *background*, etc. J’essaie de garder une logique « sémantique » à mes découpages, même si la plupart du temps, il faut bien avouer que certains bloc sont réunis uniquement à des fins de présentation ou de position dans le code…
: J’utilise assez peu la balise `span` : elle me sert le plus souvent à donner une couleur différente à une portion de texte ou à intégrer les microformats.
7. Avez-vous une convention de nommage pour les classes et identifiants ?
: Je suis en pleine transition sur cette question. Je me mets doucement à utiliser les futures balises du HTML5 en tant qu’identifiants ou classes pour structurer mes pages web : *#header*, *#footer*, *.nav*, *.article*, *.aside*, *h1*, *h2*…, *.section*, etc.
: Pour les identifiants ou classes composés de deux termes ou plus, j’utilise le tiret : #sidebar-top ou #main-content-bottom, par exemple.
: Comme vous pouvez le remarquer, j’utilise plutôt des termes anglo-saxons, généralement plus concis et surtout sans accent : que donnerait en effet une classe `.palais-des-congres` ^_^v
8. Dans quels cas utilisez-vous plutôt les classes ou plutôt les identifiants?
: Tout dépend du document, mais je privilégie les classes autant que possible. Ainsi, pour atteindre les élement *menu*, j’utilise plus volontiers :
#header .menu {…}
#sidebar-1 .menu {…}
plutôt que :
#menu-1 {…}
#menu-2 {…}
Ce qui permet d’avoir des éléments communs non dupliqués pour la classe *.menu*. Toutefois, en fonction des projets, la deuxième solution est parfois préférable. Question de souplesse.
### Comment j’écris mes CSS
1. Quel usage faites-vous de la validation CSS ?
: Je n’utilise que très rarement la validation pour mes feuilles de styles : les fautes de syntaxes sont généralement rédhibitoires (le comportement voulu n’apparait pas) et je sais généralement quand j’utilise une propriété « propriétaire »…
2. Comment utilisez-vous les commentaires en CSS ? Avez-vous des «styles» précis pour différents types de commentaires (capitales, étoiles ou autres symboles dans le commentaire, etc.) ?
: Un exemple vaut mieux qu’un long discours :
/*———————————————————————–
Nom de la feuille de style : styles.css
Date création : le 02/11/2008
Description : Feuille de style principale pour le projet xxx
Sommaire :
@reset
@utilitaires
@document
———————————————————————–*/
/*———————————————————————–
@RESET
———————————————————————–*/
@import « css/risette.css »;
/*———————————————————————–
@UTILITAIRES
———————————————————————–*/
.prout {
voice-family: announcer, male;
}
/*———————————————————————–
@DOCUMENT
———————————————————————–*/
#container {
margin: 0 toto;
}
#header { /* ie.css */
height: 75px;
}
#logo {
background: url(img/logo.png) no-repeat;
}
3. Utilisez-vous des sélecteurs «verbeux» (le plus précis possibles et reprenant le contexte d’utilisation de l’élément), ou au contraire les plus courts possibles ? Ou bien une solution intermédiaire ?
: Quand je ne suis pas le seul à intervenir sur le projet (la plupart du temps) je suis assez « verbeux » :
#header #logo h1 {…}
ou
h1#logo {…}
Voire
#logo {…}
plutôt que
h1 {…}
Note : pour des questions de performance, il est préférable d’utiliser la forme `#h1-logo {…}` qui semble la syntaxe préférée des navigateurs.
4. Comment utilisez-vous les espaces, retours à la ligne, lignes vides et indentations ? Pouvez-vous fournir un exemple-type ?
: Voici un exemple assez représentatif de mes habitudes en la matière :
#container {
width: 950px;
margin: 0 auto;
font: 1.2em/1.5 Helvetica, Arial, sans-serif;
}
#header {
width: 950px;
height: 95px;
background: transparent url() no-repeat center;
}
#main-content {
overflow: hidden; /* zoom: 1; dans ie.css */
}
#content {
float: left;
width: 700px;
margin-right: 20px;
}
#sidebar {
float: left;
width: 230px;
}
#footer {
width: 950px;
clear: both;
}
J’ai pris l’habitude de mettre un espace entre les deux-points et la valeur pour des raisons de lisibilité. Par ailleurs, je laisse toujours le point-virgule à la fin de la dernière déclaration. De nombreux intégrateurs et développeurs trouvent plus lisible d’écrire :
#content {float:left;width:700px;margin-right:20px;}
#sidebar {float:left;width:230px;}
Leur argument principal est que cette disposition permet de voir plus de sélecteurs et d’économiser des lignes. Je tiens à rappeller que de nombreux logiciels (Dreamweaver, TopStyle Light, etc.) disposent d’une telle vue. Sans compter des services comme cleancss qui le font automatiquement !
5. Regroupez-vous les blocs de déclarations (sélecteurs + leurs propriétés) de manière logique ou prévisible? Quelle est la logique utilisée, et dans quel ordre les placez-vous ?
: J’essaie de suivre au mieux la structure du document HTML lui-même. Comme le montre l’exemple ci-dessus, sauf si je dois regrouper des déclarations pour leur attribuer des propriétés communes. Dans ce cas, je les place comme suit :
#header,
#footer {
width: 100%;
}
#header {
padding: 3em;
}
#content {
width: 950px;
}
#footer{
padding: 1em 3em;
}
6. Utilisez-vous des indentations multiples (jusqu’à plusieurs niveaux d’indentation) pour, par exemple, refléter la structure du code HTML ?
: Oui, voir l’exemple donné plus haut 😉
7. Utilisez-vous les propriétés de raccourci ? Si oui, les utilisez-vous systématiquement et en priorité, ou seulement lorsque cela permet de gagner quelques déclarations (propriété + valeur) ?
: j’utilise les raccourcis le plus souvent possible, notamment pour les propriétés `font`, `background`, `margin`, `padding`, `list-style` et `border`.
8. Respectez-vous un ordre précis pour les propriétés CSS (ordre alphabétique, ordre «logique», etc.) ? Si besoin, pouvez-vous le détailler ?
: Je place d’abord les propriétés les plus impactantes sur le design comme `float`, `width`, `height`, etc. et je place ensuite les plus longues à la fin : `border`, `list-style`, `font`, `background`, etc.
: Ca tombe bien, car ces dernières sont souvent des propriétés plus visuelles que structurelles, ce qui permet de séparer le fond de la forme au sein même des déclarations CSS !
9. Dans une feuille de styles relativement longue (plus de quelques dizaines de ligne, et jusqu’à des centaines ou milliers de lignes), comment organisez-vous les différents styles ?
: Si le nombre de page est faible mais que la feuille de style CSS est très longue, j’utilise les commentaires pour séparer les différentes parties.
: Si le nombre de page est important, je fais une feuille de style par page après avoir réunis les éléments communs dans *styles.css*, soit : *index.css* pour *index.php*, *inscription.css* pour *inscription.php* ou 404.css pour 404.php, etc.
10. Utilisez-vous plusieurs feuilles de styles pour un projet de «petit» site (moins de dix pages-type). Utilisez-vous plusieurs feuilles de styles pour des projets plus conséquents? Comment séparez-vous les différents styles: par type de propriétés CSS, par type de page, etc. ?
: J’ai essayé plusieurs méthodes pour devenir pragmatique : je fais au mieux en fonction du projet, du délai et du nombre de personnes susceptibles d’intervenir sur le fichier. Un découpage des CSS comme *typography.css*, *layout.css*, *html.css*, *color.css*, etc. suppose des habitudes de travail en commun et des connaissances similaires en CSS, ce qui n’est pas toujours le cas quand on travaille en équipe. De fait, le découpage par page (cf. réponse 9) est souvent mieux compris donc les pertes de temps et les erreurs sont moins nombreuses.
11. Utilisez-vous des hacks CSS ?
: Oui et non. Voir plus bas 😉
12. Utilisez-vous les commentaires conditionnels pour Internet Explorer? Si oui, comment procédez-vous?
: En général, j’utilise un commentaire conditionnel pour cibler les versions inférieures à Internet Explorer 8 :
Ensuite, **à l’intérieur de ie.css**, j’utilise des hacks CSS pour cibler IE6 ou IE7 :
div { Pour s’adresser à toutes les versions inférieures à IE8 }
* html div { Pour s’adresser à IE6 }
html>body div { Pour s’adresser à IE7 }
En supposant bien sûr que IE8 se comporte à l’avenir selon les standards du web. Dans le cas contraire, en fonction des cas, il faudra soit mettre à niveau le commentaire conditionnel (lte IE 8) et trouver un hack CSS spécifique à IE8 différent à la fois de IE6 et IE7, soit lier une feuille de style spécifique pour IE8 en plus de celle prévue pour les versions inférieures d’Internet Explorer…
### En bref
J’ai pris un réel plaisir à me pencher sur ces questions et comme je ne voudrais pas être le seul à en profiter, je vous invite à participer à ce projet, que vous soyez professionnels ou amateurs éclairés ! L’important est que vous pratiquiez régulièrement les langages HTML et CSS pour avoir développé quelques habitudes et que vous ayez envie de les partager.
Bravo Bruno, bel article. Long et riche…
Tu confirmes ce que je pense, à savoir, beaucoup font attention à la validation html ou xhtml, et peu pour la validation des feuilles de style…
Je note ta méthode de classement des propriétés CSS (point 8) qui est pas inintéressante…
Hello,
J’ai répondu ici :
http://groups.google.fr/group/webdevfr/browse_thread/thread/eba0f3d9b28f9006?hl=fr
C’est amusant de voir les similitudes entre les différents professionnels sans concertations préalables.
Juste pour le point CSS:4, la raison pour laquelle je ne vais que très peu à la ligne, c’est qu’après on finit par ne plus faire que scroller ce qui est souvent le cas dans le cas d’une feuille de style unique pour tout le site.
Pour le point 4 souligné par Nicolas, c’est vrai que beaucoup ne font pas de sauts de ligne. Je crois que c’est sur Nettuts (ou blogperfume je sais plus), d’ailleurs, qu’il conseillait de rester sur la même ligne pour chaque « bloc ».
Le fichier est donc largement moins long, on ne scroll pas, c’est vrai, mais je trouve qu’il perd en lisibilité. Je préfère et fais comme Bruno…
Merci pour cet article que je trouve très utile : je suis toujours aussi fascinée par le jeu entre html et css et n’ai pas le temps de m’y plonger. Ce genre d’article présente une méthode de travail qui permet de mieux comprendre de quoi il retourne.
Ah… si j’avais le temps !un jour peut-être ….
Juste un petit avis d’utilisatrice de feuilles de style (toujours pour aller y apporter mes modifs, désolée si on bidouille vos oeuvres) : je préfère nettement la présentation aérée, même s’il faut scroller. C’est toujours plus compréhensible pour nous, pauvres amateurs.
Merci pour cet article ca permet de voir comment font les grands vu que je débute plus ou moins.
Quant à la question du « je vais à la ligne ou pas », pourquoi ne pas utiliser cleancss (ou csstidy si cela existe encore) pour générer la version que le navigateur demandera (sans les passages à la ligne et sans espaces) et garder la version « aéré » pour le(s) développeur(s) ? Cela règle les problèmes de performances et de lisibilité.
Bonjour,
La problématique du poids des feuilles de styles doit effectivement se régler avec un processus de passage en production: des feuilles de développement avec code le plus lisible possible, abondamment commentées pourquoi pas, et des moyens automatisés (scripts) pour obtenir une version de production. On peut également penser à la compression Gzip côté serveur pour réduire sensiblement le poids des fichiers à envoyer.
En clair:
– Si vous travaillez sur des petits sites, ne vous cassez pas la tête pour gagner des octets, pensez plutôt à gagner des Ko en optimisant à peu près correctement vos images. Pensez éventuellement à la compression Gzip, si gagner des octets vous obsède. 😉
– Si vous travaillez sur des gros sites avec des contraintes fortes de performances, vous devriez être à même de mettre en place un mécanisme de mise en production, la compression Gzip, etc.
Bruno, merci de t’être penché sur l’appel à contribution. Cependant, je signale juste qu’il n’est pas finalisé. Il se pourrait même que ce projet change en bonne partie d’orientation, mais rien n’est décidé pour l’instant. Plus de nouvelles après Paris Web et d’ici la fin de l’année. (Il se peut que je te sollicite, Bruno, si le projet nouvelle mouture est confirmé. Mais chut. :D)
@Yves : En ce qui concerne la validation des feuilles de styles, c’est vrai que ça a l’air assez peu utilisé.
@Nicolas F. : J’ai vu ta contribution sur le Groupe Google : pas mal de similitudes en effet ! Sinon, pour l’écriture des déclarations sur une seule ligne, et pour dire le fond de ma pensée, j’avoue ne pas comprendre comment on peut trouver ça pratique… Mais bon, les goûts et les couleurs (sans parler des mauvaises habitudes de travail 😀 ) …
@Dievochka : Mes CSS sont souvent assez longue et pourtant je ne scrolle pas beaucoup : j’abuse des sommaires et des
Ctrl F
! En général, je recherche un sélecteur dans une CSS après avoir jeté un oeil à Firebug, ensuite, il est très rapide de copié la classe ou l’identifiant et de le coller dans la boite de recherche de l’éditeur HTML 😉@Slim : Ca a du t’échapper, mais j’aborde justement l’utilisation de cleancss pour optimiser la CSS pour ne pas laisser un humain faire le travail d’une machine 😉
@Florent V. : Sur le principe je suis d’accord pour avoir un fichier CSS de travail et un autre pour la production. En pratique et dans le cadre d’un environnement où il faut aller vite et où les intervenants sont nombreux, c’est beaucoup plus touchy.
Sinon, j’avais bien vu que ton appel était en cours d’élaboration, mais j’avais justement un brouillon plus ou moins sur cette thématique, alors, j’ai sauté sur l’occasion : faut pas gâcher 😉
très bon article qui me permet d’y voir plus clair sur certains points et une méthode qui va pouvoir m’inspirer pour la mienne…..que je cherches toujours !!
merci à toi
@Bruno : firebug donne même le numéro de la ligne ou se trouve la déclaration dans la feuille de style, un petit Ctrl G et on y est.
Je viens de publier mes réponses au questionnaire de Florent Verschelde :
http://romy.tetue.net/comment-j-ecris-mon-html
oui, presque un an après ! Mais c’est toujours intéressant de découvrir similitudes et voir une méthode se dégager. Merci.