Accueil > weblog
- Lire le billet précédent - Lire le billet suivant -
Par Laurent Denis, le 24 novembre 2004.
Bien que Cascading Style Sheets, level 2 soit encore à ce jour la norme CSS de référence, la prochaine Cascading Style Sheets, level 2 revision 1, qui a atteint le stade de Candidate Recommendation, contient bon nombres d'informations utiles dès aujourd'hui. CSS2.1 s'est en effet vu attribuer un rôle bien particulier :
- Maintenir la compatibilité avec les parties de CSS2 qui sont largement acceptés et mises en application.
- Incorporer dans la norme tous les errata CSS2 déjà publiés séparément.
- Lorsque les implémentations diffèrent profondément de la spécificiation CSS2, modifier la spécification pour qu'elle soit en accord avec les pratiques généralement admises.
- Supprimer les dispositifs CSS2 qui peuvent être considérées comme rejettés par la communauté CSS en raison de leur manque d'implémentation. CSS2.1 vise à refléter les mécanismes CSS qui ont été raisonnablement et largement implémentés pour les langages HTML et XML en général (plutôt que pour un langage XML en particulier, ou pour HTML seul).
- Supprimer les mécanismes CCS2 qui seront rendus obsolètes par CSS3, et encourager ainsi l'adoption de mécanismes CSS3 à leur place.
- Ajouter un (très) petit nombre de nouvelles valeurs de propriétés, lorsque l'expérience d'implémentation a montré qu'elles répondaient à un besoin pour la mise en application de CSS2.
Ainsi, bien qu'une feuille de style CSS2 ne soit pas nécessairement compatible avec CSS2.1, une feuille de style limitée aux mécanismes CSS2.1 a plus de chances de trouver dès aujourd'hui un agent utilisateur compatible tout en préservant la compatibilité ascendante pour l'avenir.
CSS2.1 tire en quelque-sorte la leçon de l'implémentation effective de CSS2, ce qui invite à en tenir compte sans anticiper cependant sur sa future valeur normative. Voici donc, à partir de ce document, un premier tour d'horizon de CSS2.1 consacré aux mécanismes CSS2 restés théoriques faute d'implémentation jugée suffisante (ce qui ne signifie pas que tel ou tel navigateur ne les applique pas, comme nous allons le voir).
CSS2.1 supprimerait les boîtes compactes CSS2 permettant de placer une boîte bloc dotée de la règle display: compact dans la marge latérale de la boîte bloc suivante, si les contraintes de dimensions et de marges le permettent. Par exemple :
.compact {
display: compact;
}
.suivant {
margin-left: 5em;
}
<p class="compact">Boîte compacte</p>
<p class="suivant">Boîte bloc suivante.</p>
...donnerait le résultat suivant :

Vous pouvez tester ce code dans Opera 5+ ou Safari, qui sont apparemment les seuls navigateurs actuels à avoir implémenté ce mécanisme :
Boîte compacte
Boîte bloc suivante.
Un résultat similaire pourrait en fait être obtenu ici en utilisant le positionnement flottant, mais avec une moindre facilité d'utilisation :
.float {
float: left;
width: 10em;
}
<p class="float">Boîte flottante</p>
<p>Boîte bloc suivante.</p>
Ce qui donne dans votre navigateur :
Boîte flottante
Boîte bloc suivante.
Notons enfin qu'en revanche, CSS2.1 conserverait les boîtes en enfilade permettant de transformer une boîte bloc dotée de la propriété display: run-in en première boîte en ligne de la boîte bloc suivante. On peut ainsi par exemple présenter très simplement un titre en enfilade en début de paragraphe. Opera 5+, Safari et IE Mac implémentent ce mécanisme :
h4 {
display: run-in;
margin-right: 0.5em;
}
<h4>Titre</h4>
<p>Lorem ipsum...</p>
... donne comme résultat dans votre navigateur :
Lorem ipsum...
CSS2.1 supprimerait les boîtes de marqueurs de listes CSS2 permettant en particulier de gérer le positionnement et l'apparence de la numérotation générée en CSS. Celle-ci permet de doter des paragraphes, des titres, etc. d'une numérotation dotée de possibilités bien plus nombreuses que les simples listes numérotées HTML. Par exemple :
.marker p:before {
display: marker;
padding: 2px;
border: 1px solid;
content: "Ref " counter(compteur-de-note, decimal-leading-zero) ": ";
counter-increment: compteur-de-note;
font-weight: bold;
}
<div class="marker">
<p>Lorem ipsum...</p>
<p>Eodem modo typi...</p>
<p>Typi non habent claritatem...</p>
</div>
... Donnerait comme résultat :

