Création d’un squelette sur la base de 960.gs

Langage et développement
Frameworks

| par Teddy Payet | 2

Comme vous avez pu le voir, l’interface de mon site est toute fraiche. Il est basé sur le framework CSS 960.gs. Je l’utilise quasi systématiquement pour la création de mes squelettes persos comme professionnels. Je vais vous expliquer comment j’ai procédé à sa réalisation avec SPIP.

Avant propos

J’ai déjà abordé sur mon blog de certaines astuces que j’ai réutilisé sur mon site :

Je vais aujourd’hui vous parler de la première partie de la réalisation de mon squelette. Nous n’aborderons pas l’étape graphique qui est propre à chacun.

Présentation de 960.gs

Il existe plusieurs frameworks CSS : Blueprint, YUI Grid CSS, 960 Grid System.
Ce dernier (960.gs pour les intimes) est devenu ma référence maintenant. Il me permet de réaliser rapidement mes prototypes mais aussi mes versions de squelettes en production.

Pour mon design, j’ai réalisé ma maquette sous Photoshop grâce à la grille psd mis à disposition sur le site officiel. De ce fait, je peux aisément retrouver mes largeurs de bloc par rapport à un élément de grille (2 grilles, 3 grilles, etc.). Rapide et efficace.

Mon design est basé sur une division de 4 « sections » de la grille de 16. Ce qui correspond à la classe CSS grid_4.

Grille 960.gs appliquée à ma nouvelle interface.

Mise en place des gabarits.

En plus de ma grille 960.gs, mon squelette est basé sur la structure « Z » et le plugin Compositions. Je recrée de ce fait les répertoires de base de ma structure :

  • contenu
  • extra
  • head
  • images
  • inclure
  • lang
  • navigation

Selon mes besoins, je copierai les fichiers html que je dois modifier de z-dist_v1/ à squelettes/.

Premier élément : head.html

Head.html

Il faut que SPIP arrive à retrouver les fichiers de 960.gs. Je copie les fichiers 960.css, reset.css, text.css à la racine de mon dossier squelettes.
Dans le fichier inclure/head.html, je copie ce code juste avant tous les appels des fichiers css présent dans ce fichier :

Body.html

Mon design n’utilise pas de zone « extra » de base. En tout cas, pas sur la page contenu/page-sommaire.html. L’appel aux extras se fera dans le fichier contenu/type.html (article.html, breve.html, mot.html, etc.)

En voici le code source spipien :

À noter : la zone de contenu est dans un grid_12. De ce fait, si nous utilisons des grid_X dans cette zone, nous devrons attribuer des alpha et/ou omega selon la position en premier ou dernier dans la colonne. Cela a pour effet d’enlever les margin-left ou margin-right.

J’ai gardé le même principe d’INCLURE pour mes besoins spécifiques : inclure/navigation-secondaire
Ce dernier fait appel à ma petite barre de navigation contenant : le lien vers la page d’accueil, lien vers mon CV, lien vers mes informations générales telles que les conditions générales, la page de contact et enfin ma barre de recherche.

Jusque là, rien de bien « difficile ».

Le contenu

En tout premier lieu, on va commencer par éditer le fichier contenu/page-sommaire.html. Il est la vitrine du site, et conditionnera les autres pages. Ses lignes de codes sont très simple :

Rien de plus.

La subtilité vient de inclure/article-resume-rubrique.html. Vous pouvez voir des paramètres particuliers qui vont me servir selon la page :

Il y a 2 #SET importants. Ils déterminent la largeur et la hauteur de mes vignettes.

  • #SET : il est configuré grâce aux paramètres imglargeur et imghauteur. On y met une valeur de sécurité si l’un des paramètres n’est pas renseigné.
  • [ (#ENV{grille})] : renseigne sur quelle grille va s’adapter mon bloc.
  • [ (#ENV{position}] : renseigne tour à tour si je suis en début de colonne ou en fin de colonne (alpha ou omega ou rien…). Je le conditionne dans contenu/page-sommaire.html avec un #COMPTEUR_BOUCLE|alterner{…}
  • image_passe_partout : mon filtre préféré pour les images, couplé à image_recadre. Dans ces 2 filtres, j’applique ma largeur et ma hauteur déterminées par les #SET.

Voilà ! Le site est prêt ! Si si, je vous jure ! On a fait le plus dure. Le reste n’est que la déclinaison de ce même principe…
Pour chaque rubrique, ou presque, j’ai un gabarit spécifique que j’applique grâce au plugin Compositions.

Déclinaisons

Pour ma rubrique Savoir-faire, j’ai un squelette dédié : contenu/rubrique-services.html.
C’est le meilleur exemple pour la réutilisation de mon modèle inclure/article-resume-rubrique.html. Bon… J’avoue, je l’ai un peu modifié en réel car je n’ai pas besoin de la date ni même de l’auteur sur ces pages. Un display:none ne me suffisait pas…

Donc, dans contenu/rubrique-services.html, j’ai fait une boucle pour chaque sous rubrique pour les afficher différemment. Rien de complexe de ce fait, je ne l’illustre pas car un basique en boucle SPIP. Ma première boucle utilise cette inclusion :

Explications :

  • #GET{position} : ça n’a pas changé de sa première utilisation. [(#COMPTEUR_BOUCLE|alterner{' alpha',' omega'})] défini la position de mon bloc ;
  • Le paramètre grille : je nomme expressément ma grille à grid_6 pour que je sois à l’affichage sur "2 colonnes" ;
  • Le paramètre imglargeur : je donne la largeur à laquelle mon logo sera redimensionné, 340 px qui correspondent à la largeur d’un grid_6 ;
  • Le paramètre imghauteur : je donne la hauteur à laquelle mon logo sera redimensionné, 220 px ;

Vous pouvez vérifier ce que ça donne ici

Le deuxième appel
Pour ma 2ème sous-rubrique, je fais l’appel ainsi :

Là, pas de changement existentiel. On est sur 3 colonnes, soit des grid_4. Pas la peine de renseigner la largeur et la hauteur de ma vignette car les nombres par défaut me conviennent sur cette grille.

Et enfin…
Je fais un 3ème et dernier appel à cet inclure pour les articles de ma rubrique (et plus ses sous-rubriques) :

Le but de cet appel est d’afficher sur une plus grande largeur les articles de la rubrique. On est sur un grid_10. Je lui rajoute un prefix_1 et un suffix_1 pour que la colonne soit centrée dans ma zone de contenu.
La position est en alpha ET omega car 10+1+1=12. Les margin-left et margin-right sont alors superflus.

Conclusion

Vous pouvez voir que ce n’est pas compliqué de réaliser un squelette pour SPIP sur les modèles :

  • Z-dist ;
  • Compositions ;
  • et enfin 960.gs.

Pour pousser l’exemple, un autre article sera publié dans peu de temps sur les quelques paramètres à modifier pour en faire un squelette dédié aux smartphones. Cette déclinaison m’a pris 1 heure de mon temps maximum.

Le tout est de bien pensé à votre squelette, comment vous simplifier la tâche par la suite. C’est le conseil que je peux vous donner.