1 / 59

Les feuilles de style CSS2

Les feuilles de style CSS2

Un tutoriel s'inspirant de...


2 / 59

CSS2 en action

Exemples de feuilles de style en action

http://www.w3.org/StyleSheets/Core/preview


3 / 59

Un exemple commenté de feuille de style

Un exemple de feuille de style

body {
    background: white;
    color: black;
}
/*   ceci est un commentaire dans une feuille de style.
     à partir de maintenant les commentaires à propos
     de cette feuille seront en bleu
*/
div.slide {
    background-color: white;
    margin: 1em;
    padding: .5em;
    border: solid;
    border-width: 1px;
    border-color: #6666ff;
}

/*  les feuilles de style suivent une syntaxe particulière.
    Ici, on vient de définir les divisions de classe slide, et en-dessous, 
    il y a les divisions de classe example. Le terme classe sera
    expliqué plus tard. Retenons pour l'instant qu'en HTML le code utilisé 
    pour avoir une division suivant le style de classe slide est :

        <div class=slide>bla bla bla<div>

    ce qui donnera le texte "bla bla bla" sur un fond blanc, dans une boîte ayant 
    une marge externe et interne d'une certaine valeur, et avec une bordure d'une
    certaine valeur et d'une certaine couleur.
    Tout ce qui en gras dans la définition ci-dessus constitue un bloc.
*/
div.example {
    width: 100%;
    color: black;
}

/*  Noter qu'un même nom de classe peut être attribué à des éléments HTML différents,
    ici, une div et un tt
*/
tt.example {
    color: maroon;
    margin-left: 1em;
}
pre {
    color: maroon;
    margin-left: 1em;
}

/*  pour toutes les sections <pre>...</pre> la couleur de premier plan 
    est le marron, avec une marge de tant, mais pour les sections de classe dtd
    la couleur de premier plan est noire, et il n'y a pas de marge
*/
pre.dtd {
    color: black;
    margin-left: 0;
}
div.deprecated-example {
    width: 100%;
    color: red;
    border: solid rgb(255,165,0); /* orange */
}

/*   de plus en plus fort : les paragraphes contenus dans une division
     de classe deprecated-example ont le noir comme couleur de premier plan
*/
div.deprecated-example p {
    color: black;
}

