:tocdepth: 2 ===== CSS ===== .. include:: commondefs.rst.inc .. ifslides:: .. include:: credits.rst.inc .. index:: feuille de style, stylesheet Feuille de style ================ Rappels +++++++ * CSS signifie `Cascading StyleSheet`:eng:\. * HTML ne décrit que la structure logique (le fond) des documents, - la structure physique (la forme) est spécifiée par une feuille de style en CSS. Avantages --------- * cohérence au sein du document * cohérence au sein d'un ensemble de documents (charte graphique) - mutualisation de la feuille de style * séparation des tâches (développeur web / graphiste) .. index:: link; rel=stylesheet Déclarer une feuille de style +++++++++++++++++++++++++++++ Pour attacher une feuille de style à un document HTML, on ajoute dans l'élément `
`:html: une balise ``:html: .. code-block:: html * Les valeurs des attributs `rel`:html: et `type`:html: sont fixées. * L'attribut `href`:html: contient l'URL de la feuille de style. * On peut avoir *plusieurs* feuilles de style (leurs effets se cumulent). Déclarer une feuille de style (2) --------------------------------- * On peut également spécifier la feuille de style directement dans le document HTML, à l'aide de la balise ` .. hint:: Cela peut malgré tout être utile en phase de test, ou si on souhaite minimiser le nombre de requêtes HTTP. Outils ++++++ .. contents:: :local: :depth: 1 :backlinks: none Valideur -------- Comme pour le HTML, le W3C fournit un service en ligne de validation de CSS : http://jigsaw.w3.org/css-validator/ Son utilisation vous est *vivement* recommandée. Inspecteur ---------- Certains navigateurs (notamment Firefox et Chrome) offrent des outils puissants pour les développeurs web. Dans le menu contextuel (clic droit) sur n'importe quel élément, *Inspect Element* ouvre une interface d'inspection qui permet : * de naviguer dans l'arbre HTML, * de voir les règles qui s'appliquent à chaque élément, * de modifier dynamiquement le code HTML et la feuille de style. Liens utiles ------------ Référence et apprentissage : * http://www.w3.org/Style/CSS/ * http://www.w3schools.com/css/ * https://devdocs.io/css/ * http://caniuse.com/ Démonstrations : * http://www.csszengarden.com/ .. hint:: Le site de démonstration ci-dessus est construit sur le principe suivant : la page HTML est toujours la même, seule la feuille de style change. Règle ===== .. index:: règle, sélecteur, propriété Principe ++++++++ * En CSS, la mise en forme est spécifiée par un ensemble de **règles**. * Une règle typique est composée de trois parties : - un **sélecteur**, - une **propriété**, - une **valeur** Exemple : .. code-block:: css em { font-weight: bold } /* le contenu des balises devrait être en gras */ Combinaison de règles +++++++++++++++++++++ Plusieurs règles similaires peuvent coexister : .. code-block:: css em { font-weight: bold } em { color: blue } cite { font-weight: bold } cite { color: blue } Regroupement par sélecteur -------------------------- On peut regrouper les règles ayant le même sélecteur, en séparant les couples propriété-valeur par un point-virgule (« ; »). .. code-block:: css em { font-weight: bold ; color: blue } cite { font-weight: bold ; color: blue } Regroupement par contenu ------------------------ On peut regrouper des règles ayant le même contenu, en séparant les sélecteurs par une virgule (« , »). .. code-block:: css em, cite { font-weight: bold ; color: blue } Sensibilité aux espaces ----------------------- CSS est insensible aux espaces et aux sauts de ligne. On peut donc en ajouter autant que nécessaire pour faciliter la mise en page. .. code-block:: css em, cite { font-weight : bold ; color : blue ; } NB : on peut également rajouter un point-virgule après le dernier couple propriété-valeur, ce qui favorise l'évolutivité de la feuille de style. Propriétés du texte =================== .. index:: .font-style, .font-weith, .font-variant, .font-family, .font-size Propriétés sur la police ++++++++++++++++++++++++ .. raw:: htmlLorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ceci est un exemple de texte aligné à gauche.
Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ceci est un exemple de texte centré.
Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ceci est un exemple de texte aligné à droite.
Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ceci est un exemple de texte justifié.
", shape=box, style=rounded ] p_2 [ label="
", shape=box, style=rounded ] p_3 [ label="
", shape=box, style=rounded ] p_4 [ label="
", shape=box, style=rounded ] p_5 [ label="
", shape=box, style=rounded ] p_6 [ label="
", shape=box, style=rounded ] p_7 [ label="
", shape=box, style=rounded ] p_8 [ label="
", shape=box, style=rounded ] p_9 [ label="
", shape=box, style=rounded ] p_10 [ label="
", shape=box, style=rounded ]
"...1" [ label="..." ]
"...2" [ label="..." ]
"...3" [ label="..." ]
"...4" [ label="..." ]
"...5" [ label="..." ]
"...6" [ label="..." ]
"...7" [ label="..." ]
"...8" [ label="..." ]
"...9" [ label="..." ]
"...10" [ label="..." ]
}
Quels contenus seront affectés par les styles associés aux sélecteurs suivants :
.. code-block:: css
body section p
body > section > p
h3 + p
h3 ~ p
h3, p
Entrainement
------------
`CSS Diner`_ (jusqu'au niveau 14)
.. _CSS Diner: http://flukeout.github.io/
Exercice
--------
Reprenez le code HTML que vous avez écrit pour
`cet exercice This summary
is short. This summary
is short. Par exemple, ce paragraphe a la propriété
width: 50%,
il occupe donc la moitié de la largeur de la page.
.. nextslide::
.. tip:: Pour fixer la taille d'un élément, bordure comprise,
changer la valeur de sa propriété `box-sizing`:css: à
:css:`border-box`. Par défaut, les propriétés `width`:css: et
`height`:css: s'appliquent au contenu de l'élément
(:css:`content-box`).
.. warning:: Certains éléments ignorent
les propriétés `width`:css: et `height`:css:,
typiquement ceux représentant
un mot ou un groupe de mot à l'intérieur d'une phrase
(par exemple ``:html: ou ``:html:).
On peut cependant les forcer à en tenir compte,
en fixant leur propriété `display`:css: à `inline-block`:css:.
.. index:: .calc, .min, .max
Calculs de taille
-----------------
On peut utiliser des *fonctions* CSS pour calculer une longueur :
* :css:`calc` prend en argument une opération arithmétique
* :css:`min` prend en arguments différentes valeurs, éventuellement
avec des unités de taille différentes, et retourne la plus petite
longueur
* :css:`max` : idem que :css:`min` mais pour la plus grande longueur
.. raw:: html
Par exemple, ce paragraphe a la propriété
width: calc(200%/3),
il occupe donc deux tiers de la largeur de la page.
.. code-block:: css
p { width: calc(200%/3); }
Intervalles de taille
---------------------
On peut également contraindre un élément de manière plus souple
avec les propriétés
`min-width`:css:, `max-width`:css:, `min-height`:css: et `max-height`:css:.
C'est utile lorsqu'on ne connaît pas à l'avance
le contenu des éléments concernés :
* feuille de style mutualisée,
* contenu dynamique,
* `reponsive design`:eng:.
.. TODO ce serait bien d'avoir un voire plusieurs exemples ici
.. index:: .overflow
Débordement
-----------
Lorsqu'on contraint la taille d'un élément
(par exemple un paragraphe),
il est possible que cette taille ne suffise plus pour afficher le *contenu* de cet élément.
La propriété :css:`overflow` permet de paramétrer le comportement de l'élément dans cette circonstance.
Elle peut prendre les valeurs suivantes.
* `visible`:css: (valeur par défaut) : le contenu s'affichera entièrement,
quitte à dépasser des limites de l'élément
(et donc à empiéter éventuellement sur d'autres éléments).
* `hidden`:css: : le contenu ne s'affiche qu'à l'intérieur de l'élément,
quitte à être tronqué.
* `scroll`:css: : le contenu ne s'affiche qu'à l'intérieur de l'élément,
mais des ascenseurs sont affichés pour le faire défiler.
* `auto`:css: : le navigateur choisit la solution qui lui semble la plus appropriée.
Exemples d'utilisation de :css:`overflow`
`````````````````````````````````````````
.. raw:: html
`:html:, `
La Joconde
La Joconde ...
avec l'id 'contents' */ }
#contents { /* tout élément avec l'id 'contents' */ }
On peut bien sûr utiliser ces sélecteurs dans des sélecteurs complexes.
Bonne utilisation des identifiants
----------------------------------
* Un identifiant est unique au sein d'un document,
- mais il peut se répéter d'un document à l'autre ;
- par exemple, l'identifiant ``contents`` est peut-être utilisé
pour identifier la table des matière sur toutes les pages d'un site.
* Il y a donc un intérêt à mutualiser les règles de présentation
pour un identifiant dans une feuille de style globale.
Bonne utilisation des classes
-----------------------------
* Les classes permettent de définir des catégories sémantiques plus précises
que celles fournies par HTML ; soit
- un cas particulier par rapport à une balise existante (*e.g.* ``post``),
- une catégorie transverse (*e.g.* ``funny``).
* Le nom de la classe doit décrire ce que *signifie* la classe,
et non la mise en forme qui lui sera appliquée :
- éviter par exemple ``rouge-souligné`` ou ``centré-16pt``,
- qui deviendront obsolètes dès que votre charte graphique changera.
Priorité
++++++++
Considérons :
.. code-block:: css
em { font-style: italic;
color: red }
.summary em { font-style: normal;
font-weight: bold }
Quelle serait la mise en forme du HTML suivant ?
.. code-block:: html
.. index::
double: affichage; inline
double: affichage; block
.. _block:
.. _inline:
Mode d'affichage
++++++++++++++++
Il existe deux grands types d'éléments :
* Les éléments de type `inline`:css:,
* Les éléments de type `block`:css:.
Les éléments `inline`:css:
--------------------------
* Ils s'inscrivent dans le flux du texte.
* Leur taille est déterminée par leur contenu.
+ Les propriétés `width`:css: et `height`:css: sont sans effet sur eux.
* Exemples : ``:html:, ``:html:...
Les éléments `block`:css:
-------------------------
* Ils sont précédés et suivis d'un retour à la ligne.
* Ils prennent toute la largeur disponible,
et uniquement la hauteur nécessaire.
+ Mais on peut changer leur taille
avec les propriétés `width`:css: et `height`:css:.
* Exemples : `
visible
visible
visible
scroll
scroll
scroll
auto
auto
auto
`:html:, ...
.. index:: .display, .vertical-align
Changer le mode d'affichage
---------------------------
* `display`:css:\ : inline, block, inline-block, none
+ Un élément avec `display:inline-block`:css: se comporte
comme un élément `inline` avec ses voisins (pas de retour à la ligne),
mais comme un élément `block` pour son contenu (taille ajustable).
+ Un élément avec `display:none`:css: ne sera pas affiché.
Ce mode est utile en conjonction avec la directive `@media
est probablement le tableau le plus connu au monde.
sera affiché comme suit :
.. raw:: html
est probablement le tableau le plus connu au monde.
est
probablement le tableau le plus connu au monde.