Vous pouvez tester ce résultat dans Opera 6+, qui est apparemment le seul navigateur à implémenter ce mécanisme :
Lorem ipsum...
Eodem modo typi...
Typi non habent claritatem...
Faute de pouvoir utiliser les marqueurs, il serait théoriquement possible d'obtenir un résultat partiellement comparable à l'aide de display: list-item :
.list p {
display: list-item;
list-style-type: decimal-leading-zero;
margin-left: 40px;
}
<div class="list">
<p>Lorem ipsum...</p>
<p>Eodem modo typi...</p>
<p>Typi non habent claritatem...</p>
</div>
Ce qui donne dans votre navigateur :
Lorem ipsum...
Eodem modo typi...
Typi non habent claritatem...
Hélas, la numérotation est apparemment buguée dans les navigateurs Mozilla et FireFox, et Internet Explorer ne supporte qu'une partie des valeurs de list-style-type. En outre, il est impossible de cette manière de générer une numérotation complexe associant plusieurs compteurs liés à des niveaux hiérarchiques différents... Il ne reste donc plus qu'à intégrer cette numérotation au contenu HTML :
.marker span {
font-weight: bold;
}
<div class="marker">
<p><span>Ref 01:</span> Lorem ipsum...</p>
<p><span>Ref 02:</span> Eodem modo typi...</p>
<p><span>Ref 03:</span> Typi non habent claritatem...</p>
</div>
Ce qui donne ici :
Ref 01: Lorem ipsum...
Ref 02: Eodem modo typi...
Ref 03: Typi non habent claritatem...
Pour l'impression des documents, CSS2.1 simplifierait l'éventail des propriétés spécifiques des boîtes de page définies par la règle @page :
size qui spécifiait la taille et l'orientation d'une boîte de page. Il ne serait donc plus possible de tenter de forcer l'orientation portait ou paysage, ou des dimensions absolues spécifiques (Apparemment, seul Opera implémente cette propriété) ;id, et de lui donner des propriétés spécifiques de marges, de taille et d'orientation (Apparemment, seul Opera implémente ce mécanisme grâce auquel on peut par exemple forcer l'impression paysage d'un tableau dans une série de page imprimées en portait) ;marks. Cette propriété n'a été implémentée par aucun navigateur à ma connaissance.Seules les propriétés de marge et de sauts de Page demeureraient applicables dans le contexte des medias paginés.
CSS2.1 abandonnerait la propriété text-shadow permettant de créer un effet d'ombrage sur un texte. Celle-ci n'est implémentée actuellement que par Safari.
CSS2.1 supprimerait les descripteurs de polices et la règle @font-face qui permettaient en théorie à l'agent utilisateur de procéder au téléchargement d'une police à partir d'une URL ou à la synthèse de celle-ci d'après les indications détaillées de l'auteur. Aucune des technologies propriétaires de téléchargement de police (EOT, PFR) ne semble en effet avoir fait ses preuves.
Dans le même ordre d'idée, notons la disparition prévue de la propriété font-size-adjust qui pemettrait d'indiquer un facteur d'adaptation de taille apparente des polices de substitution par rapport à la taille apparente de la police indiquée comme premier choix.
aural et des propriétés associées (en prévision de CSS3) ?En l'absence d'implémentation, les propriétés de style aural et le descripteur de media aural lui-même seraient dépréciés et ne figureraient plus qu'à titre informatif en annexe de CSS2.1.. Un nouveau descripteur speech est réservé pour le media auditif, en prévision du future CSS3 speech Module (dont les propriétés sont partiellement implémentées par Opera 7.60).
Nous poursuivrons prochainement ce tour d'horizon des leçons à tirer de la future CSS2.1 en abordant les nouvelles valeurs de propriétés (les valeurs inline-block de la propriété display, pre-wrap et pre-line de la propriété white-space, etc.), les principales erreurs CSS2 corrigées (l'underscore dans les identifiants, transparent appliqué aux couleurs de bordures, etc.) et les clarifications apportées à celle-ci (la propriété clip, divers cas de positionnement, etc.).
Les trackbacks pour ce billet sont temporairement fermés en raison d'une série d'attaques de spam.
Commentaires
ElMoustiko, le 24 novembre 2004
Pour ce qui est de l'implémentation de la propriété "clip" utilisée dans ton exemple de titre en image restant accessible, la double syntaxe sera toujours "obligatoire" je suppose ? Les vieux navigateurs ne supportant pas CSS2.1 :s

