"# discovering-taillwindcss"
Les titres contenant ? ont besoin d'exmple concret plus precis et claire
0.5, 1, 1.5, 2, 2.5, 3, 3.5, de 4 à 12, 14, 16, 20, 24, 28, 32, 36, 40, 44, 48, 52, 56, 60, 64, 72, 80, 96
avec 1unité = 0.25rem = 4px1/12
1/6
1/5
1/4
1/3
2/5
5/12
1/2
7/12
3/5
2/3
3/4
4/5
5/6
11/12
full
Taillwind CSS IntelliSense
npm install -D tailwindcss
npx tailwindcss init
/** @type {import('tailwindcss').Config} */
module.exports = {
content: ["./src/**/*.{html,js}"],
theme: {
extend: {},
},
plugins: [],
};
@tailwind base;
@tailwind components;
@tailwind utilities;
npx tailwindcss -i ./src/input.css -o ./dist/output.css --watch
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>Descovering taillwindcss</title>
<link rel="stylesheet" href="../dist/output.css" />
</head>
<body>
<button
class="bg-violet-500 hover:bg-violet-600 active:bg-violet-700 focus:outline-none focus:ring focus:ring-violet-300 ..."
>
Save changes
</button>
</body>
</html>
@apply
: combiner plusieurs classes CSS en une seule/* styles.css */
.alert {
@apply bg-blue-500 text-white font-bold p-4;
}
Utilitaires pour contrôler le rapport hauteur/largeur d'un élément.
aspect-auto
aspect-square
: 1 / 1;aspect-video
16 / 9;aspect-[4/3]
: definir une valeur arbitrairemd:aspect-square
: si media querie medium(à partir de l'écran d'une largeur minimale de 768 pixels et au-delà.), appliquer la ration<video
src="../assets/Jack'Dad - Get Out.mp4"
class="w-full aspect-video md:aspect-square"
></video>
module.exports = {
theme: {
extend: {
aspectRatio: {
'4/3': '4 / 3',
},
}
}
.container
: width à 100%,sm:container
: on applique width à 100% si width <= 640px(max-width)md:container
: on applique width à 100% si width <= 768px(max-width)lg:container
: on applique width à 100% si width <= 1024px(max-width)xl:container
: on applique width à 100% si width <= 1280px(max-width)2xl:container
: on applique width à 100% si width <= 1536px(max-width)/** @type {import('tailwindcss').Config} */
module.exports = {
theme: {
container: {
center: true,
padding: "2rem", //horizongal pading
},
},
};
ou definition de padding par défaut pour chque breackpoint
module.exports = {
theme: {
container: {
padding: {
DEFAULT: "1rem",
sm: "2rem",
lg: "4rem",
xl: "5rem",
"2xl": "6rem",
},
},
},
};
columns-$count
<div class="columns-3">
<p>1</p>
<p>2</p>
<p>3</p>
<p>4</p>
<p>5</p>
</div>
remplit chaque colonne jusqu'à atteindre 3 colonne, le html precedent donne:
1 3 5
2 4
break-[after|before|inside]-$value
Control le comportement de la boîte lorsque'elle est fragmentée
box-decoration-$value
<span
class="box-decoration-slice bg-gradient-to-r from-indigo-600 to-pink-500 text-white px-2 ..."
>
Hello<br />
World
</span>
<span
class="box-decoration-clone bg-gradient-to-r from-indigo-600 to-pink-500 text-white px-2 ..."
>
Hello<br />
World
</span>
Permet de definir coment la largeur et la hateur d'un élément HTML sont calculées, notamment en ce qui concerne les marges, les bordures et le rembourrage (padding).
box-border
:box-sizing: border-box;
box-content
(par défaut)box-sizing: content-box;
<style>
.avec-content-box {
border: 2px solid red;
padding: 20px;
width: 200px;
height: 100px;
background-color: lightblue;
}
.avec-border-box {
border: 2px solid green;
padding: 20px;
width: 200px;
height: 100px;
background-color: lightcoral;
}
</style>
<!--....-->
<div class="my-4">
<div class="avec-content-box box-content">
<p>content box</p>
</div>
</div>
<div class="my-4">
<div class="avec-border-box box-border">
<p>border box</p>
</div>
</div>
classes | propriétés |
---|---|
block | display: block; |
inline-block | display: inline-block; |
inline | display: inline; |
flex | display: flex; |
inline-flex | display: inline-flex; |
table | display: table; |
inline-table | display: inline-table; |
table-caption | display: table-caption; |
table-cell | display: table-cell; |
table-column | display: table-column; |
table-column-group | display: table-column-group; |
table-footer-group | display: table-footer-group; |
table-header-group | display: table-header-group; |
table-row-group | display: table-row-group; |
table-row | display: table-row; |
flow-root | display: flow-root; |
grid | display: grid; |
inline-grid | display: inline-grid; |
contents | display: contents; |
list-item | display: list-item; |
hidden | display: none; |
Utilitaires pour contrôler l'habillage du contenu autour d'un élément.
float-[right|left|none]
Utilitaires pour contrôler l'habillage du contenu autour d'un élément
clear[left|right|both|none]
Permet de controler l'isoaltion d'un élément par rapport à d'autres éléments, notamment en ce qui concerne la création d'un contexte d'empilement séparé pour cet élément.
isolation: isolate;
isolation: auto;
est utilisée pour définir comment une image ou un autre élément rempli d'une boîte (comme un conteneur
<div>
ou un élément<img>
) doit être ajusté en fonction de la taille de la boîte.
classes | propriétés |
---|---|
object-contain | object-fit: contain; |
object-cover | object-fit: cover; |
object-fill | object-fit: fill; |
object-none | object-fit: none; |
object-scale-down | object-fit: scale-down; |
illustration de la difference entre les props
<div class="flex">
<div class="bg-indigo-300" style="width: 200px">
<img class="object-cover h-48" src="../assets/img/i (1).jpg" />
</div>
<div class="bg-indigo-300" style="width: 200px">
<img class="object-contain h-48" src="../assets/img/i (1).jpg" />
</div>
<div class="bg-indigo-300" style="width: 200px">
<img class="object-fill h-48" src="../assets/img/i (1).jpg" />
</div>
<div class="bg-indigo-300" style="width: 200px">
<img class="object-scale-down h-48" src="../assets/img/i (1).jpg" />
</div>
<div class="bg-indigo-300" style="width: 200px">
<img class="object-none h-48" src="../assets/img/i (1).jpg" />
</div>
</div>
La propriété CSS object-position permet de définir la position d'un élément rempli (comme une image) à l'intérieur de son conteneur.
classes | propriétés |
---|---|
object-bottom | object-position: bottom; |
object-center | object-position: center; |
object-left | object-position: left; |
object-left-bottom | object-position: left bottom; |
object-left-top | object-position: left top; |
object-right | object-position: right; |
object-right-bottom | object-position: right bottom; |
object-right-top | object-position: right top; |
object-top | object-position: top; |
Voir les differences entre les valeurs de la propriétés object-position, on hover, par rapport à l'état par défaut
<style>
img {
transition: all 0.3s ease-in-out;
cursor: pointer;
/* Définissez la transition pour la propriété object-position */
}
</style>
<div class="flex justify-between">
<img
class="object-none hover:object-left-top bg-yellow-300 w-24 h-24"
src="../assets/img/i (1).jpg"
/>
<img
class="object-none hover:object-top bg-yellow-300 w-24 h-24"
src="../assets/img/i (1).jpg"
/>
<img
class="object-none hover:object-right-top bg-yellow-300 w-24 h-24"
src="../assets/img/i (1).jpg"
/>
<img
class="object-none hover:object-left bg-yellow-300 w-24 h-24"
src="../assets/img/i (1).jpg"
/>
<img
class="object-none hover:object-center bg-yellow-300 w-24 h-24"
src="../assets/img/i (1).jpg"
/>
<img
class="object-none hover:object-right bg-yellow-300 w-24 h-24"
src="../assets/img/i (1).jpg"
/>
<img
class="object-none hover:object-left-bottom bg-yellow-300 w-24 h-24"
src="../assets/img/i (1).jpg"
/>
<img
class="object-none hover:object-bottom bg-yellow-300 w-24 h-24"
src="../assets/img/i (1).jpg"
/>
<img
class="object-none hover:object-right-bottom bg-yellow-300 w-24 h-24"
src="../assets/img/i (1).jpg"
/>
</div>
Utilitaires permettant de contrôler la manière dont un élément gère le contenu trop volumineux pour le conteneur.
Classes | props |
---|---|
overflow-auto | overflow: auto; |
overflow-hidden | overflow: hidden; |
overflow-clip | overflow: clip; |
overflow-visible | overflow: visible; |
overflow-scroll | overflow: scroll; |
overflow-x-auto | overflow-x: auto; |
overflow-y-auto | overflow-y: auto; |
overflow-x-hidden | overflow-x: hidden; |
overflow-y-hidden | overflow-y: hidden; |
overflow-x-clip | overflow-x: clip; |
overflow-y-clip | overflow-y: clip; |
overflow-x-visible | overflow-x: visible; |
overflow-y-visible | overflow-y: visible; |
overflow-x-scroll | overflow-x: scroll; |
overflow-y-scroll | overflow-y: scroll; |
Utilitaires permettant de contrôler le comportement du navigateur lorsqu'il atteint la limite d'une zone de défilement.
Classes | props | commentaire |
---|---|---|
overscroll-auto | overscroll-behavior: auto; |
--- |
overscroll-contain | overscroll-behavior: contain; |
l'effet de dépassement de défilement ne se propagera pas à l'extérieur si l'user fait defiler au-delà des limites de l'element |
overscroll-none | overscroll-behavior: none; |
desactive completement l'effet de defilement depassant la limite du l'element |
overscroll-y-auto | overscroll-behavior-y: auto; |
|
overscroll-y-contain | overscroll-behavior-y: contain; |
|
overscroll-y-none | overscroll-behavior-y: none; |
|
overscroll-x-auto | overscroll-behavior-x: auto; |
|
overscroll-x-contain | overscroll-behavior-x: contain; |
|
overscroll-x-none | overscroll-behavior-x: none; |
static | position: static;
fixed | position: fixed;
absolute | position: absolute;
relative | position: relative;
sticky | position: sticky;
[top|right|bottom|left|inset|start|end]-$size
class | properties |
---|---|
inset-x-{value} |
left et right à {value} unité |
inset-y-{value} |
top et bottom à {value} unité |
class | props | explication |
---|---|---|
visible | visibility: visible |
Par défaut, rend l'élément visible. |
invisible | visibility: hidden |
Rend l'élément invisible tout en laissant un espace vide pour lui dans la mise en page. |
collapse | visibility: collape |
Principalement utilisé pour les tableaux, rend la cellule ou la colonne invisible tout en maintenant la structure du tableau. |
z-$index
-z-$index
pour les valeurs negativesmodule.exports = {
theme: {
extend: {
zIndex: {
zato: "100",
},
},
},
};
pour l'utiliser: z-zato
<style>
.teste {
border: black solid 2px;
border-radius: 100%;
background-color: aquamarine;
position: relative;
}
</style>
<div class="flex">
<div class="teste hover:z-zato z-40 p-5">05</div>
<div class="teste hover:z-zato z-30 p-5 right-7">04</div>
<div class="teste hover:z-zato z-20 p-5 right-14">03</div>
<div class="teste hover:z-zato z-10 p-5 right-24">02</div>
<div class="teste hover:z-zato p-5 right-28">01</div>
</div>
Définit la taille initiale de l'élément flexible, mais cette taille peut changer en fonction de l'espace disponible et des règles de flexbox.
flex-[row|row-reverse|col|col-reverse]
flex-[wrap|wrap-reverse|nowrap]
class | props | details |
---|---|---|
flex-1 | flex: 1 1 0%; | flex-grow à 1 et flex-shrink à 1 donc rempli l'espace disponible. La valeur 0% spécifie que la taille de base de l'élément est de 0, ce qui signifie qu'il peut rétrécir pour s'ajuster à l'espace disponible. |
flex-auto | flex: 1 1 auto; | meme que flex-1 sauf que, grace à auto, retrecissement si necessaire tout en conservant sa taille de base |
flex-initial | flex: 0 1 auto; | flex-grow: 0; mais possibilité de retrecir, taille debase auto, ce qui signifie qu'il conservera sa taille initiale. Valeur par défaut des enfants de .display flex; |
flex-none | flex: none; | desactive la flexibilité de l'element; ne peut pas s'étendre ni rétrécir en fonction de l'espace dispo, mais sa conserve taille de initiale |
<div class="parent">
<div class="child">Child</div>
<div class="child">Child</div>
<div class="child">Child</div>
</div>
<style>
.parent {
display: flex;
}
</style>
avec parent en display: flex
, les enfants(.child
) auront par défaut flex: 0 1 auto
:
.child {
flex: 0 1 auto; /** flex-grow flex-shrink flex-basis */
}
qui est equivaut à
.child {
flex-grow: 0;
flex-shrink: 1;
flex-basis: auto;
}
grow: flex-grow: 1;
grow-0: flex-grow: 0;
<div class="flex bg-orange-500 w-full">
<div class="w-full bg-slate-200 shrink-0">
<!--gardera la taille à width 100% et ne peut pas retrecir-->
01
</div>
<div class="w-full bg-slate-300">02</div>
<div class="w-full bg-slate-400">03</div>
</div>
ordre-$value
:grid-cols-$nbr-column
: grid-template-columns: repeat($nbr-column, minmax(0, 1fr));
grid-template-columns: none;
<div class="3bg-orange-500 grid grid-cols-2">
<div class="bg-slate-200 h-20">01</div>
<div class="bg-slate-300 h-20">02</div>
<div class="bg-slate-400 h-20">03</div>
</div>
control de la colonne de grille
col-$value
$value
grid-column: auto
grid-column: span $n / span $n;
grid-column: 1 / -1;
grid-column-start: $n;
grid-column-start: auto;
grid-column-end: $n;
grid-column-end: auto;
span
: Spécifie combien de colonnes un élément doit occuper dans la grille.start
: Spécifie le point de départ (la colonne de départ) d'un élément dans la grille.end
: Spécifie le point de fin (la colonne de fin) d'un élément dans la grille.definir le nombre de ligne dans une grille
grid-rows-$n
où $n égale au nombre de ligne, utilisé avec grid-flow-col
et row
control de ligne de grille
row-$value
grid-row: span $n / span $n;
grid-row: 1 / -1;
grid-row-end: auto;
grid-row-start: auto;
grid-row-end: $n;
grid-row-end: auto;
span
: Spécifie combien de lignes un élément doit occuper dans la grille.
start
: Spécifie le point de départ (la ligne de départ) d'un élément dans la grille.
end
: Spécifie le point de fin (la ligne de fin) d'un élément dans la grille.
Control du comportement de placement des éléments lorsque la taille de la grille est insuffisante pour les accueillir tous.
grid-flow-[row|col|dense|row-dense|col-dense]
$value
row
: Les éléments supplémentaires sont positionnés automatiquement sur de nouvelles lignes.col
: Les éléments supplémentaires sont positionnés automatiquement sur de nouvelles colonnes.dense
: Les éléments supplémentaires sont positionnés automatiquement en essayant de remplir les espaces vides, en réorganisant les éléments pour s'adapter aux trous.row-dense
: Les éléments supplémentaires sont positionnés automatiquement sur de nouvelles lignes, en essayant de remplir les espaces vides.col-dense
: Les éléments supplémentaires sont positionnés automatiquement sur de nouvelles colonnes, en essayant de remplir les espaces vides....
...
...
...
...
...
...
...
...
...
...
[p|m]-$value
: p pour padding et m pour margin
[padding|margin]-line-[start|end]: 0px;
, [padding|margin]-[top|right|bottom|left]: 0px;
[padding|margin]: 1px;
permet de controller les espaces entre les elements enfant
space-$value
[w|h]-$value
| Classe | Propriétés | | ------ | ---------- | ----------------------- | | max-[w | h]-full | max-width: 100%; | | max-[w | h]-min | max-width: min-content; | | max-[w | h]-max | max-width: max-content; | | max-[w | h]-fit | max-width: fit-content; |
Classe | Propriétés |
---|---|
max-w-xs | max-width: 20rem; /_ 320px _/ |
max-w-0 | max-width: 0rem; /_ 0px _/ |
max-w-none | max-width: none; |
max-w-sm | max-width: 24rem; /_ 384px _/ |
max-w-md | max-width: 28rem; /_ 448px _/ |
max-w-lg | max-width: 32rem; /_ 512px _/ |
max-w-xl | max-width: 36rem; /_ 576px _/ |
max-w-2xl | max-width: 42rem; /_ 672px _/ |
max-w-3xl | max-width: 48rem; /_ 768px _/ |
max-w-4xl | max-width: 56rem; /_ 896px _/ |
max-w-5xl | max-width: 64rem; /_ 1024px _/ |
max-w-6xl | max-width: 72rem; /_ 1152px _/ |
max-w-7xl | max-width: 80rem; /_ 1280px _/ |
max-w-prose | max-width: 65ch; |
max-w-screen-sm | max-width: 640px; |
max-w-screen-md | max-width: 768px; |
max-w-screen-lg | max-width: 1024px; |
max-w-screen-xl | max-width: 1280px; |
max-w-screen-2xl | max-width: 1536px; |
Classe | Propriétés max-h-px | max-height: 1px; max-h-screen | max-height: 100vh; max-h-$n-default sans pourcentage | max-height: $n-default*0.25rem;
font-sans
font-serif
font-mono
@layer base {
html {
font-family: Proxima Nova, system-ui, sans-serif;
}
}
//tailwind.config.js
const defaultTheme = require("tailwindcss/defaultTheme");
module.exports = {
theme: {
extend: {
fontFamily: {
sans: ["Proxima Nova", ...defaultTheme.fontFamily.sans],
},
},
},
};
text-[sm|base|lg|xl|[2-9]xl]
font-[thin|extralight|light|normal|medium|semibold|bold|extrabold|black]
Classe | propriétés |
---|---|
tracking-tighter | letter-spacing: -0.05em; |
tracking-tight | letter-spacing: -0.025em; |
tracking-normal | letter-spacing: 0em; |
tracking-wide | letter-spacing: 0.025em; |
tracking-wider | letter-spacing: 0.05em; |
tracking-widest | letter-spacing: 0.1em; |
Classe | propriétés |
---|---|
leading-3 | line-height: .75rem; /_ 12px _/ |
leading-4 | line-height: 1rem; /_ 16px _/ |
leading-5 | line-height: 1.25rem; /_ 20px _/ |
leading-6 | line-height: 1.5rem; /_ 24px _/ |
leading-7 | line-height: 1.75rem; /_ 28px _/ |
leading-8 | line-height: 2rem; /_ 32px _/ |
leading-9 | line-height: 2.25rem; /_ 36px _/ |
leading-10 | line-height: 2.5rem; /_ 40px _/ |
list-style-image: none;
<ul class="list-image-[url(checkmark.png)] ...">
<li>5 cups chopped Porcini mushrooms</li>
</ul>
list-inside list-outside
text-[left|center|right|justify|start|end]
underline overline line-through no-underline
decoration-$default-color
deocration-[solid|double|dotted|dashed|wavy]
decoration-[auto|from-font|0-2|4|8]
Controlle la distance entre le soulignement et le text en question underline-offset-[auto|0-2|4|8]
uppercase lowercase capitalize normale-case
Controller le comportement du texte lorsqu'il depasse le bloc
.truncate {
overflow: hidden;
text-overflow: ellipsis;
white-space: nowrap;
}
text-overflow: ellipsis
text-overflow: clip;
Control le comportement de l'indentation du text
indent-$n-default
align-[baseline|top|middle|bottom|text-top|text-bottom|sub|super]
whitespace-[normal|nowrap|pre|pre-line|pre-wrap|break-spaces]
hyphens-[none|manual|auto]
Permet de controller le contenu avant ou apres un pseudo-elements
content-none
content-$value
<a
class="text-sky-400 after:content-['_↗'] ..."
href="https://www.
apple.com/pro-display-xdr/"
target="_blank"
>...</a
>
<div before="Hello World" class="before:content-[attr(before)]">
<!-- ... -->
</div>
bg-[fixed|local|scroll]
Utilitaires pour contrôler la boîte de délimitation de l'arrière-plan d'un élément. Classes | Props ---|--- bg-clip-border | background-clip: border-box; bg-clip-padding | background-clip: padding-box; bg-clip-content | background-clip: content-box; bg-clip-text | background-clip: text;
bg-$default-color
<!-- ..arbitrary value -->
<p class="bg-[#50d71e]">
<!-- ... -->
</p>
Utilitaires pour contrôler la position de l'arrière-plan d'un élément par rapport aux margins, padding et au content.
bg-origin-[border|padding|content]
bg-repeat
bg-repeat-[x|y|round|space]
bg-no-repeat
bg-[auto|cover|contain]
Classes | Value |
---|---|
bg-none | background-image: none; |
bg-gradient-to-t | background-image: linear-gradient(to top, var(--tw-gradient-stops)); |
bg-gradient-to-tr | background-image: linear-gradient(to top right, var(--tw-gradient-stops)); |
bg-gradient-to-r | background-image: linear-gradient(to right, var(--tw-gradient-stops)); |
bg-gradient-to-br | background-image: linear-gradient(to bottom right, var(--tw-gradient-stops)); |
bg-gradient-to-b | background-image: linear-gradient(to bottom, var(--tw-gradient-stops)); |
bg-gradient-to-bl | background-image: linear-gradient(to bottom left, var(--tw-gradient-stops)); |
bg-gradient-to-l | background-image: linear-gradient(to left, var(--tw-gradient-stops)); |
bg-gradient-to-tl | background-image: linear-gradient(to top left, var(--tw-gradient-stops)); |
<div class="h-14 bg-gradient-to-r from-cyan-500 to-blue-500"></div>
<div class="h-14 bg-gradient-to-r from-sky-500 to-indigo-500"></div>
<div class="h-14 bg-gradient-to-r from-violet-500 to-fuchsia-500"></div>
<div class="h-14 bg-gradient-to-r from-purple-500 to-pink-500"></div>