/*  la casse des identificateurs n'a pas d'importance
*/
DIV.subtoc {paDDinG: 1em; border: solid thin; margin: 1em 0;
    background: #ddd}

4 / 59

Quelques généralités

Notions de base

Jeu de caractactères
Unicode (ISO 10646)

Identificateurs
indépendants de la casse ; ne doivent pas être entourés par des guillemets ou des apostrophes
text-traNSFOrm white FONt-style italiC

Règles (de style)
composées à gauche d'un sélecteur, et à droite d'un bloc (de déclarations de styles)
H1 + P {color: blue; margin-left: 1em}

Règles "at"
le premier identificateur de la partie gauche (sélecteur) est immédiatement précédée d'un @
@import "feuille.css";

Déclarations
dans le bloc, un identificateur, suivi de deux-points, suivi d'une ou plusieurs valeurs
text-align: center
font-family: helvetica, sans-serif

Chaînes de caractères
"entre guillemets comme ceci" ou 'en utilisant l\'apostrophe, comme ceci'

Nombres
1.414 +5 .4 -0.9

Longueurs
exprimées en cm, mm, in (2.54cm), pt (1/72in), pc (12pt) pour les longueurs absolues, et en em, ex et px pour les longueurs relatives, voire en pourcentages
<HR style="width: 50%">

Uniform Resource Locators
BODY { background: url("http://somewhere.to/nowhere.jpg") }


5 / 59

Jeu de caractères

Jeu de caractères

Mais la feuille est elle-même codée dans un jeu de caractère...


6 / 59

Règles, Blocs et Déclarations

Règles

Blocs

Déclarations

La grammaire de CSS1, CSS2, CSS....

Token

 IDENT             {ident} 
 ATKEYWORD         @{ident} 
 STRING            {string} 
 HASH              #{name} 
 NUMBER            {num} 
 PERCENTAGE        {num}% 
 DIMENSION         {num}{ident} 
 URI               url\({w}{string}{w}\)
                   |url\({w}([!#$%&*-~]|{nonascii}|{escape})*{w}\) 
 UNICODE-RANGE     U\+[0-9A-F?]{1,6}(-[0-9A-F]{1,6})? 
 CDO               <!-- 
 CDC               -->
 ;                 ; 
 {                 \{ 
 }                 \} 
 (                 \( 
 )                 \) 
 [                 \[ 
 ]                 \] 
 S                 [ \t\r\n\f]+ 
 COMMENT           \/\*[^*]*\*+([^/][^*]*\*+)*\/ 
 FUNCTION          {ident}\( 
 INCLUDES          ~= 
 DASHMATCH         |= 
 DELIM             any other character not matched by the above rules

Macros

 ident     {nmstart}{nmchar}* 
 name      {nmchar}+ 
 nmstart   [a-zA-Z]|{nonascii}|{escape} 
 nonascii  [^\0-\177] 
 unicode   \\[0-9a-f]{1,6}[ \n\r\t\f]? 
 escape    {unicode}|\\[ -~\200-\4177777] 
 nmchar    [a-z0-9-]|{nonascii}|{escape} 
 num       [0-9]+|[0-9]*\.[0-9]+ 
 string    {string1}|{string2} 
 string1   \"([\t !#$%&(-~]|\\{nl}|\'|{nonascii}|{escape})*\" 
 string2   \'([\t !#$%&(-~]|\\{nl}|\"|{nonascii}|{escape})*\' 
 nl        \n|\r\n|\r|\f 
 w         [ \t\r\n\f]*

Syntaxe

stylesheet  : [ CDO | CDC | S | statement ]*;
statement   : ruleset | at-rule;
at-rule     : ATKEYWORD S* any* [ block | ';' S* ];
block       : '{' S* [ any | block | ATKEYWORD S* | ';' ]* '}' S*;
ruleset     : selector? '{' S* declaration? [ ';' S* declaration? ]* '}' S*;
selector    : any+;
declaration : property ':' S* value;
property    : IDENT S*;
value       : [ any | block | ATKEYWORD S* ]+;
any         : [ IDENT | NUMBER | PERCENTAGE | DIMENSION | STRING
              | DELIM | URI | HASH | UNICODE-RANGE | INCLUDES
              | FUNCTION | DASHMATCH | '(' any* ')' | '[' any* ']' ] S*;

7 / 59

Longueurs et pourcentages

Les longueurs relatives


Les pourcentages


8 / 59

Les cascades, première partie

L'application en cascades, première partie

Origine des définitions de style

Feuille de style définie dans un document externe et pouvant ansi être appliquée à plusieurs documents
<LINK rel="STYLESHEET" href="../styles/default.css" type="text/css">
<LINK rel="STYLESHEET" href="http://somewhere.to/nowhere.css" type="text/css">

Feuille de style définie localement en haut du document (voir le HEADer de ce document, version web uniquement)
<STYLE type="text/css" title="style local">
<!--
div.slide {
    background-color: white;
    margin: 1em;
    padding: .5em;
    border: solid;
    border-width: 3px;
    border-color: #ff9999;
}
-->
</STYLE>
Style appliqué localement à un élément HTML
<span style="font-style: italic">cet exemple</span>

Feuilles de style non développées par l'auteur
feuille du navigateur (appliquée en l'absence de tout style) et feuille(s) du lecteur

Importation de règles

Dans une feuille de style, il est possible d'importer les déclarations d'une autre feuille. On utilise pour ça une règle "at", par exemple 

/* fichier default.css */
@import "special.css"; /* noter le ; à la fin */
@import url(http://somewhere.to/nowhere.css);
P {color: blue}
/* noter que les @import doivent précéder les règles 
   classiques sous peine d'invalidité de la feuille de style
*/

9 / 59

La gestion d'alternatives

Donner le choix au navigateur

Retour sur HTML4.0

<!ELEMENT LINK - o EMPTY >
<!ATTLIST LINK
  %attrs;
  charset  %Charset;      #IMPLIED
  href     %URI;          #IMPLIED
  hreflang %LanguageCode; #IMPLIED
  type     %ContentType;  #IMPLIED
  rel      %LinkTypes;    #IMPLIED
  rev      %LinkTypes;    #IMPLIED
  media    %MediaDesc;    #IMPLIED
>
REL TITLE Signification
stylesheet <rien> Feuille persistante, qui doit toujours être prise en compte
stylesheet <une valeur> Feuille préférée
alternate stylesheet <une valeur> Feuille participant à une alternative, et devant être proposée à l'utilisateur
<LINK REL="stylesheet" TYPE="text/css" HREF="foo.css">
<LINK REL="stylesheet" TYPE="text/css" HREF="bar1.css TITLE="Feuille Bar1">
<LINK REL="stylesheet" TYPE="text/css" HREF="bar2.css TITLE="Feuille Bar2">
<LINK REL="alternate stylesheet" TYPE="text/css" HREF="foobar.css TITLE="Feuille FooBar">
<LINK REL="alternate stylesheet" TYPE="text/css" HREF="foobar2.css TITLE="Feuille Bar2">
  1. Si l'utilisateur veut ignorer tous les styles définis par l'auteur, OK
  2. Sinon, proposer les choix alternatifs (avec au moins un choix préféré)
    Style:
  3. Si l'utilisateur ne choisit pas, prendre la feuille préférée
  4. Utiliser toutes les alternatives ayant le même TITLE que la feuille retenue
  5. Utiliser bien sûr les feuilles persistantes s'il en existe

Une ruse à implémenter sur votre serveur web

Si votre site web n'a aucune feuille de style, ne vous cassez pas la tête avec des LINK à insérer partout...


10 / 59

Les sélecteurs

Sélecteurs simples

universel
* {font-family: helvetica}

de type d'éléments
P {color: blue}

d'ID
P#resume {margin-left: 1em; margin-right: 1em}

d'attribut
d'existence d'attribut
*[LANG] {font-style: italic}
d'uni-valeur d'attribut
*[LANG="en"] {font-style: italic}
de multi-valeur d'attribut
P[class~=basique] {font-style: italic}
<P CLASS="basique baroque">...
de valeur d'attribut linguistique
P[LANG|="fr"] {font-style: italic}
<P LANG=fr>voiture</P>
<P LANG=fr-ca>char</P>
de classe
P.basique {font-style: normal; color:black}
.basique {font-style: normal}
P[LANG="fr"].basique {font-style: italic; color:black}
P[LANG="fr"].basique.baroque {font-style: italic; color:silver}

Attention de bien respecter l'esprit des feuilles de style. Ne pas mélanger aspect physique et structure de document :
SPAN.adresse {font-style:italic; text-align: right}


11 / 59

Les combinaisons de sélecteurs

Combinaisons

  1. l'espace (et la tabulation ou la suite d'espaces) signifiant la descendance :
    P EM {font-weight: bold}

    <P> l'<span style="color: blue;"><em>emphasize</em></span> n'est plus en italique mais en gras (et en théorie).
    DIV * P correspond à tous les P au moins petit-fils d'un DIV

  2. le signe supérieur > pour signifier la filliation (descendance directe père-fils) :
    P > EM {font-weight: bold}

    <P> l'<em>emphasize</em> est censé être graissé

  3. le signe plus + pour signifier l'adjacence :
    H3 + P {font-style: italic} correspond au premier paragraphe P qui suit un en-tête H3

12 / 59

Les pseudo-classes

Pseudo-classes

  1. TT:first-child {color: blue}
    <span>un essai sur <i>fils</i> italique du père span</span>
  2. :focus et :lang()
    *:lang(en) {font-style: italic}

13 / 59

Les pseudo-éléments

Pseudo-éléments

  1. P:first-line {font-weight: bold}
  2. P.premier:first-lespaner {font-size: 200%}
  3. H1:before {content: "Chapitre"}
  4. P.footnote:after {content: "[Retour <a href=\"#top" attr(NAME) "\">dans le texte</a>]"}

    Texte faisant <a href="#fn1" name="topfn1">appel à une note de bas de page</a>...
    La dite note est automatiquement suivie de [Retour <a href="#topfn1">dans le texte</a>]


14 / 59

Les regroupements de sélecteurs

Regroupement de sélecteurs

H1 {font-family: helvetica}
H2 {font-family: helvetica}
H3 {font-family: helvetica}
H4 {font-family: helvetica}
H5 {font-family: helvetica}
H6 {font-family: helvetica}
est équivalent à :
H1, H2, H3, H4, H5, H6 {font-family: helvetica}

15 / 59

Les cascades, deuxième partie

Héritage

Un paragraphe vert ayant un mot en gras a bien ce mot gras vert (<b> a hérité du style de son <p> englobant)

<p style="color: green">Un paragraphe vert ayant un <b>mot</b> en gras...

Nota:Toutes les propriétés ne s'héritent pas ainsi, mais il est possible de forcer un héritage si besoin est.

Spécificités : quand plusieurs styles sont applicables

Soit la feuille de style (improbable) suivante :

LI {color: blue}
OL LI {color: red}
OL.bidule LI {color: fuchsia}
DIV TABLE#glou TD LI#gla {color: green}
On va faire quelques calculs, mais pour simplifier, on dira que a=0, b=1, c=2 etc... L'idée est de fabriquer un mot de 3 lettres pour chacune de ces déclarations.
  1. la première lettre du mot est le nombre de sélecteurs d'ID. Dans notre exemple c'est a pour tout le monde sauf le dernier qui est c (#glou #gla)
  2. la deuxième lettre est le nombre de sélecteurs d'attributs et de pseudo-classes (oops, on verra ce terme plus tard). Ici, respectivement a a b et a.
  3. la dernière lettre est le nombre d'éléments de chaque déclaration, ici respectivement b c c et e.
  4. On obtient donc aab, aac, abc, et cae
  5. Triez dans l'ordre alphabétique et le mot le plus loin dans le dictionnaire remporte la mise : le style correspondant est appliqué à l'élément en jeu

Les déclarations !important

span[class=example] {color: aqua !important} (noter que !important n'est pas pris en compte par Netscape)

Ordre de cascade

Allez ! On mélange tout ce qui est au-dessus, et qu'est-ce qui sort ? Un algorithme de cascade des styles (pour chaque élément) :

  1. s'il y a des déclarations de style applicables
    1. filtrer selon l'origine
      1. les déclarations normales du rédacteur ont précédence sur celles, normales du lecteur et elles-même sur celles du navigateur
      2. les déclarations !important du lecteur ont précédence sur celles du rédacteur
    2. garder la déclaration avec la plus grande spécificité
    3. si choix encore possible, garder la dernière déclarée
  2. s'il n'y a pas de déclaration de style applicable, utilisée le style hérité
  3. s'il n'y a pas de style hérité, appliquer le style par défaut

16 / 59

Justification, Indentation et Transformations

Justifications

Un paragraphe aligné à gauche. Lorem ipsum dolor sit amet, consectetuer adipiscing elit, sed diem nonummy nibh euismod tincidunt ut lacreet dolore magna aliguam erat volutpat. Ut wisis enim ad minim veniam, quis nostrud exerci tution ullamcorper suscipit lobortis nisl ut aliquip ex ea commodo consequat. Duis te feugifacilisi.
<p style="text-align: left">

Un paragraphe aligné à droite. Lorem ipsum dolor sit amet, consectetuer adipiscing elit, sed diem nonummy nibh euismod tincidunt ut lacreet dolore magna aliguam erat volutpat. Ut wisis enim ad minim veniam, quis nostrud exerci tution ullamcorper suscipit lobortis nisl ut aliquip ex ea commodo consequat. Duis te feugifacilisi.
<p style="text-align: right">

Un paragraphe centré. Lorem ipsum dolor sit amet, consectetuer adipiscing elit, sed diem nonummy nibh euismod tincidunt ut lacreet dolore magna aliguam erat volutpat. Ut wisis enim ad minim veniam, quis nostrud exerci tution ullamcorper suscipit lobortis nisl ut aliquip ex ea commodo consequat. Duis te feugifacilisi.
<p style="text-align: center">

Un paragraphe justifié. Lorem ipsum dolor sit amet, consectetuer adipiscing elit, sed diem nonummy nibh euismod tincidunt ut lacreet dolore magna aliguam erat volutpat. Ut wisis enim ad minim veniam, quis nostrud exerci tution ullamcorper suscipit lobortis nisl ut aliquip ex ea commodo consequat. Duis te feugifacilisi.
<p style="text-align: justify">

Indentations

Un paragraphe indenté. Lorem ipsum dolor sit amet, consectetuer adipiscing elit, sed diem nonummy nibh euismod tincidunt ut lacreet dolore magna aliguam erat volutpat. Ut wisis enim ad minim veniam, quis nostrud exerci tution ullamcorper suscipit lobortis nisl ut aliquip ex ea commodo consequat. Duis te feugifacilisi.
<p style="text-indent: 2em">

Un autre paragraphe indenté, et justifié. Lorem ipsum dolor sit amet, consectetuer adipiscing elit, sed diem nonummy nibh euismod tincidunt ut lacreet dolore magna aliguam erat volutpat. Ut wisis enim ad minim veniam, quis nostrud exerci tution ullamcorper suscipit lobortis nisl ut aliquip ex ea commodo consequat. Duis te feugifacilisi. Lorem ipsum dolor sit amet, consectetuer adipiscing elit, sed diem nonummy nibh euismod tincidunt ut lacreet dolore magna aliguam erat volutpat. Ut wisis enim ad minim veniam, quis nostrud exerci tution ullamcorper suscipit lobortis nisl ut aliquip ex ea commodo consequat. Duis te feugifacilisi.
<p style="text-indent: 20%; text-align: justify">
Les 20% sont relatifs à la longueur du paragraphe sans indentation (en fait, la boîte englobante, cf. plus loin).

Un paragraphe indenté avec une valeur négative. Noter le débordement. Lorem ipsum dolor sit amet, consectetuer adipiscing elit, sed diem nonummy nibh euismod tincidunt ut lacreet dolore magna aliguam erat volutpat. Ut wisis enim ad minim veniam, quis nostrud exerci tution ullamcorper suscipit lobortis nisl ut aliquip ex ea commodo consequat. Duis te feugifacilisi.
<p style="text-indent: -1em">

Transformations

Un paragraphe souligné et surligné. L'est-il vraiment, d'ailleurs ? Lorem ipsum dolor sit amet, consectetuer adipiscing elit, sed diem nonummy nibh euismod tincidunt ut lacreet dolore magna aliguam erat volutpat. Ut wisis enim ad minim veniam, quis nostrud exerci tution ullamcorper suscipit lobortis nisl ut aliquip ex ea commodo consequat. Duis te feugifacilisi.
<p style="text-decoration: underline overline">
Autre valeurs possibles : line-through et blink et none

Un paragraphe avec chaque mot capitalisé. Lorem ipsum dolor sit amet, consectetuer adipiscing elit, sed diem nonummy nibh euismod tincidunt ut lacreet dolore magna aliguam erat volutpat. Ut wisis enim ad minim veniam, quis nostrud exerci tution ullamcorper suscipit lobortis nisl ut aliquip ex ea commodo consequat. Duis te feugifacilisi.
<p style="text-transform: capitalize">
Autre valeurs possibles : uppercase et lowercase et none (il y a toujours none ; noter l'absence de majuscule en début de cette paranthèse)


17 / 59

Espaces et Ombres

Gestion des espaces et retours à la ligne

Exemple avec pre Lorem ipsum dolor sit amet, consectetuer adipiscing elit, sed diem nonummy nibh euismod tincidunt ut lacreet dolore magna aliguam erat volutpat. Ut wisis enim ad minim veniam, quis nostrud exerci tution ullamcorper suscipit lobortis nisl ut aliquip ex ea commodo consequat. Duis te feugifacilisi.

Exemple avec nowrap Lorem ipsum dolor sit amet, consectetuer adipiscing elit, sed diem nonummy nibh euismod tincidunt ut lacreet dolore magna aliguam erat volutpat. Ut wisis enim ad minim veniam, quis nostrud exerci tution ullamcorper suscipit lobortis nisl ut aliquip ex ea commodo consequat. Duis te feugifacilisi.

Gestion de l'espace inter-mots

Lorem ipsum dolor sit amet, consectetuer adipiscing elit, sed diem nonummy nibh euismod tincidunt ut lacreet dolore magna aliguam erat volutpat. Ut wisis enim ad minim veniam, quis nostrud exerci tution ullamcorper suscipit lobortis nisl ut aliquip ex ea commodo consequat. Duis te feugifacilisi.
<p style="text-align: justify; word-spacing: 5em">
Il s'agit d'une espace en plus de l'espace standard.

Gestion de l'espace inter-lettres

Lorem ipsum dolor sit amet, consectetuer adipiscing elit, sed diem nonummy nibh euismod tincidunt ut lacreet dolore magna aliguam erat volutpat. Ut wisis enim ad minim veniam, quis nostrud exerci tution ullamcorper suscipit lobortis nisl ut aliquip ex ea commodo consequat. Duis te feugifacilisi.
<p style="text-align: justify; letter-spacing: 5em">
Il s'agit d'une espace en plus de l'espace standard.

L'ombre (une définition un peu... floue)

text-shadow:
  none |
    [<color> ||
     <length> <length> <length>? ,
    ]*
    [<color> ||
     <length> <length> <length>?]
  | inherit
H1 { text-shadow: 0.2em 0.2em }
H2 { text-shadow: 3px 3px 5px red }
H2 { text-shadow: 3px 3px red, yellow -3px 3px 2px, 3px -3px }
SPAN.glow { 
  background: white; 
  color: white;
  text-shadow: black 0px 0px 5px;
}
Attention, un tel texte serait invisible dans un navigateur qui ne connaît que CSS1 !

18 / 59

Direction du texte

Direction du texte

Lorem ipsum dolor sit amet, consectetuer adipiscing elit, sed diem nonummy nibh euismod tincidunt ut lacreet dolore magna aliguam erat volutpat. Ut wisis enim ad minim veniam, quis nostrud exerci tution ullamcorper suscipit lobortis nisl ut aliquip ex ea commodo consequat. Duis te feugifacilisi.
<p style="direction: rtl;">

à gauche 1carac milieu 2carac à droite

à gauche 2carac milieu 1carac à droite

à gauche 2carac ueilim 1carac à droite

<p class=example style="direction: ltr;">à gauche
<span style="direction: rtl; unicode-bidi: normal">carac1
milieu carac2</span> à droite </p>

<p class=example style="direction: ltr;">à gauche
<span style="direction: rtl; unicode-bidi: embed">carac1
milieu carac2</span> à droite </p>

<p class=example style="direction: ltr;">à gauche
<span style="direction: rtl; unicode-bidi: bidi-override">carac1
milieu carac2</span> à droite </p>

19 / 59

Spécifications d'une police de caractère

Spécifications d'une police de caractère

font-style

font-variant

font-weight

font-stretch

font-size

font-size-adjust

font

[
  [ <'font-style'> || <'font-variant'> || <'font-weight'> ]?
  <'font-size'>
  [ / <'line-height'> ]?
  <'font-family'>
]
| caption | icon | menu | message-box | small-caption | status-bar | inherit 

P { font: 12pt/14pt sans-serif }
P { font: 80% sans-serif }
P { font: x-large/110% "new century schoolbook", serif }
P { font: bold italic large Palatino, serif }
P { font: normal small-caps 120%/120% fantasy }
P { font: oblique 12pt "Helvetica Nue", serif; font-stretch: condensed }

Polices génériques

serif
Times New Roman, Bodoni, Garamond, Minion Web, ITC Stone Serif, MS Georgia, Bitstream Cyberbit
sans-serif
MS Trebuchet, ITC Avant Garde Gothic, MS Arial, MS Verdana, Univers, Futura, ITC Stone Sans, Gill Sans, Akzidenz Grotesk, Helvetica
cursive
Caflisch Script, Adobe Poetica, Sanvito, Ex Ponto, Snell Roundhand, Zapf-Chancery
fantasy
Alpha Geometrique, Critter, Cottonwood, FB Reactor, Studz
monospace
Courier, MS Courier New, Prestige, Everson Mono

20 / 59

Choix d'une police de caractère

Choix d'une police de caractères lors de l'affichage

Algorithme

  1. Construire (ou accéder à) la liste des polices de caractères auxquelles le navigateur peut prétendre :
    • polices installées localement sur la machine

    • polices déclarées grâce à la règle spéciale @font-face

    • polices codées plus ou moins en dur dans le navigateur

    • les 5 polices génériques (serif, sans-serif, cursive, monospace, fantasy)

  2. Pour chaque élément faisant appel à une police donnée, vérifier (grâce à font-family) qu'on la possède, puis voir seulement ensuite si les autres descripteurs de la police (taille, graisse...) peuvent être rendus par une fonte donnée dans cette famille,

  3. Si à l'étape précédente on ne trouve pas de police relevant de la font-family demandée, tenter intelligement de trouver une police semblable en examinant les descripteurs tels que la hauteur du x et autres,

  4. Si l'étape précédente échoue, voir si l'on ne peut pas télécharger la police demandée via le réseau

  5. Si l'étape précédente échoue, essayer avec les mêmes indices que l'avant-dernière étape de synthétiser la police,

  6. Si toutes les étapes précédentes échouent, et que l'élément accepte une font-family alternative, refaire toutes les étapes avec cette autre police,

  7. Si les étapes précédentes réussissent, mais que manque de pot pour un des caractères on ne dispose pas du glyphe correspondant, reprendre à la deuxième étape pour ce caractère (recherche d'une autre police si alternative possible). Les descripteurs de police indiquent quels caractères elles rendent, ce qui facilite la recherche,

  8. Si on a toujours aucune police, utiliser une des polices internes (la plus adaptée). Si un caractère ne peut être affiché, l'indiquer clairement.


21 / 59

Description d'une police de caractère

Description d'une police de caractères : @font-face

Exemple

Soit la liste de polices suivantes désirées :
Swiss 721 light light & light italic
Swiss 721 roman, bold, italic, bold italic
Swiss 721 medium medium & medium italic
Swiss 721 heavy heavy & heavy italic
Swiss 721 black black, black italic, & black #2
Swiss 721 Condensed roman, bold, italic, bold italic
Swiss 721 Expanded roman, bold, italic, bold italic

Les descriptions de polices suivantes peuvent être proposées pour permettre leur téléchargement ensuite.

@font-face {
    font-family: "Swiss 721";
    src: url("swiss721lt.pfr"); /* Swiss 721 light */
    font-style: normal, italic;
    font-weight: 200;
}
@font-face {
    font-family: "Swiss 721";
    src: url("swiss721.pfr"); /* The regular Swiss 721 */
}
@font-face {
    font-family: "Swiss 721";
    src: url("swiss721md.pfr"); /* Swiss 721 medium */
    font-style: normal, italic;
    font-weight: 500;
}
@font-face {
    font-family: "Swiss 721";
    src: url("swiss721hvy.pfr"); /* Swiss 721 heavy */
    font-style: normal, italic;
    font-weight: 700;
}
@font-face {
    font-family: "Swiss 721";
    src: url("swiss721blk.pfr"); /* Swiss 721 black */
    font-style: normal, italic;
    font-weight: 800,900; /* note the interesting problem that
                               the 900 weight italic doesn't exist */
}
@font-face {
    font-family: "Swiss 721";
    src: url(swiss721.pfr); /* The condensed Swiss 721 */
    font-stretch: condensed;
}
@font-face {
    font-family: "Swiss 721";
    src: url(swiss721.pfr); /* The expanded Swiss 721 */
    font-stretch: expanded;
}

Le descripteur unicode-range

unicode-range: U+20A7
un seul caractère (le symbole pour la pesète espagnole)
unicode-range: U+215?
tous les caractères de 2150 à 215F (les fractions)
unicode-range: U+00??
tous les caractères de 0000 à 00FF (Latin-1)
unicode-range: U+E??
de 0E00 à 0EFF
unicode-range: U+AC00-D7FF
de AC00 à D7FF
unicode-range: U+370-3FF, U+1F??
de 0370 à 03FF (Modern Greek) et de 1F00 à 1FFF (Ancient polytonic Greek).
unicode-range: U+3000-303F, U+3100-312F, U+32??, U+33??, U+4E00-9FFF, U+F9000-FAFF, U+FE30-FE4F
Tous les caractères chinois de ISO 10646 excepté ceux qui sont uniquement japonais ou coréens. (U+3000-33FF, U+4E00-9FFF est plus typique)

Le téléchargement des polices

[  [format( [, ]*)]
  | 
]
[,  [format( [, ]*)]
  | 
]* 
src: url("http://foo/bar")
Seulement une URL et on ne sait pas ce qu'on y trouvera
src: local("BT Century 751 No. 2 Semi Bold Italic")
Des informations précises sur une police locale
src: url("../fonts/bar") format("truedoc-pfr")
À cette URL on trouvera des polices au format TrueDoc
src: url("http://cgi-bin/bar?stuff") format("opentype", "intellifont")
Apparement un script CGI qui sait créer à la volée des polices au format OpenType et Intellifont
src: local("T-26 Typeka Mix"), url("http://site/magda-extra") format("type-1")
Une alternative entre deux polices
Chaîne de caractère Format correspondant Quelques extensions classiques
"truedoc-pfr" TrueDoc Portable Font Resource .pfr
"embedded-opentype" Embedded OpenType .eot
"type-1" PostScript Type 1 .pfb, .pfa
"truetype" TrueType .ttf
"opentype" OpenType, including TrueType Open .ttf
"truetype-gx" TrueType with GX extensions
"speedo" Speedo
"intellifont" Intellifont

Descripteurs supplémentaires


Descripteurs supplémentaires pour la synthèse des polices

Descripteurs optionnels supplémentaires pour les alignements


22 / 59

Couleurs et fonds de page (partie 1)

Les couleurs

Codage

La palette web

Pourquoi une palette ?

000000 000033 000066 000099 0000CC 0000FF
003300 003333 003366 003399 0033CC 0033FF
006600 006633 006666 006699 0066CC 0066FF
009900 009933 009966 009999 0099CC 0099FF
00CC00 00CC33 00CC66 00CC99 00CCCC 00CCFF
00FF00 00FF33 00FF66 00FF99 00FFCC 00FFFF
330000 330033 330066 330099 3300CC 3300FF
333300 333333 333366 333399 3333CC 3333FF
336600 336633 336666 336699 3366CC 3366FF
339900 339933 339966 339999 3399CC 3399FF
33CC00 33CC33 33CC66 33CC99 33CCCC 33CCFF
33FF00 33FF33 33FF66 33FF99 33FFCC 33FFFF
660000 660033 660066 660099 6600CC 6600FF
663300 663333 663366 663399 6633CC 6633FF
666600 666633 666666 666699 6666CC 6666FF
669900 669933 669966 669999 6699CC 6699FF
66CC00 66CC33 66CC66 66CC99 66CCCC 66CCFF
66FF00 66FF33 66FF66 66FF99 66FFCC 66FFFF
990000 990033 990066 990099 9900CC 9900FF
993300 993333 993366 993399 9933CC 9933FF
996600 996633 996666 996699 9966CC 9966FF
999900 999933 999966 999999 9999CC 9999FF
99CC00 99CC33 99CC66 99CC99 99CCCC 99CCFF
99FF00 99FF33 99FF66 99FF99 99FFCC 99FFFF
CC0000 CC0033 CC0066 CC0099 CC00CC CC00FF
CC3300 CC3333 CC3366 CC3399 CC33CC CC33FF
CC6600 CC6633 CC6666 CC6699 CC66CC CC66FF
CC9900 CC9933 CC9966 CC9999 CC99CC CC99FF
CCCC00 CCCC33 CCCC66 CCCC99 CCCCCC CCCCFF
CCFF00 CCFF33 CCFF66 CCFF99 CCFFCC CCFFFF
FF0000 FF0033 FF0066 FF0099 FF00CC FF00FF
FF3300 FF3333 FF3366 FF3399 FF33CC FF33FF
FF6600 FF6633 FF6666 FF6699 FF66CC FF66FF
FF9900 FF9933 FF9966 FF9999 FF99CC FF99FF
FFCC00 FFCC33 FFCC66 FFCC99 FFCCCC FFCCFF
FFFF00 FFFF33 FFFF66 FFFF99 FFFFCC FFFFFF

Voir aussi cet utilitaire (http://the-light.com/colclick.html) pour choisir ses couleurs.


23 / 59

Couleurs et fonds de page (partie 2)

Couleurs fonctionnelles

Pour s'adapter au look and feel de votre lecteur...

ActiveBorder
Active window border.
ActiveCaption
Active window caption.
AppWorkspace
Background color of multiple document interface.
Background
Desktop background.
ButtonFace
Face color for three-dimensional display elements.
ButtonHighlight
Dark shadow for three-dimensional display elements (for edges facing away from the light source).
ButtonShadow
Shadow color for three-dimensional display elements.
ButtonText
Text on push buttons.
CaptionText
Text in caption, size box, and scrollbar arrow box.
GrayText
Grayed (disabled) text. This color is set to #000 if the current display driver does not support a solid gray color.
Highlight
Item(s) selected in a control.
HighlightText
Text of item(s) selected in a control.
InactiveBorder
Inactive window border.
InactiveCaption
Inactive window caption.
InactiveCaptionText
Color of text in an inactive caption.
InfoBackground
Background color for tooltip controls.
InfoText
Text color for tooltip controls.
Menu
Menu background.
MenuText
Text in menus.
Scrollbar
Scroll bar gray area.
ThreeDDarkShadow
Dark shadow for three-dimensional display elements.
ThreeDFace
Face color for three-dimensional display elements.
ThreeDHighlight
Highlight color for three-dimensional display elements.
ThreeDLightShadow
Light color for three-dimensional display elements (for edges facing the light source).
ThreeDShadow
Dark shadow for three-dimensional display elements.
Window
Window background.
WindowFrame
Window frame.
WindowText
Text in windows.

24 / 59

Couleurs et fonds de page (partie 3)

Les fonds

Héritage du fond

<div style="background-image: url(../images/tile-coral-up.png); background-color: lime">

Lorem ipsum dolor sit amet, consectetuer adipiscing elit, sed diem nonummy nibh euismod tincidunt ut lacreet dolore magna aliguam erat volutpat. Ut wisis enim ad minim veniam, quis nostrud exerci tution ullamcorper suscipit lobortis nisl ut aliquip ex ea commodo consequat. Duis te feugifacilisi.

<p style="background-image: none;"> Ce paragraphe devrait apparaître sans l'image de fond que ceux qui l'entourent possèdent.
Notez qu'un bon moyen de faire planter netscape (au moins sous unix) semble être de spécifier une autre image : <p style="background-image: url(aure_image.png);">

Lorem ipsum dolor sit amet,

<p style="background-image: url(../images/tile-coral-up.png); margin-left: 1cm;"> Lorem ipsum dolor sit amet, consectetuer adipiscing elit, sed diem nonummy nibh euismod tincidunt ut lacreet dolore magna aliguam erat volutpat. Ut wisis enim ad minim veniam, quis nostrud exerci tution ullamcorper suscipit lobortis nisl ut aliquip ex ea commodo consequat. Duis te feugifacilisi.

<p style="background: #FFFFFF; margin-left: 1cm;"> Lorem ipsum dolor sit amet, consectetuer adipiscing elit, sed diem nonummy nibh euismod tincidunt ut lacreet dolore magna aliguam erat volutpat. Ut wisis enim ad minim veniam, quis nostrud exerci tution ullamcorper suscipit lobortis nisl ut aliquip ex ea commodo consequat. Duis te feugifacilisi.

<p style="background: transparent; margin-left: 1cm;"> Lorem ipsum dolor sit amet, consectetuer adipiscing elit, sed diem nonummy nibh euismod tincidunt ut lacreet dolore magna aliguam erat volutpat. Ut wisis enim ad minim veniam, quis nostrud exerci tution ullamcorper suscipit lobortis nisl ut aliquip ex ea commodo consequat. Duis te feugifacilisi.

</div>

Répétitions

<div style="background-image: url(../images/marble.png); background-repeat: repeat-y; border: solid 1pt black;">

Lorem ipsum dolor sit amet, consectetuer adipiscing elit, sed diem nonummy nibh euismod tincidunt ut lacreet dolore magna aliguam erat volutpat. Ut wisis enim ad minim veniam, quis nostrud exerci tution ullamcorper suscipit lobortis nisl ut aliquip ex ea commodo consequat. Duis te feugifacilisi.

Lorem ipsum dolor sit amet, consectetuer adipiscing elit, sed diem nonummy nibh euismod tincidunt ut lacreet dolore magna aliguam erat volutpat. Ut wisis enim ad minim veniam, quis nostrud exerci tution ullamcorper suscipit lobortis nisl ut aliquip ex ea commodo consequat. Duis te feugifacilisi.

Lorem ipsum dolor sit amet, consectetuer adipiscing elit, sed diem nonummy nibh euismod tincidunt ut lacreet dolore magna aliguam erat volutpat. Ut wisis enim ad minim veniam, quis nostrud exerci tution ullamcorper suscipit lobortis nisl ut aliquip ex ea commodo consequat. Duis te feugifacilisi.

</div>

Positionnement

background-position: 50% 50%
L'image (plus ou moins son centre de gravité) est placé aux pourcentages spécifiés des largeurs et hauteurs de l'élément parent.
background-position: 2cm 5cm
idem avec des distances par rapport au coin supérieur gauche de l'élément parent
background-position: top right
top left et left top
signifient '0% 0%'.
top, top center, et center top
signifient '50% 0%'.
right top et top right
signifient '100% 0%'.
left, left center, et center left
signifient '0% 50%'.
center et center center
signifient '50% 50%'.
right, right center, et center right
signifient '100% 50%'.
bottom left et left bottom
signifient '0% 100%'.
bottom, bottom center, et center bottom
signifient '50% 100%'.
bottom right et right bottom
signifient '100% 100%'.

Corrections gamma

Aller voir la spécification


25 / 59

Les boîtes

La notion de boîte


Figure en provenance de la spécification CSS2

Le paragraphe contenant les indications de style se trouve dans une division en fond grisé pour montrer les différentes marges.

Un peu de texte au-dessus

P.essai1 {
background-color: #999999;
border-style : solid;
border-width: 1pt;
border-color: blue;
margin-top: 50px; /* marges externes */
margin-right: 150px;
margin-bottom: 0px;
margin-left: 30px;
padding: 0pt; /* marges internes */
}

Noter les quelques pixels de marge autour des cadres, selon les navigateurs...

P.essai2 {
background-color: #999999;
border-style : solid;
border-width: 1pt;
border-color: blue;
margin-top: 50px; /* marges externes */
margin-right: 150px;
margin-bottom: 0px;
margin-left: 30px;
padding: 20pt; /* marges internes */
}

Un peu de texte au-dessous... Lorem ipsum dolor sit amet, consectetuer adipiscing elit, sed diem nonummy nibh euismod tincidunt ut lacreet dolore magna aliguam erat volutpat. Ut wisis enim ad minim veniam, quis nostrud exerci tution ullamcorper suscipit lobortis nisl ut aliquip ex ea commodo consequat. Duis te feugifacilisi.

Noter ci-dessous l'effet sur les marges que fait parfois l'absence de cadre, selon le navigateur :

P.essai3 {
background-color: #99ff99;
margin-top: 50px; /* marges externes */
margin-right: 150px;
margin-bottom: 0px;
margin-left: 30px;
padding: 0pt; /* marges internes */
}

Ruse horrible : un cadre d'une largeur de 1 pixel et de la même couleur que celle de la boîte englobante !

P.essai4 {
background-color: #9999ff;
border-style : solid;
border-width: 1pt;
border-color: #dddddd;
margin-top: 50px;
margin-right: 150px;
margin-bottom: 0px;
margin-left: 30px;
padding: 0pt;
}

Généralité des CSS : les raccourcis

padding: 20pt; équivaut à
padding-top:20pt; padding-right:20pt; padding-bottom:20pt; padding-left:20pt;

padding: 20pt 40pt; équivaut à
padding-top:20pt; padding-right:40pt; padding-bottom:20pt; padding-left:40pt;

border: 10px solid blue; équivaut à
border-width: 10px; border-style: solid; border-color: blue;

Les différents types de cadres

border-style: dotted

border-style: dashed

border-style: solid

border-style: double

border-style: groove

border-style: ridge

border-style: inset

border-style: outset

border-style: hidden


26 / 59

Types de boîtes

Deux types d'éléments

Boîtes et blocs

La racine

Les boîtes anonymes

<DIV> <!-- bloc -->
  Some text <!-- flot de texte -->
  <P>More text <!-- bloc -->
</DIV>

3 boîtes (source: spécification CSS2)
<P>Un peu de texte <B>en gras</B> pour voir</P>

La propriété display

Les éléments HTML définissent déjà des types de boîtes, mais la propriété display permet de les redéfinir, voire de ne pas créer les boîtes.

inline
pour définir un flot de texte normal (lignes dans un paragraphe, par ex.)
block
pour définir une boîte de type bloc, comme une division, un paragraphe, un <pre>...</pre>
list-item
pour définir un article dans une liste (boîte de type bloc) ainsi que la boîte nécessaire à l'éventuelle numérotation
marker
une boîte spéciale pour numéroter et générer d'autres contenus : boîte formatée sur une seule ligne et sans marges extérieures
compact
une boîte qui est de type bloc ou de type flot de texte selon la largeur de la boîte suivante et de sa marge extérieure
run-in
comme pour compact, sans la condition sur la marge
none
aucune boîte n'est créée : la place de l'élément concerné n'est pas réservée et l'élément n'est pas restitué. À ne pas confondre avec visibility: hidden pour lequel la place est réservée et l'élément n'est pas restitué
table, inline-table, table-row-group, table-column, table-column-group, table-header-group, table-footer-group, table-row, table-cell, and table-caption
boîtes spéciales se comportant comme des éléments de tableaux

27 / 59

Autres propriétés des boîtes

Inter-lignes et alignements verticaux

Pour illustrer ces propriétés, nous utilisons <p style="line-height: 2em"> qui définit un inter-ligne de deux lignes, ce qui permet de jouer avec les mots dans les lignes en ayant toute la place voulue. Malheureusement, ni netscape4 ni explorer4 n'implémentent les alignements verticaux avec les propriétés légales du type <span style="vertical-align: -.5ex">, et nous avons du utiliser <sup> et <sub> pour la démontration.

Précisions sur line-height

Précisions sur vertical-align


28 / 59

Le positionnement des boîtes

Le positionnement des (blocs de) boîtes

Stratégies de positionnement

Restitution normale
éléments de type bloc ou flot de texte classiques, positionnements relatifs des blocs ou flot de texte, et positionnement des boîtes run-in et compact
Restitution flottante
éléments restitués normalement, puis positionnés à droite ou à gauche le plus loin possible. Les autres éléments peuvent couler autour.
Restitution absolue
éléments qui n'ont aucun impact sur le positionnement des éléments restitués normalement, mais sont positionnés par rapport à certains d'entre eux

La propriété position

Il est possible de positionner des éléments où l'on veut dans une page web, grâce aux propriétés suivantes :

  1. static : correspondant à la restitution "classique" d'un document HTML. Les propriétés left top ne signifient rien.
  2. relative : en utilisant les valeurs de 4 autres propriétés (top right bottom left) l'élément est positionné relativement à sa position classique (telle que static l'aurait rendu)
  3. absolute : cette fois-ci l'élément est positionné par rapport à sa boîte parente. Les propriétés left top right bottom sont fondamentales.
  4. fixed : et cette fois par rapport à la boîte parente de toutes les autres, c'est-à-dire la fenêtre de restitution dans le cas d'un media visuel.

29 / 59

Positionnement: Restitution normale des éléments

Restitution normale

En contexte de bloc

En contexte de flot de texte

    <STYLE type="text/css">
      EM {
        padding: 2px; 
        margin: 1em;
        border-width: medium;
        border-style: dashed;
        line-height: 2.4em;
      }
    </STYLE>
  <BODY>
    <P>Several <EM>emphasized words</EM> appear here.</P>
  </BODY>

Positionnement relatif


30 / 59

Positionnement: Restitution flottante des éléments

Restitution flottante

L'image à gauche est flottante grâce à la propriété float: left et le texte s'affiche tout autour. Si l'on désire continuer à écrire en-dessous de l'image et non pas autour, il faut insérer (par exemple)
<br clear=both>...

<IMG style="float: left" SRC="tour.jpg" ALT="" WIDTH="147"
HEIGHT="162" BORDER="0"> L'image à gauche est flottante grâce à la
propriété ...

...comme ceci. Quid Erat Demonstrandum !

avec : P {clear: left;}

31 / 59

Positionnement: Débordements et Clips

Débordements et clip

NOTA: ces exemples sont décevants sur certains navigateurs, et quand on les imprime, hélas.

overflow: visible
lorem ipsum ajdhf afkhadf asdkfjhasdf askdfjhasf akdhfa dkfjha dfkajsfhd
overflow: hidden
lorem ipsum ajdhf afkhadf asdkfjhasdf askdfjhasf akdhfa dkfjha dfkajsfhd
overflow: scroll
lorem ipsum ajdhf afkhadf asdkfjhasdf askdfjhasf akdhfa dkfjha dfkajsfhd
clip: rect(-1cm, 1cm, 1cm, 1cm)
lorem ipsum ajdhf afkhadf asdkfjhasdf askdfjhasf akdhfa dkfjha dfkajsfhd

32 / 59

Positionnement: en couches

Empilements

Utilisation de la propriété z-index. Une boîte est par-dessus une autre ayant un z-index inférieur.

Texte qui doit se trouver au-dessus. Texte qui doit se trouver au-dessous.

.over   { position: relative;
        top: 0px;
        left: 20px;
        z-index: 2;
        background-color: #ccffcc
        }
.under  { position: relative;
        top: 10px;
        left: -200px;
        z-index: 1;
        background-color: #ccccff
        }

33 / 59

Positionnement: bon à savoir

Relations entre display, position et float

  1. Si on a display: none, le navigateur doit ignorer les propriétés position et float. Dans ce cas, l'élément concerné ne crée pas de boîte

  2. Sinon, si on a position: absolute ou position: fixed, alors display est positionné à block et float à none.
    La position de la boîte est déterminée par les propriétés top, right, bottom et left de la boîte-bloc parent

  3. Sinon, si float a une valeur autre que none, display est positionné à block et la boîte flotte

  4. Sinon, display garde ses propriétés telles que désirées par l'auteur


34 / 59

Un exemple : le multi-colonnage (partie 1)

Deux colonnes sans tableau : la page d'accueil de David Baron

Le HEADer

<head>
  <title>David Baron's Homepage</title>
  <meta http-equiv="Content-Type" content="text/html;
    charset=iso-8859-1">
  <meta http-equiv="Content-Style-Type" content="text/css">
  <link rel="stylesheet" href="style/forest" title="Forest"
    type="text/css">
  <link rel="stylesheet alternate" href="style/plain" title="Plain"
    type="text/css">
  <link rel="stylesheet alternate"
    href="http://www.w3.org/StyleSheets/Core/Ultramarine"
    title="Ultramarine" type="text/css">
  <link rel="stylesheet alternate"
    href="http://www.w3.org/StyleSheets/Core/Steely"
    title="Steely" type="text/css">
  <link rel="stylesheet alternate"
    href="http://www.w3.org/StyleSheets/Core/Oldstyle"
    title="Oldstyle" type="text/css">
  <link rel="stylesheet" href="style/index"
    type="text/css" media="screen">
  <link rel="alternate" type="text/html"
    title="Español" hreflang="es" href="index.html.es">
  <link rel="copyright" href="legal">
</head>

La feuille de style générale associée

/* WinNS4 */
BODY	{
	/* Reduce the huge margins, since I have 2 columns */
/*	margin: 0;
	padding-left: 3%;
	padding-right: 3%;
	padding-top: 2em;
	padding-bottom: 2em; */
	margin-left: 3%;
	margin-right: 3%;
	margin-top: 2em;
	margin-bottom: 2em; 
	}

DIV.left	{
	/* make the left column a float */
	float: left;
	width: 50%;
	/* leave the alignment to the other attributes */
	margin: 0;
	padding: 0;
	border-top-width: 0;
	border-style: none;
	}

DIV.right	{
	float: right;
	width: 49.9%; /* no horizontal scrollbar on MSIE5 */
	margin: 0;
	padding: 0;
	border-top-width: 0;
	border-style: none;
	}

DIV.bottom	{
	padding-top: 2em; /* margin messes up NN 4.5 */
	}

H2	{
	margin-top: 0.5em;
	margin-bottom: 0.2em;
	/* for WinNS4 */
	font-weight: normal;
	}

H2 A, H2 A:link, H2 A:visited, H2 A:hover	{
	font-weight: normal;
	}

DIV.contain	{
	padding: 0;
	border-style: none;
	border-width: 0;
	margin: 0;
	}

DIV.imgicons	{
	margin: 0; /* want the box properties of the P */
	padding: 0;
	float: right;
	width: 150px; /* images are 88px wide, give padding */
	}

P.imgicons	{
	text-align: center;
	}

Le BODY

<body>

<h1 id="head"><span id="headname">David
Baron's</span> <span
id="headhp">Homepage</span></h1>

<p id="afterhead">[ <a
href="index.html.es">Español</a> | <a
href="index.html.eo">Esperanto</a> ]</p>

<div class="left">

<h2><a name="links">My Pages</a></h2>

<ul>
  <li><a href="about">About ...
  <li>...</li>
</ul>

<h2><a href="links/">General Links</a></h2>

<ul>
  <li><a href="links/Search">...
  <li>...</li>
</ul>

</div>

<div class="right">

<h2><a href="weather">Weather and Climate</a>
Links</h2>

<ul>
  <li><a href="links/WGeneral">General</a></li>
  <li><a href="links/WPhiladelphia">Philadelphia Area</a></li>
  <li>...</li>
</ul>

<h2>Quick Links</h2>

<ul>
  <li><a href="http://www.sas.upenn.edu/~jbaron/">
     My father's homepage and links</a></li>
  <li><a href="http://www.hotbot.com/">HotBot</a>,
  <a href="http://altavista.digital.com/">Altavista</a></li>
  <li>...</li>
</ul>

<h2>Weather Quick Links</h2>

...

</div>

<br clear="all">  <!-- Get around an IE 4.0 bug;
   this brings me down to HTML 4.0 transitional -->

<div class="bottom">

<p>
  There is no authoritative list of any set of information on the Web.
  The links presented in these pages represent ...

</p>
  
<p><a href="legal" rel="copyright">Legal
Information</a> (copyright statement, etc.) </p>

<p>LDB, <a rev="made" href="mailto:dbaron@fas.harvard.edu"
title="Send e-mail to David
Baron">dbaron@fas.harvard.edu</a></p>

</div>

</body>



35 / 59

Un exemple : le multi-colonnage (partie 2)

Trois colonnes sans tableau : une ancienne page d'accueil de Jipo

NOTA: Les scripts javascript sont enlevés et seront présentés plus tard

Le HEADer

<head>
<title>Bienvenue chez Jipo, Conseil en
Télécommunications et Internet</title>

<META NAME="Author" CONTENT="Aymeric Poulain Maubant">
...
<META NAME="ROBOTS" CONTENT="ALL">
<META HTTP-EQUIV=Content-Language CONTENT=fr>

<!-- ne plante plus netscape (le pb des 20%) -->

<link REL="StyleSheet" HREF="styles/jipomain.css"
      TYPE="text/css" MEDIA="screen"
      TITLE="Feuille de style générale web Jipo">
<link REL="StyleSheet" HREF="styles/home.css"
      TYPE="text/css" MEDIA="screen"
      TITLE="Feuille de style mise en page d'accueil Jipo">
...

La feuille de style home.css

DIV.left        {
	position: absolute;
	top: 20px
        width: 20%;
        margin-top: 0;
        padding-top: 10;
        padding-bottom: 10;
        padding-left: 0;
        border-top-width: 0;
        border-right-width: 0;
        margin-right-width: 0;
        }

DIV.right        {
        float: right;
	text-align:     left; 
        width: 20%;
        margin-top: 0;
        padding-top: 0;
        padding-left: 30;
        border-top-width: 0;
        border-left-width: 0;
        margin-left-width: 0;
        border-right-width: 0;
        margin-right-width: 0;
        }

/* surtout ne pas enlever le commentaire ci-dessous
   sinon IE4 ne positionne pas la div du milieu ou
   il faut !
*/

/*
#ppweb {
visibility: hiddden;
}
*/


.inprog DIV {
  position: absolute;
  visibility: hidden; /* ne l'etait pas en v6 */
  top: 80px; /* cf DIV.right->margin-top de jipomain.css */
  left: 30%;
  width: 350px; 
}



.progression {
  position: absolute;
  top: 80px; 
  left: 30%;
  width: 400px;
/* si on met un %age (70% par ex.) a cette width, IE4 prend bien
 un %age du bloc englobant, tandis que NS4 semble prendre un
 %age de l'espace qui reste dans le bloc englobant (peut-etre
 est-il influence par les float de chaque cote ?
*/
/*  border: black;
  border-style: solid;
  border-width: 1px;
  background-color: #004455;*/
}


.vocation {
  position: absolute; 
  top: 255px;
  left: 20px;
}

.cinqmn {
  position: absolute;
  top: 30px;
  left: 15px;
}

.atouts {
  position: absolute;
  top: 210px; /* 195 */
  left: 34px; /* 38 */
}
  
.services {
  position: absolute;
  top: 165px; /* 135 */
  left: 55px; /* 72 */
}
  
.besoins {
  position: absolute;
  top: 85px;
  left: 120px;
}
  
.besoins2 {
  position: absolute;
  top: 120px;
  left: 140px;
}
  
.formbesoins {
  position: absolute;
  top: 78px;
  left: 240px;
}
  
.clients {
  position: absolute;
  top: 35px;
  left: 220px;
}
  

.adresse {
  position: absolute;  

/* sous NS4 unix -au moins- mettre visible ci-dessous
   laisse l'adresse tjs visible, meme quand son
   conteneur devient hidden. 125x200 place en-dessous
   de vocation...client */
/*  visibility: visible; 
  top: 125px;
  left: 200px; */
  top: 295px;
  left: 20px;
}

...

Le BODY

NOTA: prévoir un BODY qui se dégrade bien en l'absence de feuille de style.

<body bgcolor="#ffffdd">


<div>
    <h1 class=colJipo>Jipo : Conseil en Télécommunications et Internet</h1>
</div>

<div class=right>

    <p>
    <a href="gc.html">Fournisseurs de services, opérateurs,
constructeurs</a> ou

    ...

    <hr align=center width="50%">

    <p><a href="#Ngene2"><span class=nomJipo>Jipo</span></a>,
    créée en 1997, compte aujourd'hui une vingtaine de
    consultants qui sont intervenus dans plus de 15 pays. </p>

    <hr>

</div> <!-- fin div class=right -->


<div class=left>

    <p> 
    <span style="padding-top:1em;">
    <a href="""><img src="images/theLogoT.gif"
    width=115 height=109 alt="" border=0></a></span><br>  
    <span style="padding-bottom:-1em;"><a href="index.en.htm"><img
    src="icons/uk.gif" width=32 height=32 alt="[english version]"
    border=0></a></span>
    <br>
    ...
    </p>

</div>  <!-- fin div class=left --> 

<!--
NS4 me mettrait apres la div left, IE4 avant !
-->

<!-- cette division de type progression est mise
     avant celle qui contient les liens hypertextes
     (la suivante) pour que ces derniers soient actifs
     (probleme de couches, visiblement, z-index ne
     resolvant rien quand celle-ci etait apres

     Pour windows, ne surtout pas mettre de z-index,
     sinon une fois que les infos legales sont chargees
     toute la partie droite n'est plus active.

-->

<!-- <div class="progression" id=prog2 style="z-index:-1;" -->

<div class="progression" id=prog2>

    <div class=adresse>

        <address>
        <img src="icons/addr.gif" width=20 height=23
        alt="[adresse]" align=left border=0>
        60, rue du Dessous des Berges
            FR-75013 Paris - France<br>
            Tel: +33 (0) 1 53 82 99 40
            Fax: +33 (0) 1 53 82 99 92<br>
        <img src="icons/addr.gif" width=20 height=23
        alt="[adresse]" align=left border=0>
            21, rue Jurien de la Gravière
            FR-29200 Brest - France<br>
            Tel: +33 (0) 2 98 33 12 49
            Fax: +33 (0) 1 98 33 16 54
        </address>

    </div>  <!-- fin div class=adresse -->

</div>  <!-- fin div class=progression -->

<div class="progression" id="prog">

<img src="images/prog.jpg" width=321 height=275 alt="" border=0>

<!--
NS4 et IE4 me mettraient juste apres l'image, ce qui est normal
-->

    <div class=cinqmn>

        <p><em>Découvrez-nous<br>en 5 minutes
        et<br>5 points-clé</em><br>
        <a href="vocation.html"><img src="icons/c1.gif" width=20 height=23
        alt="" align=bottom border=0></a></p>

    </div>

    <span class=vocation><h3><a href="vocation.html">notre vocation</a></h3></span>
    <span class=atouts><h3><a href="atouts.html">nos atouts</a></h3></span>
    <span class=services><h3><a href="services.html">nos services</a></h3></span>
    <span class=besoins><h3><a href="besoins.html">vos besoins</a></h3></span>
    <span class=besoins2><p><a href="prospects.html">précisons-les</a> ensemble... </p></span>
    <span class=clients><h3><a href="clients.html">nos références</a></h3></span>

</div>  <!-- fin div class= progresion & id=prog -->



<div class=inprog>

...

    <DIV ID="webmestre">

        <hr>
        <a href="" name="Nwebmestre"
        <img  src="icons/close.gif" alt="" width=13 height=13 border=0 align=right></a>

        <h3 class=colJipo>Contacter le webmestre</h3>

        <p align=center>Pour tout problème concernant l'utilisation de ce
        site, contactez le webmestre à <a
        href="mailto:webmaster@jipo.com?subject=probleme web
        Jipo"><tt>webmaster@jipo.com</tt></a> </p>

    </DIV>

</div> <!-- fin div class=inprog -->

</body>

36 / 59

Les tableaux

Les tableaux en HTML

Mélange de structure, de mise en page et de mise en forme physique
Légende
En-tête 1 Cellule 1 Cellule 2
En-tête 2 Cellule 3 Cellule 4
En-tête 3 Cellule 5 Cellule 6
<TABLE border=1 cellpadding=4 cellspacing=5>
<CAPTION>Légende</CAPTION>
<TR>
   <TH>En-tête 1</TH>
   <TD bgcolor="#9999cc">Cellule 1</TD>
   <TD>Cellule 2</TD>
</TR><TR>
   <TH>En-tête 2</TH>
   <TD>Cellule 3</TD>
   <TD>Cellule 4</TD>
</TR><TR>
   <TH>En-tête 3</TH>
   <TD>Cellule 5</TD>
   <TD>Cellule 6</TD>
</TR>
</TABLE>


37 / 59

display: pour les tableaux

Des attributs nouveaux pour display:

TABLE    { display: table }
TR       { display: table-row }
THEAD    { display: table-header-group }
TBODY    { display: table-row-group }
TFOOT    { display: table-footer-group }
COL      { display: table-column }
COLGROUP { display: table-column-group }
TD, TH   { display: table-cell }
CAPTION  { display: table-caption }

Le modèle de tableaux en CSS2

table (en HTML: TABLE)
L'élément en question est un tableau de type bloc. C'est un bloc rectangulaire positionné dans un contexte de bloc.
inline-table (In HTML: TABLE)
L'élément en question est un tableau de type flot de texte. C'est un bloc rectangulaire positionné dans un contexte de flot de texte.
table-row (en HTML: TR)
Une colonne de cellules.
table-row-group (en HTML: TBODY)
Un groupe d'une ou plusieurs colonnes.
table-header-group (en HTML: THEAD)
Comme le précédent, mais il s'agit d'un groupe qui est toujours affiché avant tout autre groupe ou colonne, et après l'éventuelle légende de haut de tableau. Ce groupe peut être répété sur chaque page (dans le cas d'impressions de tableaux très longs).
table-footer-group (en HTML: TFOOT)
Comme le précédent, mais après tout autre groupe ou colonne, et avant toute légende de bas de tableau.
table-column (In HTML: COL)
Cet élément n'est pas rendu à l'affichage. Il permet de calculer à l'avance certaines tailles du tableau. Il décrit une colonne de cellules.
table-column-group (en HTML: COLGROUP)
Mêmes caractéristiques que le précédent, mais en groupe.
table-cell (en HTML: TD, TH)
Une cellule.
table-caption (In HTML: CAPTION)
Une légende.

Les cas de column et column-group

Les propriétés suivantes leur sont appliquées :

'border'
Les éventuelles valeurs de border sont utilisées en cas de border-collapse: collapse. Dans ce cas, les calculs de bordures sont effectués à chaque cellule.
'background'
Les couleurs de fond sont appliquées aux cellules du groupe ssi à la fois la cellule et la ligne correspondante ont des couleurs de fond de type transparent.
'width'
Indique la largeur minimum pour la colonne.
'visibility'
Avec visibility: collapse, aucune cellule de la colonne n'est rendue, et les cellules qui empiètent sur d'autres colonnes sont coupées. La largeur du tableau est diminuée d'autant de cette largeur de colonne qui vient de disparaître.

38 / 59

Formatage des tableaux

Position de la légende

BODY {
    margin-left: 8em
}
TABLE { /* table centrée */
    margin-left: auto;
    margin-right: auto
}
CAPTION {
    caption-side: left;
    margin-left: -8em;
    width: 8em;
    text-align: right;
    vertical-align: bottom
}

Comment sont créés les tableaux ?

Lignes (et groupes), colonnes (et groupe), cellules

<TABLE> <!-- exemple de gauche, en HTML -->
<TR><TD>1 <TD rowspan="2">2 <TD>3 <TD>4
<TR><TD colspan="2">5
</TABLE>

<TABLE> 
<ROW><CELL>1 <CELL rowspan="2">2 <CELL>3 <CELL>4
<ROW><CELL colspan="2">5
</TABLE>

Gestion des couleurs de fond


39 / 59

Bordure des tableaux

Gestion des bordures

Deux modèles de gestion de bordures

border-collapse:
  collapse | separate | inherit

separate

border-spacing:
  <length> <length>? | inherit
empty-cells:
  show | hide | inherit

Styles de bordures border-style

none
Pas de bordure
hidden
Comme none, mais dans le cas de bordures "collapse", impose la non-existence aux bordures qui sont partagées (et pas forcément cachées)
dotted
Pointillée
dashed
Série de traits
solid
pleine
double
Doublée. La somme des deux lignes et de l'espace entre ces lignes est égal à border-width
groove
Incrustée
ridge
En relief
inset
Comme groove, mais dans le modèle separate la cellule également semble incrustée
outset
Comme ridge, mais dans le modèle separate la cellule également semble en relief

collapse

Example illustré plus bas :

<STYLE>
  TABLE          { border-collapse: collapse;
                   border: 5px solid yellow; }
  *#col1         { border: 3px solid black; }
  TD             { border: 1px solid red; padding: 1em; }
  TD.solid-blue  { border: 5px dashed blue; }
  TD.solid-green { border: 5px solid green; }
</STYLE>
<BODY>
<P>
<TABLE>
<COL id="col1"><COL id="col2"><COL id="col3">
<TR id="row1">
    <TD> 1
    <TD> 2
    <TD> 3
</TR>
<TR id="row2">
    <TD> 4 
    <TD class="solid-blue"> 5
    <TD class="solid-green"> 6
</TR>
<TR id="row3">
    <TD> 7
    <TD> 8
    <TD> 9
</TR>
<TR id="row4">
    <TD> 10
    <TD> 11
    <TD> 12
</TR>
<TR id="row5">
    <TD> 13
    <TD> 14
    <TD> 15
</TR>
</TABLE>
</BODY>

40 / 59

Pages et impressions (partie 1)

Les pages

size:
  <length>{1,2} | auto | portrait | landscape | inherit
@page :left {
  margin-left: 4cm;
  margin-right: 3cm;
}

@page :right {
  margin-left: 3cm;
  margin-right: 4cm;
}
@page :first {
  margin-top: 10cm    /* Top margin on first page 10cm */
}

Nommage de pages

@page rotated {size: landscape}
TABLE {page: rotated; page-break-before: right}

Dans l'exemple suivant, c'est le rendu "rotated" qui sera utilisé :

<STYLE>
@page narrow {size: 9cm 18cm}
@page rotated {size: landscape}
DIV {page: narrow}
TABLE {page: rotated}
</STYLE>
<BODY>
<DIV>
<TABLE>...</TABLE>
<TABLE>...</TABLE>
</DIV>
</BODY>

41 / 59

Pages et impressions (partie 2)

Les coupures dans les pages

page-break-before
  auto | always | avoid | left | right | inherit
page-break-after
  auto | always | avoid | left | right | inherit
page-break-inside
  avoid | auto | inherit
auto
Ni ne force ni n'interdit de coupure avant, après ou dans la boîte considérée.
always
Force systématiquement une coupre avant, après la boîte considérée.
avoid
Évite une coupure avant, après ou dans la boîte considérée.
left
S'arrange pour insérer le nombre de page nécessaire pour que la prochaine soit à gauche.
right
Pareil, mais à droite.

Veuves et orphelins

orphans
  <integer> (2 initialement) | inherit
widows
  <integer> (2 initialement) | inherit

Cascades et pages

@page {
  margin-left: 3cm;
}

@page :left {
  margin-left: 4cm;
}

42 / 59

La règle @media

Les CSS s'appliquent à différents types de media

all
Concerne tous les media (d'affichage)
aural
Pour les synthétiseurs de parole (cf. Aural Cascading Style Sheets)
braille
Les appareils tactiles
embossed
Les imprimantes brailles
handheld
Tous les appareils ayant une "réduction" quelconque : petit écran, noir et blanc, bande passante faible
print
Papier (et tout matériel opaque), et prévisualisations papier sur un écran
projection
Vidéo-projecteurs et rétro-projecteurs
screen
Écran (d'ordinateurs) couleur
tty
Media sur lesquels tous les caractères ont la même taille : teletypes, terminaux, écrans LCD, mobiles...
tv
Écrans de télévision (caractérisés par une faible résolution, pas d'ascenceurs, du son, de la couleur)

Exemples de spécifications

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN">
<HTML>
   <HEAD>
      <TITLE>Link to a target medium</TITLE>
      <LINK rel="stylesheet" type="text/css" 
	 media="print, handheld" href="foo.css">
   </HEAD>
   <BODY>
      <P>The body...
   </BODY>
</HTML>
  @media print {
    BODY { font-size: 10pt }
  }
  @media screen {
    BODY { font-size: 12pt }
  }
  @media screen, print {
    BODY { line-height: 1.2 }
  }

Les groupes de media

Media Types Media Groups
  continuous/paged visual/aural/tactile grid/bitmap interactive/static
aural continuous aural N/A both
braille continuous tactile grid both
emboss paged tactile grid both
handheld both visual both both
print paged visual bitmap static
projection paged visual bitmap static
screen continuous visual bitmap both
tty continuous visual grid both
tv both visual, aural bitmap both

43 / 59

Aural Cascading Style Sheets

Les feuilles de style audio (ACSS)

http://www.w3.org/TR/REC-CSS2/aural.html

44 / 59

Retour sur :before et :after

Retour sur les pseudo-éléments :before et :after

<STYLE>
H1.chapitre:before {content: "Chapitre "}
P.footnote:after {content: "[Retour <a
href=\"#top" attr(NAME) "\">dans le texte</a>]"}
...
</STYLE>
...
<BODY>
<p>Texte faisant <a href="#fn1" name="topfn1">appel à
une note de base de page</a>...
</BODY>
Q:before {
  content: open-quote;
  color: red
}
BODY:after {
    content: "C'est fini"; /* exercice: dans quel cas ce texte sera utilisé ? */
    display: block; /* noter cette nécessité */
    margin-top: 2em;
    text-align: center;
}

Que peut contenir content: ?

content:
[ <string> | <uri> | <counter> | attr(X) | open-quote | close-quote
           | no-open-quote | no-close-quote ]+
  | inherit 
@media aural {
   BLOCKQUOTE:after { content: url("beautiful-music.wav") }
   }
IMG:before { content: attr(alt) }
H1:before {
    display: block;
    text-align: center;
    content: "chapter\A chapitre"
}

Interactions entre :before :after et les éléments run-in ou compact

  1. Un élément de type run-in ou compact (ér-ic) dispose d'un pseudo-élément :before (ou :after) de type in-line (le défaut) : ce dernier est pris en compte lors du calcul de la taille de l'élément (cas de compact) et se retrouve dans la même boîte de type bloc que l'élément en question

  2. Un ér-ic dispose d'un pseudo-élément :before de type : le pseudo-élément est formatté en tant que bloc au-dessus de l'élément, et n'est pas pris en compte dans le calcul de la taille de l'élément

  3. Un ér-ic dispose d'un pseudo-élément :after de type : le pseudo-élément est formatté en tant que bloc indépendant, et l'élément lui-même ne peut plus être de type inline

  4. L'élément suivant un ér-ic dispose d'un pseudo-élément :before de type bloc : spécification un peu floue, puisqu'il s'agit de formatter l'élément en fonction de la boîte de type bloc qui résulte du before:

  5. L'élément suivant un ér-ic dispose d'un pseudo-élément :before de type inline : comme pour le cas précédent, mais en s'aidant de la valeur de display de l'élément auquel appartient le pseudo-élément

  6. Aspirines ?
<STYLE>
H3 { display: run-in }
H3:after { content: ": " }
P:before { content: "... " }
</STYLE>
<BODY>
<H3>Les saisons</H3>
<P>le printemps
<P>l'été
</BODY>

Ce qui pourrait donner :

Les saisons: ... le printemps
... l'été

La dite note est automatiquement suivie de [Retour <a href="#topfn1">dans le texte</a>]
[Retour dans le texte]

45 / 59

Les citations

Le problème des guillemets

The device of the order of the garter is “Honi soit qui mal y pense.”
Il disait: « Il faut mettre l'action en ‹ fast forward ›.»

Définitions des (paires de) guillemets

Par exemple :

<STYLE>
Q:lang(en) { quotes: '"' '"' "'" "'" }
Q:lang(no) { quotes: "«" "»" "<" ">" }
Q:before { content: open-quote }
Q:after  { content: close-quote }
</STYLE>
<BODY>
<DIV lang="en">
    <P><Q>Quote me!</Q>
</DIV>
<DIV lang="en">
    <P><Q>Trøndere gråter når <Q>Vinsjan på kaia</Q> blir deklamert.</Q>
</DIV>

donnera :

"Quote me!"
«Trøndere gråter når <Vinsjan på kaia> blir deklamert.»

On pourrait ajouter les deux règles suivantes, pour s'assurer que du texte norvégien cité dans du texte anglais est bien entouré des guillemets anglais (ce qui est l'habitude) et réciproquement :

[LANG|=en] > * { quotes: """ """ "'" "'" }
[LANG|=no] > * { quotes: "«" "»" "<" ">" }

Noter qu'il est possible de définir une absence de guillemets :

BLOCKQUOTE P:before     { content: open-quote }
BLOCKQUOTE P:after      { content: no-close-quote }
BLOCKQUOTE P.last:after { content: close-quote }

Codes ISO 10646 à retenir

Rendu approximatif code ISO 10646 (hex) Description
" 0022 QUOTATION MARK [the ASCII double quotation mark]
' 0027 APOSTROPHE [the ASCII single quotation mark]
< 2039 SINGLE LEFT-POINTING ANGLE QUOTATION MARK
> 203A SINGLE RIGHT-POINTING ANGLE QUOTATION MARK
« 00AB LEFT-POINTING DOUBLE ANGLE QUOTATION MARK
» 00BB RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK
` 2018 LEFT SINGLE QUOTATION MARK [single high-6]
' 2019 RIGHT SINGLE QUOTATION MARK [single high-9]
`` 201C LEFT DOUBLE QUOTATION MARK [double high-6]
'' 201D RIGHT DOUBLE QUOTATION MARK [double high-9]
,, 201E DOUBLE LOW-9 QUOTATION MARK [double low-9]

46 / 59

Les compteurs

Les compteurs

counter-increment counter-reset

counter-reset: [ <identifier> <integer>? ]+ | none | inherit
counter-increment: [ <identifier> <integer>? ]+ | none | inherit
/* tous les compteurs sont mis zéro à l'origine, par
 * la balise racine (<HTML>)
 */
H1:before {
    content: "Chapitre " counter(chapter) ". ";
    counter-increment: chapter;  /* Add 1 to chapter */
    counter-reset: section;      /* Set section to 0 */
}
H2:before {
    content: counter(chapter) "." counter(section) " ";
    counter-increment: section;
}
H3 { counter-reset: section -1;}
H3 { counter-reset: imagenum 99;} /* cette règle est plus forte que
                                   * la précédente (cascade) qui ne
                                   * s'exécutera pas.
                                   */
H4 { counter-reset: section -1 imagenum 99;} /* Les deux reset on lieu */

Compteurs imbriqués, et portée

OL { counter-reset: item }
LI { display: block }
LI:before { content: counter(item) ". "; counter-increment: item }

produit bien quelque chose comme :

1. li d'un premier ol
2. li du premier ol
  1. li d'un deuxième ol inclus dans le premier
  2. li du deuxième ol inclus dans le premier
3. li du premier ol
4. li du premier ol
  1. li d'un troisième ol inclus dans le premier
5. li du premier ol

Par ailleurs,

OL { counter-reset: item }
LI { display: block }
LI:before { content: counters(item, "."); counter-increment: item }

produit ceci :

1 qqq
2 www
  2.1 eee
  2.2 rrr
3 ttt
  3.1 yyy
    3.1.1 uuu
    3.1.2 iii
4 ooo

Styles appliqués aux compteurs

H1:before        { content: counter(chno, upper-latin) ". " }
H2:before        { content: counter(section, upper-roman) " - " }
BLOCKQUOTE:after { content: " [" counter(bq, hebrew) "]" }
DIV.note:before  { content: counter(notecntr, disc) " " }
P:before         { content: counter(p, none) }

Et puis aussi...

H2.secret {counter-increment: count2; display: none} /* n'est pas incrémenté */
H3.secret {counter-increment: count3; visibility: hidden} /* est bien incrémenté */

47 / 59

Les marqueurs

Marqueurs

marker-offset

      <STYLE type="text/css">
           P { margin-left: 8em } /* Make space for counters */
           LI:before { 
               display: marker;
               marker-offset: 3em;
               content: counter(mycounter, lower-roman) ".";
               counter-increment: mycounter;
           }   
      </STYLE>
   <BODY>
     <P> This is a long preceding paragraph ...
     <OL>
       <LI> This is the first item.
       <LI> This is the second item.
       <LI> This is the third item.
     </OL>
     <P> This is a long following paragraph ...
   </BODY>

produira ceci :

        This is a long preceding
        paragraph ...
      
   i.   This is the first item.
  ii.   This is the second item.
 iii.   This is the third item.
      
        This is a long following
        paragraph ...

width

      <STYLE type="text/css">
           LI:before { 
               display: marker;
               content: "(" counter(counter) ")";
               counter-increment: counter;
               width: 6em;
               text-align: center;
           }
      </STYLE>
   <BODY>
     <OL>
       <LI> This is the first item.
       <LI> This is the second item.
       <LI> This is the third item.
     </OL>
   </BODY>

produira ceci :

  (1)    This is the 
         first item.
  (2)    This is the 
         second item.
  (3)    This is the 
         third item.

48 / 59

Les listes

Les listes

     <STYLE type="text/css">
          OL { list-style-type: lower-roman }   
     </STYLE>
  <BODY>
    <OL>
      <LI> This is the first item.
      <LI> This is the second item.
      <LI> This is the third item.
    </OL>
  </BODY>

produira ceci (noter que la justification des nombres dépend du bon vouloir du navigateur)  :

  i This is the first item.
 ii This is the second item.
iii This is the third item.

Types de listes

list-style-type:
  disc | circle | square | decimal | decimal-leading-zero |
  lower-roman | upper-roman | lower-greek |
  lower-alpha | lower-latin | upper-alpha | upper-latin |
  hebrew | armenian | georgian | cjk-ideographic |
  hiragana | katakana | hiragana-iroha | katakana-iroha |
  none | inherit

list-style-image:
  <uri> | none | inherit

list-style-position:
  inside | outside | inherit

list-style:
  [ <'list-style-type'> || <'list-style-position'> ||
    <'list-style-image'> ] | inherit

49 / 59

Les curseurs

Spécifier la forme du curseur

cursor:
   [ [<uri> ,]*
     [ auto | crosshair | default | pointer | move |
       e-resize | ne-resize | nw-resize | n-resize |
       se-resize | sw-resize | s-resize | w-resize|
       text | wait | help ]
   ] | inherit

50 / 59

Les outils de création de CSS2

Outils de création

http://www.w3.org/Style/CSS/#editors


51 / 59

Les outils de validation de CSS2

Outils de validation

http://jigsaw.w3.org/css-validator/


52 / 59

Les erreurs les plus courantes

Les erreurs classiques


53 / 59

Trucs et astuces

Comment contourner certains bugs ?

background-color chez Netscape

Il faut jouer avec border: none et margin: none : http://www.css.nu/examples/workarounds.html

Autres bugs de Netscape
http://www.micropop.com/workshop/css.html
Autres bugs d'Internet Explorer 3
http://www.micropop.com/workshop/ie3css.html

Comment faire aussi bien sur Netscape que sur Explorer ou autres, et quelque soit le système d'exploitation ?

font-family
Toujours bien finir par une des familles prédéfinies
Intégrer dans la liste une police typique de Windows, car IE4 dégraderait les autres polices
font-size
IE3 interprête les em comme des px. Utiliser les %ages à la place. 1.5em = 150%

Bien mettre les unités. 12 est 12pt pour NS et 12px pour IE

xx-small ... xx-large sont rendus différement par les navigateurs. utiliser les %ages

color
À part les 16 couleurs nommées standard, utiliser les couleurs heaxdécimales. Les autres couleurs nommées ne sont pas rendues de manière identique par les différents navigateurs

54 / 59

Où définir les styles ?

À quel endroit définir un style ?

D'après le livre de Daniel Glazman

Rappel:

Style local

Style global-local

Style global


55 / 59

Quels sélecteurs utiliser ?

Comment organiser sa feuille ? Quels types de sélecteurs utiliser ?

D'après le livre de Daniel Glazman

Classes

Sélecteurs d'ID

Styles définis par le contexte


56 / 59

La feuille de style de HTML4.0

Une feuille de style équivalente au rendu classique d'HTML4.0

ADDRESS,
BLOCKQUOTE, 
BODY, DD, DIV, 
DL, DT, 
FIELDSET, FORM,
FRAME, FRAMESET,
H1, H2, H3, H4, 
H5, H6, IFRAME, 
NOFRAMES, 
OBJECT, OL, P, 
UL, APPLET, 
CENTER, DIR, 
HR, MENU, PRE   { display: block }
LI              { display: list-item }
HEAD            { display: none }
TABLE           { display: table }
TR              { display: table-row }
THEAD           { display: table-header-group }
TBODY           { display: table-row-group }
TFOOT           { display: table-footer-group }
COL             { display: table-column }
COLGROUP        { display: table-column-group }
TD, TH          { display: table-cell }
CAPTION         { display: table-caption }
TH              { font-weight: bolder; text-align: center }
CAPTION         { text-align: center }
BODY            { padding: 8px; line-height: 1.33 }
H1              { font-size: 2em; margin: .67em 0 }
H2              { font-size: 1.5em; margin: .83em 0 }
H3              { font-size: 1.17em; margin: 1em 0 }
H4, P,
BLOCKQUOTE, UL,
FIELDSET, FORM,
OL, DL, DIR,
MENU            { margin: 1.33em 0 }
H5              { font-size: .83em; line-height: 1.17em; margin: 1.67em 0 }
H6              { font-size: .67em; margin: 2.33em 0 }
H1, H2, H3, H4,
H5, H6, B,
STRONG          { font-weight: bolder }
BLOCKQUOTE      { margin-left: 40px; margin-right: 40px }
I, CITE, EM,
VAR, ADDRESS    { font-style: italic }
PRE, TT, CODE,
KBD, SAMP       { font-family: monospace }
PRE             { white-space: pre }
BIG             { font-size: 1.17em }
SMALL, SUB, SUP { font-size: .83em }
SUB             { vertical-align: sub }
SUP             { vertical-align: super }
S, STRIKE, DEL  { text-decoration: line-through }
HR              { border: 1px inset }
OL, UL, DIR,
MENU, DD        { margin-left: 40px }
OL              { list-style-type: decimal }
OL UL, UL OL,
UL UL, OL OL    { margin-top: 0; margin-bottom: 0 }
U, INS          { text-decoration: underline }
CENTER          { text-align: center }
BR:before       { content: "\A" }

/* An example of style for HTML 4.0's ABBR/ACRONYM elements */

ABBR, ACRONYM   { font-variant: small-caps; letter-spacing: 0.1em }
A[href]         { text-decoration: underline }
:focus          { outline: thin dotted invert }


/* Begin bidirectionality settings (do not change) */
BDO[DIR="ltr"]  { direction: ltr; unicode-bidi: bidi-override }
BDO[DIR="rtl"]  { direction: rtl; unicode-bidi: bidi-override }

*[DIR="ltr"]    { direction: ltr; unicode-bidi: embed }
*[DIR="rtl"]    { direction: rtl; unicode-bidi: embed }

/* Elements that are block-level in HTML4 */
ADDRESS, BLOCKQUOTE, BODY, DD, DIV, DL, DT, FIELDSET, 
FORM, FRAME, FRAMESET, H1, H2, H3, H4, H5, H6, IFRAME,
NOSCRIPT, NOFRAMES, OBJECT, OL, P, UL, APPLET, CENTER, 
DIR, HR, MENU, PRE, LI, TABLE, TR, THEAD, TBODY, TFOOT, 
COL, COLGROUP, TD, TH, CAPTION 
                { unicode-bidi: embed }
/* End bidi settings */


@media print {
  @page         { margin: 10% }
  H1, H2, H3,
  H4, H5, H6    { page-break-after: avoid; page-break-inside: avoid }
  BLOCKQUOTE, 
  PRE           { page-break-inside: avoid }
  UL, OL, DL    { page-break-before: avoid }
}

@media speech {
  H1, H2, H3, 
  H4, H5, H6    { voice-family: paul, male; stress: 20; richness: 90 }
  H1            { pitch: x-low; pitch-range: 90 }
  H2            { pitch: x-low; pitch-range: 80 }
  H3            { pitch: low; pitch-range: 70 }
  H4            { pitch: medium; pitch-range: 60 }
  H5            { pitch: medium; pitch-range: 50 }
  H6            { pitch: medium; pitch-range: 40 }
  LI, DT, DD    { pitch: medium; richness: 60 }
  DT            { stress: 80 }
  PRE, CODE, TT { pitch: medium; pitch-range: 0; stress: 0; richness: 80 }
  EM            { pitch: medium; pitch-range: 60; stress: 60; richness: 50 }
  STRONG        { pitch: medium; pitch-range: 60; stress: 90; richness: 90 }
  DFN           { pitch: high; pitch-range: 60; stress: 60 }
  S, STRIKE     { richness: 0 }
  I             { pitch: medium; pitch-range: 60; stress: 60; richness: 50 }
  B             { pitch: medium; pitch-range: 60; stress: 90; richness: 90 }
  U             { richness: 0 }
  A:link        { voice-family: harry, male }
  A:visited     { voice-family: betty, female }
  A:active      { voice-family: betty, female; pitch-range: 80; pitch: x-high }
}

57 / 59

Passer de HTML à HTML + CSS

Passer vos fichiers HTML en <HTML correct + CSS2>

D'après le livre de Daniel Glazman

Éléments

Le cas de FONT :

Attributs

Le cas de ALIGN :

58 / 59

Conformité des navigateurs à CSS2

Conformité

http://www.css.nu/pointers/bugs.html

http://webreview.com/wr/pub/guides/style/mastergrid.html

Sélecteurs avancés CSS2 : http://webreview.com/pub/guides/style/style.html

Tests CSS1 au W3C : http://www.w3.org/Style/CSS/Test/

Tests de conformité aux CSS2, par Daniel Glazman : http://www.editions-eyrolles.com/livres/glazman/Tests/

Une liste de bugs pour Mozilla (par David Baron) : http://www.people.fas.harvard.edu/~dbaron/css/browsers/nglay

Tests sur les positionnements flottants : http://www.w3.org/Style/CSS/Test/float

Les 10 bugs CSS2 majeurs d'IE sous windows et mac, et d'Opéra : http://www.webstandards.org/css/#The_Top_10_Lists


59 / 59

Différences entre CSS1 et CSS2

Différences entre CSS1 et CSS2

Nouvelles fonctionnalités par rapport à CSS1

Différences sémantiques