W3C

Bert Bos | CSS : hier, aujourd’hui et demain

CSS : hier, aujourd’hui et demain

Cascading Style Sheets

Bert Bos (W3C) <bert@w3.org>

Un atelier pour
Sud Web 2012
Toulouse (France)
9 May 2012

Le programme de l'atelier

1ère Partie

Partie 1

1993–1996 : les ambitions (1/2)

À partir de 1993, plusieurs personnes proposent que l'auteur du HTML (et pas seulement le lecteur) peut avoir besoin d'influencer la mise en page.

Robert Raisch, Pei Wei (ViolaWWW)…

Le navigateur Mosaic (fin 1994) offre moins de styles aux lecteurs que les navigateurs précédents.

(Voir Cascading Style Sheets (2005) par Håkon Wium Lie; et chapitre 20 de Cascading Style Sheets, designing for the Web (1999) par Håkon Wium Lie & Bert Bos)

Robert Cailliau écrivait dans la préface du livre de Håkon et moi combien c'était libérateur de ne plus avoir à penser à la mise en page, grâce à HTML, et de se concentrer seulement sur la structure. Les designers évidemment ne se sentaient pas si libérés par HTML. Et probablement il y avait aussi des lecteurs qui se sentaient perdus avec du texte pur pour lequel il fallait trouver une forme soi-même.

Séparer le style (CSS) et la structure (HTML) offre le meilleur des deux mondes: l'auteur peut proposer un style (ou même plusieurs) s'il le souhaite, mais le lecteur n'est pas obligé de l'utiliser. Et, en fait, comme lecteur, je supprime assez souvent le style.

1993–1996 : les ambitions (2/2)

À partir de 1995, Netscape ajoute des éléments & attributs stylistique propriétaires (font, bgcolor, center…)

En partie pour parer à cette tendance dangereuse pour le Web sémantique, W3C organise en octobre 1995 un workshop à Paris autour des feuilles de styles.

Le groupe de travail HTML commence à travailler sur CSS.

(Le groupe de travail CSS est séparé du groupe HTML en février 1997.)

Les origines de CSS

CSS est basé sur CHSS (Håkon Lie, octobre 1994) et SSP (Bert Bos, mars 1995)

Les deux niveaux de CSS

CSS niveau 1:

CSS niveau 2 était le CSS que voulions réellement…

Le navigateur que j'avais implementé moi-même, ainsi que tous les logiciels capables d'analyser du SGML (et donc du HTML) que je connaissait, modelaient HTML comme un arbre. Le code de Netscape (que je ne connaissait évidemment pas) n'était pas du tout comme ça: les programmeurs ne connaissaient pas SGML. Tout ce que nous pensions être facile (des éléments qui héritent de leur parent, pas de différence entre du HTML avec des balises implicites et des balises explicites, etc.) était soit très dur, soit impossible.

C'était Microsoft, en tant que challenger, qui implémentait CSS1 en premier.

Les plans pour CSS2 (1/2)

L'ambition pour CSS (niveau 2) était à la fois modeste et trop avancée pour l'époque :

Les plans pour CSS2 (2/2)

2ème Partie

Partie 2

Goals

Le Web est un outil de communication entre personnes,
	aidé par de la technologie: un auteur a une idée, y réfléchit,
	et finalement trouve un moyen de représenter cet idée sur le
	Web. Des procédés sur le Web sauvegardent et transportent
	cette représentation, appliquent des filtres, font des
	mélanges avec d'autres idées, et en extraient des parties. Un
	lecteur affiche le résultat, peut-être de plusieurs façons
	différentes, et l'interprète. Finalement, le lecteur réagit
	avec ses propres idées et devient auteur lui-même.

Les groupes de travail

Les coopérations officielles

La validation des technologies

[image: the path from member-only
    draft to public Recommendation represented as a snakes-and-ladders
    game]

CSS: extensible, backward-compatible (on ajoute des fonctions, on ne supprime rien) tests

CSS level 3

