Vous pouvez me contacter via Facebook pour questions & suggestions : Page Facebook relative à mon site
Dans ce chapitre je vais vous montrer comment améliorer la présentation du contenu grâce au CSS.
Pour les nouveautés notables apportées par la version 5 de HTML et la version 3 de CSS,
je vous renvoie aux tutos "HTML5" et "CSS3" dans le même site. En effet je ne vais pas rentrer dans les détails, je me contente
d'évoquer les grands principes dans la mise en forme.
HTML version 5
CSS version 3
Deux grands principes gouvernent le CSS : héritage et cascade.
Ces deux notions doivent être parfaitement maitrisées.
L'héritage signifie que tout élément HTML enfant va hériter des styles de son parent sauf s'il s'agit de de propriétés non héritables (qui sont peu nombreuses).
Connaissant le principe de l'héritage les feuilles de style peuvent être très succinctes !
Extrait d'une feuille de style :
body {font-family : arial ; font-size : 12px ;} h1,h2,p,a, ul,ol,li {font-family : arial ; font-size : 12px ;}
La deuxième règle de style est totalement inutile !
En effet les propriétés font-family & font-size sont héritables. Donc ce qui s'applique à BODY s'applique à ses
descendants (les balises
qui sont contenues dans BODY : balises titres, balises de liste, balises pour tableaux, ...).
Attention certaines propriétés (peu nombreuses) ne peuvent être héritées par les descendants.
C'est le cas des propriétés de bordurage, de marges (internes et externes), de remplissage donc concrètement les raccourcis
border, margin, padding, backgroud et toutes les propriétés préfixées par ces mots telles :
margin-top, ... padding-left, ... border-style, ... background-image, ...
Le CSS peut avoir plusieurs sources :
Il peut y avoir un conflit pour une ou plusieurs propriété concernant un élément.
Par exemple plusieurs règles de style définissent une couleur de texte différente pour la même balise.
Par défaut, le navigateur affiche le texte en noir sauf les liens (balise A) qui sont en bleu.
Extrait de la feuille de style externe : p {color : navy; }
Extrait de la feuille de style interne : p {color : olive; }
Une instruction dans la partie BODY : < p style ="color : purple;"> Je porte une soutane violette ! <p >
Le texte "je porte une soutane violette !" sera t-il en noir ou bleu marine ou olive ou encore en violet ?
Retenez : la règle en ligne est prioritaire sur la règle interne qui elle-même est prioritaire sur la règle externe qui elle-même est prioritaire sur la valeur par défaut. C'est ce qu'on appelle "la cascade".
Je vous communique le code d'une page avec feuille de style interne et lien vers une feuille de style externe.
Notez le lien vers une feuille de style externe.
Notez que dans la feuille de style interne, certaines propriétés ont pour valeur : none.
Remplissez le questionnaire ci-dessous.
Voir la fin du chapitre !
Les pseudo-classes sont :active & :hover
Grâce aux pseudo-classes du CSS on peut réaliser des effets visuels simples.
Une page avec des images et un tableau.
Notez des sélecteurs tels img:active & h1:hover
Le rendu dans un cadre :
Dans un premier temps je vous ai dit que pour construire un tableau de données il fallait utiliser quatre conteneurs : TABLE contenant des balises TR ; conteneurs TR contenant des balises TH ou TH.
Ces quatre conteneurs sont facultatifs mais facilitent la mise en forme du tableau via le CSS.
<a href = "#" ... : si pour la balise A, la valeur de l'attribut href est # cela veut dire retour vers le haut de la même page.
Il y a énormément de nouveautés dans cette feuille de style :
Je commente uniquement les règles de style avec des nouveautés.
* { font-family : sans-serif ; font-size : 20px; text-decoration : none ; } : la valeur de la propriété font-family
peut être un nom de police ou une famille de police ;sans-serif est une famille de police. Donc ici le navigateur va afficher le texte avec une police sans empattement installée sur le PC (Arial en général). C'est une solution beaucoup plus souple !
Rappel : Times New Roman est une police avec serif c'est à dire avec empattements alors que Arial est une police sans serif c'est à dire
sans empattements.
Text-decoration : none : pour toutes les balises les surlignage et soulignage sont supprimés. Donc les liens hypertexte (balise A)
ne seront plus soulignés.
body { width : 90% ; border : 1px solid black ; margin : 20px auto ; } : dans le cadre du "responsive web design"
(adaptation de la page à tous types d'écrans) la largeur de la page est exprimée en % de la largeur de l'écran. je n'en dis pas plus
pour l'instant.
La méga propriété margin peut être suivie de 2 valeurs pour marges verticales et horizontales.
Retenez la syntaxe : margin : verticale horizontale
Il existe aussi la syntaxe : margin : haute droite bas gauche
img { display : block ; width : 300px ; opacity : 0.5 ; } :
les images deviennent des éléments "block" (saut de ligne avant et après) avec une largeur de 300 pixels et sont à demi transparentes.
la valeur opacity est comprise entre 0 (image transparente) et 1 (image complètement opaque).
img.deforme {height : 100px;} : si on applique la classe deformee à une image celle-ci alors affichée avec les
dimensions 300 par 100
c'est à dire un rapport 3 sur 1.
Il y a en effet deux règles de style qui s'appliquent alors : img {width : 300px;} et img.deforme {height : 100px ;}.
Or les trois images ont pour dimensions d'origine 800 par 600 donc un rapport 4/3.
La règle de style concernant la classe "deforme" est mal écrite. Il aurait fallu écrire : img.deforme{height:100px ; width : auto;} .
Ce qui veut dire que dans ce cas la largeur est recalculée en fonction de la hauteur pour qu'il y ait respect des proportions.
img:active {visibility : hidden; }: durant le clic l'image cliquée devient invisible mais les éléments HTML situés en
dessous ne remontent pas ;
l'emplacement est réservé.
:active est une pseudo classe qui peut aussi être associée à n'importe quelle balise.
h1 {text-align : center ; font-size :150% ; text-transform :uppercase ; }: la propriété text-transform avec la valeur uppercase
convertit le texte en majuscules.
Moralité : lorsque vous saisissez le texte ne tapez jamais directement en majuscules car vous vous priveriez des lettres majuscules
accentuées.
h1:hover , a:hover {color: red; text-decoration : underline overline ; } : si survol d'une balise H1 ou A alors le texte
de l'élément
devient rouge avec soulignement et surlignement.
Certains propriétés CSS peuvent être suivies de plusieurs valeurs. On dit que ce sont des méga-propriétés. Pensez aussi à
margin : haut droite bas gauche.
p{margin : 10px ; } : remplace avantageusement 4 propriétés (margin-top :10px; margin-bottom :10px ; margin-left :10px ; lmargin-right :10px;)
p:first-line{font-weight : bold ; font-style : italic ; } : la première ligne du texte balisé par P est en gras et en italique
p:first-letter {font-family : serif ; font-size : 200% ; } : la première lettre du texte balisé par P sera une lettrine ; taille de 40px (200 % de 20px) et la lettre aura des empattements (police avec serif telle TNR (Times New Roman)
:first-line et :first-letter sont aussi des pseudo-classes.
table {width :80% ; } : les tableaux de la page auront une largeur de 80% mais non pas de l'écran mais de la page ! En effet TABLE est "descendant" de BODY donc la largeur est exprimée en % de celle de son container.
caption {text-align :center ; font-weight : bold; } : la légende de chaque tableau sera centrée horizontalement dans sa boite et aura de la graisse
thead {background-color : grey ; opacity : 1;} : l'en-tête de chaque tableau aura comme couleur de fond un gris opaque.
tr {height : 40px ; } : la hauteur de chaque ligne des tableaux ne sera pas auto (hauteur ajustée au contenu) mais toujours 40 pixels. Par défaut le texte d'une cellule de tableau est toujours centrée verticalement dans sa cellule.
td {padding-left :5px ;} : ne pas confondre margin (marges extérieures à la bordure) avec padding (marges
intérieures à la bordure) .
Grâce à une marge interne gauche le texte contenu dans une cellule balisée par TD ne colle pas à la bordure gauche.
td.droite {text-align : right ; padding-right : 5px ;} : classe droite spécifique au conteneur TD. Par défaut dans les cellules balisées par TD le contenu est aligné à gauche. Or pour faciliter l'addition de la colonne les montants doivent être alignés à droite (mais sans coller à la bordure droite).
tbody {background-color : grey ;opacity : 0.5;} : le corps du tableau aura comme couleur de fond un gris clair obtenu en appliquant une certaine transparence à un gris soutenu. Il y avait une autre solution en utilisant une seule propriété : {background-color : lightgrey ;} ou {background-color : rgb(190,190,190) ;}
Dès qu'une boite a une taille fixe son contenu peut éventuellement déborder ...
Le code la page (extraits) :