Computers">
Prenez en Main Bootstrap
Prenez en Main Bootstrap
Prenez en Main Bootstrap
Bootstrap
Par bestmomo
www.openclassrooms.com
2/252
Sommaire
Sommaire ...........................................................................................................................................
Lire aussi ............................................................................................................................................
Prenez en main Bootstrap .................................................................................................................
Partie 1 : Premiers pas .......................................................................................................................
2
3
5
5
18
18
18
18
19
25
25
26
27
27
29
30
31
31
31
33
34
36
www.openclassrooms.com
Sommaire
3/252
120
122
123
126
126
127
132
136
139
139
142
www.openclassrooms.com
216
216
220
223
223
224
225
225
226
Lire aussi
4/252
Oprations ...............................................................................................................................................................................................................
Fonctions .................................................................................................................................................................................................................
Un exemple synthtique ..........................................................................................................................................................................................
Utilisation de LESS dans Bootstrap ........................................................................................................................................................................
Un programme pour LESS ......................................................................................................................................................................................
Exemple simple de configuration ............................................................................................................................................................................
Rflexions sur la configuration de Bootstrap avec LESS ........................................................................................................................................
Les mixins ...............................................................................................................................................................................................................
Utilisation dynamique de LESS ...............................................................................................................................................................................
Un thme pour Bootstrap ........................................................................................................................................................................................
Le thme optionnel ..................................................................................................................................................................................................
D'autres thmes ......................................................................................................................................................................................................
Composer son thme ..............................................................................................................................................................................................
www.openclassrooms.com
227
228
228
231
231
232
233
235
239
240
240
241
243
Lire aussi
5/252
Vous crez des pages web et vous passez beaucoup (trop) de temps avec le CSS ?
Alors Bootstrap est fait pour vous, et ce cours va vous guider dans la dcouverte de cette puissante bote outils. Bootstrap est
un framework qui peut rendre votre vie plus facile pour crer l'architecture d'une page web. Mais Bootstrap va bien plus loin
qu'offrir du code CSS dj bien organis et structur. Il offre aussi des plugins jQuery de qualit pour enrichir vos pages.
Vous tes prts ? Bon, on y va, mais il serait bien, pour profiter pleinement de ce cours, que possdiez quelques connaissances
pralables :
La base indispensable est de possder de bonnes notions en HTML et CSS. Vous avez des lacunes ? Comblez-les avec
le cours de Mathieu Nebra.
Pour comprendre la mise en uvre des plugins jQuery, vous aurez besoin des quelques bases dans ce domaine. Il vous
en manque ? Alors vous pouvez rparer a en lisant le cours de Michel Martin.
Si vous voulez modifier Bootstrap pour l'adapter vos besoins il vous faudra connatre LESS. L aussi vous avez besoin
d'un coup de main ? Il existe galement un cours.
Allez on y va !
www.openclassrooms.com
6/252
Mise en route
Pour utiliser efficacement Bootstrap, vous devez dj tre convaincu de son utilit, vous devez aussi savoir l'installer. Ce
chapitre est destin vous faire dcouvrir en quoi Bootstrap peut vous aider et comment vous devez le mettre en uvre pour
l'utiliser efficacement. Nous aborderons galement les Medias Queries que Bootstrap utilise pour que nos pages s'adaptent
automatiquement au support que nous utilisons pour les visualiser.
Un framework ?
Avant toute chose, il faut dfinir ce qu'est un framework. Il s'agit d'un ensemble de composants structurs qui sert crer les
fondations et organiser le code informatique pour faciliter le travail des programmeurs, que ce soit en terme de productivit ou
de simplification de la maintenance. Il en existe beaucoup pour les applications web qui ciblent de nombreux langages : Java,
Python, Ruby, PHP
Il existe des frameworks ct serveur (dsigns backend en anglais), et d'autres ct client (dsigns frontend en anglais).
Bootstrap fait partie de cette deuxime catgorie. Les frameworks CSS sont spcialiss, comme leur nom l'indique, dans les CSS !
C'est--dire qu'ils nous aident mettre en forme les pages web : organisation, aspect, animation Ils sont devenus la mode et il
en existe un certain nombre :
elasticss
Knacss
Blueprint
960 Grid System
YUI
52Framework
inuitcss
Elements CSS framework
BlueTrip
ez-css
etc.
Bootstrap est un framework CSS, mais pas seulement, puisqu'il embarque galement des composants HTML et JavaScript. Il
comporte un systme de grille simple et efficace pour mettre en ordre l'aspect visuel d'une page web. Il apporte du style pour les
boutons, les formulaires, la navigation Il permet ainsi de concevoir un site web rapidement et avec peu de lignes de code
ajoutes. Le framework le plus proche de Bootstrap est sans doute Foundation qui est prsent comme The most advanced
responsive front-end framework in the world . Cette absence de modestie est-elle de mise ? Je pense que c'est surtout une
affaire de got et de prfrence personnelle.
Les intrts
Les navigateurs sont pleins de fantaisies et ont des comportements trs diffrents malgr leur lente convergence vers les
standards. Les frameworks sont cross-browser, c'est dire que la prsentation est similaire quel que soit le navigateur
utilis et d'une parfaite compatibilit ;
Les frameworks CSS font gagner du temps de dveloppement parce qu'ils nous proposent les fondations de la
prsentation;
Les frameworks CSS normalisent la prsentation en proposant un ensemble homogne de styles ;
Les frameworks CSS proposent en gnral une grille pour faciliter le positionnement des lments ;
Les frameworks CSS offrent souvent des lments complmentaires : boutons esthtiques, barres de navigation, etc. ;
La grande diffusion de nouveaux moyens de visualisation du web (smartphones, tablettes) impose dsormais la prise
en compte de tailles d'cran trs varies ; les frameworks CSS prennent gnralement en compte cette contrainte.
Les inconvnients
www.openclassrooms.com
7/252
Pour utiliser efficacement un framework il faut bien le connatre, ce qui implique un temps d'apprentissage ;
La normalisation de la prsentation peut devenir lassante en lissant les effets visuels.
Par rapport aux deux inconvnients noncs, Bootstrap est d'une prise en main rapide mme pour un dbutant et est totalement
configurable parce qu'il est construit avec LESS (que nous verrons un peu plus loin dans le cours).
Dcouverte de Bootstrap
Origine de Bootstrap
Vous connaissez forcment Twitter, un des principaux rseaux sociaux qui inondent la plante de liens virtuels entre les humains
devenus des noyaux cyberntiques. Le projet Bootstrap a t cr au dpart par Mark Otto et Jacob Thornton pour rpondre
des besoins internes de dveloppement de cette entreprise au niveau de l'uniformisation de l'aspect des pages web. Il s'agissait
juste de stylisation CSS, mais le framework s'est ensuite enrichi de composants Javascript.
Il a ensuite t publi en 2011 en devenant rapidement populaire parce qu'il est venu se positionner dans un espace vacant du
dveloppement. Son systme de grille de 12 colonnes est devenu une rfrence. D'autre part sa mise en uvre est aise et se
limite rfrencer quelques librairies, comme nous allons bientt le voir.
Il a t mis disposition du public sous licence Apache. Le framework en est actuellement la version 3. Celle-ci a pris un virage
particulier en intgrant l'aspect responsive par dfaut, alors qu'auparavant cette fonctionnalit faisait l'objet d'un fichier
spar. Cette version est mme dclare comme mobile-first . Avec l'utilisation croissante d'appareils mobiles, le framework
s'est adapt pour offrir une solution cense couvrir tous les besoins.
Contenu du kit
Bootstrap propose :
Une mise en page base sur une grille de 12 colonnes bien pratique. Bien sr, si vous avez besoin de plus de 12 colonnes,
ou de moins, il est toujours possible de modifier la configuration ;
L'utilisation de Normalize.css ;
Du code fond sur HTML5 et CSS3 ;
Une bibliothque totalement open source sous licence Apache ;
Du code qui tient compte du format d'affichage des principaux outils de navigation (responsive design) : smartphones,
tablettes ;
Des plugins jQuery de qualit ;
Un rsultat cross-browser (la prise en charge de IE7 a t abandonne avec la version 3), donc une garantie de
compatibilit maximale ;
Une bonne documentation ;
La garantie d'une volution permanente ;
Une mine de ressources varies sur le web ;
Une architecture base sur LESS, un outil bien pratique qui tend les possibilits de CSS.
Vous pouvez trouver toutes les informations sur Bootstrap directement sur le site ddi.
Les navigateurs n'adoptent pas tous les mmes valeurs par dfaut pour les styles des lments HTML. Cela peut gnrer
quelques surprises au rendu des pages web selon le navigateur utilis. D'autre part certains navigateurs prsentent des dfauts
de prise en compte de certains lments. Normalize est un petit fichier CSS qui tablit des rgles pour avoir un rendu
identique quel que soit le navigateur utilis. Au lieu d'agir brutalement comme les reset CSS qui remettent toutes les valeurs
zro, normalize agit intelligemment en conservant ce qui est utile et en jouant finement sur les lments. Vous pouvez trouver
le dtail des rgles appliques avec leur explication ici.
volution de Bootstrap
Bootstrap est un framework trs populaire qui volue trs rapidement avec l'arrive frquente de nouvelles versions. C'est la
fois un avantage (il s'amliore de plus en plus) et un inconvnient (le code qu'on a crit pour une mise en page n'est rapidement
www.openclassrooms.com
8/252
plus valable pour les nouvelles versions). Le passage la version 3 a t une petite rvolution avec de trs nombreux
changements, en particulier une refonte complte de la grille. Un site crit avec la version 2 doit tre totalement rcrit pour cette
nouvelle version, mais ce n'est videmment pas une obligation. L'volution du framework s'est faite essentiellement en direction
des appareils nomades qui constituent peu peu le parc le plus important d'appareils pour surfer sur Internet.
La principale source d'information pour connatre les changements des nouvelles versions est le blog officiel. Il est aussi
intressant de s'informer en amont sur la page GitHub du projet pour connatre les demandes des utilisateurs (Pull Requests) et
les problmes rencontrs (Issues).
Ce cours a t labor partir de la version 3.1 et tous les renseignements et exemples donns ont t tests sur cette version.
Installation
Installation de Bootstrap
L'installation de Bootstrap est simple : cliquez sur le bouton de tlchargement sur le site du framework. Vous avez disposition
trois boutons :
"Download Bootstrap" : permet de rcuprer juste les fichiers ncessaires au fonctionnement de Bootstrap,
"Download source" : permet de rcuprer en plus tous les fichiers source,
"Download Sass" : c'est un portage de Bootstrap en Sass pour les utilisateurs de projets qui utilisent Sass (Rails,
Compass...).
Vous pouvez aussi aller consulter directement le code source sur github, ou mme l'installer avec Bower si vous n'aimez pas la
simplicit
.
Quand vous tlchargez la librairie avec le bouton "Download source", vous obtenez un fichier zipp contenant un rpertoire
bootstrap-3.1.0, qui contient lui-mme un certain nombre de fichiers et de dossiers, comme le montre la figure suivante.
Les fichiers utiles pour simplement utiliser Bootstrap se situent dans le dossier dist ( distribution ), ce sont les seuls fichiers
que vous obtenez si vous utilisez le bouton "Download Bootstrap" :
www.openclassrooms.com
9/252
La figure suivante montre les fichiers utiles lorsque le site est en ligne (les fichiers bootstrap.min.js et jquery.js ne
sont prvoir que si vous utilisez des plugins jQuery et le dossier fonts uniquement si vous utilisez les icnes).
www.openclassrooms.com
10/252
Dans tous les exemples de ce cours, je pars du principe qu'un rpertoire bootstrap a t cr la racine du site avec les trois
rpertoires css, fonts et js comportant les fichiers cits prcdemment.
Pour que Bootstrap fonctionne il faut le dclarer dans les pages HTML, qui doivent d'ailleurs tre imprativement au format
HTML 5, il faut donc prvoir le bon DOCTYPE :
Code : HTML
<!DOCTYPE html>
Il faut ensuite dclarer au minimum le fichier bootstrap.min.css (ou bootstrap.css) dans l'en-tte de la page web :
Code : HTML
<head>
partir de l toutes les classes sont accessibles videmment vous devez adapter le lien selon la localisation de vos fichiers.
Si vous utilisez des composants JavaScript, vous devez galement rfrencer la librairie de Bootstrap ainsi que jQuery (la librairie
jQuery ne fait pas partie des fichiers tlchargs avec Bootstrap et doit tre rcupr indpendamment sur http://jquery.com/) :
Code : HTML
<script src="bootstrap/js/jquery.js"></script>
<script src="bootstrap/js/bootstrap.min.js"></script>
Et le fichier de thme ?
Ce fichier est un exemple d'amlioration de l'esthtique de Bootstrap, il n'est pas utile pour son fonctionnement. Si vous observez
l'apparence des composants de Bootstrap, vous allez constater qu'il sont plats , sans aucun relief. Dans la version 2, ce n'tait
pas le cas. Pour des raisons de performances, il a t dcid d'offrir cette amlioration visuelle dans un fichier spar. Si vous
avez la curiosit de regarder ce fichier, vous verrez qu'il contient des dfinitions de dgrads et d'ombrages. Vous trouvez le
rsultat de l'application de ce thme sur cette page d'exemple. Nous reparlerons de ce fichier dans le chapitre de la configuration
de Bootstrap.
www.openclassrooms.com
11/252
Les CDN
CDN est l'acronyme de Content delivery network ; c'est un rseau de serveurs qui met disposition des librairies. Il devient
ainsi inutile de prvoir ces librairies sur son propre serveur, il suffit de pointer vers eux. Il y a des avantages utiliser un CDN
:
Libration de ressources et de la bande passante sur son propre serveur ;
Paralllisation des tlchargements (un CDN est sur plusieurs serveurs) ;
Acclration du chargement ;
Diminution de la latence ;
Actualisation automatique des librairies ;
Amlioration du rfrencement
D'aprs certains, l'utilisation d'un CDN, qui impose une requte DNS supplmentaire, ne serait judicieuse que si l'on a beaucoup
de librairies charger. D'autre part si vous modifiez le fichier CSS de Bootstrap pour l'adapter vos besoin, vous ne pourrez plus
bnficier des avantages d'un CDN. Mais si vous voulez profiter de cette possibilit pour Bootstrap, utilisez bootstrapcdn. Vous
pouvez videmment utiliser un CDN galement pour jQuery, par exemple chez Google.
videmment si vous utilisez des CDN, l'installation en est d'autant simplifie. Vous n'avez qu' adapter les appels des librairies :
Code : HTML
<link href="//netdna.bootstrapcdn.com/bootstrap/3.1.0/css/bootstrap.min.css"
rel="stylesheet">
<script
src="//ajax.googleapis.com/ajax/libs/jquery/1.10.2/jquery.min.js"></script>
<script
src="//netdna.bootstrapcdn.com/bootstrap/3.1.0/js/bootstrap.min.js"></script>
Cette ligne concerne uniquement les mobiles. On demande que l'affichage occupe tout l'espace disponible avec une taille de 1,
autrement dit sans zoom. Vous pouvez aller encore plus loin en interdisant le zoom ou en le limitant certaines valeurs.
On trouve ensuite la dclaration du fichier CSS dans sa version minifie :
Code : HTML
<link href="css/bootstrap.min.css" rel="stylesheet">
www.openclassrooms.com
12/252
En fin de page (pour ne pas ralentir le chargement) se trouvent les appels JavaScript (utiles si vous utilisez des plugins jQuery,
comme nous allons le voir dans ce cours) :
Code : HTML
<script src="https://code.jquery.com/jquery.js"></script>
<script src="js/bootstrap.min.js"></script>
Le but de ces appels est de permettre aux navigateurs ne prenant pas en charge HTML5 et les Media Queries CSS3 de le faire ;
ils visent essentiellement IE8. Pour obtenir plus de renseignements sur respond.js vous pouvez aller sur la page GitHub.
Mfiez-vous en particulier si vous utilisez un CDN pour charger vos styles CSS, parce que respond.js utilise AJAX et vous
pouvez buter sur le problme d'accs plusieurs domaines.
Le but du fichier html5shiv est de crer les lments (avec createElement) de type bloc du HTML 5 (header, section,
aside) qui sont ignors par IE8.
En rsum on obtient ce code (en simplifiant les rfrences et en supposant que tous les fichiers sont situs dans un dossier
bootstrap et des sous-dossiers fonctionnels) :
Code : HTML
<!DOCTYPE html>
<html>
<head>
<title>Bootstrap Template</title>
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<link href="bootstrap/css/bootstrap.min.css" rel="stylesheet">
<!-- HTML5 Shim and Respond.js IE8 support of HTML5 elements and media
queries -->
<!-- WARNING: Respond.js doesn't work if you view the page via file://
-->
<!--[if lt IE 9]>
<script
src="https://oss.maxcdn.com/libs/html5shiv/3.7.0/html5shiv.js"></script>
<script
src="https://oss.maxcdn.com/libs/respond.js/1.3.0/respond.min.js"></script>
<![endif]-->
</head>
<body>
<h1>Hello, world!</h1>
<script src="https://code.jquery.com/jquery.js"></script>
<script src="bootstrap/js/bootstrap.min.js"></script>
</body>
www.openclassrooms.com
13/252
</html>
Un template de dmarrage
Vous pouvez trouver galement sur le site 18 templates d'exemple. Les lments ncessaires la comprhension de ces exemples
seront exposs tout au long de ce cours. Voyons toutefois le premier exemple, qui est le plus simple :
Code : HTML
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initialscale=1.0">
<meta name="description" content="">
<meta name="author" content="">
<link rel="shortcut icon" href="../../docsassets/ico/favicon.png">
<title>Starter Template for Bootstrap</title>
<!-- Bootstrap core CSS -->
<link href="../../dist/css/bootstrap.css" rel="stylesheet">
<!-- Custom styles for this template -->
<link href="starter-template.css" rel="stylesheet">
<!-- HTML5 shim and Respond.js IE8 support of HTML5 elements
and media queries -->
<!--[if lt IE 9]>
<script src="../../assets/js/html5shiv.js"></script>
<script src="../../assets/js/respond.min.js"></script>
<![endif]-->
</head>
<body>
<div class="navbar navbar-inverse navbar-fixed-top"
role="navigation">
<div class="container">
<div class="navbar-header">
<button type="button" class="navbar-toggle" datatoggle="collapse" data-target=".navbar-collapse">
<span class="icon-bar"></span>
<span class="icon-bar"></span>
<span class="icon-bar"></span>
</button>
<a class="navbar-brand" href="#">Project name</a>
</div>
<div class="collapse navbar-collapse">
<ul class="nav navbar-nav">
<li class="active"><a href="#">Home</a></li>
<li><a href="#about">About</a></li>
<li><a href="#contact">Contact</a></li>
</ul>
</div><!--/.nav-collapse -->
</div>
</div>
<div class="container">
<div class="starter-template">
<h1>Bootstrap starter template</h1>
www.openclassrooms.com
14/252
On retrouve ce qu'on a vu prcdemment avec la ligne pour les mobiles et l'appel au fichier CSS de Bootstrap. On trouve la
rfrence d'un autre fichier CSS : starter-template.css. Voyons ce que contient ce fichier :
Code : CSS
body {
padding-top: 50px;
}
.starter-template {
padding: 40px 15px;
text-align: center;
}
Nous verrons, lorsque nous parlerons du composant "Barre de navigation" de Bootstrap, qu'il faut parfois rserver un espace en
haut de la page (avec padding-top: 50px) pour viter que le texte du dbut ne se retrouve sous la barre. On trouve aussi
ici la classe starter-template qui se contente de fixer un espace interne et un alignement centr du texte. Cette classe ne
sert que pour le texte de prsentation du template peut tre videmment supprime ou modifie selon votre convenance.
On trouve aussi dans la page une trame de la barre de navigation (je vous explique tout a en dtail dans ce cours) :
Code : HTML
<div class="navbar navbar-inverse navbar-fixed-top"
role="navigation">
<div class="container">
<div class="navbar-header">
<button type="button" class="navbar-toggle" datatoggle="collapse" data-target=".navbar-collapse">
<span class="sr-only">Toggle navigation</span>
<span class="icon-bar"></span>
<span class="icon-bar"></span>
<span class="icon-bar"></span>
</button>
<a class="navbar-brand" href="#">Project name</a>
</div>
<div class="collapse navbar-collapse">
<ul class="nav navbar-nav">
<li class="active"><a href="#">Home</a></li>
<li><a href="#about">About</a></li>
<li><a href="#contact">Contact</a></li>
</ul>
</div><!--/.nav-collapse -->
</div>
</div>
www.openclassrooms.com
15/252
Le contenu de la page est ensuite insr dans une DIV comportant la classe container :
Code : HTML
<div class="container">
<div class="starter-template">
<h1>Bootstrap starter template</h1>
<p class="lead">Use this document as a way to quickly start any
new project.<br> All you get is this text and a mostly barebones
HTML document.</p>
</div>
</div><!-- /.container -->
Nous verrons galement l'intrt de cette classe et son utilisation. Considrez les exemples de templates fournis sur le site de
Bootstrap la fois comme des guides de dmarrage et des aides la comprhension du framework. vitez de les prendre tels
quels sans en comprendre tous les lments. l'issue de ce cours vous aurez tout en main pour le faire
La liste est longue, malheureusement peu de navigateurs actuels sont capables de digrer tout a. On se limite en gnral la
taille de l'affichage, l'orientation et parfois le ratio.
Je ne comprends pas la diffrence entre taille de l'cran et taille de la fentre !
Ah ! Bonne rflexion. Cette distinction n'a aucun sens pour les crans d'ordinateurs mais trouve tout son intrt pour les
smartphones. La taille de l'cran est la surface physique relle alors que la taille de la fentre est celle dont le smartphone
"pense" disposer. Ne me demandez pas pourquoi ce n'est pas la mme valeur, je n'en sais rien. Par exemple pour un iPhone 4 la
surface relle est de 640x960 px et la surface de la fentre est de 320x480 px. Autrement dit un iPhone est pessimiste sur ses
possibilits d'affichage !
Mais ce n'est pas le seul souci ! Le navigateur embarqu sur un smartphone a lui aussi une certaine ide de la surface d'affichage
dont il dispose (le viewport). Par exemple, pour continuer avec l'exemple de l'iPhone 4, qui utilise Safari, ce dernier pense disposer
d'une largeur de 980 px ! Sur ces appareils il est aussi possible d'utiliser le zoom et notre mise en page risque de s'en ressentir. On
peut se demander comment s'en sortir dans tout ce bazar... Heureusement on dispose de la balise META viewport pour fixer
certaines valeurs, voici ce qui est prconis dans le template de Bootstrap :
Code : HTML
<meta name="viewport" content="width=device-width, initialscale=1.0">
www.openclassrooms.com
16/252
@media est une rgle apparue avec le CSS2. Elle permet la base de cibler un media : cran, imprimante, projecteur Cette rgle
est reprise et tendue avec le CSS3. L'expression situe entre parenthses est value, et si elle est vraie , les rgles situes
dans le bloc sont prises en compte.
Ici l'expression est (max-width: 767px), elle se comprend facilement. Elle est vraie si le support de visualisation de la
page a une largeur d'affichage infrieure ou gale 767px.
Oui, mais on n'a pas spcifi de mdia l !
Oui parce qu'on veut prendre en compte tous les mdias existants ! Voici une syntaxe quivalente :
Code : CSS
@media all and (max-width: 767px) { }
On en profite pour voir qu'on peut combiner des lments avec des oprateurs logiques.
Voici une autre expression avec le mme oprateur logique :
Code : CSS
@media (min-width: 768px) and (max-width: 979px) { }
Ici, on veut prendre en compte les rgles du bloc si l'affichage se situe entre 768px et 979px.
Si on veut appliquer des rgles lorsque l'orientation est portrait , voici la syntaxe utiliser :
Code : CSS
@media (orientation: portrait) { }
www.openclassrooms.com
17/252
Comme vous pouvez le voir, la syntaxe est simple, ce qui l'est moins ce sont les rgles dfinir. Mais quand vous utilisez
Bootstrap, vous n'avez pas vous soucier de tout a Si vous explorez le code de Bootstrap, vous trouverez beaucoup
d'utilisation des Media Queries, comme par exemple ici, o est dfinie une rgle de dimension maximale pour la classe
container lorsque l'affichage est d'au moins 992 pixels :
Code : CSS
@media (min-width: 992px) {
.container {
max-width: 970px;
}
Nous verrons plus loin dans ce cours que Bootstrap dfinit quatre types de medias selon la dimension de l'affichage. Voici la
syntaxe utilise :
Code : CSS
/* Extra small devices (phones, up to 480px) */
/* No media query since this is the default in Bootstrap */
/* Small devices (tablets, 768px and up) */
@media (min-width: @screen-tablet) { ... }
/* Medium devices (tablets, 992px and up) */
@media (min-width: @screen-desktop) { ... }
/* Large devices (large desktops, 1200px and up) */
@media (min-width: @screen-large-desktop) { ... }
En rsum :
Bootstrap est un framework CSS qui comporte en plus des plugins jQuery pour composer des pages web.
Bootstrap est un framework rcent qui a connu un dveloppement et une popularit trs rapide.
Bootstrap s'installe facilement en rfrenant quelques fichiers sur son serveur ou mme en passant directement par des
CDN.
Bootstrap propose des templates de dmarrage pour viter de partir avec une page blanche.
Bootstrap intgre des medias queries pour adapter les pages web tous les support de visualisation.
www.openclassrooms.com
18/252
Une grille ?
L'organisation spatiale des pages web est l'une des premires proccupations lorsque l'on cre un site web. Prvoit-on une
bannire ? Faut-il un espace pour un menu gauche ou en haut ? Y aura-t-il des blocs sur un des cts pour recevoir certaines
fonctionnalits comme la connexion ou des infos ? Faut-il prvoir un bas de page ?
Bootstrap ne rpond videmment pas ces questions, mais il peut grandement vous faciliter la tche, avec son systme de grille,
pour obtenir le rsultat que vous souhaitez.
Petite visite guide
Prsentation
Le principe d'une grille
Une grille est tout simplement un dcoupage en cellules de mmes dimensions (voir figure suivante).
Une grille
On peut alors dcider d'organiser du contenu en utilisant pour chaque lment une ou plusieurs cellules, comme la figure
suivante.
La grille de Bootstrap comporte 12 colonnes comme dans l'illustration prcdente. Vous commencez sans doute comprendre
l'utilit de cette organisation.
Terminologie
Une grille est dcoupe en ranges (appeles row, parce que tout est en anglais) et colonnes (col), comme la figure suivante.
La grille de Bootstrap
www.openclassrooms.com
19/252
La grille de Bootstrap n'est pas aussi idale que celle prsente prcdemment. Le dcoupage en colonnes est tout simplement
une division en pourcentage de la largeur de la fentre de visualisation et correspond donc ce qu'on vient de voir. En revanche,
il n'en est pas vraiment de mme pour les ranges. Ces dernires ont la hauteur de leur contenu (voir figure suivante).
Moralit, une range prend la hauteur du plus gros lment qu'elle contient. Puisque la largeur des colonnes est contrainte, le
flux des donnes s'coule verticalement, ce qui est un comportement HTML classique. Il faudra en tenir compte lors de la mise en
page.
Organisation de la grille
Bootstrap est essentiellement un fichier CSS. Il comporte de nombreuses classes que l'on peut utiliser directement dans les
balises HTML.
La premire classe connatre est row, qui reprsente une range. Il faut ensuite dfinir le nombre de colonnes pour chaque
lment en sachant qu'il y en a au maximum 12. Pour dfinir le nombre de colonnes utilises pour chaque lment, on dispose de
quatre batteries de 12 classes :
col-xs-1 ou col-sm-1 ou col-md-1 ou col-lg-1
col-xs-2 ou col-sm-2 ou col-md-2 ou col-lg-2
...
col-xs-12 ou col-sm-12 ou col-md-12 ou col-lg-12
Je vous ai dj dit que Bootstrap est responsive , ce qui veut dire qu'il s'adapte la taille de l'cran. Il permet une visualisation
aussi bien sur un cran gant que sur un smartphone. Mais que se passe-t-il pour les lments d'une page web lorsque la fentre
diminue ou s'largit ? On peut envisager deux hypothses : les lments se redimensionnent en restant positionns, ou alors ils
s'empilent quand la fentre devient plus troite et se positionnent cte cte quand elle s'largit. Voici la figure suivante
l'exemple de la page d'accueil du site OpenClassrooms qui illustre ce phnomne avec trois situations (cran large, cran moyen
et petit cran) :
www.openclassrooms.com
20/252
www.openclassrooms.com
21/252
www.openclassrooms.com
22/252
www.openclassrooms.com
23/252
Empilement ou rduction ?
C'est ici qu'interviennent les 4 sortes de classes vues prcdemment pour les colonnes. Bootstrap considre 4 sortes de mdias :
les petits, genre smartphones (moins de 768 pixels), les moyens, genre tablettes (moins de 992 pixels), les crans moyens (moins
de 1200 pixels) et enfin les gros crans (plus de 1200 pixels). Vous trouverez la figure suivante un tableau pour illustrer les
diffrences de raction selon la catgorie.
Comportement
Petit cran
(smartphone)
cran rduit
(tablette)
cran moyen
(desktop)
Redimensionnement
Redimensionnement
Redimensionnement
Empilage puis
redimensionnement
col-xs-*
col-sm-*
col-md-*
col-lg-*
< 768 px
> 768 px
> 992 px
> 1200 px
Classe
Valeur de
rfrence
Le nom des classes est intuitif : xs pour x-small, sm pour small, md pour medium et lg pour large.
Un petit exemple ?
Pour avoir un lment de 4 colonnes de large accoupl avec un lment de 8 colonnes de large sur un smartphone, on a :
Code : HTML
<div class="row">
<div class="col-xs-4">Largeur 4</div>
<div class="col-xs-8">Largeur 8</div>
</div>
La figure suivante illustre ce code avec l'effet quand on passe sur un cran plus grand.
www.openclassrooms.com
24/252
lment de 8 colonnes
Voici la version tablette :
Code : HTML
<div class="row">
<div class="col-sm-4">Largeur 4</div>
<div class="col-sm-8">Largeur 8</div>
</div>
La figure suivante illustre ce code avec l'effet quand on passe sur un cran plus petit ou plus grand.
de l'cran
Vous remarquez que lors de l'empilage, les colonnes prennent toute la place disponible.
La figure suivante illustre ce code avec l'effet quand on passe sur un cran de plus en plus petit.
www.openclassrooms.com
25/252
La largeur des lments de la grille est calcule en pourcentage selon la fentre de visualisation. Rien n'interdit videmment de
mlanger des classes des 3 catgories pour crer des effets particuliers avec certains lments qui doivent s'empiler et d'autre
pas
Aprs cette petite mise en jambe pour vous prsenter la notion de grille dans Bootstrap, on va passer en revue les possibilits
dans le dtail. Mais pour visualiser tous les exemples qui vont suivre, je vous propose d'ajouter un peu de style, histoire
d'afficher les lments de faon explicite. Pour viter de polluer le code HTML on va mettre ce style spcifique au cours dans un
fichier CSS particulier :
Code : CSS
body {
padding-top: 10px;
}
[class*="col-"], footer {
background-color: lightgreen;
border: 2px solid black;
border-radius: 6px;
line-height: 40px;
text-align: center;
}
Le seul but de ces rgles de style est de faire apparatre nettement les lments l'cran. Une petite marge interne en haut pour le
corps, pour viter que tout soit coll en haut de l'cran. Des bordures (avec des coins arrondis pour l'esthtique) et un fond
color pour distinguer les lments. Une hauteur fixe 40 pixels, parce qu'tant donn que la hauteur des ranges dpend du
contenu, on aurait un rendu htroclite. La figure suivant prsente l'aspect obtenu.
Le rsultat final
La grille en pratique
Le conteneur
La grille de Bootstrap doit tre place dans un conteneur. Bootstrap propose les classes container et container-fluid.
Leur utilisation tait auparavant optionnelle. Il est dsormais clairement indiqu dans la documentation qu'il faut la mettre en
uvre systmatiquement si on veut obtenir des alignements et des espacements corrects. La classe container contient et
centre la grille sur une largeur fixe, qui s'adapte en fonction de la largeur de l'cran. La classe container-fluid permet la
grille d'occuper toute la largeur. Dans les exemples de ce chapitre, je vais utiliser systmatiquement container pour avoir une
visualisation plus facile des lments. Ce conteneur a une largeur maximale selon le mdia concern, comme indiqu au tableau
suivant.
www.openclassrooms.com
26/252
Petit cran (smartphone) Ecran rduit (tablette) Ecran moyen (desktop) Grand cran (desktop)
Conteneur maximum
Automatique
750 px
970 px
1170 px
Valeur de rfrence
< 768 px
>= 768 px
>= 992 px
>= 1200 px
Le centrage du conteneur est fait de faon classique avec de petites marges internes de 15 pixels et les marges droite et gauche
automatiques :
Code : CSS
.container {
padding-right: 15px;
padding-left: 15px;
margin-right: auto;
margin-left: auto;
}
Ce sont les mmes rgles pour la classe container-fluid. Ce qui est ajout pour la classe container est la limite de
largeur spcifie par mdia :
Code : CSS
@media (min-width: 768px) {
.container {
max-width: 750px;
}
...
@media (min-width: 992px) {
.container {
max-width: 970px;
}
...
@media (min-width: 1200px) {
.container {
max-width: 1170px;
}
...
www.openclassrooms.com
27/252
Une seule range avec deux lments qui occupent tout l'espace
Mise en page rapide et simple non ?
Plusieurs ranges
Pour obtenir plusieurs ranges, il suffit d'utiliser plusieurs fois la classe row. Un petit exemple avec 3 ranges pour voir l'effet :
Code : HTML
<!DOCTYPE html>
<html>
<head>
<link href="assets/css/bootstrap.css" rel="stylesheet">
<link href="assets/css/tuto.css" rel="stylesheet">
</head>
<body>
<div class="container">
<div class="row">
<div class="col-lg-1">1 col</div>
<div class="col-lg-2">2 colonnes</div>
<div class="col-lg-3">3 colonnes</div>
<div class="col-lg-6">6 colonnes</div>
</div>
<div class="row">
<div class="col-lg-12">12 colonnes</div>
</div>
<div class="row">
<div class="col-lg-4">4 colonnes</div>
<div class="col-lg-8">8 colonnes</div>
</div>
</div>
</body>
</html>
Trois ranges
www.openclassrooms.com
28/252
Dans ce cas, 6 colonnes reprsentent la moiti de la fentre donc 50%. Voici un exemple :
Code : HTML
<!DOCTYPE html>
<html>
<head>
<link href="assets/css/bootstrap.css" rel="stylesheet">
<link href="assets/css/tuto.css" rel="stylesheet">
</head>
<body>
<div class="container">
<div class="row">
<div class="col-lg-3">3 colonnes</div>
<div class="col-lg-6">6 colonnes</div>
<div class="col-lg-3">3 colonnes</div>
</div>
<div class="row">
<div class="col-lg-3">3 colonnes</div>
<div class="col-lg-offset-6 col-lg-3">3 colonnes</div>
</div>
</div>
</body>
</html>
www.openclassrooms.com
29/252
Imbrication d'lments
On doit souvent imbriquer des lments dans une page web, est-ce possible avec Bootstrap ? Autrement dit inclure un row
dans un col. Eh bien, on va tester a tout de suite :
Code : HTML
<!DOCTYPE html>
<html>
<head>
<link href="assets/css/bootstrap.css" rel="stylesheet">
<link href="assets/css/tuto.css" rel="stylesheet">
</head>
<body>
<div class="container">
<div class="row">
<div class="col-lg-8">8 colonnes
<div class="row">
<div class="col-lg-3">3 colonnes</div>
<div class="col-lg-6">6 colonnes</div>
<div class="col-lg-3">3 colonnes</div>
</div>
</div>
</div>
</div>
</body>
</html>
www.openclassrooms.com
30/252
<div class="row">
<div class="col-md-8">Second niveau avec 8 colonnes
<div class="row">
<div class="col-md-4">Troisime niveau avec 4 colonnes</div>
<div class="col-md-6 col-md-offset-2">Troisime niveau avec
6 colonnes
<div class="row">
<div class="col-md-3 col-md-offset-1">Quatrime niveau
avec 3 colonnes</div>
<div class="col-md-5 col-md-offset-1">Quatrime niveau
avec 5 colonnes</div>
</div>
</div>
</div>
</div>
<div class="col-md-4">Second niveau avec 4 colonnes</div>
</div>
</div>
</div>
Une
www.openclassrooms.com
31/252
Un petit TP
Pour vous entraner, je vous propose d'obtenir le rsultat visible la figure suivante.
Mise en page
L'intrt principal d'une grille est de raliser une mise en page. Nous allons voir quelques exemples pour structurer correctement
une page.
Premier cas
www.openclassrooms.com
32/252
Commenons par quelque chose de simple avec une en-tte, un menu gauche, une section droite et un pied de page :
Code : HTML
<!DOCTYPE html>
<html>
<head>
<link href="assets/css/bootstrap.css" rel="stylesheet">
<link href="assets/css/tuto.css" rel="stylesheet">
</head>
<body>
<div class="container">
<header class="row">
<div class="col-lg-12">
Entete
</div>
</header>
<div class="row">
<nav class="col-lg-2">
Menu
</nav>
<section class="col-lg-10">
Section
</section>
</div>
<footer class="row">
Pied de page
</footer>
</div>
</body>
</html>
www.openclassrooms.com
33/252
On obtient effectivement la mme mise en page, mais les classes col-* ont un padding droite et gauche de 15 pixels, et si on
n'utilise pas la classe col-lg-12, on va avoir une incohrence au niveau de l'affichage du contenu.
Second cas
Considrons maintenant un cas un peu plus riche :
Code : HTML
<!DOCTYPE html>
<html>
<head>
<link href="assets/css/bootstrap.css" rel="stylesheet">
<link href="assets/css/tuto.css" rel="stylesheet">
</head>
<body>
<div class="container">
<header class="row">
<div class="col-sm-12">
Entete
</div>
</header>
<div class="row">
<nav class="col-sm-2">
Menu
</nav>
<section class="col-sm-10">
Section
<div class="row">
<article class="col-md-10">
Article
</article>
<aside class="col-md-2">
Aside
</aside>
</div>
</section>
</div>
<footer class="row">
<div class="col-sm-12">
Pied de page
</div>
</footer>
</div>
</body>
</html>
www.openclassrooms.com
34/252
Rsultat sur un
smartphone
Troisime cas
Enrichissons encore la mise en page :
Code : HTML
www.openclassrooms.com
35/252
<!DOCTYPE html>
<html>
<head>
<link href="assets/css/bootstrap.css" rel="stylesheet">
<link href="assets/css/tuto.css" rel="stylesheet">
<style type="text/css">
/* Style pour l'exemple*/
article.col-sm-10, nav.col-sm-2 {
line-height: 100px;
}
</style>
</head>
<body>
<div class="container">
<header class="row">
<div class="col-lg-12">
Entete
</div>
</header>
<div class="row">
<nav class="col-sm-2">
Menu
</nav>
<section class="col-sm-10">
Section
<div class="row">
<article class="col-sm-10">
Article
</article>
<div class="col-sm-2">
<div class="row">
<aside>
Aside 1
</aside>
<aside>
Aside 2
</aside>
</div>
</div>
</div>
</section>
</div>
<footer class="row">
<div class="col-lg-12">
Pied de page
</div>
</footer>
</div>
</body>
</html>
www.openclassrooms.com
36/252
Rsultat la rduction
Pourquoi l'en-tte et le pied de page ont maintenant la classe col-lg-12, alors que dans l'exemple prcdent on avait
col-sm-12 ?
Comme la largeur est de 12 colonnes, tout ce qui nous intresse est le centrage, que ces 2 classes possdent en commun, sans
influence du mdia utilis. On peut donc utiliser indiffremment ces 2 classes dans notre cas.
Quatrime cas
Terminons avec un cas plus fourni :
Code : HTML
<!DOCTYPE html>
<html>
<head>
www.openclassrooms.com
37/252
www.openclassrooms.com
38/252
Article
</article>
<article class="col-sm-6">
Article
</article>
<article class="col-sm-6">
Article
</article>
<article class="col-sm-6">
Article
</article>
</div>
</section>
</div>
<footer class="row">
<div class="col-lg-12">
Pied de page
</div>
</footer>
</div>
</body>
</html>
www.openclassrooms.com
39/252
deuxime section pour tenir compte de la largeur du menu se fait tout simplement avec une classe d'offset. En ce qui concerne le
choix des classes pour les colonnes je me suis arrang pour que la premire section garde sa structure quand on rtrcit.
Vous avez pu voir avec ces quelques exemples qu'on peut obtenir facilement une structure de page aussi complexe que l'on veut.
Le point le plus dlicat demeure le choix des classes pour les colonnes en fonction du rsultat que l'on dsire selon les mdias
utiliss. Dans tous les cas, il faut tester les diffrents formats parce que le rendu ne donne pas forcment du premier coup ce que
l'on avait prvu. Si vous n'y parvenez pas avec une seule classe, alors la solution est d'en combiner plusieurs, c'est ce que nous
allons voir bientt
En rsum :
Bootstrap propose un grille pour positionner tous les lments des pages web.
La grille est versatile et permet de nombreuses combinaisons comme des inclusions, des sauts de colonnes.
La grille rend possible galement une adaptation selon les dimensions du support de visualisation en rorganisant les
lments ou en masquant certains.
www.openclassrooms.com
40/252
Un peu de pratique
Nous avons vu en dtail les possibilits de la grille de Bootstrap. Nous avons vu galement comment faire des mises en pages
adaptes diffrents types de supports. Il est temps maintenant de mettre en application toutes ces connaissances avec des
applications pratiques.
src="images/t1.jpg"
src="images/t2.jpg"
src="images/t3.jpg"
src="images/t4.jpg"
src="images/t5.jpg"
src="images/t6.jpg"
src="images/t7.jpg"
src="images/t8.jpg"
src="images/t9.jpg"
src="images/t10.jpg"
src="images/t11.jpg"
src="images/t12.jpg"
</body>
</html>
Le rendu sur grand cran est parfait avec 6 photos sur la largeur (voir figure suivante).
www.openclassrooms.com
41/252
www.openclassrooms.com
42/252
Et voici la figure suivante le rsultat sur cran moyen (classes col-sm-3 actives).
www.openclassrooms.com
src="images/t1.jpg"
src="images/t2.jpg"
src="images/t3.jpg"
src="images/t4.jpg"
src="images/t5.jpg"
src="images/t6.jpg"
src="images/t7.jpg"
src="images/t8.jpg"
src="images/t9.jpg"
43/252
J'ai donc obtenu facilement une adaptation de la prsentation de mes photos en fonction du support utilis pour les visualiser.
Page d'exemple
Construisons maintenant une page complte qui intgre la partie que nous venons de traiter :
Code : HTML
<!DOCTYPE HTML>
www.openclassrooms.com
44/252
<html>
<head>
<meta charset="utf-8">
<link href="assets/css/bootstrap.css" rel="stylesheet">
<style type="text/css">
[class*="col"] { margin-bottom: 20px; }
img { width: 100%; }
</style>
</head>
<body>
<div class="container">
<header class="page-header">
<h1>Mon amour pour les tigres</h1>
</header>
<section class="row">
<div class="col-lg-12">
<p>
Je suis passionn par les <strong>tigres</strong> depuis
trs longtemps. Ce site a t construit en <em>hommage ces
merveilleux flins...</em><br>
Je fais partie de la <abbr title="Socit des Amoureux
des Tigres">SAT</abbr> qui a pour but de faire connatre ces
splendides animaux.
</p>
<p>Voici ce qu'en dit le wikipedia :</p>
<blockquote>
Le Tigre (Panthera tigris) est un mammifre carnivore de
la famille des flids (Felidae) du genre Panthera.
Aisment reconnaissable sa fourrure rousse raye de noir, il est
le plus grand flin sauvage et l'un des plus grands carnivores du
monde.
L'espce est divise en neuf sous-espces possdant des diffrences
mineures en termes de taille ou de comportement. Superprdateur,
il chasse principalement les cerfs et les sangliers, bien qu'il
puisse s'attaquer des proies de taille plus importante comme les
buffles.
Jusqu'au XIXe sicle, le Tigre tait rput mangeur d'homme. La
structure sociale des tigres en fait un animal solitaire ; le mle
possde
un territoire qui englobe les domaines de plusieurs femelles et ne
participe pas l'ducation des petits.<br>
<small class="pull-right">Wikipedia</small><br>
</blockquote>
</div>
</section>
<section class="row">
<div class="col-xs-4 col-sm-3 col-md-2"><img
src="images/t1.jpg" alt="Tigre"></div>
<div class="col-xs-4 col-sm-3 col-md-2"><img
src="images/t2.jpg" alt="Tigre"></div>
<div class="col-xs-4 col-sm-3 col-md-2"><img
src="images/t3.jpg" alt="Tigre"></div>
<div class="col-xs-4 col-sm-3 col-md-2"><img
src="images/t4.jpg" alt="Tigre"></div>
<div class="col-xs-4 col-sm-3 col-md-2"><img
src="images/t5.jpg" alt="Tigre"></div>
<div class="col-xs-4 col-sm-3 col-md-2"><img
src="images/t6.jpg" alt="Tigre"></div>
<div class="col-xs-4 col-sm-3 col-md-2"><img
src="images/t7.jpg" alt="Tigre"></div>
<div class="col-xs-4 col-sm-3 col-md-2"><img
src="images/t8.jpg" alt="Tigre"></div>
<div class="col-xs-4 col-sm-3 col-md-2"><img
src="images/t9.jpg" alt="Tigre"></div>
<div class="col-xs-4 col-sm-3 col-md-2"><img
src="images/t10.jpg" alt="Tigre"></div>
<div class="col-xs-4 col-sm-3 col-md-2"><img
src="images/t11.jpg" alt="Tigre"></div>
www.openclassrooms.com
45/252
www.openclassrooms.com
46/252
La page d'exemple
Une simple composition avec un en-tte et 3 ranges. L'en-tte ne comporte que le titre avec une classe un peu particulire que
nous allons voir plus loin. La premire range comporte un seul lment. La deuxime en revanche en comporte 12 et correspond
ce que nous avons vu prcdemment. Voici la figure suivante une visualisation du dcoupage.
www.openclassrooms.com
47/252
La classe page-header
Cette classe fixe quelques valeurs :
Code : CSS - classe page-header
.page-header {
padding-bottom: 9px;
margin: 40px 0 20px;
border-bottom: 1px solid #eee;
}
Une marge haute de 40 pixels et basse de 20 pixels. Une ligne infrieure de 1 pixel de couleur grise, avec un cart de 9 pixels entre
le contenu et cette ligne. Donc une approche sympathique pour un en-tte de page. Il suffit d'y placer un titre comme je l'ai fait ici
:
Code : HTML
<header class="page-header">
<h1>Mon amour pour les tigres</h1>
</header>
La classe page-header
www.openclassrooms.com
48/252
Observez la figure suivante la qualit du popup lorsque l'on passe le curseur au-dessus de l'abrviation SAT.
Une citation
Le chapitre suivant comporte une citation avec utilisation de la balise blockquote :
Code : HTML
<blockquote>Le Tigre (Panthera tigris) est un mammifre
carnivore...<br>
<small class="pull-right">Wikipedia</small><br>
</blockquote>
Une adresse
www.openclassrooms.com
49/252
Dans la partie infrieure gauche figure une adresse. j'ai simplement utilis la balise <address> :
Code : HTML
<address>
<p>Vous pouvez me contacter cette adresse :</p>
<p><strong>Tigrou Alfred</strong><br>
Alle des fauves<br>
28645 Flins-sur-Loire<br>
</address>
Exercice 1
Le but est d'obtenir une mise en page pour grand cran identique celle de la figure suivante.
www.openclassrooms.com
50/252
Rsultat obtenir
Rflchissez un peu avant de regarder la solution.
Code : HTML
<!DOCTYPE html>
<html>
<head>
<link href="assets/css/bootstrap.css" rel="stylesheet">
<link href="assets/css/tuto.css" rel="stylesheet">
<!-- Un peu de style pour la visualisation -->
<style type="text/css">
.col-lg-8 { line-height: 200px; }
.col-lg-12 { line-height: 80px; }
</style>
</head>
<body>
<div class="container">
<header class="row">
<div class="col-lg-12">
Entete
</div>
</header>
<div class="row">
<div class="col-lg-2">
<div class="row">
<aside class="col-lg-12">
Aside
</aside>
<aside class="col-lg-12">
Aside
</aside>
</div>
</div>
<section class="col-lg-8">
Section
</section>
<div class="col-lg-2">
<div class="row">
<aside class="col-lg-12">
Aside
</aside>
<aside class="col-lg-12">
www.openclassrooms.com
51/252
Aside
</aside>
</div>
</div>
</div>
<footer class="row">
<div class="col-lg-12">
Pied de page
</div>
</footer>
</div>
</body>
</html>
Maintenant la question se poser c'est : comment va ragir cette structure quand on va rduire la fentre ? Comme j'ai mis des
classes col-lg-*, tout va s'empiler sous 1200 pixels. Si cet effet me convient, c'est parfait. Mais supposons que, sur tablett,e
je veuille une structure similaire celle de la figure suivante.
www.openclassrooms.com
52/252
J'ai remplac les classes col-lg-* par des classes col-md-* pour avoir un comportement de base pour crans moyens et
grands. J'ai ensuite introduit des classes col-sm-* pour avoir le comportement dsir sur tablette. En revanche, la ligne 38
mrite quelques commentaires particuliers. Pour le mdia tablette, vous avez des lments flottants qui se succdent avec des
comportements qui ne sont pas forcment ceux que l'on souhaite. La figure suivante vous montre le rsultat sans cette ligne de
code.
www.openclassrooms.com
53/252
Autrement dit, on rinitialise les lments flottants qui suivent pour les ramener dans le flux normal, et viter qu'ils viennent
recouvrir les lments prcdents. Nous allons voir maintenant la classe visible-sm
www.openclassrooms.com
54/252
smartphone
www.openclassrooms.com
55/252
www.openclassrooms.com
56/252
Exercice 2
Voyons maintenant un autre cas. Je veux obtenir le rsultat visible la figure suivante.
Rsultat obtenir
Donc une entte qui prend toute la largeur de l'cran, une navigation gauche, deux sections accoles et un pied de page, le tout
pour grand cran. Voici une solution :
Code : HTML
<!DOCTYPE html>
<html>
<head>
<link href="assets/css/bootstrap.css" rel="stylesheet">
<link href="assets/css/tuto.css" rel="stylesheet">
<!-- Un peu de style pour la visualisation -->
<style type="text/css">
.col-lg-2 { line-height: 100px; }
.col-lg-5 { line-height: 200px; }
.col-lg-12 { line-height: 80px; }
</style>
</head>
<body>
<header>
<div class="col-lg-12">
Entete
</div>
</header>
<div class="container">
<div class="row">
<nav class="col-lg-2">
Navigation
</nav>
<section class="col-lg-5">
Section
</section>
<section class="col-lg-5">
Section
</section>
</div>
<footer class="row">
www.openclassrooms.com
57/252
<div class="col-lg-12">
Pied de page
</div>
</footer>
</div>
</body>
</html>
Maintenant je me dis que mon application serait bien aussi sur cran moyen. Si je ne fais rien, j'obtiens le rsultat visible la
figure suivante.
Rsultat sur
cran moyen
a ne me plat pas trop, j'aimerais que les 2 sections restent accoles, comme la figure suivante.
www.openclassrooms.com
58/252
Rsultat dsir
www.openclassrooms.com
59/252
<footer class="row">
<div class="col-lg-12">
Pied de page
</div>
</footer>
</div>
</body>
</html>
Aprs rflexion, je me dis que mon application irait bien aussi sur tablette, l'empilement des lments me convient, mais j'aimerais
avoir une en-tte diffrente. Aprs une nouvelle rflexion, j'en veux aussi une diffrente sur smartphone. Avec les classes
responsives vues prcdemment, c'est facile raliser :
Code : HTML
<!DOCTYPE html>
<html>
<head>
<link href="assets/css/bootstrap.css" rel="stylesheet">
<link href="assets/css/tuto.css" rel="stylesheet">
<!-- Un peu de style pour la visualisation -->
<style type="text/css">
.col-lg-2 { line-height: 100px; }
.col-lg-5 { line-height: 200px; }
.col-lg-12 { line-height: 80px; }
</style>
</head>
<body>
<header>
<div class="visible-lg col-lg-12">
Entete large
</div>
<div class="visible-md col-sm-12">
Entete moyenne
</div>
<div class="visible-sm col-12">
Entete tablette
</div>
<div class="visible-xs col-12">
Entete smartphone
</div>
</header>
<div class="container">
<div class="row">
<nav class="col-md-12 col-lg-2">
Navigation
</nav>
<section class="col-md-6 col-lg-5">
Section
</section>
<section class="col-md-6 col-lg-5">
Section
</section>
</div>
<footer class="row">
www.openclassrooms.com
60/252
<div class="col-lg-12">
Pied de page
</div>
</footer>
</div>
</body>
</html>
Tester
En rsum :
Il est possible avec la grille de rgler trs finement le rendu des pages selon les supports de visualisation.
La plupart des lments typographiques du HTML trouvent automatiquement une mise en forme esthtique avec
Bootstrap.
On a vu sur des exemples pratiques qu'il est facile de faire des mises en page mme complexes sans trop d'effort.
www.openclassrooms.com
61/252
Elments de base
Un page web contient du texte et des images, mais aussi un certain nombre d'lments trs frquents : listes, tableaux,
formulaires, icnes, boutons. Crer une harmonie dans la prsentation des tous ces lments n'est pas une tche aise.
Nous allons voir comment Bootstrap permet de crer un rendu visuel cohrent pour que tous ces lments cohabitent de faon
esthtique.
www.openclassrooms.com
62/252
<small class="pull-right">Wikipedia</small><br>
</blockquote>
</div>
</section>
<section class="row">
<div class="col-xs-4 col-sm-3 col-md-2"><img
src="images/t1.jpg" alt="Tigre"></div>
<div class="col-xs-4 col-sm-3 col-md-2"><img
src="images/t2.jpg" alt="Tigre"></div>
<div class="col-xs-4 col-sm-3 col-md-2"><img
src="images/t3.jpg" alt="Tigre"></div>
<div class="col-xs-4 col-sm-3 col-md-2"><img
src="images/t4.jpg" alt="Tigre"></div>
<div class="col-xs-4 col-sm-3 col-md-2"><img
src="images/t5.jpg" alt="Tigre"></div>
<div class="col-xs-4 col-sm-3 col-md-2"><img
src="images/t6.jpg" alt="Tigre"></div>
<div class="col-xs-4 col-sm-3 col-md-2"><img
src="images/t7.jpg" alt="Tigre"></div>
<div class="col-xs-4 col-sm-3 col-md-2"><img
src="images/t8.jpg" alt="Tigre"></div>
<div class="col-xs-4 col-sm-3 col-md-2"><img
src="images/t9.jpg" alt="Tigre"></div>
<div class="col-xs-4 col-sm-3 col-md-2"><img
src="images/t10.jpg" alt="Tigre"></div>
<div class="col-xs-4 col-sm-3 col-md-2"><img
src="images/t11.jpg" alt="Tigre"></div>
<div class="col-xs-4 col-sm-3 col-md-2"><img
src="images/t12.jpg" alt="Tigre"></div>
</section>
<div class="row">
<section class="col-sm-4">
<h5>Voici les sous-espces des tigres :</h5>
<br>
<ul>
<li>Tigre de Sibrie</li>
<li>Tigre de Chine mridionale</li>
<li>Tigre de Bali</li>
<li>Tigre de d'Indochine</li>
<li>Tigre de Malaisie</li>
<li>Tigre de Java</li>
<li>Tigre de Sumatra</li>
<li>Tigre du Bengale</li>
<li>Tigre de la Caspienne</li>
</ul>
</section>
<section class="col-sm-8">
<img src="images/photo-tigre.jpg" alt="Tigre">
</section>
</div>
<div class="row">
<section class="col-sm-8 table-responsive">
<table class="table table-bordered table-striped tablecondensed">
<caption>
<h4>Les menaces pour les tigres</h4>
</caption>
<thead>
<tr>
<th>Lieu</th>
<th>Menace</th>
</tr>
</thead>
<tbody>
<tr>
<td>Grand Mekong</td>
<td>Demande croissante de certaines parties de
lanimal pour la mdecine chinoise traditionnelle
et fragmentation des habitats du fait du dveloppement non durable
dinfrastructures</td>
www.openclassrooms.com
papiers</td>
63/252
</tr>
<tr>
<td>le de Sumatra</td>
<td>Production dhuile de palme et de ptes
</tr>
<tr>
<td>Indonsie et Malaisie</td>
<td>Pte papier, lhuile de palme et le
caoutchouc</td>
</tr>
<tr>
<td>tats-Unis</td>
<td>Les tigres captifs reprsentent un danger pour
les tigres sauvages</td>
</tr>
<tr>
<td>Europe</td>
<td>Gros apptit pour lhuile de palme</td>
</tr>
<tr>
<td>Npal</td>
<td>Commerce illgal de produits drivs de
tigres</td>
</tr>
</tbody>
</table>
</section>
<section class="col-sm-4">
<address>
<p>Vous pouvez me contacter cette adresse :</p>
<strong>Tigrou Alfred</strong><br>
Alle des fauves<br>
28645 Flins-sur-Loire<br>
</address>
</section>
</div>
</div>
</body>
</html>
www.openclassrooms.com
64/252
La
page d'exemple
Tester
La prsentation s'est enrichie d'une range et de nouveaux lments. Voici la figure suivante une visualisation du dcoupage.
www.openclassrooms.com
65/252
Les listes
Style de base
Bootstrap propose une mise en forme lgante des listes. J'en ai prvu une sur la page :
Code : HTML
<h5>Voici les sous-espces des tigres :</h5>
<br>
<ul>
<li>Tigre de Sibrie</li>
<li>Tigre de Chine mridionale</li>
<li>Tigre de Bali</li>
<li>Tigre de d'Indochine</li>
<li>Tigre de Malaisie</li>
<li>Tigre de Java</li>
<li>Tigre de Sumatra</li>
<li>Tigre du Bengale</li>
<li>Tigre de la Caspienne</li>
</ul>
www.openclassrooms.com
66/252
Une liste
Sans style
Il existe la classe list-unstyled, appliquer la balise <ul>, ce qui donne donc <ul class="list-unstyled">,
qui supprime les puces. Voici la figure suivante le rsultat sur la liste de la page.
En ligne
Il peut arriver de vouloir une liste en ligne. Bon je n'appelle plus a une liste mais pourquoi pas ? Il suffit d'utiliser la classe
list-inline, donc <ul class="list-inline">. Voil la figure suivante ce que a donne sur la page.
Descriptions
Classique
Les descriptions sont aussi bien traites par Bootstrap. Voici un exemple :
Code : HTML
<dl>
<dt>Tigre</dt>
<dd>Animal d'Asie, grand et puissant, au pelage jaune ray de
noir, de la famille des flins</dd>
www.openclassrooms.com
67/252
<dt>Panthre</dt>
<dd>Flid d'Afrique et d'Asie au pelage jaune tchet de
noir</dd>
<dt>Gupard</dt>
<dd>Flin carnassier rapide d'Asie et d'Afrique au pelage tchet
de noir</dd>
<dt>Chat</dt>
<dd>Petit flin, au pelage soyeux, en gnral domestique</dd>
</dl>
Une description
verticale
Horizontal
Pour obtenir une prsentation horizontale, il suffit d'utiliser la classe dl-horizontal, ce qui donne <dl class="dlhorizontal">. Voici la figure suivante l'effet sur la mme liste.
Les tableaux
Plusieurs mises en forme sont prvues pour les tableaux, j'en ai retenu une pour le tableau de la page :
Code : HTML
<table class="table table-bordered table-striped table-condensed">
<caption>
<h4>Les menaces pour les tigres</h4>
</caption>
<thead>
<tr>
<th>Lieu</th>
<th>Menace</th>
</tr>
</thead>
<tbody>
<tr>
<td>Grand Mekong</td>
<td>Demande croissante de certaines parties de lanimal
www.openclassrooms.com
68/252
Un
tableau stylis
On va analyser les classes utilises
Classe table
C'est la classe de base pour les tableaux, elle fixe quelques styles et cre des lignes de sparation horizontales :
Code : CSS
<table class="table">
www.openclassrooms.com
69/252
Effet
de la classe table
Classe table-bordered
C'est la classe pour avoir de jolies bordures avec des coins arrondis :
Code : CSS
<table class="table table-bordered">
Classe table-striped
Cette classe ajoute un fond avec un gris trs lger pour les lignes impaires (1, 3, ) :
Code : CSS
<table class="table table-bordered table-striped">
Je ne vous mets pas d'illustration parce que franchement, le gris est si lger qu'on ne voit rien. Quand je regarde la couleur
utilise, je trouve la valeur #F9F9F9, ce qui est effectivement un gris trs trs lger Vous pouvez remarquer aussi que, lorsqu'on
passe le curseur au-dessus du tableau, la couleur de fond de la ligne correspondante change avec la valeur #F5F5F5, ce qui est
dj un gris assez lger. Je pense que des valeurs un peu plus marques auraient t souhaitables. Mais rien n'empche de les
changer ! Pour la page d'exemple, je suis pass par une autre approche qui apparatra dans un chapitre ultrieur.
Classe table-condensed
Cette classe permet de condenser le tableau pour qu'il occupe moins de place verticale :
Code : CSS
<table class="table table-bordered table-striped table-condensed">
www.openclassrooms.com
70/252
Effet
de la classe table-condensed
Vous avez remarqu qu'on peut cumuler l'application des classes sans problme, comme je l'ai fait dans cette dmonstration
progressive.
En englobant le tableau avec la classe table-responsive, on fait apparatre une barre de dfilement (voir figure suivante).
Code : HTML
<section class="col-sm-8 table-responsive">
<table class="table table-bordered table-striped table-condensed">
www.openclassrooms.com
71/252
table-responsive
www.openclassrooms.com
72/252
Formulaires
Formulaire de base
Si on n'utilise aucune classe particulire dans une balise <form>, on obtient une disposition en ligne. Prenons l'exemple d'un
formulaire simple :
Code : HTML
<form>
<legend>Lgende</legend>
Text : <input type="text">
Textarea : <textarea id="textarea"></textarea>
Select :
<select>
<option>Option 1</option>
<option>Option 2</option>
<option>Option 3</option>
</select>
<button>Envoyer</button>
</form>
www.openclassrooms.com
73/252
Par dfaut les contrles s'alignent horizontalement. J'aimerais que les contrles occupent toute la largeur disponible. Il faut
utiliser la classe form-control pour obtenir cet effet (voir figure suivante) :
Code : HTML
<form class="col-lg-6">
<legend>Lgende</legend>
Text : <input type="text" class="form-control">
Textarea : <textarea id="textarea" class="form-control"></textarea>
Select :
<select class="form-control">
<option>Option 1</option>
<option>Option 2</option>
<option>Option 3</option>
</select>
<button>Envoyer</button>
</form>
Effet de la classe
form-control
On se rend compte que cette classe ne se contente pas d'largir les contrles, elle procde aussi une mise en forme esthtique.
Arrangeons encore ce formulaire en utilisant des balises <label> et cartons un peu le bouton :
Code : HTML
<form class="col-lg-6">
<legend>Lgende</legend>
<label for="texte">Text : </label>
<input id="text" type="text" class="form-control">
<label for="textarea">Textarea : </label>
<textarea id="textarea" type="textarea" class="formcontrol"></textarea>
<label for="select">Select : </label>
<select id="select" class="form-control">
<option>Option 1</option>
<option>Option 2</option>
<option>Option 3</option>
</select>
<br>
<button>Envoyer</button>
</form>
www.openclassrooms.com
74/252
Ajout de balises
<label>
On a gagn en esthtique. On peut encore amliorer l'espacement en utilisant la classe form-group :
Code : HTML
<form class="col-lg-6">
<legend>Lgende</legend>
<div class="form-group">
<label for="texte">Text : </label>
<input id="text" type="text" class="form-control">
</div>
<div class="form-group">
<label for="textarea">Textarea : </label>
<textarea id="textarea" type="textarea" class="formcontrol"></textarea>
</div>
<div class="form-group">
<label for="select">Select : </label>
<select id="select" class="form-control">
<option>Option 1</option>
<option>Option 2</option>
<option>Option 3</option>
</select>
</div>
<button>Envoyer</button>
</form>
www.openclassrooms.com
75/252
Effet de la classe
form-group
Le formulaire est bien ar et j'ai pu enlever la balise <br> qui me servait espacer le bouton.
La page d'exemple
Voici la troisime version de notre page consacre aux tigres :
Code : HTML
<!DOCTYPE HTML>
<html>
<head>
<meta charset="utf-8">
<link href="assets/css/bootstrap.css" rel="stylesheet">
<style type="text/css">
body { background-color:#DDD; }
[class*="col"] { margin-bottom: 20px; }
img { width: 100%; }
.well {
background-color:#CCC;
padding: 20px;
}
</style>
</head>
<body>
<div class="container">
<header class="page-header">
<h1>Mon amour pour les tigres</h1>
</header>
<section class="row">
<div class="col-lg-12">
<p>
Je suis passionn par les <strong>tigres</strong> depuis
trs longtemps. Ce site a t construit en <em>hommage ces
merveilleux flins...</em><br>
Je fais partie de la <abbr title="Socit des Amoureux
des Tigres">SAT</abbr> qui a pour but de faire connatre ces
splendides animaux.
</p>
www.openclassrooms.com
76/252
www.openclassrooms.com
77/252
<caption>
<h4>Les menaces pour les tigres</h4>
</caption>
<thead>
<tr>
<th>Lieu</th>
<th>Menace</th>
</tr>
</thead>
<tbody>
<tr>
<td>Grand Mekong</td>
<td>Demande croissante de certaines parties de
lanimal pour la mdecine chinoise traditionnelle et fragmentation
des habitats
du fait du dveloppement non durable dinfrastructures</td>
</tr>
<tr>
<td>le de Sumatra</td>
<td>Production dhuile de palme et de ptes
papiers</td>
</tr>
<tr>
<td>Indonsie et Malaisie</td>
<td>Pte papier, lhuile de palme et le
caoutchouc</td>
</tr>
<tr>
<td>tats-Unis</td>
<td>Les tigres captifs reprsentent un danger pour
les tigres sauvages</td>
</tr>
<tr>
<td>Europe</td>
<td>Gros apptit pour lhuile de palme</td>
</tr>
<tr>
<td>Npal</td>
<td>Commerce illgal de produits drivs de
tigres</td>
</tr>
</tbody>
</table>
</section>
</div>
<div class="row">
<section class="col-sm-8">
<form class="well">
<legend>Si vous voulez me laisser un message</legend>
<h4>Comment m'avez-vous trouv ?</h4>
<fieldset>
<label for="ami" class="radio">
<input type="radio" name="origine" value="ami"
id="ami">
Par un ami
</label>
<label for="web" class="radio">
<input type="radio" name="origine" value="web"
id="web">
Sur le web
</label>
<label for="hasard" class="radio">
<input type="radio" name="origine" value="hasard"
id="hasard">
Par hasard
</label>
<label for="autre" class="radio">
<input type="radio" name="origine" value="autre"
id="autre">
Autre...
www.openclassrooms.com
78/252
</label>
<label for="textarea">Votre message :</label>
<textarea id="textarea" rows="4" class="formcontrol"></textarea>
<p class="help-block">Vous pouvez agrandir la
fentre</p>
<button class="btn btn-primary"
type="submit">Envoyer</button>
</fieldset>
</form>
</section>
<section class="col-sm-4">
<address>
<p>Vous pouvez me contacter cette adresse :</p>
<strong>Tigrou Alfred</strong><br>
Alle des fauves<br>
28645 Flins-sur-Loire<br>
</address>
</section>
</div>
</div>
</body>
</html>
Pour cette troisime version, j'ai ajout un peu de style et un formulaire, ce qui donne les figures suivantes.
www.openclassrooms.com
79/252
www.openclassrooms.com
80/252
Tester
Au niveau du style, juste une petite touche :
Code : CSS
body { background-color:#DDD; }
[class*="col"] { margin-bottom: 20px; }
img { width: 100%; }
.well {
background-color:#CCC;
padding: 20px;
}
Le fond d'un lger gris met bien en valeur le texte et les photos. Quant au formulaire (concern par la classe well), c'est l'objet
de ce chapitre
www.openclassrooms.com
81/252
On peut ajuster la dimension en ajoutant la classe well-lg pour agrandir ou well-sm pour rduire. J'ai aussi peaufin en
ajoutant des rgles de style la page :
Code : CSS
<style type="text/css">
body { background-color:#DDD; }
[class*="col"] { margin-bottom: 20px; }
img { width: 100%; }
.well {
background-color:#CCC;
padding: 20px;
}
</style>
La dernire touche a consist amliorer l'aspect du bouton avec 2 classes que nous verrons plus loin dans ce cours :
Code : HTML
<button class="btn btn-primary" type="submit">Envoyer</button>
www.openclassrooms.com
82/252
Il ne reste plus qu' rendre plus discret le texte d'aide situ au-dessous de la zone de texte, ce que nous accomplissons avec la
classe help-block (voir figure suivante) :
Code : HTML
<p class="help-block">Vous pouvez agrandir la fentre</p>
Formulaire horizontal
Pour raliser un formulaire horizontal, nous allons utiliser tout ce que nous venons de voir en exploitant la classe formhorizontal et une grille pour positionner les tiquettes et les contrles :
Code : HTML
<form class="form-horizontal col-lg-6">
<div class="form-group">
<legend>Lgende</legend>
</div>
<div class="row">
<div class="form-group">
<label for="text" class="col-lg-2">Text : </label>
<div class="col-lg-10">
<input type="text" class="form-control" id="text">
</div>
</div>
</div>
<div class="row">
<div class="form-group">
<label for="textarea" class="col-lg-2">Textarea : </label>
<div class="col-lg-10">
<input type="textarea" class="form-control" id="textarea">
</div>
</div>
</div>
<div class="row">
<div class="form-group">
<label for="select" class="col-lg-2">Select: </label>
<div class="col-lg-10">
<select id="select" class="form-control" >
<option>Option 1</option>
<option>Option 2</option>
<option>Option 3</option>
</select>
</div>
</div>
</div>
<div class="form-group">
www.openclassrooms.com
83/252
Un formulaire
horizontal
Les tiquettes disposent de 2 colonnes et les champs de saisie de 10 colonnes. On peut voir aussi l'utilisation de la classe
pull-right pour envoyer le bouton vers la droite. Voici la figure suivante une visualisation du dcoupage.
Formulaire en ligne
Il arrive qu'on ait besoin d'avoir un formulaire dispos sur une ligne, par exemple dans une barre de navigation. Faisons un essai
avec un formulaire lmentaire :
Code : HTML
<form>
<input type="text">
<input type="checkbox"> Se rappeler de moi
<button>Envoyer</button>
</form>
www.openclassrooms.com
84/252
Bon ce n'est pas trs joli, alors arrangeons a avec tout ce que nous avons dj vu et en prcisant la classe form-inline :
Code : HTML
<form class="form-inline">
<div class="form-group">
<label class="sr-only" for="text">Texte</label>
<input type="text" class="form-control" id="text"
placeholder="un texte ici">
</div>
<div class="form-group">
<div class="checkbox">
<label>
<input type="checkbox"> Se rappeler de moi...
</label>
</div>
<button type="submit" class="btn btn-default">Envoyer</button>
</form>
C'est beaucoup mieux ! Remarquez l'utilisation d'une tiquette invisible pour la zone de texte. Il est conseill d'avoir toujours une
tiquette pour chaque contrle pour les lecteurs d'cran (accessibilit), la classe sr-only permet de rendre cette tiquette
invisible.
www.openclassrooms.com
85/252
Une information
accole un contrle
On peut aussi les utiliser conjointement pour accoler devant et derrire :
Code : HTML
<div class="input-group col-lg-2">
<span class="input-group-addon"></span>
<input type="text" class="form-control" style="text-align:right"
value="100">
<span class="input-group-addon">.00</span>
</div>
www.openclassrooms.com
86/252
a fonctionne correctement, mais la documentation officielle prcise que cela n'est pas pris en charge...
www.openclassrooms.com
87/252
Notez qu'on joue ici uniquement sur la hauteur du contrle, la largeur tant dfinie par la grille.
www.openclassrooms.com
88/252
La version 3.1 de Bootstrap a prvu la possibilit d'ajouter une icne pour amliorer l'effet visuel. Nous verrons comment
Bootstrap permet d'utiliser des icnes dans le chapitre suivant. Je vous mets juste l'exemple prcdent complt sans commenter
l'ajout des icnes, vous pourrez y revenir plus tard quand vous aurez avanc dans ce cours :
Code : HTML
<form class="col-lg-5">
<fieldset>
<legend>Validation, erreur et succs</legend>
<div class="form-group has-error has-feedback">
<label class="control-label" for="idError">Erreur</label>
<input type="text" class="form-control" id="idError">
<span class="glyphicon glyphicon-remove form-controlfeedback"></span>
<span class="help-block">Corrigez l'erreur s'il vous
plait</span>
</div>
<div class="form-group has-warning has-feedback">
<label class="control-label"
for="idWarning">Avertissement</label>
<input type="text" class="form-control" id="idWarning">
<span class="glyphicon glyphicon-warning-sign form-controlfeedback"></span>
<span class="help-block">Il y a un problme dans la
saisie</span>
</div>
<div class="form-group has-success has-feedback">
<label class="control-label" for="idSuccess">Russite</label>
<input type="text" class="form-control" id="idSuccess">
<span class="glyphicon glyphicon-ok form-control-feedback"></span>
<span class="help-block">Saisie correcte</span>
</div>
</fieldset>
</form>
Remarquez l'ajout des classes has-feedback et form-control-feedback pour que l'icne soit bien intgre dans le
contrle. Ce qui nous donne la figure suivante.
www.openclassrooms.com
89/252
icnes
Dans ces exemples il y a peu d'actions possibles car, pour le moment, je n'ai pas prvu d'interactivit. Alors un petit exemple :
nous voulons faire un formulaire comme celui de la figure suivante.
Formulaire obtenir
Et nous voulons tester la saisie pour vrifier que le texte fait au moins 4 caractres. Si ce n'est pas le cas, on change le style de la
zone de texte et on fait apparatre un message d'avertissement, comme la figure suivante.
Message afficher
Tant qu' faire, on veut aussi que le message d'avertissement disparaisse au bout de 4 secondes et que le tout se fasse avec
fluidit. En combinant Bootstrap et jQuery c'est un jeu d'enfant :
Code : HTML
<div class="col-lg-4">
<form class="form-inline well">
<div class="form-group">
<label class="sr-only" for="text">Saisie</label>
<input id="text" type="text" class="form-control"
www.openclassrooms.com
90/252
placeholder="Texte ici">
</div>
<button type="submit" class="btn btn-primary pullright">Envoyer</button>
<div class="alert alert-block alert-danger"
style="display:none">
<h4>Erreur !</h4>
Vous devez entrer au moins 4 caractres !
</div>
</form>
</div>
<script src="assets/js/jquery.js"></script>
<script>
$(function(){
$("form").on("submit", function() {
if($("input").val().length < 4) {
$("div.form-group").addClass("has-error");
$("div.alert").show("slow").delay(4000).hide("slow");
return false;
}
});
});
</script>
Tester !
Je ne commente pas le code jQuery ajout parce que ce n'est pas l'objet de ce cours, mais je conseille vraiment de connatre ce
framework Javascript puissant et lgant pour tirer pleinement parti de toutes les possibilits de Bootstrap.
Un gnrateur de formulaire
Le site bootsnipp propose un gnrateur de formulaire pour Bootstrap (voir la figure suivante).
www.openclassrooms.com
91/252
www.openclassrooms.com
92/252
<div class="container">
<header class="row">
<div class="col-sm-12 col-lg-7">
<h1>Mon amour pour les tigres</h1>
</div>
<div class="col-sm-12 col-lg-5">
<form class="form-inline pull-right">
<input type="text" style="width:150px" class="input-sm
form-control" placeholder="Recherche">
<button type="submit" class="btn btn-primary btnxs"><span class="glyphicon glyphicon-eye-open"></span>
Chercher</button>
</form>
</div>
</header>
<section class="row">
<div class="col-lg-12">
<p>
Je suis passionn par les <strong>tigres</strong> depuis
trs longtemps. Ce site a t construit en <em>
hommage ces
merveilleux flins...</em><br>
Je fais partie de la <abbr title="Socit des Amoureux
des Tigres">SAT</abbr> qui a pour but de faire connatre ces
splendides animaux.
</p>
<p>Voici ce qu'en dit le wikipedia :</p>
<blockquote>
Le Tigre (Panthera tigris) est un mammifre carnivore
de la famille des flids (Felidae) du genre Panthera.
Aisment reconnaissable sa fourrure rousse raye de noir, il est
le plus grand flin sauvage et l'un des plus grands carnivores du
monde.
L'espce est divise en neuf sous-espces possdant des diffrences
mineures en termes de taille ou de comportement.
Superprdateur, il chasse principalement les cerfs et les sangliers,
bien qu'il puisse s'attaquer des proies de taille plus importante
comme les buffles.
Jusqu'au XIXe sicle, le Tigre tait rput mangeur d'homme. La
structure sociale des tigres en fait un animal solitaire ;
le mle possde un territoire qui englobe les domaines de plusieurs
femelles et ne participe pas l'ducation des petits.<br>
<small class="pull-right">Wikipedia</small><br>
</blockquote>
</div>
</section>
<section class="row">
<div class="col-xs-4 col-sm-3 col-md-2"><img
src="images/t1.jpg" alt="Tigre" class="img-rounded"></div>
<div class="col-xs-4 col-sm-3 col-md-2"><img
src="images/t2.jpg" alt="Tigre" class="img-rounded"></div>
<div class="col-xs-4 col-sm-3 col-md-2"><img
src="images/t3.jpg" alt="Tigre" class="img-rounded"></div>
<div class="col-xs-4 col-sm-3 col-md-2"><img
src="images/t4.jpg" alt="Tigre" class="img-rounded"></div>
<div class="col-xs-4 col-sm-3 col-md-2"><img
src="images/t5.jpg" alt="Tigre" class="img-rounded"></div>
<div class="col-xs-4 col-sm-3 col-md-2"><img
src="images/t6.jpg" alt="Tigre" class="img-rounded"></div>
<div class="col-xs-4 col-sm-3 col-md-2"><img
src="images/t7.jpg" alt="Tigre" class="img-rounded"></div>
<div class="col-xs-4 col-sm-3 col-md-2"><img
src="images/t8.jpg" alt="Tigre" class="img-rounded"></div>
<div class="col-xs-4 col-sm-3 col-md-2"><img
src="images/t9.jpg" alt="Tigre" class="img-rounded"></div>
<div class="col-xs-4 col-sm-3 col-md-2"><img
src="images/t10.jpg" alt="Tigre" class="img-rounded"></div>
<div class="col-xs-4 col-sm-3 col-md-2"><img
src="images/t11.jpg" alt="Tigre" class="img-rounded"></div>
<div class="col-xs-4 col-sm-3 col-md-2"><img
src="images/t12.jpg" alt="Tigre" class="img-rounded"></div>
www.openclassrooms.com
93/252
</section>
<div class="row">
<section class="col-sm-4">
<h5>Voici les sous-espces des tigres :</h5>
<br>
<ul>
<li>Tigre de Sibrie</li>
<li>Tigre de Chine mridionale</li>
<li>Tigre de Bali</li>
<li>Tigre de d'Indochine</li>
<li>Tigre de Malaisie</li>
<li>Tigre de Java</li>
<li>Tigre de Sumatra</li>
<li>Tigre du Bengale</li>
<li>Tigre de la Caspienne</li>
</ul>
</section>
<section class="col-sm-8">
<img src="images/photo-tigre.jpg" alt="Tigre" class="imgrounded">
</section>
</div>
<div class="row">
<section class="col-sm-12">
<table class="table table-bordered table-striped tablecondensed">
<caption>
<h4>Les menaces pour les tigres</h4>
</caption>
<thead>
<tr>
<th>Lieu</th>
<th>Menace</th>
</tr>
</thead>
<tbody>
<tr>
<td>Grand Mekong</td>
<td>Demande croissante de certaines parties de
lanimal pour la mdecine chinoise traditionnelle et fragmentation
des habitats
du fait du dveloppement non durable dinfrastructures</td>
</tr>
<tr>
<td>le de Sumatra</td>
<td>Production dhuile de palme et de ptes
papiers</td>
</tr>
<tr>
<td>Indonsie et Malaisie</td>
<td>Pte papier, lhuile de palme et le
caoutchouc</td>
</tr>
<tr>
<td>tats-Unis</td>
<td>Les tigres captifs reprsentent un danger pour
les tigres sauvages</td>
</tr>
<tr>
<td>Europe</td>
<td>Gros apptit pour lhuile de palme</td>
</tr>
<tr>
<td>Npal</td>
<td>Commerce illgal de produits drivs de
tigres</td>
</tr>
</tbody>
</table>
</section>
www.openclassrooms.com
94/252
</div>
<div class="row">
<section class="col-sm-8">
<form class="well">
<legend>Si vous voulez me laisser un message</legend>
<h4>Comment m'avez-vous trouv ?</h4>
<fieldset>
<label for="ami" class="radio">
<input type="radio" name="origine" value="ami"
id="ami">
Par un ami
</label>
<label for="web" class="radio">
<input type="radio" name="origine" value="web"
id="web">
Sur le web
</label>
<label for="hasard" class="radio">
<input type="radio" name="origine" value="hasard"
id="hasard">
Par hasard
</label>
<label for="autre" class="radio">
<input type="radio" name="origine" value="autre"
id="autre">
Autre...
</label>
<label for="textarea">Votre message :</label>
<textarea id="textarea" rows="4" class="formcontrol"></textarea>
<p class="help-block">Vous pouvez agrandir la
fentre</p>
<button class="btn btn-primary" type="submit"><span
class="glyphicon glyphicon-ok-sign"></span> Envoyer</button>
</fieldset>
</form>
</section>
<section class="col-sm-4">
<address>
<p>Vous pouvez me contacter cette adresse :</p>
<strong>Tigrou Alfred</strong><br>
Alle des fauves<br>
28645 Flins-sur-Loire<br>
</address>
</section>
</div>
</div>
</body>
</html>
Tester !
Qu'y a-t-il de nouveau ? Dj un formulaire de recherche dans la partie suprieure droite, avec une zone de texte et un bouton
muni d'une icne (voir figure suivante).
Le formulaire de recherche
Remarquez le traitement du responsive pour ce formulaire. Pour un cran large, il est cal en haut droite avec une classe collg-5 et un pull-right. Quand on passe au format moyen, il se retrouve avec la classe col-sm-12 de telle manire qu'il
vienne se disposer sous le titre, toujours cal droite (voir figure suivante).
www.openclassrooms.com
95/252
Nous allons passer en revue ces nouveauts et dtailler les possibilits de Bootstrap pour les boutons, les icnes et les images.
www.openclassrooms.com
96/252
class="btn btn-primary">Bouton
class="btn
class="btn
class="btn
class="btn
class="btn
btn-success">Russite</button>
btn-info">Information</button>
btn-warning">Avertissement</button>
btn-danger">Danger</button>
btn-link">Lien</button>
Boutons "block"
www.openclassrooms.com
97/252
La classe btn-block rgle la dimension du bouton sur la dimension de son contenant. Voici un exemple :
Code : HTML
<div class="row">
<div class="col-sm-3">
<button type="button" class="btn btn-primary btn-block">Bouton
"block"</button>
</div>
<div class="col-sm-6">
<button type="button" class="btn btn-success btn-block">Bouton
"block"</button>
</div>
<div class="col-sm-3">
<button type="button" class="btn btn-danger btn-block">Bouton
"block"</button>
</div>
</div>
www.openclassrooms.com
98/252
Groupement de boutons
Boutons justifis
Si vous voulez que vos boutons se rpartissent harmonieusement et uniformment dans un contenant, utilisez la classe btngroup-justified en plus de btn-group :
Code : CSS
www.openclassrooms.com
99/252
<div class="col-lg-6">
<div class="btn-group btn-group-justified">
<a class="btn btn-danger" href="#">1</a>
<a class="btn btn-info" href="#">2</a>
<a class="btn btn-warning" href="#">3</a>
</div>
</div>
Cet exemple utilise des balises <a>. On peut raliser la mme chose avec des balises <button> condition d'utiliser la classe
btn-group pour chaque bouton :
Code : CSS
<div class="col-lg-6">
<div class="btn-group btn-group-justified">
<div class="btn-group">
<button type="button" class="btn btn-danger">1</button>
</div>
<div class="btn-group">
<button type="button" class="btn btn-info">2</button>
</div>
<div class="btn-group">
<button type="button" class="btn btn-warning">3</button>
</div>
</div>
</div>
www.openclassrooms.com
100/252
Un gnrateur de bouton
Vous entrez le texte du bouton, la couleur, la taille, vous choisissez l'icne et son positionnement. Vous visualisez directement le
rsultat et vous disposez du code HTML correspondant.
Si vous voulez des styles diffrents pour vos boutons et sortir des couleurs standards que Bootstrap propose, vous pouvez
crer vos propres styles. Si vous n'tes pas trs inspir, il existe un gnrateur simple et pratique sur le site
http://charliepark.org/bootstrap_buttons/ (voir figure suivante).
www.openclassrooms.com
101/252
Il est ainsi facile et rapide de crer son propre style de bouton (voir figure suivante).
Un bouton gnr
De jolies icnes
Les icnes de Glyphicons
Bootstrap propose 200 icnes de Glyphicons. L'intgration d'une icne est trs facile parce qu'il suffit d'utiliser la balise
<span>. Pour le formulaire de contact de la page d'exemple, le bouton est amlior en le compltant par une icne (voir figure
suivante).
Code : HTML
<button class="btn btn-primary" type="submit"><span class="glyphicon
glyphicon-ok-sign"></span> Envoyer</button>
www.openclassrooms.com
102/252
La syntaxe est toute simple. On utilise une balise <span> avec deux classes. La principale est glyphicon suivi de la classe
qui correspond l'icne afficher glyphicon-*. On peut ainsi crer d'lgantes barres de boutons :
Code : HTML
<div class="container">
<div class="row" >
<div class="col-lg-3">
<div class="btn-group">
<a class="btn btn-danger" href="#"><span class="glyphicon
glyphicon-fast-backward"></span></a>
<a class="btn btn-info" href="#"><span class="glyphicon
glyphicon-backward"></span></a>
<a class="btn btn-warning" href="#"><span class="glyphicon
glyphicon-play"></span></a>
<a class="btn btn-info" href="#"><span class="glyphicon
glyphicon-forward"></span></a>
<a class="btn btn-danger" href="#"><span class="glyphicon
glyphicon-fast-forward"></span></a>
</div>
</div>
<div class="col-lg-1">
<div class="btn-group-vertical">
<a class="btn btn-danger" href="#"><span class="glyphicon
glyphicon-pencil"></span></a>
<a class="btn btn-info" href="#"><span class="glyphicon
glyphicon-search"></span></a>
<a class="btn btn-warning" href="#"><span class="glyphicon
glyphicon-print"></span></a>
<a class="btn btn-success" href="#"><span class="glyphicon
glyphicon-picture"></span></a>
</div>
</div>
</div>
</div>
www.openclassrooms.com
103/252
videmment on peut mettre ces icnes ailleurs que sur des boutons Partout o on peut crire en fait !
Rien n'empche videmment de sauter des lignes dans un bouton. On peut ainsi crer des boutons en sparant bien l'icne du
texte :
Code : HTML
<button class="btn btn-primary btn-lg"><span class="glyphicon
glyphicon-user"></span><br>Utilisateurs</button>
<button class="btn btn-warning btn-lg"><span class="glyphicon
glyphicon-comment"></span><br>Commentaires</button>
<button class="btn btn-success btn-lg"><span class="glyphicon
glyphicon-calendar"></span><br>Evnements</button>
<button class="btn btn-danger btn-lg"><span class="glyphicon
glyphicon-shopping-cart"></span><br>Boutique</button>
<button class="btn btn-info btn-lg"><span class="glyphicon
glyphicon-bullhorn"></span><br>Messages</button>
Et le code HTML :
Code : HTML
<button class="btn btn-primary btn-lg"><span class="glyphicon
glyphicon-user"></span></button>
<button class="btn btn-warning btn-lg"><span class="glyphicon
glyphicon-comment"></span></button>
<button class="btn btn-success btn-lg"><span class="glyphicon
www.openclassrooms.com
104/252
glyphicon-calendar"></span></button>
<button class="btn btn-danger btn-lg"><span class="glyphicon
glyphicon-shopping-cart"></button>
<button class="btn btn-info btn-lg"><span class="glyphicon
glyphicon-bullhorn"></span></button>
Une fois le fichier CSS dclar, vous pouvez utiliser les icnes. La syntaxe est celle qui tait utilise pour Bootstrap 2 avec la
balise <i>. Le site propose une galerie d'exemples. On peut insrer une icne directement dans un texte (voir figure suivante) :
Code : HTML
Il faut dverrouiller <i class="fa fa-unlock"></i> pour sortir <i
class="fa fa-arrow-right"></i>
class="fa
class="fa
class="fa
class="fa
class="fa
fa-print
fa-print
fa-print
fa-print
fa-print
fa-lg"></i>
fa-2x"></i>
fa-3x"></i>
fa-4x"></i>
fa-5x"></i>
Taille
Taille
Taille
Taille
Taille
normale</p>
double</p>
triple</p>
quadruple</p>
quintuple</p>
www.openclassrooms.com
105/252
On peut aussi trs facilement crer une liste dont les lments sont bien identifis avec une icne (voir figure suivante) :
Code : HTML
<ul class="fa-ul">
<li><i class="fa-li
<li><i class="fa-li
<li><i class="fa-li
<li><i class="fa-li
</ul>
fa
fa
fa
fa
fa-check-square"></i>Vrifier</li>
fa-paperclip"></i>Conserver</li>
fa-eraser"></i>Effacer</li>
fa-print"></i>Imprimer</li>
Il existe bien d'autres possibilits comme la rotation des icnes, leur animation, leur empilement, que je vous laisse dcouvrir en
consultant la page des exemples du site.
Effet
img-rounded
img-circle
Image circulaire
www.openclassrooms.com
106/252
<div class="col-lg-2">
<img src="images/t2.jpg" class="img-circle">
</div>
<div class="col-lg-2">
<img src="images/t3.jpg" class="img-thumbnail">
</div>
</div>
images
Notez que vous pouvez rendre les images adaptatives facilement avec la classe img-responsive. Cette classe possde 3
rgles :
Code : CSS
.img-responsive {
display: block;
max-width: 100%;
height: auto;
}
Le but est de faire en sorte que l'image occupe toute la place disponible de son contenant.
En rsum :
Bootstrap permet une mise en forme lgante des listes, descriptions et tableaux.
Bootstrap permet de raliser des formulaires classiques, horizontaux ou en ligne. Il permet aussi d'enrichir les contrles en
jouant sur leur dimension ou leur style.
Bootstrap permet de crer des boutons colors, seuls ou groups, de diverses dimensions.
Bootstrap comprend une collection d'icnes vectorielles faciles intgrer comme des caractres.
Bootstrap prvoie la mise en forme des images avec des coins arrondis ou avec un effet de diapositive.
www.openclassrooms.com
107/252
La navigation
La page d'exemple
Voici le code ajout la page d'exemple pour l'quiper d'une barre de navigation :
Code : HTML
<!DOCTYPE HTML>
<html>
<head>
...
en-tte
...
</head>
<body>
<div class="container">
<nav class="navbar navbar-inverse">
<ul class="nav navbar-nav">
<li class="active"> <a href="#">Accueil</a> </li>
<li> <a href="#">Liens</a> </li>
<li> <a href="#">Tmoignages</a> </li>
<li> <a href="#">Rfrences</a> </li>
</ul>
<form class="navbar-form pull-right">
<input type="text" style="width:150px" class="input-small"
placeholder="Recherche">
<button type="submit" class="btn btn-primary btn-xs"><span
class="glyphicon glyphicon-eye-open"></span> Chercher</button>
</form>
</nav>
...
contenu
...
</body>
</html>
www.openclassrooms.com
108/252
La page d'exemple
Tester
www.openclassrooms.com
109/252
Une hauteur fixe 50 pixels, une petite marge basse pour bien distinguer la barre du reste de la page, une bordure fine et une
position relative. La classe navbar-default fixe les couleurs du fond et de la bordure :
Code : CSS
.navbar-default {
background-color: #f8f8f8;
border-color: #e7e7e7;
}
Pourquoi 2 classes ? Nous verrons plus loin qu'il est possible d'avoir une barre inverse , avec une couleur de fond diffrente.
Mais une barre vide ne sert pas grand chose, en gnral on la garnit d'items. Voici un exemple :
Code : HTML
<div class="navbar navbar-default">
<ul class="nav navbar-nav">
<li class="active"> <a href="#">Accueil</a> </li>
<li> <a href="#">Liens</a> </li>
<li> <a href="#">Tmoignages</a> </li>
<li class="disabled"> <a href="#">Rfrences</a> </li>
</ul>
</div>
Les classes nav et navbar-nav doivent tre utilises avec une balise <ul>. Tous les items de navigation apparaissent alors
avec des balises <li>. L'item actif est repr avec la classe active. Un item dsactiv est dfini avec la classe disabled.
Voici la figure suivante un aperu de la barre.
www.openclassrooms.com
110/252
Si vous prfrez une barre avec un fond noir, il suffit de remplacer la classe navbar-default par la classe navbarinverse :
Code : HTML
<div class="navbar navbar-inverse">
<ul class="nav navbar-nav">
<li class="active"> <a href="#">Accueil</a> </li>
<li> <a href="#">Liens</a> </li>
<li> <a href="#">Tmoignages</a> </li>
<li> <a href="#">Rfrences</a> </li>
</ul>
</div>
navbar-inverse
Un
titre dans la barre
Le titre doit tre inclus dans une classe navbar-header pour avoir un affichage correct sur les mobiles.
Fixer la barre ?
A priori, on veut une barre de navigation dans la partie suprieure d'un site, mais en gnral sous un bandeau. Avec le code tel
qu'on l'a vu jusque-l, la barre se situe dans le flux. Par exemple
www.openclassrooms.com
111/252
Code : HTML
<p>Un paragraphe</p>
<div class="navbar navbar-default">
<div class="navbar-header">
<a class="navbar-brand" href="#">Mon beau site</a>
</div>
<ul class="nav navbar-nav">
<li class="active"><a href="#">Accueil</a></li>
<li><a href="#">Liens</a></li>
<li><a href="#">Tmoignages</a></li>
<li><a href="#">Rfrences</a></li>
<li><a href="#">Bibliographie</a></li>
</ul>
</div>
<p>Un autre paragraphe</p>
La
Barre fixe
en haut de la page
www.openclassrooms.com
112/252
La barre prend alors toute la largeur de la fentre. Les lments de la page se dplacent sous la barre fixe en cas de scrolling.
Mais o sont passs les 2 premiers paragraphes ?
La barre est situe en positionnement fixe en haut de la page du navigateur avec un z-index important Donc si on adopte un
positionnement fixe en haut de la page du navigateur, il faut prendre la prcaution de mnager suffisamment d'espace pour que
les lments ne soient pas masqus par la barre :
Code : CSS
<link href="assets/css/bootstrap.css" rel="stylesheet">
<style type="text/css">
body { padding-top: 70px; }
</style>
Barre avec
espace rserv
Maintenant on retrouve nos paragraphes bien visibles !
Il existe aussi la classe navbar-fixed-bottom pour fixer la barre en bas de la page, mais les cas d'utilisation sont plus
anecdotiques. Le principe demeure le mme.
www.openclassrooms.com
113/252
www.openclassrooms.com
114/252
La pagination
Un exemple simple
Bootstrap propose la classe pagination pour raliser des paginations. Le principe est tout simple, voici un exemple de base
:
Code : HTML
<ul class="pagination">
<li><a href="#"><<</a></li>
<li><a href="#">1</a></li>
<li><a href="#">2</a></li>
<li><a href="#">3</a></li>
<li><a href="#">>></a></li>
</ul>
Pagination simple
La dimension
Il y a 3 possibilits de dimension pour la pagination :
Code : HTML
<div class="col-lg-3">
<ul class="pagination pagination-large">
<li><a href="#"><<</a></li>
<li><a href="#">1</a></li>
<li><a href="#">2</a></li>
<li><a href="#">3</a></li>
<li><a href="#">>></a></li>
</ul>
<ul class="pagination">
<li><a href="#"><<</a></li>
<li><a href="#">1</a></li>
<li><a href="#">2</a></li>
<li><a href="#">3</a></li>
<li><a href="#">>></a></li>
</ul>
<ul class="pagination pagination-small">
<li><a href="#"><<</a></li>
<li><a href="#">1</a></li>
<li><a href="#">2</a></li>
<li><a href="#">3</a></li>
<li><a href="#">>></a></li>
</ul>
</div>
www.openclassrooms.com
115/252
Un cas pratique
On va utiliser cette possibilit de pagination sur un exemple pratique partir des photos de tigres que j'utilise dans ma page de
dmonstration. Le but est de faire dfiler les images 3 par 3. Pour dfinir la page actuelle on utilise la classe active.
Code : HTML
<!DOCTYPE HTML>
<html>
<head>
<link href="assets/css/bootstrap.css" rel="stylesheet">
<style type="text/css">
body { background-color:#DDD; }
img { width: 100%; }
a:focus { outline:0; }
</style>
</head>
<body>
<br>
<div class="container">
<div id="content" class="row">
<div class="col-lg-2"><img
class="img-thumbnail"></div>
<div class="col-lg-2"><img
class="img-thumbnail"></div>
<div class="col-lg-2"><img
class="img-thumbnail"></div>
<div class="col-lg-2"><img
class="img-thumbnail"></div>
<div class="col-lg-2"><img
class="img-thumbnail"></div>
<div class="col-lg-2"><img
class="img-thumbnail"></div>
<div class="col-lg-2"><img
class="img-thumbnail"></div>
<div class="col-lg-2"><img
class="img-thumbnail"></div>
<div class="col-lg-2"><img
class="img-thumbnail"></div>
<div class="col-lg-2"><img
class="img-thumbnail"></div>
<div class="col-lg-2"><img
class="img-thumbnail"></div>
<div class="col-lg-2"><img
src="images/t1.jpg" alt="Tigre"
src="images/t2.jpg" alt="Tigre"
src="images/t3.jpg" alt="Tigre"
src="images/t4.jpg" alt="Tigre"
src="images/t5.jpg" alt="Tigre"
src="images/t6.jpg" alt="Tigre"
src="images/t7.jpg" alt="Tigre"
src="images/t8.jpg" alt="Tigre"
src="images/t9.jpg" alt="Tigre"
src="images/t10.jpg" alt="Tigre"
src="images/t11.jpg" alt="Tigre"
src="images/t12.jpg" alt="Tigre"
www.openclassrooms.com
116/252
class="img-thumbnail"></div>
</div>
<div id="page_navigation"> </div>
</div>
<script src="assets/js/jquery.js"></script>
<script>
var show_per_page = 3;
var current_page = 0;
function set_display(first, last) {
$('#content').children().css('display', 'none');
$('#content').children().slice(first, last).css('display',
'block');
}
function previous(){
if($('.active').prev('.page_link').length)
go_to_page(current_page - 1);
}
function next(){
if($('.active').next('.page_link').length)
go_to_page(current_page + 1);
}
function go_to_page(page_num){
current_page = page_num;
start_from = current_page * show_per_page;
end_on = start_from + show_per_page;
set_display(start_from, end_on);
$('.active').removeClass('active');
$('#id' + page_num).addClass('active');
}
$(document).ready(function() {
var number_of_pages =
Math.ceil($('#content').children().size() / show_per_page);
var nav = '<ul class="pagination"><li><a
href="javascript:previous();"><<</a>';
var i = -1;
while(number_of_pages > ++i){
nav += '<li class="page_link'
if(!i) nav += ' active';
nav += '" id="id' + i +'">';
nav += '<a href="javascript:go_to_page(' + i +')">'+ (i + 1)
+'</a>';
}
nav += '<li><a href="javascript:next();">>></a></ul>';
$('#page_navigation').html(nav);
set_display(0, show_per_page);
});
</script>
</body>
</html>
www.openclassrooms.com
117/252
La pagination en
action
Tester
Pagination esthtique
Une autre possibilit de pagination simple consiste utiliser la classe pager :
Code : HTML
<ul class="pager">
<li><a href="#">Prcdent</a></li>
<li><a href="#">Suivant</a></li>
</ul>
Pagination esthtique
Par dfaut, les boutons sont centrs. Pour les disposer de part et d'autre, il faut utiliser les classes previous et next:
Code : HTML
<ul class="pager col-lg-4">
<li class="previous"><a href="#"><span class="glyphicon glyphiconbackward"></span> Prcdent</a></li>
<li class="next"><a href="#">Suivant <span class="glyphicon
glyphicon-forward"></span></a></li>
</ul>
Aide la navigation
L'aide la navigation suit le mme principe que la pagination, avec la classe breadcrumb dans la balise <ul> et utilisation de
la classe active pour dfinir l'lment actif :
www.openclassrooms.com
118/252
Code : HTML
<ul class="breadcrumb">
<li><a href="#">Accueil</a></li>
<li><a href="#">Tmoignages</a></li>
<li class="active">Chasseurs</li>
</ul>
On va aussi prvoir un libell dans le formulaire et amliorer la prsentation de l'adresse (voir figure suivante).
www.openclassrooms.com
119/252
Tester !
Jumbotron
Jumbotron contenu
La classe jumbotron permet de rendre le texte trs visible. Prenons un exemple :
Code : HTML
<h1>Coucou</h1>
<p>et bonjour</p>
<div class="jumbotron">
<h1>Coucou</h1>
<p>et bonjour</p>
</div>
www.openclassrooms.com
120/252
La classe jumbotron
On voit bien la diffrence entre les lments normaux et ceux qui bnficient de la classe jumbotron.
Voyons cette classe :
Code : CSS
.jumbotron {
padding: 30px;
margin-bottom: 30px;
color: inherit;
background-color: #eee;
}
Un jumbotron
en plein largeur
www.openclassrooms.com
121/252
label-info">Valeur de signalement</span>
label-success">Valeur de fonctionnement</span>
label-warning">Valeur dangereuse</span>
label-danger">Valeur critique</span> 12000</p>
class="label
class="label
class="label
class="label
class="label
class="label
label-success">H1</span></h1>
label-success">H2</span></h2>
label-success">H3</span></h3>
label-success">H4</span></h4>
label-success">H5</span></h5>
label-success">H6</span></h6>
www.openclassrooms.com
122/252
message</span></h4>
<h4>Comment m'avez-vous trouv ?</h4>
Des badges
Les badges sont un peu comme les libells, mais pour des informations plus courtes, idalement des nombres :
Code : HTML
<a href="#">Messages reus <span class="badge">42</span></a>
Comme le badge se trouve dans une balise <span>, il est facile de l'intgrer par exemple un bouton et de le colorer :
Code : HTML
<button class="btn btn-danger">Envoi <span class="badge textsuccess">42</span></button>
J'ai ajout des badges sur la page d'exemple pour reprsenter le nombre de tigres :
Code : HTML
<ul>
<li>Tigre de Sibrie <span class="badge">230</span></li>
<li>Tigre de Chine mridionale <span class="badge">120</span></li>
www.openclassrooms.com
de
de
de
de
de
du
de
123/252
Thumbnails
Si vous avez des images, des vidos ou tous autres lments afficher dans une grille, Bootstrap propose le composant
Thumbnails trs facile mettre en uvre. Je reviens sur ma page d'exemple qui comporte de petites images de tigres. Jusque-l,
j'ai positionn les images en utilisant tout simplement la grille :
Code : HTML
<section class="row">
<div class="col-xs-4 col-sm-3 col-md-2"><img
alt="Tigre" class="img-rounded"></div>
<div class="col-xs-4 col-sm-3 col-md-2"><img
alt="Tigre" class="img-rounded"></div>
<div class="col-xs-4 col-sm-3 col-md-2"><img
alt="Tigre" class="img-rounded"></div>
<div class="col-xs-4 col-sm-3 col-md-2"><img
alt="Tigre" class="img-rounded"></div>
<div class="col-xs-4 col-sm-3 col-md-2"><img
alt="Tigre" class="img-rounded"></div>
<div class="col-xs-4 col-sm-3 col-md-2"><img
alt="Tigre" class="img-rounded"></div>
<div class="col-xs-4 col-sm-3 col-md-2"><img
alt="Tigre" class="img-rounded"></div>
<div class="col-xs-4 col-sm-3 col-md-2"><img
alt="Tigre" class="img-rounded"></div>
<div class="col-xs-4 col-sm-3 col-md-2"><img
alt="Tigre" class="img-rounded"></div>
<div class="col-xs-4 col-sm-3 col-md-2"><img
alt="Tigre" class="img-rounded"></div>
<div class="col-xs-4 col-sm-3 col-md-2"><img
alt="Tigre" class="img-rounded"></div>
<div class="col-xs-4 col-sm-3 col-md-2"><img
alt="Tigre" class="img-rounded"></div>
</section>
www.openclassrooms.com
src="images/t1.jpg"
src="images/t2.jpg"
src="images/t3.jpg"
src="images/t4.jpg"
src="images/t5.jpg"
src="images/t6.jpg"
src="images/t7.jpg"
src="images/t8.jpg"
src="images/t9.jpg"
src="images/t10.jpg"
src="images/t11.jpg"
src="images/t12.jpg"
124/252
Ce qui donne une organisation bien rgulire, comme le montre la figure suivante.
www.openclassrooms.com
125/252
</div>
<div class="col-xs-4 col-sm-3 col-md-2 ">
<a href="#" class="thumbnail">
<img src="images/t10.jpg" alt="Tigre" class="img-rounded">
</a>
</div>
<div class="col-xs-4 col-sm-3 col-md-2 ">
<a href="#" class="thumbnail">
<img src="images/t11.jpg" alt="Tigre" class="img-rounded">
</a>
</div>
<div class="col-xs-4 col-sm-3 col-md-2 ">
<a href="#" class="thumbnail">
<img src="images/t12.jpg" alt="Tigre" class="img-rounded">
</a>
</div>
</section>
Pour des raisons d'homognit de la prsentation, je prvois aussi de traiter la photo plus grande situe au-dessous :
Code : HTML
<div class="thumbnail">
<img src="images/photo-tigre.jpg" alt="Tigre" class="img-rounded">
</div>
www.openclassrooms.com
126/252
Classe
www.openclassrooms.com
127/252
On va aussi prvoir un panneau pour la liste des tigres et galement pour le tableau (voir figure suivante).
Tester !
www.openclassrooms.com
128/252
Code : HTML
<div class="container">
<div class="col-lg-2">
<ul>
<li>Item 1</li>
<li>Item 2</li>
<li>Item 3</li>
<li>Item 4</li>
</ul>
</div>
<div class="col-lg-2">
<ul class="list-group">
<li class="list-group-item">Item
<li class="list-group-item">Item
<li class="list-group-item">Item
<li class="list-group-item">Item
</ul>
</div>
</div>
1</li>
2</li>
3</li>
4</li>
www.openclassrooms.com
129/252
www.openclassrooms.com
130/252
J'ai prvu des chevrons pour appuyer la smantique des liens, ils sont pousss sur la droite avec la classe pull-right.
Un peu de couleur
De nouvelles classes sont apparues avec la version 3.1 de Bootstrap qui permettent d'avoir un peu de couleur dans les listes
groupes. Vous trouverez un exemple illustratif la figure suivante.
Code : HTML
<div class="col-lg-3">
<ul class="list-group">
<li class="list-group-item
!</li>
<li class="list-group-item
info</li>
<li class="list-group-item
c'est chaud !</li>
<li class="list-group-item
dangereux...</li>
</ul>
</div>
list-group-item-success">On a gagn
list-group-item-info">Une petite
list-group-item-warning">Attention
list-group-item-danger">Par l c'est
Contenus divers
La liste est suffisamment versatile pour contenir des lments varis. On peut avoir une en-tte avec la classe list-groupitem-heading, et du texte avec la classe list-group-item-text, mais on peut intgrer par exemple une image comme
je le fais ici :
Code : HTML
<ul class="list-group">
<a href="#" class="list-group-item active">
<h4 class="list-group-item-heading">Tigre 1</h4>
www.openclassrooms.com
131/252
www.openclassrooms.com
132/252
Tigre de Java
<span class="badge">710</span>
</a>
<a href="#" class="list-group-item">
Tigre de Sumatra
<span class="badge">20</span>
</a>
<a href="#" class="list-group-item">
Tigre du Bengale
<span class="badge">40</span>
</a>
<a href="#" class="list-group-item">
Tigre de la Caspienne
<span class="badge">200</span>
</a>
</div>
</div>
Les panneaux
Les panneaux permettent d'isoler visuellement une partie de la page avec une bordure esthtique, titre, contenu et pied de
panneau. Voici un exemple lmentaire :
Code : HTML
<div class="panel panel-default">
<div class="panel-heading">
<h3 class="panel-title">Titre</h3>
</div>
<div class="panel-body">Contenu</div>
<div class="panel-footer">Pied de panneau</div>
www.openclassrooms.com
133/252
</div>
Un simple panneau
Il y a aussi des classes pour crer un sens visuel pour ces panneaux :
Code : HTML
<div class="panel panel-primary">
<div class="panel-heading">
<h3 class="panel-title">Titre</h3>
</div>
<div class="panel-body">Contenu</div>
</div>
<div class="panel panel-success">
<div class="panel-heading">
<h3 class="panel-title">Titre</h3>
</div>
<div class="panel-body">Contenu</div>
</div>
<div class="panel panel-warning">
<div class="panel-heading">
<h3 class="panel-title">Titre</h3>
</div>
<div class="panel-body">Contenu</div>
</div>
<div class="panel panel-danger">
<div class="panel-heading">
<h3 class="panel-title">Titre</h3>
</div>
<div class="panel-body">Contenu</div>
</div>
<div class="panel panel-info">
<div class="panel-heading">
<h3 class="panel-title">Titre</h3>
</div>
<div class="panel-body">Contenu</div>
</div>
www.openclassrooms.com
134/252
www.openclassrooms.com
135/252
www.openclassrooms.com
136/252
tigres sauvages</td>
</tr>
<tr>
<td>Europe</td>
<td>Gros apptit pour lhuile de palme</td>
</tr>
<tr>
<td>Npal</td>
<td>Commerce illgal de produits drivs de tigres</td>
</tr>
</tbody>
</table>
</div>
Les mdias
Simple insertion
L'objet mdia permet d'insrer un mdia (audio, image, vido...) gauche ou droite d'un texte. C'est ce que j'ai prvu dans la
page d'exemple avec une vido de tigre :
Code : HTML
<div class="media col-lg-12">
<div class="pull-right">
<iframe width="420" height="320"
src="http://www.youtube.com/embed/VmnIeLmjuHA" frameborder="0"
allowfullscreen></iframe>
</div>
<div class="media-body pull-right">
<h4 class="media-heading">Un tigre domesique dans son canap
</h4>
Admirez ce noble animal...
</div>
</div>
www.openclassrooms.com
137/252
Liste de mdias
Une autre possibilit fort intressante consiste crer une liste de mdias avec la classe media-list. Prenons par exemple le
cas d'un forum, on peut imaginer ce type de scnario :
Code : HTML
<div class="container">
<ul class="media-list col-lg-7">
<li class="media thumbnail">
<a class="pull-left" href="#">
<img class="media-object" src="images/ico01.png">
</a>
<div class="media-body">
<h4 class="media-heading">Suggestion</h4>
<p>Je pense souhaitable d'interdire la chasse au tigre pour
prserver l'espce !</p>
<div class="media thumbnail">
<a class="pull-left" href="#">
<img class="media-object" src="images/ico02.png">
</a>
<div class="media-body">
<h4 class="media-heading">Animaux dangereux</h4>
<p>Tu dlires compltement, ce sont des animaux trop
dangereux pour les laisser vivre.</p>
<div class="media thumbnail">
<a class="pull-left" href="#">
<img class="media-object" src="images/ico01.png">
</a>
<div class="media-body">
<h4 class="media-heading">Quel dlire !</h4>
<p>C'est toi qui dlires ! Il faut prserver la biodiversit. Les tigres ne sont pas vraiment dangereux, c'est l'homme
qui l'est !</p>
</div>
</div>
</div>
<div class="media">
<a class="pull-left" href="#">
<img class="media-object" src="images/ico02.png">
www.openclassrooms.com
138/252
</a>
<div class="media-body">
<h4 class="media-heading">Quel courage !</h4>
<p>J'aimerais te voir face un tigre toi !</p>
</div>
</div>
</div>
<div class="media thumbnail">
<a class="pull-left" href="#">
<img class="media-object" src="images/ico03.png">
</a>
<div class="media-body">
<h4 class="media-heading">Un peu de calme</h4>
<p>Je suis favorable la prservation de l'espce mais
dans des sites protgs.</p>
<div class="media thumbnail">
<a class="pull-left" href="#">
<img class="media-object" src="images/ico04.png">
</a>
<div class="media-body">
<h4 class="media-heading">Tu as vu ta tte !</h4>
<p>Avec la tte que tu as tu ferais mme peur un
tigre toi !</p>
</div>
</div>
</div>
</div>
</div>
</li>
</ul>
</div>
www.openclassrooms.com
139/252
Tester
Remarquez l'utilisation de la classe thumbnail pour bien isoler les commentaires et rendre le tout lisible.
Nous allons voir maintenant 2 composants qui, bien que ne ncessitant pas de Javascript pour leur prsentation, en ont besoin
pour leur mise en uvre.
Alertes
Utilisation de base
Les alertes permettent de prsenter un message visuellement significatif. Il suffit d'utiliser les classes alert et alertwarning:
Code : HTML
<div class="alert alert-warning col-lg-3">
<strong>Attention!</strong> Vous allez trop loin !
</div>
www.openclassrooms.com
140/252
Les 3 variantes
Trois autres classes permettent de changer l'aspect de l'alerte selon le rsultat dsir :
Code : HTML
<div class="alert col-lg-2 alert-info">
<strong>Infos !</strong>
</div>
<div class="alert col-lg-offset-1 col-lg-2 alert-success">
<strong>Bravo !</strong>
</div>
<div class="alert col-lg-offset-1 col-lg-2 alert-danger">
<strong>Danger !</strong>
</div>
Un bloc d'information
Si le texte doit tre consquent, il suffit d'crire le code que l'on dsire :
Code : HTML
<div class="alert span5 alert-info">
<h3>Information importante!</h3>
L'utilisation de la classe <strong>alert</strong> n'est pas sans
danger pour les yeux fatigus des pauvres internautes,
et je vous demande instamment de l'utiliser avec parcimonie...
</div>
www.openclassrooms.com
141/252
Un bouton de fermeture
Une fois qu'on a lu une alerte, on peut avoir envie de la fermer. Il suffit de prvoir un bouton et d'ajouter la classe alertdismissable :
Code : HTML
<div class="alert alert-warning alert-dismissable col-lg-4">
<button type="button" class="close" datadismiss="alert">×</button>
<strong>Attention!</strong> Vous allez vraiment trop loin !
</div>
Utilisation dynamique
Mais videmment ces alertes ne trouvent leur sens que dans un contexte dynamique et nous devons pouvoir les faire apparatre
et disparatre quand le besoin se prsente. Bootstrap prvoit un petit plugin qui ne me parat pas vraiment utile, tant donn
qu'on peut facilement grer les alertes avec quelques lignes de Javascript dopes par jQuery :
Code : HTML
<div class="container">
<div class="alert alert-warning alert-dismissable col-lg-4"
style="display: none">
<button type="button" class="close"></button>
<h4>Attention!</h4> Petite information importante !
</div>
<div class="col-lg-3">
<input type="button" class="btn btn-primary" id="afficher"
value="Afficher l'alerte">
</div>
www.openclassrooms.com
142/252
</div>
<script src="assets/js/jquery.js"></script>
<script>
$(function (){
$("#afficher").click(function() {
$("#afficher").hide();
$(".alert").show("slow");
});
$(".close").click(function() {
$(".alert").hide("slow");
$("#afficher").show();
});
});
</script>
Un bouton dclencheur
Tester
Un bouton adapt par la classe close a t prvu pour la fermeture de l'alerte. On pourrait galement mettre un bouton normal.
Barres de progression
Les barres de progression constituent une faon lgante de faire patienter l'utilisateur pendant une longue tche. Elles ont aussi
pour vocation de le rassurer et de lui indiquer approximativement le temps qu'il lui reste attendre. Les classes progress et
progress-bar permettent de raliser facilement ce genre d'effet. Pour les exemples, je prvois un peu de code javascript pour
simuler un processus temporel. Voici la barre de base :
Code : HTML
<div class="container">
<div class="progress">
<div class="progress-bar"></div>
</div>
<input type="button" class="btn btn-primary" id="animer"
value="Animer">
</div>
<script src="assets/js/jquery.js"></script>
<script>
function timer(n) {
$(".progress-bar").css("width", n + "%");
if(n < 100) {
setTimeout(function() {
timer(n + 10);
}, 200);
}
}
$(function (){
$("#animer").click(function() {
timer(0);
www.openclassrooms.com
143/252
timer(0);
});
});
</script>
www.openclassrooms.com
144/252
}
$(function (){
$("#animer").click(function() {
timer(0);
});
});
</script>
Ce qui donne la figure suivante, mme si sur l'image vous ne voyez pas l'animation
www.openclassrooms.com
145/252
www.openclassrooms.com
146/252
www.openclassrooms.com
147/252
Gnralits
La librairie jQuery
Javascript, c'est quoi ?
C'est un langage de script qui permet de rendre les pages web interactives.
C'est un langage qui fonctionne ct client et ne demande aucune ressource au niveau du serveur.
C'est un langage interprt directement par le navigateur.
jQuery, c'est quoi ?
jQuery est une librairie Javascript, on dit aussi un framework, c'est dire un ensemble de fonctionnalits bien pratiques pour
simplifier la mise en uvre de Javascript. On peut ainsi facilement :
Modifier des lments d'une page web : texte, style, animation...
Grer des vnements tels : clic de souris, action sur une touche du clavier...
Crer des effets graphiques...
Utiliser Ajax...
Installation de jQuery
Pour installer jQuery il faut faire un appel la bibliothque. Pour cela vous avez deux solutions :
1. Vous allez chercher la dernire version sur le site http://jquery.com/download/ et vous copiez ce fichier dans un
rpertoire de votre site.
2. Vous rfrencez un CDN : jQuery, cdnjs, Google CDN, Microsoft CDN...
Si vous choisissez de tlcharger la librairie, vous trouvez 2 lignes de versions : la 1 et la 2. Ces 2 versions comportent les mmes
fonctionnalits, la seule diffrence est que la seconde ne prend pas en charge Internet Explorer dans ses versions 6 8. Vous
avez donc le choix de la version, les 2 tant parfaitement adaptes Bootstrap 3,
Vous trouvez aussi 2 possibilits au niveau du tlchargement :
Uncompressed : c'est une version lisible et commente pour comprendre le code. Vous l'utilisez pendant le
dveloppement de vos sites si vous avez besoin de savoir ce qui se passe dans la bibliothque.
Minified : c'est une version compresse pour tre la plus "lgre" possible. C'est cette version que vous devez privilgier
pour la mettre sur votre site en "production"
www.openclassrooms.com
148/252
Quand vous cliquez sur le lien, vous obtenez directement le code de la figure suivante dans votre navigateur.
Faites un "enregistrer sous" en donnant le nom jquery.js pour la version complte et jquery.min.js la version
compresse.
Placer jQuery
Il est bon d'organiser un peu les fichiers d'un site en rpertoires du genre (voir figure suivante).
Si vous organisez ainsi l'architecture de votre site, dposez les fichiers jQuery dans le rpertoire js.
Rfrencer jQuery
Si vous avez plac la librairie sur votre site, il suffit de rfrencer le fichier dans le code HTML, de prfrence la fin pour ne pas
pjorer le chargement des lments visuels :
Code : HTML
<script src="js/jquery.js"></script>
Si vous passez par un CDN, c'est la mme chose, part l'adresse qui change. Par exemple :
Code : HTML
<script src="http://code.jquery.com/jquery-2.1.0.min.js"></script>
Utiliser jQuery
La principale fonction connatre est jQuery(), mais on utilise le symbole $ pour faire plus court. On veut utiliser jQuery
seulement lorsque le DOM de la page est totalement charg pour viter les erreurs d'excution, ainsi on encapsule tout le code
dans un bloc :
Code : JavaScript
www.openclassrooms.com
149/252
$(function(){
// ...
});
Si vous connaissez les slecteurs CSS, vous savez dj utiliser une grande partie de jQuery. En effet, cette librairie les utilise
directement ! Par exemple :
Code : JavaScript
var a = $("div");
Ici la variable "a" rfrence un objet jQuery qui slectionne toutes les balises div du document.
JQuery propose aussi des mthodes, par exemple pour ajouter une classe un lment :
Code : JavaScript
$("img").addClass( "ma_classe" );
Cette action ajoute la classe ma_classe toutes les balises img du document. Il est possible de chaner les mthodes. Par
exemple :
Code : JavaScript
$('#el').css('background-color', 'red').fadeIn('slow');
Ici on change la proprit background-color de l'lment avec l'identifiant #el, avec la valeur red, et on le fait apparatre
progressivement.
Une grande force de jQuery rside aussi dans sa gestion facilite des vnements, par exemple :
Code : JavaScript
$( "#action" ).click(function() {
mon code
});
www.openclassrooms.com
150/252
Dans la premire hypothse, il faut faire attention aux dpendances. Elles ne sont pas nombreuses mais il faut les connatre :
popover doit tre utilis avec tooltip
collapse doit tre utilis avec transition
Pour rfrencer les plugins dans l'hypothse de l'utilisation individuelle, par exemple pour tab :
Code : HTML
<script src="js/jquery.js"></script>
<script src="js/tab.js "></script>
On dclare d'abord jQuery, puis ensuite le plugin. Dans l'hypothse de la librairie globale :
Code : HTML
<script src="js/jquery.js"></script>
<script src="js/bootstrap.min.js "></script>
Mise en uvre
Il y a 2 faons d'utiliser un plugin de Bootstrap :
partir des attributs data
partir d'objets jQuery
www.openclassrooms.com
151/252
Prenons un exemple avec l'effet accordon que nous verrons en dtail ultrieurement :
Code : HTML
<a href="#item" data-toggle="collapse">Changer</a>
<div id="item" class="collapse">
Contenu
</div>
<script src="assets/js/jquery.js"></script>
<script src="assets/js/bootstrap.min.js"></script>
Ne vous inquitez pas pour la syntaxe globale que nous verrons plus tard. Ce plugin est destin faire apparatre ou disparatre
un contenu lors d'une action de l'utilisateur, ici un simple clic. Le contenu concern dans cet exemple est le mot Contenu. Le
plugin est dclench par l'attribut data-toggle="collapse". Dans cette hypothse d'utilisation, vous n'avez pas
manipuler de Javascript.
On peut obtenir exactement le mme rsultat en utilisant jQuery :
Code : HTML
<a>Changer</a>
<div id="item" class="collapse">
Contenu
</div>
<script src="assets/js/jquery.js"></script>
<script src="assets/js/bootstrap.min.js"></script>
<script>
$(function() {
$('a').click(function() {
$('#item').collapse('toggle');
});
});
</script>
Cette fois je n'ai pas utilis l'attribut mais un objet jQuery avec le slecteur 'a' pour pointer le lien et la mthode collapse
avec le paramtre toggle. Nous verrons plusieurs cas d'utilisation de cette faon de procder qui est plus laborieuse que la
prcdente, mais qui s'avre incontournable selon les actions que nous voulons effectuer.
Les vnements
La plupart des plugins exposent des vnements. En poursuivant l'exemple prcdent, on peut faire apparatre un message
lorsque le contenu est visible :
Code : HTML
<a>Changer</a>
<div id="item" class="collapse">
Contenu
</div>
<script src="assets/js/jquery.js"></script>
<script src="assets/js/bootstrap.min.js"></script>
<script>
$(function() {
$('a').click(function() {
$('#item').collapse('toggle');
});
$('#item').on('shown.bs.collapse', function () {
alert('On me voit !');
})
});
www.openclassrooms.com
152/252
</script>
Nous verrons aussi plusieurs exemples d'vnements dans les plugins de Bootstrap.
La page d'exemple
Pour viter de surcharger de code les chapitres sur les plugins, voici la page d'exemple complte avec des cas d'utilisation des
plugins concerns :
Code : HTML
<!DOCTYPE HTML>
<html>
<head>
<meta charset="utf-8">
<link href="assets/css/bootstrap.css" rel="stylesheet">
<style type="text/css">
body {
background-color:#DDD;
padding-top: 10px;
}
[class*="col-"] { margin-bottom: 20px; }
img { width: 100%; }
.well {
background-color:#CCC;
padding: 20px;
}
a:active, a:focus { outline:none; }
</style>
</head>
<body>
<div class="container">
<nav class="navbar navbar-inverse" role="navigation">
<div class="navbar-header">
<button type="button" class="navbar-toggle" datatoggle="collapse" data-target=".navbar-collapse">
<span class="icon-bar"></span>
<span class="icon-bar"></span>
<span class="icon-bar"></span>
</button>
<a class="navbar-brand" href="#">Les Tigres</a>
</div>
<div class="collapse navbar-collapse">
<ul class="nav navbar-nav">
<li> <a href="#">Accueil</a> </li>
<li class="dropdown">
<a class="dropdown-toggle" data-toggle="dropdown"
href="#">Tmoignages <b class="caret"></b></a>
<ul class="dropdown-menu">
<li><a href="#">Dompteurs</a></li>
<li><a href="#">Zoos</a></li>
<li><a href="#">Chasseurs</a></li>
<li class="divider"></li>
<li><a href="#">Autres tmoignages</a></li>
</ul>
</li>
<li> <a href="#">Liens</a> </li>
<li> <a href="#">Rfrences</a> </li>
</ul>
<form class="navbar-form navbar-right">
<div class="input-group">
<input type="text" style="width:150px" class="input-sm
form-control" placeholder="Recherche">
<span class="input-group-btn">
www.openclassrooms.com
153/252
<span class="input-group-btn">
<button type="submit" class="btn btn-primary btnsm"><span class="glyphicon glyphicon-eye-open"></span>
Chercher</button>
</span>
</div>
</form>
</div>
</nav>
<header class="row">
<div class="col-lg-12">
<h1>Mon amour pour les tigres</h1>
</div>
</header>
<section class="row">
<div class="col-lg-12">
<p>
Je suis passionn par les <strong>tigres</strong> depuis
trs longtemps. Ce site a t construit en <em>hommage ces
merveilleux flins...</em>
<br>
Je fais partie de la <abbr title="Socit des Amoureux
des Tigres">SAT</abbr> qui a pour but de faire connatre ces
splendides animaux.
</p>
<p>Voici ce qu'en dit le wikipedia :</p>
<blockquote>
Le Tigre (Panthera tigris) est un <a datatoggle="tooltip" href="#" title="Classe de vertbrs">mammifre</a>
carnivore de la famille
des flids (Felidae) du genre Panthera. Aisment reconnaissable
sa fourrure rousse raye de noir, il est le plus grand flin sauvage
et l'un
des plus grands <a data-toggle="tooltip"
href="#" title='Synonyme de "carnassier"'>carnivores </a>du monde.
L'espce est divise en neuf sous-espces possdant des diffrences
mineures
en termes de taille ou de comportement. Superprdateur, il chasse
principalement les cerfs et les sangliers, bien qu'il puisse
s'attaquer des
proies de taille plus importante comme les buffles. Jusqu'au XIXe
sicle, le Tigre tait rput mangeur d'homme. La structure sociale
des tigres
en fait un animal solitaire ; le mle possde un territoire qui
englobe les domaines de plusieurs femelles et ne participe pas
l'ducation des petits.<br>
<small class="pull-right">Wikipedia</small><br>
</blockquote>
</div>
</section>
<section class="row">
<div class="media col-lg-12">
<div class="pull-right">
<iframe width="420" height="320"
src="http://www.youtube.com/embed/VmnIeLmjuHA" frameborder="0"
allowfullscreen></iframe>
</div>
<div class="media-body pull-right">
<div class="btn-group" data-toggle="buttons">
<label class="btn btn-primary">
<input type="radio">Vido 1
</label>
<label class="btn btn-primary">
<input type="radio">Vido 2
</label>
<label class="btn btn-primary">
<input type="radio">Vido 3
</label>
</div>
</div>
www.openclassrooms.com
154/252
</div>
</section>
<section class="row">
<div class="col-xs-4 col-sm-3 col-md-2 ">
<a href="#" class="thumbnail">
<img src="images/t1.jpg" alt="Tigre" class="imgrounded">
</a>
</div>
<div class="col-xs-4 col-sm-3 col-md-2 ">
<a href="#" class="thumbnail">
<img src="images/t2.jpg" alt="Tigre" class="imgrounded">
</a>
</div>
<div class="col-xs-4 col-sm-3 col-md-2 ">
<a href="#" class="thumbnail">
<img src="images/t3.jpg" alt="Tigre" class="imgrounded">
</a>
</div>
<div class="col-xs-4 col-sm-3 col-md-2 ">
<a href="#" class="thumbnail">
<img src="images/t4.jpg" alt="Tigre" class="imgrounded">
</a>
</div>
<div class="col-xs-4 col-sm-3 col-md-2 ">
<a href="#" class="thumbnail">
<img src="images/t5.jpg" alt="Tigre" class="imgrounded">
</a>
</div>
<div class="col-xs-4 col-sm-3 col-md-2 ">
<a href="#" class="thumbnail">
<img src="images/t6.jpg" alt="Tigre" class="imgrounded">
</a>
</div>
<div class="col-xs-4 col-sm-3 col-md-2 ">
<a href="#" class="thumbnail">
<img src="images/t7.jpg" alt="Tigre" class="imgrounded">
</a>
</div>
<div class="col-xs-4 col-sm-3 col-md-2 ">
<a href="#" class="thumbnail">
<img src="images/t8.jpg" alt="Tigre" class="imgrounded">
</a>
</div>
<div class="col-xs-4 col-sm-3 col-md-2 ">
<a href="#" class="thumbnail">
<img src="images/t9.jpg" alt="Tigre" class="imgrounded">
</a>
</div>
<div class="col-xs-4 col-sm-3 col-md-2 ">
<a href="#" class="thumbnail">
<img src="images/t10.jpg" alt="Tigre" class="imgrounded">
</a>
</div>
<div class="col-xs-4 col-sm-3 col-md-2 ">
<a href="#" class="thumbnail">
<img src="images/t11.jpg" alt="Tigre" class="imgrounded">
</a>
</div>
<div class="col-xs-4 col-sm-3 col-md-2 ">
www.openclassrooms.com
rounded">
:</h3>
155/252
</a>
</div>
</section>
<div class="row">
<section class="col-sm-4">
<div class="panel panel-info">
<div class="panel-heading">
<h3 class="panel-title">Les sous-espces des tigres
</div>
<div class="list-group">
<a href="#infos" class="list-group-item" datatoggle="modal">
Tigre de Sibrie
<span class="badge">120</span>
</a>
<div class="modal fade" id="infos" role="dialog" arialabelledby="modalTitre" aria-hidden="true">
<div class="modal-dialog">
<div class="modal-content">
<div class="modal-header">
<button type="button" class="close" datadismiss="modal" aria-hidden="true">x</button>
<h4 id="modalTitre" class="modal-title">Plus
d'informations sur le tigre de Sibrie</h4>
</div>
<div class="modal-body">
<blockquote>
Les tigres de Sibrie psent de 180 350 kg
pour les mles et de 100 200 kg pour les femelles. Le plus gros
tigre de Sibrie,
tu en 1950, atteignait les 384 kg. Le Tigre de Sibrie est le
troisime plus gros prdateur terrestre derrire l'ours kodiak et
l'ours polaire.
La longueur totale du corps avec la queue est comprise entre 2,7 et
3,8 m pour les mles et entre 2,4 et 2,75 m pour les femelles. La
longueur
du crne est de 341 383 mm pour les mles et 279 318 mm pour les
femelles.<hr>
<small class="pull-right">Wikipedia</small>
</blockquote>
</div>
</div>
</div>
</div>
<a href="#" class="list-group-item">
Tigre de Chine mridionale
<span class="badge">540</span>
</a>
<a href="#" class="list-group-item">
Tigre de Bali
<span class="badge">230</span>
</a>
<a href="#" class="list-group-item">
Tigre de d'Indochine
<span class="badge">240</span>
</a>
<a href="#" class="list-group-item">
Tigre de Malaisie
<span class="badge">1200</span>
</a>
<a href="#" class="list-group-item">
Tigre de Java
<span class="badge">710</span>
</a>
<a href="#" class="list-group-item">
Tigre de Sumatra
www.openclassrooms.com
156/252
<span class="badge">20</span>
</a>
<a href="#" class="list-group-item">
Tigre du Bengale
<span class="badge">40</span>
</a>
<a href="#" class="list-group-item">
Tigre de la Caspienne
<span class="badge">200</span>
</a>
</div>
</div>
</section>
<section class="col-sm-8">
<div id="carousel" class="carousel slide">
<ol class="carousel-indicators">
<li data-target="#carousel" data-slide-to="0"
class="active"></li>
<li data-target="#carousel" data-slide-to="1"></li>
<li data-target="#carousel" data-slide-to="2"></li>
<li data-target="#carousel" data-slide-to="3"></li>
</ol>
<div class="carousel-inner">
<div class="item active"> <img alt="Tigre"
src="images/photo-tigre.jpg"></div>
<div class="item"> <img alt="Tigre" src="images/phototigre1.jpg"></div>
<div class="item"> <img alt="Tigre" src="images/phototigre2.jpg"></div>
<div class="item"> <img alt="Tigre" src="images/phototigre3.jpg"></div>
</div>
</div>
</section>
</div>
<div class="row">
<section class="col-sm-12">
<div class="panel panel-primary">
<table class="table table-striped table-condensed">
<div class="panel-heading">
<h3 class="panel-title">Les menaces pour les
tigres</h3>
</div>
<thead>
<tr>
<th>Lieu</th>
<th>Menace</th>
</tr>
</thead>
<tbody>
<tr>
<td>Grand Mekong</td>
<td>Demande croissante de certaines parties de
lanimal pour la mdecine chinoise traditionnelle et fragmentation
des habitats du
fait du dveloppement non durable dinfrastructures</td>
</tr>
<tr>
<td>le de Sumatra</td>
<td>Production dhuile de palme et de ptes
papiers</td>
</tr>
<tr>
<td>Indonsie et Malaisie</td>
<td>Pte papier, lhuile de palme et le
caoutchouc</td>
</tr>
<tr>
<td>tats-Unis</td>
<td>Les tigres captifs reprsentent un danger pour
www.openclassrooms.com
157/252
www.openclassrooms.com
158/252
<div class="tab-content">
</section>
<section class="col-sm-4">
<address class="thumbnail">
<p>Vous pouvez me contacter cette adresse :</p>
<strong>Tigrou Alfred</strong><br>
Alle des fauves<br>
28645 Flins-sur-Loire<br>
</address>
</section>
</div>
</div>
<script src="assets/js/jquery.js"></script>
<script src="assets/js/bootstrap.min.js"></script>
<script>
$(function (){
$('.carousel').carousel();
$('blockquote a').tooltip();
$('.btn-group .btn:nth-child(1)').click(function () {
$('iframe').attr('src',
'http://www.youtube.com/embed/VmnIeLmjuHA');
})
$('.btn-group .btn:nth-child(2)').click(function () {
$('iframe').attr('src',
'http://www.youtube.com/embed/HQU2ZFnMbJg');
})
$('.btn-group .btn:nth-child(3)').click(function () {
$('iframe').attr('src',
'http://www.youtube.com/embed/qDBKzdNpiy0');
})
});
</script>
</body>
</html>
Tester
Je dtaillerai dans chaque chapitre la mise en uvre des diffrents plugins utiliss dans cette page.
Menu droulant
Menu droulant dans la barre de navigation
Le plugin jQuery Dropdown permet de faire de jolis menus droulants. Il suffit de modifier une barre de navigation pour ajouter
un menu droulant (voir figure suivante) :
Code : HTML
<!DOCTYPE HTML>
<html>
<head>
<meta charset="utf-8">
<link href="assets/css/bootstrap.css" rel="stylesheet">
</head>
<body>
<div class="container">
<nav class="navbar navbar-default">
<ul class="nav navbar-nav">
<li> <a href="#">Accueil</a> </li>
<li> <a href="#">Liens</a> </li>
<li class="dropdown">
<a data-toggle="dropdown" href="#">Tmoignages<b
class="caret"></b></a>
<ul class="dropdown-menu">
<li><a href="#">Dompteurs</a></li>
<li><a href="#">Zoos</a></li>
<li><a href="#">Chasseurs</a></li>
www.openclassrooms.com
159/252
<li class="divider"></li>
<li><a href="#">Autres tmoignages</a></li>
</ul>
</li>
<li> <a href="#">Rfrences</a> </li>
</ul>
</nav>
</div>
<script src="assets/js/jquery.js"></script>
<script src="assets/js/bootstrap.min.js"></script>
</body>
</html>
Vous remarquez l'utilisation de la classe btn-group ncessaire au fonctionnement du plugin, ainsi que la classe dropdowntoggle, mais pour le reste c'est pratiquement identique au code qu'on a vu pour la barre de navigation. Vous trouverez le
rsultat la figure suivante.
www.openclassrooms.com
160/252
C'est pas mal, mais comme a, on ne comprend pas vraiment que c'est un bouton spcial, on peut avoir un repre
graphique ?
On peut, en ajoutant une classe :
Code : HTML
<button class="btn btn-default dropdown-toggle" datatoggle="dropdown">Action <span class="caret"></span></button>
J'ai ajout la classe caret pour le bouton et maintenant celui-ci est bien identifi, comme la figure suivante.
Oui c'est bien, mais parfois j'ai besoin que le menu s'affiche vers le haut
www.openclassrooms.com
161/252
www.openclassrooms.com
162/252
toggle="dropdown"><span class="caret"></span></button>
<ul class="dropdown-menu">
<li><a href="#"><span class="glyphicon glyphicon-user"></span>
Dompteurs</a></li>
<li><a href="#"><span class="glyphicon glyphiconpicture"></span> Zoos</a></li>
<li><a href="#"><span class="glyphicon glyphiconscreenshot"></span> Chasseurs</a></li>
<li class="divider"></li>
<li><a href="#"><span class="glyphicon glyphicon-listalt"></span> Autres tmoignages</a></li>
</ul>
</div>
En-ttes
Pour ajouter des en-ttes pour subdiviser le menu, il faut utiliser la classe dropdown-header (voir figure suivante) :
Code : HTML
<div class="btn-group">
<button class="btn btn-info">Action</button>
<button class="btn btn-info dropdown-toggle" datatoggle="dropdown"><span class="caret"></span></button>
<ul class="dropdown-menu">
<li class="dropdown-header"> Personnel</li>
<li><a href="#"><span class="glyphicon glyphicon-user"></span>
Dompteurs</a></li>
<li><a href="#"><span class="glyphicon glyphiconscreenshot"></span> Chasseurs</a></li>
<li class="divider"></li>
<li class="dropdown-header"> Lieux</li>
<li><a href="#"><span class="glyphicon glyphicon-book"></span>
Bibliothques</a></li>
<li><a href="#"><span class="glyphicon glyphiconcutlery"></span> Restaurants</a></li>
</ul>
</div>
www.openclassrooms.com
163/252
Alignement droite
Par dfaut, le menu est align sur le ct gauche du bouton. On peut utiliser la classe pull-right pour l'aligner sur le ct
droit (voir figure suivante) :
Code : HTML
<div class="btn-group">
<button class="btn btn-warning">Action</button>
<button class="btn btn-warning dropdown-toggle" datatoggle="dropdown"><span class="caret"></span></button>
<ul class="dropdown-menu pull-right">
<li><a href="#"><span class="glyphicon glyphicon-user"></span>
Dompteurs</a></li>
<li><a href="#"><span class="glyphicon glyphiconpicture"></span> Zoos</a></li>
<li><a href="#"><span class="glyphicon glyphiconscreenshot"></span> Chasseurs</a></li>
<li class="divider"></li>
<li><a href="#"><span class="glyphicon glyphicon-listalt"></span> Autres tmoignages</a></li>
</ul>
</div>
www.openclassrooms.com
164/252
<div class="btn-group">
<button class="btn btn-danger">Action</button>
<button class="btn btn-danger dropdown-toggle" datatoggle="dropdown"><span class="caret"></span></button>
<ul class="dropdown-menu">
<li><a href="#"><span class="glyphicon glyphicon-book"></span>
Lire</a></li>
<li class="disabled"><a href="#"><span class="glyphicon glyphiconprint"></span> Imprimer</a></li>
<li><a href="#"><span class="glyphicon glyphicon-pencil"></span>
Ecrire</a></li>
</ul>
</div>
Des sous-menus
La version 3 de Bootstrap, principalement oriente vers l'informatique nomade, n'a pas reconduit la possibilit de crer des sousmenus. Il est toutefois possible avec quelques styles de rtablir cette possibilit (astuce trouve sur le site bootply). Prvoyez
ces styles pour votre page :
Code : CSS
.dropdown-submenu{position:relative;}
.dropdown-submenu>.dropdown-menu{top:0;left:100%;margintop:-6px;margin-left:-1px;
-webkit-border-radius:0 6px 6px 6px;-moz-border-radius:0 6px 6px
6px;border-radius:0 6px 6px 6px;}
.dropdown-submenu:hover>.dropdown-menu{display:block;}
.dropdown-submenu>a:after{display:block;content:"
";float:right;width:0;height:0;
border-color:transparent;border-style:solid;border-width:5px 0 5px
5px;border-left-color:#cccccc;margin-top:5px;margin-right:-10px;}
.dropdown-submenu:hover>a:after{border-left-color:#ffffff;}
.dropdown-submenu.pull-left{float:none;}.dropdown-submenu.pullleft>.dropdown-menu{left:-100%;margin-left:10px;
-webkit-border-radius:6px 0 6px 6px;-moz-border-radius:6px 0 6px
6px;border-radius:6px 0 6px 6px;}
www.openclassrooms.com
165/252
screenshot"></span> Chasseurs</a></li>
<li class="divider"></li>
<li class="dropdown-submenu">
<a tabindex="-1" href="#"><span class="glyphicon glyphiconlist-alt"></span> Autres tmoignages</a>
<ul class="dropdown-menu">
<li><a tabindex="-1" href="#"><span class="glyphicon
glyphicon-eye-close"></span> Non classifis</a></li>
<li class="dropdown-submenu">
<a href="#">Autres...</a>
<ul class="dropdown-menu">
<li><a href="#"><span class=" glyphicon glyphiconcutlery"></span> Restaurateurs</a></li>
<li><a href="#"><span class="glyphicon glyphiconglobe"></span> Voyageurs</a></li>
</ul>
</li>
<li><a href="#"><span class="glyphicon glyphicon-shoppingcart"></span> Commerants</a></li>
<li><a href="#"><span class="glyphicon glyphiconwrench"></span> Mcaniciens</a></li>
</ul>
</li>
</ul>
</div>
Des sous-menus
www.openclassrooms.com
166/252
<li class="divider"></li>
<li><a href="#">Autres tmoignages</a></li>
</ul>
</div>
En l'tat le menu ne fonctionne plus. Maintenant nous voulons qu'il se dclenche au survol. Il faut ajouter un peu de Javascript
pour grer l'vnement correspondant et utiliser la mthode dropdown du plugin :
Code : HTML
<script>
$('.dropdown-toggle').mouseover(function() {
$(this).dropdown('toggle');
});
</script>
Maintenant, le menu s'ouvre au survol. Mais on rencontre un petit inconvnient : on n'arrive plus le refermer ! Pourtant,
normalement, un "toggle" est cens changer chaque fois l'tat. On va arranger cela. Le plugin ajoute la classe open dans la
<div> qui contient la classe btn-group lorsque le menu est ouvert. Il faut donc s'arranger pour supprimer cette classe au
survol si elle est prsente :
Code : HTML
<script>
$('.dropdown-toggle').mouseover(function() {
if( $('.btn-group').hasClass('open') ) $('.btngroup').removeClass('open');
else $(this).dropdown('toggle');
});
</script>
La syntaxe que j'ai utilise n'est pas la plus concise, mais elle a le mrite d'tre lisible. Maintenant le menu se referme au survol s'il
tait ouvert. En revanche, il ne se referme pas lorsque l'on clique sur une option. Il faudrait donc prvoir de le faire lors du
traitement de l'option slectionne.
Les vnements
Vous disposez galement de 4 vnements pour ce composant :
vnement
Description
show.bs.dropdown
Fentre modale
www.openclassrooms.com
167/252
Le principe est simple : on cre un <div> englobant avec la classe modal, qui se charge de configurer et positionner la fentre.
On cre un second <div> englobant avec la classe modal-dialog. On peut ensuite organiser la fentre avec une classe
englobante modal-content, un en-tte grce la classe modal-header et un corps avec modal-body. On prvoit
galement une action pour fermer la fentre (sinon elle va toujours rester ouverte !) avec un bouton et la classe close, et la
proprit data-dismiss="modal". Il ne reste plus qu' crer un bouton pour ouvrir la fentre en faisant correspondre
bouton et fentre avec un identifiant, et en utilisant data-toggle="modal" pour que le plugin fonctionne. Au dpart, on
n'a donc que le bouton de la figure suivante l'cran.
Bouton de commande
Et quand on clique, on obtient la fentre modale et le fond devient gris, comme la figure suivante.
Fentre
Un pied de page
On peut amliorer un peu l'esthtique en crant un pied de page avec la classe modal-footer et un bouton pour sortir,
comme la figure suivante.
Code : HTML
www.openclassrooms.com
168/252
Pied de
Une transition
Il est possible galement d'obtenir un effet de transition en ajoutant la classe fade, comme la figure suivante :
Code : HTML
<div class="modal fade" id="infos">
www.openclassrooms.com
169/252
www.openclassrooms.com
170/252
<!DOCTYPE HTML>
<html>
<head>
<meta charset="utf-8">
<link href="assets/css/bootstrap.css" rel="stylesheet">
<style type="text/css">
body { padding-top: 20px; }
</style>
</head>
<body>
<div class="container">
<button data-toggle="modal" href="remote.html" data-target="#infos"
class="btn btn-primary">
informations
</button>
<div class="modal fade" id="infos">
<div class="modal-dialog">
<div class="modal-content"></div>
</div>
</div>
</div>
</div>
<script src="assets/js/jquery.js"></script>
<script src="assets/js/bootstrap.min.js"></script>
</body>
</html>
Le bouton comporte l'adresse de la page charger avec l'attribut href. On se contente de prvoir le contenant avec la classe
modal-content. Quand on clique sur le bouton, jQuery charge la page cible et l'injecte dans la <div> qui comporte la
classe modal-content.
Cette mise en uvre a chang avec la version 3.1 de Bootstrap. Auparavant on se contentait d'une div avec la classe
modal.
www.openclassrooms.com
171/252
Il faut prvoir les classes pour faire bien apparatre la fentre modale. Voici le rsultat :
www.openclassrooms.com
172/252
primary">Page 2</button>
<button id="page3" type="button" class="btn btnprimary">Page 3</button>
</div>
<div class="modal fade" id="infos">
<div class="modal-dialog">
<div class="modal-content"></div>
</div>
</div>
</div>
<script src="assets/js/jquery.js"></script>
<script src="assets/js/bootstrap.min.js"></script>
<script>
$("body").on("hidden.bs.modal", ".modal", function () {
$(this).removeData("bs.modal");
});
$("#page1").click(function() {
$("#infos").modal({ remote: "remote1.html" } ,"show");
});
$("#page2").click(function() {
$("#infos").modal({ remote: "remote2.html" }, "show");
});
$("#page3").click(function() {
$("#infos").modal({ remote: "remote3.html" }, "show");
});
</script>
</body>
</html>
www.openclassrooms.com
173/252
www.openclassrooms.com
174/252
Tester
J'ai intgr le code ARIA pour l'accessibilit. Le rle a t dfini comme dialog (dfinition du W3C), c'est ce qui est prconis
par les auteurs de Bootstrap. Si on lit la dfinition, on parle de fentre qui interrompt le flux normal et qui requiert une entre de
l'utilisateur (ce qui n'est pas le cas ici). J'avoue ne m'tre jamais vraiment inquit de cet aspect d'accessibilit et la lecture de la
prconisation W3C est quelque peu laborieuse. il me semble toutefois judicieux de prendre en compte les besoins des personnes
prsentant un dficit sensoriel. En parcourant les rles, j'aurais plutt eu tendant utiliser complmentary dans le cas prsent.
La proprit aria-labelledby fait rfrence au titre de la fentre modale. Par exemple, un lecteur dcran va lire le texte
correspondant pour renseigner l'utilisateur sur le contenu de la fentre modale. Enfin la proprit aria-hidden indique de ne pas
tenir compte de l'lment. videmment, ces ajouts d'accessibilit n'ont vraiment de sens que si toute la page est traite de cette
faon
www.openclassrooms.com
175/252
Maintenant lorsqu'on clique sur le bouton, il ne se passe plus rien. Pour activer le plugin, il faut utiliser du Javascript :
Code : JavaScript
$('.btn').click(function() {
$('.modal').modal('show');
});
On peut aussi modifier le comportement de la fentre avec des proprits. Par exemple, la proprit boolenne keyboard, qui
est normalement vraie, permet de fermer la fentre par action sur la touche d'chappement. On peut la renseigner en compltant
notre exemple. Mais il faut aussi renseigner la proprit show qui est vraie par dfaut, et ouvre la fentre ds le chargement de la
page, ce que l'on ne dsire videmment pas. Voici le code correspondant :
Code : JavaScript
$('.modal').modal({
keyboard: false,
show: false
});
Les vnements
Vous disposez galement de 5 vnements pour ce composant :
vnement Description
show.bs.modal
shown.bs.modal
hide.bs.modal
hidden.bs.modal
loaded.bs.modal
Vous avez par exemple un formulaire sur la page modale et vous dsirez que le premier contrle soit actif, vous pouvez le raliser
facilement ainsi :
Code : JavaScript
www.openclassrooms.com
176/252
$(".modal").on('shown.bs.modal', function(){
$('input:first').focus();
});
Onglets
Un premier exemple simple
Le plugin Tab permet de crer facilement des onglets, comme la figure suivante.
Code : HTML
<ul class="nav nav-tabs">
<li class="active"><a href="#accueil" datatoggle="tab">Accueil</a></li>
<li><a href="#livres" data-toggle="tab">Livres</a></li>
<li><a href="#temoignages" datatoggle="tab">Tmoignages</a></li>
</ul>
<div class="tab-content">
<div class="tab-pane active" id="accueil">Texte d'accueil</div>
<div class="tab-pane" id="livres">Tous les livres</div>
<div class="tab-pane" id="tmoignages">Tous les
temoignages</div>
</div>
Onglets simples
On utilise une liste et quelques classes, rien de bien compliqu. Les classes nav et nav-tab s'occupent de la mise en forme. Le
plugin est activ par data-toggle="tab". On pointe le bon contenu avec href.
Un autre aspect
Si cette apparence tabulaire ne vous convient pas, vous pouvez changer pour un autre aspect avec une modification minime,
comme la figure suivante.
Code : HTML
<ul class="nav nav-pills">
Onglets styliss
Transition progressive
Pour obtenir un effet progressif, il suffit d'ajouter la classe fade pour chacun des tab-pane :
www.openclassrooms.com
177/252
Code : HTML
<ul class="nav nav-pills">
<li class="active"><a href="#accueil" datatoggle="tab">Accueil</a></li>
<li><a href="#livres" data-toggle="tab">Livres</a></li>
<li><a href="#temoignages" datatoggle="tab">Tmoignages</a></li>
</ul>
<div class="tab-content">
<div class="tab-pane fade active in" id="accueil">Texte
d'accueil</div>
<div class="tab-pane fade" id="livres">Tous les livres</div>
<div class="tab-pane fade" id="temoignages">Tous les
tmoignages</div>
</div>
Il faut ajouter aussi la classe in pour le tab-pane actif pour faire apparatre le texte (opacity 1) au chargement de la page.
Empilage
Si a ne vous convient encore pas (mais vous tes difficile l
Code : HTML
<ul class="nav nav-pills nav-stacked">
Onglets empils
Justification
Il est aussi possible de faire en sorte que les onglets occupent tout l'espace disponible en se rpartissant de faon homogne
(voir figure suivante).
Code : HTML
<div class="col-lg-8">
<ul class="nav nav-pills nav-justified">
<li class="active"><a href="#accueil" datatoggle="tab">Accueil</a></li>
<li><a href="#livres" data-toggle="tab">Livres</a></li>
<li><a href="#temoignages" datatoggle="tab">Tmoignages</a></li>
</ul>
<div class="tab-content">
<div class="tab-pane active" id="accueil">Texte
d'accueil</div>
<div class="tab-pane" id="livres">Tous les livres</div>
<div class="tab-pane" id="temoignages">Tous les
www.openclassrooms.com
178/252
tmoignages</div>
</div>
</div>
Onglets justifis
Dsactiver un lien
Vous pouvez marquer un lien comme inactif avec la classe disabled, comme la figure suivante :
Code : HTML
<ul class="nav nav-pills">
<li class="active"><a href="#accueil" datatoggle="tab">Accueil</a></li>
<li class="disabled"><a href="#livres" datatoggle="tab">Livres</a></li>
<li><a href="#temoignages" datatoggle="tab">Tmoignages</a></li>
</ul>
<div class="tab-content">
<div class="tab-pane active" id="accueil">Texte d'accueil</div>
<div class="tab-pane" id="livres">Tous les livres</div>
<div class="tab-pane" id="temoignages">Tous les
tmoignages</div>
</div>
Un onglet dsactiv
Mais ce n'est pas parce qu'il apparat comme inactif qu'il l'est vraiment ! Pour le rendre rellement inactif, il faut supprimer la
proprit data-toggle :
Code : HTML
<li class="disabled"><a href="#livres">Livres</a></li>
www.openclassrooms.com
179/252
Onglets latraux
Vous pouvez adapter la disposition et mettre par exemple les onglets empils gauche, comme la figure suivante :
Code : HTML
<ul class="nav nav-pills nav-stacked pull-left">
<li><a href="#accueil" data-toggle="tab">Accueil</a></li>
<li class="active"><a href="#livres" datatoggle="tab">Livres</a></li>
<li><a href="#temoignages" data-toggle="tab">Tmoignages</a></li>
</ul>
<div class="tab-content">
<div class="tab-pane" id="accueil">Texte d'accueil</div>
<div class="tab-pane" id="temoignages">Tous les
tmoignages</div>
<div class="tab-pane active" id="livres">Tous les livres</div>
</div>
Onglets gauche
www.openclassrooms.com
180/252
Onglets droite
La page d'exemple
Notre page d'exemple est maintenant enrichie d'onglets dans la partie infrieure, comme la figure suivante.
Tester
Voici la partie du code concerne :
Code : HTML
<section class="col-sm-8">
<ul class="nav nav-pills">
<li class="active"><a href="#contact" datatoggle="tab">Contact</a></li>
<li><a href="#informations" data-toggle="tab">Informations
pratiques</a></li>
</ul>
<div class="tab-content">
<div class="tab-pane active fade in" id="contact">
<form class="well">
<h4><span class="label label-default">Si vous voulez me
laisser un message</span></h4>
<h4>Comment m'avez-vous trouv ?</h4>
<fieldset>
<label for="ami" class="radio">
<input type="radio" name="origine" value="ami" id="ami">
Par un ami
www.openclassrooms.com
181/252
</label>
<label for="web" class="radio">
<input type="radio" name="origine" value="web" id="web">
Sur le web
</label>
<label for="hasard" class="radio">
<input type="radio" name="origine" value="hasard"
id="hasard">
Par hasard
</label>
<label for="autre" class="radio">
<input type="radio" name="origine" value="autre"
id="autre">
Autre...
</label>
<label for="textarea">Votre message :</label>
<textarea id="textarea" rows="4" class="formcontrol"></textarea>
<p class="help-block">Vous pouvez agrandir la
fentre</p>
<button class="btn btn-primary" type="submit"><span
class="glyphicon glyphicon-ok-sign"></span> Envoyer</button>
</fieldset>
</form>
</div>
<div class="tab-pane fade" id="informations">
<div class="well">
<h2>Informations pratiques</h2>
<p>Si vous tes intresss par la protection des tigres et
si vous dsirez prendre part aux actions menes... blablabla...</p>
</div>
</div>
<div class="tab-content">
</section>
Utilisation de Javascript
Activation des onglets
Nous avons ci-dessus activ le plugin avec la proprit data-toggle="tab". Il est aussi possible d'utiliser le plugin
directement avec du Javascript. Voici un des exemples sans la proprit renseigne :
Code : HTML
<ul class="nav nav-pills nav-stacked pull-right">
<li><a href="#accueil" data-toggle="tab">Accueil</a></li>
<li class="active"><a href="#livres" datatoggle="tab">Livres</a></li>
<li><a href="#temoignages" data-toggle="tab">Tmoignages</a></li>
</ul>
<div class="tab-content">
<div class="tab-pane" id="accueil">Texte d'accueil</div>
<div class="tab-pane" id="temoignages">Tous les
tmoignages</div>
<div class="tab-pane active" id="livres">Tous les livres</div>
</div>
Les onglets sont devenus inactifs. Pour que a fonctionne il faut ajouter un peu de Javascript :
Code : JavaScript
$('a').click(function (e) {
e.preventDefault();
www.openclassrooms.com
182/252
$(this).tab('show');
});
Tous les onglets doivent tre activs, c'est pour cette raison que j'ai choisi pour ma page le slecteur 'a' qui est sans ambigut.
Les vnements
Vous disposez galement de 2 vnements pour ce composant :
vnement
Description
show.bs.tab
D'autre part il est possible de connatre l'onglet actif avec event.target et l'onglet prcdemment slectionn avec
event.relatedTarget. On va utiliser tout cela pour afficher le nom de l'onglet actuel et du prcdent chaque
changement. On va donc ajouter le code HTML pour accueillir l'information :
Code : HTML
<ul class="nav nav-pills">
<li class="active"><a href="#accueil">Accueil</a></li>
<li><a href="#livres">Livres</a></li>
<li><a href="#temoignages">Tmoignages</a></li>
</ul>
<div class="tab-content">
<div class="tab-pane active" id="accueil">Texte d'accueil</div>
<div class="tab-pane" id="livres">Tous les livres</div>
<div class="tab-pane" id="temoignages">Tous les
tmoignages</div>
</div>
<hr>
<p id='actif'><strong>Onglet actif </strong>: <span></span></p>
<p id='precedent'><strong>Onglet prcdent </strong>:
<span></span></p>
Il ne reste plus qu' prvoir le code Javascript pour dclencher le plugin et mettre en place l'coute de l'vnement et agir en
consquence (voir figure suivant) :
Code : JavaScript
$(function(){
$('a')
.click(function (e) {
e.preventDefault();
$(this).tab('show');
})
.on('shown.bs.tab', function (e) {
$('#actif span').html($(e.target).text());
$('#precedent span').html($(e.relatedTarget).text());
});
});
www.openclassrooms.com
183/252
Boutons
Bouton bascule
On a parfois besoin de boutons 2 tats stabiliss : repos et appuy. Le plugin permet de raliser cela facilement. Il suffit de
crer le bouton en prvoyant data-toggle="button" (comme la figure suivante) :
Code : HTML
<a class="btn btn-success" data-toggle="button">Simple Bascule</a>
Bouton bascule
www.openclassrooms.com
184/252
Code : HTML
<div class="btn-group" data-toggle="buttons">
<label class="btn btn-success">
<input type="radio">Un
</label>
<label class="btn btn-success">
<input type="radio">Deux
</label>
<label class="btn btn-success">
<input type="radio">Trois
</label>
</div>
Ensuite, on cre le code pour grer l'effet. La mthode loading provoque le changement du texte du bouton avec ce qui est
indiqu dans data-loading-text et la mthode reset ramne le bouton son tat initial (voir figure suivante):
Code : JavaScript
$(function (){
$('a').click(function () {
with($(this)) {
button('loading');
setTimeout(function () {
button('reset');
}, 4000);
}
})
});
Tester
Maintenant voyons un cas d'utilisation un peu plus raliste que notre minuterie. Nous avons une image lourde charger, et nous
voulons que le bouton change d'tat le temps de chargement de l'image. Voil le bouton et la balise prte recevoir l'image :
www.openclassrooms.com
185/252
Code : HTML
<a class="btn btn-primary" data-loading-text="Chargement en
cours...">Chargez l'image !</a>
<img id="mon_image">
Tester
Avec cet exemple, vous ne verrez certainement l'effet qu'une fois dans votre navigateur, tant donn qu'ensuite l'image sera en
cache.
La page d'exemple
La page d'exemple a t agrmente de boutons groups de type "radio" pour choisir une vido (voir la figure suivante).
www.openclassrooms.com
186/252
Tester
Code : HTML
<div class="btn-group" data-toggle="buttons">
<label class="btn btn-primary">
<input type="radio">Vido 1
</label>
<label class="btn btn-primary">
<input type="radio">Vido 2
</label>
<label class="btn btn-primary">
<input type="radio">Vido 3
</label>
</div>
Carrousel
La page d'exemple
La page d'exemple comporte un carrousel (voir la figure suivante). Pour information, ce terme prend un R en anglais et deux en
franais.
d'exemple
Tester
www.openclassrooms.com
187/252
Pour chaque item on place une balise <img> pour rfrencer une image. On utilise la classe active pour dsigner l'image qui
doit apparatre en premier. J'ai utilis une classe col-lg-8 pour calibrer le carrousel et une classe col-lg-offset-2 pour
le centrer. Les 3 images sont aux mmes dimensions. Il nous faut aussi initialiser le carrousel avec jQuery. Par dfaut les images
dfilent au rythme de 5s (voir figure suivante) :
Un carrousel simple
Tester
www.openclassrooms.com
188/252
Tester
Notez que le titre vient au-dessus de l'image et qu'il faut donc adapter le style aux couleurs prsentes sur l'image pour
que le titre soit lisible.
www.openclassrooms.com
189/252
Tester
Notez que l'indicateur vient au-dessus de l'image et qu'il faut donc adapter le style aux couleurs prsentes sur l'image
pour qu'il soit lisible.
www.openclassrooms.com
190/252
des images
Tester
Notez que les chevrons viennent au-dessus de l'image et qu'il faut donc adapter le style aux couleurs prsentes sur
l'image pour qu'ils soient visibles.
Amliorer la prsentation
On peut amliorer la prsentation du diaporama avec du style, comme la figure suivante :
Code : CSS
.carousel-inner {
border-radius: 5px 5px 5px 5px;
border: 5px solid white;
box-shadow: 0 1px 1px rgba(0, 0, 0, 0.3);
}
Amlioration de la prsentation
Mais on peut aussi utiliser une classe de Bootstrap pour obtenir un effet sympathique sans ajouter de style (voir figure
suivante) :
www.openclassrooms.com
191/252
Code : HTML
<div class="carousel-inner thumbnail">
pour la prsentation
Testez !
Cycle et pause
On peut avec jQuery commander le dmarrage du cycle ou la pause (voir figure suivante) :
Code : HTML
<div class="container">
<div class="col-lg-2">
<div class="btn-group" data-toggle="buttons">
<label class="btn btn-primary active" id="cycle">
<input type="radio" name="options">Cycle
</label>
<label class="btn btn-primary" id="pause">
<input type="radio" name="options">Pause
</label>
</div>
</div>
<div class="col-lg-8">
<div id="carousel" class="carousel slide">
<div class="carousel-inner">
<div class="item active"> <img alt=""
src="images/img47.png"></div>
www.openclassrooms.com
192/252
boutons
Tester
Les deux boutons commandent le diaporama. Une bonne occasion pour revoir comment configurer des boutons de type "radio"
avec Bootstrap
.
Autres commandes
Voici maintenant un exemple plus complet avec une palette de boutons de commande (voir figure suivante) :
Code : HTML
<div class="container">
<div class="row">
<div class="col-lg-offset-2 col-lg-8">
<div id="carousel" class="carousel slide">
<div class="carousel-inner">
<div class="item active"> <img alt=""
src="images/img47.png"></div>
<div class="item"> <img alt=""
src="images/img48.png"></div>
<div class="item"> <img alt=""
src="images/img49.png"></div>
</div>
</div>
</div>
</div>
<div class="row">
www.openclassrooms.com
193/252
<div class="col-lg-12">
<div class="btn-group" data-toggle="buttons">
<label class="btn btn-success" id="first">
<input type="radio" name="options"><span class="glyphicon
glyphicon-fast-backward"></span>
</label>
<label class="btn btn-success" id="previous">
<input type="radio" name="options"><span class="glyphicon
glyphicon-step-backward"></span>
</label>
<label class="btn btn-success" id="pause">
<input type="radio" name="options"><span class="glyphicon
glyphicon-pause"></span>
</label>
<label class="btn btn-success active" id="play">
<input type="radio" name="options"><span class="glyphicon
glyphicon-play"></span>
</label>
<label class="btn btn-success" id="next">
<input type="radio" name="options"><span class="glyphicon
glyphicon-step-forward"></span>
</label>
<label class="btn btn-success" id="last">
<input type="radio" name="options"><span class="glyphicon
glyphicon-fast-forward"></span>
</label>
</div>
</div>
</div>
</div>
<script src="assets/js/jquery.js"></script>
<script src="assets/js/bootstrap.min.js"></script>
<script>
$(function () {
$('.carousel').carousel({ interval: 2000 });
$('#first').click(function() { $('.carousel').carousel(0); });
$('#previous').click(function() {
$('.carousel').carousel('prev'); });
$('#pause').click(function() { $('.carousel').carousel('pause');
});
$('#play').click(function() { $('.carousel').carousel('cycle');
});
$('#next').click(function() { $('.carousel').carousel('next');
});
$('#last').click(function() { $('.carousel').carousel(2); });
});
</script>
www.openclassrooms.com
194/252
commande du carrousel
Tester
Les vnements
Vous disposez de 2 vnements pour ce composant :
vnement
Description
Compltons l'exemple prcdent en prvoyant l'affichage de l'index de la diapositive en cours ainsi que du nombre total de
diapositives (voir figure suivante). Voici le code avec ce complment :
Code : HTML
<div class="container">
<div class="row">
<div class="col-lg-offset-2 col-lg-8">
<div id="carousel" class="carousel slide">
<div class="carousel-inner">
<div class="item active"> <img alt=""
src="images/img47.png"></div>
<div class="item"> <img alt=""
src="images/img48.png"></div>
<div class="item"> <img alt=""
src="images/img49.png"></div>
</div>
</div>
</div>
</div>
<div class="row">
<div class="col-lg-12">
<div class="btn-group" data-toggle="buttons">
<label class="btn btn-success" id="first">
<input type="radio" name="options"><span class="glyphicon
glyphicon-fast-backward"></span>
</label>
<label class="btn btn-success" id="previous">
<input type="radio" name="options"><span class="glyphicon
www.openclassrooms.com
195/252
glyphicon-step-backward"></span>
</label>
<label class="btn btn-success" id="pause">
<input type="radio" name="options"><span class="glyphicon
glyphicon-pause"></span>
</label>
<label class="btn btn-success active" id="play">
<input type="radio" name="options"><span class="glyphicon
glyphicon-play"></span>
</label>
<label class="btn btn-success" id="next">
<input type="radio" name="options"><span class="glyphicon
glyphicon-step-forward"></span>
</label>
<label class="btn btn-success" id="last">
<input type="radio" name="options"><span class="glyphicon
glyphicon-fast-forward"></span>
</label>
</div>
<p><span class="label label-info"></span></p>
</div>
</div>
</div>
<script src="assets/js/jquery.js"></script>
<script src="assets/js/bootstrap.min.js"></script>
<script>
$(function () {
$('.carousel').carousel({ interval: 2000 });
$('#first').click(function() { $('.carousel').carousel(0); });
$('#previous').click(function() {
$('.carousel').carousel('prev'); });
$('#pause').click(function() { $('.carousel').carousel('pause');
});
$('#play').click(function() { $('.carousel').carousel('cycle');
});
$('#next').click(function() { $('.carousel').carousel('next');
});
$('#last').click(function() { $('.carousel').carousel(2); });
$('.carousel').on('slid.bs.carousel', function () {
var total = $('.item').length;
var current = $('.item.active').index() + 1;
$('.label').text(current + ' / '+ total);
});
});
</script>
Tester
Pour rester dans l'utilisation de Bootstrap, j'ai prvu l'affichage dans un badge. Pour dterminer le nombre de diapositives, on
compte le nombre de fois o on trouve la classe item. Pour la diapositive en cours, on recherche la classe active.
Info-bulles et Popover
La page d'exemple
www.openclassrooms.com
196/252
Info-bulle
Un exemple simple
Le but est d'obtenir de jolies info-bulles, comme la figure suivante.
On utilise des balises <a> avec l'attribut data-toggle gal tooltip. Le contenu de l'info-bulle se place dans l'attribut
title. Si vous testez ce code il ne se passera rien parce qu'il faut initialiser le plugin avec jQuery :
Code : JavaScript
www.openclassrooms.com
197/252
$(function (){
$('a').tooltip();
});
Il suffit d'utiliser la fonction tooltip avec le bon slecteur, ici on a choisit la balise <a> parce qu'on veut une info-bulle sur
tous les liens de la page. Dans un contexte plus complexe il faudrait videmment affiner la slection, mais ce n'est pas l'objet de
ce cours.
Positionnement de l'info-bulle
On peut changer le positionnement de l'info-bulle qui par dfaut se situe juste au-dessus avec l'option placement. Les
possibilits sont top (au-dessus, c'est l'option par dfaut), bottom (au-dessous), left ( gauche) et right ( droite). Voici
un exemple d'utilisation avec le mme code HTML :
Code : JavaScript
$(function (){
$('a:first-child').tooltip({ placement:'left' });
$('a:last-child').tooltip({ placement:'bottom' });
});
Ici on utilise l'option placement en la dfinissant left pour le premier lien et bottom pour le second (voir figure
suivante).
Info-bulle au-dessous
Dclenchement de l'info-bulle
Par dfaut l'info-bulle est dclenche lorsque le curseur de la souris se dplace sur l'lment concern ou si celui-ci a le focus. On
peut modifier ce comportement avec l'option trigger. Les possibilits sont click, hover, focus et manual. Voici un
exemple d'utilisation avec le mme code HTML :
Code : JavaScript
$(function (){
$('a:first-child').tooltip({ trigger:'click' });
$('a:last-child').tooltip({ placement: 'bottom', trigger:'hover
click' });
});
Ici on utilise l'option trigger en la dfinissant click pour le premier lien et hover et click pour le second (voir figure
suivante).
www.openclassrooms.com
198/252
Tester
Ici on utilise l'option delay en la dfinissant 400 ms pour le premier lien pour l'affichage et la disparition. On diffrencie avec
400 ms pour l'affichage et 200 ms pour la disparition pour le second (voir figure suivante).
Tester
Popover
Un exemple simple
Un popover est une grosse info-bulle. Le fonctionnement est identique ce que nous avons vu prcdemment. Voici un premier
exemple de mise en uvre au niveau HTML :
Code : HTML
<a href="#" id="pop" class="btn btn-info" data-toggle="popover"
data-content="C'est tout simple faire !" title="Test du Popover">
Cliquez sur moi pour le popover</a>
On utilise des balises <a> avec l'attribut data-toggle gal popover. Le contenu se place dans l'attribut datacontent et le titre dans l'attribut title. Si vous testez ce code, il ne se passera rien parce qu'il faut initialiser le plugin avec
jQuery :
Code : JavaScript
$(function (){
$("#pop").popover();
});
Il suffit d'utiliser la fonction popover avec le bon slecteur, ici on a choisi tout simplement un id. Vous verrez le rsultat la
figure suivante.
www.openclassrooms.com
199/252
Positionnement
Comme pour l'info-bulle on peut modifier le positionnement avec l'option placement avec les mmes possibilits top (audessus, c'est l'option par dfaut), bottom (au-dessous), left( gauche) et right ( droite) (voir figure suivante) :
Code : JavaScript
$("#pop").popover({placement:'left'});
Popover gauche
Dlai
On peut aussi dfinir un dlai d'apparition et de disparition :
Code : JavaScript
$("#pop").popover({delay: { show: 800, hide: 300 }});
Tester !
Dclenchement
Le comportement par dfaut est un dclenchement au clic sur l'lment, mais on peut facilement changer ce comportement :
Code : JavaScript
$("#pop").popover({placement:'bottom', trigger:'hover'});
Ici on a utilis l'option trigger pour avoir un dclenchement au passage (hover) sur l'lment (les autres possibilits sont
click, focuset manual). On montre aussi qu'on peut cumuler plusieurs options puisqu'on a aussi dfini le positionnement
en bas avec bottom.
Tester
Avec l'option manual on peut dfinir une action quelconque pour dclencher le popover que l'on veut. Regardez cet exemple au
niveau HTML :
Code : HTML
www.openclassrooms.com
200/252
<div class="well">
<img id="img" data-toggle="popover" data-content="Je suis en
colre !" title="Attention vous !" src="images/visage.png">
<a href="#" id="pop" class="btn btn-info pull-right" >Cliquer sur
moi plusieurs fois pour le popover</a>
</div>
Cette fois, on a dfini le popover au niveau d'une image et on se propose de le dclencher partir d'un bouton. Voici le code
jQuery correspondant :
Code : JavaScript
$("#img").popover({trigger:'manual'});
$("#pop").click(function() {
$('#img').popover('toggle');
});
Popover au
Effet accordon
Un exemple simple
Le plugin accordon (Collapse) est bien adapt au composant panel, voici un premier exemple (voir figure suivante) :
www.openclassrooms.com
201/252
Code : HTML
<div class="panel panel-default col-lg-6">
<h4> Les plugins de Bootstrap</h4>
<div class="panel-heading">
<a class="accordion-toggle" href="#item1" datatoggle="collapse"> Accordon </a>
</div>
<div id="item1" class="panel-collapse collapse in">
<div class="panel-body"> Ce plugin permet de crer des effets
"accordon" totalement paramtrables</div>
</div>
<div class="panel-heading">
<a class="accordion-toggle" href="#item2" datatoggle="collapse"> Fentre modale </a>
</div>
<div id="item2" class="panel-collapse collapse">
<div class="panel-body"> Ce plugin permet de crer des fentres
modales lgantes avec une grande simplicit. </div>
</div>
<div class="panel-heading">
<a class="accordion-toggle" href="#item3" datatoggle="collapse"> Carousel </a>
</div>
<div id="item3" class="panel-collapse collapse">
<div class="panel-body"> Ce plugin permet de faire dfiler des
images ou des vido, ou tout autre lment mdia avec une mise
en forme esthtique </div>
</div>
Effet accordon
Tester
Il faut distinguer deux lments :
Le dclencheur sur lequel on clique : ici c'est un lien avec une balise <a>. Il doit comporter la classe accordion-toggle,
comporter la proprit data-toggle="collapse" et videmment la cible avec href
La zone masquer ou dmasquer : elle est englobe avec un <div> quip de la classe collapse
Le lien entre le dclencheur et la zone se fait par l'identifiant de la zone. La classe in permet de dterminer si une zone est affiche
ou pas. Dans mon exemple, j'ai mis cette classe pour la premire zone, celle-ci s'affiche donc ds le chargement. Si vous testez le
composant, vous verrez qu'il se contente d'affecter cette classe. J'ai un peu trich avec l'utilisation du composant panel...
www.openclassrooms.com
202/252
Code : HTML
<div class="panel-group col-lg-6">
<h3> Les plugins de Bootstrap</h3>
<div class="panel panel-default">
<div class="panel-heading">
<h3 class="panel-title">
<a class="accordion-toggle" href="#item1" datatoggle="collapse"> Accordon </a>
</h3>
</div>
<div id="item1" class="panel-collapse collapse in">
<div class="panel-body"> Ce plugin permet de crer des
effets "accordon" totalement paramtrables</div>
</div>
</div>
<div class="panel panel-default">
<div class="panel-heading">
<h3 class="panel-title">
<a class="accordion-toggle" href="#item2" datatoggle="collapse"> Fentre modale </a>
</h3>
</div>
<div id="item2" class="panel-collapse collapse">
<div class="panel-body"> Ce plugin permet de crer des
fentres modales lgantes avec une grande simplicit. </div>
</div>
</div>
<div class="panel panel-default">
<div class="panel-heading">
<h3 class="panel-title">
<a class="accordion-toggle" href="#item3" datatoggle="collapse"> Carousel </a>
</h3>
</div>
<div id="item3" class="panel-collapse collapse">
<div class="panel-body"> Ce plugin permet de faire dfiler
des images ou des vido, ou tout autre lment mdia avec une mise
en forme esthtique </div>
</div>
</div>
</div>
www.openclassrooms.com
203/252
www.openclassrooms.com
204/252
zone la fois
Il a fallu ajouter un identifiant (#monaccordeon) la balise englobante et faire une rfrence dans les dclencheurs avec dataparent="#monaccordeon".
De jolies en-ttes
a fonctionne bien mais c'est un peu triste sans couleur, comme on utilise le composant panel, c'est facile arranger (voir figure
suivante) :
Code : HTML
<div id="monaccordeon" class="panel-group col-lg-6">
<h3> Les plugins de Bootstrap</h3>
<div class="panel panel-info">
<div class="panel-heading">
<h3 class="panel-title">
<a class="accordion-toggle" href="#item1" dataparent="#monaccordeon" data-toggle="collapse"> Accordon </a>
</h3>
</div>
<div id="item1" class="panel-collapse collapse in">
<div class="panel-body"> Ce plugin permet de crer des
effets "accordon" totalement paramtrables</div>
</div>
</div>
<div class="panel panel-info">
<div class="panel-heading">
<h3 class="panel-title">
<a class="accordion-toggle" href="#item2" dataparent="#monaccordeon" data-toggle="collapse"> Fentre modale </a>
</h3>
</div>
<div id="item2" class="panel-collapse collapse">
<div class="panel-body"> Ce plugin permet de crer des
fentres modales lgantes avec une grande simplicit. </div>
</div>
</div>
<div class="panel panel-info">
<div class="panel-heading">
<h3 class="panel-title">
<a class="accordion-toggle" href="#item3" dataparent="#monaccordeon" data-toggle="collapse"> Carrousel </a>
</h3>
</div>
<div id="item3" class="panel-collapse collapse">
<div class="panel-body"> Ce plugin permet de faire dfiler
www.openclassrooms.com
205/252
des images ou des vido, ou tout autre lment mdia avec une mise
en forme esthtique </div>
</div>
</div>
</div>
Des en-ttes
esthtiques
www.openclassrooms.com
206/252
Commande en Javascript
On peut activer ce plugin avec Javascript et lancer des commandes sur n'importe quel lment. Voici un exemple (rsultat la
figure suivante) :
Code : HTML
<div class="container">
<div class="col-lg-6">
<div class="btn-group btn-group-justified" datatoggle="buttons">
<label class="btn btn-primary active" id="show">
<input type="radio" name="options">Show
</label>
<label class="btn btn-primary" id="hide">
<input type="radio" name="options">Hide
</label>
<label class="btn btn-primary" id="toggle">
<input type="radio" name="options">Toggle
</label>
</div>
<div class="panel panel-info">
<div class="panel-heading">
<h3 class="panel-title"> Je suis le titre de
l'accordon</h3>
</div>
<div class="panel-body"> Je suis le contenu de
l'accordon</div>
</div>
</div>
</div>
<script src="assets/js/jquery.js"></script>
<script src="assets/js/bootstrap.min.js"></script>
<script type="text/javascript">
$(function(){
$('.panel').collapse();
$('#show, #hide, #toggle').click(function(){
$('.panel').collapse($(this).attr('id'));
});
});
</script>
www.openclassrooms.com
207/252
Utilisation de
Javascript
Tester
L'effet accordon est ici appliqu sur la <div> qui contient la classe panel. Le plugin est activ avec la mthode collapse.
Ensuite une action sur l'un des trois boutons lance la commande correspondante : show, hide ou toggle. Pour rendre le code plus
concis, j'ai fait en sorte que l'identifiant des boutons corresponde au nom d'une commande.
Description
show.bs.collapse
shown.bs.collapse
hide.bs.collapse
www.openclassrooms.com
208/252
Utilisation des
vnements
Tester
Voyons prsent un second exemple, en reprenant l'effet accordon sur une liste groupe vu plus haut. Il serait trs esthtique
de modifier l'icne en fonction de la visibilit de la liste est visible. Il suffit de modifier lgrement le code en identifiant la liste et
en ajoutant un peu de Javascript (rsultat la figure suivante) :
Code : HTML
<div class="container">
<div class="row">
www.openclassrooms.com
209/252
www.openclassrooms.com
210/252
en d'autres termes de la rendre responsive. Nous l'avons fait pour la page d'exemple (voir la figure suivante).
Barre de
navigation rtractable dans la page d'exemple
Tester
Voici la partie du code concerne :
Code : HTML
<nav class="navbar navbar-inverse">
<div class="navbar-header">
<button type="button" class="navbar-toggle" data-toggle="collapse"
data-target=".navbar-collapse">
<span class="icon-bar"></span>
<span class="icon-bar"></span>
<span class="icon-bar"></span>
</button>
<a class="navbar-brand" href="#">Les Tigres</a>
</div>
<div class="collapse navbar-collapse">
<ul class="nav navbar-nav">
<li> <a href="#">Accueil</a> </li>
<li class="dropdown">
<a class="dropdown-toggle" data-toggle="dropdown"
href="#">Tmoignages <b class="caret"></b></a>
<ul class="dropdown-menu">
<li><a href="#">Dompteurs</a></li>
<li><a href="#">Zoos</a></li>
<li><a href="#">Chasseurs</a></li>
<li class="divider"></li>
<li><a href="#">Autres tmoignages</a></li>
</ul>
</li>
<li> <a href="#">Liens</a> </li>
<li> <a href="#">Rfrences</a> </li>
</ul>
<form class="navbar-form navbar-right">
<div class="input-group">
<input type="text" style="width:150px" class="input-sm formcontrol" placeholder="Recherche">
<span class="input-group-btn">
<button type="submit" class="btn btn-primary btnsm"><span class="glyphicon glyphicon-eye-open"></span>
Chercher</button>
</span>
</div>
</form>
</div>
</nav>
On ajoute un bouton charg de commander l'effet accordon aux lignes 3 7. Ensuite on englobe tout ce qui doit subir l'effet
avec les classes collapse et navbar-collapse. Par dfaut le point de transition (c'est--dire de dclenchement de l'effet) se produit
lorsque l'affichage est infrieur 768 pixels. Il est possible de changer ce point de transition en modifiant le fichier LES S de
Bootstrap. Nous verrons dans un prochain chapitre comment justement modifier Bootstrap pour l'adapter nos besoins.
Le Scrollspy
Mise en page avec le Scrollspy
www.openclassrooms.com
211/252
Ce plugin permet de relier automatiquement des lments de navigation avec des zones HTML en utilisant un dfilement. Comme
un exemple est souvent bien plus efficace qu'une explication, surtout pour ce genre de fonctionnement, voici un style de mise en
page de plus en plus utilis sur les sites (voir aussi figure suivante) :
Code : HTML
<!DOCTYPE HTML>
<html>
<head>
<meta charset="utf-8">
<link href="assets/css/bootstrap.css" rel="stylesheet">
</head>
<body data-spy="scroll" data-target=".navbar">
<div class="container-fluid">
<nav class="navbar navbar-default navbar-fixed-top">
<div class="navbar-header">
<button type="button" data-target=".navbar-collapse" datatoggle="collapse" class="navbar-toggle">
<span class="icon-bar"></span>
<span class="icon-bar"></span>
<span class="icon-bar"></span>
</button>
<a href="#" class="navbar-brand">La boutique en dlire</a>
</div>
<div class="collapse navbar-collapse">
<ul class="nav navbar-nav">
<li class="active"><a href="#accueil">Accueil</a></li>
<li><a href="#produits">Produits</a></li>
<li><a href="#nouvelles">Nouvelles</a></li>
<li><a href="#localisation">Localisation</a></li>
</ul>
</div>
</nav>
<div class="jumbotron" id="accueil">
<div class="container">
<h1 class="well">Bienvenue dans notre espace !</h1>
<p>"Sed ut perspiciatis unde omnis iste natus error sit
voluptatem accusantium doloremque laudantium, totam rem aperiam,
eaque ipsa quae ab illo inventore veritatis et quasi architecto
beatae vitae dicta sunt explicabo. Nemo enim ipsam voluptatem
quia voluptas sit aspernatur aut odit aut fugit, sed quia
consequuntur magni dolores eos qui ratione voluptatem sequi
nesciunt.
Neque porro quisquam est, qui dolorem ipsum quia dolor sit amet,
consectetur, adipisci velit, sed quia non numquam eius modi
tempora incidunt ut labore et dolore magnam aliquam quaerat
voluptatem. Ut enim ad minima veniam, quis nostrum exercitationem
ullam corporis suscipit laboriosam, nisi ut aliquid ex ea commodi
consequatur? Quis autem vel eum iure reprehenderit qui in ea
voluptate velit esse quam nihil molestiae consequatur, vel illum
qui dolorem eum fugiat quo voluptas nulla pariatur?"
</p>
</div>
</div>
<div class="jumbotron" id="produits">
<div class="container">
<h1 class="well">Nos produits attractif !</h1>
<p>"Sed ut perspiciatis unde omnis iste natus error sit
voluptatem accusantium doloremque laudantium, totam rem aperiam,
eaque ipsa quae ab illo inventore veritatis et quasi architecto
beatae vitae dicta sunt explicabo. Nemo enim ipsam voluptatem
quia voluptas sit aspernatur aut odit aut fugit, sed quia
consequuntur magni dolores eos qui ratione voluptatem sequi
nesciunt.
Neque porro quisquam est, qui dolorem ipsum quia dolor sit amet,
consectetur, adipisci velit, sed quia non numquam eius modi
www.openclassrooms.com
212/252
www.openclassrooms.com
213/252
www.openclassrooms.com
214/252
</div>
<script src="assets/js/jquery.js"></script>
<script src="assets/js/bootstrap.min.js"></script>
</body>
</html>
Ensuite on cre la navigation qui pointe des zones faire apparatre sans ajout d'autres classes, le fonctionnement est
automatique.
Un mouvement fluide
L'exemple fonctionne correctement, mais on peut regretter la brutalit du mouvement. La zone demande s'affiche spontanment
et on ne comprend pas vraiment qu'il se produit un dfilement. Il serait plus lgant d'avoir un mouvement fluide pour passer
d'une zone une autre. Ce n'est pas prvu au niveau du plugin, mais avec quelques lignes de Javascript on peut raliser cela :
Code : JavaScript
$(function () {
$('li>a').click(function(){
var pos = $($(this).attr('href')).offset().top;
$('body, html').animate({scrollTop:pos}, 1000);
})
});
Tester
www.openclassrooms.com
215/252
Tester
Vous disposez aussi de l'vnement activate.bs.scrollspy qui est dclench lorsqu'une nouvelle zone est affiche.
L'utilit de cet vnement ne saute pas aux yeux, mais si vous en avez ventuellement besoin la syntaxe est la suivante :
Code : JavaScript
$('#monScrollspy').on('activate.bs.scrollspy', function () {
// Ici je fais quelque chose...
})
En rsum :
Bootstrap propose un collection de plugins jQuery faciles mettre en uvre.
Les menus droulants permettent l'affichage de liens textuels, auxquels on peut adjoindre des icnes et des en-ttes. Ils
peuvent s'intgrer une barre de navigation ou un bouton. On peut raliser des sous-menus en ajoutant quelques styles
au framework.
Les fentres modales permettent de faire apparatre des informations. Elles peuvent comporter un titre, un contenu et un
bas de page. On peut mme y injecter une page HTML.
Les onglets permettent sur un mme espace d'afficher au choix plusieurs informations avec un simple clic. Les onglets
sont faciles organiser : horizontaux, empils, droite ou gauche, simple liens ou boutons. On peut aussi intgrer un
menu droulant dans un onglet.
On peut crer des boutons "bascule", ou avec effet "radio" ou "checkbox", ou pour attente de fin d'un processus.
Le carrousel permet de faire dfiler des images avec possibilit d'ajouter une lgende par image, des boutons de
dfilement et de rgler la vitesse de dfilement.
Les info-bulles permettent de faire apparatre un petit texte informatif en survolant un lment, les pop-overs galement
mais autorisent un contenu plus riche.
L'effet accordon permet de faire apparatre ou disparatre une zone de la page. Il est possible d'ajouter des en-ttes et
d'intgrer des listes groupes. On l'utilise en particulier pour rendre une barre de navigation rtractable.
Le Scrollspy permet de relier automatiquement des lments de navigation avec des zones HTML en utilisant un
dfilement. Il est de plus en plus utilis sur les sites web.
www.openclassrooms.com
216/252
Configurer Bootstrap
Utiliser directement ce que nous offre Bootstrap c'est bien, mais le modifier pour le rendre exactement adapt nos besoins c'est
encore mieux. Alors, si vous voulez bidouiller Bootstrap, ce chapitre est fait pour vous !
Configuration simplifie
Une page d'exemple
Supposons que nous voulions crer un site avec une certaine prsentation. Quelque chose de simple, parce que je veux juste
vous montrer le principe de la configuration. Voici le code HTML de base :
Code : HTML
<!DOCTYPE HTML>
<html>
<head>
<meta charset="utf-8">
<link href="assets/css/bootstrap.min.css" rel="stylesheet">
</head>
<body>
<div class="container">
<header class="row col-sm-12">
<div class="page-header">
<h1>Mon beau site<img src="images/papillon.png"
class="pull-right"></h1>
</div>
</header>
<div class="row col-sm-12">
<nav class="col-sm-2">
<ul class="nav nav-pills nav-stacked">
<li class="active"> <a href="#"> <span class="glyphicon
glyphicon-home"></span> Accueil </a> </li>
<li> <a href="#"> <span class="glyphicon glyphiconbook"></span> Livres </a> </li>
<li> <a href="#"> <span class="glyphicon glyphiconfacetime-video"></span> Films </a> </li>
<li> <a href="#"> <span class="glyphicon glyphiconheadphones"></span> Musiques </a> </li>
</ul>
</nav>
<section class="col-sm-10">
<div class="panel panel-default">
<div class="panel-heading">
<h3 class="panel-title">Bienvenue sur mon site !</h3>
</div>
<div class="panel-body">
<p>"Sed ut perspiciatis unde omnis iste natus error
sit voluptatem accusantium doloremque laudantium, totam rem aperiam,
eaque ipsa quae ab illo inventore veritatis et quasi architecto
beatae vitae dicta sunt explicabo. Nemo enim ipsam voluptatem quia
voluptas
sit aspernatur aut odit aut fugit, sed quia consequuntur magni
dolores eos qui ratione voluptatem sequi nesciunt. Neque porro
quisquam est,
qui dolorem ipsum quia dolor sit amet, consectetur, adipisci velit,
sed quia non numquam eius modi tempora incidunt ut labore et dolore
magnam aliquam quaerat voluptatem. Ut enim ad minima veniam, quis
nostrum exercitationem ullam corporis suscipit laboriosam, nisi ut
aliquid ex ea commodi consequatur? Quis autem vel eum iure
reprehenderit qui in ea voluptate velit esse quam nihil molestiae
consequatur,
vel illum qui dolorem eum fugiat quo voluptas nulla pariatur?"</p>
<p>"Sed ut perspiciatis unde omnis iste natus error
sit voluptatem accusantium doloremque laudantium, totam rem aperiam,
eaque ipsa quae ab illo inventore veritatis et quasi architecto
beatae vitae dicta sunt explicabo. Nemo enim ipsam voluptatem quia
www.openclassrooms.com
217/252
voluptas sit aspernatur aut odit aut fugit, sed quia consequuntur
magni dolores eos qui ratione voluptatem sequi nesciunt. Neque porro
quisquam est, qui dolorem ipsum quia dolor sit amet, consectetur,
adipisci velit, sed quia non numquam eius modi tempora incidunt ut
labore et dolore magnam aliquam quaerat voluptatem. Ut enim ad
minima veniam, quis nostrum exercitationem ullam corporis suscipit
laboriosam, nisi ut aliquid ex ea commodi consequatur? Quis autem
vel eum iure reprehenderit qui in ea voluptate velit esse quam nihil
molestiae consequatur, vel illum qui dolorem eum fugiat quo voluptas
nulla pariatur?"</p>
<p>"Sed ut perspiciatis unde omnis iste natus error
sit voluptatem accusantium doloremque laudantium, totam rem aperiam,
eaque ipsa quae ab illo inventore veritatis et quasi architecto
beatae vitae dicta sunt explicabo. Nemo enim ipsam voluptatem quia
voluptas sit aspernatur aut odit aut fugit, sed quia consequuntur
magni dolores eos qui ratione voluptatem sequi nesciunt. Neque porro
quisquam est, qui dolorem ipsum quia dolor sit amet, consectetur,
adipisci velit, sed quia non numquam eius modi tempora incidunt ut
labore et dolore magnam aliquam quaerat voluptatem. Ut enim ad
minima veniam, quis nostrum exercitationem ullam corporis suscipit
laboriosam, nisi ut aliquid ex ea commodi consequatur? Quis autem
vel eum iure reprehenderit qui in ea voluptate velit esse quam
nihil molestiae consequatur, vel illum qui dolorem eum fugiat quo
voluptas nulla pariatur?"</p>
</div>
</div>
</section>
</div>
<footer class="row col-sm-12">
<div class="panel panel-body">
<p>Tous droits rservs par moi...</p>
</div>
</footer>
</div>
</body>
</html>
bannire suprieure
menu gauche
contenu droite
pied de page en bas
Bootstrap permet de raliser cette mise en page avec facilit. La mise en forme effectue par Bootstrap donne la figure suivante.
www.openclassrooms.com
218/252
Tester
C'est dj pas si mal, mais on va amliorer la prsentation avec du style :
Code : CSS
body {
background-color:#bbb;
color:#048;
font-size: 12px;
line-height: 16px;
}
a {
color: #028;
}
footer {
text-align:center;
}
nav {
background-color:#bcd;
border-radius: 8px;
padding: 0 !important;
border: 1px solid #ddd;
margin-bottom: 20px;
}
section {
padding-right: 0 !important;
}
.panel {
background-color: #bcd;
border-radius: 8px;
padding-bottom: 5px;
}
h1 {
text-shadow: 4px 4px 5px #777;
color: #449;
}
.nav > li > a:hover, .nav > li > a:focus {
background-color: #cde;
}
.panel-default > .panel-heading, .nav-pills > li.active > a, .navpills > li.active > a:hover, .nav-pills > li.active > a:focus {
color: #048;
background-color: #abc;
border-radius: 8px;
}
www.openclassrooms.com
219/252
Tester
Avec une raction correcte quand on rduit l'affichage au-dessous de 768 pixels, comme le montre la figure suivante.
www.openclassrooms.com
220/252
Effet de la
rduction de l'affichage
J'ai profit de l'occasion pour montrer comment crer facilement un menu vertical lgant avec Bootstrap. Mais ce qui va nous
intresser concerne les styles. Parce que toute une partie de la stylisation est en fait une modification des paramtrages de base
de Bootstrap. J'ai chang la couleur de fond, la couleur de premier plan, la couleur des liens, la taille des caractres On peut se
demander s'il n'est pas plus simple de modifier directement Bootstrap
www.openclassrooms.com
221/252
www.openclassrooms.com
222/252
On ne tient pas compte pour le moment des variables LESS. Il n'y a plus qu' cliquer sur le bouton pour obtenir un Bootstrap
personnalis.
On obtient 2 fichiers : bootstrap.css et bootstrap.min.css. Il psent respectivement 49 Ko et 40 Ko, alors que les
versions compltes font 122 Ko et 101 Ko. La diffrence est loin d'tre ngligeable ! Il faut quand mme vrifier que la page
fonctionne encore correctement.
Les variables
Il est possible d'aller plus loin dans la personnalisation. Regardons les variables disponibles. Par exemple dans les variables du
scaffolding, sur la mme page de configuration, on trouve celle qui concerne la couleur de fond de la page @body-bg (voir
figure suivante).
La variable @body-bg
Par dfaut, cette valeur est fixe #fff, autrement dit la couleur blanche. Or pour ma page, il me faut la valeur #bbb. Je peux
donc changer la valeur ce niveau, je n'aurai ainsi plus besoin de fixer cette proprit dans ma feuille de style personnelle.
Quelles autres variables sont intressantes dans le cas de notre page ? Je trouve par exemple la variable @text-color (voir
figure suivante).
La variable @text-color
Je peux la fixer #048. On va en rester l pour cet exemple, et crer un nouveau fichier Bootstrap avec ce paramtrage. On
compile le fichier, on le tlcharge et on lui donne un nouveau nom :
Code : HTML
<link href="assets/css/bootstrap.min.v1_1.css" rel="stylesheet">
www.openclassrooms.com
223/252
text-align:center;
}
nav {
background-color:#bcd;
border-radius: 8px;
padding: 0 !important;
border: 1px solid #ddd;
margin-bottom: 20px;
}
section {
padding-right: 0 !important;
}
.panel {
background-color: #bcd;
border-radius: 8px;
padding-bottom: 5px;
}
h1 {
text-shadow: 4px 4px 5px #777;
color: #449;
}
.nav > li > a:hover, .nav > li > a:focus {
background-color: #cde;
}
.panel-default > .panel-heading, .nav-pills > li.active > a, .navpills > li.active > a:hover, .nav-pills > li.active > a:focus {
color: #048;
background-color: #abc;
border-radius: 8px;
}
Tester !
On obtient le mme rsultat. On peut videmment se demander l'intrt de procder ainsi pour gagner juste quelques rgles de
style. C'est effectivement se donner bien du mal pour pas grand chose. En revanche, cette dmarche peut devenir intressante
dans le cadre de la cration d'un thme spcifique avec beaucoup de rglages de variables.
www.openclassrooms.com
224/252
Nous allons les prendre comme exemple pour illustrer les possibilits de LESS.
Des variables
Une des principales fonctionnalit de LESS est de permettre la cration de variables et d'ainsi centraliser les valeurs et faciliter les
modifications. Ouvrez le fichier variables.less qui dfinit la valeur de toutes les variables utilises par Bootstrap. En voici
un extrait :
Code : CSS
...
// Buttons
// ------------------------@btn-font-weight:
normal;
@btn-default-color: #333;
@btn-default-bg:
@btn-default-border:
...
#fff;
#ccc;
Une variable est dclare avec une syntaxe simple : il suffit d'utiliser le caractre @ suivi du nom de la variable, par exemple on a
ici la variable @btn-default-color. Une variable prend une valeur, ici la variable @btn-default-color a la valeur
#333. On peut ensuite utiliser cette variable pour affecter la valeur correspondante. Ouvrez le fichier buttons.less et
trouvez ces lignes :
Code : CSS
.btn {
...
&:focus {
color: @btn-default-color;
text-decoration: none;
}
On voit qu'on utilise la variable @btn-default-color pour affecter la valeur de la proprit color pour le focus des
boutons. Remarquez au passage l'utilisation du signe & pour faciliter l'criture du code. Pour la mme classe .btn, on peut
regrouper des slecteurs dans un mme bloc sans tout rcrire. On trouve la mme variable utilise un peu plus loin dans le code
:
Code : CSS
.btn-default {
.button-variant(@btn-default-color; @btn-default-bg;
@btn-default-border);
}
Il suffit donc de modifier la valeur de la variable pour que toutes ces affectations soient changes avec cette seule action.
Et si on regarde le rsultat, on retrouve bien la couleur #333 affecte la couleur du bouton pour le focus :
Code : CSS
.btn:focus {
color: #333333;
text-decoration: none;
}
www.openclassrooms.com
225/252
Cette factorisation est pratique si elle est bien organise, ce qui est le cas avec Bootstrap qui centralise toutes les variables dans
le mme fichier. Rien n'empche aussi d'affecter la valeur d'une variable une autre variable comme ici :
Code : CSS
@brand-primary:
...
@link-color:
#428bca;
@brand-primary;
Inclusion de fichier
Les possibilits de LESS sont loin de s'arrter la dfinition de variables. On peut inclure un fichier avec la commande
@import. Par exemple, le fichier bootstrap.less ne fait que des inclusions :
Code : CSS
...
// Core variables and mixins
@import "variables.less";
@import "mixins.less";
// Reset
@import "normalize.less";
@import "print.less";
...
On peut importer des fichiers less ou css. S'il s'agit d'un fichier less, il est videmment trait s'il comporte des commandes
spciales, alors que dans le cas d'un fichier css, il est pris tel quel sans traitement particulier.
Les mixins
On peut aussi inclure des classes dans d'autres classes (ce qui se nomme mixins dans le langage LESS), comme si elle tait
une proprit. On peut le voir ici dans le fichier grid.less :
Code : CSS
// Set the container width, and override it for fixed navbars in
media queries
.container {
.container-fixed();
}
On voit que la classe .container-fixed est utilise comme une proprit. Examinons cette classe appele qui se situe dans
le fichier mixin.less :
Code : CSS
// Centered container element
.container-fixed() {
margin-right: auto;
margin-left: auto;
padding-left: (@grid-gutter-width / 2);
padding-right: (@grid-gutter-width / 2);
&:extend(.clearfix all);
}
www.openclassrooms.com
226/252
On y trouve un certain nombre de rgles, essentiellement pour centrer l'lment et mme un autre appel une classe, ici
.clearfix. Vous avez remarqu sans doute la syntaxe particulire avec l'ajout de parenthses comme s'il s'agissait d'une
fonction. Cette analogie va plus loin, puisqu'on peut mme transmettre des paramtres (on parle alors de mixin paramtr) une
classe incluse comme ici dans le fichier button-groups.less :
Code : CSS
.btn-group.open .dropdown-toggle {
.box-shadow(inset 0 3px 5px rgba(0,0,0,.125));
}
On voit que cette classe ralise un ombrage selon le paramtre transmis. Si on regarde le rsultat, on a bien ce qui est demand :
Code : CSS
.btn-group.open .dropdown-toggle {
-webkit-box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);
box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);
}
Slecteurs embots
On peut inclure des slecteurs dans une dfinition, comme ici dans le fichier dropdowns.less :
Code : CSS
// Open state for the dropdown
// --------------------------.open {
// Show the menu
> .dropdown-menu {
display: block;
}
// Remove the outline when :focus is triggered
> a {
outline: 0;
}
}
www.openclassrooms.com
227/252
display: block;
}
.open > a {
outline: 0;
}
On a vu plus haut que pour les pseudo-classes, on peut utiliser le signe &, comme par exemple ici dans le fichier
pagination.less :
Code : CSS
.pagination {
...
> li > a,
> li > span {
&:hover,
&:focus {
color: @pagination-hover-color;
background-color: @pagination-hover-bg;
border-color: @pagination-hover-border;
}
}
On trouve ce rsultat :
Code : CSS
.pagination > li > a:hover,
.pagination > li > span:hover,
.pagination > li > a:focus,
.pagination > li > span:focus {
background-color: #eeeeee;
}
Oprations
On peut aussi effectuer des oprations comme ici dans le fichier forms.less :
Code : CSS
legend {
display: block;
width: 100%;
padding: 0;
margin-bottom: @line-height-computed;
font-size: (@font-size-base * 1.5);
line-height: inherit;
color: @gray-dark;
border: 0;
border-bottom: 1px solid @legend-border-color;
}
Avec le rsultat :
Code : CSS
legend {
display: block;
www.openclassrooms.com
228/252
width: 100%;
padding: 0;
margin-bottom: 20px;
font-size: 21px;
line-height: inherit;
color: #333333;
border: 0;
border-bottom: 1px solid #e5e5e5;
}
Comme on a une dimension de base de 14 pixels, le rsultat 14 * 1.5 donne bien 21 pixels.
Fonctions
LESS possde des fonctions bien pratiques, regardez ce code :
Code : CSS
@brand-primary:
...
@link-color:
@link-hover-color:
#428bca;
@brand-primary;
darken(@link-color, 15%);
On utilise la fonction intgre darken, qui assombrit la couleur du pourcentage indiqu. Ici la valeur de la couleur est issue
d'une variable, dont la valeur est elle-mme issue d'une autre variable ! Au final, on assombrit de 15% la couleur #428bca. On
trouve aussi la fonction oppose lighten:
Code : CSS
@gray-dark:
lighten(#000, 20%);
// #333
Ici, on claircit le noir #000 de 20%, ce qui donne #333. On trouve d'autres fonctions classiques comme ceil, qui retourne
l'entier immdiatement suprieur une valeur :
Code : CSS
@font-size-base:
@font-size-large:
14px;
ceil(@font-size-base * 1.25); // ~18px
Le rsultat de 14 * 1.25 est 17.5, l'arrondi par excs donne bien 18. On trouve la fonction floor pour l'arrondi par dfaut,
ainsi que bien d'autres fonctions que vous pouvez dcouvrir dans la documentation.
Un exemple synthtique
Pour illustrer les possibilits et l'lgance de LESS je vais prendre un exemple qui regroupe la plupart de ses possibilits en
l'analysant. Vous trouvez dans le fichier jumbotron.less ce code :
Code : CSS
.jumbotron {
padding: @jumbotron-padding;
margin-bottom: @jumbotron-padding;
color: @jumbotron-color;
background-color: @jumbotron-bg;
www.openclassrooms.com
229/252
h1,
.h1 {
color: @jumbotron-heading-color;
}
p {
margin-bottom: (@jumbotron-padding / 2);
font-size: @jumbotron-font-size;
font-weight: 200;
}
.container & {
border-radius: @border-radius-large; // Only round corners at
higher resolutions if contained in a container
}
.container {
max-width: 100%;
}
@media screen and (min-width: @screen-sm-min) {
padding-top:
(@jumbotron-padding * 1.6);
padding-bottom: (@jumbotron-padding * 1.6);
.container & {
padding-left: (@jumbotron-padding * 2);
padding-right: (@jumbotron-padding * 2);
}
h1,
.h1 {
font-size: (@font-size-base * 4.5);
}
Les valeurs sont renseignes au moyen de variables. On peut trouver leurs valeurs dans le fichier variables.less) :
Code : CSS
@jumbotron-padding:
@jumbotron-color:
@jumbotron-bg:
30px;
inherit;
@gray-lighter;
Il faut chercher encore un peu dans le mme fichier pour obtenir la valeur pour la couleur de fond :
Code : CSS
@gray-lighter:
www.openclassrooms.com
230/252
Dans les blocs de ces slecteurs, on a une proprit directe pour font-weight, et les autres dont la valeur est issue d'une
variable et mme d'un calcul pour margin-bottom. Il faut nouveau regarder dans le fichier des variable pour trouver les
valeurs :
Code : CSS
@jumbotron-padding:
@jumbotron-color:
@jumbotron-font-size:
30px;
inherit;
ceil((@font-size-base * 1.5));
On voit que la dimension du texte est dpendante de la dimension de base pour la page, ce qui est trs logique. Le rsultat aprs
compilation :
Code : CSS
.jumbotron h1,
.jumbotron .h1 {
color: inherit;
}
.jumbotron p {
margin-bottom: 15px;
font-size: 21px;
font-weight: 200;
}
Classe embote
On trouve ensuite une classe embote :
www.openclassrooms.com
231/252
Code : CSS
.container & {
border-radius: @border-radius-large;
}
Remarquez l'utilisation de l'oprateur de concatnation &. On veut donc associer dans le slecteur la classe .container et la
classe jumbotron. On retrouve donc logiquement ce rsultat :
Code : CSS
.container .jumbotron {
border-radius: 6px;
}
Medias Queries
On trouve enfin un bloc qui concerne les Medias Queries :
Code : CSS
@media screen and (min-width: @screen-tablet) {
padding-top:
(@jumbotron-padding * 1.6);
padding-bottom: (@jumbotron-padding * 1.6);
.container & {
padding-left: (@jumbotron-padding * 2);
padding-right: (@jumbotron-padding * 2);
}
h1 {
font-size: (@font-size-base * 4.5);
}
l'intrieur de ce bloc, on a le mme genre d'organisation que celle nous avons vu prcdemment avec des proprits
directement renseignes, un slecteur et une classe embots. Le rsultat la compilation donne :
Code : CSS
@media screen and (min-width: 768px) {
.jumbotron {
padding-top: 48px;
padding-bottom: 48px;
}
.container .jumbotron {
padding-right: 60px;
padding-left: 60px;
}
.jumbotron h1 {
font-size: 63px;
}
}
Il y aurait encore beaucoup dire sur LESS, je vous laisse le dcouvrir dans la documentation du site qui est trs bien faite.
232/252
Vous pouvez modifier Bootstrap en tripatouillant les variables et en compilant avec les outils proposs Je vous propose
d'utiliser un programme trs bien fait : Crunch. Au moment o j'cris ce cours, j'ai trouv la version 1.8.1.
Le programme est simple et efficace, vous pouvez crer ou modifier des fichiers LESS et les compiler en CSS. Sur le site de
Bootstrap, il est prconis d'utiliser RECESS, qui est une application en ligne de commande beaucoup moins ergonomique. Mais
les essais que j'ai effectus avec Crunch ne m'ont donn aucun souci.
Rapatrier tous les fichiers LESS de la dernire version de Bootstrap et les mettre dans un rpertoire local.
Lancer Crunch et ouvrir le fichier variables.less
Modifier les variables concernes dans le fichier variables.less (voir figure suivante).
Enregistrer la nouvelle version du fichier variables.less
Ouvrir le fichier bootstrap.less
Pour tre cohrent avec notre prcdente configuration, nous devons supprimer les lments inutiles
Compiler le fichier bootstrap.less
Enregistrer le fichier bootstrap.css gnr par Crunch
Renommer le fichier bootstrap.css en bootstrap.min.v1_2.css.
Modifier le lien des styles dans la page web
Supprimer les styles devenus inutiles dans la page web
variables.less
Code : CSS
body {
/* background-color:#bbb;
color:#048; */
font-size: 12px;
line-height: 16px;
}
a {
color: #028;
}
footer {
text-align:center;
}
nav {
background-color:#bcd;
border-radius: 8px;
padding: 0 !important;
border: 1px solid #ddd;
margin-bottom: 20px;
}
section {
www.openclassrooms.com
233/252
padding-right: 0 !important;
}
.panel {
background-color: #bcd;
border-radius: 8px;
padding-bottom: 5px;
}
h1 {
text-shadow: 4px 4px 5px #777;
color: #449;
}
.nav > li > a:hover, .nav > li > a:focus {
background-color: #cde;
}
.panel-default > .panel-heading, .nav-pills > li.active > a, .navpills > li.active > a:hover, .nav-pills > li.active > a:focus {
color: #048;
background-color: #abc;
border-radius: 8px;
}
On obtient alors la mme prsentation que prcdemment, comme le montre la figure suivante.
Apparence obtenue
Tester
www.openclassrooms.com
234/252
Mais tout le reste correspond des ajustements de la page qui ne rentrent pas dans le cadre du fichier variable.less. On
peut du coup se demander si le jeu en vaut la chandelle... Dans le cadre d'un site web ponctuel, la rponse est clairement "non".
quoi bon aller bidouiller les fichiers LESS pour conomiser quelques lignes de code ? On pourrait aller plus loin et intervenir
sur les autres fichiers pour effectuer tous les ajustements ncessaires, par exemple, pour le "padding" infrieur du panneau, il
faudrait intervenir sur le fichier panels.less :
Code : CSS
// Optional heading
.panel-heading {
padding: 10px 15px;
border-bottom: 1px solid @panel-border;
.border-top-radius(@panel-border-radius - 1);
}
On arriverait de proche en proche ajuster compltement Bootstrap pour notre site et ainsi n'avoir plus qu'un fichier CSS
charger. Cette conception se heurte plusieurs inconvnients, dont le fait de ne pas pouvoir faire de mise jour de Bootstrap
sans refaire toutes nos interventions. Envisageons donc une autre approche...
Puisque nous disposons de LESS, autant l'utiliser aussi pour nos styles complmentaires. Crons un fichier main.less avec
nos styles dans le dossier qui contient tous les fichiers LESS.
Code : CSS
body {
background-color:#bbb;
color:#048;
font-size: 12px;
line-height: 16px;
}
a {
color: #028;
}
footer {
text-align:center;
}
nav {
background-color:#bcd;
border-radius: 8px;
padding: 0 !important;
border: 1px solid #ddd;
margin-bottom: 20px;
}
section {
padding-right: 0 !important;
}
.panel {
background-color: #bcd;
border-radius: 8px;
padding-bottom: 5px;
}
h1 {
text-shadow: 4px 4px 5px #777;
color: #449;
}
.nav > li > a:hover, .nav > li > a:focus {
background-color: #cde;
}
.panel-default > .panel-heading, .nav-pills > li.active > a, .navpills > li.active > a:hover, .nav-pills > li.active > a:focus {
color: #048;
background-color: #abc;
border-radius: 8px;
}
www.openclassrooms.com
235/252
Une fois ce fichier cr, il faut informer le fichier bootstrap.less qu'il doit en tenir compte (voir figure suivante).
Il suffit ensuite de compiler tout a ; on obtient un fichier minifi de Bootstrap qui contient toutes les rgles. On se retrouve donc
avec un seul appel de fichier CSS (on peut supprimer le style inclus dans la page) pour un rsultat identique pour notre page
d'exemple :
Tester !
Le rsultat est trs propre , avec un seul fichier CSS charger et aucune rgle de style dans la page. D'autre part, s'il y a une
mise jour faire, il suffit de recompiler.
Les mixins
La grille avec les mixins
Il existe un fichier trs intressant, c'est mixins.less, qui ne contient que des mixins (j'ai parl dans un chapitre prcdent
de ces entits). Pour comprendre son utilit il faut se poser une petite question. On place les classes de Bootstrap directement
dans le code HTML. En agissant ainsi, on rend le code trs dpendant de Bootstrap. D'autre part, cette faon de procder
s'loigne du principe de base qui consiste bien sparer le contenu de la forme. Lorsque j'cris ce code dans mon exemple :
Code : HTML
<div class="row col-sm-12">
<nav class="col-sm-2">
...
<section class="col-sm-10">
</div>
</nav>
... </section>
Je dis clairement que je veux une range avec deux colonnes en indiquant la proportion de chacune d'elles. Si je n'utilisais pas
Bootstrap, ce serait uniquement mes styles qui dcideraient de cela. D'autre part, si je veux changer de framework un jour, je dois
intervenir au niveau de mon code HTML. Nous allons voir comment crer une grille en utilisant uniquement LESS. Regardez ces
parties du fichier mixins.less :
Code : CSS
// Creates a wrapper for a series of columns
.make-row(@gutter: @grid-gutter-width) {
margin-left: (@gutter / -2);
margin-right: (@gutter / -2);
&:extend(.clearfix all);
}
...
// Generate the small columns
.make-sm-column(@columns; @gutter: @grid-gutter-width) {
position: relative;
min-height: 1px;
padding-left: (@gutter / 2);
padding-right: (@gutter / 2);
@media (min-width: @screen-sm) {
www.openclassrooms.com
236/252
float: left;
width: percentage((@columns / @grid-columns));
On trouve deux mixins paramtrs intressants pour notre exemple : make-row() et make-sm-column(). On va utiliser ces
mixins dans notre exemple en modifiant le code HTML :
Code : HTML
<!DOCTYPE HTML>
<html>
<head>
<meta charset="utf-8">
<link href="assets/css/bootstrap.min.v1_4.css" rel="stylesheet">
</head>
<body>
<div class="container">
<header>
<div class="page-header">
<h1>Mon beau site<img src="images/papillon.png"
class="pull-right"></h1>
</div>
</header>
<div class="contenu">
<nav>
<ul class="nav nav-pills nav-stacked">
<li class="active"> <a href="#"> <span class="glyphicon
glyphicon-home"></span> Accueil </a> </li>
<li> <a href="#"> <span class="glyphicon glyphiconbook"></span> Livres </a> </li>
<li> <a href="#"> <span class="glyphicon glyphiconfacetime-video"></span> Films </a> </li>
<li> <a href="#"> <span class="glyphicon glyphiconheadphones"></span> Musiques </a> </li>
</ul>
</nav>
<!-- <div class="clearfix visible-xs"></div> -->
<section>
<div class="panel panel-default">
<div class="panel-heading">
<h3 class="panel-title">Bienvenue sur mon site !</h3>
</div>
<div class="panel-body">
<p>"Sed ut perspiciatis unde omnis iste natus error
sit voluptatem accusantium doloremque laudantium, totam rem aperiam,
eaque ipsa quae ab illo inventore veritatis et quasi architecto
beatae vitae dicta sunt explicabo. Nemo enim ipsam voluptatem quia
voluptas
sit aspernatur aut odit aut fugit, sed quia consequuntur magni
dolores eos qui ratione voluptatem sequi nesciunt. Neque porro
quisquam est,
qui dolorem ipsum quia dolor sit amet, consectetur, adipisci velit,
sed quia non numquam eius modi tempora incidunt ut labore et dolore
magnam aliquam quaerat voluptatem. Ut enim ad minima veniam, quis
nostrum exercitationem ullam corporis suscipit laboriosam, nisi ut
aliquid ex ea commodi consequatur? Quis autem vel eum iure
reprehenderit qui in ea voluptate velit esse quam nihil molestiae
consequatur,
vel illum qui dolorem eum fugiat quo voluptas nulla pariatur?"</p>
<p>"Sed ut perspiciatis unde omnis iste natus error
sit voluptatem accusantium doloremque laudantium, totam rem aperiam,
eaque ipsa quae ab illo inventore veritatis et quasi architecto
beatae vitae dicta sunt explicabo. Nemo enim ipsam voluptatem quia
voluptas sit aspernatur aut odit aut fugit, sed quia consequuntur
www.openclassrooms.com
237/252
magni dolores eos qui ratione voluptatem sequi nesciunt. Neque porro
quisquam est, qui dolorem ipsum quia dolor sit amet, consectetur,
adipisci velit, sed quia non numquam eius modi tempora incidunt ut
labore et dolore magnam aliquam quaerat voluptatem. Ut enim ad
minima veniam, quis nostrum exercitationem ullam corporis suscipit
laboriosam, nisi ut aliquid ex ea commodi consequatur? Quis autem
vel eum iure reprehenderit qui in ea voluptate velit esse quam
nihil molestiae consequatur, vel illum qui dolorem eum fugiat quo
voluptas nulla pariatur?"</p>
<p>"Sed ut perspiciatis unde omnis iste natus error
sit voluptatem accusantium doloremque laudantium, totam rem aperiam,
eaque ipsa quae ab illo inventore veritatis et quasi architecto
beatae vitae dicta sunt explicabo. Nemo enim ipsam voluptatem quia
voluptas sit aspernatur aut odit aut fugit, sed quia consequuntur
magni dolores eos qui ratione voluptatem sequi nesciunt. Neque porro
quisquam est, qui dolorem ipsum quia dolor sit amet, consectetur,
adipisci velit, sed quia non numquam eius modi tempora incidunt ut
labore et dolore magnam aliquam quaerat voluptatem. Ut enim ad
minima veniam, quis nostrum exercitationem ullam corporis suscipit
laboriosam, nisi ut aliquid ex ea commodi consequatur? Quis autem
vel eum iure reprehenderit qui in ea voluptate velit esse quam
nihil molestiae consequatur, vel illum qui dolorem eum fugiat quo
voluptas nulla pariatur?"</p>
</div>
</div>
</section>
</div>
<footer>
<div class="panel panel-body">
<p>Tous droits rservs par moi...</p>
</div>
</footer>
</div>
</body>
</html>
J'ai supprim les classes row, col-sm-2, col-sm-10 et col-sm-12 et juste ajout la classe contenu. Mon code est
maintenant plus "propre", mais je dois mettre jour mon fichier main.less :
Code : CSS
.contenu, header, footer {
.make-row();
.make-sm-column(12);
}
body {
background-color:#bbb;
color:#048;
font-size: 12px;
line-height: 16px;
}
a {
color: #028;
}
footer {
text-align:center;
}
nav {
.make-sm-column(2);
background-color:#bcd;
border-radius: 8px;
padding: 0 !important;
border: 1px solid #ddd;
margin-bottom: 20px;
}
www.openclassrooms.com
238/252
section {
.make-sm-column(10);
padding-right: 0 !important;
}
.panel {
background-color: #bcd;
border-radius: 8px;
padding-bottom: 5px;
}
h1 {
text-shadow: 4px 4px 5px #777;
color: #449;
}
.nav > li > a:hover, .nav > li > a:focus {
background-color: #cde;
}
.panel-default > .panel-heading, .nav-pills > li.active > a, .navpills > li.active > a:hover, .nav-pills > li.active > a:focus {
color: #048;
background-color: #abc;
border-radius: 8px;
}
Tester !
Je vous conseille d'explorer les possibilits du fichiers mixins.less. Et rien ne vous empche videmment de crer vos
propres classes pour rendre votre code HTML compltement indpendant de Bootstrap.
@media
only screen and (-webkit-min-device-pixel-ratio:
only screen and (
min--moz-device-pixel-ratio:
only screen and (
-o-min-device-pixel-ratio:
only screen and (
min-device-pixel-ratio:
only screen and (
min-resolution:
only screen and (
min-resolution:
background-image: url("@{file-2x}");
background-size: @width-1x @height-1x;
}
2),
2),
2/1),
2),
192dpi),
2dppx) {
On constate qu'on joue effectivement sur le pixel-ratio. Pour utiliser ce mixin, il faut renseigner les paramtres :
Image de dimension de base (par exemple 100px * 100px)
Image de double dimension de base (200px * 200px)
Largeur de base en pixels
www.openclassrooms.com
239/252
Tester !
videmment, cela ne marche que si vous mettez bien tous les fichiers LESS ncessaires sur le serveur. Vous constaterez un temps
de chargement relativement long. Mais ensuite, il suffit de changer un lment dans un fichier LESS pour obtenir le rsultat. Par
exemple si je change la couleur de fond dans le fichier variables.less, il suffit de recharger la page pour voir le rsultat
immdiatement.
Si on regarde le code gnr par le navigateur, on constate que le CSS a bien t construit (voir figure suivante).
www.openclassrooms.com
240/252
Code gnr
Tester !
Pour se rendre compte des diffrences, la figure suivante reprsente les 2 versions de la barre de navigation :
www.openclassrooms.com
241/252
.navbar-inverse {
background-image: -webkit-linear-gradient(top, #3c3c3c 0%, #222
100%);
background-image:
linear-gradient(to bottom, #3c3c3c 0%,
#222 100%);
filter:
progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff3c3c3c',
endColorstr='#ff222222', GradientType=0);
filter: progid:DXImageTransform.Microsoft.gradient(enabled =
false);
background-repeat: repeat-x;
}
On retrouve cet effet de dgrad dans les alertes, les barres de progression, les panneaux Il est prvu galement des ombrages.
Vous pouvez voir tous ces effets sur la page d'exemple du site de Bootstrap. On peut se demander pourquoi ces effets ne font
pas partie de fichier de base de Bootstrap. La rponse se situe au niveau des performances. Il a t choisi d'viter les effets trop
gourmands en ressources.
D'autres thmes
On peut trouver des thmes intressants et gratuits sur le site Bootswatch. Voyons la figure suivante ce que donne le thme
Amelia sur notre page d'exemple.
www.openclassrooms.com
242/252
www.openclassrooms.com
243/252
lighten(#232,
lighten(#232,
lighten(#232,
lighten(#232,
lighten(#232,
13.5%);
20%);
33.5%);
60%);
93.5%);
Je vais aussi modifier les 5 couleurs de base (Brand) pour les rendre plus adaptes une tonalit verte :
www.openclassrooms.com
244/252
Code : CSS
@brand-primary:
@brand-success:
@brand-warning:
@brand-danger:
@brand-info:
#51c1d1;
#5cb85c;
#f0ad4e;
#d9534f;
#5bc0de;
#E0E4CC;
Je vais enfin modifier la couleur de bordure des thumbnails pour les rendre visibles :
Code : CSS
@thumbnail-border:
#aca;
Pour tester tout a je prends une version un peu adapte de l'exemple de thme de Bootstrap :
Code : HTML
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initialscale=1.0">
<title>Theme Template for Bootstrap</title>
<!-- Bootstrap core CSS -->
<link href="assets/css/bootstrap.min.t03.css" rel="stylesheet">
<!-- Bootstrap theme -->
<link href="assets/css/bootstrap-theme.min.css"
rel="stylesheet">
<!-- Custom styles for this template -->
<link href="assets/css/theme.css" rel="stylesheet">
<!-- HTML5 shim and Respond.js IE8 support of HTML5 elements
and media queries -->
<!--[if lt IE 9]>
<script src="../../assets/js/html5shiv.js"></script>
<script src="../../assets/js/respond.min.js"></script>
<![endif]-->
</head>
<body>
<div class="container theme-showcase">
<!-- Main jumbotron for a primary marketing message or call
to action -->
<div class="jumbotron">
<h1>Hello, world!</h1>
<p>This is a template for a simple marketing or
www.openclassrooms.com
245/252
<div class="page-header">
<h1>Buttons</h1>
</div>
<p>
<button type="button" class="btn
default">Default</button>
<button type="button" class="btn
primary">Primary</button>
<button type="button" class="btn
success">Success</button>
<button type="button" class="btn
info">Info</button>
<button type="button" class="btn
warning">Warning</button>
<button type="button" class="btn
danger">Danger</button>
<button type="button" class="btn
link">Link</button>
</p>
<p>
<button type="button" class="btn
default">Default</button>
<button type="button" class="btn
primary">Primary</button>
<button type="button" class="btn
success">Success</button>
<button type="button" class="btn
<button type="button" class="btn
warning">Warning</button>
<button type="button" class="btn
<button type="button" class="btn
</p>
<p>
<button type="button" class="btn
default">Default</button>
<button type="button" class="btn
primary">Primary</button>
<button type="button" class="btn
success">Success</button>
<button type="button" class="btn
info">Info</button>
<button type="button" class="btn
warning">Warning</button>
<button type="button" class="btn
danger">Danger</button>
<button type="button" class="btn
link">Link</button>
</p>
<p>
<button type="button" class="btn
default">Default</button>
<button type="button" class="btn
primary">Primary</button>
<button type="button" class="btn
success">Success</button>
<button type="button" class="btn
info">Info</button>
<button type="button" class="btn
warning">Warning</button>
<button type="button" class="btn
btnbtnbtnbtn-info">Info</button>
btnbtn-danger">Danger</button>
btn-link">Link</button>
btn-sm btnbtn-sm btnbtn-sm btnbtn-sm btnbtn-sm btnbtn-sm btnbtn-sm btn-
www.openclassrooms.com
246/252
danger">Danger</button>
<button type="button" class="btn btn-xs btnlink">Link</button>
</p>
<div class="page-header">
<h1>Thumbnails</h1>
</div>
<img src="images/t1.jpg" class="img-thumbnail" alt="Tigre">
<div class="page-header">
<h1>Dropdown menus</h1>
</div>
<div class="dropdown theme-dropdown clearfix">
<a id="dropdownMenu1" href="#" role="button" class="sr-only
dropdown-toggle" data-toggle="dropdown">Dropdown <b
class="caret"></b></a>
<ul class="dropdown-menu" role="menu" arialabelledby="dropdownMenu1">
<li role="presentation"><a role="menuitem" tabindex="-1"
href="#">Action</a></li>
<li role="presentation"><a role="menuitem" tabindex="-1"
href="#">Another action</a></li>
<li role="presentation"><a role="menuitem" tabindex="-1"
href="#">Something else here</a></li>
<li role="presentation" class="divider"></li>
<li role="presentation"><a role="menuitem" tabindex="-1"
href="#">Separated link</a></li>
</ul>
</div>
<div class="page-header">
<h1>Navbars</h1>
</div>
<div class="navbar navbar-default">
<div class="container">
<div class="navbar-header">
<button type="button" class="navbar-toggle" datatoggle="collapse" data-target=".navbar-collapse">
<span class="icon-bar"></span>
<span class="icon-bar"></span>
<span class="icon-bar"></span>
</button>
<a class="navbar-brand" href="#">Project name</a>
</div>
<div class="navbar-collapse collapse">
<ul class="nav navbar-nav">
<li class="active"><a href="#">Home</a></li>
<li><a href="#about">About</a></li>
<li><a href="#contact">Contact</a></li>
<li class="dropdown">
<a href="#" class="dropdown-toggle" datatoggle="dropdown">Dropdown <b class="caret"></b></a>
<ul class="dropdown-menu">
<li><a href="#">Action</a></li>
<li><a href="#">Another action</a></li>
<li><a href="#">Something else here</a></li>
<li class="divider"></li>
<li class="dropdown-header">Nav header</li>
<li><a href="#">Separated link</a></li>
<li><a href="#">One more separated link</a></li>
</ul>
www.openclassrooms.com
top</a></li>
247/252
</li>
</ul>
<ul class="nav navbar-nav navbar-right">
<li><a href="../navbar/">Default</a></li>
<li><a href="../navbar-static-top/">Static
<div class="page-header">
<h1>Alerts</h1>
</div>
<div class="alert alert-success">
<strong>Well done!</strong> You successfully read this
important alert message.
</div>
<div class="alert alert-info">
<strong>Heads up!</strong> This alert needs your attention,
but it's not super important.
</div>
<div class="alert alert-warning">
<strong>Warning!</strong> Best check yo self, you're not
looking too good.
</div>
<div class="alert alert-danger">
www.openclassrooms.com
248/252
<div class="page-header">
<h1>Progress bars</h1>
</div>
<div class="progress">
<div class="progress-bar" role="progressbar" ariavaluenow="60" aria-valuemin="0" aria-valuemax="100" style="width:
60%;">
<span class="sr-only">60% Complete</span></div>
</div>
<div class="progress">
<div class="progress-bar progress-bar-success"
role="progressbar" aria-valuenow="40" aria-valuemin="0" ariavaluemax="100" style="width: 40%">
<span class="sr-only">40% Complete (success)</span></div>
</div>
<div class="progress">
<div class="progress-bar progress-bar-info"
role="progressbar" aria-valuenow="20" aria-valuemin="0" ariavaluemax="100" style="width: 20%">
<span class="sr-only">20% Complete</span></div>
</div>
<div class="progress">
<div class="progress-bar progress-bar-warning"
role="progressbar" aria-valuenow="60" aria-valuemin="0" ariavaluemax="100" style="width: 60%">
<span class="sr-only">60% Complete (warning)</span></div>
</div>
<div class="progress">
<div class="progress-bar progress-bar-danger"
role="progressbar" aria-valuenow="80" aria-valuemin="0" ariavaluemax="100" style="width: 80%">
<span class="sr-only">80% Complete (danger)</span></div>
</div>
<div class="progress">
<div class="progress-bar progress-bar-success" style="width:
35%"><span class="sr-only">35% Complete (success)</span></div>
<div class="progress-bar progress-bar-warning" style="width:
20%"><span class="sr-only">20% Complete (warning)</span></div>
<div class="progress-bar progress-bar-danger" style="width:
10%"><span class='sr-only'>10% Complete (danger)</span></div>
</div>
in</a>
<div class="page-header">
<h1>List groups</h1>
</div>
<div class="row">
<div class="col-sm-4">
<ul class="list-group">
<li class="list-group-item">Cras justo odio</li>
<li class="list-group-item">Dapibus ac facilisis in</li>
<li class="list-group-item">Morbi leo risus</li>
<li class="list-group-item">Porta ac consectetur ac</li>
<li class="list-group-item">Vestibulum at eros</li>
</ul>
</div><!-- /.col-sm-4 -->
<div class="col-sm-4">
<div class="list-group">
<a href="#" class="list-group-item active">
Cras justo odio
</a>
<a href="#" class="list-group-item">Dapibus ac facilisis
www.openclassrooms.com
249/252
ac</a>
eros</a>
</div>
</div><!-- /.col-sm-4 -->
<div class="col-sm-4">
<div class="list-group">
<a href="#" class="list-group-item active">
<h4 class="list-group-item-heading">List group item
heading</h4>
<p class="list-group-item-text">Donec id elit non mi
porta gravida at eget metus. Maecenas sed diam eget risus varius
blandit.</p>
</a>
<a href="#" class="list-group-item">
<h4 class="list-group-item-heading">List group item
heading</h4>
<p class="list-group-item-text">Donec id elit non mi
porta gravida at eget metus. Maecenas sed diam eget risus varius
blandit.</p>
</a>
<a href="#" class="list-group-item">
<h4 class="list-group-item-heading">List group item
heading</h4>
<p class="list-group-item-text">Donec id elit non mi
porta gravida at eget metus. Maecenas sed diam eget risus varius
blandit.</p>
</a>
</div>
</div><!-- /.col-sm-4 -->
</div>
<div class="page-header">
<h1>Panels</h1>
</div>
<div class="row">
<div class="col-sm-4">
<div class="panel panel-default">
<div class="panel-heading">
<h3 class="panel-title">Panel
</div>
<div class="panel-body">
Panel content
</div>
</div>
<div class="panel panel-primary">
<div class="panel-heading">
<h3 class="panel-title">Panel
</div>
<div class="panel-body">
Panel content
</div>
</div>
</div><!-- /.col-sm-4 -->
<div class="col-sm-4">
<div class="panel panel-success">
<div class="panel-heading">
<h3 class="panel-title">Panel
</div>
<div class="panel-body">
Panel content
</div>
</div>
<div class="panel panel-info">
<div class="panel-heading">
<h3 class="panel-title">Panel
title</h3>
title</h3>
title</h3>
title</h3>
www.openclassrooms.com
250/252
</div>
<div class="panel-body">
Panel content
</div>
</div>
</div><!-- /.col-sm-4 -->
<div class="col-sm-4">
<div class="panel panel-warning">
<div class="panel-heading">
<h3 class="panel-title">Panel title</h3>
</div>
<div class="panel-body">
Panel content
</div>
</div>
<div class="panel panel-danger">
<div class="panel-heading">
<h3 class="panel-title">Panel title</h3>
</div>
<div class="panel-body">
Panel content
</div>
</div>
</div><!-- /.col-sm-4 -->
</div>
<div class="page-header">
<h1>Wells</h1>
</div>
<div class="well">
<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit.
Maecenas sed diam eget risus varius blandit sit amet non magna.
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Praesent
commodo cursus magna, vel scelerisque nisl consectetur et. Cras
mattis consectetur purus sit amet fermentum. Duis mollis, est non
commodo luctus, nisi erat porttitor ligula, eget lacinia odio sem
nec elit. Aenean lacinia bibendum nulla sed consectetur.</p>
</div>
</div> <!-- /container -->
<!-- Bootstrap core JavaScript
================================================== -->
<!-- Placed at the end of the document so the pages load faster
-->
<script src="assets/js/jquery.js"></script>
<script src="assets/js/bootstrap.min.js"></script>
</body>
</html>
www.openclassrooms.com
251/252
Thme personnalis
Tester !
Il ne s'agit videmment ici que d'une modification sommaire de Bootstrap mais elle vous montre la dmarche adopter. Si vous
avez du mal composer une palette colore pour vos pages, vous pouvez trouver des inspirations sur le site communautaire
Colour Lover.
En rsum :
On peut gnrer une version personnalise de Bootstrap partir de l'interface propose en ligne en modifiant des
paramtres.
Bootstrap utilise LESS, un langage qui simplifie et organise l'criture des fichiers CSS. On peut crer une version adapte
de Bootstrap en modifiant directement les fichiers LESS.
Bootstrap propose un thme optionnel. Il est aussi possible de crer son propre thme.
Voil, vous tes arrivs au bout de ce cours.
Je suis conscient de n'avoir pas puis le sujet. D'autre part ce framework est
appel voluer rapidement et j'essaierai de maintenir mon cours jours.
J'espre que ce cours vous aura permis de dcouvrir ce framework et donn envie de l'utiliser
www.openclassrooms.com