La propriété grid est une propriété centrale de l'environnement Bootstrap. La grille permet d'organiser ses éléments facilement et intuitivement; c'est la grid également donnée à Bootstrap tout son intérêt sur le plan responsif.
La grid Bootstrap : Comment ça marche ?
Une grid sur plusieur niveau
Containers donnent un moyen de centrer et/ou contrôler le padding et la margin des éléments d'un site.
Rows sont des "wrapper" (emballage) pour les colonnes.
Le contenu d'une grid ne peut être situé que dans les colonnes.
Les grid column sont diviées en 12 sous-parties par rangées. col-4 est donc une column qui prend 4 sous-parties de la rangée. 4 col-3 prendront donc tout l'espace de la rangée.
Si la taille des colonnes n'est pas spécifiée, elles prendront automatiquement un width de telle sorte que les colonnes prennent toute la place de la rangée.
Changer la largeur de la fenêtre pour voir les effets
La deuxième notion essentielle de Bootstrap, allant en tandem avec la grille, est les breakpoints. Les breakpoints sont des @media queries intégrés aux classes Bootstrap. Plus besoins d'écrire dans la feuille CSS plus configuration en fonction de la taille de l'écran, c'est possible directement avec des classes.
Notation
Les breakpoint se précises dans les colonnes avec la notation suivante : col-{breakpoint}-{columnSize}
Extra small
<576px
Small
≥576px
Medium
≥768px
Large
≥992px
Extra large
≥1200px
Max container width
None (auto)
540px
720px
960px
1140px
Class prefix
.col-
.col-sm-
.col-md-
.col-lg-
.col-xl-
# of columns
12
Rows & Columns
A l'interieur du container, la classe .row est utilisé comme un container pour les grid columns. Les Rows doivent toujours être placé dans un container (.container ou .container-fluid) pour s'assurer de l'espace entre les différent éléments de la page, en particulier avec le bord de la page.
Les spécificités de .row
La ligne Bootstrap .row utilise des marges négatives (-15px) pour contrecarrer le padding (15px) du conteneur. Le résultat final est l’absence d’espacement visuel (marge ou remplissage) sur les côtés de la rangée à l’intérieur du conteneur. Il y a plusieurs raisons pour lesquelles l’approche de la « marge négative » est utilisée dans Bootstrap.
Tous les systèmes de grille ont un espacement ou des « gutter » autour des colonnes. Dans le cas de Bootstrap, le gutter est créée à l’aide d’un padding de 15px autour de chaque colonne. Le gutter effective affichée entre les colonnes voisines est de 30px. Les colonnes extérieures (la plus à gauche et la plus à droite) doivent avoir 1/2 du gutter (15px) à l’extérieur pour garder l’espacement cohérent.
Au lieu d’utiliser une classe spécifique comme ".first" ou ".last" sur ces colonnes de grille externe, Bootstrap utilise des marges négatives. Cela égalise les gutter des colonnes les plus à gauche et à droite avec le bord extérieur du conteneur .row.
L’espace visuel entre chaque colonne (appelée gutter) est créé avec un padding (15px) à gauche et à droite de chaque colonne. En conséquence, le gutter effectif entre le contenu de chaque colonne est de 30px (15px à gauche + 15px à droite). Les premières colonnes (les plus à gauche) et les dernières colonnes (les plus à droite) s’alignent parfaitement sur le bord de la ligne grâce à cette margin négative discutée plus haut.
Il est possible de définir un nombre de colonne maximum par la ligne :
La propriété CSS border permet de définir les propriétés liées à la bordure.
Notation
Additivité
border-top
border-end
border-bottom
border-start
La propriété border doit être écrite avant de donner des propriétés supplémentaires.
Soustractivité
border-top-0
border-end-0
border-bottom-0
border-start-0
border-0 - "efface" les bordures
Border Color
Les bordures peuvent être customisées à l'aide du code couleur Bootstrap.
border border-primary
border border-secondary
border border-success
border border-danger
border border-warning
etc...
Border width
border border-1
border border-2
border border-3
border border-4
border border-5
color & background-color
Text text text text
Bootstrap propose une palette de couleurs intégrées. Ce code couleur permet de donner une cohérence au design général de la page. Par exemple, un message d'erreur avec la classe .danger sera rouge.
Les différentes couleurs disponibles
primary
secondary
success
danger
warning
info
light
dark
muted
white
Notation
Pour changer la couleur d'un texte on utilisera les classes suivant la notation : text-{color}.
text-primary
text-secondary
etc...
Pour changer la propriété background-color on utilisera les classes suivant la notation : bg-{color}.
bg-primary
bg-secondary
etc...
Container
Les container sont les éléments de mise en page le plus basique dans Bootstrap et sont nécessaires lors de l’utilisation de Grid par défaut. Les containers peuvent être utilisé pour centrer des éléments. Bien que les conteneurs puissent être imbriqués, c'est à éviter sous peine de devoir compenser les marges par defaults des containers.
Les containers permettent très rapidement et facilement de donner un aspect responsive à une page. En effet, les containers ont un max-width par défaut.
Par exemple : .container-md, prend 100% de l'espace disponible, pour des écrans plus petits que le breakpoint (ici md : 768px) puis le container pour des écrans plus grands est capés à 720px.
Extra small <576px
Small ≥576px
Medium ≥768px
Large ≥992px
Extra large ≥1200px
.container
100%
540px
720px
960px
1140px
.container-sm
100%
540px
720px
960px
1140px
.container-md
100%
100%
720px
960px
1140px
.container-lg
100%
100%
100%
960px
1140px
.container-xl
100%
100%
100%
100%
1140px
.container-fluid
100%
100%
100%
100%
100%
Flexbox
1
2
3
La classe d-flex transforme un élément en Flexbox.
La propriété flex-direction définit la façon dont les éléments flexibles sont placés dans un conteneur flexible : elle définit l'axe principal et la direction des éléments (normale ou inversée).
Notation
flex-column
flex-column-reverse
flex-row
flex-row-reverse
1
2
3
La propriété CSS justify-content indique la façon dont l'espace doit être réparti entre et autour des éléments selon l'axe principal d'une Flexbox.
La classe .justify-content change l'alignement des items sur l'axe principal de la Flexbox (par défaut sur l'axe horizontal, l'axe vertical si flex-direction : column).
Notation
justify-content-start
justify-content-end
justify-content-center
justify-content-between
justify-content-around
1
2
3
La propriété align-self définit elle l'alignement d'un objet au sein de son conteneur. Cette propriété contrôle l'alignement par rapport à l'axe secondaire (par défaut sur l'axe vertical, l'axe horizontal si flex-direction : column).
Notation
align-items-start
align-items-end
align-items-center
align-items-stretch
Margin & Padding
Text
Les attributs de Margin et Padding permettent de gérer les espaces entre différents éléments html.
La propriété padding permet de définir les différents écarts de remplissage sur les quatre côtés d'un élément.
La propriété margin définit la taille des marges sur les quatre côtés de l'élément.
Notation
Les classes .margin et .padding suivent le format suivant : {property}{sides}-{size}.
Où property correspond à :
m - pour la classe qui definit margin
p - pour la classe qui definit padding
Où sides correspond à :
t - pour la classe qui definit margin-top ou padding-top
b - pour la classe qui definit margin-bottom ou padding-bottom
s - pour la classe qui definit margin-left ou padding-left
e - pour la classe qui definit margin-right ou padding-right
x - pour la classe qui definit *-right ou *-left (où * correspond à property)
y - pour la classe qui definit *-top ou *-bottom (où * correspond à property)
blank - pour la classe qui definit padding ou margin sur les 4 côtés
Où size correspond à :
0 - pour la classe qui definit margin or padding à 0
1 - pour la classe qui definit margin or padding à 0.25rem
2 - pour la classe qui definit margin or padding à 0.5rem
3 - pour la classe qui definit margin or padding à 1rem
4 - pour la classe qui definit margin or padding à 1.5rem
5 - pour la classe qui definit margin or padding à 3rem
auto - pour la classe qui definit margin or padding à auto
Il est également possible d'appliquer des breakpoints aux classes margin et padding (les mêmes que pour les grid). Les breakpoints utilisés conjointement avec les classes margin et padding sont des outils très puissants pour donner un aspect responsive à une page.
On a alors la notation suivantes : {{property}{sides}-{breakpoint}-{size}, avec breakpoint prenant les valeurs
sm,
md,
lg et
xl.
Position
Des classes de positionnement Boostrap sont disponibles.
.position-static - comportement par défaut
.position-relative
.position-absolute
.position-fixed
.fixed-top - positionnement en haut de la fenêtre
.fixed-bottom - positionnement en bas de la fenêtre
Shadow
Text
La classe CSS .shadow permet de définir la propriétés box-shadow d'un élément.
Notation
shadow-sm - small shadow
shadow - regular shadow
shadow-lg - large shadow
shadow-none pour enlever l'ombre d'un élément
Sizing
Text
Notation
Les classes de .width et de .height suivent le format suivant : {property}-{size}.
Où property correspond à :
w - pour la classe qui definit width
h - pour la classe qui definit height
Où size peut prendre les valeurs 0, 25, 50, 75, 100.
Text
Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.
Les différentes classes disponible dans Bootstrap sur le Text :
Font size
fs-1
fs-2
fs-3
fs-4
fs-5
fs-6
Text alignment
text-center
text-end
text-justify
Font weight
fw-bold
fw-normal
fw-light
Text transform
text-lowercase
text-uppercase
text-capitalize
Text wrapping
text-nowrap
text-truncate
Visbilité
Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.
Opacity
opacity-25
opacity-50
opacity-75
opacity-100
Overflow
overflow-hidden
overflow-scroll
overflow-auto
overflow-visible
Visibility
invisible
visible
Accordion
This is the first item's accordion body.
This is the second item's accordion body.
This is the third item's accordion body.
<divclass="accordion"id="accordionExample">
<divclass="accordion-item">
<h2class="accordion-header"id="headingOne">
<buttonclass="accordion-button"type="button"data-bs-toggle="collapse"data-bs-target="#collapseOne"aria-expanded="true"aria-controls="collapseOne">
Accordion Item #1
</button>
</h2>
<divid="collapseOne"class="accordion-collapse collapse show"aria-labelledby="headingOne"data-bs-parent="#accordionExample">
<divclass="accordion-body">
<strong>This is the first item's accordion body.</strong>
</div>
</div>
</div>
<divclass="accordion-item">
<h2class="accordion-header"id="headingTwo">
<buttonclass="accordion-button collapsed"type="button"data-bs-toggle="collapse"data-bs-target="#collapseTwo"aria-expanded="false"aria-controls="collapseTwo">
Accordion Item #2
</button>
</h2>
<divid="collapseTwo"class="accordion-collapse collapse"aria-labelledby="headingTwo"data-bs-parent="#accordionExample">
<divclass="accordion-body">
<strong>This is the second item's accordion body.</strong>
</div>
</div>
</div>
<divclass="accordion-item">
<h2class="accordion-header"id="headingThree">
<buttonclass="accordion-button collapsed"type="button"data-bs-toggle="collapse"data-bs-target="#collapseThree"aria-expanded="false"aria-controls="collapseThree">
Accordion Item #3
</button>
</h2>
<divid="collapseThree"class="accordion-collapse collapse" aria-labelledby="headingThree" data-bs-parent="#accordionExample">
<divclass="accordion-body">
<strong>This is the third item's accordion body.</strong>
</div>
</div>
</div>
</div>
Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.
<buttonclass="btn btn-primary"type="button"data-bs-toggle="collapse"data-bs-target="#collapseExample"aria-expanded="false"aria-controls="collapseExample">
Button demo
</button>
<divclass="collapse"id="collapseExample">
<divclass="card card-body">
Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.
</div>
</div>
Un bouton. On lui donnera les propriétés suivantes :
data-toggle="collapse" pour donner le comportement au bouton.
data-target="#cardHidden" et aria-controls="cardHidden" pour lier le bouton à la card "caché". Ici data-target et aria-controls correspond à l'ID du container de la card-body
Un container (celui dans lequel on va placer la card-body) avec les propriétés suivantes :
class="collapse" pour donner le comportement à la card-body.
id="cardHidden"
Un div avec la classe card-body. Il s'agit du contenue de la card.
Les badges
Les Badges permettent de mettre en avant une information.
La classe .btn est à utiliser avec les balises <button> et <a> (lorsque l'on utilise la balise <a>, il faut préciser role="button").
Avant d'assigner une couleur au bouton (ou une autre propriété) il faut donner la classe btn.
Pour ajouter un lien à un boutton, il suffit d'ajouter un href="chemin_lien".
<divclass="card w-50">
<imgsrc="..."class="card-img-top"alt="...">
<divclass="card-body">
<h5class="card-title">Card title</h5>
<pclass="card-text">Some quick example text to build on the card title and make up the bulk of the card's content.</p>
<ahref="#"class="btn btn-primary">Go somewhere</a>
</div>
</div>
Les contenue d'un carousel ne se déroule pas automatiquement de base. Il faut ajouter la classe .slide au container avec la class .
Controleur
Les contrôleurs peuvent également être rajoutés ou non (si l'on opte pour une diapositive automatique par exemple). L'implémentation est présenté ci-dessus avec les liens ayant les classes .carousel-control-prev et carousel-control-next
Indicateur
Dans le container ayant la classe carousel, on peut choisir d'y ajouter des indicateurs, montrant quel slide est visible.
carousel-dark Permet de posser les textes et les controles en noir, sinon ils seront en blanc par défaut.
carousel-fade Permet de changer l'animation du changement de slide en fondue.
SLIDE 1
First slide label
Some representative placeholder content for the first slide.
SLIDE 2
Second slide label
Some representative placeholder content for the second slide.
<divid="carouselExampleCaptions"class="carousel slide carousel-fade carousel-dark"data-bs-ride="carousel">
<divclass="carousel-indicators">
<buttontype="button"data-bs-target="#carouselExampleCaptions"data-bs-slide-to="0"class="active"aria-current="true"aria-label="Slide 1"></button>
<buttontype="button"data-bs-target="#carouselExampleCaptions"data-bs-slide-to="1"aria-label="Slide 2"></button>
</div>
<divclass="carousel-inner">
<divclass="carousel-item active">
<imgsrc="..."class="d-block w-100"alt="...">
<divclass="carousel-caption d-none d-md-block">
<h5>First slide label</h5>
<p>Some representative placeholder content for the first slide.</p>
</div>
</div>
<divclass="carousel-item">
<imgsrc="..."class="d-block w-100"alt="...">
<divclass="carousel-caption d-none d-md-block">
<h5>Second slide label</h5>
<p>Some representative placeholder content for the second slide.</p>
</div>
</div>
</div>
<buttonclass="carousel-control-prev"type="button"data-bs-target="#carouselExampleCaptions"data-bs-slide="prev">
<spanclass="carousel-control-prev-icon"aria-hidden="true"></span>
<spanclass="visually-hidden">Previous</span>
</button>
<buttonclass="carousel-control-next"type="button"data-bs-target="#carouselExampleCaptions"data-bs-slide="next">
<spanclass="carousel-control-next-icon"aria-hidden="true"></span>
<spanclass="visually-hidden">Next</span>
</button>
</div>
Les fenêtres modales font apparaître un élément de la page, jusque-là invisible.
Composé de deux élément : il y a un boutton qui trigger l'action d'afficher la fenêtre et la dite fenêtre pouvant prendre de multiples formes, comme un formulaire, une galerie, du text, une carte etc...
Modal title
Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.
<buttontype="button"class="btn btn-primary"data-bs-toggle="modal"data-bs-target="#exampleModal">
Launch demo modal
</button>
<divclass="modal fade"id="exampleModal"tabindex="-1"aria-labelledby="exampleModalLabel"aria-hidden="true">
<divclass="modal-dialog">
<divclass="modal-content">
<divclass="modal-header">
<h5class="modal-title"id="exampleModalLabel">Modal title</h5>
<buttontype="button"class="btn-close"data-bs-dismiss="modal"aria-label="Close"></button>
</div>
<divclass="modal-body">
Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.
</div>
<divclass="modal-footer">
<buttontype="button"class="btn btn-secondary"data-bs-dismiss="modal">Close</button>
<buttontype="button"class="btn btn-primary">Save changes</button>
</div>
</div>
</div>
</div>
Les Navbars requierent un wrapper .navbar, que l'on note .navbar-expand{-sm|-md|-lg|-xl} pour une navbar responsive (menu hamburger).
On utilise les classes de spacing et marges pour paramétrer les espacements entre les éléments de la navbar.
.navbar-brand Pour le titre du site/nom de la marque, qui reste fixe sur la navbar
.navbar-nav Ce qui contient les items de la navbar
.navbar-toggler appelle les pluggin de collapse menu (menu hamburger)
.navbar-text pour ajouter un String.
navbar-light écrit le texte de la navigation en noir.
navbar-dark écrit le texte de la navigation en blanc.
Le composant .nav combiné avec les classes liées aux Flexbox permet un contrôle complet.
Le style des Navbar est très rapidement paramétrable avec les classes navbar-light et navbar-dark placé sur la balise nav combiné avec les différentes classes liées aux couleurs.
<navclass="navbar navbar-dark bg-primary"> <!-- code de la navigation -->
</nav>
Les cases à cocher peuvent utiliser la pseudo-classe :indeterminate lorsqu'elles sont définies manuellement via JavaScript (il n'existe pas d'attribut HTML permettant de la spécifier).
Ajoutez l'attribut disabled et les label associés sont automatiquement stylisés pour correspondre avec une couleur plus claire pour aider à indiquer l'état de l'entrée.
<divclass="form-check">
<inputclass="form-check-input"type="radio"name="flexRadioDefault"id="flexRadioDefault1">
<labelclass="form-check-label"for="flexRadioDefault1">
Default radio
</label>
</div>
<divclass="form-check">
<inputclass="form-check-input"type="radio"name="flexRadioDefault"id="flexRadioDefault2"checked>
<labelclass="form-check-label"for="flexRadioDefault2">
Default checked radio
</label>
</div>
Disabled
Ajoutez l'attribut disabled et les label associés sont automatiquement stylisés pour correspondre avec une couleur plus claire pour aider à indiquer l'état de l'entrée.
<divclass="form-check">
<inputclass="form-check-input"type="radio"name="flexRadioDisabled"id="flexRadioDisabled"readonly>
<labelclass="form-check-label"for="flexRadioDisabled">
Disabled radio
</label>
</div>
<divclass="form-check">
<inputclass="form-check-input"type="radio"name="flexRadioDisabled"id="flexRadioCheckedDisabled"checkeddisabled>
<labelclass="form-check-label"for="flexRadioCheckedDisabled">
Disabled checked radio
</label>
</div>
Switches
Un interrupteur possède le balisage d'une case à cocher personnalisée mais utilise la classe .form-switch pour rendre un interrupteur à bascule. Pensez à utiliser role="switch" pour transmettre plus précisément la nature du contrôle aux technologies d'assistance qui prennent en charge ce rôle.
Dans les technologies d'assistance plus anciennes, le contrôle sera simplement annoncé comme une case à cocher ordinaire. Les interrupteurs prennent également en charge l'attribut désactivé.
Créez des contrôles input type="range" personnalisés avec .form-range.
La piste (l'arrière-plan) et la vignette (la valeur) sont toutes deux stylisées pour apparaître de la même manière dans tous les navigateurs.
Comme seul Firefox prend en charge le "remplissage" de sa piste à partir de la gauche ou de la droite de la vignette comme moyen d'indiquer visuellement la progression, nous ne le prenons pas en charge actuellement.
Les entrées de la plage ont des valeurs implicites pour min et max - 0 et 100, respectivement. Vous pouvez spécifier de nouvelles valeurs pour celles-ci en utilisant les attributs min et max.
Par défaut, les entrées de la gamme sont "instantanées" à des valeurs entières. Pour changer cela, vous pouvez spécifier une valeur de pas. Dans l'exemple ci-dessous, nous doublons le nombre d'étapes en utilisant step="0.5".
Par défaut, les textarea avec .form-control auront la même hauteur que les input.
<divclass="form-floating">
<textareaclass="form-control"placeholder="Leave a comment here"id="floatingTextarea"></textarea>
<labelfor="floatingTextarea">Comments</label>
</div>
Pour définir une hauteur personnalisée sur votre textarea, n'utilisez pas l'attribut rows. Au lieu de cela, définissez une hauteur explicite (soit en ligne, soit via une CSS personnalisée).
<divclass="form-floating">
<textareaclass="form-control"placeholder="Leave a comment here"id="floatingTextarea2" style="height: 100px"></textarea>
<labelfor="floatingTextarea2">Comments</label>
</div>
Selects
En dehors de .form-control, les label flottants ne sont disponibles que sur .form-selects.
Ils fonctionnent de la même manière, mais contrairement aux input, ils montreront toujours le label> dans son état flottant.
avec taille et multiple ne sont pas pris en charge.
<divclass="form-floating">
<selectclass="form-select"id="floatingSelect"aria-label="Floating label select example">
<optionselected>Open this select menu</option>
<optionvalue="1">One</option>
<optionvalue="2">Two</option>
<optionvalue="3">Three</option>
</select>
<labelfor="floatingSelect">Works with selects</label>
</div>
Validation
<formclass="row g-3 needs-validation"novalidate>
<divclass="col-md-4">
<labelfor="validationCustom01"class="form-label">First name</label>
<inputtype="text"class="form-control"id="validationCustom01"value="Mark"required>
<divclass="valid-feedback">
Looks good!
</div>
</div>
<divclass="col-md-4">
<labelfor="validationCustom02"class="form-label">Last name</label>
<inputtype="text"class="form-control"id="validationCustom02"value="Otto"required>
<divclass="valid-feedback">
Looks good!
</div>
</div>
<divclass="col-md-4">
<labelfor="validationCustomUsername"class="form-label">Username</label>
<divclass="input-group has-validation">
<spanclass="input-group-text"id="inputGroupPrepend">@</span>
<inputtype="text"class="form-control"id="validationCustomUsername" aria-describedby="inputGroupPrepend" required>
<divclass="invalid-feedback">
Please choose a username.
</div>
</div>
</div>
<divclass="col-md-6">
<labelfor="validationCustom03"class="form-label">City</label>
<inputtype="text"class="form-control"id="validationCustom03"required>
<divclass="invalid-feedback">
Please provide a valid city.
</div>
</div>
<divclass="col-md-3">
<labelfor="validationCustom04"class="form-label">State</label>
<selectclass="form-select"id="validationCustom04"required>
<optionselectedreadonlyvalue="">Choose...</option>
<option>...</option>
</select>
<divclass="invalid-feedback">
Please select a valid state.
</div>
</div>
<divclass="col-md-3">
<labelfor="validationCustom05"class="form-label">Zip</label>
<inputtype="text"class="form-control"id="validationCustom05"required>
<divclass="invalid-feedback">
Please provide a valid zip.
</div>
</div>
<divclass="col-12">
<divclass="form-check">
<inputclass="form-check-input"type="checkbox"value=""id="invalidCheck"required>
<labelclass="form-check-label"for="invalidCheck">
Agree to terms and conditions
</label>
<divclass="invalid-feedback">
You must agree before submitting.
</div>
</div>
</div>
<divclass="col-12">
<buttonclass="btn btn-primary"type="submit">Submit form</button>
</div>
</form>
Voici le code javascript à ajouter :
// Example starter JavaScript for disabling form submissions if there are invalid fields
(function () {
'use strict'
// Fetch all the forms we want to apply custom Bootstrap validation styles to
var forms = document.querySelectorAll('.needs-validation')
// Loop over them and prevent submission
Array.prototype.slice.call(forms)
.forEach(function (form) {
form.addEventListener('submit', function (event) {
if (!form.checkValidity()) {
event.preventDefault()
event.stopPropagation()
}