On va en arriver (pas de troll) aux problèmes d'implémentation des différentes nouvelles propriétés dans les plus anciens navigateurs, je n'ai personnelement jamais vécu un changement de norme et l'application de cette norme dans les différents navigateurs, donc au final il va encore y avoir des problèmes de non implémentation... Arrh on va encore en baver
(toujours pas de troll) Pour IE, la future version du navigateur implémentera t elle CSS2.1 dans son ensemble et correctement ? (ou au moins CSS2.0 :s)
Peut on être certain de pouvoir utiliser (pour l'ensemble des navigateurs *récents*) ces différentes nouvelles propriétés ?
Laurent Denis, le 24 novembre 2004
@ElMoustiko > Disons que c'est loin d'être aussi inquiétant que tu sembles le supposer... Mais je peux finir la deuxième partie de l'article avant qu'on parle de clip ou des nouvelles valeurs de propriétés, qui font partie des clarifications apportées par CSS2.1 ?
Moz, le 24 novembre 2004
ya pas a comme un petit air de 'Mozilla y sait pas faire et opera y sait' dans ton article ?
Laurent Denis, le 24 novembre 2004
@Mozilla> non, franchement, non. Qu'opera soit ait été plus innovant que Mozilla sur certains détails CSS, que Mozilla le soit plus qu'opera sur certains autres... n'a guère d'intérêt au bout du compte. L'utilisateur y trouvera son compte si cette compétition parvient à prendre suffisamment d'importance pour pousser les autres navigateurs à innover eux aussi.

Je regrette, personellement, l'échec des marqueurs de liste CSS, riches de beaucoup de possibilités mais aussi de questions sur la séparation contenu/structure; je n'ai aucun regret pour le display: compact alambiqué; j'espère que le display: run-in sera implémenté au-delà d'opera, parce que c'est un mécanisme simple et direct.
Et tu vois, j'ai un autre regret: que le développement d'opera vocal soit lié aussi étroitement à IBM et aux particularités de son implémentation auditive, qui commence aujourd'hui par l'indifférence au descripteur de media, qu'il soit "speech" ou "aural".
Comme quoi l'utilisateur n'a pas fini d'être captif
Vincent, le 24 novembre 2004
run-in et compact fonctionnent sur Safari 1.2.4
Ganf, le 24 novembre 2004
Autre chose qui arrive dans CSS 2.1 et qui me semble super utile pour coder simplement beaucoup de design :
display: inline-block;
avec ça on peut faire des boites qui passent les unes à coté des autres super simplement, sans les désavantages du float. Malheureusement si MSIE sait l'utiliser, Mozilla ne le sait pas (sauf nouveauté récente). Pour Opera je vous laisse tester, je ne sais pas.
Laurent Denis, le 24 novembre 2004
Merci Vincent, je corrige de ce pas... dès demain matin
Philippe, le 25 novembre 2004
run-in fonctionne sur IE 5 Mac aussi, et inline-block (très utile pour corriger des problèmes de 'float' sous IE5 Mac).
Gloom, le 26 novembre 2004
"Je regrette, personellement, l'échec des marqueurs de liste CSS, riches de beaucoup de possibilités mais aussi de questions sur la séparation contenu/structure;"
Moi aussi, je le regrette. Quand on va voir sur bugzilla ce bug, on y lit un développeur dire en gros que la norme n'était pas assez clair et que, Opera interprette cette norme, ce que lui ne fera pas (interpretter). Le W3C aurait du persévéfer, ici, en faisant une norme plus clair (note que, ayant lu la norme, je l'ai trouvé assez clair, mais, je ne suis pas développeur).
D'une mannière plus général, je trouve regrettable que le W3C abandonne ce qui est mal ou pas assez implémenté. Dans certains cas, innutile de persévérer, mais, dans d'autre (comme celui des marqueurs de liste), c'est vraiment domage.
gizmo, le 29 novembre 2004
Pfff... Si vraiment ils abandonnent les spécificités de la mise en page pour impression et les marqueurs de listes, CSS2.1 ne passera pas par chez moi, j'attendrai CSS3.
Pourquoi vouloir abandonner des fonctionnalité qui comblent réellement un manque dans le HTML au lieu d'encourager les gens à supporter celle-ci.
Le W3C succomberait-il également à la mode du nivellement par le bas?
Laurent Denis, le 29 novembre 2004
Gizmo, il ne s'agit pas d'abandonner quoi que ce soit dans l'immédiat, puisque tout ceci ne vise que ce qui n'a pas été implémenté, ou ne l'a pas été assez : en attendant CSS3, les UA conformes à CSS2.1 ne seront simplement pas contraint d'implémenter ces mécanismes CSS **jugés** problématiques au terme d'une réflexion commune.

Les medias paginés ( www.w3.org/TR/2004/CR-css... ) et les marqueurs de liste ( www.w3.org/TR/2002/WD-css... ) sont prévus pour être reformulés dans CSS3 d'une manière plus... convainquante
gizmo, le 30 novembre 2004
Pour moi, le problème reste entier. En validant une spec 2.1 amputée, on valide implicitement les manques de certains browsers et on n'encourage pas les développeurs à ajouter ces fonctionnalités manquantes. Qui plus est, au vu de la "rapidité" du W3C pour publier ses recommandations, tout le travail sera à refaire lorsque sortiront enfin les CSS3, alors que l'on pourrait s'atteler dès maintenant à combler ces manques. La formulation d'une spec n'est pas grand chose, la partie la plus importante reste l'implémentation du mécanisme de base. Les fioritures s'y greffent après sans trop de souci si le programmeur code proprement.
Les commentaires pour ce billet sont temporairement fermés en raison d'une série d'attaques de spam.