« Tutoriel CSS » : différence entre les versions
m (Nouvelle page : = Cascading Style Sheets = </div><div> ==== Auteurs et version ==== * '' [http://tecfa.unige.ch/tecfa-people/schneider.html [http://tecfa.unige.ch/~class/ [http://tecfa.unige.ch/...) |
mAucun résumé des modifications |
||
Ligne 1 : | Ligne 1 : | ||
<pageby nominor="false" comments="false"/> | |||
== Tutoriel CSS == | |||
Petite introduction à CSS | Petite introduction à CSS | ||
=== Objectifs === | |||
* Savoir faire de simples style sheets HTML avec CSS | * Savoir faire de simples style sheets HTML avec CSS | ||
Ligne 37 : | Ligne 10 : | ||
* XML avec CSS | * XML avec CSS | ||
* (Pas de DHTML pour le moment, ce se fera dans un autre module je pense) | * (Pas de DHTML pour le moment, ce se fera dans un autre module je pense) | ||
== 2. Introduction aux "Cascading Style Sheets" == | == 2. Introduction aux "Cascading Style Sheets" == | ||
=== 2.1 Motivation === | === 2.1 Motivation === | ||
==== Avantages ==== | |||
* Mises en page HTML et XML sophistiquées | * Mises en page HTML et XML sophistiquées | ||
* DHTML (changement de positionnement | * DHTML (changement de positionnement d'éléments sur x,y et z par exemple) | ||
* Séparation de contenu et de style: | * Séparation de contenu et de style: | ||
** permet de servir une page à plusieurs "sauces" (HTML riche, HTML pauvre mais efficace, HTML vocal, ....), donc variantes pour imprimer, le PDA, etc. | ** permet de servir une page à plusieurs "sauces" (HTML riche, HTML pauvre mais efficace, HTML vocal, ....), donc variantes pour imprimer, le PDA, etc. | ||
** permet de gérér centralement le "look" de pleines de pages, donc diminue le coût de maintenance | ** permet de gérér centralement le "look" de pleines de pages, donc diminue le coût de maintenance | ||
** | ** rend une page plus "lisible" et plus rapide à télécharger | ||
==== Désavantages ==== | |||
* Dans CSS1 / CSS2: peu de capacités pour transformer un texte (voir XSLT) | * Dans CSS1 / CSS2: peu de capacités pour transformer un texte (voir XSLT) | ||
* Implémentations CSS1: bonnes dans Mozilla/Firefox et potables dans IE 6 | * Implémentations CSS1: bonnes dans Mozilla/Firefox et potables dans IE 6 | ||
* Implémentations CSS2: toujours lacunaires. | * Implémentations CSS2: toujours lacunaires. | ||
* Il existe des tables de compatibilités | * Il existe des tables de compatibilités, voir [[:en:CSS|CSS]] (en Anglais) | ||
=== 2.2 Principe de base === | === 2.2 Principe de base === | ||
* Feuille de style = jeux de règles qui précise | * Feuille de style = jeux de règles qui précise l'affichage d'un élément HTML ou XML | ||
* Chaque règle est composée: | * Chaque règle est composée: | ||
** | ** d'un '' sélecteur'' (qui indique à quel type d'élément la règle s'applique) | ||
** une '' déclaration'' (qui comprend une ou plusieurs instructions de mise en page | ** une '' déclaration'' (qui comprend une ou plusieurs instructions de mise en page | ||
==== Exemples (de sensibilisation) ==== | ==== Exemples (de sensibilisation) ==== | ||
H1 { color: red } | H1 { color: red } | ||
P { font-face: Verdana, sans-serif ; font-size: 12pt} | P { font-face: Verdana, sans-serif ; font-size: 12pt} | ||
H1, H2, H3 { color : blue } | H1, H2, H3 { color : blue } | ||
H1.ChapterTOC, H2.PeriodeTOC, H2.ExerciceTOC, H2.SectionTOC { | |||
display: block;text-indent: 30pt; | display: block;text-indent: 30pt; | ||
text-align: left; font-size: 14.000000pt; | text-align: left; font-size: 14.000000pt; | ||
font-weight: Bold; font-family: "Times"; | font-weight: Bold; font-family: "Times"; | ||
} | } | ||
[[Image:css-intro-1.png]] | |||
=== 2.4 Conseils HTML === | === 2.4 Conseils HTML === | ||
Ligne 110 : | Ligne 57 : | ||
* Testez avec Mozilla/Firefox, ajustez ensuite pour IE Explorer (et autres navigateurs déficients). | * Testez avec Mozilla/Firefox, ajustez ensuite pour IE Explorer (et autres navigateurs déficients). | ||
==== Pour être compatible: ==== | |||
* Pour gérer les anciens browsers (NS 4 et IE 5) comprénant mal CSS il faut écrire des scripts de filtrage (disponibles sur le "web | * Pour gérer les anciens browsers (NS 4 et IE 5) comprénant mal CSS il faut écrire des scripts de filtrage (disponibles sur le "web master's sites"). | ||
* Pour gérer les Netscape 3 etc. pas de problème, ils ignorent les CSS | * Pour gérer les Netscape 3 etc. pas de problème, ils ignorent les CSS | ||
== 3. Association d'une feuille de style à une page HTML == | |||
== 3. Association | |||
Il existe plusieurs méthodes | |||
=== 3.1 Styles "inline" === | === 3.1 Styles "inline" === | ||
Ligne 131 : | Ligne 70 : | ||
* On peut définir un attribut style pour chaque élément HTML | * On peut définir un attribut style pour chaque élément HTML | ||
<p style="color: red; font: 12pt times; margin-left: 2em"> | <p style="color: red; font: 12pt times; margin-left: 2em"> | ||
On peut définir un style pour chaque balise. | |||
On peut définir un style pour chaque balise. | Ce paragraphe contient son propre style, mais ce n'est pas très efficace ... | ||
</p> | |||
Ce paragraphe contient son propre style, mais ce | |||
très efficace ... | |||
Source: '' http://tecfa.unige.ch/guides/css/ex/simple-css2.html'' | |||
< | * Il s'agit ici d'une technique qu'il faut mieux éviter, car elle ne respecte pas très bien le principe de la séparation de contenu et de présentation | ||
* Voir aussi <span> qui permet de définir un style à l'intérieur d'un paragraphe. | |||
On peut définir | <p> | ||
On peut définir <span style="color: red;"> une phrase toute | |||
rouge </span>. Et revenir à la normale plus tard ... | |||
</p> | |||
=== 3.2 Feuille de style imbriquée dans une page === | === 3.2 Feuille de style imbriquée dans une page === | ||
* Déclaration | * Déclaration d'une feuille de style avec la balise <style> | ||
==== Exemple 3-1: Simples feuilles CSS imbriquées ==== | ==== Exemple 3-1: Simples feuilles CSS imbriquées ==== | ||
Ligne 166 : | Ligne 95 : | ||
* '' http://tecfa.unige.ch/guides/css/ex/simple-css2.html'' (exemple plus compliqué) | * '' http://tecfa.unige.ch/guides/css/ex/simple-css2.html'' (exemple plus compliqué) | ||
==== Utilisation: ==== | |||
* La déclaration doit se faire dans le <head> (sinon il peut y avoir des problèmes, par ex. la couleur background du body qui ne s'affiche pas) | |||
* Pour rester compatible avec les anciens navigateurs, il faut commenter les règles CSS comme dans l'exemple ci-dessous ! | |||
<pre> | |||
<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 3.2//EN"> | |||
<html> <head> | |||
<title>Simple CSS démo</title> | |||
<STYLE type="text/css"> | |||
<!-- | |||
body {background: white; font-family: Helvetica, Arial, sans-serif;} | body {background: white; font-family: Helvetica, Arial, sans-serif;} | ||
H2, H3 {font-family: Helvetica, Arial, sans-serif;} | H2, H3 {font-family: Helvetica, Arial, sans-serif;} | ||
P.intro {color: blue; margin-left: 4em; margin-right: 2em;} | P.intro {color: blue; margin-left: 4em; margin-right: 2em;} | ||
.default {margin-left: 2em;} | .default {margin-left: 2em;} | ||
--> | |||
-- | </STYLE> | ||
</head> | |||
</pre> | |||
</ | |||
=== 3.3 Feuille de style externe associé à des pages HTML === | === 3.3 Feuille de style externe associé à des pages HTML === | ||
Ligne 203 : | Ligne 119 : | ||
* Solution efficace pour gérér le look des plusieurs (ou pleins!) de pages | * Solution efficace pour gérér le look des plusieurs (ou pleins!) de pages | ||
* La balise <link> doit se trouver dans le <head> | * La balise <link> doit se trouver dans le <head> | ||
* Si vous utilisez des caractères non standards dans le texte ("é","ö", etc.) il faudrait déclarer | * Si vous utilisez des caractères non standards dans le texte ("é","ö", etc.) il faudrait déclarer l'attribut CHARSET dans le HTML (à vérifier) | ||
* Pensez à créer un répertoire central pour vos styles ! (A tecfa: /web/styles) | * Pensez à créer un répertoire central pour vos styles ! (A tecfa: /web/styles) | ||
* Vous pouvez regarder le source | * Vous pouvez regarder le source d'une page HTML et ensuite manuellement entrer l'URL pour le CSS et le regarder (s'il en existe un) | ||
==== Exemple 3-2: Simple feuille CSS externe ==== | ==== Exemple 3-2: Simple feuille CSS externe ==== | ||
* '' http://tecfa.unige.ch/guides/css/ex/simple-css3.html'' | * '' http://tecfa.unige.ch/guides/css/ex/simple-css3.html'' | ||
<html> | <html> | ||
<head> | <head> | ||
<link rel="stylesheet" href="simple-css3.css" charset="ISO-8859-1" type="text/css"/> | <link rel="stylesheet" href="simple-css3.css" charset="ISO-8859-1" type="text/css"/> | ||
<title>Simple CSS démo III</title> | <title>Simple CSS démo III</title> | ||
</head> | </head> | ||
<body> | <body> | ||
'' ATTENTION'' : Dans le fichier - feuille de style vous mettez '' juste '' les déclarations CSS, rien d'autre: pas d'entêtes, rien d'autre !! | |||
=== 3.4 Multiples feuilles de style === | === 3.4 Multiples feuilles de style === | ||
* On peut laisser | * On peut laisser l'utilisateur choisir ! | ||
** dans Mozilla en tout cas (Menu View->Use Style) | ** dans Mozilla en tout cas (Menu View->Use Style) | ||
** on peut aussi écrire un programme JavaScript qui le fait | ** on peut aussi écrire un programme JavaScript qui le fait | ||
* '' http://www.alistapart.com/stories/alternate/test.html'' | * '' http://www.alistapart.com/stories/alternate/test.html'' | ||
* Pensez à faire une version spéciale pour | * Pensez à faire une version spéciale pour l'impression | ||
Exemple de la home page de DKS: | Exemple de la home page de DKS: | ||
<style type="text/css" media="all">@import "/tecfa-people/dks-normal.css";</style> | <style type="text/css" media="all">@import "/tecfa-people/dks-normal.css";</style> | ||
<link ''rel="alternate stylesheet"'' | <link ''rel="alternate stylesheet"'' | ||
type="text/css" ''media="screen"'' | type="text/css" ''media="screen"'' | ||
''title="Friendly fonts'' | ''title="Friendly fonts'' | ||
" href="/tecfa-people/dks-friendly.css" /> | " href="/tecfa-people/dks-friendly.css" /> | ||
<link rel="alternate stylesheet" type="text/css" media="screen" title="bigtype" href="/tecfa-people/dks-big.css" /> | |||
<link rel="alternate stylesheet" type="text/css" media="screen" title="Print with URLs" href="/tecfa-people/dks-print-url.css" /> | |||
<link rel="alternate stylesheet" type="text/css" media="screen" title="Print" href="/tecfa-people/dks-print.css" /> | <link rel="alternate stylesheet" type="text/css" media="screen" title="Print" href="/tecfa-people/dks-print.css" /> | ||
<link rel="stylesheet" type="text/css" ''media="print"'' | <link rel="stylesheet" type="text/css" ''media="print"'' | ||
href="/tecfa-people/dks-print.css" /> | href="/tecfa-people/dks-print.css" /> | ||
=== 3.5 Importation === | === 3.5 Importation === | ||
* Il | * Il s'agit d'une alternative au "linking" ci-dessus | ||
* '' http://tecfa.unige.ch/guides/css/ex/simple-css4.html'' | * '' http://tecfa.unige.ch/guides/css/ex/simple-css4.html'' | ||
<style> | <style> | ||
<!-- | <!-- | ||
@import ("simple-css3.css") ; | @import ("simple-css3.css") ; | ||
p.default {margin-right: 3em; margin-left: 3em} | p.default {margin-right: 3em; margin-left: 3em} | ||
--> | --> | ||
</style> | </style> | ||
==== Attention: ==== | |||
* Marche mal avec certains Explorer 4 | * Marche mal avec certains Explorer 4 | ||
* Ne marche pas avec Netscape (4.x) ! On peut utiliser cet fait pour filter ces navigateurs .... | * Ne marche pas avec Netscape (4.x) ! On peut utiliser cet fait pour filter ces navigateurs .... | ||
=== 3.6 Feuilles de style client-side === | === 3.6 Feuilles de style client-side === | ||
* Marche uniquement dans Mozilla et | * Marche uniquement dans Mozilla et c'est très cool: | ||
* On peut censurer tout ce | * On peut censurer tout ce qu'on aime pas, adapter la page à la vue etc. :) | ||
== 4. La notion de sélecteurs == | == 4. La notion de sélecteurs == | ||
* Un sélecteur est un "nom" qui indique à quels éléments | * Un sélecteur est un "nom" qui indique à quels éléments d'une page HTML on desire appliquer une règle. | ||
* Chaque règle CSS commence nécessairement par un sélecteur. | * Chaque règle CSS commence nécessairement par un sélecteur. | ||
=== Rappel de la syntaxe pour une règle CSS: === | |||
selecteur(s) { propriété: valeur ; propriété: valeur1, valeur2, valeur3 ; ...... } | |||
selecteur(s) { propriété: valeur ; propriété: valeur1, valeur2, valeur3 ; ...... } | |||
Il existe plusieurs méthodes pour identifier les éléments, par exemple: | Il existe plusieurs méthodes pour identifier les éléments, par exemple: | ||
* on indique le nom | * on indique le nom d'une balise (X)HTML | ||
* on indique la classe | * on indique la classe d'une balise (X)HTML | ||
* on indique | * on indique l'identificateur d'une balise XHTML | ||
* on indique le nom | * on indique le nom d'une balise plus sa classe, etc. | ||
=== 4.1 Simple sélecteurs pour les balises === | === 4.1 Simple sélecteurs pour les balises === | ||
* On indique le nom | * On indique le nom d'une balise, ou encore une liste séparés par des virgules. | ||
H1 {color: green} | H1 {color: green} | ||
H2 {color: green} | H2 {color: green} | ||
Ligne 338 : | Ligne 204 : | ||
H1, H2 {color: green} | H1, H2 {color: green} | ||
* Dans ce cas on utilise CSS pour changer | * Dans ce cas on utilise CSS pour changer l'affichage par défaut des différentes balises | ||
* Typiquement, on modifie la couleur de certains éléments, la taille des fontes, les marges, etc. | * Typiquement, on modifie la couleur de certains éléments, la taille des fontes, les marges, etc. | ||
=== 4.2 Class et attributs ID === | === 4.2 Class et attributs ID === | ||
==== A. Les attributs et sélecteurs "class" ==== | ==== A. Les attributs et sélecteurs "class" ==== | ||
Ligne 351 : | Ligne 213 : | ||
* Mécanisme puissant pour: | * Mécanisme puissant pour: | ||
** définir de classes de contenu (indépendamment des balises) | ** définir de classes de contenu (indépendamment des balises) | ||
** pour différencier plusieurs variantes | ** pour différencier plusieurs variantes d'une même balise | ||
* Principe: On associe une valeur à | * Principe: On associe une valeur à l'attribut "class" | ||
* On peut aussi définir le style des enfants de la balise qui a | * On peut aussi définir le style des enfants de la balise qui a l'attribut "class" ; mais il faut indiquer le chemin complet de l'arbre '' (dans l'ex., default ul li)'' . | ||
* il est possible | * il est possible d'avoir plusieurs classes par éléments '' (dans l'ex., le 2ème <p>)'' . | ||
* Lorsque deux styles définissent la même propriété, | * Lorsque deux styles définissent la même propriété, c'est celui qui est le plus L de l'élément qui "gagne" '' (dans l'ex., font-size)'' | ||
==== | ==== Classes dans une simple feuille de style ==== | ||
Source: '' http://tecfa.unige.ch/guides/css/ex/simple-css2.html'' | |||
<STYLE type="text/css"> | <STYLE type="text/css"> | ||
P.intro {color: blue; margin-left: 4em; margin-right: 2em;} | P.intro {color: blue; margin-left: 4em; margin-right: 2em;} | ||
.default ul li {font-size: 0.8em;} | .default ul li {font-size: 0.8em;} | ||
.default {margin-left: 2em; font-size:1em;} | .default {margin-left: 2em; font-size:1em;} | ||
.bleu {color:red;} | .bleu {color:red;} | ||
</STYLE> | </STYLE> | ||
...... | |||
<p class="intro"> | <p class="intro"> | ||
Après des années de bricolage infâme .... | Après des années de bricolage infâme .... | ||
</p> | </p> | ||
<p class="default bleu"> | <p class="default bleu"> | ||
bla bla | bla bla | ||
</p> | </p> | ||
<div class="default"> | <div class="default"> | ||
<ul> | <ul> | ||
<li>item 1</li> | <li>item 1</li> | ||
<li>item 2</li> | <li>item 2</li> | ||
</ul> | </ul> | ||
<pre> | <pre> | ||
notre classe default marche partout, même pour un para préformaté | notre classe default marche partout, même pour un para préformaté | ||
</pre> | </pre> | ||
</div> | </div> | ||
Le style '' .default'' s'appliquera à tous les éléments dont la classe est "default" alors que le style '' .intro'' seulement aux balises '' <p>'' . | |||
Le style '' .default'' | |||
==== B. Attribut ID ==== | ==== B. Attribut ID ==== | ||
* Parfois plus économique | * Parfois plus économique d'utiliser l'attribut ID (p.ex. lorsqu'on a un script qui implique des id) | ||
* on peut aussi combiner les deux (définir un style pour la classe et | * on peut aussi combiner les deux (définir un style pour la classe et l'id d'une même balise) | ||
* Le selecteur | * Le selecteur s'écrit avec un # devant | ||
* Si on veut définir les éléments enfants | * Si on veut définir les éléments enfants d'un éléments avec l'attribut id ayant une classe définie, on peut le faire sans passer par les éléments intérmédiaire | ||
** (pour | ** (pour l'ex. ci-dessus, sans ul) | ||
==== C. "wildcard" ==== | ==== C. "wildcard" ==== | ||
* "Wildcard" * ( | * "Wildcard" * (s'applique à tous le éléments) : | ||
<nowiki>* { font-size: 12pt; }</nowiki> | <nowiki>* { font-size: 12pt; }</nowiki> | ||
* pratique pour définir une police par défaut pour tous les éléments sans la définir à chaque fois (y compris '' <pre>'' et '' <button>'' . | * pratique pour définir une police par défaut pour tous les éléments sans la définir à chaque fois (y compris '' <pre>'' et '' <button>'' . | ||
=== 4.3 Les balises HTML <div> et <span> === | === 4.3 Les balises HTML <div> et <span> === | ||
* ont été créés spécialement pour un usage avec les feuilles de style | * ont été créés spécialement pour un usage avec les feuilles de style | ||
==== A. <div> ==== | ==== A. <div> ==== | ||
* peut contenir toutes les autres balises HTML et donc servir à mettre en forme toute une section | * peut contenir toutes les autres balises HTML et donc servir à mettre en forme toute une section d'une texte (mais attention aux priorités! '' <div>'' est un bloc alors que '' <span> '' est un élément in-line, cf [css-intro.html#60322 5.1 �$-1òüTypes d'éléments et défauts HTML�$-1òý [22]] Il sera pas possible de définir une largeur de 100% -toute la page- pour un span) | ||
* <div> avec | * <div> avec l'attribut class peut servir à faire des "custom tags" (voir plus loin) | ||
* <span> sert à changer une séquence de caractères à | * <span> sert à changer une séquence de caractères à l'intérieur d'une balise | ||
==== B. Définition "inline" d'un style ==== | |||
Exemple: Changer la couleur d'un partie du texte ==== | |||
Source: '' http://tecfa.unige.ch/guides/css/ex/simple-div-span.html'' | |||
<div style="color: blue"> | <div style="color: blue"> | ||
<h1>L'influence d'un div tag qui aime le bleu</h1> | |||
<h1> | |||
<P> | <P> | ||
bla bla bla | bla bla bla | ||
</P> | </P> | ||
</div> | </div> | ||
==== C. Définition externe d'un style ==== | |||
Exemple: Faire des backgrounds avec une définition externe ==== | |||
Source: '' http://tecfa.unige.ch/guides/css/ex/simple-div2.html'' | |||
<style> | <style> | ||
div.important { | div.important { | ||
background: rgb(204,204,255); | background: rgb(204,204,255); | ||
padding: 0.5em; border: none; | padding: 0.5em; border: none; | ||
} | } | ||
</style> | </style> | ||
Ligne 494 : | Ligne 302 : | ||
<body> | <body> | ||
<div class="important"> | <div class="important"> | ||
<h1>Une section importante</h1> | <h1>Une section importante</h1> | ||
<h2>Un sous-titre</h2> | <h2>Un sous-titre</h2> | ||
<P> | <P> | ||
Tout le div a son joli background à lui. | Tout le div a son joli background à lui. | ||
bla bla bla | bla bla bla | ||
</P> | </P> | ||
</div> | </div> | ||
=== 4.4 Sélecteurs contextuels === | === 4.4 Sélecteurs contextuels === | ||
Exemple: Simple utilisation d'un sélecteur contextuel ==== | |||
Source: '' http://tecfa.unige.ch/guides/css/ex/simple-css5.html'' | |||
<STYLE type="text/css"> | <STYLE type="text/css"> | ||
<!-- | <!-- | ||
P strong {color: red;} | P strong {color: red;} | ||
--> | --> | ||
</STYLE> | </STYLE> | ||
...... | ...... | ||
''<P>'' | ''<P>'' | ||
Ceci est un paragraph avec un ''<strong>'' | Ceci est un paragraph avec un ''<strong>'' | ||
strong modifié ''</strong>'' | strong modifié ''</strong>''. | ||
En d'autres terme cela permet de redéfinir de façon simple le rendering | |||
de certaines balises "logiques" comme &lt;em&gt; ou &lt;strong&gt;. | de certaines balises "logiques" comme &lt;em&gt; ou &lt;strong&gt;. | ||
'' </P>'' | '' </P>'' | ||
=== 4.5 Pseudo sélecteurs (élément et classes) === | === 4.5 Pseudo sélecteurs (élément et classes) === | ||
Ligne 556 : | Ligne 338 : | ||
* CSS2 en définit pleins, ci-dessous les éléments de CSS1. | * CSS2 en définit pleins, ci-dessous les éléments de CSS1. | ||
* Attention: certains navigateurs implémentent mal ces fonctionalités CSS1. | * Attention: certains navigateurs implémentent mal ces fonctionalités CSS1. | ||
==== A. Pseudo-éléments ==== | ==== A. Pseudo-éléments ==== | ||
* permettent | * permettent d'identifier des éléments non-balisés (comme la première lettre ou la première ligne) | ||
* Marche avec les navigateurs IE 5.5 (à confirmer) et Mozilla | * Marche avec les navigateurs IE 5.5 (à confirmer) et Mozilla | ||
Exemple: Pseudo-sélecteurs | |||
Ssource: '' http://tecfa.unige.ch/guides/css/ex/pseudo-selectors.html'' | |||
<style> | <style> | ||
P:''first-letter'' { font-size: 500%; color: green } | |||
P:''first-letter'' | P:''first-line'' { color: green } | ||
P:''first-line'' | |||
</style> | </style> | ||
==== B. Pseudo-classes ==== | ==== B. Pseudo-classes ==== | ||
Ligne 586 : | Ligne 357 : | ||
* Pour rendre plus difficile la lecture des liens :) | * Pour rendre plus difficile la lecture des liens :) | ||
''A:link'' | ''A:link'' { color : white } | ||
''A:visited'' { color : yellow } | |||
''A:active'' {color : red } | |||
''A:visited'' | |||
''A:active'' | |||
== 5. Les déclarations CSS == | == 5. Les déclarations CSS == | ||
==== Rappel de la syntaxe pour une règle CSS: ==== | ==== Rappel de la syntaxe pour une règle CSS: ==== | ||
selecteur(s) { propriété: valeur ; propriété: valeur1, valeur2, valeur3 ; ...... } | selecteur(s) { propriété: valeur ; propriété: valeur1, valeur2, valeur3 ; ...... } | ||
[[Image:css-intro-2.png]] | |||
==== Attention: ==== | |||
** Les valeurs des propriétés sont séparées par des "," | ** Les valeurs des propriétés sont séparées par des "," | ||
** Les pairs "propriétés: valeurs" sont séparées par des ";" | ** Les pairs "propriétés: valeurs" sont séparées par des ";" | ||
* Types | * Types | ||
Ligne 619 : | Ligne 378 : | ||
* Positionnement...... | * Positionnement...... | ||
=== 5.1 Types d'éléments et défauts HTML === | |||
=== 5.1 Types | |||
Avant | Avant d'utiliser un style, voir quel est l'élément html qui s'en rapproche le plus. Par exemple, pour faire des titres, se baser sur '' <h1>'' , '' <h2>'' , '' <h3>'' ... plutôt que sur '' <p>'' ou '' <div>'' . | ||
En typographie on distingue entre 2-3 types | En typographie on distingue entre 2-3 types d'éléments de base: | ||
# les blocs (blocks), c.a.d. des éléments qui commencent un nouveau paragraphe. Exemples HTML: <p>, <h2>, <div> | # les blocs (blocks), c.a.d. des éléments qui commencent un nouveau paragraphe. Exemples HTML: <p>, <h2>, <div> | ||
# Les listes et leurs éléments sont des blocs spéciaux: <li> | # Les listes et leurs éléments sont des blocs spéciaux: <li> | ||
# les "in-line", c.a.d. | # les "in-line", c.a.d. s'insérant dans un paragraphe. Exemples HTML: <b>, <strong>, <span> | ||
display: block; | display: block; | ||
display: inline; | display: inline; | ||
display: list-item; | display: list-item; | ||
* Pour chaque élément "bloc" il existe un jeu de règles pour définir les marges, la position, les couleurs du texte et de | * Pour chaque élément "bloc" il existe un jeu de règles pour définir les marges, la position, les couleurs du texte et de l'arrière-plan. On peut même définir leurs positions absolues sur la page. Donc un bloc est une boite qu'on remplit avec un contenu selon les règles que l'on choisit. | ||
* Evidémment, il est possible de changer de type, par exemple afficher une liste à puce comme une suite de phrases. | * Evidémment, il est possible de changer de type, par exemple afficher une liste à puce comme une suite de phrases. | ||
==== Exemple 5-1: CSS positioning - <li> inline ==== | ==== Exemple 5-1: CSS positioning - <li> inline ==== | ||
Source: ''http://tecfa.unige.ch/guides/css/ex/simple-inline.html'' | |||
== 6. Attributs du texte == | == 6. Attributs du texte == | ||
Les attributs les plus utilisés sont les suivants (pleins | Les attributs les plus utilisés sont les suivants (pleins d'autres !) (voir les pointeurs tecfa) | ||
=== 6.1 Attributs pour la gestion des propriétés d'écriture === | |||
=== 6.1 Attributs pour la gestion des propriétés | |||
{| border="1" | {| border="1" | ||
Ligne 671 : | Ligne 418 : | ||
font-family | font-family | ||
| rowspan="1" colspan="1" | | | rowspan="1" colspan="1" | | ||
nom de | nom de l'écriture | ||
| rowspan="1" colspan="1" | | | rowspan="1" colspan="1" | | ||
police | police | ||
Ligne 700 : | Ligne 447 : | ||
| rowspan="1" colspan="1" | | | rowspan="1" colspan="1" | | ||
forme | forme d'écriture | ||
| rowspan="1" colspan="1" | | | rowspan="1" colspan="1" | | ||
'' '' | '' '' | ||
Ligne 741 : | Ligne 488 : | ||
|} | |} | ||
=== 6.2 Alignement du texte === | === 6.2 Alignement du texte === | ||
Ligne 823 : | Ligne 570 : | ||
valeur relative | valeur relative | ||
| rowspan="1" colspan="1" | | | rowspan="1" colspan="1" | | ||
écart entre les lignes par rapport à la taille de | écart entre les lignes par rapport à la taille de l'écriture | ||
| rowspan="1" colspan="1" | | | rowspan="1" colspan="1" | | ||
'' line-height: 1.2;'' | '' line-height: 1.2;'' | ||
|} | |} | ||
== 7. Les boites CSS et leur positionnement == | == 7. Les boites CSS et leur positionnement == | ||
=== 7.1 Anatomie des boites === | === 7.1 Anatomie des boites === | ||
Une boite (chaque élément "bloc" '' sauf les tables et autres exeptions qui ont des priorités à part'' ) possède | Une boite (chaque élément "bloc" '' sauf les tables et autres exeptions qui ont des priorités à part'' ) possède l'anatomie suivante: | ||
[[Image:css-intro-3.png]] | |||
Chaque élément correspond à un selecteur CSS qui permet de définir la largeur générale (des 4 cotés) ou encore la largeur de chaque côté. On peut aussi définir dessin et couleur du cadre. | Chaque élément correspond à un selecteur CSS qui permet de définir la largeur générale (des 4 cotés) ou encore la largeur de chaque côté. On peut aussi définir dessin et couleur du cadre. | ||
=== 7.2 Les bords, les cadres et le couleur === | === 7.2 Les bords, les cadres et le couleur === | ||
Ligne 969 : | Ligne 713 : | ||
valeur hexa /nom | valeur hexa /nom | ||
| rowspan="1" colspan="1" | | | rowspan="1" colspan="1" | | ||
couleur | couleur d'un élément | ||
| rowspan="1" colspan="1" | | | rowspan="1" colspan="1" | | ||
<nowiki>#menu {color:#000000;}</nowiki>body {color:blue;} | <nowiki>#menu {color:#000000;}</nowiki>body {color:blue;} | ||
Ligne 978 : | Ligne 722 : | ||
aussi | aussi | ||
| rowspan="1" colspan="1" | | | rowspan="1" colspan="1" | | ||
couleur de | couleur de l'arrière-plan | ||
| rowspan="1" colspan="1" | | | rowspan="1" colspan="1" | | ||
h1, h2 {background:silver;} | h1, h2 {background:silver;} | ||
|} | |} | ||
* Ceci | * Ceci n'est qu'un apperçu ! | ||
* Il existe notamment des "shortcuts" | * Il existe notamment des "shortcuts" qu'on montre sur la page suivante. | ||
==== Les bords, les cadres et la couleur (shortcuts) ==== | ==== Les bords, les cadres et la couleur (shortcuts) ==== | ||
Ligne 993 : | Ligne 735 : | ||
<nowiki>#content { </nowiki> | <nowiki>#content { </nowiki> | ||
border-right: 2px dotted black; | border-right: 2px dotted black; | ||
border-bottom: 2px dotted black; | border-bottom: 2px dotted black; | ||
color: #000; | color: #000; | ||
background-color: #ffffcc; | background-color: #ffffcc; | ||
padding: 5px 5px 5px 5px; /* haut, droite, bas, gauche */ | padding: 5px 5px 5px 5px; /* haut, droite, bas, gauche */ | ||
margin: 5px 15px 5px 5px; | margin: 5px 15px 5px 5px; | ||
} | } | ||
H1 { | H1 { | ||
/* 1 cm en haut et en bas, 2cm sur les côtés */ | /* 1 cm en haut et en bas, 2cm sur les côtés */ | ||
margin: 1cm 2cm; | margin: 1cm 2cm; | ||
/* 3em en haut, 20% sur les côtés, et 2em en bas */ | /* 3em en haut, 20% sur les côtés, et 2em en bas */ | ||
padding: 3em 20% 2em; | padding: 3em 20% 2em; | ||
} | } | ||
==== Exemple 7-1: Plusieurs exemples simples avec des boites ==== | ==== Exemple 7-1: Plusieurs exemples simples avec des boites ==== | ||
Ligne 1 034 : | Ligne 758 : | ||
<body style="border-style:dotted"> | <body style="border-style:dotted"> | ||
<h1>Boites</h1> | <h1>Boites</h1> | ||
<p>The dashed box is for the "body", the big thick box is for a "p" tag, and the thin box is used within a "span" tag. (View the source).</p> | <p>The dashed box is for the "body", the big thick box is for a "p" tag, and the thin box is used within a "span" tag. (View the source).</p> | ||
<p ''style="background-color:#d0d0d0;border-style:solid;border-width:4px;'' | <p ''style="background-color:#d0d0d0;border-style:solid;border-width:4px;'' | ||
'' padding:1em;margin:0.1cm;'' "> | |||
'' padding:1em;margin:0.1cm;'' | |||
Tout est une boite - DKS nov 2003 | Tout est une boite - DKS nov 2003 | ||
'' <span'' ''style="background-color:#d0d0d0;border-style:solid;border-width:1px;'' | |||
'' <span'' | |||
'' padding:1pt;margin:1pt;width:50%;position:relative'' | '' padding:1pt;margin:1pt;width:50%;position:relative'' | ||
"> | "> | ||
<a href="http://validator.w3.org/check/referer">XHTML validation</a> - | <a href="http://validator.w3.org/check/referer">XHTML validation</a> - | ||
<a href="http://jigsaw.w3.org/css-validator/check/referer">CSS validation<a> | <a href="http://jigsaw.w3.org/css-validator/check/referer">CSS validation<a> | ||
''</span>'' | ''</span>'' | ||
</p> | </p> | ||
<p>Voir <a href="boxing1.html">boxing1.html</a> pour plus ... </p> | <p>Voir <a href="boxing1.html">boxing1.html</a> pour plus ... </p> | ||
</body> | </body> | ||
=== 7.3 Le positionnement === | === 7.3 Le positionnement === | ||
* Par défaut les éléments | * Par défaut les éléments d'une page HTML sont affichés séquentiellement un après l'autre | ||
* Mais on peut les positionner selon des coordonnées absolues ou relatives | * Mais on peut les positionner selon des coordonnées absolues ou relatives n'importe où sur une page (voir les exemples qui suivent) | ||
<nowiki>#content { /* les coordonnees selon l'horloge: 12, 3, 6, 9 */</nowiki> | |||
float: left; | float: left; | ||
width: 80%; | width: 80%; | ||
color: #000; | color: #000; | ||
background-color: #ffffcc; | background-color: #ffffcc; | ||
padding: 5px 5px 5px 5px; | padding: 5px 5px 5px 5px; | ||
margin: 5px 5px 5px 5px; | margin: 5px 5px 5px 5px; | ||
} | } | ||
<nowiki>#menu { /* qui sera mis à droite */</nowiki> | <nowiki>#menu { /* qui sera mis à droite */</nowiki> | ||
position: absolute; | position: absolute; | ||
right: 0; | right: 0; | ||
width: 17%; | width: 17%; | ||
font: 10px/14px verdana, sans-serif; | font: 10px/14px verdana, sans-serif; | ||
color: black; | color: black; | ||
margin: 5px 5px 5px 5px; | margin: 5px 5px 5px 5px; | ||
background-color: #ffffff; | background-color: #ffffff; | ||
} | } | ||
==== Exemple 7-2: Positionnement relatif de boites flottantes ==== | ==== Exemple 7-2: Positionnement relatif de boites flottantes ==== | ||
* '' http://tecfa.unige.ch/guides/css/ex/boxing1.html'' | * '' http://tecfa.unige.ch/guides/css/ex/boxing1.html'' | ||
==== Exemple 7-3: Positionnement relatif horizontal + vertical ==== | ==== Exemple 7-3: Positionnement relatif horizontal + vertical ==== | ||
* '' [http://tecfa.unige.ch/guides/css/ex/boxing2.html http://tecfa.unige.ch/guides/css/ex/boxing2.html ]'' | * '' [http://tecfa.unige.ch/guides/css/ex/boxing2.html http://tecfa.unige.ch/guides/css/ex/boxing2.html ]'' | ||
==== Exemple 7-4: Un menu: "ul/li" comme boutons ==== | ==== Exemple 7-4: Un menu: "ul/li" comme boutons ==== | ||
* '' [http://tecfa.unige.ch/guides/css/ex/boxing3.html http://tecfa.unige.ch/guides/css/ex/boxing3.html ]'' | * '' [http://tecfa.unige.ch/guides/css/ex/boxing3.html http://tecfa.unige.ch/guides/css/ex/boxing3.html ]'' | ||
==== Exemple 7-5: Positions absolues ==== | ==== Exemple 7-5: Positions absolues ==== | ||
* '' [http://tecfa.unige.ch/guides/css/ex/boxing4.html http://tecfa.unige.ch/guides/css/ex/boxing4.html ]'' | * '' [http://tecfa.unige.ch/guides/css/ex/boxing4.html http://tecfa.unige.ch/guides/css/ex/boxing4.html ]'' | ||
==== Exemple 7-6: Layout 3-colonnes ==== | ==== Exemple 7-6: Layout 3-colonnes ==== | ||
Ligne 1 139 : | Ligne 817 : | ||
* '' http://tecfa.unige.ch/guides/css/ex/boxing5.html'' | * '' http://tecfa.unige.ch/guides/css/ex/boxing5.html'' | ||
== 8. XML avec CSS == | == 8. XML avec CSS == | ||
=== 8.1 Association d'une feuille de style === | |||
=== 8.1 Association | |||
* Il est conseillé | * Il est conseillé d'utiliser une feuille externe et ensuite l'importer: | ||
<?xml-stylesheet type="text/css" href="feuille.css"?> | <?xml-stylesheet type="text/css" href="feuille.css"?> | ||
Ligne 1 153 : | Ligne 828 : | ||
* note: pas de feuilles de styles internes comme pour HTML ! | * note: pas de feuilles de styles internes comme pour HTML ! | ||
Voici le début | Voici le début d'un fichier: | ||
<?xml version="1.0" encoding="ISO-8859-1"?> | <?xml version="1.0" encoding="ISO-8859-1"?> | ||
<?xml-stylesheet href="stepbystep.css" type="text/css"?> | <?xml-stylesheet href="stepbystep.css" type="text/css"?> | ||
<!DOCTYPE Stepbystep SYSTEM "stepbystep-ex.dtd"> | <!DOCTYPE Stepbystep SYSTEM "stepbystep-ex.dtd"> | ||
<Stepbystep xmlns:xlink="http://www.w3.org/1999/xlink"> | <Stepbystep xmlns:xlink="http://www.w3.org/1999/xlink"> | ||
<Doctitle>ATTENTION: Il ne s'agit ici que d'une démo XML + CSS. L'original de ce fichier se trouve | |||
<Doctitle>ATTENTION: Il ne | |||
ailleurs et a été modifié sans doute depuis .... | ailleurs et a été modifié sans doute depuis .... | ||
</Doctitle> | </Doctitle> | ||
<Info> | <Info> | ||
<Author Email="Stephane.morand@tecfa.unige.ch"> | <Author Email="Stephane.morand@tecfa.unige.ch"> | ||
</Author> | </Author> | ||
<Version>Version 0.2</Version> | <Version>Version 0.2</Version> | ||
<Para>installation brute de postnuke sur le serveur tecfaseed | <Para>installation brute de postnuke sur le serveur tecfaseed | ||
</Para> | </Para> | ||
</Info> | </Info> | ||
=== 8.2 Selecteurs CSS2 pour XML et HTML === | === 8.2 Selecteurs CSS2 pour XML et HTML === | ||
Ligne 1 196 : | Ligne 851 : | ||
* A part la notation '' Balise.classe'' les sélecteur XML et HTML sont les mêmes ! | * A part la notation '' Balise.classe'' les sélecteur XML et HTML sont les mêmes ! | ||
==== sélection d'un élément ==== | |||
==== sélection | |||
nom_de_l'élément | |||
Exemple: | Exemple: | ||
Step { | |||
Step { | display: list-item; | ||
list-style-type: decimal; | |||
display: list-item; | |||
list-style-type: decimal; | |||
} | } | ||
==== sélection d'un élément qui est l''' enfant direct'' d'un élément ==== | |||
==== sélection | |||
élément_mère > élément | élément_mère > élément | ||
Ligne 1 220 : | Ligne 867 : | ||
Exemple: | Exemple: | ||
Step > Title { .... } | Step > Title { .... } | ||
==== sélection | ==== sélection d'un élément qui est le '' descendant'' d'un élément ==== | ||
élément_mère élément | élément_mère élément | ||
Ligne 1 230 : | Ligne 875 : | ||
Exemple: | Exemple: | ||
Step Title { .... } | Step Title { .... } | ||
DIV | Dans l'exemple suivant P est un descendant de LI, LI doit être un enfant direct de OL. OL est dans DIV. | ||
DIV OL>LI P | |||
==== sélection | ==== sélection d'un élément qui est le '' frère'' d'un élément ==== | ||
élément_frère + élément | élément_frère + élément | ||
Exemple: | Exemple: | ||
H1 + H2 { margin-top: -5mm } | |||
H1 + H2 { margin-top: -5mm } | |||
(on réduit la distance) | (on réduit la distance) | ||
==== sélection d'un élément qui possède un attribut ==== | |||
==== sélection | |||
élément[attribut] | élément[attribut] | ||
Ligne 1 256 : | Ligne 895 : | ||
Exemple: | Exemple: | ||
Title[status] { color: blue; } | Title[status] { color: blue; } | ||
(tous les titres qui un attribut "status" sont paints en bleu ) | (tous les titres qui un attribut "status" sont paints en bleu ) | ||
==== sélection d'un élément qui possède un attribut avec une valeur ==== | |||
==== sélection | |||
élément[attribut="valeur"] | élément[attribut="valeur"] | ||
Ligne 1 268 : | Ligne 905 : | ||
Exemple: | Exemple: | ||
Title[status="brouillon"] { color: red; } | Title[status="brouillon"] { color: red; } | ||
(tous les titres qui un attribut "status" avec valeur "brouillon" sont peints en rouge ) | (tous les titres qui un attribut "status" avec valeur "brouillon" sont peints en rouge ) | ||
Note: au lieu de "=", on a aussi ~= et ¦= (voir la documentation) | Note: au lieu de "=", on a aussi ~= et ¦= (voir la documentation) | ||
=== 8.3 Premières opérations à faire === | === 8.3 Premières opérations à faire === | ||
* Il faut | * Il faut d'abord indiquer pour chaque élément s'il est un "block" ou "inline" | ||
* Faire sortir les titres | * Faire sortir les titres | ||
* Gérer les listes | * Gérer les listes | ||
==== Exemples ==== | |||
/* title et para sont des éléments "block", ils ont une petite marge | /* title et para sont des éléments "block", ils ont une petite marge | ||
title, para {display: block; margin: 0.5em;} | title, para {display: block; margin: 0.5em;} | ||
/* les title sont un peu plus grands */ | /* les title sont un peu plus grands */ | ||
title {font-size: 1.5em;} | title {font-size: 1.5em;} | ||
/* les item sont des list-item de type bullet */ | /* les item sont des list-item de type bullet */ | ||
item {display: list-item;list-style-type: bullet;} | item {display: list-item;list-style-type: bullet;} | ||
/* strong est un élément inline, rendering on italic et bleu */ | /* strong est un élément inline, rendering on italic et bleu */ | ||
strong {display: inline; font-style: italic; color: rgb(000,000,128);} | strong {display: inline; font-style: italic; color: rgb(000,000,128);} | ||
==== Exemple 8-1: Exemple "Stepbystep" ==== | ==== Exemple 8-1: Exemple "Stepbystep" ==== | ||
Ligne 1 311 : | Ligne 936 : | ||
* Le DTD Stebbystep permet de formatter des instructions de type "pas par pas", par exemple comment installer un logiciel. | * Le DTD Stebbystep permet de formatter des instructions de type "pas par pas", par exemple comment installer un logiciel. | ||
==== Exemple 8-2: Récit ==== | ==== Exemple 8-2: Récit ==== | ||
* '' http://tecfa.unige.ch/guides/xml/examples/recit/'' | * '' http://tecfa.unige.ch/guides/xml/examples/recit/'' | ||
( répetoire avec une solution CSS et une solution XSLT ) | |||
* La DTD "RECIT" permet d'écrire des simples récits avec une grammaire génératrice. | |||
== Liens == | |||
=== Ressources CSS === | |||
Voir [[:en:CSS|CSS]] (Edutechwiki - Anglais) | |||
=== Slides === | |||
* '' [http://tecfa.unige.ch/guides/tie/html/css-intro/css-intro.html http://tecfa.unige.ch/guides/tie/html/css-into/css-intro.html]'' (Transparents HTML) | * '' [http://tecfa.unige.ch/guides/tie/html/css-intro/css-intro.html http://tecfa.unige.ch/guides/tie/html/css-into/css-intro.html]'' (Transparents HTML) | ||
* '' http://tecfa.unige.ch/guides/tie/pdf/files/css-intro.pdf'' (Transparents PDF) | * '' http://tecfa.unige.ch/guides/tie/pdf/files/css-intro.pdf'' (Transparents PDF) |
Version du 26 août 2008 à 11:00
<pageby nominor="false" comments="false"/>
Tutoriel CSS
Petite introduction à CSS
Objectifs
- Savoir faire de simples style sheets HTML avec CSS
- Faire des pages emboîtées sans tables
- XML avec CSS
- (Pas de DHTML pour le moment, ce se fera dans un autre module je pense)
2. Introduction aux "Cascading Style Sheets"
2.1 Motivation
Avantages
- Mises en page HTML et XML sophistiquées
- DHTML (changement de positionnement d'éléments sur x,y et z par exemple)
- Séparation de contenu et de style:
- permet de servir une page à plusieurs "sauces" (HTML riche, HTML pauvre mais efficace, HTML vocal, ....), donc variantes pour imprimer, le PDA, etc.
- permet de gérér centralement le "look" de pleines de pages, donc diminue le coût de maintenance
- rend une page plus "lisible" et plus rapide à télécharger
Désavantages
- Dans CSS1 / CSS2: peu de capacités pour transformer un texte (voir XSLT)
- Implémentations CSS1: bonnes dans Mozilla/Firefox et potables dans IE 6
- Implémentations CSS2: toujours lacunaires.
- Il existe des tables de compatibilités, voir CSS (en Anglais)
2.2 Principe de base
- Feuille de style = jeux de règles qui précise l'affichage d'un élément HTML ou XML
- Chaque règle est composée:
- d'un sélecteur (qui indique à quel type d'élément la règle s'applique)
- une déclaration (qui comprend une ou plusieurs instructions de mise en page
Exemples (de sensibilisation)
H1 { color: red } P { font-face: Verdana, sans-serif ; font-size: 12pt} H1, H2, H3 { color : blue } H1.ChapterTOC, H2.PeriodeTOC, H2.ExerciceTOC, H2.SectionTOC { display: block;text-indent: 30pt; text-align: left; font-size: 14.000000pt; font-weight: Bold; font-family: "Times"; }
2.4 Conseils HTML
- Mettez des balises fermantes (<p> .....</p>, <li> .... </li>, etc)
- Testez avec Mozilla/Firefox, ajustez ensuite pour IE Explorer (et autres navigateurs déficients).
Pour être compatible:
- Pour gérer les anciens browsers (NS 4 et IE 5) comprénant mal CSS il faut écrire des scripts de filtrage (disponibles sur le "web master's sites").
- Pour gérer les Netscape 3 etc. pas de problème, ils ignorent les CSS
3. Association d'une feuille de style à une page HTML
Il existe plusieurs méthodes
3.1 Styles "inline"
- On peut définir un attribut style pour chaque élément HTML
<p style="color: red; font: 12pt times; margin-left: 2em"> On peut définir un style pour chaque balise. Ce paragraphe contient son propre style, mais ce n'est pas très efficace ...
Source: http://tecfa.unige.ch/guides/css/ex/simple-css2.html
- Il s'agit ici d'une technique qu'il faut mieux éviter, car elle ne respecte pas très bien le principe de la séparation de contenu et de présentation
- Voir aussi <span> qui permet de définir un style à l'intérieur d'un paragraphe.
On peut définir une phrase toute rouge . Et revenir à la normale plus tard ...
3.2 Feuille de style imbriquée dans une page
- Déclaration d'une feuille de style avec la balise <style>
Exemple 3-1: Simples feuilles CSS imbriquées
- http://tecfa.unige.ch/guides/css/ex/simple-css.html
- http://tecfa.unige.ch/guides/css/ex/simple-css2.html (exemple plus compliqué)
Utilisation:
- La déclaration doit se faire dans le <head> (sinon il peut y avoir des problèmes, par ex. la couleur background du body qui ne s'affiche pas)
- Pour rester compatible avec les anciens navigateurs, il faut commenter les règles CSS comme dans l'exemple ci-dessous !
<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 3.2//EN"> <html> <head> <title>Simple CSS démo</title> <STYLE type="text/css"> <!-- body {background: white; font-family: Helvetica, Arial, sans-serif;} H2, H3 {font-family: Helvetica, Arial, sans-serif;} P.intro {color: blue; margin-left: 4em; margin-right: 2em;} .default {margin-left: 2em;} --> </STYLE> </head>
3.3 Feuille de style externe associé à des pages HTML
- Solution efficace pour gérér le look des plusieurs (ou pleins!) de pages
- La balise <link> doit se trouver dans le <head>
- Si vous utilisez des caractères non standards dans le texte ("é","ö", etc.) il faudrait déclarer l'attribut CHARSET dans le HTML (à vérifier)
- Pensez à créer un répertoire central pour vos styles ! (A tecfa: /web/styles)
- Vous pouvez regarder le source d'une page HTML et ensuite manuellement entrer l'URL pour le CSS et le regarder (s'il en existe un)
Exemple 3-2: Simple feuille CSS externe
<html> <head> <link rel="stylesheet" href="simple-css3.css" charset="ISO-8859-1" type="text/css"/> <title>Simple CSS démo III</title> </head> <body>
ATTENTION : Dans le fichier - feuille de style vous mettez juste les déclarations CSS, rien d'autre: pas d'entêtes, rien d'autre !!
3.4 Multiples feuilles de style
- On peut laisser l'utilisateur choisir !
- dans Mozilla en tout cas (Menu View->Use Style)
- on peut aussi écrire un programme JavaScript qui le fait
- http://www.alistapart.com/stories/alternate/test.html
- Pensez à faire une version spéciale pour l'impression
Exemple de la home page de DKS:
<style type="text/css" media="all">@import "/tecfa-people/dks-normal.css";</style> <link rel="alternate stylesheet" type="text/css" media="screen" title="Friendly fonts " href="/tecfa-people/dks-friendly.css" /> <link rel="alternate stylesheet" type="text/css" media="screen" title="bigtype" href="/tecfa-people/dks-big.css" /> <link rel="alternate stylesheet" type="text/css" media="screen" title="Print with URLs" href="/tecfa-people/dks-print-url.css" /> <link rel="alternate stylesheet" type="text/css" media="screen" title="Print" href="/tecfa-people/dks-print.css" /> <link rel="stylesheet" type="text/css" media="print" href="/tecfa-people/dks-print.css" />
3.5 Importation
- Il s'agit d'une alternative au "linking" ci-dessus
- http://tecfa.unige.ch/guides/css/ex/simple-css4.html
<style> <!-- @import ("simple-css3.css") ; p.default {margin-right: 3em; margin-left: 3em} --> </style>
Attention:
- Marche mal avec certains Explorer 4
- Ne marche pas avec Netscape (4.x) ! On peut utiliser cet fait pour filter ces navigateurs ....
3.6 Feuilles de style client-side
- Marche uniquement dans Mozilla et c'est très cool:
- On peut censurer tout ce qu'on aime pas, adapter la page à la vue etc. :)
4. La notion de sélecteurs
- Un sélecteur est un "nom" qui indique à quels éléments d'une page HTML on desire appliquer une règle.
- Chaque règle CSS commence nécessairement par un sélecteur.
Rappel de la syntaxe pour une règle CSS:
selecteur(s) { propriété: valeur ; propriété: valeur1, valeur2, valeur3 ; ...... }
Il existe plusieurs méthodes pour identifier les éléments, par exemple:
- on indique le nom d'une balise (X)HTML
- on indique la classe d'une balise (X)HTML
- on indique l'identificateur d'une balise XHTML
- on indique le nom d'une balise plus sa classe, etc.
4.1 Simple sélecteurs pour les balises
- On indique le nom d'une balise, ou encore une liste séparés par des virgules.
H1 {color: green} H2 {color: green}
est équivalent à:
H1, H2 {color: green}
- Dans ce cas on utilise CSS pour changer l'affichage par défaut des différentes balises
- Typiquement, on modifie la couleur de certains éléments, la taille des fontes, les marges, etc.
4.2 Class et attributs ID
A. Les attributs et sélecteurs "class"
- Mécanisme puissant pour:
- définir de classes de contenu (indépendamment des balises)
- pour différencier plusieurs variantes d'une même balise
- Principe: On associe une valeur à l'attribut "class"
- On peut aussi définir le style des enfants de la balise qui a l'attribut "class" ; mais il faut indiquer le chemin complet de l'arbre (dans l'ex., default ul li) .
- il est possible d'avoir plusieurs classes par éléments (dans l'ex., le 2ème <p>) .
- Lorsque deux styles définissent la même propriété, c'est celui qui est le plus L de l'élément qui "gagne" (dans l'ex., font-size)
Classes dans une simple feuille de style
Source: http://tecfa.unige.ch/guides/css/ex/simple-css2.html
<STYLE type="text/css"> P.intro {color: blue; margin-left: 4em; margin-right: 2em;} .default ul li {font-size: 0.8em;} .default {margin-left: 2em; font-size:1em;} .bleu {color:red;} </STYLE> ...... <p class="intro"> Après des années de bricolage infâme .... </p> <p class="default bleu"> bla bla </p> <div class="default"> <ul> <li>item 1</li> <li>item 2</li> </ul> <pre> notre classe default marche partout, même pour un para préformaté </pre> </div>
Le style .default s'appliquera à tous les éléments dont la classe est "default" alors que le style .intro seulement aux balises <p> .
B. Attribut ID
- Parfois plus économique d'utiliser l'attribut ID (p.ex. lorsqu'on a un script qui implique des id)
- on peut aussi combiner les deux (définir un style pour la classe et l'id d'une même balise)
- Le selecteur s'écrit avec un # devant
- Si on veut définir les éléments enfants d'un éléments avec l'attribut id ayant une classe définie, on peut le faire sans passer par les éléments intérmédiaire
- (pour l'ex. ci-dessus, sans ul)
C. "wildcard"
- "Wildcard" * (s'applique à tous le éléments) :
* { font-size: 12pt; }
- pratique pour définir une police par défaut pour tous les éléments sans la définir à chaque fois (y compris <pre> et <button> .
4.3 Les balises HTML <div> et <span>
- ont été créés spécialement pour un usage avec les feuilles de style
A. <div>
- peut contenir toutes les autres balises HTML et donc servir à mettre en forme toute une section d'une texte (mais attention aux priorités! <div> est un bloc alors que <span> est un élément in-line, cf [css-intro.html#60322 5.1 �$-1òüTypes d'éléments et défauts HTML�$-1òý [22]] Il sera pas possible de définir une largeur de 100% -toute la page- pour un span)
- <div> avec l'attribut class peut servir à faire des "custom tags" (voir plus loin)
- <span> sert à changer une séquence de caractères à l'intérieur d'une balise
B. Définition "inline" d'un style
Exemple: Changer la couleur d'un partie du texte ====
Source: http://tecfa.unige.ch/guides/css/ex/simple-div-span.html
<div style="color: blue"> <h1>L'influence d'un div tag qui aime le bleu</h1> <P> bla bla bla </P> </div>
C. Définition externe d'un style
Exemple: Faire des backgrounds avec une définition externe ====
Source: http://tecfa.unige.ch/guides/css/ex/simple-div2.html
<style> div.important { background: rgb(204,204,255); padding: 0.5em; border: none; } </style>
.....
<body> <div class="important"> <h1>Une section importante</h1> <h2>Un sous-titre</h2> <P> Tout le div a son joli background à lui. bla bla bla </P> </div>
4.4 Sélecteurs contextuels
Exemple: Simple utilisation d'un sélecteur contextuel ====
Source: http://tecfa.unige.ch/guides/css/ex/simple-css5.html
<STYLE type="text/css"> <!-- P strong {color: red;} --> </STYLE> ...... <P>
Ceci est un paragraph avec un <strong> strong modifié </strong>.
En d'autres terme cela permet de redéfinir de façon simple le rendering de certaines balises "logiques" comme <em> ou <strong>.
</P>
4.5 Pseudo sélecteurs (élément et classes)
- Un pseudo sélecteur identifie un élément par des critères autres que balise et classe
- CSS2 en définit pleins, ci-dessous les éléments de CSS1.
- Attention: certains navigateurs implémentent mal ces fonctionalités CSS1.
A. Pseudo-éléments
- permettent d'identifier des éléments non-balisés (comme la première lettre ou la première ligne)
- Marche avec les navigateurs IE 5.5 (à confirmer) et Mozilla
Exemple: Pseudo-sélecteurs
Ssource: http://tecfa.unige.ch/guides/css/ex/pseudo-selectors.html
<style> P:first-letter { font-size: 500%; color: green } P:first-line { color: green } </style>
B. Pseudo-classes
- Pour rendre plus difficile la lecture des liens :)
A:link { color : white } A:visited { color : yellow } A:active {color : red }
5. Les déclarations CSS
Rappel de la syntaxe pour une règle CSS:
selecteur(s) { propriété: valeur ; propriété: valeur1, valeur2, valeur3 ; ...... }
Attention:
- Les valeurs des propriétés sont séparées par des ","
- Les pairs "propriétés: valeurs" sont séparées par des ";"
- Types
- Boites
- Positionnement......
5.1 Types d'éléments et défauts HTML
Avant d'utiliser un style, voir quel est l'élément html qui s'en rapproche le plus. Par exemple, pour faire des titres, se baser sur <h1> , <h2> , <h3> ... plutôt que sur <p> ou <div> .
En typographie on distingue entre 2-3 types d'éléments de base:
- les blocs (blocks), c.a.d. des éléments qui commencent un nouveau paragraphe. Exemples HTML: <p>, <h2>, <div>
- Les listes et leurs éléments sont des blocs spéciaux: <li>
- les "in-line", c.a.d. s'insérant dans un paragraphe. Exemples HTML: <b>, <strong>, <span>
display: block; display: inline; display: list-item;
- Pour chaque élément "bloc" il existe un jeu de règles pour définir les marges, la position, les couleurs du texte et de l'arrière-plan. On peut même définir leurs positions absolues sur la page. Donc un bloc est une boite qu'on remplit avec un contenu selon les règles que l'on choisit.
- Evidémment, il est possible de changer de type, par exemple afficher une liste à puce comme une suite de phrases.
Exemple 5-1: CSS positioning - <li> inline
Source: http://tecfa.unige.ch/guides/css/ex/simple-inline.html
6. Attributs du texte
Les attributs les plus utilisés sont les suivants (pleins d'autres !) (voir les pointeurs tecfa)
6.1 Attributs pour la gestion des propriétés d'écriture
Attributs |
Valeurs |
se charge de |
exemple |
---|---|---|---|
font-family |
nom de l'écriture |
police |
font-family: Helvetica; |
serif |
famille de police, écriture de type serif |
font-family: Times,serif; | |
font-size |
pt, cm |
taille de police |
font-size: 14pt; |
font-style |
forme d'écriture |
| |
italic |
italique |
font-style: italique; | |
font-weight |
de 100 à 900 |
épaisseur |
font-weight: 500; |
normal |
correspond à la valeur 400 |
font-weight: normal; | |
bold |
correspond à la valeur 700 |
font-weight: bold; |
6.2 Alignement du texte
Attributs |
Valeurs |
se charge de |
exemple |
---|---|---|---|
text-align |
alignement des paragraphes |
| |
left |
aligné à gauche, valeur par défaut |
text-align: left; | |
center |
centré |
text-align: center; | |
right |
aligné à droite |
text-align: right; | |
justify |
justifié en forme de bloc |
text-align: jutify; | |
text-indent |
pt, cm |
retrait de la première ligne |
text-indent: 1cm; |
line-height |
pt, cm |
hauteur des lignes |
line-height: 14pt; |
valeur relative |
écart entre les lignes par rapport à la taille de l'écriture |
line-height: 1.2; |
7. Les boites CSS et leur positionnement
7.1 Anatomie des boites
Une boite (chaque élément "bloc" sauf les tables et autres exeptions qui ont des priorités à part ) possède l'anatomie suivante:
Chaque élément correspond à un selecteur CSS qui permet de définir la largeur générale (des 4 cotés) ou encore la largeur de chaque côté. On peut aussi définir dessin et couleur du cadre.
7.2 Les bords, les cadres et le couleur
Attributs |
Valeurs |
se charge de |
exemple |
---|---|---|---|
margin |
pt, px, cm, % |
4 marges |
body {margin:1cm;} |
margin-top |
marge en haut |
p {margin-top:10px;} | |
margin-bottom |
marge en bas |
h3 {margin-bottom:3pt;} | |
margin-left |
marge à gauche |
img {margin-left:50px;} | |
margin-right |
marge à droite |
p.citation {margin-right:10pt;} | |
border |
pt,px, cm, % |
largeur du cadre |
p {border:5px;} |
border-top |
h1 {border-top:0.2cm;} | ||
etc ... |
|||
border-style |
style de cadre |
||
solid |
ligne simple |
p {border-style:solid;} | |
double |
ligne double |
h1 {border-style:double;} | |
padding |
pt,px,cm,%,etc |
marge intérieures |
p {padding: 5px;} |
color |
valeur hexa /nom |
couleur d'un élément |
#menu {color:#000000;}body {color:blue;} |
background |
aussi |
couleur de l'arrière-plan |
h1, h2 {background:silver;} |
- Ceci n'est qu'un apperçu !
- Il existe notamment des "shortcuts" qu'on montre sur la page suivante.
Les bords, les cadres et la couleur (shortcuts)
Exemple:
#content { border-right: 2px dotted black; border-bottom: 2px dotted black; color: #000; background-color: #ffffcc; padding: 5px 5px 5px 5px; /* haut, droite, bas, gauche */ margin: 5px 15px 5px 5px; }
H1 { /* 1 cm en haut et en bas, 2cm sur les côtés */ margin: 1cm 2cm; /* 3em en haut, 20% sur les côtés, et 2em en bas */ padding: 3em 20% 2em; }
Exemple 7-1: Plusieurs exemples simples avec des boites
- http://tecfa.unige.ch/guides/css/ex/boxing0.html
- la boite pour le "body" a des lignes pointillés
- la boite pour un <p> a une petite marge, un bord solide, et une couleur en arrière-plan
- une partie de ce meme paragraphe est mis dans une boite avec un "span"
<body style="border-style:dotted"> <h1>Boites</h1> <p>The dashed box is for the "body", the big thick box is for a "p" tag, and the thin box is used within a "span" tag. (View the source).</p> <p style="background-color:#d0d0d0;border-style:solid;border-width:4px; padding:1em;margin:0.1cm; "> Tout est une boite - DKS nov 2003 <span style="background-color:#d0d0d0;border-style:solid;border-width:1px; padding:1pt;margin:1pt;width:50%;position:relative "> <a href="http://validator.w3.org/check/referer">XHTML validation</a> - <a href="http://jigsaw.w3.org/css-validator/check/referer">CSS validation<a> </span> </p> <p>Voir <a href="boxing1.html">boxing1.html</a> pour plus ... </p> </body>
7.3 Le positionnement
- Par défaut les éléments d'une page HTML sont affichés séquentiellement un après l'autre
- Mais on peut les positionner selon des coordonnées absolues ou relatives n'importe où sur une page (voir les exemples qui suivent)
#content { /* les coordonnees selon l'horloge: 12, 3, 6, 9 */ float: left; width: 80%; color: #000; background-color: #ffffcc; padding: 5px 5px 5px 5px; margin: 5px 5px 5px 5px; }
#menu { /* qui sera mis à droite */ position: absolute; right: 0; width: 17%; font: 10px/14px verdana, sans-serif; color: black; margin: 5px 5px 5px 5px; background-color: #ffffff; }
Exemple 7-2: Positionnement relatif de boites flottantes
Exemple 7-3: Positionnement relatif horizontal + vertical
Exemple 7-5: Positions absolues
Exemple 7-6: Layout 3-colonnes
8. XML avec CSS
8.1 Association d'une feuille de style
- Il est conseillé d'utiliser une feuille externe et ensuite l'importer:
<?xml-stylesheet type="text/css" href="feuille.css"?>
- note: pas de feuilles de styles internes comme pour HTML !
Voici le début d'un fichier:
<?xml version="1.0" encoding="ISO-8859-1"?> <?xml-stylesheet href="stepbystep.css" type="text/css"?> <!DOCTYPE Stepbystep SYSTEM "stepbystep-ex.dtd"> <Stepbystep xmlns:xlink="http://www.w3.org/1999/xlink"> <Doctitle>ATTENTION: Il ne s'agit ici que d'une démo XML + CSS. L'original de ce fichier se trouve
ailleurs et a été modifié sans doute depuis .... </Doctitle> <Info> <Author Email="Stephane.morand@tecfa.unige.ch"> </Author> <Version>Version 0.2</Version> <Para>installation brute de postnuke sur le serveur tecfaseed </Para> </Info>
8.2 Selecteurs CSS2 pour XML et HTML
- XML nécessite un navigateur qui supporte CSS2 (au moins en partie)
- A part la notation Balise.classe les sélecteur XML et HTML sont les mêmes !
sélection d'un élément
nom_de_l'élément
Exemple:
Step { display: list-item; list-style-type: decimal;
}
sélection d'un élément qui est l' enfant direct d'un élément
élément_mère > élément
Exemple:
Step > Title { .... }
sélection d'un élément qui est le descendant d'un élément
élément_mère élément
Exemple:
Step Title { .... }
Dans l'exemple suivant P est un descendant de LI, LI doit être un enfant direct de OL. OL est dans DIV.
DIV OL>LI P
sélection d'un élément qui est le frère d'un élément
élément_frère + élément
Exemple:
H1 + H2 { margin-top: -5mm }
(on réduit la distance)
sélection d'un élément qui possède un attribut
élément[attribut]
Exemple:
Title[status] { color: blue; }
(tous les titres qui un attribut "status" sont paints en bleu )
sélection d'un élément qui possède un attribut avec une valeur
élément[attribut="valeur"]
Exemple:
Title[status="brouillon"] { color: red; }
(tous les titres qui un attribut "status" avec valeur "brouillon" sont peints en rouge )
Note: au lieu de "=", on a aussi ~= et ¦= (voir la documentation)
8.3 Premières opérations à faire
- Il faut d'abord indiquer pour chaque élément s'il est un "block" ou "inline"
- Faire sortir les titres
- Gérer les listes
Exemples
/* title et para sont des éléments "block", ils ont une petite marge title, para {display: block; margin: 0.5em;} /* les title sont un peu plus grands */ title {font-size: 1.5em;} /* les item sont des list-item de type bullet */ item {display: list-item;list-style-type: bullet;} /* strong est un élément inline, rendering on italic et bleu */ strong {display: inline; font-style: italic; color: rgb(000,000,128);}
Exemple 8-1: Exemple "Stepbystep"
(répertoire avec tous les fichiers)
- Le DTD Stebbystep permet de formatter des instructions de type "pas par pas", par exemple comment installer un logiciel.
Exemple 8-2: Récit
( répetoire avec une solution CSS et une solution XSLT )
- La DTD "RECIT" permet d'écrire des simples récits avec une grammaire génératrice.
Liens
Ressources CSS
Voir CSS (Edutechwiki - Anglais)
Slides
- http://tecfa.unige.ch/guides/tie/html/css-into/css-intro.html (Transparents HTML)
- http://tecfa.unige.ch/guides/tie/pdf/files/css-intro.pdf (Transparents PDF)