Formation Créer son Framework CSS | le Style de Base
Le CSS de base permet de définir une base neutre, sans les styles implicites que chaque navigateur applique par défaut.
Reset
A quoi ca sert ?
Un reset CSS permet de neutraliser les styles par défaut des navigateurs pour s’assurer que votre site web s’affiche de manière cohérente quel que soit le navigateur utilisé.
Il permet de partir d’une base neutre, sans les styles implicites que chaque navigateur applique par défaut (margin
, padding
…).
Custom reset ou reset prédéfini ?
Il existe de nombreux resets CSS disponibles en ligne et de nombreux frameworks les exploitent déjà. Cependant, dans le cadre de cette formation, nous allons en créer un rudimentaire, pour illustrer la démarche à des fins pédagogiques.
:root {
--background-color: var(--light-2);
--text-color: var(--dark-2);
}
::selection {
background-color: var(--primary);
color: var(--primary-contrast);
}
*,
*::before,
*::after {
box-sizing: border-box;
margin: 0;
padding: 0;
font-family: var(--typography-main), sans-serif;
transition: all var(--transition-type) var(--transition-duration);
appearance: none;
}
html {
scroll-behavior: smooth;
}
body {
background-color: var(--background-color);
color: var(--text-color);
font-size: var(--base-unit);
}
Ce code déclare 2 variables de sorte à appliquer la couleur sombre du design system pour le texte et de la couleur claire pour le background.
Le sélecteur *
, *::before
et *::after
permet :
- D’appliquer
box-sizing: border-box
afin d’inclure la bordure et le padding dans la largeur et la hauteur totales des éléments HTML - De supprimer les marges et les paddings par défaut
- De définir la police de base du design system pour l’ensemble des éléments
- D’ajouter une transition pour les animations et désactiver l’apparence par défaut des éléments.
On en profite pour définir sur la balise <body>
une font-size
de référence selon l’unité de base définie dans notre design system.
::selection
permet d’accorder avec la couleur principale la sélection des éléments au pointeur et scroll-behavior: smooth;
permet d’animer le défilement de manière fluide vers une ancre de la page, au lieu de le rendre instantané.
Typographie
L’importance du texte
Sur une page web, les textes sont les vecteurs principaux de transmission d’information.
Bien qu’ils puissent être accompagnés de médias (images, vidéos, etc.), les textes sont omniprésents sur l’interface et jouent un rôle primordial.
Leur apparence, comme le style de la typographie, la taille et la couleur, véhicule également un message.
- Un mot en couleur indique souvent une importance / un lien hypertexte
- Un texte plus grand/gras indique une importance accrue
- Le type de typographie reflète l’identité graphique du site.
- Etc.
En plus de leur esthétique, les textes bien stylisés contribuent à hiérarchiser l’information et améliorer l’expérience utilisateur.
Quels textes cibler ?
Dans le cas de notre micro framework, nous allons cibler les textes principaux, à savoir les paragraphes (<p>
), les titres (<h*>
) et les liens (<a>
) hypertextes.
Paragraphes
:root {
--p-size: var(--base-unit);
--p-line-height: calc(var(--p-size) * var(--ratio-line-height));
--p-weight: 500;
}
p {
font-size: var(--p-size);
line-height: var(--p-line-height);
font-weight: var(--p-weight);
}
Titres
La typographie utilisée par les titres est celle définie dans la variable --typography-headlines
ou --typography-main
en cas de non définition.
Les titres auront une graisse, taille et hauteur de ligne relative à l’unité de basse --base-unit
.
Ces valeurs sont stockées dans des variables.
:root {
/* ... */
--h1-size: calc(var(--base-unit) * 3);
--h1-line-height: calc(var(--h1-size) * var(--ratio-line-height));
--h1-weight: 900;
--h2-size: calc(var(--base-unit) * 2.25);
--h2-line-height: calc(var(--h2-size) * var(--ratio-line-height));
--h2-weight: 700;
--h3-size: calc(var(--base-unit) * 1.625);
--h3-line-height: calc(var(--h3-size) * var(--ratio-line-height));
--h3-weight: 600;
--h4-size: calc(var(--base-unit) * 1.5);
--h4-line-height: calc(var(--h4-size) * var(--ratio-line-height));
--h4-weight: 600;
--h5-size: calc(var(--base-unit) * 1.375);
--h5-line-height: calc(var(--h5-size) * var(--ratio-line-height));
--h5-weight: 500;
--h6-size: calc(var(--base-unit) * 1.25);
--h6-line-height: calc(var(--h6-size) * var(--ratio-line-height));
--h6-weight: 500;
}
/* ... */
h1,
h2,
h3,
h4,
h5,
h6 {
font-family: var(--typography-headlines), var(--typography-main), sans-serif;
}
h1 {
font-size: var(--h1-size);
line-height: var(--h1-line-height);
font-weight: var(--h1-weight);
}
h2 {
font-size: var(--h2-size);
line-height: var(--h2-line-height);
font-weight: var(--h2-weight);
}
h3 {
font-size: var(--h3-size);
line-height: var(--h3-line-height);
font-weight: var(--h3-weight);
}
h4 {
font-size: var(--h4-size);
line-height: var(--h4-line-height);
font-weight: var(--h4-weight);
}
h5 {
font-size: var(--h5-size);
line-height: var(--h5-line-height);
font-weight: var(--h5-weight);
}
h6 {
font-size: var(--h6-size);
line-height: var(--h6-line-height);
font-weight: var(--h6-weight);
}
Liens
Les liens prendront la couleur principale du design system et ne seront pas soulignés.
:root {
/* ... */
--link-color: var(--primary);
}
/* ... */
a {
color: var(--link-color);
text-decoration: none;
}
Code complet
Voici le code complet des fichiers 📄 _reset.css
et 📄 _typography.css
ainsi que du fichier global 📄 all.css
:
:root {
--background-color: var(--light-2);
--text-color: var(--dark-2);
}
::selection {
background-color: var(--primary);
color: var(--primary-contrast);
}
*,
*::before,
*::after {
box-sizing: border-box;
margin: 0;
padding: 0;
font-family: var(--typography-main), sans-serif;
transition: all var(--transition-type) var(--transition-duration);
appearance: none;
}
html {
scroll-behavior: smooth;
}
body {
background-color: var(--background-color);
color: var(--text-color);
font-size: var(--base-unit);
}
:root {
--link-color: var(--primary);
--p-size: var(--base-unit);
--p-line-height: calc(var(--p-size) * var(--ratio-line-height));
--p-weight: 500;
--h1-size: calc(var(--base-unit) * 3);
--h1-line-height: calc(var(--h1-size) * var(--ratio-line-height));
--h1-weight: 900;
--h2-size: calc(var(--base-unit) * 2.25);
--h2-line-height: calc(var(--h2-size) * var(--ratio-line-height));
--h2-weight: 700;
--h3-size: calc(var(--base-unit) * 1.625);
--h3-line-height: calc(var(--h3-size) * var(--ratio-line-height));
--h3-weight: 600;
--h4-size: calc(var(--base-unit) * 1.5);
--h4-line-height: calc(var(--h4-size) * var(--ratio-line-height));
--h4-weight: 600;
--h5-size: calc(var(--base-unit) * 1.375);
--h5-line-height: calc(var(--h5-size) * var(--ratio-line-height));
--h5-weight: 500;
--h6-size: calc(var(--base-unit) * 1.25);
--h6-line-height: calc(var(--h6-size) * var(--ratio-line-height));
--h6-weight: 500;
}
p {
font-size: var(--p-size);
line-height: var(--p-line-height);
font-weight: var(--p-weight);
}
h1,
h2,
h3,
h4,
h5,
h6 {
font-family: var(--typography-headlines), sans-serif;
}
h1 {
font-size: var(--h1-size);
line-height: var(--h1-line-height);
font-weight: var(--h1-weight);
}
h2 {
font-size: var(--h2-size);
line-height: var(--h2-line-height);
font-weight: var(--h2-weight);
}
h3 {
font-size: var(--h3-size);
line-height: var(--h3-line-height);
font-weight: var(--h3-weight);
}
h4 {
font-size: var(--h4-size);
line-height: var(--h4-line-height);
font-weight: var(--h4-weight);
}
h5 {
font-size: var(--h5-size);
line-height: var(--h5-line-height);
font-weight: var(--h5-weight);
}
h6 {
font-size: var(--h6-size);
line-height: var(--h6-line-height);
font-weight: var(--h6-weight);
}
a {
color: var(--link-color);
text-decoration: none;
}
@import '_reset.css';
@import '_typography.css';
Le style de base du framework est importé dans 📄 app.css
:
@import 'config.css';
@import 'base/all.css';
@import 'layout/all.css';
@import 'components/all.css';
@import 'utilities/all.css';