10 techniques avancées et secrets de CSS2
Article par Raphael (Stilofoliophile, Strasbourg)
A l'heure où les anciennes versions d'Internet Explorer disparaissent, il devient plus que temps de s'ouvrir aux secrets d'un langage malheureusement trop peu connu : CSS2, ou plus précisément CSS2.1.
De larges parties de CSS2 ont été occultées en raison des faiblesses d'IE6 puis d'IE7. Le marché actuel nous offre enfin la possibilité, au cas par cas, de négliger ces anciennes versions du navigateur de Microsoft. Les possibilités offertes par CSS2 sont bien plus vastes que vous ne l'imaginez…
Un monde sans Internet Explorer 6
Selon les statistiques européennes, le vénérable ancêtre IE6 ne représenterait aujourd'hui que 2% du marché. En clair, imaginer un monde sans IE6 est parfaitement envisageable et ouvre d'intéressantes perspectives en terme de design web. En voici quelques exemples…
min-width, max-width, min-height, max-height
Les propriétés de minima et maxima, reconnues dès IE7, facilitent la vie et évitent l'usage de JavaScript dans de nombreux cas de figure :
-
Site web de largeur fluide mais jalonné (avec
body {max-width: 1100px;}) -
Blocs voisins de hauteur identique (avec
div {min-height: 200px;}) -
Redimensionnement d'images en fonction du parent (avec
img {max-width: 100%;})

:first-child
La pseudo-classe CSS2 :first-child offre la possibilité de cibler uniquement le premier élémént au sein de son parent.
Ainsi, ul li:first-child désigne le premier enfant de <ul> s'il s'agit d'un <li>, comme en témoigne cet exemple de liste.
:hover
La pseudo-classe dynamique :hover est connue depuis la nuit des temps lorsqu'elle désigne un lien, mais peu d'intégrateurs savent qu'il est tout à fait possible de l'appliquer à n'importe quel élément de la page, par exemple p:hover {background-color: pink;}, tout simplement parce que IE6 ne comprend pas cette syntaxe.
Les illustrations de cette pseudo-classe en action sont nombreuses. Nous l'avons mis en application sur le site de la Kiwi Party (saurez-vous le retrouver ?).

Sélecteur d'enfants (A > B)
Le sélecteur A > B, supporté depuis IE7, ne cible que le premier niveau de descendance d'un parent, ce qui se révèle pratique dans le cas d'élément imbriqués.
Cette astuce permet par exemple de ne cibler que les premiers blocs div principaux d'une page grâce à la syntaxe body > div {border-radius: 10px;}, ou encore d'appliquer des styles spécifiques au premier niveau d'une liste imbriquée à l'aide de #nav > li {...} par exemple.

Sélecteur d'attribut [attr]
Comme son nom l'indique, le sélecteur d'attribut cible les éléments non pas selon leur classe ou identifiant, mais selon l'attribut, voire la valeur qu'il possède.
-
img[width]: cible toutes les images disposant d'un attributwidth, -
img[width][height]: cible toutes les images disposant à la fois d'un attributwidthetheight, -
input[type="submit"]: sélectionne tous les champsinputdont l'attributtypea pour valeur "submit", -
a[href^="https"]: concerne tous les liens dont l'attributhrefdébute par la chaîne "https" (CSS3 reconnu par IE7), -
a[href$=".pdf"]: désigne tous les liens dont l'attributhrefse termine par la chaîne ".pdf" (CSS3 reconnu par IE7), -
a[href*="alsacreations"]: cible tous les liens dont l'attributhrefcontient la chaîne "alsacreations" (CSS3 reconnu par IE7).
Les applications pratiques sont bien plus nombreuses qu'on ne l'imagine.
- Styler les champs de formulaires
- Affichage d'une infobulle
- Gérer automatiquement les liens vers des fichiers à télécharger

Sélecteur d'adjacence (A + B)
Ce sélecteur agit sur les éléments frères uniquement : la syntaxe A + B désigne l'élément B s'il est le frère placé immédiatement après A.
Assez mal jugé, ce sélecteur permet pourtant de cibler des éléments de manière très subtile sans avoir recours à des classes ou des identifiants.
- Cibler tous les éléments sauf le premier
- Cibler le dernier élément
- Cibler une colonne précise d'un tableau
- Cibler dynamiquement une série de frères

7- position: fixed
La valeur "fixed" de la propriété position est reconnue depuis IE7. Elle permet de figer un élément à l'écran, même si le contenu défile via l'ascenseur.
Une illustration classique consiste à réaliser un menu fixé à gauche de l'écran. Notez également que Facebook emploie cette technique pour fixer le cartouche de chat en bas de l'écran.
Un monde sans Internet Explorer 7
Les chiffres indiquent une part de marché inférieure à 8% pour Internet Explorer 7. Dans très peu de temps (aujourd'hui déjà dans certains cas), concevoir un site sans tenir compte de ce navigateur deviendra parfaitement concevable.
Voici un petit panel de fonctionnalités reconnues à partir d'IE8.
Contenu généré (:before, :after)
Les pseudo-élément :before et :after offrent la possibilité de générer du contenu (chaîne de caractère, image de fond ou compteurs de liste) via CSS.
Les applications pratiques sont multiples et variées :
- Fil d'Ariane,
- Décoration de puces,
- Décoration de blocs,
- Flottants et Clear sans élément HTML superflu.

display: inline-block
Supportée depuis IE6 mais de manière très partielle, la valeur "inline-block" de la propriété display permet ni plus ni moins de disposer d'éléments alignés tels des "inline" et dimensionnés tels des "block".
Ce schéma de positionnement sous-exploité résoud des équations actuellement complexes de type : centrer une liste de liens dimensionnés.

Modèle tabulaire (display: table)
Le design tabulaire à l'aide de CSS (entendons-nous bien, je ne parle évidemment pas des balises HTML <table>) est voué à un très bel avenir proche, enfin utilisable depuis IE8.
Le modèle d'affichage tabulaire permet de réaliser de manière simplissime l'ensemble des cas de figure qui nous compliquent la vie actuellement :
- Hauteurs de frères identiques,
- Alignement vertical,
- Répartition de la hauteur restante,
- Répartition de la largeur restante,
- Un menu fluide,
- Réordonnement des blocs.

Cet article, prônant les vertus de CSS2 à l'heure où tout le monde parle de CSS3 est le compte-rendu de ma présentation effectuée lors de la Kiwi Party d'Alsacréations. Les diaporamas de cette présentation sont en ligne sur Slideshare, et la vidéo est visible sur Dailymotion.


Victor BRITO a dit le
À noter que, dans la section sur le sélecteur d'attribut, les trois derniers exemples (a[href^="https"], a[href$=".pdf"] et a[href*="alsacreations"]) utilisent une syntaxe apparaissant en CSS 3.