Paris, photo, humeurs, un peu de HTML/CSS pour faire sérieux. Feinte innocence et vraie naïveté (ou vice-versa). Encore un blog qui agite ses petits bras en couinant "Viens me lire !"
L'un des premiers embellissements apportés à un blog est souvent de mettre des images de fond. On peut s'en tirer en glanant des réponses à gauche à droite, réponses où il est question de background ou de background-color ou encore de background-image sans qu'on y voie très clair dans les nuances. Or il y en a, elles sont simples et, bien comprises et combinées à d'autres finesses, permettent bien des choses.
Voici donc un petit article pour tenter de s'y retrouver, accompagné d'une démonstration pour se clarifier les idées. Le suivant donnera quelques suggestions concrètes.
L'exposé complet se trouve dans le chapitre 14 de la spécification CSS2.
Supposons qu'on s'intéresse au motif d'arrière-plan des articles.
Pour le peindre en jaune, on peut rajouter dans le CSS .article {background-color:yellow} ou, plus court, .article {background:yellow}.
Pour utiliser une image, on écrira .article {background-image: url(http://[...]/monimage.jpg} ou, plus court, .article {background: url(http://[...]/monimage.jpg}
Ça marche sans histoires, mais on peut déjà se poser des questions :
Tirons tout ceci au clair une bonne fois.
Il existe cinq propriétés pour caractériser un arrière-plan :
scrollela fenêtre (scroll qui est la valeur par défaut) ou reste fixe fixed comme le mur de livres de ce blog.
Il faut aussi savoir que l'arrière-plan (qu'il soit une couleur unie ou une image) ne déborde jamais de la bordure de la zone. Pour le dire autrement : les marges sont toujours transparentes.
Ce n'est pas une simple abréviation qui, par une magie obscure, désignerait tantôt une image et tantôt une couleur. C'est une propriété raccourcie qui définit en une seule fois les cinq précédentes, dans l'ordre :
background = bgcolor - bgURL - bgrepeat - bgattachment - bgposition
{background : url(...) } {background : transparent url(...) repeat scroll 0 0} {background-color:transparent ; background-image:url(...); background-repeat:repeat; [etc.] } Autrement dit toujours, vous écrivez non pas une seule règle mais cinq d'un coup même si vous ne donnez pas cinq renseignements.
Conséquence : définir background après avoir défini d'autres détails du fond ne complète pas ces détails mais les écrase
, les redéfinit. Voyons une conséquence pratique.
Mettons un .gif, avec des transparences, en fond d'article :
.article {background-image:url(http://......zoziau.gif)} .article {background-image:url(http://......zoziau.gif); background-position:center} Comme, par défaut, l'image est répétée, l'effet produit sera un semis régulier d'oiseaux dont un se trouvera au centre. Jusqu'ici tout va bien. Pour que les zoziaux se détachent sur un aplat jaune, rajoutons :
.article {background-image:url(http://......zoziau.gif); background-position:center; background:yellow} Version correcte :
.article {background-image:url(http://......zoziau.gif); background-position:center; background-color:yellow} .article {background: yellow url(http://......zoziau.gif) repeat scroll center;} Vous avez noté que j'ai pris la peine de préciser repeat et scroll dans le dernier échantillon alors que ce sont des valeurs par défaut, qu'il serait donc inutile d'indiquer :
.article {background: yellow url(http://......zoziau.gif) center;} Très juste, et certains navigateurs se débrouillent très bien pour comprendre que center ne peut être qu'une position. Mais pour d'autres seule semble compter la place des mots dans la séquence – ils ont tort mais c'est comme ça. Pour ceux-là center est la valeur de background-repeat, ce qui ne signifie rien.
Conclusion : en utilisant la propriété background, respectez l'ordre couleur - URL - répétition - mobilité - position et n'omettez au besoin que les derniers termes : ne laissez pas de trou
dans la suite des cinq valeurs.
La valeur par défaut est la mosaïque
{background-repeat: repeat} : l'image se répète dans les deux directions, comme le fait le mur de livres en fond de mon blog. Ce mur est formé d'une seule image de 600 pixels de large sur 382, retouchée pour que les bords opposés se raccordent sans couture.
On peut aussi préciser repeat-x ou repeat-y pour que l'image ne se répète que dans une seule direction, ce qui produira une bande horizontale ou verticale, ou no-repeat pour qu'elle ne se répète pas du tout (= un seul exemplaire du motif).
Si vous utilisez encore Internet Explorer version 6 (ou antérieure), cette section ne vous servira à rien, désolé. Utilisateurs d'IE7, restez donc !
L'idée est limpide : avec background-attachment : scroll (valeur par défaut) le fond bouge avec la zone si on fait défiler la fenêtre, avec background-attachment : fixed il reste fixe par rapport à la fenêtre.
Exemples simples ici : le mur de livres est évidemment fixe alors que les petits boutons du calendrier sont mobiles et accompagnent le calendrier dans ses déplacements (c'est heureux !)
Détail important : quand l'image de fond est fixe, son calage
background-position se fait par rapport à la fenêtre et non par rapport à la zone.
| Fond mobile (cas usuel) | Fond fixe |
Là, c'est un peu plus subtil.
Il s'agit de placer les bords de l'image par rapport aux bords de la zone à laquelle elle sert de fond. Très exactement, par rapport aux bords intérieurs de la bordure de cette zone : la largeur des marges et celle des bordures ne changent rien.
Si l'image est répétée, elle le sera à partir d'un exemplaire placé conformément à background-position
Ce placement se représente par une paire de valeurs : abscisse et ordonnée, ou encore horizontale et verticale. Il existe plusieurs manières d'écrire ces valeurs :
Contraintes et valeurs par défaut :
Ouf ! Fin de la théorie.
Vous y verrez plus clair, je le souhaite, en jouant avec cette démonstration soigneusement mitonnée.
Le prochain article passera aux actes !