Catégorisation de "bonnes pratiques (BPs) de codage" spécifiques à CSS

_______________________________________________________________________________________________________________________________________

Ce document spécialise ce document catégorisant des BPs de codage générales, et en reprend le plan pour ses grandes sections sauf la section 0 (les sous-sous-sections sont différentes ; cf. ce document plus général pour des explications sur le plan).

0. Exemples de BPs générales (pour CSS) relatives à certains critères de qualité

0.1. Exemples de BPs générales relatives au critère de complétude [completeness]

0.1.1. Plus de BPs (non conflictuelles) sont suivies, le mieux

Écrivez du code CSS générique et organisé (et donc évitez toute forme de redondance). E.g. :

On peut toutefois noter que la notion selon laquelle utiliser les éléments "strong" et "em" serait mieux que d'utiliser les éléments "b" et "i", parce que les deux derniers n'ont pas de sens sémantique, est idéologique plutôt que concrète. En effet,

0.1.2. Restreindre aussi peu que possible

E.g. :

0.1.3. Représenter de manière aussi complète, précise et structurée que possible

Par exemple, pour faciliter la compréhension et les recherches manuelles d'informations dans une feuille de style, il est utile

1. BPs relatives aux objets abstraits "informationnels" (i.e., tous les objets abstraits sauf ceux pour des présentations)

Dans ce fichier pour CSS, contrairement à celui pour HTML, cette section et sous-section ne sont pour l'instant pas utiles : l'instanciation (pour les objets abstraits informationnels en CSS) des BPs générales sont simples et cette instanciation est déjà illustrée dans la précédente section. Cette présente section est donc essentiellement conservée pour des raisons de structure et de symétrie par rapport aux autres fichiers (le général et celui pour HTML).

L'entête d'un fichier CSS contient à peu près les mêmes informations minimum que l'entête d'un fichier HTML. Un (entête d'un) fichier modèle pour CSS est ici donnée.

2. BPs relatives aux instruments de description

2.1. BPs à propos d'identifiants (d'objets de codage)

2.1.1. Utiliser des règles de nommage compatibles avec les règles générales données mais, CSS n'étant pas sensible à la casse, les noms des éléments HTML peuvent être mis en majuscules

Il existe différentes conventions de nommage (et modélisation) pour CSS, e.g. BEM [Block__Element--Modifier], SMACSS [Scalable and Modular Architecture for CSS], ACSS [Atomic CSS] et OOCSS [Object-oriented CSS]. Utilisez celle que vous souhaitez mais de manière systématique.

Comme illustré en section 3.1.2, les noms des éléments HTML peuvent être mis en majuscules pour rendre le code plus clair.

2.1.2. Référez aux couleurs via leurs noms plutôt que par des valeurs numériques

Les navigateurs modernes supportent 140 noms de couleurs différentes (voir aussi cette liste).
Vous avez donc la possibilité d'utiliser des noms de couleurs plutôt que des valeurs numériques, e.g., "LightSalmon" au lieu de "#FFA07A" ou "RGB(255,160,122)". Utilisez cette possibilité pour éviter au lecteur de votre code de se demander à quelles couleurs vous référez.
Si ces 140 couleurs ne suffisent pas, il est aussi possible

2.2. BPs à propos de l'utilisation d'un langage naturel

Section vide conservée pour des raisons de structure et de symétrie par rapport aux autres fichiers (le général et celui pour HTML).

2.3. BPs à propos de l'utilisation d'un langage de codage

2.3.1. Utiliser au moins un validateur pour ce langage, avec ses options les plus strictes

Le validateur du W3C pour la syntaxe CSS est à utiliser sur tout fichier CSS dans le cours "Projet HTML".

3. BPs relatives aux aspects concrets ou de présentation (de code ou de résultats de son exécution)

3.1. BPs pour des éléments concrets concis/compacts

3.1.1. Limiter le nombre de caractères par ligne de code (→ pour vous, 89)

L'entête de ce modèle pour des fichiers CSS comprend une ligne de 89 caractères contenant essentiellement des '='. Il suffit donc d'ajuster la largeur de fenêtre de l'éditeur de texte par rapport à cette ligne de commentaire pour que l'éditeur fasse apparaître un "passage à la ligne" [soft line wrapping] (ou ne montre plus l'entièreté d'une ligne ; cela s'accompagne souvent de l'apparition d'un ascenseur horizontal), à chaque fois que la limite n'est pas respectée.

3.1.2. Pas de lignes vides sauf pour séparer des blocs élémentaires ; mettre plusieurs instructions par ligne lorsqu'il y a suffisamment de place pour cela

Il vaut mieux éviter de sauter des lignes à l'intérieur d'un bloc élémentaire, et remplir chaque ligne, non seulement pour avoir les avantages d'un style compact (voir le début de la section 3.1 du fichier général) mais aussi pour bien voir les blocs (lorsqu'il n'y a pas d'autres marques pour les délimiter) et pouvoir présenter les informations d'une manière compacte – voire même tabulaire – qui facilite la comparaison de ces informations et ainsi leur compréhension globale (→ compréhension de leurs inter-relations, interactions, etc.). Ceci est illustré par chacune des deux sous-sections suivantes. La première illustre l'avantage d'une présentation compacte et tabulaire par rapport à une présentation non compacte. Comme il est toutefois rare de pouvoir utiliser une présentation tabulaire, la seconde sous-section montre, pour un cas général, l'avantage d'une présentation compacte par rapport à une présentation non compacte.

