PLUGIN: CSS IMBRIQUÉS
PLUGIN: CSS IMBRIQUÉS
Techniques SPIP

Vous trouverez ici des trucs et astuces destinés aux développeurs de sites sous SPIP.

La majorité de ces trucs est consacrée aux filtres graphiques introduits dans SPIP 1.9. Il y a là en effet un vaste champ d’expérimentation pour les webmestres et les graphistes.

Chaque truc est suivi d’un forum auquel nous vous invitons à participer.

N.B. La présence de ces trucs et astuces sur notre site professionnel est destinée à faire connaître notre activité de création de sites sous SPIP. Vous pouvez librement utiliser les morceaux de code fournis ici dans vos propres squelettes. Vous pouvez reprendre ces exemples sur votre site ou dans les forums d’un autre site ; dans ce cas, nous vous demandons simplement d’avoir la courtoisie de référencer la page d’où est tiré le code repris.

XML
Zip - 2.6 ko
Le plugin « CSS imbriqués »

[SPIP 2.0] Voici un plugin destiné aux webmestres qui manipulent des fichiers CSS particulièrement complexes, avec des imbrications à la chaîne.

Une des difficultés des CSS, lorsque l’on commence à entrer dans les plus petits détails de l’interface d’un site Web et que l’on veut donc créer des classes très discriminées selon les endroits, est que l’on se retrouve alors avec des listes interminables de classes aux noms de plus en plus longs.

Une idée qui circule sur le Web (par exemple sur le site de Shaun Inman) consiste à écrire ses styles selon une méthode contenant des enrichissements par rapport à la norme, puis à faire passer ces fichiers par un pré-processeur qui les transforme en fichiers CSS standards.

SPIP propose déjà quelques solutions pour aller dans ce sens :
— en passant une feuille de style par le filtre direction_css, on peut l’adapter automatiquement aux langues qui s’écrivent de droite à gauche, l’interface étant intégralement inversée ;
— avec les balises #SET et #GET, si l’on réalise ses styles sous forme de squelettes, on a un système de variables très pratique (par exemple : définir une seule fois la valeur d’une couleur puis l’utiliser dans plusieurs classes ; par la suite, pour changer la couleur de l’ensemble, il suffit d’intervenir uniquement dans la définition de la variable).

Il manque, à mon avis, une autre possibilité offerte par le pré-processeur de Shaun Inman : pouvoir écrire ses définitions de classes sous forme imbriquée (nested), pour en clarifier la lecture.

C’est l’objet du présent plugin.

Voici un court morceau de code CSS standard :

  1. ul#principal {
  2.         border: 1px solid red;
  3.         width: 200px;
  4.         background-color: #aaaaaa;
  5. }
  6. ul#principal li {
  7.                 color: red;
  8. }
  9. ul#principal li  a {
  10.         color: black;
  11. }
  12. ul#principal li.on {
  13.         background-color: red;
  14.         color: white;
  15. }
  16. ul#principal li.on a {
  17.         color: #ffaaaa;
  18. }

On peut considérer que ce code est artificiellement compliqué, mais en réalité, quand on entre dans les détails d’une mise en page, on se retrouve rapidement avec des systèmes d’héritages beaucoup plus complexe.

L’idée de la méthode des CSS imbriqués est de saisir une classe qui dépend d’une autre classe à l’intérieur de sa définition, sans répéter la hiérarchie des intitulés.

Ainsi le code précédent s’écrit :

  1. ul#principal {
  2.         border: 1px solid red;
  3.         width: 200px;
  4.         background-color: #aaaaaa;
  5.  
  6.         li {
  7.                 color: red;
  8.                
  9.                 a {
  10.                         color: black;
  11.                 }
  12.         }
  13.         li.on {
  14.                 background-color: red;
  15.                 color: white;
  16.                
  17.                 a {
  18.                         color: #ffaaaa;
  19.                 }
  20.         }
  21. }

Il existe une autre subtilité : la possibilité, dans une classe imbriquée, de faire précéder le nom de la classe imbriquée par un point suivi d’un espace ; cela indique que cette classe est dérivé de la précédente (plus simplement : on « colle » les deux noms. Voici par exemple une manière de code a.spip_in, a.spip_out :

  1. a {
  2.         . .spip_in {...}
  3.         . .spip_out {...}
  4. }

et avec des variantes de survol :

  1. a {
  2.         . .spip_in {
  3.                 ...
  4.                 . :hover {...}
  5.         }
  6.         . .spip_out {
  7.                 ...
  8.                 . :hover {...}
  9.         }
  10. }

Notez bien : cette notation n’est pas standard et ne correspond pas à la norme des CSS. Il s’agit d’un système de notation qui doit être impérativement traduit de manière logicielle (par le présent plugin) pour qu’un fichier CSS standard soit envoyé au visiteur.

Remarque : l’utilisation du plugin ne vous interdit pas d’utiliser la notation d’une manière respectant la norme : le plugin admet des fichiers totalement standards, ou totalement imbriqués, ou utilisant les deux notations (la méthode imbriquée n’étant qu’une extension de la norme).

Pour que ce plugin traite votre fichier CSS, il faut l’utiliser de la même façon qu’on utilise direction_css, ou en complément de ce dernier, en passant le fichier par css_imbriques :

  1. [<link rel="stylesheet" href="(#CHEMIN{monstyle.css}|direction_css|css_imbriques)" type="text/css" />]

Si vous réalisez votre feuille de style sous forme de squelette, je n’ai pas trouvé de méthode idéale. Cette que j’adopte généralement, c’est d’insérer directement le code des CSS dans tous mes fichiers :

  1. <style type="text/css">
  2. [(#INCLURE{fond=perso}|css_imbriques_decouper)]
  3. </style>

Notez enfin que ces fonctions, contrairement à direction_css, ne traitent pas les @import présents à l’intérieur des fichiers CSS. Dans la version actuelle, il y a des chances que ces @import disparaissent (bug à corriger pour une prochaine version).

il y a 6 jours
Plugin : CSS imbriqués
noé (noe.denaama chez rezo.net)

propal :

indépendement de l’usage pour les css le format étendu par inman ne pourait-il de format pour des structures de données à intégrer dans SPIP ?

Votre message :
Un message, un commentaire ?

(Pour créer des paragraphes, laissez simplement des lignes vides.)

Qui êtes-vous ? (optionnel)