Les propriétés de CSS sont regroupés dans environ 40 modules
    autour des sujets typographique differents. Les fonctions les plus
    simples de chaque module ensemble sont appellées « niveau 1. »
    (Quelques module n'en ont aucun.) Niveau 2 est plus large et
    niveau 3 plus large encore.

Trois (quatre?) niveaux et une quarantaine de modules

Le « Snapshot »

snapshot » (instantané) :

le « Roadmap »

« roadmap » (feuille de route)

(mais les priorités peuvent changer…)

3ème Partie

Partie 3

Hypothèse

Pourvu que CSS offre un modèle et une syntaxe simple, il est plus facile pour un auteur de sau­ter la trans­for­ma­tion (XSLT ou autre)

Exemples

Pour créer…Utilisez…
Table des matières XSLT, hxtoc, Module postprocessor, perl, JavaScript…
Index alphabétique XSLT, Module preprocessor, hxindex…
Grille/tableau CSS (grid) ? ou XSLT (+flexbox) ?
« Lire la suite page 7 » CSS ? ou XSLT ? ou les deux ?

Procédé CSS

HTML et CSS produisent la mise en page

Procédé CSS

Une transformation de HTML et CSS produisent la mise en page

Procédé CSS

HTML et du CSS généré produisent la mise en page

Procédé CSS

HTML et une transformation de CSS produisent la mise en page

Procédé CSS

HTML (peut-être transformé) et CSS (peut-être généré et/ou transformé) produisent la mise en page

L'idée de « gabarit » dans CSS

L'histoire de « gabarit » dans CSS

1996 :

2004 :

Historically, the first time this was proposed, the outcome was absolute positioning. Not quite what the inventors (Dave Raggett, Håkon Lie and myself) wanted, but the only possibility in those days of browser wars and immature browser technology.

In 2004, the Device Independence Working Group was looking for a standard way to easily create layouts for different screen sizes: varying the number of columns, creating designs that resemble “stacks of cards”, and capturing the idea of a “portal” (several independently authored mini-documents assembled into a single layout).

Its members had been relying on proprietary HTML postprocessors, but because those had to run on the server, what went over the “wire” was non-semantic HTML. They were hoping the layout could be done with CSS instead. And so we revived the old idea of templates (originally called “frames,” before Netscape adopted that name for something else).

Discussions in the CSS WG led to dropping (for now) the stack-of-cards idea, for lack of immediate interest from members of the CSS WG. (In 2012, a solution for card deck layout is still missing…)

Utilisation alternative des gabarits

Grid Layout propose deux autres idées :

(Dans un tableau en HTML, un TD ajoute automatiquement une colonne si nécessaire. Ainsi une règle CSS comme 'SPAN {grid-column: 7}' peut automatiquement créer la colonne 7 si le gabarit n'en avait que 6 auparavant.)

Sushi demo

Three rows, four columns, two
   spanning slots: A demo by Jina Bolton

(Prototype par César Acebal.)

Challenge 1 : un simple quadrillage ?

Page numérisée avec quatre colonnes

Challenge 1 : code source HTML

<H1>Guide</H1> ← titre courant
<H2>Livres</H2> ← titre courant

<H3 ID=jacquemart>Un florilège français</H3>
<P><IMG SRC="..." ALT="..."> ← déplacer avant le H3
<P>Directrice de recherche...
...
<P CLASS=signature>G. B. ← attacher au para
<P CLASS=info>Le musée Ja... ← aligner en bas

<H3 ID=versailles>Versailles...
<P><IMG SRC="..." ALT="...">
...
   

Challenge 1 : règles CSS

BODY {grid: "aceg"
            "bdfh"}
#jacquemart + P {flow: a} ← image
#jacquemart     {flow: b} ← titre
#jacquemart ~ * {flow: b} ← autres paragraphes
#versailles + P {flow: c}
#versailles ~ * {flow: d}
#versailles ~ * {flow: d}
#hittorf + P    {flow: e}
#hittorf        {flow: f}
#hittorf ~ *    {flow: f}
#planque + P    {flow: g}
#planque        {flow: h}
#planque ~ *    {flow: h}

Challenge 1: autres solutions ?

Avec multicol/GCPM :

H3 {break-before: always}
H3 + P {float: column-top; height: 12em}

Avec XSLT & flexbox

DIV.container1, DIV.container2,
DIV.container3, DIV.container4,
DIV.container5... {display: flexbox}
...

Au lieu de créer des régions avec un gabarit, on peut aussi considérer que les colonnes qui existent déjà dans CSS créent suffisamment de régions et il suffit de peu d'extensions pour pouvoir positionner les éléments relatives aux colonnes. Dans GCPM, des mots clés nouveaux pour 'float' permettent justement de positionner un élément en haut d'une colonne.

Par contre, il est moins évident comment aligner les quatre photos, qui sont de taille différentes.

Si on pense que trouver des solutions dans CSS serait trop difficile sans transformer le code HTML d'abord, on peut prendre XSLT, par exemple, et réorganiser le document pour qu'il ait quatre éléments correspondants aux quatre colonnes avec à l'intérieur les éléments déjà dans le bon ordre. Ensuite, un modèle de mis en page simple, comme les flexbox, suffit.

Pour aligner le dernier paragraphe en bas, le groupe de travail CSS pense maintenant qu'il est possible de introduire quelque chose comme le 'margin: auto', mais pour la direction verticale…

Challenge 2 : photo sur 2 colonnes

Quatre articles de taille différente sur une grille

L'inversion de couleur au dessus de la photo sera peut-être possible avec les filtres graphiques qui sont en étude.

L'article en haut à droite peut être vu comme une seule zone avec trois colonnes à l'intérieur. Dans ce cas, la photo doit s'étendre sur deux colonnes ('column-span: 2'). C'est une possibilité qui est à l'étude dans le groupe CSS.

On peut aussi y voir quatre zones, dont trois sont enchaînées pour former un seule flux: la 2ème prend le trop-plein de la 1ère, la 3ème le trop-plein de la 2ème. La 4ème zone est réservée à la photo.

Si on ne sais pas à l'avance quelle fonte sera utilisé, on ne peut pas créer une bande avec la hauteur exacte d'un chiffre dans cette fonte. Par contre, avec les WebFonts, on peut faire télécharger une fonte précise.

Le crénage dans le titre courant entre « actualités » et « temps » ne peut pas être automatiques, sauf si nous donnons à CSS la possibilité des créer des éléments qui ne sont pas rectangulaire, mais ont la forme exacte de leur contenu.

Four que le texte remplit la dernière colonne jusqu'au bout, il faut qu'il y de la flexibilité quelque part: dans l'espace entre les paragraphes, dans la hauteur de la photo, dans l'espace entre les mots… (Par exemple, TEX a la possibilité de créer des espaces élastiques.)

Challenge 2 : CSS rules

grid: 15em *  *  *
       "a  .  e  e"
       "a  b  e  e"
       "a  b  c  d"
       "a  .  .  ."
       "a  f  f  i"
       "a  g  h  j";
chains: b c d, g h;

Challenge 2 : autres solutions ?

Multicol étendu :

::slot(p) {columns: 3}
::slot(q) {columns: 2}
#maquette img {float: top-corner;
  column-span: 2}
#broderies {column-span: all}

Challenge 3 : flottant dans une colonne

Article simple en 3 colonnes, sauf que
   la photo flotte vers le haut de la 2ème colonne

Challenge 4 : images flottantes centrées

Trois colonnes avec des largeurs
   differentes et deux images au milieu de leur colonne

Challenge 5 : melange de texte vertical et horizontal

Des emplacements horizontals et
   verticals, certains avec des colonnes

::slot(a) {writing-mode: vertical-rl}
::slot(b) {writing-mode: horizontal}

Difficile à modeler avec des colonnes, mais faisable avec des chaines de régions.

Challenge 6 : manuscrit ☺

"aaaaaa.bbbbb"
"aa.........b"
"aa.c.d.e.f.b"
"aa.c.d.e.f.b"
"aa.c.d.e.f.b"
"aa.........b"
"aaaaaa.bbbbb"
"aaaaaa.bbbbb"

Challenge 7 : sept gabarits sur une même grille

Sept pages differentes montrents sept
   façon differentes de créer un gabarit sur une même grille de 6 sur
   5

@page p15 {
  grid: "ABBCCC"
        "ABBCCC"
        "ABBCCC"
        "DEEFFF"
        "DEEFFF"}
}

Challenge 8 : « stretchtext »

« stretchtext » (texte elastique)

… zoals de onheilspellende titel van zijn boek luidt.

Nadat hij eerst de huidige politieke situatie…

(Ceci n'est pas du stretchtext, juste du bricolage…)

The end

http://www.w3.org/Talks/2012/0526-CSS-SudWeb

W3C

Pour Développer le potentiel du Web

Pour Anticiper les évolutions technologiques

Pour Augmenter la valeur et visibilité de votre organisation

Rejoigner le W3C

http://www.w3.org/Consortium/join

ou contacter : Bernard Gidon <bgidon@w3.org>

Bert Bos <bert@w3.org>
GPG fingerprint:
7744 0204 52A5 14D9 147D
2A13 2D7A E420 184B 5BA4