Odc CSS
Odc CSS
• Ensemble de règles stylistiques applicables à un, ou plusieurs documents HTML => gain de
taille du fichier HTML
Attribut style = …;
• Long et fastidieux
• MAIS c’est comme ça que le JavaScript inject du CSS donc vous risquez de le voir dans
l’inspecteur d’élément.
Le CSS « interne» dans l’entête du HTML
On place une balise <style> dans la balise <head> du document Changer la couleur de tous les
titres h2 en blanc :
<style type="text/css">
h2{
color: #fff;
}
</style>
Le CSS « interne» dans l’entête du HTML
Avantage :
Possibilité d’appliquer une règle sur tous les mêmes éléments d’un même document
Inconvénients :
• Nous utiliserons les mêmes conventions de chemin que pour les images et pages
• Création d’un nouveau fichier appelé « styles.css » et on lie la feuille de styles au
HTML
• On « lie » la feuille de style au document HTML avec une balise <link>dans le <head>
style.css
La feuille de style externe
Avantages :
– Séparation totale de la structure et de
la présentation : possibilité d’avoir
des présentations alternatives
– Possibilité d’appliquer la même
feuille de style sur plusieurs pages
(donc le site en entier) sans devoir
la dupliquer
– Cohérence de la présentation sur tout
le site et les pages futures.
2.
Syntaxe CSS
La syntaxe de base
• Le sélecteur est l’élément sur lequel on applique les propriétés (balise HTML, id, classe,
etc.)
• La propriété est l’effet que l’on va vouloir donner (ex couleur de texte, positionnement,
couleur de fond, etc.)
• La valeur de la propriété CSS (rouge, 10px, etc.) selecteur {
propriete: valeur
propriete: valeur
...
}
La déclaration CSS
p{
color : blue;
}
Element1 + element2 { Ici les styles seront appliqués uniquement à element2 directement
text-align: left; frère de element1.
}
h1 + p {
color: blue;
}
Dans cet exemple le style sera appliqué au paragraphe p qui vient directement après
h1
Le combinateur d’adjacence indirecte
Pour cibler d’un seul coup tous les frères d'un élément répondant à sélecteur précis, nous
allons utiliser le symbole
Element1 ~ element2 { Ici les styles seront appliqués à tous les éléments element2 frère de
text-align: left; element1.
}
h1 ~ p {
color: blue;
}
Dans cet exemple le style sera appliqué à tous les paragraphes p qui sont frères à h1
Les sélecteurs de classe
class=" " est un attribut qui peut se mettre sur n’importe quelle balise
Il permet de cibler de manière plus « spécifique » certains éléments
Une même classe peut être utilisée sur plusieurs balises HTML
Cibler une balise HTML avec une classe
Et button.btn.btn-default{ } va cibler
Si l'on met plusieurs classes et un élément sans espace dans la déclaration, il faut donc
que TOUTES les conditions soient vrais
L’id (identifiant)
Il a le même rôle qu’une classe, mais doit être unique sur la page (donc on va moins
l’utiliser)
• Un nom de classe ne prend pas d'espace, sinon c'est une nouvelle classe
En résumé
4.
Le pixel CSS désigné dans CSS avec le suffixe px, est une unité de longueur qui correspond
approximativement à la largeur ou à la hauteur d'un point unique qui peut être vu
confortablement par l'œil humain sans effort mais par ailleurs aussi petit que possible. Par
définition, il s'agit de la taille physique d'un seul pixel à une densité de pixels de 96 DPI, situé à
une longueur de bras des yeux du spectateur.
• Unité « fixe »
• Dépendance à la résolution du périphérique
• Valeur « compilée » finale en CSS
Le cadratin - em
• "em" pour attribuer des tailles de polices en fonction de la taille de la police de leur
parent.
• "%" pour attribuer des dimensions proportionnées aux dimensions de l'élément parent.
body {
font-family: Arial, Helvetica, sans- serif;
body {
font-size: 18px;
body {
font-weight: bold;
body {
font-style: italic;
body {
line-height : 1.5;
body {
color: #008499;
body { body {
} }
body { body {
text-align: center; text-align: justify;
} }
Text-transform
• none
• capitalize
• uppercase
• lowercase
Text-transform
body { body {
} }
body { body {
text- transform : uppercaser; text- transform : lowercase;
} }
Font-variant
body { body {
font-variant: normal; font-variant: small-caps;
} }
• normal
• small-caps
Text-decoration
Valeurs possibles :
body {
body {
text- decoration : underline red;
text-decoration: none;
}
}
body { body {
text- decoration : line-through; text- decoration : wavy overline lime;
} }
Text-indent
p{
Text-indent: 10px;
}
• text-indent : valeur (négative ou positive) permet de
spécifier un décalage de la première ligne d’un texte
• Valeurs : unités de mesure de police, positif ou négatif
ul {
list-style-type : none;
}
Utiliser une image comme puce
ul {
List-style-image : url(‘img/liste.png’);
La propriété border permet d'ajouter une bordure à un élément Elle a 3 « sous propriétés » possibles :
style, color et width. On regroupe souvent comme ceci : border: width style color;
h2 {
border: 2px solid #009860;
}
Les bordures
On peut décomposer les 4 bordures de la manière suivante :
• border-top : …;
• border-left : …;
• border-right : …;
• border-bottom : …;
h2 {
border-top : 1px solid grey;
}
Style des bordures
• none : pas de bordure (par défaut);
• dotted : pointillés;
• dashed : tirets;
• solid : un trait simple;
• groove : en relief;
div { div {
Border-radius: 10px; Border-radius: 2px 20px 5px 10px;
} }
Background-color
body {
Background-color: yellow;
}
Backgound-image
body {
Background-image: none;
}
Backgound-repeat
background-repeat : permet de définir la façon dont l’image va se répéter.
Valeurs possibles :
• no-repeat : l’image ne sera pas répétée
• repeat-x : l’image sera répétée horizontalement
• repeat-y : l’image sera répétée verticalement
top : en haut
bottom : en bas
left : à gauche
center : centré
right : à droite
Backgound-position
body {
background-color: #A4D0F2;
background-image: url("etoile.png");
background-repeat: no-repeat;
}
Tout melanger
body {
background: #A4D0F2 url("etoile.png") no-repeat; right bottom;
}
7.
(s'il y a une bordure elle est elle aussi ajoutée à la largeur effective des éléments)
Marge extérieur « margin »
• La propriété margin détermine l’espace entre le bord de l’élément, et l’élément suivant.
• Par défaut margin : valeur applique la même
• valeur aux 4 cotés Valeur possible : auto, valeur en unité de mesure, positive ou négative
Ou rassembler les 4 valeurs : margin: 10px 5px 8px 15px; (dans l’ordre : haut, droite, bas, gauche)
Exemple marge
p{
Margin-bottom: 30px;
h2 {
margin: 50px 0;
body {
padding: 10px 15px;
}
Exemple padding
h2 {
Padding-bottom: 15px;
a{
Padding: 5px 15px;
ul {
Padding: 0;
Margin: 0
}
Par défaut, le navigateur applique aussi du padding
(comme par exemple sur les listes). Pour le retirer on
peut écrire padding:0;
overflow
Il est possible que du contenu texte dépasse l'élément qui le contient (surtout si on défini
des hauteurs fixes)
p{
height: 100px;
}
Overflow | Cacher la partie qui déborde
p{
height: 100px;
Overflow: hidden
}
Overflow | Afficher une barre de défilement
p{
height: 100px;
Overflow: auto
}
8.
Elle prend 3 valeurs : left, right et none (permet de remettre un élément dans le flux)
Float left
img {
float: left;
}
Float right
img {
float: right;
}
Problème des flottants
Valeurs possibles :
• clear: left permet d’empêcher le contournement des blocs flottants à gauche
• clear: right permet d’empêcher le contournement des blocs flottants à droite
• clear : both permet d’empêcher le contournement des blocs flottants à gauche et à droite
.content {
clear: both;
Les éléments flottants peuvent « dépasser » de leur parent si le contenu de celui-ci n'est
pas suffisant
BFC et contenir les flottants dans un bloc
Un « contexte de formatage de bloc » (ou BFC) est un élément avec des « super pouvoirs » :
.parent {
overflow: hidden;
a{
display: block; Pour transformer les liens inline en
éléments de bloc
}
display block
Transférer les liens de la navigation en
header li, header a { éléments de bloc
display: block;
header a {
background: #98C9;
margin-bottom: 5px;
Width: 150px;
}
display inline
• Nous connaissons déjà display:inline appliqué sur les éléments de type inline
(span, a, em, strong, etc.).
• Il permet aux éléments de rester sur une seule ligne (on ne peut alors pas
leur donner de largeur)
display inline
p{
display: inline;
display: inline-block est une propriété hybride qui permet à un élément d’avoir les
propriétés d’un élément en ligne (pas de retour à la ligne après l’élément), mais avec les
propriétés d’un bloc (possibilité d’avoir une dimension et des marges)
Exemple inline-block
display: inline-block sur une liste de liens permet par exemple
header li { de créer une navigation horizontale
display: inline-block;
header li a {
display: block;
Padding: 5px;
Background: green;
Color: #fff;
}
Display none
• display: none permet de retirer un élément du flux de la page : il n’est plus visible, et
la place qu’il occupait est disponible pour d’autres éléments, c’est comme s’il
n’existait pas.
• Les éléments en display:none ne sont pas lus par les lecteurs d’écran
• Pour rendre l’élément à nouveau visible, il faut lui appliquer par exemple display:block
10.
• Un élément static est dit non positionné et un élément avec une propriété position
ayant une valeur autre que static est dit positionné.
Position relative
a{
position: relative;
top: -15px;
}
Position relative
.etoile {
position: relative;
top: 5px;
}
Position fixe
• Un élément en position: fixed; ne bougera pas, même si on fait défiler la page. Il sort du flux
et se positionne au dessus des autres éléments.
• Il se positionne par rapport à l'espace affichable du navigateur
Position fixe
nav {
position: fixed;
top: 0;
left: 0;
right: 0;
}
Position absolue
sort du flux (les autres éléments se réorganisent comme s’il n’était pas là)
vient se positionner par rapport à son dernier ancêtre positionné, à l’intérieur de celui-
ci.
• Par défaut, si aucun ancêtre n’est positionné (et qu’on a modifié top, left, right ou
bottom) il se positionne par rapport à l'élément racine <html>.
• Pour positionner le parent, on donne au parent une position: relative | fixed | absolute;
Position absolue
Position absolue
.caption {
Préparer l’image avec les couleurs
background: rgba(0,0,0,0.8);
Color: #fff;
Padding: 20px;
}
Position absolue
.caption {
Préparer le positionnement de l’image
background: rgba(0,0,0,0.8);
color: #fff;
padding: 20px;
position: absolute;
left: 0;
right: 0;
}
Position absolue
}
11.
• Aujourd’hui, la mise en page de sites web moderne se fait avec deux techniques :
flexbox (pour des mises en page fluides) et grid- layout (plus récent et moins bien
supporté mais qui permet de créer facilement des sites sur des principes de grilles.
Mise en page avec flexbox
• Le principe de la mise en page avec Flexbox est simple : vous définissez un conteneur, et à l'intérieur
vous placez plusieurs éléments. Imaginez un carton dans lequel vous rangez plusieurs objets : c'est le
principe
• Sur une même page web, vous pouvez sans problème avoir plusieurs conteneurs (plusieurs cartons, si
vous préférez). Ce sera à vous d'en créer autant que nécessaire pour obtenir la mise en page que vous
voulez.
https://developer.mozilla.org/fr/docs/Web/CSS/CSS_Flexible_Box_Layout/Basic_Concepts_of_Flexbox
Les deux axes des boîtes flexible
Lorsqu'on travaille avec les boîtes flexibles, deux axes interviennent : l'axe principal
(main axis en anglais) et l'axe secondaire (cross axis en anglais). L'axe principal est
défini par la propriété flex-direction et l'axe secondaire est l'axe qui lui est
perpendiculaire. Tout ce que nous manipulons avec les boîtes flexibles fera référence à
ces axes.
Flex-direction
L'axe principal est défini par la propriété flex-direction qui peut prendre quatre valeurs : row,
row-reverse, column, column-reverse
• Si on choisit la valeur row ou row-reverse l'axe principal sera aligné avec la direction « en
ligne »
• Si on choisit la valeur column ou column-reverse l'axe principal sera aligné avec la direction
« en ligne »
Axe secondaire
L'axe principal est défini par la propriété flex-direction qui peut prendre quatre valeurs : row,
row-reverse, column, column-reverse
• L'axe secondaire est perpendiculaire à l'axe principal. Ainsi, si flex-direction vaut rox ou
row-reverse, l’axe secondaire suivra l’axe de colonnes
• Si l'axe principale est column ou column-reverse , l'axe secondaire suivra celui des lignes
(horizontales).
Flexbox Exemple
#conteneur {
display: flex;
flex-direction: column;
}
#conteneur {
display: flex;
flex-direction: row;
}
12.
Pseudo-Éléments
Pseudo-éléments
Un pseudo-élément est un mot-clé ajouté à un sélecteur qui permet de mettre en forme certaines parties de
l'élément ciblé par la règle. Ainsi, le pseudo-élément ::first-line permettra de ne cibler que la première ligne
d'un élément visé par le sélecteur.
Quelques pseudo-éléments :
::after : ex: p::after Insérez quelque chose après le contenu de chaque élément <p>
::before : ex: p::before Insérez quelque chose avant le contenu de chaque élément <p>
Pseudo-Classes
Pseudo-classes
• Une pseudo-classe est un mot-clé qui peut être ajouté à un sélecteur afin
d'indiquer l'état spécifique dans lequel l'élément doit être pour être ciblé par la
déclaration.
• Les pseudo-classes vont nous permettre d’appliquer des styles à des éléments
HTML uniquement lorsque ceux-ci sont dans un certain état (cliqués, activés,
etc.).
div { div:hover {
height: 100px; background-color: lightBlue;
}
border: 1px solid black;
width: 200px;
box-sizing: border-box;
text-align: center;
}
Pseudo-class :active
La pseudo-classe :active permet de cibler un élément lorsque celui-ci est activé par l'utilisateur. Elle permet
de fournir un feedback indiquant que l'activation a bien été détectée par le navigateur. Lorsqu'on a une
interaction avec un pointeur, il s'agit généralement du moment entre l'appui sur le pointeur et le relâchement
de celui-ci
La pseudo-classe :active est également activée lorsque l'utilisateur emploie la touche de tabulation. Elle
est souvent utilisée sur les éléments HTML <a> et <button> mais n'est pas restreinte à ceux-ci. Les
éléments ciblés par cette pseudo-classe incluent les éléments qui contiennent l'élément activé et les
éléments de formulaires activés via leur élément <label> associé.
a:active {
color: red;
}
Pseudo-class :visited
La pseudo-classe :visited va elle nous permettre de modifier les styles d’un élément HTML lors d’un état très
particulier qui est le moment où l’on clique sur l’élément. Pour bien visualiser cet état, je vous conseille de
rester cliqué sur l’élément en question le temps de voir les changements de style. Une nouvelle fois, en
pratique, cette pseudo-classe va généralement être utilisée pour modifier l’apparence des liens au moment du
clic.
a:visited {
color: #00ff00;
}
Pseudo-class :first-child, last-child
• La pseudo-classe :first-child permet de cibler un élément qui est le premier élément fils par
rapport à son élément parent.
• La pseudo-classe :last-child permet de cibler un élément qui est le dernier élément enfant de
son parent.
li:first-child { li:last-child {
• Notation fonctionnelle :
(an + b) : Représente les éléments dont la position est la an+b –ième avec n qui parcours
les entiers à partir de 0. Les valeurs fournies par A et B doivent être les entiers.
Exemple :nth-child
li { li:nth-child(2n+1) {
Les vendeurs de navigateurs ajoutent parfois des préfixes aux propriétés CSS
expérimentales ou non standards. Les développeurs peuvent ainsi les expérimenter
sans que les changements de comportement du navigateur ne cassent le code pendant
le processus de standardisation. Les développeurs sont supposés attendre que le
comportement du navigateur soit standardisé pour inclure la propriété non préfixée.
Les préfixes vendeurs en CSS
En général, les principaux navigateurs utilisent ces préfixes :
.class{
-webkit- (Chrome, nouvelles versions d'Opera.)
-moz-border-radius: 5px;
-moz- (Firefox)
-webkit-border-radius: 5px;
-o- (Anciennes versions d'Opera)
-o-border-radius: 5px;
-ms- (Internet Explorer et Edge)
border-radius: 5px;
}
L'idéal est de toujours commencer une déclaration par les propriétés précitées, puis de la finir par
celle qui devra les remplacer un jour, pour garantir que l'implémentation finale sera bien assurée
par cette dernière
SASS
Sass est le langage d'extension CSS de qualité professionnelle le plus mature, le plus stable
et le plus puissant au monde.
Sass est un langage de feuille de style compilé en CSS. Il vous permet d'utiliser des variables ,
des règles imbriquées , des mixins , des fonctions , etc., le tout avec une syntaxe entièrement
compatible CSS. Sass aide à garder les feuilles de style volumineuses bien organisées et
facilite le partage de la conception au sein et entre les projets.
Merci