3.1.2.1. Présentation tabulaire versus présentation non compacte

Voici ci-dessous, une illustration de cela pour des règles CSS concernant des titres de sections puis des éléments HTML relatifs à du code (ou autre texte à présenter dans une fonte "monospace"). Concernant les titres de section, la classe "smallTopMargin" est utilisée pour avoir moins d'espaces entre les sections (→ pour des fichiers de taille moyenne, comme dans ce fichier), et la classe "first" est utilisée pour avoir encore moins d'espace entre un titre d'une section et un titre d'une sous-section qui le suit immédiatement (donc un titre de 1ère sous-section). Dans cette présentation tabulaire, ce sont d'abord les noms de classe qui sont alignés (comme dans une colonne d'une table ; l'alignement des noms d'attribut à l'intérieur de la colonne s'ensuit).

H1{        font-size:19pt;   counter-reset:h2n; margin-top:30%}
                                                                  H1.first{ margin-top:6% }
                           H1.smallTopMargin{   margin-top:20%}   H1.smallTopMargin.first{ margin-top:5% }
  H1.title{font-size:17pt; margin-left:7%;      margin-top: 0%}
H2{        font-size:16.5pt; counter-reset:h3n; margin-top:20%} 
                                                                  H2.first{ margin-top:5% }
                           H2.smallTopMargin{   margin-top:12%}   H2.smallTopMargin.first{ margin-top:4% } 
H3{        font-size:14.5pt; counter-reset:h4n; margin-top:10%}
                                                                  H3.first{ margin-top:4%                }
                           H3.smallTopMargin{   margin-top: 8%}   H3.smallTopMargin.first{ margin-top:3% } 
H4{        font-size:12.5pt; counter-reset:h5n; margin-top: 6%}   H4.first{ margin-top:3%                }
                           H4.smallTopMargin{   margin-top: 5%}   H4.smallTopMargin.first{ margin-top:2% } 
H5{        font-size:11pt;   counter-reset:h6n; margin-top: 3%}   H5.first{ margin-top:2%                }
                           H5.smallTopMargin{   margin-top: 3%}   H5.smallTopMargin.first{ margin-top:1% } 
                           H5.smallTopMargin{ margin-bottom:0%} 
H1,H2,H3,H4,H5,H6{ white-space: pre }

CODE    { font-family:monospace;  font-size:97% }
PRE, XMP{ margin-top:0%;          font-size:97% }
.pre-ed, pre{ white-space:pre }   .nowrap { white-space:nowrap } 

Voici ci-dessous une version non compacte des règles précédentes. Au moins dans ce cours, cette présentation non concise est à éviter pour les saisons suivantes.

H1 
{ font-size:19pt; 
  counter-reset:h2n;
  margin-top:30%;
}

H1.first
{ margin-top:6%;
}

H1.smallTopMargin 
{ margin-top:20%;
}

H1.smallTopMargin.first
{ margin-top:5%;
}

H1.title
{ font-size:17pt;
  margin-left:7%; 
  margin-top: 0%;
}

H2
{ font-size:16.5pt;
  counter-reset:h3n;
  margin-top:20%;
}

H2.first
{ margin-top:5%; }

H2.smallTopMargin
{ margin-top:12%; } 

H2.smallTopMargin.first
{ margin-top:4%; } 

H3
{ font-size:14.5pt;
  counter-reset:h4n;
  margin-top:10%;
}

H3.first
{ margin-top:4%;
}

H3.smallTopMargin
{  margin-top: 8%;
}

H3.smallTopMargin.first
{ margin-top:3%;
}
 
H4
{ font-size:12.5pt;
  counter-reset:h5n;
  margin-top: 6%;
}

H4.first
{ margin-top:3%;
}

H4.smallTopMargin 
{ margin-top: 5%;
}

H4.smallTopMargin.first
{ margin-top:2%;
}

H5
{ font-size:11pt;
  counter-reset:h6n;
  margin-top: 3%;
}

H5.first
{ margin-top:2%;
}

H5.smallTopMargin
{ margin-top: 3%;
}

H5.smallTopMargin.first
{ margin-top:1%;
}

H5.smallTopMargin
{ margin-bottom:0%;
}

H1, H2, H3, H4, H5, H6
{ white-space: pre;
}

CODE
{ font-family:monospace;
  font-size:97%;
}

PRE, XMP
{ margin-top:0%;
  font-size:97%;
}

.pre-ed, pre
{ white-space:pre
}

.nowrap
{ white-space:nowrap
}

3.1.2.2. Cas général pour une présentation compacte versus non compacte

Présentation compacte (→ modèle à suivre). Notez que

H1
{ attributeName1:value1;  attributeName2:value2; ... ; attributeName5:value5;
  attributeName6:value6;  attributeName7:value7; ... ; attributeName10:value10
}
H2
{ attributeName1:value1;  attributeName7:value7;       attributeName5:value5;
  attributeName8:value8
}

Présentation non compacte (→ anti-modèle).

H1
{ attributeName1: value1; 
  ...
  attributeName10: value10;
}
H2
{ attributeName1: value1;  
  attributeName5: value5;
  attributeName7: value7;
  attributeName8: value8;  
}