Académique Documents
Professionnel Documents
Culture Documents
Prenez en Main Bootstrap PDF
Prenez en Main Bootstrap PDF
uand on cre des sites web, on passe beaucoup de temps composer des pages
Q isoles ou des templates. Combiner le HTML et le CSS nest pas toujours des plus
faciles. Dautre part, la multiplication des supports de visualisation (allant des
petits crans de smartphones des crans gants) complique le problme. On finit par
se crer peu peu une librairie personnelle qui volue au gr des progrs technologiques.
Cest ce qui sest pass chez Twitter, o chaque dveloppeur avait cr sa librairie et o
il devenait vraiment difficile de maintenir une cohrence et surtout de faire voluer les
applications. Cest alors que Mark Otto et Jaconb Thornton se sont attels la tche de
crer une librairie commune. Le succs fut rapide, tant au sein de cette entreprise qu
lextrieur, o elle a rpondu une attente vidente. Le fait dadopter cette librairie
ma fait gagner un temps considrable, dcouvrir des aspects qui mavaient chapps,
et en comprendre dautres qui demeuraient un peu abscons jusque l. Les critiques
concernant lhomognisation visuelle des sites utilisant cette librairie ne rsistent pas
la pratique, parce quil est facile dorganiser son propre visuel une fois quon matrise
un peu ses arcanes, ce qui est lun des propos de cet ouvrage dinitiation.
Bootstrap
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 larchitecture dune page web. Mais Bootstrap va bien plus loin
quoffrir du code CSS dj bien organis et structur. Il offre aussi des plugins jQuery
de qualit pour enrichir vos pages.
i
CHAPITRE 0. AVANT-PROPOS
proposs, vous serez capables dutiliser efficacement cette librairie et de ladapter vos
besoins particuliers. Voici les chapitres du cours et une prsentation succincte de ce
quils proposent.
2. Une grille ? Lorganisation spatiale des pages web est lune des premires pr-
occupations lorsque lon cre un site web. Est-ce quon prvoit 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
informations ? Faut-il prvoir un bas de page ? Bootstrap ne rpond videmment
pas ces questions, mais en revanche il peut grandement vous faciliter la tche,
avec son systme de grille, pour obtenir le rsultat que vous souhaitez. Je vous
propose une petite visite guide. . .
4. lments de base : Une page web contient du texte et des images mais aussi un
certain nombre dlments trs frquents, comme des listes, des tableaux, des for-
mulaires, des icnes, des boutons... Crer une harmonie dans la prsentation des
tous ces lments nest 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.
ii
COMMENT LIRE CE LIVRE ?
Remerciements
Rdiger un livre est toujours une aventure la fois personnelle et partage. Je suis
dj lauteur de 3 ouvrages dans des domaines trs loigns de linformatique, mais qui
mont donn loccasion de dcouvrir le monde de ldition. Je dois dire que le dialogue
avec lquipe dOpenClassrooms, simple et rafrachissant, change de celui que jai pu
exprimenter par ailleurs. Jai aussi envie de remercier les lecteurs de mon cours sur le
site qui mont beaucoup encourag. Je me suis ainsi rendu compte de son utilit.
iii
CHAPITRE 0. AVANT-PROPOS
iv
Table des matires
Avant-propos i
Bootstrap . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . i
Quallez-vous apprendre en lisant ce livre ? . . . . . . . . . . . . . . . . . . . . i
Comment lire ce livre ? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . iii
Suivez lordre des chapitres . . . . . . . . . . . . . . . . . . . . . . . . . iii
Pratiquez en mme temps . . . . . . . . . . . . . . . . . . . . . . . . . . iii
Remerciements . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . iii
I Premiers pas 1
1 Mise en route 3
Un framework ? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4
Les intrts . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4
Les inconvnients . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5
Dcouverte de Bootstrap . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5
Origine de Bootstrap . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5
Contenu du kit . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5
volution de Bootstrap . . . . . . . . . . . . . . . . . . . . . . . . . . . 6
Installation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7
Installation de Bootstrap . . . . . . . . . . . . . . . . . . . . . . . . . . 7
Les CDN . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10
Une trame pour dmarrer . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11
v
TABLE DES MATIRES
Le template de base . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11
Un template de dmarrage . . . . . . . . . . . . . . . . . . . . . . . . . . 12
Les Media Queries . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15
2 Une grille ? 19
Prsentation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20
Le principe dune grille . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20
Terminologie . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20
La grille de Bootstrap . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21
Organisation de la grille . . . . . . . . . . . . . . . . . . . . . . . . . . . 21
La grille en pratique . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27
Le conteneur . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27
Une seule range . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 28
Plusieurs ranges . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 28
Sauter des colonnes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 29
Imbrication dlments . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31
Ordre des colonnes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 32
Un petit TP . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 33
Mise en page . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 34
Premier cas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 34
Second cas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 35
Troisime cas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 37
Quatrime cas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 40
3 Un peu de pratique 45
Combiner les formats et exemple de page . . . . . . . . . . . . . . . . . . . . 46
Combinaison de classes col-* . . . . . . . . . . . . . . . . . . . . . . 46
Page dexemple . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 49
Cas pratiques et classes responsive . . . . . . . . . . . . . . . . . . . . . . 56
Exercice 1 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 56
Exercice 2 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 64
4 Elments de base 73
vi
TABLE DES MATIRES
vii
TABLE DES MATIRES
viii
TABLE DES MATIRES
ix
TABLE DES MATIRES
x
Premire partie
Premiers pas
1
Chapitre 1
Mise en route
Difficult :
Pour utiliser efficacement Bootstrap, vous devez dj tre convaincu de son utilit, vous
devez aussi savoir linstaller. Ce chapitre est destin vous faire dcouvrir en quoi Bootstrap
peut vous aider et comment vous devez le mettre en uvre pour lutiliser efficacement.
Nous aborderons galement les Medias Queries que Bootstrap utilise pour que nos pages
sadaptent automatiquement au support que nous utilisons pour les visualiser.
3
CHAPITRE 1. MISE EN ROUTE
Un framework ?
Avant toute chose, il faut dfinir ce quest un framework. Il sagit dun 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 dautres ct
client (dsigns frontend en anglais). Bootstrap fait partie de cette deuxime catgo-
rie. Les frameworks CSS sont spcialiss, comme leur nom lindique, dans les CSS !
Cest--dire quils nous aident mettre en forme les pages web : organisation, aspect,
animation. . . Ils sont devenus la mode et il en existe un certain nombre :
http://elasticss.com/
http://knacss.com/
http://blueprintcss.org/
http://960.gs/
http://yuilibrary.com/
http://52framework.com/
http://inuitcss.com/
http://elements.projectdesigns.org/
http://bluetrip.org/
http://ez-css.org/
etc.
Bootstrap est un framework CSS, mais pas seulement, puisquil embarque galement
des composants HTML et JavaScript. Il comporte un systme de grille simple et effi-
cace pour mettre en ordre laspect visuel dune page web. Il apporte du style pour les
boutons, les formulaires, la navigation. . . Il permet ainsi de concevoir un site web rapi-
dement et avec peu de lignes de code ajoutes. Le framework le plus proche de Boots-
trap est sans doute http://foundation.zurb.com/ qui est prsent comme The
most advanced responsive front-end framework in the world . Cette absence de mo-
destie est-elle de mise ? Je pense que cest 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,
cest dire que la prsentation est similaire quel que soit le navigateur utilis et
dune parfaite compatibilit ;
Les frameworks CSS font gagner du temps de dveloppement parce quils nous pro-
posent 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
4
DCOUVERTE DE BOOTSTRAP
des lments ;
Les frameworks CSS offrent souvent des lments complmentaires : boutons esth-
tiques, barres de navigation, etc. ;
La grande diffusion de nouveaux moyens de visualisation du web (smartphones, ta-
blettes. . .) impose dsormais la prise en compte de tailles dcran trs varies ; les
frameworks CSS prennent gnralement en compte cette contrainte.
Les inconvnients
Pour utiliser efficacement un framework il faut bien le connatre, ce qui implique un
temps dapprentissage ;
La normalisation de la prsentation peut devenir lassante en lissant les effets visuels.
Par rapport aux deux inconvnients noncs, Bootstrap est dune prise en main rapide
mme pour un dbutant et est totalement configurable parce quil est construit avec
LESS http://lesscss.org/ (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 luniformisation de
laspect des pages web. Il sagissait juste de stylisation CSS, mais le framework sest
ensuite enrichi de composants Javascript.
Il a ensuite t publi en 2011 en devenant rapidement populaire parce quil est venu
se positionner dans un espace vacant du dveloppement. Son systme de grille de 12
colonnes est devenu une rfrence. Dautre 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 ac-
tuellement la version 3. Celle-ci a pris un virage particulier en intgrant laspect
responsive par dfaut, alors quauparavant cette fonctionnalit faisait lobjet dun
fichier spar. Cette version est mme dclare comme mobile-first . Avec lutilisa-
tion croissante dappareils mobiles, le framework sest 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 ;
5
CHAPITRE 1. MISE EN ROUTE
Les navigateurs nadoptent 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. Dautre 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 dagir
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 - http:
//nicolasgallagher.com/about-normalize-css/.
volution de Bootstrap
Bootstrap est un framework trs populaire qui volue trs rapidement avec larrive
frquente de nouvelles versions. Cest la fois un avantage (il samliore de plus en
plus) et un inconvnient (le code quon a crit pour une mise en page nest rapidement
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 nest videmment pas une obligation. Lvolution du framework sest
faite essentiellement en direction des appareils nomades qui constituent peu peu le
parc le plus important dappareils pour surfer sur Internet.
La principale source dinformation pour connatre les changements des nouvelles ver-
sions est le blog officiel - http://blog.getbootstrap.com/. Il est aussi intressant
de sinformer en amont sur la page GitHub du projet - https://www.github.com/
twbs/bootstrap pour connatre les demandes des utilisateurs (Pull Requests) et les
6
INSTALLATION
Installation
Installation de Bootstrap
Linstallation de Bootstrap est simple : cliquez sur le bouton de tlchargement sur le
site du framework - http://getbootstrap.com/getting-started/#download. Vous
avez disposition trois boutons :
Download Bootstrap : permet de rcuprer juste les fichiers ncessaires au fonc-
tionnement de Bootstrap,
Download source : permet de rcuprer en plus tous les fichiers source,
Download Sass : cest 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 - https:
//www.github.com/twbs/bootstrap, ou mme linstaller avec Bower - http://bower.
io/ si vous naimez 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 1.1.
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 (voir figure 1.2).
Voyons un peu ces fichiers :
bootstrap.css comporte les classes de base de Bootstrap ;
bootstrap.min.css comporte les mmes classes de base que bootstrap.css mais
est compil ;
bootstrap-theme.css contient des rgles de styles particulires pour crer un thme
spcifique pour Bootstrap ;
bootstrap-theme.min.css est identique bootstrap-theme.css mais est compil ;
7
CHAPITRE 1. MISE EN ROUTE
Figure 1.2 Le dossier dist contient les fichiers utiles lutilisation de Bootstrap
Daccord, mais que mettre sur un site pour que Bootstrap fonctionne ?
La figure 1.3 montre les fichiers utiles pendant la phase de dveloppement (les fichiers
bootstrap.js et jquery.js ne sont prvoir que si vous utilisez des plugins jQuery
et le dossier fonts uniquement si vous utilisez les icnes).
La figure 1.4 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).
8
INSTALLATION
Dans tous les exemples de ce cours, je pars du principe quun 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
dailleurs tre imprativement au format HTML 5, il faut donc prvoir le bon DOC-
TYPE :
1 <! DOCTYPE html >
2 ...
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 tlchar-
9
CHAPITRE 1. MISE EN ROUTE
Et le fichier de thme ?
Les CDN
CDN est lacronyme de Content delivery network ; cest 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. . .
Daprs certains, lutilisation dun CDN, qui impose une requte DNS supplmentaire,
ne serait judicieuse que si lon a beaucoup de librairies charger. Dautre part si vous
modifiez le fichier CSS de Bootstrap pour ladapter vos besoin, vous ne pourrez
plus bnficier des avantages dun CDN. Mais si vous voulez profiter de cette possi-
bilit pour Bootstrap, utilisez bootstrapcdn - http://bootstrapcdn.com/. Vous pou-
vez videmment utiliser un CDN galement pour jQuery, par exemple chez Google -
https://www.developers.google.com/speed/libraries/.
videmment si vous utilisez des CDN, linstallation en est dautant simplifie. Vous
navez qu adapter les appels des librairies :
10
UNE TRAME POUR DMARRER
Cette ligne concerne uniquement les mobiles. On demande que laffichage occupe tout
lespace 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 :
1 < link href = " css / bootstrap . min . css " rel = " stylesheet " >
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) :
1 < script src = " https :// code . jquery . com / jquery . js " > </ script >
2 < script src = " js / bootstrap . min . js " > </ script >
11
CHAPITRE 1. MISE EN ROUTE
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 - https:
//www.github.com/scottjehl/Respond. 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 daccs 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) :
1 <! DOCTYPE html >
2 < html >
3 < head >
4 < title > Bootstrap Template </ title >
5 < meta name = " viewport " content = " width = device - width , initial -
scale = 1 . 0 " >
6 < link href = " bootstrap / css / bootstrap . min . css " rel = "
stylesheet " >
7 <! -- HTML5 Shim and Respond . js IE8 support of HTML5
elements and media queries -- >
8 <! -- WARNING : Respond . js doesn ' t work if you view the page
via file :// -- >
9 <! --[ if lt IE 9 ] >
10 < script src = " https :// oss . maxcdn . com / libs / html5shiv / 3 . 7 . 0 /
html5shiv . js " > </ script >
11 < script src = " https :// oss . maxcdn . com / libs / respond . js / 1 . 3 . 0
/ respond . min . js " > </ script >
12 < ![ endif ] -- >
13 </ head >
14 < body >
15 < h1 > Hello , world ! </ h1 >
16 < script src = " https :// code . jquery . com / jquery . js " > </ script >
17 < script src = " bootstrap / js / bootstrap . min . js " > </ script >
18 </ body >
19 </ html >
Un template de dmarrage
Vous pouvez trouver galement sur le site 18 templates dexemple. Les lments n-
cessaires la comprhension de ces exemples seront exposs tout au long de ce cours.
Voyons toutefois le premier exemple, qui est le plus simple (http://getbootstrap.
com/examples/starter-template/).
1 <! DOCTYPE html >
2 < html lang = " en " >
3 < head >
4 < meta charset = " utf - 8 " >
12
UNE TRAME POUR DMARRER
5 < meta http - equiv = "X - UA - Compatible " content = " IE = edge " >
6 < meta name = " viewport " content = " width = device - width , initial -
scale = 1 . 0 " >
7 < meta name = " description " content = " " >
8 < meta name = " author " content = " " >
9 < link rel = " shortcut icon " href = " ../../ docs - assets / ico /
favicon . png " >
10
11 < title > Starter Template for Bootstrap </ title >
12
13 <! -- Bootstrap core CSS -- >
14 < link href = " ../../ dist / css / bootstrap . css " rel = " stylesheet " >
15
16 <! -- Custom styles for this template -- >
17 < link href = " starter - template . css " rel = " stylesheet " >
18
19 <! -- HTML5 shim and Respond . js IE8 support of HTML5
elements and media queries -- >
20 <! --[ if lt IE 9 ] >
21 < script src = " ../../ assets / js / html5shiv . js " > </ script >
22 < script src = " ../../ assets / js / respond . min . js " > </ script >
23 < ![ endif ] -- >
24 </ head >
25
26 < body >
27
28 < div class = " navbar navbar - inverse navbar - fixed - top " role = "
navigation " >
29 < div class = " container " >
30 < div class = " navbar - header " >
31 < button type = " button " class = " navbar - toggle " data -
toggle = " collapse " data - target = " . navbar - collapse " >
32 < span class = " icon - bar " > </ span >
33 < span class = " icon - bar " > </ span >
34 < span class = " icon - bar " > </ span >
35 </ button >
36 <a class = " navbar - brand " href = " # " > Project name </ a >
37 </ div >
38 < div class = " collapse navbar - collapse " >
39 < ul class = " nav navbar - nav " >
40 < li class = " active " > <a href = " # " > Home </ a > </ li >
41 < li > <a href = " # about " > About </ a > </ li >
42 < li > <a href = " # contact " > Contact </ a > </ li >
43 </ ul >
44 </ div > <! -- /. nav - collapse -- >
45 </ div >
46 </ div >
47
48 < div class = " container " >
49
13
CHAPITRE 1. MISE EN ROUTE
14
LES MEDIA QUERIES
Le contenu de la page est ensuite insr dans une DIV comportant la classe container :
1 < div class = " container " >
2 < div class = " starter - template " >
3 < h1 > Bootstrap starter template </ h1 >
4 <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 >
5 </ div >
6 </ div > <! -- /. container -- >
Nous verrons galement lintrt 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. lissue de ce cours vous aurez tout en main pour le
faire. . .
15
CHAPITRE 1. MISE EN ROUTE
La liste est longue, malheureusement peu de navigateurs actuels sont capables de di-
grer tout a. On se limite en gnral la taille de laffichage, lorientation et parfois
le ratio.
Ah ! Bonne rflexion. Cette distinction na aucun sens pour les crans dordinateurs
mais trouve tout son intrt pour les smartphones. La taille de lcran 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 nest pas la mme valeur, je nen 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
daffichage !
Mais ce nest pas le seul souci ! Le navigateur embarqu sur un smartphone a lui aussi
une certaine ide de la surface daffichage dont il dispose (le viewport). Par exemple,
pour continuer avec lexemple de liPhone 4, qui utilise Safari, ce dernier pense disposer
dune largeur de 980 px ! Sur ces appareils il est aussi possible dutiliser le zoom et
notre mise en page risque de sen ressentir. On peut se demander comment sen 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 :
1 < meta name = " viewport " content = " width = device - width , initial -
scale = 1 . 0 " >
Une media query est une expression dont la valeur est soit vraie, soit fausse. Voici un
exemple dans du code CSS :
1 @media ( max - width : 767px ) {
2 ...
3 }
@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. Lex-
pression situe entre parenthses est value, et si elle est vraie , les rgles situes
dans le bloc sont prises en compte.
Ici lexpression est (max-width: 767px), elle se comprend facilement. Elle est vraie
si le support de visualisation de la page a une largeur daffichage infrieure ou gale
16
LES MEDIA QUERIES
767px.
Oui parce quon veut prendre en compte tous les mdias existants ! Voici une syntaxe
quivalente :
1 @media all and ( max - width : 767px ) { ... }
On en profite pour voir quon peut combiner des lments avec des oprateurs logiques.
Voici une autre expression avec le mme oprateur logique :
1 @media ( min - width : 768px ) and ( max - width : 979px ) { ... }
Ici, on veut prendre en compte les rgles du bloc si laffichage se situe entre 768px et
979px.
Si on veut appliquer des rgles lorsque lorientation est portrait , voici la syntaxe
utiliser :
1 @media ( orientation : portrait ) { ... }
Comme vous pouvez le voir, la syntaxe est simple, ce qui lest moins ce sont les rgles
dfinir. Mais quand vous utilisez Bootstrap, vous navez pas vous soucier de tout
a. . . Si vous explorez le code de Bootstrap, vous trouverez beaucoup dutilisation des
Media Queries, comme par exemple ici, o est dfinie une rgle de dimension maximale
pour la classe container lorsque laffichage est dau moins 992 pixels :
1 @media ( min - width : 992px ) {
2 . container {
3 max - width : 970px ;
4 }
5 ...
6 }
Nous verrons plus loin dans ce cours que Bootstrap dfinit quatre types de medias selon
la dimension de laffichage. Voici la syntaxe utilise :
1 /* Extra small devices ( phones , up to 480px ) */
2 /* No media query since this is the default in Bootstrap */
3
4 /* Small devices ( tablets , 768px and up ) */
5 @media ( min - width : @screen - tablet ) { ... }
6
7 /* Medium devices ( tablets , 992px and up ) */
8 @media ( min - width : @screen - desktop ) { ... }
9
10 /* Large devices ( large desktops , 1200px and up ) */
11 @media ( min - width : @screen - large - desktop ) { ... }
17
CHAPITRE 1. MISE EN ROUTE
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 sinstalle 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 supports
de visualisation.
18
Chapitre 2
Une grille ?
Difficult :
Lorganisation spatiale des pages web est lune des premires proccupations lorsque lon
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. . .
19
CHAPITRE 2. UNE GRILLE ?
Prsentation
On peut alors dcider dorganiser du contenu en utilisant pour chaque lment une ou
plusieurs cellules, comme la figure 2.2.
Terminologie
Une grille est dcoupe en ranges (appeles row, parce que tout est en anglais) et
colonnes (col ), comme la figure 2.3.
20
PRSENTATION
La grille de Bootstrap
La grille de Bootstrap nest 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 quon vient de voir. En revanche,
il nen est pas vraiment de mme pour les ranges. Ces dernires ont la hauteur de leur
contenu (voir figure 2.4).
Moralit, une range prend la hauteur du plus gros lment quelle contient. Puisque
la largeur des colonnes est contrainte, le flux des donnes scoule 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
lon 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 quil 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 quil sadapte
la taille de lcran. Il permet une visualisation aussi bien sur un cran gant que
sur un smartphone. Mais que se passe-t-il pour les lments dune page web lorsque
la fentre diminue ou slargit ? On peut envisager deux hypothses : les lments se
redimensionnent en restant positionns, ou alors ils sempilent quand la fentre devient
plus troite et se positionnent cte cte quand elle slargit. Voici aux figures suivantes
lexemple de la page daccueil du site OpenClassrooms - http://fr.openclassrooms.
21
CHAPITRE 2. UNE GRILLE ?
com/ qui illustre ce phnomne avec trois situations (cran large, figure 2.5, cran
moyen, figure 2.6, et petit cran, 2.7) :
Plutt que de ratatiner les lments au risque de les rendre illisibles, le choix a t
fait de les empiler petit petit quand la fentre devient plus troite. Une autre option
pourrait consister supprimer des lments pas vraiment utiles, mais nous reviendrons
plus tard sur ce point. Pour le moment on va juste se demander comment on peut
choisir entre les deux options prsentes la figure 2.8.
Cest ici quinterviennent 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.
Le nom des classes est intuitif : xs pour x-small, sm pour small, md pour medium et lg
pour large.
22
PRSENTATION
23
CHAPITRE 2. UNE GRILLE ?
24
PRSENTATION
Un petit exemple ?
La figure 2.9 illustre ce code avec leffet quand on passe sur un cran plus grand.
La figure 2.10 illustre ce code avec leffet quand on passe sur un cran plus petit ou
plus grand.
Vous remarquez que lors de lempilage, les colonnes prennent toute la place
disponible.
25
CHAPITRE 2. UNE GRILLE ?
La figure 2.11 illustre ce code avec leffet quand on passe sur un cran de plus en plus
petit.
Le seul but de ces rgles de style est de faire apparatre nettement les lments lcran.
Une petite marge interne en haut pour le corps, pour viter que tout soit coll en haut
de lcran. Des bordures (avec des coins arrondis pour lesthtique) et un fond color
pour distinguer les lments. Une hauteur fixe 40 pixels, parce qutant donn que
26
LA GRILLE EN PRATIQUE
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 quil 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 sadapte en fonc-
tion de la largeur de lcran. La classe container-fluid permet la grille doccuper
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.
Le centrage du conteneur est fait de faon classique avec de petites marges internes de
15 pixels et les marges droite et gauche automatiques :
1 . container {
2 padding - right : 15px ;
3 padding - left : 15px ;
4 margin - right : auto ;
5 margin - left : auto ;
6 }
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 :
1 @media ( min - width : 768px ) {
2 . container {
3 max - width : 750px ;
27
CHAPITRE 2. UNE GRILLE ?
4 }
5 ...
6 @media ( min - width : 992px ) {
7 . container {
8 max - width : 970px ;
9 }
10 ...
11 @media ( min - width : 1200px ) {
12 . container {
13 max - width : 1170px ;
14 }
15 ...
Figure 2.13 Une seule range avec deux lments qui occupent tout lespace
Plusieurs ranges
Pour obtenir plusieurs ranges, il suffit dutiliser plusieurs fois la classe row. Un petit
exemple avec 3 ranges pour voir leffet :
28
LA GRILLE EN PRATIQUE
Dans ce cas, 6 colonnes reprsentent la moiti de la fentre donc 50%. Voici un exemple :
29
CHAPITRE 2. UNE GRILLE ?
30
LA GRILLE EN PRATIQUE
Imbrication dlments
On doit souvent imbriquer des lments dans une page web, est-ce possible avec Boots-
trap ? Autrement dit inclure un row dans un col. Eh bien, on va tester a tout de
suite :
1 <! DOCTYPE html >
2 < html >
3 < head >
4 < link href = " assets / css / bootstrap . css " rel = " stylesheet " >
5 < link href = " assets / css / tuto . css " rel = " stylesheet " >
6 </ head >
7 < body >
8 < div class = " container " >
9 < div class = " row " >
10 < div class = " col - lg - 8 " >8 colonnes
11 < div class = " row " >
12 < div class = " col - lg - 3 " >3 colonnes </ div >
13 < div class = " col - lg - 6 " >6 colonnes </ div >
14 < div class = " col - lg - 3 " >3 colonnes </ div >
15 </ div >
16 </ div >
17 </ div >
18 </ div >
19 </ body >
20 </ html >
31
CHAPITRE 2. UNE GRILLE ?
10 < div class = " col - md - 3 col - md - offset - 1 " > Quatri me
niveau avec 3 colonnes </ div >
11 < div class = " col - md - 5 col - md - offset - 1 " > Quatri me
niveau avec 5 colonnes </ div >
12 </ div >
13 </ div >
14 </ div >
15 </ div >
16 < div class = " col - md - 4 " > Second niveau avec 4 colonnes </ div >
17 </ div >
18 </ div >
19 </ div >
32
LA GRILLE EN PRATIQUE
Un petit TP
Pour vous entraner, je vous propose dobtenir le rsultat visible la figure 2.20.
Donc deux zones spares avec un offset de 2 colonnes dans la partie gauche.
Voici la solution :
1 <! DOCTYPE html >
2 < html >
3 < head >
4 < link href = " assets / css / bootstrap . css " rel = " stylesheet " >
5 < link href = " assets / css / tuto . css " rel = " stylesheet " >
6 </ head >
7 < body >
8 < div class = " container " >
9 < div class = " row " >
10 < div class = " col - lg - 6 " >6 colonnes
11 < div class = " row " >
12 < div class = " col - lg - 4 " >4 colonnes </ div >
13 < div class = " col - lg - offset - 4 col - lg - 4 " >4 colonnes </
div >
14 </ div >
15 </ div >
16 < div class = " col - lg - 6 " >6 colonnes
17 < div class = " row " >
18 < div class = " col - lg - 4 " >4 colonnes </ div >
19 < div class = " col - lg - 8 " >8 colonnes </ div >
20 </ div >
33
CHAPITRE 2. UNE GRILLE ?
Mise en page
Lintrt principal dune grille est de raliser une mise en page. Nous allons voir quelques
exemples pour structurer correctement une page.
Premier cas
Commenons par quelque chose de simple avec une en-tte, un menu gauche, une
section droite et un pied de page :
1 <! DOCTYPE html >
2 < html >
3 < head >
4 < link href = " assets / css / bootstrap . css " rel = " stylesheet " >
5 < link href = " assets / css / tuto . css " rel = " stylesheet " >
6 </ head >
7 < body >
8 < div class = " container " >
9 < header class = " row " >
10 < div class = " col - lg - 12 " >
11 Entete
12 </ div >
13 </ header >
14 < div class = " row " >
15 < nav class = " col - lg - 2 " >
16 Menu
17 </ nav >
18 < section class = " col - lg - 10 " >
19 Section
20 </ section >
21 </ div >
22 < footer class = " row " >
23 Pied de page
24 </ footer >
25 </ div >
26 </ body >
27 </ html >
34
MISE EN PAGE
Si je veux que ma mise en forme reste stable aussi pour les crans moyens, comment
faire ? Il me suffit dutiliser les classes col-md-* la place de col-lg-*, ce qui a pour
effet de dplacer la limite 992 pixels (testez ! http://bootstrap.twit.free.fr/
tutov3/grid07a.html). De la mme faon, lutilisation des classes col-sm-* dplace
la limite 768 pixels (testez ! http://bootstrap.twit.free.fr/tutov3/grid07b.
html). . .
Jai le mme rsultat sans utiliser la classe col-lg-12, est-elle vraiment utile ?
On obtient effectivement la mme mise en page, mais les classes col-* ont un padding
droite et gauche de 15 pixels, et si on nutilise pas la classe col-lg-12, on va avoir une
incohrence au niveau de laffichage du contenu.
Second cas
Considrons maintenant un cas un peu plus riche :
1 <! DOCTYPE html >
2 < html >
3 < head >
4 < link href = " assets / css / bootstrap . css " rel = " stylesheet " >
5 < link href = " assets / css / tuto . css " rel = " stylesheet " >
6 </ head >
7 < body >
35
CHAPITRE 2. UNE GRILLE ?
On a conserv len-tte et le pied de page, ainsi que le menu, mais on a intgr dans le
contenu un article et un aside. Lensemble est prvu pour fonctionner sur desktop
(grand et petit). Pour les tablettes, on se retrouve avec un empilage pour le contenu de
la section (utilisation de classes col-md-* pour article et aside), comme la figure
2.24.
36
MISE EN PAGE
Et comme on na rien prvu de spcial pour les smartphones, tout sempile (voir figure
2.25).
Troisime cas
Enrichissons encore la mise en page :
1 <! DOCTYPE html >
2 < html >
3 < head >
4 < link href = " assets / css / bootstrap . css " rel = " stylesheet " >
5 < link href = " assets / css / tuto . css " rel = " stylesheet " >
6 < style type = " text / css " >
7 /* Style pour l ' exemple */
8 article . col - sm - 10 , nav . col - sm - 2 {
9 line - height : 100px ;
10 }
11 </ style >
12 </ head >
13 < body >
14 < div class = " container " >
37
CHAPITRE 2. UNE GRILLE ?
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.
38
MISE EN PAGE
39
CHAPITRE 2. UNE GRILLE ?
Quatrime cas
Terminons avec un cas plus fourni :
1 <! DOCTYPE html >
2 < html >
3 < head >
4 < link href = " assets / css / bootstrap . css " rel = " stylesheet " >
5 < link href = " assets / css / tuto . css " rel = " stylesheet " >
6 < style type = " text / css " >
7 /* Style pour l ' exemple */
8 footer {
9 border : 0 ;
10 }
11 article . col - sm -6 , nav . col - sm - 2 {
12 line - height : 60px ;
13 }
14 </ style >
15 </ head >
16 < body >
17 < div class = " container " >
18 < header class = " row " >
19 < div class = " col - lg - 12 " >
20 Entete
21 </ div >
22 </ header >
23 < div class = " row " >
24 < nav class = " col - sm - 2 " >
25 Menu
26 </ nav >
27 < section class = " col - sm - 10 " >
28 Section
29 < div class = " row " >
30 < div class = " col - sm - 10 " >
31 < div class = " row " >
32 < article class = " col - sm - 6 " >
33 Article
34 </ article >
35 < article class = " col - sm - 6 " >
36 Article
37 </ article >
38 < article class = " col - sm - 6 " >
39 Article
40 </ article >
41 < article class = " col - sm - 6 " >
42 Article
43 </ article >
44 < article class = " col - sm - 6 " >
45 Article
46 </ article >
47 < article class = " col - sm - 6 " >
40
MISE EN PAGE
48 Article
49 </ article >
50 </ div >
51 </ div >
52 < div class = " col - sm - 2 " >
53 < div class = " row " >
54 < aside >
55 Aside 1
56 </ aside >
57 < aside >
58 Aside 2
59 </ aside >
60 </ div >
61 </ div >
62 </ div >
63 </ section >
64 < section class = " col - sm - offset - 2 col - sm - 10 " >
65 Section
66 < div class = " row " >
67 < article class = " col - sm - 6 " >
68 Article
69 </ article >
70 < article class = " col - sm - 6 " >
71 Article
72 </ article >
73 < article class = " col - sm - 6 " >
74 Article
75 </ article >
76 < article class = " col - sm - 6 " >
77 Article
78 </ article >
79 < article class = " col - sm - 6 " >
80 Article
81 </ article >
82 < article class = " col - sm - 6 " >
83 Article
84 </ article >
85 </ div >
86 </ section >
87 </ div >
88 < footer class = " row " >
89 < div class = " col - lg - 12 " >
90 Pied de page
91 </ div >
92 </ footer >
93 </ div >
94 </ body >
95 </ html >
41
CHAPITRE 2. UNE GRILLE ?
42
MISE EN PAGE
Dans les 2 sections, jai mis 6 articles dune largeur de 6 colonnes qui se positionnent
parfaitement. Il nest pas utile de crer 3 ranges. Dans la deuxime section, je nai pas
mis daside pour montrer un mlange de compositions. Le dcalage de la deuxime
section pour tenir compte de la largeur du menu se fait tout simplement avec une classe
doffset. 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 quon peut obtenir facilement une struc-
ture de page aussi complexe que lon veut. Le point le plus dlicat demeure le choix
des classes pour les colonnes en fonction du rsultat que lon 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 lon avait prvu. Si vous ny parvenez pas
avec une seule classe, alors la solution est den combiner plusieurs, cest ce que nous
allons voir bientt. . .
En rsum
Bootstrap propose une 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.
43
CHAPITRE 2. UNE GRILLE ?
44
Chapitre 3
Un peu de pratique
Difficult :
Nous avons vu en dtail les possibilits de la grille de Bootstrap. Nous avons vu gale-
ment 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.
45
CHAPITRE 3. UN PEU DE PRATIQUE
Nous avons vu des mises en page utilisant slectivement les classes pour les colonnes
prvues pour les diffrents formats de supports. Nous allons prsent envisager leur
combinaison pour grer certains cas. Dans la page raliser, je veux avoir des petites
photos cte cte. Supposons que je parte de cette structure pour cette partie de la
page :
46
COMBINER LES FORMATS ET EXEMPLE DE PAGE
27 < div class = " col - lg - 2 " > < img src = " images / t10 . jpg " alt = "
Tigre " > </ div >
28 < div class = " col - lg - 2 " > < img src = " images / t11 . jpg " alt = "
Tigre " > </ div >
29 < div class = " col - lg - 2 " > < img src = " images / t12 . jpg " alt = "
Tigre " > </ div >
30 </ section >
31 </ div >
32
33 </ body >
34 </ html >
Le rendu sur grand cran est parfait avec 6 photos sur la largeur (voir figure 3.1).
Mais a se gte quand je rtrcis la fentre, puisque je sais quen dessous de 1200
pixels les lments sempilent. Du coup je me retrouve avec une image sur la largeur,
et comme je les ai prvues en basse rsolution, elle pixellise, comme la figure 3.2.
Lidal serait davoir :
Sur moyen et grand cran : 6 images sur la largeur
Sur tablette : 4 images sur la largeur
Sur smartphone : 3 images sur la largeur
Comment raliser cela ? Tout simplement en combinant les classes col-* :
1 < div class = " container " >
2 < section class = " row " >
3 < div class = " col - xs - 4 col - sm - 3 col - md - 2 " > < img src = " images / t1
. jpg " alt = " Tigre " > </ div >
4 < div class = " col - xs - 4 col - sm - 3 col - md - 2 " > < img src = " images / t2
. jpg " alt = " Tigre " > </ div >
5 < div class = " col - xs - 4 col - sm - 3 col - md - 2 " > < img src = " images / t3
. jpg " alt = " Tigre " > </ div >
6 < div class = " col - xs - 4 col - sm - 3 col - md - 2 " > < img src = " images / t4
. jpg " alt = " Tigre " > </ div >
7 < div class = " col - xs - 4 col - sm - 3 col - md - 2 " > < img src = " images / t5
. jpg " alt = " Tigre " > </ div >
8 < div class = " col - xs - 4 col - sm - 3 col - md - 2 " > < img src = " images / t6
. jpg " alt = " Tigre " > </ div >
9 < div class = " col - xs - 4 col - sm - 3 col - md - 2 " > < img src = " images / t7
. jpg " alt = " Tigre " > </ div >
47
CHAPITRE 3. UN PEU DE PRATIQUE
48
COMBINER LES FORMATS ET EXEMPLE DE PAGE
10 < div class = " col - xs - 4 col - sm - 3 col - md - 2 " > < img src = " images / t8
. jpg " alt = " Tigre " > </ div >
11 < div class = " col - xs - 4 col - sm - 3 col - md - 2 " > < img src = " images / t9
. jpg " alt = " Tigre " > </ div >
12 < div class = " col - xs - 4 col - sm - 3 col - md - 2 " > < img src = " images /
t10 . jpg " alt = " Tigre " > </ div >
13 < div class = " col - xs - 4 col - sm - 3 col - md - 2 " > < img src = " images /
t11 . jpg " alt = " Tigre " > </ div >
14 < div class = " col - xs - 4 col - sm - 3 col - md - 2 " > < img src = " images /
t12 . jpg " alt = " Tigre " > </ div >
15 </ section >
16 </ div >
Page dexemple
Construisons maintenant une page complte qui intgre la partie que nous venons de
traiter :
49
CHAPITRE 3. UN PEU DE PRATIQUE
50
COMBINER LES FORMATS ET EXEMPLE DE PAGE
51
CHAPITRE 3. UN PEU DE PRATIQUE
La classe page-header
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 dy placer un titre comme je
lai fait ici :
1 < header class = " page - header " >
2 < h1 > Mon amour pour les tigres </ h1 >
3 </ header >
52
COMBINER LES FORMATS ET EXEMPLE DE PAGE
53
CHAPITRE 3. UN PEU DE PRATIQUE
54
COMBINER LES FORMATS ET EXEMPLE DE PAGE
Observez la figure 3.8 la qualit du popup lorsque lon passe le curseur au-dessus de
labrviation SAT.
Une citation
Une adresse
Dans la partie infrieure gauche figure une adresse. Jai simplement utilis la balise
<address> :
1 < address >
2 <p > Vous pouvez me contacter cette adresse : </ p >
55
CHAPITRE 3. UN PEU DE PRATIQUE
3 <p > < strong > Tigrou Alfred </ strong > < br >
4 All e des fauves < br >
5 28645 F lins - sur - Loire < br >
6 </ address >
Pour donner plus dharmonie cette page, jai t oblig dajouter une marge basse de
20px tous les col et jai oblig les images occuper tout lespace disponible :
1 [ class *= " col " ] {
2 margin - bottom : 20px ;
3 }
4 img {
5 width : 100 %;
6 }
Exercice 1
Le but est dobtenir une mise en page pour grand cran identique celle de la figure
3.11.
Rflchissez un peu avant de regarder la solution.
1 <! DOCTYPE html >
2 < html >
3 < head >
4 < link href = " assets / css / bootstrap . css " rel = " stylesheet " >
5 < link href = " assets / css / tuto . css " rel = " stylesheet " >
6 <! -- Un peu de style pour la visualisation -- >
7 < style type = " text / css " >
56
CAS PRATIQUES ET CLASSES RESPONSIVE
57
CHAPITRE 3. UN PEU DE PRATIQUE
41 Aside
42 </ aside >
43 < aside class = " col - lg - 12 " >
44 Aside
45 </ aside >
46 </ div >
47 </ div >
48
49 </ div >
50
51 < footer class = " row " >
52 < div class = " col - lg - 12 " >
53 Pied de page
54 </ div >
55 </ footer >
56
57 </ div >
58 </ body >
59 </ html >
58
CAS PRATIQUES ET CLASSES RESPONSIVE
59
CHAPITRE 3. UN PEU DE PRATIQUE
Jai remplac les classes col-lg-* par des classes col-md-* pour avoir un comporte-
ment de base pour crans moyens et grands. Jai 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 lon souhaite.
La figure 3.13 vous montre le rsultat sans cette ligne de code.
Que fait cette classe clearfix ? Regardons le code :
1 . clearfix : after {
2 clear : both ;
3 }
60
CAS PRATIQUES ET CLASSES RESPONSIVE
Autrement dit, on rinitialise les lments flottants qui suivent pour les ramener dans
le flux normal, et viter quils viennent recouvrir les lments prcdents. Nous allons
voir maintenant la classe visible-sm. . .
Pour poursuivre lexercice prcdent, il faut dabord voquer quelques classes trs utiles
qui vont nous permettre non plus de positionner diffremment les lments, mais car-
rment de les faire disparatre ou apparatre . Vous trouverez un tableau trs bien fait
dans la documentation - http://getbootstrap.com/css/#responsive-utilities,
visible la figure 3.14.
Nous avons dj utilis une de ces classes. Continuons en utiliser pour poursuivre
notre exercice en supprimant 2 asides pour les smartphones (voir figure 3.15).
Il suffit de changer une ligne, la ligne 40 :
1 <! DOCTYPE html >
2 < html >
3 < head >
4 < link href = " assets / css / bootstrap . css " rel = " stylesheet " >
5 < link href = " assets / css / tuto . css " rel = " stylesheet " >
6 <! -- Un peu de style pour la visualisation -- >
7 < style type = " text / css " >
61
CHAPITRE 3. UN PEU DE PRATIQUE
62
CAS PRATIQUES ET CLASSES RESPONSIVE
63
CHAPITRE 3. UN PEU DE PRATIQUE
58
59 </ div >
60 </ body >
61 </ html >
Exercice 2
Voyons maintenant un autre cas. Je veux obtenir le rsultat visible la figure 3.16.
Donc une en-tte qui prend toute la largeur de lcran, une navigation gauche, deux
sections accoles et un pied de page, le tout pour grand cran. Voici une solution :
1 <! DOCTYPE html >
2 < html >
3 < head >
4 < link href = " assets / css / bootstrap . css " rel = " stylesheet " >
5 < link href = " assets / css / tuto . css " rel = " stylesheet " >
6 <! -- Un peu de style pour la visualisation -- >
7 < style type = " text / css " >
8 . col - lg - 2 { line - height : 100px ; }
9 . col - lg - 5 { line - height : 200px ; }
10 . col - lg - 12 { line - height : 80px ; }
11 </ style >
12 </ head >
13 < body >
14
15 < header >
16 < div class = " col - lg - 12 " >
17 Entete
18 </ div >
19 </ header >
20
21 < div class = " container " >
22
23 < div class = " row " >
64
CAS PRATIQUES ET CLASSES RESPONSIVE
24
25 < nav class = " col - lg - 2 " >
26 Navigation
27 </ nav >
28
29 < section class = " col - lg - 5 " >
30 Section
31 </ section >
32 < section class = " col - lg - 5 " >
33 Section
34 </ section >
35
36 </ div >
37
38 < footer class = " row " >
39 < div class = " col - lg - 12 " >
40 Pied de page
41 </ div >
42 </ footer >
43
44 </ div >
45
46 </ body >
47 </ html >
Maintenant je me dis que mon application serait bien aussi sur cran moyen. Si je ne
fais rien, jobtiens le rsultat visible la figure 3.17.
a ne me plat pas trop, jaimerais que les 2 sections restent accoles, comme la figure
3.18.
Voici une solution :
1 <! DOCTYPE html >
2 < html >
3 < head >
4 < link href = " assets / css / bootstrap . css " rel = " stylesheet " >
5 < link href = " assets / css / tuto . css " rel = " stylesheet " >
6 <! -- Un peu de style pour la visualisation -- >
7 < style type = " text / css " >
8 . col - lg - 2 { line - height : 100px ; }
9 . col - lg - 5 { line - height : 200px ; }
10 . col - lg - 12 { line - height : 80px ; }
11 </ style >
12 </ head >
13 < body >
14
15 < header >
16 < div class = " col - lg - 12 " >
17 Entete
18 </ div >
19 </ header >
65
CHAPITRE 3. UN PEU DE PRATIQUE
66
CAS PRATIQUES ET CLASSES RESPONSIVE
20
21 < div class = " container " >
22
23 < div class = " row " >
24
25 < nav class = " col - md - 12 col - lg - 2 " >
26 Navigation
27 </ nav >
28
29 < section class = " col - md - 6 col - lg - 5 " >
30 Section
31 </ section >
32 < section class = " col - md - 6 col - lg - 5 " >
33 Section
34 </ section >
35
36 </ div >
37
38 < footer class = " row " >
39 < div class = " col - lg - 12 " >
40 Pied de page
41 </ div >
42 </ footer >
43
44 </ div >
45
46 </ body >
47 </ html >
Aprs rflexion, je me dis que mon application irait bien aussi sur tablette, lempi-
lement des lments me convient, mais jaimerais avoir une en-tte diffrente. Aprs
une nouvelle rflexion, jen veux aussi une diffrente sur smartphone. Avec les classes
responsives vues prcdemment, cest facile raliser :
1 <! DOCTYPE html >
2 < html >
3 < head >
4 < link href = " assets / css / bootstrap . css " rel = " stylesheet " >
5 < link href = " assets / css / tuto . css " rel = " stylesheet " >
6 <! -- Un peu de style pour la visualisation -- >
7 < style type = " text / css " >
8 . col - lg - 2 { line - height : 100px ; }
9 . col - lg - 5 { line - height : 200px ; }
10 . col - lg - 12 { line - height : 80px ; }
11 </ style >
12 </ head >
13 < body >
14
15 < header >
16 < div class = " visible - lg col - lg - 12 " >
17 Entete large
67
CHAPITRE 3. UN PEU DE PRATIQUE
Testez ! http://bootstrap.twit.free.fr/tutov3/grid13c.html
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.
68
CAS PRATIQUES ET CLASSES RESPONSIVE
On a vu sur des exemples pratiques quil est facile de faire des mises en page mme
complexes sans trop deffort.
69
CHAPITRE 3. UN PEU DE PRATIQUE
70
Deuxime partie
71
Chapitre 4
Elments de base
Difficult :
Un page web contient du texte et des images, mais aussi un certain nombre dlments
trs frquents : listes, tableaux, formulaires, icnes, boutons. Crer une harmonie dans la
prsentation des tous ces lments nest 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.
73
CHAPITRE 4. ELMENTS DE BASE
74
LISTES, DESCRIPTIONS ET TABLEAUX
75
CHAPITRE 4. ELMENTS DE BASE
76
LISTES, DESCRIPTIONS ET TABLEAUX
Les listes
Style de base
Bootstrap propose une mise en forme lgante des listes. Jen ai prvu une sur la page :
1 < h5 > Voici les sous - esp ces des tigres : </ h5 >
2 < br >
3 < ul >
4 < li > Tigre de Sib rie </ li >
5 < li > Tigre de Chine m ridionale </ li >
6 < li > Tigre de Bali </ li >
7 < li > Tigre de d ' Indochine </ li >
8 < li > Tigre de Malaisie </ li >
9 < li > Tigre de Java </ li >
10 < li > Tigre de Sumatra </ li >
11 < li > Tigre du Bengale </ li >
12 < li > Tigre de la Caspienne </ li >
13 </ ul >
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 4.4 le rsultat sur
la liste de la page.
77
CHAPITRE 4. ELMENTS DE BASE
78
LISTES, DESCRIPTIONS ET TABLEAUX
79
CHAPITRE 4. ELMENTS DE BASE
En ligne
Il peut arriver de vouloir une liste. . . en ligne. Bon je nappelle plus a une liste mais
pourquoi pas ? Il suffit dutiliser la classe list-inline, donc <ul class="list-inline">.
Voil la figure 4.5 ce que a donne sur la page.
Descriptions
Classique
Les descriptions sont aussi bien traites par Bootstrap. Voici un exemple :
1 < dl >
2 < dt > Tigre </ dt >
3 < dd > Animal d ' Asie , grand et puissant , au pelage jaune ray de
noir , de la famille des f lins </ dd >
4 < dt > Panth re </ dt >
5 < dd >F lid d ' Afrique et d ' Asie au pelage jaune t chet de
noir </ dd >
6 < dt > Gu pard </ dt >
7 < dd >F lin carnassier rapide d ' Asie et d ' Afrique au pelage t
chet de noir </ dd >
8 < dt > Chat </ dt >
9 < dd > Petit f lin , au pelage soyeux , en g n ral domestique </ dd >
10 </ dl >
80
LISTES, DESCRIPTIONS ET TABLEAUX
Horizontal
Les tableaux
Plusieurs mises en forme sont prvues pour les tableaux, jen ai retenu une pour le
tableau de la page :
1 < table class = " table table - bordered table - striped table -
condensed " >
2 < caption >
3 < h4 > Les menaces pour les tigres </ h4 >
4 </ caption >
5 < thead >
6 < tr >
7 < th > Lieu </ th >
8 < th > Menace </ th >
9 </ tr >
10 </ thead >
11 < tbody >
12 < tr >
13 < td > Grand Mekong </ td >
14 < td > Demande croissante de certaines parties de l '
animal pour la m decine chinoise traditionnelle
et fragmentation des habitats du fait du d
veloppement non durable d ' infrastructures </ td >
15 </ tr >
16 < tr >
17 < td > le de Sumatra </ td >
18 < td > Production d ' huile de palme et de p tes
papiers </ td >
19 </ tr >
20 < tr >
21 < td > Indon sie et Malaisie </ td >
22 < td >P te papier , l ' huile de palme et le
caoutchouc </ td >
81
CHAPITRE 4. ELMENTS DE BASE
23 </ tr >
24 < tr >
25 < td > tats - Unis </ td >
26 < td > Les tigres captifs repr sentent un danger pour
les tigres sauvages </ td >
27 </ tr >
28 < tr >
29 < td > Europe </ td >
30 < td > Gros app tit pour l ' huile de palme </ td >
31 </ tr >
32 < tr >
33 < td >N pal </ td >
34 < td > Commerce ill gal de produits d riv s de tigres <
/ td >
35 </ tr >
36 </ tbody >
37 </ table >
Classe table
Cest la classe de base pour les tableaux, elle fixe quelques styles et cre des lignes de
sparation horizontales :
1 < table class = " table " >
Classe table-bordered
Cest la classe pour avoir de jolies bordures avec des coins arrondis :
1 < table class = " table table - bordered " >
82
LISTES, DESCRIPTIONS ET TABLEAUX
Classe table-striped
Cette classe ajoute un fond avec un gris trs lger pour les lignes impaires (1, 3, . . .) :
1 < table class = " table table - bordered table - striped " >
Je ne vous mets pas dillustration parce que franchement, le gris est si lger quon 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, lorsquon
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 nempche de les
changer ! Pour la page dexemple, je suis pass par une autre approche qui apparatra
dans un chapitre ultrieur.
Classe table-condensed
Cette classe permet de condenser le tableau pour quil occupe moins de place verticale :
1 < table class = " table table - bordered table - striped table -
condensed " >
83
CHAPITRE 4. ELMENTS DE BASE
Que se passe-t-il pour un tableau quand on rduit la largeur de laffichage ? Les colonnes
du tableau se rduisent en consquence jusqu rendre lapparence ni trs esthtique,
ni trs lisible de la figure 4.12.
Vous avez la possibilit de colorer le fond des lignes des tableaux avec les classes info,
success, danger, warning et active. Voici le tableau de notre exemple, mais avec
un peu de couleur :
1 < table class = " table table - bordered table - striped table -
condensed " >
2 < caption >
3 < h4 > Les menaces pour les tigres </ h4 >
84
LISTES, DESCRIPTIONS ET TABLEAUX
85
CHAPITRE 4. ELMENTS DE BASE
34 < td > Commerce ill gal de produits d riv s de tigres </ td >
35 </ tr >
36 </ tbody >
37 </ table >
Mais videmment, cette possibilit de colorisation prend tout son sens dans une ges-
tion dynamique de donnes, pour faire apparatre par exemple des enregistrements
possdant certaines caractristiques.
Formulaires
Formulaire de base
Si on nutilise aucune classe particulire dans une balise <form>, on obtient une dispo-
sition en ligne. Prenons lexemple dun formulaire simple :
1 < form >
2 < legend >L gende </ legend >
3 Text : < input type = " text " >
4 Textarea : < textarea id = " textarea " > </ textarea >
5 Select :
6 < select >
7 < option > Option 1 </ option >
8 < option > Option 2 </ option >
9 < option > Option 3 </ option >
10 </ select >
11 < button > Envoyer </ button >
12 </ form >
86
FORMULAIRES
Par dfaut les contrles salignent horizontalement. Jaimerais que les contrles oc-
cupent toute la largeur disponible. Il faut utiliser la classe form-control pour obtenir
cet effet (voir figure 4.16) :
1 < form class = " col - lg - 6 " >
2 < legend >L gende </ legend >
3 Text : < input type = " text " class = " form - control " >
4 Textarea : < textarea id = " textarea " class = " form - control " > </
textarea >
5 Select :
6 < select class = " form - control " >
7 < option > Option 1 </ option >
8 < option > Option 2 </ option >
9 < option > Option 3 </ option >
10 </ select >
11 < button > Envoyer </ button >
12 </ form >
On se rend compte que cette classe ne se contente pas dlargir 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 :
1 < form class = " col - lg - 6 " >
2 < legend >L gende </ legend >
87
CHAPITRE 4. ELMENTS DE BASE
3 < label for = " texte " > Text : </ label >
4 < input id = " text " type = " text " class = " form - control " >
5 < label for = " textarea " > Textarea : </ label >
6 < textarea id = " textarea " type = " textarea " class = " form - control
" > </ textarea >
7 < label for = " select " > Select : </ label >
8 < select id = " select " class = " form - control " >
9 < option > Option 1 </ option >
10 < option > Option 2 </ option >
11 < option > Option 3 </ option >
12 </ select >
13 < br >
14 < button > Envoyer </ button >
15 </ form >
88
FORMULAIRES
13 < select id = " select " class = " form - control " >
14 < option > Option 1 </ option >
15 < option > Option 2 </ option >
16 < option > Option 3 </ option >
17 </ select >
18 </ div >
19 < button > Envoyer </ button >
20 </ form >
Le formulaire est bien ar et jai pu enlever la balise <br> qui me servait espacer le
bouton.
La page dexemple
Voici la troisime version de notre page consacre aux tigres :
1 <! DOCTYPE HTML >
2 < html >
3
4 < head >
5 < meta charset = " utf - 8 " >
6 < link href = " assets / css / bootstrap . css " rel = " stylesheet " >
7 < style type = " text / css " >
8 body { background - color :# DDD ; }
9 [ class *= " col " ] { margin - bottom : 20px ; }
10 img { width : 100 %; }
11 . well {
12 background - color :# CCC ;
13 padding : 20px ;
89
CHAPITRE 4. ELMENTS DE BASE
14 }
15 </ style >
16 </ head >
17
18 < body >
19 < div class = " container " >
20 < header class = " page - header " >
21 < h1 > Mon amour pour les tigres </ h1 >
22 </ header >
23 < section class = " row " >
24 < div class = " col - lg - 12 " >
25 <p >
26 Je suis passionn par les < strong > tigres </ strong >
depuis tr s longtemps . Ce site a t construit
en < em > hommage ces merveilleux f lins ... </ em > <
br >
27 Je fais partie de la < abbr title = " Soci t des
Amoureux des Tigres " > SAT </ abbr > qui a pour but
de faire conna tre ces splendides animaux .
28 </ p >
29 <p > Voici ce qu ' en dit le wikipedia : </ p >
30 < blockquote >
31 Le Tigre ( Panthera tigris ) est un mammif re
carnivore de la famille des f lid s ( Felidae )
du genre Panthera .
32 Ais ment reconnaissable sa fourrure rousse ray e de noir , il
est le plus grand f lin sauvage et l ' un des plus grands
carnivores du monde .
33 L ' esp ce est divis e en neuf sous - esp ces poss dant des diff
rences mineures en termes de taille ou de comportement .
Superpr dateur ,
34 il chasse principalement les cerfs et les sangliers , bien qu ' il
puisse s ' attaquer des proies de taille plus importante
comme les buffles .
35 Jusqu ' au XIXe si cle , le Tigre tait r put mangeur d ' homme . La
structure sociale des tigres en fait un animal solitaire ;
36 le m le poss de un territoire qui englobe les domaines de
plusieurs femelles et ne participe pas l ' ducation des
petits . < br >
37 < small class = " pull - right " > Wikipedia </ small > < br >
38 </ blockquote >
39 </ div >
40 </ section >
41 < section class = " row " >
42 < div class = " col - xs - 4 col - sm - 3 col - md - 2 " > < img src = "
images / t1 . jpg " alt = " Tigre " > </ div >
43 < div class = " col - xs - 4 col - sm - 3 col - md - 2 " > < img src = "
images / t2 . jpg " alt = " Tigre " > </ div >
44 < div class = " col - xs - 4 col - sm - 3 col - md - 2 " > < img src = "
images / t3 . jpg " alt = " Tigre " > </ div >
90
FORMULAIRES
45 < div class = " col - xs - 4 col - sm - 3 col - md - 2 " > < img src = "
images / t4 . jpg " alt = " Tigre " > </ div >
46 < div class = " col - xs - 4 col - sm - 3 col - md - 2 " > < img src = "
images / t5 . jpg " alt = " Tigre " > </ div >
47 < div class = " col - xs - 4 col - sm - 3 col - md - 2 " > < img src = "
images / t6 . jpg " alt = " Tigre " > </ div >
48 < div class = " col - xs - 4 col - sm - 3 col - md - 2 " > < img src = "
images / t7 . jpg " alt = " Tigre " > </ div >
49 < div class = " col - xs - 4 col - sm - 3 col - md - 2 " > < img src = "
images / t8 . jpg " alt = " Tigre " > </ div >
50 < div class = " col - xs - 4 col - sm - 3 col - md - 2 " > < img src = "
images / t9 . jpg " alt = " Tigre " > </ div >
51 < div class = " col - xs - 4 col - sm - 3 col - md - 2 " > < img src = "
images / t10 . jpg " alt = " Tigre " > </ div >
52 < div class = " col - xs - 4 col - sm - 3 col - md - 2 " > < img src = "
images / t11 . jpg " alt = " Tigre " > </ div >
53 < div class = " col - xs - 4 col - sm - 3 col - md - 2 " > < img src = "
images / t12 . jpg " alt = " Tigre " > </ div >
54 </ section >
55 < div class = " row " >
56 < section class = " col - sm - 4 " >
57 < h5 > Voici les sous - esp ces des tigres : </ h5 >
58 < br >
59 < ul >
60 < li > Tigre de Sib rie </ li >
61 < li > Tigre de Chine m ridionale </ li >
62 < li > Tigre de Bali </ li >
63 < li > Tigre de d ' Indochine </ li >
64 < li > Tigre de Malaisie </ li >
65 < li > Tigre de Java </ li >
66 < li > Tigre de Sumatra </ li >
67 < li > Tigre du Bengale </ li >
68 < li > Tigre de la Caspienne </ li >
69 </ ul >
70 </ section >
71 < section class = " col - sm - 8 " >
72 < img src = " images / photo - tigre . jpg " alt = " Tigre " >
73 </ section >
74 </ div >
75 < div class = " row " >
76 < section class = " col - sm - 12 " >
77 < table class = " table table - bordered table - striped
table - condensed " >
78 < caption >
79 < h4 > Les menaces pour les tigres </ h4 >
80 </ caption >
81 < thead >
82 < tr >
83 < th > Lieu </ th >
84 < th > Menace </ th >
91
CHAPITRE 4. ELMENTS DE BASE
85 </ tr >
86 </ thead >
87 < tbody >
88 < tr >
89 < td > Grand Mekong </ td >
90 < td > Demande croissante de certaines parties de
l ' animal pour la m decine chinoise
traditionnelle et fragmentation des habitats
du fait du d veloppement non durable d '
infrastructures </ td >
91 </ tr >
92 < tr >
93 < td > le de Sumatra </ td >
94 < td > Production d ' huile de palme et de p tes
papiers </ td >
95 </ tr >
96 < tr >
97 < td > Indon sie et Malaisie </ td >
98 < td >P te papier , l ' huile de palme et le
caoutchouc </ td >
99 </ tr >
100 < tr >
101 < td > tats - Unis </ td >
102 < td > Les tigres captifs repr sentent un danger
pour les tigres sauvages </ td >
103 </ tr >
104 < tr >
105 < td > Europe </ td >
106 < td > Gros app tit pour l ' huile de palme </ td >
107 </ tr >
108 < tr >
109 < td >N pal </ td >
110 < td > Commerce ill gal de produits d riv s de
tigres </ td >
111 </ tr >
112 </ tbody >
113 </ table >
114 </ section >
115 </ div >
116 < div class = " row " >
117 < section class = " col - sm - 8 " >
118 < form class = " well " >
119 < legend > Si vous voulez me laisser un message </
legend >
120 < h4 > Comment m ' avez - vous trouv ? </ h4 >
121 < fieldset >
122 < label for = " ami " class = " radio " >
123 < input type = " radio " name = " origine " value = " ami "
id = " ami " >
124 Par un ami
92
FORMULAIRES
Pour cette troisime version, jai ajout un peu de style et un formulaire, ce qui donne
les figures 4.19 et 4.20.
Testez ! http://bootstrap.twit.free.fr/tutov3/base02.html
Au niveau du style, juste une petite touche :
1 body { background - color :# DDD ; }
2 [ class *= " col " ] { margin - bottom : 20px ; }
3 img { width : 100 %; }
4 . well {
5 background - color :# CCC ;
6 padding : 20px ;
93
CHAPITRE 4. ELMENTS DE BASE
94
FORMULAIRES
95
CHAPITRE 4. ELMENTS DE BASE
7 }
Le fond dun lger gris met bien en valeur le texte et les photos. Quant au formulaire
(concern par la classe well), cest lobjet de ce chapitre. . .
Bootstrap propose lutilisation dune classe particulire pour les cases cocher (check-
box) et les zones doption (radio). Nous lavons utilise dans le formulaire de la page :
1 < form class = " well " >
2 < legend > Si vous voulez me laisser un message </ legend >
3 < h4 > Comment m ' avez - vous trouv ? </ h4 >
4 < fieldset >
5 < label for = " ami " class = " radio " >
6 < input type = " radio " name = " origine " value = " ami " id = " ami " >
7 Par un ami
8 </ label >
9 < label for = " web " class = " radio " >
10 < input type = " radio " name = " origine " value = " web " id = " web " >
11 Sur le web
12 </ label >
13 < label for = " hasard " class = " radio " >
14 < input type = " radio " name = " origine " value = " hasard " id = "
hasard " >
15 Par hasard
16 </ label >
17 < label for = " autre " class = " radio " >
18 < input type = " radio " name = " origine " value = " autre " id = "
autre " >
19 Autre ...
20 </ label >
21 < label for = " textarea " > Votre message : </ label >
22 < textarea id = " textarea " class = " form - control " rows = " 4 " > </
textarea >
23 <p class = " help - block " > Vous pouvez agrandir la fen tre </ p >
24 < button class = " btn btn - primary " type = " submit " > Envoyer </
button >
25 </ fieldset >
26 </ form >
Voil une classe que jaime bien, elle provoque une jolie stylisation. Jai apport ce
petit complment au formulaire de la page :
1 < form class = " well " >
96
FORMULAIRES
La dernire touche a consist amliorer laspect du bouton avec 2 classes que nous
verrons plus loin dans ce cours :
1 < button class = " btn btn - primary " type = " submit " > Envoyer </ button >
Il ne reste plus qu rendre plus discret le texte daide situ au-dessous de la zone de
texte, ce que nous accomplissons avec la classe help-block (voir figure 4.21) :
1 <p class = " help - block " > Vous pouvez agrandir la fen tre </ p >
Formulaire horizontal
Pour raliser un formulaire horizontal, nous allons utiliser tout ce que nous venons
de voir en exploitant la classe form-horizontal et une grille pour positionner les
tiquettes et les contrles :
1 < form class = " form - horizontal col - lg - 6 " >
2 < div class = " form - group " >
3 < legend >L gende </ legend >
4 </ div >
5 < div class = " row " >
6 < div class = " form - group " >
7 < label for = " text " class = " col - lg - 2 " > Text : </ label >
8 < div class = " col - lg - 10 " >
9 < input type = " text " class = " form - control " id = " text " >
10 </ div >
97
CHAPITRE 4. ELMENTS DE BASE
98
FORMULAIRES
Formulaire en ligne
Il arrive quon ait besoin davoir un formulaire dispos sur une ligne, par exemple dans
une barre de navigation. Faisons un essai avec un formulaire lmentaire :
1 < form >
2 < input type = " text " >
3 < input type = " checkbox " > Se rappeler de moi
4 < button > Envoyer </ button >
5 </ form >
Bon ce nest pas trs joli, alors arrangeons a avec tout ce que nous avons dj vu et
en prcisant la classe form-inline :
1 < form class = " form - inline " >
2 < div class = " form - group " >
3 < label class = " sr - only " for = " text " > Texte </ label >
4 < input type = " text " class = " form - control " id = " text "
placeholder = " un texte ici " >
5 </ div >
6 < div class = " form - group " >
7 < div class = " checkbox " >
8 < label >
9 < input type = " checkbox " > Se rappeler de moi ...
10 </ label >
11 </ div >
12 < button type = " submit " class = " btn btn - default " > Envoyer </ button
>
13 </ form >
99
CHAPITRE 4. ELMENTS DE BASE
Cest beaucoup mieux ! Remarquez lutilisation dune tiquette invisible pour la zone
de texte. Il est conseill davoir toujours une tiquette pour chaque contrle pour les
lecteurs dcran (accessibilit), la classe sr-only permet de rendre cette tiquette invi-
sible.
100
FORMULAIRES
101
CHAPITRE 4. ELMENTS DE BASE
102
FORMULAIRES
103
CHAPITRE 4. ELMENTS DE BASE
5 < label class = " control - label " for = " idError " > Erreur </ label >
6 < input type = " text " class = " form - control " id = " idError " >
7 < span class = " glyphicon glyphicon - remove form - control -
feedback " > </ span >
8 < span class = " help - block " > Corrigez l ' erreur s ' il vous
plait </ span >
9 </ div >
10 < div class = " form - group has - warning has - feedback " >
11 < label class = " control - label " for = " idWarning " >
Avertissement </ label >
12 < input type = " text " class = " form - control " id = " idWarning " >
13 < span class = " glyphicon glyphicon - warning - sign form -
control - feedback " > </ span >
14 < span class = " help - block " > Il y a un probl me dans la
saisie </ span >
15 </ div >
16 < div class = " form - group has - success has - feedback " >
17 < label class = " control - label " for = " idSuccess " >R ussite </
label >
18 < input type = " text " class = " form - control " id = " idSuccess " >
19 < span class = " glyphicon glyphicon - ok form - control - feedback
" > </ span >
20 < span class = " help - block " > Saisie correcte </ span >
21 </ div >
22 </ fieldset >
23 </ form >
104
FORMULAIRES
Dans ces exemples il y a peu dactions possibles car, pour le moment, je nai pas prvu
dinteractivit. Alors un petit exemple : nous voulons faire un formulaire comme celui
de la figure 4.34.
Et nous voulons tester la saisie pour vrifier que le texte fait au moins 4 caractres.
Si ce nest pas le cas, on change le style de la zone de texte et on fait apparatre un
message davertissement, comme la figure 4.35.
105
CHAPITRE 4. ELMENTS DE BASE
Testez ! http://bootstrap.twit.free.fr/tutov3/form01.html
Je ne commente pas le code jQuery ajout parce que ce nest pas lobjet 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
106
FORMULAIRES
107
CHAPITRE 4. ELMENTS DE BASE
La page dexemple
Voici la nouvelle version de la page dexemple :
1 <! DOCTYPE HTML >
2 < html >
3
4 < head >
5 < meta charset = " utf - 8 " >
6 < link href = " assets / css / bootstrap . css " rel = " stylesheet " >
7 < style type = " text / css " >
8 body { background - color :# DDD ; }
9 [ class *= " col " ] { margin - bottom : 20px ; }
10 . form - inline { margin - top : 20px }
11 img { width : 100 %; }
12 . well {
13 background - color :# CCC ;
14 padding : 20px ;
15 }
16 </ style >
17 </ head >
18
19 < body >
20 < div class = " container " >
21 < header class = " row " >
22 < div class = " col - sm - 12 col - lg - 7 " >
23 < h1 > Mon amour pour les tigres </ h1 >
24 </ div >
25 < div class = " col - sm - 12 col - lg - 5 " >
26 < form class = " form - inline pull - right " >
27 < input type = " text " style = " width : 150px " class = " input
- sm form - control " placeholder = " Recherche " >
28 < button type = " submit " class = " btn btn - primary btn - xs
" > < span class = " glyphicon glyphicon - eye - open " > </
span > Chercher </ button >
29 </ form >
30 </ div >
31 </ header >
32 < section class = " row " >
33 < div class = " col - lg - 12 " >
34 <p >
35 Je suis passionn par les < strong > tigres </ strong >
depuis tr s longtemps . Ce site a t construit
en < em > hommage ces merveilleux f lins ... </
em > < br >
36 Je fais partie de la < abbr title = " Soci t des
Amoureux des Tigres " > SAT </ abbr > qui a pour but
de faire conna tre ces splendides animaux .
108
BOUTONS, ICNES ET IMAGES
37 </ p >
38 <p > Voici ce qu ' en dit le wikipedia : </ p >
39 < blockquote >
40 Le Tigre ( Panthera tigris ) est un mammif re
carnivore de la famille des f lid s ( Felidae )
du genre Panthera .
41 Ais ment reconnaissable sa fourrure rousse ray e de noir , il
est le plus grand f lin sauvage et l ' un des plus grands
carnivores du monde .
42 L ' esp ce est divis e en neuf sous - esp ces poss dant des diff
rences mineures en termes de taille ou de comportement .
43 Superpr dateur , il chasse principalement les cerfs et les
sangliers , bien qu ' il puisse s ' attaquer des proies de
taille plus importante comme les buffles .
44 Jusqu ' au XIXe si cle , le Tigre tait r put mangeur d ' homme . La
structure sociale des tigres en fait un animal solitaire ;
45 le m le poss de un territoire qui englobe les domaines de
plusieurs femelles et ne participe pas l ' ducation des
petits . < br >
46 < small class = " pull - right " > Wikipedia </ small > < br >
47 </ blockquote >
48 </ div >
49 </ section >
50 < section class = " row " >
51 < div class = " col - xs - 4 col - sm - 3 col - md - 2 " > < img src = "
images / t1 . jpg " alt = " Tigre " class = " img - rounded " > </ div
>
52 < div class = " col - xs - 4 col - sm - 3 col - md - 2 " > < img src = "
images / t2 . jpg " alt = " Tigre " class = " img - rounded " > </ div
>
53 < div class = " col - xs - 4 col - sm - 3 col - md - 2 " > < img src = "
images / t3 . jpg " alt = " Tigre " class = " img - rounded " > </ div
>
54 < div class = " col - xs - 4 col - sm - 3 col - md - 2 " > < img src = "
images / t4 . jpg " alt = " Tigre " class = " img - rounded " > </ div
>
55 < div class = " col - xs - 4 col - sm - 3 col - md - 2 " > < img src = "
images / t5 . jpg " alt = " Tigre " class = " img - rounded " > </ div
>
56 < div class = " col - xs - 4 col - sm - 3 col - md - 2 " > < img src = "
images / t6 . jpg " alt = " Tigre " class = " img - rounded " > </ div
>
57 < div class = " col - xs - 4 col - sm - 3 col - md - 2 " > < img src = "
images / t7 . jpg " alt = " Tigre " class = " img - rounded " > </ div
>
58 < div class = " col - xs - 4 col - sm - 3 col - md - 2 " > < img src = "
images / t8 . jpg " alt = " Tigre " class = " img - rounded " > </ div
>
59 < div class = " col - xs - 4 col - sm - 3 col - md - 2 " > < img src = "
images / t9 . jpg " alt = " Tigre " class = " img - rounded " > </ div
109
CHAPITRE 4. ELMENTS DE BASE
>
60 < div class = " col - xs - 4 col - sm - 3 col - md - 2 " > < img src = "
images / t10 . jpg " alt = " Tigre " class = " img - rounded " > </
div >
61 < div class = " col - xs - 4 col - sm - 3 col - md - 2 " > < img src = "
images / t11 . jpg " alt = " Tigre " class = " img - rounded " > </
div >
62 < div class = " col - xs - 4 col - sm - 3 col - md - 2 " > < img src = "
images / t12 . jpg " alt = " Tigre " class = " img - rounded " > </
div >
63 </ section >
64 < div class = " row " >
65 < section class = " col - sm - 4 " >
66 < h5 > Voici les sous - esp ces des tigres : </ h5 >
67 < br >
68 < ul >
69 < li > Tigre de Sib rie </ li >
70 < li > Tigre de Chine m ridionale </ li >
71 < li > Tigre de Bali </ li >
72 < li > Tigre de d ' Indochine </ li >
73 < li > Tigre de Malaisie </ li >
74 < li > Tigre de Java </ li >
75 < li > Tigre de Sumatra </ li >
76 < li > Tigre du Bengale </ li >
77 < li > Tigre de la Caspienne </ li >
78 </ ul >
79 </ section >
80 < section class = " col - sm - 8 " >
81 < img src = " images / photo - tigre . jpg " alt = " Tigre " class = "
img - rounded " >
82 </ section >
83 </ div >
84 < div class = " row " >
85 < section class = " col - sm - 12 " >
86 < table class = " table table - bordered table - striped
table - condensed " >
87 < caption >
88 < h4 > Les menaces pour les tigres </ h4 >
89 </ caption >
90 < thead >
91 < tr >
92 < th > Lieu </ th >
93 < th > Menace </ th >
94 </ tr >
95 </ thead >
96 < tbody >
97 < tr >
98 < td > Grand Mekong </ td >
99 < td > Demande croissante de certaines parties de
l ' animal pour la m decine chinoise
110
BOUTONS, ICNES ET IMAGES
111
CHAPITRE 4. ELMENTS DE BASE
140 < input type = " radio " name = " origine " value = "
hasard " id = " hasard " >
141 Par hasard
142 </ label >
143 < label for = " autre " class = " radio " >
144 < input type = " radio " name = " origine " value = " autre
" id = " autre " >
145 Autre ...
146 </ label >
147 < label for = " textarea " > Votre message : </ label >
148 < textarea id = " textarea " rows = " 4 " class = " form -
control " > </ textarea >
149 <p class = " help - block " > Vous pouvez agrandir la
fen tre </ p >
150 < button class = " btn btn - primary " type = " submit " > <
span class = " glyphicon glyphicon - ok - sign " > </
span > Envoyer </ button >
151 </ fieldset >
152 </ form >
153 </ section >
154 < section class = " col - sm - 4 " >
155 < address >
156 <p > Vous pouvez me contacter cette adresse : </ p >
157 < strong > Tigrou Alfred </ strong > < br >
158 All e des fauves < br >
159 28645 F lins - sur - Loire < br >
160 </ address >
161 </ section >
162 </ div >
163 </ div >
164 </ body >
165 </ html >
Testez ! http://bootstrap.twit.free.fr/tutov3/base03.html
Quy a-t-il de nouveau ? Dj un formulaire de recherche dans la partie suprieure
droite, avec une zone de texte et un bouton muni dune icne (voir figure 4.37).
112
BOUTONS, ICNES ET IMAGES
Nous allons passer en revue ces nouveauts et dtailler les possibilits de Bootstrap
pour les boutons, les icnes et les images.
113
CHAPITRE 4. ELMENTS DE BASE
Laspect par dfaut est un gris avec le fond blanc. Il existe dautres possibilit plus
colores :
1 < button type = " button " class = " btn btn - primary " > Bouton standard </
button >
2 < button type = " button " class = " btn btn - success " >R ussite </ button >
3 < button type = " button " class = " btn btn - info " > Information </ button >
4 < button type = " button " class = " btn btn - warning " > Avertissement </
button >
5 < button type = " button " class = " btn btn - danger " > Danger </ button >
6 < button type = " button " class = " btn btn - link " > Lien </ button >
114
BOUTONS, ICNES ET IMAGES
Boutons block
115
CHAPITRE 4. ELMENTS DE BASE
11 <a class = " btn btn - danger " href = " # " >4 </ a >
12 <a class = " btn btn - info " href = " # " >5 </ a >
13 <a class = " btn btn - warning " href = " # " >6 </ a >
14 </ div >
15 </ div >
16 </ div >
116
BOUTONS, ICNES ET IMAGES
Boutons justifis
Cet exemple utilise des balises <a>. On peut raliser la mme chose avec des balises
<button> condition dutiliser la classe btn-group pour chaque bouton :
1 < div class = " col - lg - 6 " >
2 < div class = " btn - group btn - group - justified " >
3 < div class = " btn - group " >
4 < button type = " button " class = " btn btn - danger " >1 </ button >
5 </ div >
6 < div class = " btn - group " >
7 < button type = " button " class = " btn btn - info " >2 </ button >
8 </ div >
9 < div class = " btn - group " >
10 < button type = " button " class = " btn btn - warning " >3 </ button >
11 </ div >
12 </ div >
13 </ div >
117
CHAPITRE 4. ELMENTS DE BASE
Vous entrez le texte du bouton, la couleur, la taille, vous choisissez licne 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 ntes pas trs inspir,
il existe un gnrateur simple et pratique sur le site charliepark http://charliepark.
org/bootstrap_buttons/ (voir figure 4.49).
Il suffit de rcuprer le code et de linsrer dans votre feuille de style. Lintgration
dans un bouton (ou autre) est simple.
1 < button type = " button " class = " btn btn - custom " > Mon beau bouton </
button >
Il est ainsi facile et rapide de crer son propre style de bouton (voir figure 4.50).
118
BOUTONS, ICNES ET IMAGES
119
CHAPITRE 4. ELMENTS DE BASE
De jolies icnes
Les icnes de Glyphicons
La syntaxe est toute simple. On utilise une balise <span> avec deux classes. La princi-
pale est glyphicon suivi de la classe qui correspond licne afficher glyphicon-*.
On peut ainsi crer dlgantes barres de boutons :
1 < div class = " container " >
2 < div class = " row " >
3 < div class = " col - lg - 3 " >
4 < div class = " btn - group " >
5 <a class = " btn btn - danger " href = " # " > < span class = "
glyphicon glyphicon - fast - backward " > </ span > </ a >
6 <a class = " btn btn - info " href = " # " > < span class = "
glyphicon glyphicon - backward " > </ span > </ a >
7 <a class = " btn btn - warning " href = " # " > < span class = "
glyphicon glyphicon - play " > </ span > </ a >
8 <a class = " btn btn - info " href = " # " > < span class = "
glyphicon glyphicon - forward " > </ span > </ a >
9 <a class = " btn btn - danger " href = " # " > < span class = "
glyphicon glyphicon - fast - forward " > </ span > </ a >
10 </ div >
11 </ div >
12 < div class = " col - lg - 1 " >
13 < div class = " btn - group - vertical " >
14 <a class = " btn btn - danger " href = " # " > < span class = "
glyphicon glyphicon - pencil " > </ span > </ a >
15 <a class = " btn btn - info " href = " # " > < span class = "
glyphicon glyphicon - search " > </ span > </ a >
16 <a class = " btn btn - warning " href = " # " > < span class = "
glyphicon glyphicon - print " > </ span > </ a >
17 <a class = " btn btn - success " href = " # " > < span class = "
glyphicon glyphicon - picture " > </ span > </ a >
18 </ div >
19 </ div >
120
BOUTONS, ICNES ET IMAGES
videmment on peut mettre ces icnes ailleurs que sur des boutons. . . Partout o on
peut crire en fait !
Rien nempche videmment de sauter des lignes dans un bouton. On peut ainsi crer
des boutons en sparant bien licne du texte, comme la figure 4.54.
1 < button class = " btn btn - primary btn - lg " > < span class = " glyphicon
glyphicon - user " > </ span > < br > Utilisateurs </ button >
2 < button class = " btn btn - warning btn - lg " > < span class = " glyphicon
glyphicon - comment " > </ span > < br > Commentaires </ button >
3 < button class = " btn btn - success btn - lg " > < span class = " glyphicon
glyphicon - calendar " > </ span > < br > Ev nements </ button >
4 < button class = " btn btn - danger btn - lg " > < span class = " glyphicon
glyphicon - shopping - cart " > </ span > < br > Boutique </ button >
5 < button class = " btn btn - info btn - lg " > < span class = " glyphicon
glyphicon - bullhorn " > </ span > < br > Messages </ button >
121
CHAPITRE 4. ELMENTS DE BASE
Il est facile, en ajoutant un peu de style, de crer des boutons ronds qui conviendront
merveille aux icnes. Voici un exemple de style ajout (voir aussi figure 4.55) :
1 . btn - lg {
2 width : 50px ;
3 height : 50px ;
4 border - radius : 25px ;
5 }
Et le code HTML :
1 < button class = " btn btn - primary btn - lg " > < span class = " glyphicon
glyphicon - user " > </ span > </ button >
2 < button class = " btn btn - warning btn - lg " > < span class = " glyphicon
glyphicon - comment " > </ span > </ button >
3 < button class = " btn btn - success btn - lg " > < span class = " glyphicon
glyphicon - calendar " > </ span > </ button >
4 < button class = " btn btn - danger btn - lg " > < span class = " glyphicon
glyphicon - shopping - cart " > </ button >
5 < button class = " btn btn - info btn - lg " > < span class = " glyphicon
glyphicon - bullhorn " > </ span > </ button >
122
BOUTONS, ICNES ET IMAGES
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 dexemples
- http://fortawesome.github.io/Font-Awesome/examples/. On peut insrer une
icne directement dans un texte (voir figure 4.56) :
1 Il faut d verrouiller <i class = " fa fa - unlock " > </ i > pour sortir
<i class = " fa fa - arrow - right " > </ i >
On peut aussi dimensionner les icnes selon le contexte, comme la figure 4.57 :
1 <p > <i class = " fa fa - print fa - lg " > </ i > Taille normale </ p >
2 <p > <i class = " fa fa - print fa - 2x " > </ i > Taille double </ p >
3 <p > <i class = " fa fa - print fa - 3x " > </ i > Taille triple </ p >
4 <p > <i class = " fa fa - print fa - 4x " > </ i > Taille quadruple </ p >
5 <p > <i class = " fa fa - print fa - 5x " > </ i > Taille quintuple </ p >
On peut aussi trs facilement crer une liste dont les lments sont bien identifis avec
une icne (voir figure 4.58) :
1 < ul class = " fa - ul " >
2 < li > <i class = " fa - li fa fa - check - square " > </ i >V rifier </ li >
3 < li > <i class = " fa - li fa fa - paperclip " > </ i > Conserver </ li >
4 < li > <i class = " fa - li fa fa - eraser " > </ i > Effacer </ li >
5 < li > <i class = " fa - li fa fa - print " > </ i > Imprimer </ li >
6 </ ul >
Il existe bien dautres possibilits comme la rotation des icnes, leur animation, leur
empilement, que je vous laisse dcouvrir en consultant la page des exemples - http:
//fortawesome.github.io/Font-Awesome/examples/ du site.
123
CHAPITRE 4. ELMENTS DE BASE
Classe Effet
img-rounded Image coins arrondis
img-circle Image circulaire
img-thumbnail Image avec liser blanc
Notez que vous pouvez rendre les images adaptatives facilement avec la classe img-responsive.
Cette classe possde 3 rgles :
1 . img - responsive {
2 display : block ;
3 max - width : 100 %;
124
BOUTONS, ICNES ET IMAGES
4 height : auto ;
5 }
Le but est de faire en sorte que limage occupe toute la place disponible de son conte-
nant.
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 denrichir les contrles en jouant sur leur dimension ou leur style.
Bootstrap permet de crer des boutons colors, seuls ou groups, de diverses dimen-
sions.
Bootstrap comprend une collection dicnes vectorielles faciles intgrer comme des
caractres.
Bootstrap prvoie la mise en forme des images avec des coins arrondis ou avec un
effet de diapositive.
125
CHAPITRE 4. ELMENTS DE BASE
126
Chapitre 5
Les composants intgrs
Difficult :
Bootstrap propose des composants bien pratiques mettre en uvre : barres de navigation,
effets typographiques, panneaux, thumbnails. . . et tout a sans crire une seule ligne de
code Javascript. Nous verrons aussi alertes et barres de progression qui demandent un peu
de Javascript pour tre utilises. . .
Allez cest parti pour une visite guide !
127
CHAPITRE 5. LES COMPOSANTS INTGRS
La navigation
La page dexemple
Voici le code ajout la page dexemple pour lquiper dune barre de navigation :
1 <! DOCTYPE HTML >
2 < html >
3
4 < head >
5
6 ... en - t te ...
7
8 </ head >
9
10 < body >
11 < div class = " container " >
12
13 < nav class = " navbar navbar - inverse " >
14 < ul class = " nav navbar - nav " >
15 < li class = " active " > <a href = " # " > Accueil </ a > </ li >
16 < li > <a href = " # " > Liens </ a > </ li >
17 < li > <a href = " # " >T moignages </ a > </ li >
18 < li > <a href = " # " >R f rences </ a > </ li >
19 </ ul >
20 < form class = " navbar - form pull - right " >
21 < input type = " text " style = " width : 150px " class = " input -
small " placeholder = " Recherche " >
22 < button type = " submit " class = " btn btn - primary btn - xs " >
< span class = " glyphicon glyphicon - eye - open " > </ span >
Chercher </ button >
23 </ form >
24 </ nav >
25
26 ... contenu ...
27
28 </ body >
29 </ html >
Bootstrap propose de superbes classes pour crer une barre de navigation. la base,
une barre ncessite juste les classes navbar et navbar-default :
128
LA NAVIGATION
129
CHAPITRE 5. LES COMPOSANTS INTGRS
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 :
1 . navbar - default {
2 background - color : # f8f8f8 ;
3 border - color : # e7e7e7 ;
4 }
Pourquoi 2 classes ? Nous verrons plus loin quil est possible davoir une barre inver-
se , avec une couleur de fond diffrente.
Mais une barre vide ne sert pas grand chose, en gnral on la garnit ditems. Voici
un exemple :
1 < div class = " navbar navbar - default " >
2 < ul class = " nav navbar - nav " >
3 < li class = " active " > <a href = " # " > Accueil </ a > </ li >
4 < li > <a href = " # " > Liens </ a > </ li >
5 < li > <a href = " # " >T moignages </ a > </ li >
6 < li class = " disabled " > <a href = " # " >R f rences </ a > </ li >
7 </ ul >
8 </ 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>. Litem actif est repr
avec la classe active. Un item dsactiv est dfini avec la classe disabled. Voici la
figure 5.3 un aperu de la barre.
130
LA NAVIGATION
Si vous prfrez une barre avec un fond noir, il suffit de remplacer la classe navbar-default
par la classe navbar-inverse :
1 < div class = " navbar navbar - inverse " >
2 < ul class = " nav navbar - nav " >
3 < li class = " active " > <a href = " # " > Accueil </ a > </ li >
4 < li > <a href = " # " > Liens </ a > </ li >
5 < li > <a href = " # " >T moignages </ a > </ li >
6 < li > <a href = " # " >R f rences </ a > </ li >
7 </ ul >
8 </ div >
On peut faire apparatre un titre avec des caractres plus visibles avec la classe navbar-brand :
1 < div class = " navbar navbar - default " >
2 < div class = " navbar - header " >
3 <a class = " navbar - brand " href = " # " > Mon beau site </ a >
4 </ div >
5 < ul class = " nav navbar - nav " >
6 < li class = " active " > <a href = " # " > Accueil </ a > </ li >
7 < li > <a href = " # " > Liens </ a > </ li >
8 < li > <a href = " # " >T moignages </ a > </ li >
9 < li > <a href = " # " >R f rences </ a > </ li >
10 < li > <a href = " # " > Bibliographie </ a > </ li >
11 </ ul >
12 </ div >
131
CHAPITRE 5. LES COMPOSANTS INTGRS
Fixer la barre ?
A priori, on veut une barre de navigation dans la partie suprieure dun site, mais en
gnral sous un bandeau. Avec le code tel quon la vu jusque-l, la barre se situe dans
le flux. Par exemple. . .
1 <p > Un paragraphe </ p >
2 < div class = " navbar navbar - default " >
3 < div class = " navbar - header " >
4 <a class = " navbar - brand " href = " # " > Mon beau site </ a >
5 </ div >
6 < ul class = " nav navbar - nav " >
7 < li class = " active " > <a href = " # " > Accueil </ a > </ li >
8 < li > <a href = " # " > Liens </ a > </ li >
9 < li > <a href = " # " >T moignages </ a > </ li >
10 < li > <a href = " # " >R f rences </ a > </ li >
11 < li > <a href = " # " > Bibliographie </ a > </ li >
12 </ ul >
13 </ div >
14 <p > Un autre paragraphe </ p >
132
LA NAVIGATION
11 < li > <a href = " # " > Bibliographie </ a > </ li >
12 </ ul >
13 </ div >
14 <p > Un autre paragraphe </ p >
15 <p > Encore un autre paragraphe </ p >
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.
1 < link href = " assets / css / bootstrap . css " rel = " stylesheet " >
2 < style type = " text / css " >
3 body { padding - top : 70px ; }
4 </ style >
133
CHAPITRE 5. LES COMPOSANTS INTGRS
Une barre fixe situe en haut reste colle au bord de la fentre, et quand vous faites
dfiler avec lascenseur, le contenu passe sous la barre de faon logique. Il se peut que
vous dsiriez que la barre suive le mouvement et ne soit plus colle au bord de la fentre,
mais au-dessus du contenu. Dans ce cas, videmment, la barre disparat quand vous
faites dfiler. Il faut alors utiliser la classe navbar-static-top :
1 < div class = " navbar navbar - default navbar - static - top " >
Pour intgrer un formulaire il suffit dajouter une balise <form> avec la classe navbar-form.
On a 2 classes pour envoyer ce formulaire sur lun des cts :
pull-right pour le fixer droite
pull-left pour le fixer gauche
Voici lintgration pour notre page dexemple :
1 < nav class = " navbar navbar - inverse " >
2 < ul class = " nav navbar - nav " >
3 < li class = " active " > <a href = " # " > Accueil </ a > </ li >
4 < li > <a href = " # " > Liens </ a > </ li >
5 < li > <a href = " # " >T moignages </ a > </ li >
6 < li > <a href = " # " >R f rences </ a > </ li >
7 </ ul >
8 < form class = " navbar - form pull - right " >
9 < input type = " text " style = " width : 150px " class = " input - sm form
- control " placeholder = " Recherche " >
10 < button type = " submit " class = " btn btn - primary btn - sm " > < span
class = " glyphicon glyphicon - eye - open " > </ span > Chercher </
button >
11 </ form >
12 </ nav >
134
LA NAVIGATION
Il existe la classe navbar-btn pour intgrer un bouton dans une barre, mais qui doit
tre utilise uniquement si le bouton nappartient pas un formulaire. Il y a aussi la
classe navbar-text pour insrer du texte. Voici un exemple :
1 < nav class = " navbar navbar - default " >
2 < div class = " navbar - header " >
3 <a class = " navbar - brand " href = " # " > Accueil </ a >
4 </ div >
5 <p class = " navbar - text " > Connexion au site : </ p >
6 < button type = " button " class = " btn btn - default navbar - btn " >
Login </ button >
7 </ nav >
La pagination
Un exemple simple
La dimension
135
CHAPITRE 5. LES COMPOSANTS INTGRS
136
LA NAVIGATION
Un cas pratique
137
CHAPITRE 5. LES COMPOSANTS INTGRS
33 < script src = " assets / js / jquery . js " > </ script >
34 < script >
35
36 var show_per_page = 3 ;
37 var current_page = 0 ;
38
39 function set_display ( first , last ) {
40 $ ( '# content ') . children () . css ( ' display ' , ' none ') ;
41 $ ( '# content ') . children () . slice ( first , last ) . css ( ' display
' , ' block ') ;
42 }
43
44 function previous () {
45 if ( $ ( '. active ') . prev ( '. page_link ') . length ) go_to_page (
current_page - 1 ) ;
46 }
47
48 function next () {
49 if ( $ ( '. active ') . next ( '. page_link ') . length ) go_to_page (
current_page + 1 ) ;
50 }
51
52 function go_to_page ( page_num ) {
53 current_page = page_num ;
54 start_from = current_page * show_per_page ;
55 end_on = start_from + show_per_page ;
56 set_display ( start_from , end_on ) ;
57 $ ( '. active ') . removeClass ( ' active ') ;
58 $ ( '# id ' + page_num ) . addClass ( ' active ') ;
59 }
60
61 $ ( document ) . ready ( function () {
62
63 var number_of_pages = Math . ceil ( $ ( '# content ') . children () .
size () / show_per_page ) ;
64
65 var nav = ' < ul class = " pagination " > < li > <a href = " javascript
: previous () ; " > < < </ a > ';
66
67 var i = -1 ;
68 while ( number_of_pages > ++ i ) {
69 nav += ' < li class = " page_link '
70 if (! i ) nav += ' active ';
71 nav += '" id = " id ' + i + ' " > ';
72 nav += ' <a href = " javascript : go_to_page ( ' + i + ') " > '+ ( i
+ 1 ) + ' </ a > ';
73 }
74 nav += ' < li > <a href = " javascript : next () ; " > >> </ a > </ ul > ';
75
76 $ ( '# page_navigation ') . html ( nav ) ;
138
LA NAVIGATION
77 set_display (0 , show_per_page ) ;
78
79 }) ;
80
81 </ script >
82
83 </ body >
84
85 </ html >
Testez ! http://bootstrap.twit.free.fr/tutov3/nav10.html
Pagination esthtique
Par dfaut, les boutons sont centrs. Pour les disposer de part et dautre, il faut utiliser
les classes previous et next :
1 < ul class = " pager col - lg - 4 " >
2 < li class = " previous " > <a href = " # " > < span class = " glyphicon
glyphicon - backward " > </ span > Pr c dent </ a > </ li >
3 < li class = " next " > <a href = " # " > Suivant < span class = " glyphicon
glyphicon - forward " > </ span > </ a > </ li >
139
CHAPITRE 5. LES COMPOSANTS INTGRS
4 </ ul >
Aide la navigation
Laide 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 llment actif :
La page dexemple
140
EFFETS TYPOGRAPHIQUES ET THUMBNAILS
141
CHAPITRE 5. LES COMPOSANTS INTGRS
Jumbotron
Jumbotron contenu
On voit bien la diffrence entre les lments normaux et ceux qui bnficient de la
classe jumbotron.
Voyons cette classe :
1 . jumbotron {
2 padding : 30px ;
3 margin - bottom : 30px ;
4 color : inherit ;
5 background - color : # eee ;
6 }
Vous avez certainement rencontr des sites crs avec Bootstrap comportant des pan-
neaux occupant toute la largeur de la page. On ralise cela facilement avec la classe
142
EFFETS TYPOGRAPHIQUES ET THUMBNAILS
jumbotron, mais il faut organiser diffremment le code. Il ne faut pas le mettre dans
un conteneur, en revanche il faut en prvoir un lintrieur. Voici un exemple :
1 < div class = " jumbotron " >
2 < div class = " container " >
3 < h1 > Bonjour je suis le Jumbotron </ h1 >
4 <p >J ' aime bien prendre mes aises et occuper tout l ' espace
pour que l ' on me remarque facilement ! </ p >
5 <p > <a class = " btn btn - info btn - lg " role = " button " > En savoir
plus < span class = " glyphicon glyphicon glyphicon - hand -
right " > </ span > </ a > </ p >
6 </ div >
7 </ div >
143
CHAPITRE 5. LES COMPOSANTS INTGRS
4 < h4 > < span class = " label label - success " > H4 </ span > </ h4 >
5 < h5 > < span class = " label label - success " > H5 </ span > </ h5 >
6 < h6 > < span class = " label label - success " > H6 </ span > </ h6 >
Des badges
Les badges sont un peu comme les libells, mais pour des informations plus courtes,
idalement des nombres :
1 <a href = " # " > Messages re us < span class = " badge " > 42 </ span > </ a >
144
EFFETS TYPOGRAPHIQUES ET THUMBNAILS
Comme le badge se trouve dans une balise <span>, il est facile de lintgrer par exemple
un bouton et de le colorer :
1 < button class = " btn btn - danger " > Envoi < span class = " badge text -
success " > 42 </ span > </ button >
Jai ajout des badges sur la page dexemple pour reprsenter le nombre de tigres :
1 < ul >
2 < li > Tigre de Sib rie < span class = " badge " > 230 </ span > </ li >
3 < li > Tigre de Chine m ridionale < span class = " badge " > 120 </ span >
</ li >
4 < li > Tigre de Bali < span class = " badge " > 540 </ span > </ li >
5 < li > Tigre de d ' Indochine < span class = " badge " > 230 </ span > </ li >
6 < li > Tigre de Malaisie < span class = " badge " > 240 </ span > </ li >
7 < li > Tigre de Java < span class = " badge " > 1200 </ span > </ li >
8 < li > Tigre de Sumatra < span class = " badge " > 710 </ span > </ li >
9 < li > Tigre du Bengale < span class = " badge " > 20 </ span > </ li >
10 < li > Tigre de la Caspienne < span class = " badge " > 40 </ span > </ li >
11 </ ul >
145
CHAPITRE 5. LES COMPOSANTS INTGRS
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 dexemple qui comporte de petites images de tigres. Jusque-l, jai posi-
tionn les images en utilisant tout simplement la grille :
1 < section class = " row " >
2 < div class = " col - xs - 4 col - sm - 3 col - md - 2 " > < img src = " images / t1 .
jpg " alt = " Tigre " class = " img - rounded " > </ div >
3 < div class = " col - xs - 4 col - sm - 3 col - md - 2 " > < img src = " images / t2 .
jpg " alt = " Tigre " class = " img - rounded " > </ div >
4 < div class = " col - xs - 4 col - sm - 3 col - md - 2 " > < img src = " images / t3 .
jpg " alt = " Tigre " class = " img - rounded " > </ div >
5 < div class = " col - xs - 4 col - sm - 3 col - md - 2 " > < img src = " images / t4 .
jpg " alt = " Tigre " class = " img - rounded " > </ div >
6 < div class = " col - xs - 4 col - sm - 3 col - md - 2 " > < img src = " images / t5 .
jpg " alt = " Tigre " class = " img - rounded " > </ div >
7 < div class = " col - xs - 4 col - sm - 3 col - md - 2 " > < img src = " images / t6 .
jpg " alt = " Tigre " class = " img - rounded " > </ div >
8 < div class = " col - xs - 4 col - sm - 3 col - md - 2 " > < img src = " images / t7 .
jpg " alt = " Tigre " class = " img - rounded " > </ div >
9 < div class = " col - xs - 4 col - sm - 3 col - md - 2 " > < img src = " images / t8 .
jpg " alt = " Tigre " class = " img - rounded " > </ div >
10 < div class = " col - xs - 4 col - sm - 3 col - md - 2 " > < img src = " images / t9 .
jpg " alt = " Tigre " class = " img - rounded " > </ div >
11 < div class = " col - xs - 4 col - sm - 3 col - md - 2 " > < img src = " images / t10 .
jpg " alt = " Tigre " class = " img - rounded " > </ div >
12 < div class = " col - xs - 4 col - sm - 3 col - md - 2 " > < img src = " images / t11 .
jpg " alt = " Tigre " class = " img - rounded " > </ div >
13 < div class = " col - xs - 4 col - sm - 3 col - md - 2 " > < img src = " images / t12 .
jpg " alt = " Tigre " class = " img - rounded " > </ div >
14 </ section >
Ce qui donne une organisation bien rgulire, comme le montre la figure 5.27.
146
EFFETS TYPOGRAPHIQUES ET THUMBNAILS
Voyons ce que a donne avec le composant Thumbnails. Le principe est simple, il faut
utiliser la classe thumbnail, par exemple dans une balise <a>. Voil ce que a donne
pour la page dexemple en supposant que les vignettes servent de liens :
147
CHAPITRE 5. LES COMPOSANTS INTGRS
148
EFFETS TYPOGRAPHIQUES ET THUMBNAILS
Nous ne sommes videmment pas limits afficher des images dans un thumbnail.
Puisque vous pouvez mettre cette classe dans un <div> ou autre, vous pouvez gar-
nir le thumbnail de ce que vous voulez. Par exemple jai stylis ladresse sur la page
dexemple :
1 < address class = " thumbnail " >
2 <p > Vous pouvez me contacter cette adresse : </ p >
3 < strong > Tigrou Alfred </ strong > < br >
4 All e des fauves < br >
5 28645 F lins - sur - Loire < br >
6 </ address >
149
CHAPITRE 5. LES COMPOSANTS INTGRS
On va aussi prvoir un panneau pour la liste des tigres et galement pour le tableau
(voir figure 5.33).
Testez ! http://bootstrap.twit.free.fr/tutov3/base06.html
150
LISTES GROUPES, PANNEAUX ET MDIAS
151
CHAPITRE 5. LES COMPOSANTS INTGRS
Il est possible dajouter des badges tout simplement en intgrant un <span>, par dfaut
affich droite :
1 < ul class = " list - group " >
2 < li class = " list - group - item " >
3 < span class = " badge " > 22 </ span >
4 Item 1
5 </ li >
6 < li class = " list - group - item " >
7 < span class = " badge " > 12 </ span >
8 Item 2
9 </ li >
10 < li class = " list - group - item " >
11 < span class = " badge " > 33 </ span >
12 Item 3
13 </ li >
14 < li class = " list - group - item " >
15 < span class = " badge " > 87 </ span >
16 Item 4
17 </ li >
18 </ ul >
152
LISTES GROUPES, PANNEAUX ET MDIAS
Les lments de la liste peuvent aussi tre des liens. Il suffit de prvoir des balises <a>,
litem actif est repr avec la classe active :
1 < ul class = " list - group " >
2 <a href = " # " class = " list - group - item active " >
3 < span class = " glyphicon glyphicon - chevron - right pull - right " >
</ span >
4 Item 1
5 </ a >
6 <a href = " # " class = " list - group - item " >
7 < span class = " glyphicon glyphicon - chevron - right pull - right " >
</ span >
8
9 Item 2
10 </ a >
11 <a href = " # " class = " list - group - item " >
12 < span class = " glyphicon glyphicon - chevron - right pull - right " >
</ span >
13 Item 3
14 </ a >
15 <a href = " # " class = " list - group - item " >
16 < span class = " glyphicon glyphicon - chevron - right pull - right " >
</ span >
17 Item 4
18 </ a >
19 </ ul >
Un peu de couleur
De nouvelles classes sont apparues avec la version 3.1 de Bootstrap qui permettent
davoir un peu de couleur dans les listes groupes.
153
CHAPITRE 5. LES COMPOSANTS INTGRS
Contenus divers
La liste est suffisamment versatile pour contenir des lments varis. On peut avoir une
en-tte avec la classe list-group-item-heading, et du texte avec la classe list-group-item-te
mais on peut intgrer par exemple une image comme je le fais ici :
1 < ul class = " list - group " >
2 <a href = " # " class = " list - group - item active " >
3 < h4 class = " list - group - item - heading " > Tigre 1 </ h4 >
4 <p class = " list - group - item - text pull - right " > Mon joli tigre 1
</ p >
154
LISTES GROUPES, PANNEAUX ET MDIAS
Jai utilis une liste groupe sur la page dexemple pour les sous-espces de tigres (avec
badges, le tout intgr dans un panneau dont nous allons bientt parler) :
1 < div class = " list - group " >
2 <a href = " # " class = " list - group - item " >
3 Tigre de Sib rie
4 < span class = " badge " > 120 </ span >
5 </ a >
6 <a href = " # " class = " list - group - item " >
7 Tigre de Chine m ridionale
8 < span class = " badge " > 540 </ span >
9 </ a >
10 <a href = " # " class = " list - group - item " >
11 Tigre de Bali
12 < span class = " badge " > 230 </ span >
13 </ a >
14 <a href = " # " class = " list - group - item " >
15 Tigre de d ' Indochine
155
CHAPITRE 5. LES COMPOSANTS INTGRS
16 < span class = " badge " > 240 </ span >
17 </ a >
18 <a href = " # " class = " list - group - item " >
19 Tigre de Malaisie
20 < span class = " badge " > 1200 </ span >
21 </ a >
22 <a href = " # " class = " list - group - item " >
23 Tigre de Java
24 < span class = " badge " > 710 </ span >
25 </ a >
26 <a href = " # " class = " list - group - item " >
27 Tigre de Sumatra
28 < span class = " badge " > 20 </ span >
29 </ a >
30 <a href = " # " class = " list - group - item " >
31 Tigre du Bengale
32 < span class = " badge " > 40 </ span >
33 </ a >
34 <a href = " # " class = " list - group - item " >
35 Tigre de la Caspienne
36 < span class = " badge " > 200 </ span >
37 </ a >
38 </ div >
39 </ div >
156
LISTES GROUPES, PANNEAUX ET MDIAS
Les panneaux
Les panneaux permettent disoler visuellement une partie de la page avec une bordure
esthtique, titre, contenu et pied de panneau. Voici un exemple lmentaire :
1 < div class = " panel panel - default " >
2 < div class = " panel - heading " >
3 < h3 class = " panel - title " > Titre </ h3 >
4 </ div >
5 < div class = " panel - body " > Contenu </ div >
6 < div class = " panel - footer " > Pied de panneau </ div >
7 </ div >
Il y a aussi des classes pour crer un sens visuel pour ces panneaux :
1 < div class = " panel panel - primary " >
2 < div class = " panel - heading " >
3 < h3 class = " panel - title " > Titre </ h3 >
4 </ div >
5 < div class = " panel - body " > Contenu </ div >
6 </ div >
7 < div class = " panel panel - success " >
8 < div class = " panel - heading " >
9 < h3 class = " panel - title " > Titre </ h3 >
10 </ div >
11 < div class = " panel - body " > Contenu </ div >
12 </ div >
13 < div class = " panel panel - warning " >
14 < div class = " panel - heading " >
15 < h3 class = " panel - title " > Titre </ h3 >
16 </ div >
17 < div class = " panel - body " > Contenu </ div >
18 </ div >
19 < div class = " panel panel - danger " >
20 < div class = " panel - heading " >
21 < h3 class = " panel - title " > Titre </ h3 >
22 </ div >
23 < div class = " panel - body " > Contenu </ div >
24 </ div >
157
CHAPITRE 5. LES COMPOSANTS INTGRS
Jai intgr une liste groupe dans un panneau au niveau de la page dexemple :
1 < div class = " panel panel - info " >
2 < div class = " panel - heading " >
3 < h3 class = " panel - title " > Les sous - esp ces des tigres : </ h3 >
4 </ div >
5 < div class = " list - group " >
6 <a href = " # " class = " list - group - item " >
7 ...
158
LISTES GROUPES, PANNEAUX ET MDIAS
8 </ a >
9 <a href = " # " class = " list - group - item " >
10 ...
11 </ a >
12
13 ...
14
15 </ div >
16 </ div >
Jai intgr un tableau (sans bordure) dans un panneau au niveau de la page dexemple :
1 < div class = " panel panel - primary " >
2 < table class = " table table - striped table - condensed " >
3 < div class = " panel - heading " >
4 < h3 class = " panel - title " > Les menaces pour les tigres </ h3 >
5 </ div >
6 < thead >
7 < tr >
8 < th > Lieu </ th >
9 < th > Menace </ th >
10 </ tr >
11 </ thead >
159
CHAPITRE 5. LES COMPOSANTS INTGRS
160
LISTES GROUPES, PANNEAUX ET MDIAS
Les mdias
Simple insertion
Lobjet mdia permet dinsrer un mdia (audio, image, vido. . .) gauche ou droite
dun texte. Cest ce que jai prvu dans la page dexemple avec une vido de tigre :
1 < div class = " media col - lg - 12 " >
2 < div class = " pull - right " >
3 < iframe width = " 420 " height = " 320 " src = " http :// www . youtube .
com / embed / VmnIeLmjuHA " frameborder = " 0 " allowfullscreen > <
/ iframe >
4 </ div >
5 < div class = " media - body pull - right " >
6 < h4 class = " media - heading " > Un tigre domesique dans son canap
</ h4 >
7 Admirez ce noble animal ...
8 </ div >
9 </ div >
Liste de mdias
Une autre possibilit fort intressante consiste crer une liste de mdias avec la classe
media-list. Prenons par exemple le cas dun forum, on peut imaginer ce type de
scnario :
161
CHAPITRE 5. LES COMPOSANTS INTGRS
162
LISTES GROUPES, PANNEAUX ET MDIAS
Testez ! http://bootstrap.twit.free.fr/tutov3/media01.html
Remarquez lutilisation de la classe thumbnail pour bien isoler les commentaires et
rendre le tout lisible.
163
CHAPITRE 5. LES COMPOSANTS INTGRS
Alertes
Utilisation de base
Les 3 variantes
Trois autres classes permettent de changer laspect de lalerte selon le rsultat dsir :
1 < div class = " alert col - lg - 2 alert - info " >
2 < strong > Infos ! </ strong >
3 </ div >
4 < div class = " alert col - lg - offset - 1 col - lg - 2 alert - success " >
5 < strong > Bravo ! </ strong >
6 </ div >
7 < div class = " alert col - lg - offset - 1 col - lg - 2 alert - danger " >
8 < strong > Danger ! </ strong >
9 </ div >
164
ALERTES ET BARRES DE PROGRESSION
Un bloc dinformation
Si le texte doit tre consquent, il suffit dcrire le code que lon dsire :
1 < div class = " alert span5 alert - info " >
2 < h3 > Information importante ! </ h3 >
3 L ' utilisation de la classe < strong > alert </ strong > n ' est pas
sans danger pour les yeux fatigu s des pauvres
internautes ,
4 et je vous demande instamment de l ' utiliser avec parcimonie ...
5 </ div >
Un bouton de fermeture
Une fois quon a lu une alerte, on peut avoir envie de la fermer. Il suffit de prvoir un
bouton et dajouter la classe alert-dismissable :
1 < div class = " alert alert - warning alert - dismissable col - lg - 4 " >
165
CHAPITRE 5. LES COMPOSANTS INTGRS
2 < button type = " button " class = " close " data - dismiss = " alert " >&
times ; </ button >
3 < strong > Attention ! </ strong > Vous allez vraiment trop loin !
4 </ 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
quon peut facilement grer les alertes avec quelques lignes de Javascript dopes par
jQuery :
1 < div class = " container " >
2 < div class = " alert alert - warning alert - dismissable col - lg - 4 "
style = " display : none " >
3 < button type = " button " class = " close " >x </ button >
4 < h4 > Attention ! </ h4 > Petite information importante !
5 </ div >
6 < div class = " col - lg - 3 " >
7 < input type = " button " class = " btn btn - primary " id = " afficher "
value = " Afficher l ' alerte " >
8 </ div >
9 </ div >
10 < script src = " assets / js / jquery . js " > </ script >
11 < script >
12 $ ( function () {
13 $ ( " # afficher " ) . click ( function () {
14 $ ( " # afficher " ) . hide () ;
15 $ ( " . alert " ) . show ( " slow " ) ;
16 }) ;
17 $ ( " . close " ) . click ( function () {
18 $ ( " . alert " ) . hide ( " slow " ) ;
19 $ ( " # afficher " ) . show () ;
20 }) ;
21 }) ;
22 </ script >
166
ALERTES ET BARRES DE PROGRESSION
Barres de progression
Les barres de progression constituent une faon lgante de faire patienter lutilisateur
pendant une longue tche. Elles ont aussi pour vocation de le rassurer et de lui indi-
quer approximativement le temps quil lui reste attendre. Les classes progress et
progress-bar permettent de raliser facilement ce genre deffet. Pour les exemples, je
prvois un peu de code javascript pour simuler un processus temporel. Voici la barre
de base :
1 < div class = " container " >
2 < div class = " progress " >
3 < div class = " progress - bar " > </ div >
4 </ div >
5 < input type = " button " class = " btn btn - primary " id = " animer "
value = " Animer " >
6 </ div >
7 < script src = " assets / js / jquery . js " > </ script >
8 < script >
9 function timer ( n ) {
10 $ ( " . progress - bar " ) . css ( " width " , n + " % " ) ;
11 if ( n < 100 ) {
12 setTimeout ( function () {
13 timer ( n + 10 ) ;
14 } , 200 ) ;
15 }
16 }
17 $ ( function () {
18 $ ( " # animer " ) . click ( function () {
19 timer ( 0 ) ;
20 }) ;
21 }) ;
167
CHAPITRE 5. LES COMPOSANTS INTGRS
Testez ! http://bootstrap.twit.free.fr/tutov3/barre01.html
Le code correspondant la barre figure aux lignes 2, 3 et 4, le reste est juste lintendance
pour lanimer pour lexemple. On se contente de faire voluer la proprit width de la
barre.
Il existe une version raye de la barre avec la classe progress-striped :
1 < div class = " progress progress - striped " >
2 < div class = " progress - bar " > </ div >
3 </ div >
Testez ! http://bootstrap.twit.free.fr/tutov3/barre02.html
Il existe aussi une version raye et lgamment anime avec la classe active :
1 < div class = " container " >
2 < div class = " progress progress - striped active " >
3 < div class = " progress - bar " > </ div >
4 </ div >
5 < div id = " pourcentage " class = " pull - right " > </ div >
6 < input type = " button " class = " btn btn - primary " id = " animer "
value = " Animer " >
7 </ div >
8 < script src = " assets / js / jquery . js " > </ script >
9 < script >
10 function timer ( n ) {
11 $ ( " . progress - bar " ) . css ( " width " , n + " % " ) ;
12 $ ( " # pourcentage " ) . text ( n + " % " ) ;
13 if ( n < 100 ) {
168
ALERTES ET BARRES DE PROGRESSION
14 setTimeout ( function () {
15 timer ( n + 10 ) ;
16 } , 200 ) ;
17 }
18 }
19 $ ( function () {
20 $ ( " # animer " ) . click ( function () {
21 timer ( 0 ) ;
22 }) ;
23 }) ;
24 </ script >
Ce qui donne la figure 5.55, mme si sur limage vous ne voyez pas lanimation. . .
169
CHAPITRE 5. LES COMPOSANTS INTGRS
Testez ! http://bootstrap.twit.free.fr/tutov3/barre04.html
Une dernire possibilit, enfin, consiste empiler des barres :
1 < div class = " container " >
2 < div class = " progress " >
3 < div class = " progress - bar progress - bar - success " > </ div >
4 < div class = " progress - bar progress - bar - warning " > </ div >
5 < div class = " progress - bar progress - bar - danger " > </ div >
6 </ div >
7 < input type = " button " class = " btn btn - primary " id = " animer "
value = " Animer " >
8 </ div >
9 < script src = " assets / js / jquery . js " > </ script >
10 < script >
11 function timer ( n ) {
12 $ ( " . progress - bar " ) . css ( " width " , n + " % " ) ;
13 if ( n < 33 . 2 ) {
14 setTimeout ( function () {
15 timer ( n + 3 . 33 ) ;
16 } , 200 ) ;
17 }
170
ALERTES ET BARRES DE PROGRESSION
18 }
19 $ ( function () {
20 $ ( " # animer " ) . click ( function () {
21 timer ( 0 ) ;
22 }) ;
23 }) ;
24 </ script >
En rsum
Bootstrap permet de crer une barre de navigation fixe ou mobile qui peut comporter
un titre, des liens, des boutons et des formulaires.
Bootstrap possde un composant pour la navigation entre pages web.
Pour des effets visuels Bootstrap propose son Jumbotron, des libells, des badges et
des thumbnails pour les images.
Les listes groupes peuvent comporter des badges, des liens, des images et tre colo-
res.
La panneaux permettent disoler visuellement une partie de la page et peuvent com-
porter un titre, ils peuvent intgrer facilement une liste groupe ou un tableau.
Le composant media permet de proposer des images, des musiques, des vidos.
Bootstrap permet laffichage de bandeaux dalerte colors et de barres de progression.
171
CHAPITRE 5. LES COMPOSANTS INTGRS
172
Troisime partie
173
Chapitre 6
Les plugins jQuery
Difficult :
jQuery est un framework Javascript devenu incontournable au fil des annes. Les crateurs
de Bootstrap lont choisi pour offrir des plugins esthtiques et faciles mettre en uvre,
dans la plupart des cas sans mme mettre les doigts dans du code Javascript ! Toutefois,
si vous voulez obtenir le meilleur de ces plugins, il vous faudra un peu manipuler jQuery.
Jai trait les plugins les plus importants en dlaissant Affix qui est la fois simple dutili-
sation et dun usage limit. Une page dexemple servira la fois de collecteur dexemples
pratiques et de fil conducteur.
175
CHAPITRE 6. LES PLUGINS JQUERY
Gnralits
La librairie jQuery
Cest un langage de script qui permet de rendre les pages web interactives.
Cest un langage qui fonctionne ct client et ne demande aucune ressource au niveau
du serveur.
Cest un langage interprt directement par le navigateur.
jQuery est une librairie Javascript, on dit aussi un framework, cest dire un ensemble
de fonctionnalits bien pratiques pour simplifier la mise en uvre de Javascript. On
peut ainsi facilement :
Modifier des lments dune 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 - http://code.jquery.com/, cdnjs - http://
cdnjs.com/libraries/jquery/,Google CDN - https://developers.google.com/
speed/libraries/devguide?hl=fr\textbackslash#jquery, Microsoft CDN - http:
//asp.net/ajaxlibrary/cdn.ashx. . .
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 : cest une version lisible et commente pour comprendre le code.
Vous lutilisez pendant le dveloppement de vos sites si vous avez besoin de savoir
ce qui se passe dans la bibliothque.
176
GNRALITS
Minified : cest une version compresse pour tre la plus lgre possible. Cest
cette version que vous devez privilgier pour la mettre sur votre site en production
Quand vous cliquez sur le lien, vous obtenez directement le code de la figure 6.1 dans
votre navigateur.
Placer jQuery
Il est bon dorganiser un peu les fichiers dun site en rpertoires du genre (voir figure
6.2).
Si vous organisez ainsi larchitecture 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 :
1 < script src = " js / jquery . js " > </ script >
Si vous passez par un CDN, cest la mme chose, part ladresse qui change. Par
exemple :
1 < script src = " http :// code . jquery . com / jquery - 2 . 1 . 0 . min . js " > </
script >
177
CHAPITRE 6. LES PLUGINS JQUERY
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 dexcution, ainsi on encapsule tout le code dans un bloc :
1 $ ( function () {
2 // ...
3 }) ;
Si vous connaissez les slecteurs CSS, vous savez dj utiliser une grande partie de
jQuery. En effet, cette librairie les utilise directement ! Par exemple :
1 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 :
1 $ ( " 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 :
1 $ ( '# el ') . css ( ' background - color ' , 'red ') . fadeIn ( ' slow ') ;
Bootstrap propose un certain nombre de plugins pour amliorer les pages web, ils sont
tous fonds sur jQuery. Il y a deux faons de faire appel ces plugins :
soit vous rfrencez juste ce qui vous est utile en prenant la librairie correspondante
dans le pack de Bootstrap (que vous rcuprez en cliquant sur Download source
sur la page "Getting Started" - http://getbootstrap.com/getting-started/ comme
la figure 6.3).
soit vous rfrencez la bibliothque complte (que vous rcuprez en cliquant sur
Download Bootstrap sur la page "Getting Started" - http://getbootstrap.
com/getting-started/).
178
GNRALITS
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 lhypothse de lutilisation individuelle, par exemple
pour tab :
1 < script src = " js / jquery . js " > </ script >
2 < script src = " js / tab . js " > </ script >
Mise en uvre
179
CHAPITRE 6. LES PLUGINS JQUERY
3 Contenu
4 </ div >
5 < script src = " assets / js / jquery . js " > </ script >
6 < 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 dune action de lutilisateur, ici
un simple clic. Le contenu concern dans cet exemple est le mot Contenu. Le plugin est
dclench par lattribut data-toggle="collapse". Dans cette hypothse dutilisation,
vous navez pas manipuler de Javascript.
On peut obtenir exactement le mme rsultat en utilisant jQuery :
1 <a > Changer </ a >
2 < div id = " item " class = " collapse " >
3 Contenu
4 </ div >
5 < script src = " assets / js / jquery . js " > </ script >
6 < script src = " assets / js / bootstrap . min . js " > </ script >
7 < script >
8 $ ( function () {
9 $ ( 'a ') . click ( function () {
10 $ ( '# item ') . collapse ( ' toggle ') ;
11 }) ;
12 }) ;
13 </ script >
Cette fois je nai pas utilis lattribut mais un objet jQuery avec le slecteur a pour
pointer le lien et la mthode collapse avec le paramtre toggle. Nous verrons plusieurs
cas dutilisation de cette faon de procder qui est plus laborieuse que la prcdente,
mais qui savre incontournable selon les actions que nous voulons effectuer.
Les vnements
180
GNRALITS
14 })
15 }) ;
16 </ script >
Nous verrons aussi plusieurs exemples dvnements dans les plugins de Bootstrap.
La page dexemple
Pour viter de surcharger de code les chapitres sur les plugins, voici la page dexemple
complte avec des cas dutilisation des plugins concerns :
1 <! DOCTYPE HTML >
2 < html >
3
4 < head >
5 < meta charset = " utf - 8 " >
6 < link href = " assets / css / bootstrap . css " rel = " stylesheet " >
7 < style type = " text / css " >
8 body {
9 background - color :# DDD ;
10 padding - top : 10px ;
11 }
12 [ class *= " col - " ] { margin - bottom : 20px ; }
13 img { width : 100 %; }
14 . well {
15 background - color :# CCC ;
16 padding : 20px ;
17 }
18 a : active , a : focus { outline : none ; }
19 </ style >
20 </ head >
21
22 < body >
23 < div class = " container " >
24 < nav class = " navbar navbar - inverse " role = " navigation " >
25 < div class = " navbar - header " >
26 < button type = " button " class = " navbar - toggle " data -
toggle = " collapse " data - target = " . navbar - collapse " >
27 < span class = " icon - bar " > </ span >
28 < span class = " icon - bar " > </ span >
29 < span class = " icon - bar " > </ span >
30 </ button >
31 <a class = " navbar - brand " href = " # " > Les Tigres </ a >
32 </ div >
33 < div class = " collapse navbar - collapse " >
34 < ul class = " nav navbar - nav " >
35 < li > <a href = " # " > Accueil </ a > </ li >
36 < li class = " dropdown " >
37 <a class = " dropdown - toggle " data - toggle = " dropdown "
href = " # " >T moignages <b class = " caret " > </ b > </ a
181
CHAPITRE 6. LES PLUGINS JQUERY
>
38 < ul class = " dropdown - menu " >
39 < li > <a href = " # " > Dompteurs </ a > </ li >
40 < li > <a href = " # " > Zoos </ a > </ li >
41 < li > <a href = " # " > Chasseurs </ a > </ li >
42 < li class = " divider " > </ li >
43 < li > <a href = " # " > Autres t moignages </ a > </ li >
44 </ ul >
45 </ li >
46 < li > <a href = " # " > Liens </ a > </ li >
47 < li > <a href = " # " >R f rences </ a > </ li >
48 </ ul >
49 < form class = " navbar - form navbar - right " >
50 < div class = " input - group " >
51 < input type = " text " style = " width : 150px " class = "
input - sm form - control " placeholder = " Recherche "
>
52 < span class = " input - group - btn " >
53 < button type = " submit " class = " btn btn - primary
btn - sm " > < span class = " glyphicon glyphicon -
eye - open " > </ span > Chercher </ button >
54 </ span >
55 </ div >
56 </ form >
57 </ div >
58 </ nav >
59 < header class = " row " >
60 < div class = " col - lg - 12 " >
61 < h1 > Mon amour pour les tigres </ h1 >
62 </ div >
63 </ header >
64 < section class = " row " >
65 < div class = " col - lg - 12 " >
66 <p >
67 Je suis passionn par les < strong > tigres </ strong >
depuis tr s longtemps . Ce site a t construit
en < em > hommage ces merveilleux f lins ... </ em >
68 < br >
69 Je fais partie de la < abbr title = " Soci t des
Amoureux des Tigres " > SAT </ abbr > qui a pour but
de faire conna tre ces splendides animaux .
70 </ p >
71 <p > Voici ce qu ' en dit le wikipedia : </ p >
72 < blockquote >
73 Le Tigre ( Panthera tigris ) est un <a data - toggle = "
tooltip " href = " # " title = " Classe de vert br s " >
mammif re </ a > carnivore de la famille
74 des f lid s ( Felidae ) du genre Panthera . Ais ment
reconnaissable sa fourrure rousse ray e de noir , il est
le plus grand f lin sauvage et l ' un
182
GNRALITS
183
CHAPITRE 6. LES PLUGINS JQUERY
184
GNRALITS
155 < div class = " col - xs - 4 col - sm - 3 col - md - 2 " >
156 <a href = " # " class = " thumbnail " >
157 < img src = " images / t11 . jpg " alt = " Tigre " class = " img -
rounded " >
158 </ a >
159 </ div >
160 < div class = " col - xs - 4 col - sm - 3 col - md - 2 " >
161 <a href = " # " class = " thumbnail " >
162 < img src = " images / t12 . jpg " alt = " Tigre " class = " img -
rounded " >
163 </ a >
164 </ div >
165 </ section >
166 < div class = " row " >
167 < section class = " col - sm - 4 " >
168 < div class = " panel panel - info " >
169 < div class = " panel - heading " >
170 < h3 class = " panel - title " > Les sous - esp ces des
tigres : </ h3 >
171 </ div >
172 < div class = " list - group " >
173 <a href = " # infos " class = " list - group - item " data -
toggle = " modal " >
174 Tigre de Sib rie
175 < span class = " badge " > 120 </ span >
176 </ a >
177 < div class = " modal fade " id = " infos " role = " dialog "
aria - labelledby = " modalTitre " aria - hidden = " true
">
178 < div class = " modal - dialog " >
179 < div class = " modal - content " >
180 < div class = " modal - header " >
181 < button type = " button " class = " close " data -
dismiss = " modal " aria - hidden = " true " >x </
button >
182 < h4 id = " modalTitre " class = " modal - title " >
Plus d ' informations sur le tigre de
Sib rie </ h4 >
183 </ div >
184 < div class = " modal - body " >
185 < blockquote >
186 Les tigres de Sib rie p sent de 180
350 kg pour les m les et de 100
200 kg pour les femelles . Le plus
gros tigre de Sib rie ,
187 tu en 1950 , atteignait les 384 kg . Le Tigre de Sib rie est le
troisi me plus gros pr dateur terrestre derri re l ' ours
kodiak et l ' ours polaire .
188 La longueur totale du corps avec la queue est comprise entre 2 ,
7 et 3 , 8 m pour les m les et entre 2 , 4 et 2 , 75 m pour les
185
CHAPITRE 6. LES PLUGINS JQUERY
femelles . La longueur
189 du cr ne est de 341 383 mm pour les m les et 279 318 mm
pour les femelles . < hr >
190 < small class = " pull - right " > Wikipedia </
small >
191 </ blockquote >
192 </ div >
193 </ div >
194 </ div >
195 </ div >
196 <a href = " # " class = " list - group - item " >
197 Tigre de Chine m ridionale
198 < span class = " badge " > 540 </ span >
199 </ a >
200 <a href = " # " class = " list - group - item " >
201 Tigre de Bali
202 < span class = " badge " > 230 </ span >
203 </ a >
204 <a href = " # " class = " list - group - item " >
205 Tigre de d ' Indochine
206 < span class = " badge " > 240 </ span >
207 </ a >
208 <a href = " # " class = " list - group - item " >
209 Tigre de Malaisie
210 < span class = " badge " > 1200 </ span >
211 </ a >
212 <a href = " # " class = " list - group - item " >
213 Tigre de Java
214 < span class = " badge " > 710 </ span >
215 </ a >
216 <a href = " # " class = " list - group - item " >
217 Tigre de Sumatra
218 < span class = " badge " > 20 </ span >
219 </ a >
220 <a href = " # " class = " list - group - item " >
221 Tigre du Bengale
222 < span class = " badge " > 40 </ span >
223 </ a >
224 <a href = " # " class = " list - group - item " >
225 Tigre de la Caspienne
226 < span class = " badge " > 200 </ span >
227 </ a >
228 </ div >
229 </ div >
230 </ section >
231 < section class = " col - sm - 8 " >
232 < div id = " carousel " class = " carousel slide " >
233 < ol class = " carousel - indicators " >
234 < li data - target = " # carousel " data - slide - to = " 0 "
class = " active " > </ li >
186
GNRALITS
235 < li data - target = " # carousel " data - slide - to = " 1 " > </
li >
236 < li data - target = " # carousel " data - slide - to = " 2 " > </
li >
237 < li data - target = " # carousel " data - slide - to = " 3 " > </
li >
238 </ ol >
239 < div class = " carousel - inner " >
240 < div class = " item active " > < img alt = " Tigre " src = "
images / photo - tigre . jpg " > </ div >
241 < div class = " item " > < img alt = " Tigre " src = " images /
photo - tigre1 . jpg " > </ div >
242 < div class = " item " > < img alt = " Tigre " src = " images /
photo - tigre2 . jpg " > </ div >
243 < div class = " item " > < img alt = " Tigre " src = " images /
photo - tigre3 . jpg " > </ div >
244 </ div >
245 </ div >
246 </ section >
247 </ div >
248 < div class = " row " >
249 < section class = " col - sm - 12 " >
250 < div class = " panel panel - primary " >
251 < table class = " table table - striped table - condensed " >
252 < div class = " panel - heading " >
253 < h3 class = " panel - title " > Les menaces pour les
tigres </ h3 >
254 </ div >
255 < thead >
256 < tr >
257 < th > Lieu </ th >
258 < th > Menace </ th >
259 </ tr >
260 </ thead >
261 < tbody >
262 < tr >
263 < td > Grand Mekong </ td >
264 < td > Demande croissante de certaines parties
de l ' animal pour la m decine chinoise
traditionnelle et fragmentation des
habitats du fait du d veloppement non
durable d ' infrastructures </ td >
265 </ tr >
266 < tr >
267 < td > le de Sumatra </ td >
268 < td > Production d ' huile de palme et de p tes
papiers </ td >
269 </ tr >
270 < tr >
271 < td > Indon sie et Malaisie </ td >
187
CHAPITRE 6. LES PLUGINS JQUERY
188
GNRALITS
189
CHAPITRE 6. LES PLUGINS JQUERY
354 $ ( ' iframe ') . attr ( ' src ' , ' http :// www . youtube . com / embed
/ HQU2ZFnMbJg ') ;
355 })
356 $ ( '. btn - group . btn : nth - child ( 3 ) ') . click ( function () {
357 $ ( ' iframe ') . attr ( ' src ' , ' http :// www . youtube . com / embed
/ qDBKzdNpiy0 ') ;
358 })
359 }) ;
360 </ script >
361 </ body >
362 </ html >
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 6.4) :
1 <! DOCTYPE HTML >
2 < html >
3 < head >
4 < meta charset = " utf - 8 " >
5 < link href = " assets / css / bootstrap . css " rel = " stylesheet " >
6 </ head >
7 < body >
8 < div class = " container " >
9 < nav class = " navbar navbar - default " >
10 < ul class = " nav navbar - nav " >
11 < li > <a href = " # " > Accueil </ a > </ li >
12 < li > <a href = " # " > Liens </ a > </ li >
13 < li class = " dropdown " >
14 <a data - toggle = " dropdown " href = " # " >T moignages <b
class = " caret " > </ b > </ a >
15 < ul class = " dropdown - menu " >
16 < li > <a href = " # " > Dompteurs </ a > </ li >
17 < li > <a href = " # " > Zoos </ a > </ li >
18 < li > <a href = " # " > Chasseurs </ a > </ li >
19 < li class = " divider " > </ li >
20 < li > <a href = " # " > Autres t moignages </ a > </ li >
21 </ ul >
22 </ li >
23 < li > <a href = " # " >R f rences </ a > </ li >
24 </ ul >
25 </ nav >
26 </ div >
190
MENU DROULANT
27 < script src = " assets / js / jquery . js " > </ script >
28 < script src = " assets / js / bootstrap . min . js " > </ script >
29 </ body >
30 </ html >
191
CHAPITRE 6. LES PLUGINS JQUERY
Cest pas mal, mais comme a, on ne comprend pas vraiment que cest un
bouton spcial, on peut avoir un repre graphique ?
Jai ajout la classe caret pour le bouton et maintenant celui-ci est bien identifi,
comme la figure 6.6.
Oui cest bien, mais parfois jai besoin que le menu saffiche vers le haut
On peut aussi ajouter des icnes et avoir de la couleur, comme pour tout bouton (voir
figure 6.8) :
192
MENU DROULANT
On peut faire en sorte que le bouton ait 2 usages : en tant que bouton pour une action
et en tant que dclencheur de menu droulant. Il est alors spar en 2 parties : gauche
pour laction, droite pour le menu. Pour raliser cela, on cre un groupe de 2 boutons,
un avec le texte, lautre avec le signe, comme la figure 6.9 :
1 < div class = " btn - group " >
193
CHAPITRE 6. LES PLUGINS JQUERY
2 < button class = " btn btn - info " > Action </ button >
3 < button class = " btn btn - info dropdown - toggle " data - toggle = "
dropdown " > < span class = " caret " > </ span > </ button >
4 < ul class = " dropdown - menu " >
5 < li > <a href = " # " > < span class = " glyphicon glyphicon - user " > </
span > Dompteurs </ a > </ li >
6 < li > <a href = " # " > < span class = " glyphicon glyphicon - picture " > <
/ span > Zoos </ a > </ li >
7 < li > <a href = " # " > < span class = " glyphicon glyphicon - screenshot
" > </ span > Chasseurs </ a > </ li >
8 < li class = " divider " > </ li >
9 < li > <a href = " # " > < span class = " glyphicon glyphicon - list - alt " >
</ span > Autres t moignages </ a > </ li >
10 </ ul >
11 </ div >
En-ttes
Pour ajouter des en-ttes pour subdiviser le menu, il faut utiliser la classe dropdown-header
(voir figure 6.10) :
1 < div class = " btn - group " >
2 < button class = " btn btn - info " > Action </ button >
3 < button class = " btn btn - info dropdown - toggle " data - toggle = "
dropdown " > < span class = " caret " > </ span > </ button >
4 < ul class = " dropdown - menu " >
5 < li class = " dropdown - header " > Personnel </ li >
6 < li > <a href = " # " > < span class = " glyphicon glyphicon - user " > </
span > Dompteurs </ a > </ li >
7 < li > <a href = " # " > < span class = " glyphicon glyphicon - screenshot
" > </ span > Chasseurs </ a > </ li >
8 < li class = " divider " > </ li >
9 < li class = " dropdown - header " > Lieux </ li >
10 < li > <a href = " # " > < span class = " glyphicon glyphicon - book " > </
span > Biblioth ques </ a > </ li >
11 < li > <a href = " # " > < span class = " glyphicon glyphicon - cutlery " > <
/ span > Restaurants </ a > </ li >
194
MENU DROULANT
12 </ ul >
13 </ div >
Alignement droite
Par dfaut, le menu est align sur le ct gauche du bouton. On peut utiliser la classe
pull-right pour laligner sur le ct droit (voir figure 6.11) :
1 < div class = " btn - group " >
2 < button class = " btn btn - warning " > Action </ button >
3 < button class = " btn btn - warning dropdown - toggle " data - toggle = "
dropdown " > < span class = " caret " > </ span > </ button >
4 < ul class = " dropdown - menu pull - right " >
5 < li > <a href = " # " > < span class = " glyphicon glyphicon - user " > </
span > Dompteurs </ a > </ li >
6 < li > <a href = " # " > < span class = " glyphicon glyphicon - picture " > <
/ span > Zoos </ a > </ li >
7 < li > <a href = " # " > < span class = " glyphicon glyphicon - screenshot
" > </ span > Chasseurs </ a > </ li >
8 < li class = " divider " > </ li >
9 < li > <a href = " # " > < span class = " glyphicon glyphicon - list - alt " >
</ span > Autres t moignages </ a > </ li >
10 </ ul >
11 </ div >
Pour rendre une option du menu inactive, il faut utiliser la classe disabled (exemple
la figure 6.12).
1 < div class = " btn - group " >
2 < button class = " btn btn - danger " > Action </ button >
3 < button class = " btn btn - danger dropdown - toggle " data - toggle = "
dropdown " > < span class = " caret " > </ span > </ button >
195
CHAPITRE 6. LES PLUGINS JQUERY
Des sous-menus
196
MENU DROULANT
197
CHAPITRE 6. LES PLUGINS JQUERY
Tant quon veut une mise en uvre du menu droulant avec un clic, la proprit
data-toggle est suffisante. Mais il peut se prsenter des cas de figure particuliers.
Imaginez que vous vouliez dclencher le menu droulant non plus par un clic, mais par
le passage du curseur de la souris au-dessus dun lment particulier. Dans ce cas, vous
devez utiliser Javascript pour faire fonctionner votre menu. Reprenons par exemple le
cas dun menu dclench par un bouton, comme nous lavons vu prcdemment, mais
en supprimant la proprit data-toggle pour viter de dclencher automatiquement
le plugin :
1 < div class = " btn - group " >
2 < button class = " btn btn - info dropdown - toggle " > Action </ button >
3 < ul class = " dropdown - menu " >
4 < li > <a href = " # " > Dompteurs </ a > </ li >
5 < li > <a href = " # " > Zoos </ a > </ li >
6 < li > <a href = " # " > Chasseurs </ a > </ li >
7 < li class = " divider " > </ li >
8 < li > <a href = " # " > Autres t moignages </ a > </ li >
9 </ ul >
10 </ div >
198
FENTRE MODALE
La syntaxe que jai utilise nest pas la plus concise, mais elle a le mrite dtre lisible.
Maintenant le menu se referme au survol sil tait ouvert. En revanche, il ne se referme
pas lorsque lon clique sur une option. Il faudrait donc prvoir de le faire lors du
traitement de loption slectionne.
Les vnements
vnement Description
show.bs.dropdown Se dclenche ds lappel la mthode
shown.bs.dropdown Se dclenche lorsque le menu devient visible
hide.bs.dropdown Se dclenche ds lappel la mthode hide
hidden.bs.dropdown Se dclenche lorsque le menu est masqu
Lutilit de ces vnements ne saute pas spontanment aux yeux. Si vous en avez
nanmoins besoin la syntaxe est celle-ci :
1 $ ( '# mon_dropdown ') . on ( ' shown . bs . dropdown ' , function () {
2 // Je fais un truc quand le menu est devenu visible
3 })
Fentre modale
Un premier exemple simple
La mise en place dune fentre modale ncessite lutilisation de quelques classes. Voici
un premier exemple :
1 < button data - toggle = " modal " href = " # infos " class = " btn btn -
primary " > Informations </ button >
2 < div class = " modal " id = " infos " >
3 < div class = " modal - dialog " >
199
CHAPITRE 6. LES PLUGINS JQUERY
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 na donc que le
bouton de la figure 6.14 lcran.
200
FENTRE MODALE
Un pied de page
On peut amliorer un peu lesthtique en crant un pied de page avec la classe modal-footer
et un bouton pour sortir, comme la figure 6.16.
1 < button data - toggle = " modal " href = " # infos " class = " btn btn -
primary " > Informations </ button >
2 < div class = " modal " id = " infos " >
3 < div class = " modal - dialog " >
4 < div class = " modal - content " >
5 < div class = " modal - header " >
6 < button type = " button " class = " close " data - dismiss = " modal
" >x </ button >
7 < h4 class = " modal - title " > Plus d ' informations </ h4 >
8 </ div >
9 < div class = " modal - body " >
10 Le Tigre ( Panthera tigris ) est un mammif re carnivore
de la famille des f lid s ...
11 </ div >
12 < div class = " modal - footer " >
13 < button class = " btn btn - info " data - dismiss = " modal " >
Fermer </ button >
14 </ div >
15 </ div >
16 </ div >
17 </ div >
Une transition
Il est possible galement dobtenir un effet de transition en ajoutant la classe fade,
comme la figure 6.17 :
1 < div class = " modal fade " id = " infos " >
Testez ! http://bootstrap.twit.free.fr/tutov3/modal03.html
201
CHAPITRE 6. LES PLUGINS JQUERY
Testez ! http://bootstrap.twit.free.fr/tutov3/modal04.html
202
FENTRE MODALE
203
CHAPITRE 6. LES PLUGINS JQUERY
Il faut prvoir les classes pour faire bien apparatre la fentre modale. Vous verrez le
rsultat la figure 6.19.
Testez ! http://bootstrap.twit.free.fr/tutov3/modal05.html
Mon exemple tel quil est trait ne prsente pas un grand intrt, autant prvoir le code
directement dans la page de base. En revanche, cela peut devenir intressant dans le
cas o plusieurs contenus sont disponibles. Vous en verrez un exemple la figure 6.20 :
204
FENTRE MODALE
205
CHAPITRE 6. LES PLUGINS JQUERY
206
FENTRE MODALE
207
CHAPITRE 6. LES PLUGINS JQUERY
9 < button type = " button " class = " close " data - dismiss = " modal
" aria - hidden = " true " >x </ button >
10 < h4 id = " modalTitre " class = " modal - title " > Plus d '
informations sur le tigre de Sib rie </ h4 >
11 </ div >
12 < div class = " modal - body " >
13 < blockquote >
14 Les tigres de Sib rie p sent de 180 350 kg pour les
m les et de 100 200 kg pour les femelles .
15 Le plus gros tigre de Sib rie , tu en 1950 , atteignait les 384
kg . Le Tigre de Sib rie est le troisi me plus
16 gros pr dateur terrestre derri re l ' ours kodiak et l ' ours
polaire . La longueur totale du corps avec la queue
17 est comprise entre 2 , 7 et 3 , 8 m pour les m les et entre 2 , 4 et
2 , 75 m pour les femelles . La longueur du cr ne
18 est de 341 383 mm pour les m les et 279 318 mm pour les
femelles . < hr >
19 < small class = " pull - right " > Wikipedia </ small >
20 </ blockquote >
21 </ div >
22 </ div >
23 </ div >
24 </ div >
Jai intgr le code ARIA pour laccessibilit. Le rle a t dfini comme dialog (d-
finition du W3C - http://www.w3.org/TR/wai-aria/roles#dialog), cest 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 lutilisateur (ce qui nest pas
le cas ici). Javoue ne mtre jamais vraiment inquit de cet aspect daccessibilit 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 sen-
soriel. En parcourant les rles, jaurais plutt eu tendance utiliser complmentary -
http://www.w3.org/TR/wai-aria/roles#complementarydans le cas prsent. La pro-
prit aria-labelledby - http://www.w3.org/TR/wai-aria/states_and_properties#
aria-labelledby fait rfrence au titre de la fentre modale. Par exemple, un lecteur
dcran va lire le texte correspondant pour renseigner lutilisateur sur le contenu de la
fentre modale. Enfin la proprit aria-hidden - http://www.w3.org/TR/wai-aria/
states_and_properties#aria-hidden indique de ne pas tenir compte de llment.
videmment, ces ajouts daccessibilit nont vraiment de sens que si toute la page est
traite de cette faon. . .
On a vu que lon peut pratiquement tout faire avec des proprits, mais vous avez aussi
la possibilit dutiliser Javascript pour utiliser ce plugin. La proprit data-toggle="modal"
place dans llment dclencheur active automatiquement le plugin. Reprenons un
208
FENTRE MODALE
Maintenant lorsquon clique sur le bouton, il ne se passe plus rien. Pour activer le
plugin, il faut utiliser du Javascript :
1 $ ( '. btn ') . click ( function () {
2 $ ( '. modal ') . modal ( ' show ') ;
3 }) ;
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 dchappement. 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 lon ne dsire videmment pas.
Voici le code correspondant :
1 $ ( '. modal ') . modal ({
2 keyboard : false ,
3 show : false
4 }) ;
Les vnements
209
CHAPITRE 6. LES PLUGINS JQUERY
vnement Description
show.bs.modal Se dclenche ds lappel la mthode show
shown.bs.modal Se dclenche lorsque la fentre devient visible
hide.bs.modal Se dclenche ds lappel la mthode hide
hidden.bs.modal Se dclenche lorsque la fentre est masque
loaded.bs.modal Se dclenche lorsque la fentre a charg le contenu
rcupr avec la proprit remote
3 }) ;
Onglets
Le plugin Tab permet de crer facilement des onglets, comme la figure 6.24.
On utilise une liste et quelques classes, rien de bien compliqu. Les classes nav et
nav-tab soccupent de la mise en forme. Le plugin est activ par data-toggle="tab".
On pointe le bon contenu avec href.
210
ONGLETS
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 6.25.
1 < ul class = " nav nav - pills " >
Transition progressive
Pour obtenir un effet progressif, il suffit dajouter la classe fade pour chacun des
tab-pane :
1 < ul class = " nav nav - pills " >
2 < li class = " active " > <a href = " # accueil " data - toggle = " tab " >
Accueil </ a > </ li >
3 < li > <a href = " # livres " data - toggle = " tab " > Livres </ a > </ li >
4 < li > <a href = " # temoignages " data - toggle = " tab " >T moignages </ a
> </ li >
5 </ ul >
6 < div class = " tab - content " >
7 < div class = " tab - pane fade active in " id = " accueil " > Texte d '
accueil </ div >
8 < div class = " tab - pane fade " id = " livres " > Tous les livres </ div
>
9 < div class = " tab - pane fade " id = " temoignages " > Tous les t
moignages </ div >
10 </ 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 !), vous pouvez empiler les
liens (voir figure 6.26).
1 < ul class = " nav nav - pills nav - stacked " >
211
CHAPITRE 6. LES PLUGINS JQUERY
Justification
Il est aussi possible de faire en sorte que les onglets occupent tout lespace disponible
en se rpartissant de faon homogne (voir figure 6.27).
1 < div class = " col - lg - 8 " >
2 < ul class = " nav nav - pills nav - justified " >
3 < li class = " active " > <a href = " # accueil " data - toggle = " tab " >
Accueil </ a > </ li >
4 < li > <a href = " # livres " data - toggle = " tab " > Livres </ a > </ li >
5 < li > <a href = " # temoignages " data - toggle = " tab " >T moignages <
/ a > </ li >
6 </ ul >
7 < div class = " tab - content " >
8 < div class = " tab - pane active " id = " accueil " > Texte d ' accueil
</ div >
9 < div class = " tab - pane " id = " livres " > Tous les livres </ div >
10 < div class = " tab - pane " id = " temoignages " > Tous les t
moignages </ div >
11 </ div >
12 </ div >
Dsactiver un lien
Vous pouvez marquer un lien comme inactif avec la classe disabled, comme la figure
6.28 :
1 < ul class = " nav nav - pills " >
2 < li class = " active " > <a href = " # accueil " data - toggle = " tab " >
Accueil </ a > </ li >
212
ONGLETS
3 < li class = " disabled " > <a href = " # livres " data - toggle = " tab " >
Livres </ a > </ li >
4 < li > <a href = " # temoignages " data - toggle = " tab " >T moignages </ a
> </ li >
5 </ ul >
6 < div class = " tab - content " >
7 < div class = " tab - pane active " id = " accueil " > Texte d ' accueil </
div >
8 < div class = " tab - pane " id = " livres " > Tous les livres </ div >
9 < div class = " tab - pane " id = " temoignages " > Tous les t moignages
</ div >
10 </ div >
Mais ce nest pas parce quil apparat comme inactif quil lest vraiment ! Pour le rendre
rellement inactif, il faut supprimer la proprit data-toggle :
1 < li class = " disabled " > <a href = " # livres " > Livres </ a > </ li >
213
CHAPITRE 6. LES PLUGINS JQUERY
15 < div class = " tab - pane " id = " policiers " > Tous les livres
policiers </ div >
16 < div class = " tab - pane " id = " romans " > Tous les romans </ div >
17 < div class = " tab - pane " id = " contes " > Tous les contes </ div >
18 </ div >
Onglets latraux
Vous pouvez adapter la disposition et mettre par exemple les onglets empils gauche,
comme la figure 6.30 :
1 < ul class = " nav nav - pills nav - stacked pull - left " >
2 < li > <a href = " # accueil " data - toggle = " tab " > Accueil </ a > </ li >
3 < li class = " active " > <a href = " # livres " data - toggle = " tab " > Livres
</ a > </ li >
4 < li > <a href = " # temoignages " data - toggle = " tab " >T moignages </ a > <
/ li >
5 </ ul >
6 < div class = " tab - content " >
7 < div class = " tab - pane " id = " accueil " > Texte d ' accueil </ div >
8 < div class = " tab - pane " id = " temoignages " > Tous les t moignages
</ div >
9 < div class = " tab - pane active " id = " livres " > Tous les livres </
div >
10 </ div >
214
ONGLETS
1 < ul class = " nav nav - pills nav - stacked pull - right " >
La page dexemple
Notre page dexemple est maintenant enrichie donglets dans la partie infrieure, comme
la figure 6.32.
215
CHAPITRE 6. LES PLUGINS JQUERY
216
ONGLETS
Utilisation de Javascript
Activation des onglets
Nous avons ci-dessus activ le plugin avec la proprit data-toggle="tab". Il est aussi
possible dutiliser le plugin directement avec du Javascript. Voici un des exemples sans
la proprit renseigne :
1 < ul class = " nav nav - pills nav - stacked pull - right " >
2 < li > <a href = " # accueil " data - toggle = " tab " > Accueil </ a > </ li >
3 < li class = " active " > <a href = " # livres " data - toggle = " tab " > Livres
</ a > </ li >
4 < li > <a href = " # temoignages " data - toggle = " tab " >T moignages </ a > <
/ li >
5 </ ul >
6 < div class = " tab - content " >
7 < div class = " tab - pane " id = " accueil " > Texte d ' accueil </ div >
8 < div class = " tab - pane " id = " temoignages " > Tous les t moignages
</ div >
9 < div class = " tab - pane active " id = " livres " > Tous les livres </
div >
10 </ div >
Les onglets sont devenus inactifs. Pour que a fonctionne il faut ajouter un peu de
Javascript :
1 $ ( 'a ') . click ( function ( e ) {
2 e . preventDefault () ;
3 $ ( this ) . tab ( ' show ') ;
4 }) ;
Tous les onglets doivent tre activs, cest pour cette raison que jai choisi pour ma
page le slecteur a qui est sans ambigut.
Les vnements
vnement Description
show.bs.tab Se dclenche ds lappel la mthode show
shown.bs.tab Se dclenche lorsque longlet devient visible
Dautre part il est possible de connatre longlet actif avec event.target et longlet
prcdemment slectionn avec event.relatedTarget. On va utiliser tout cela pour
afficher le nom de longlet actuel et du prcdent chaque changement. On va donc
ajouter le code HTML pour accueillir linformation :
1 < ul class = " nav nav - pills " >
2 < li class = " active " > <a href = " # accueil " > Accueil </ a > </ li >
217
CHAPITRE 6. LES PLUGINS JQUERY
3 < li > <a href = " # livres " > Livres </ a > </ li >
4 < li > <a href = " # temoignages " >T moignages </ a > </ li >
5 </ ul >
6 < div class = " tab - content " >
7 < div class = " tab - pane active " id = " accueil " > Texte d ' accueil </
div >
8 < div class = " tab - pane " id = " livres " > Tous les livres </ div >
9 < div class = " tab - pane " id = " temoignages " > Tous les t moignages
</ div >
10 </ div >
11 < hr >
12 <p id = ' actif ' > < strong > Onglet actif </ strong >: < span > </ span > </ p >
13 <p id = ' precedent ' > < strong > Onglet pr c dent </ strong >: < span > </
span > </ p >
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 6.34) :
218
BOUTONS
1 <a class = " btn btn - success " data - toggle = " button " > Simple Bascule <
/a>
219
CHAPITRE 6. LES PLUGINS JQUERY
Ensuite, on cre le code pour grer leffet. 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 6.37) :
1 $ ( function () {
2 $ ( 'a ') . click ( function () {
3 with ( $ ( this ) ) {
4 button ( ' loading ') ;
5 setTimeout ( function () {
6 button ( ' reset ') ;
7 } , 4000 ) ;
8 }
9 })
10 }) ;
Testez ! http://bootstrap.twit.free.fr/tutov3/bouton06.html
Maintenant voyons un cas dutilisation un peu plus raliste que notre minuterie. Nous
avons une image lourde charger, et nous voulons que le bouton change dtat le temps
de chargement de limage. Voil le bouton et la balise prte recevoir limage :
1 <a class = " btn btn - primary " data - loading - text = " Chargement en
cours ... " > Chargez l ' image ! </ a >
2 < img id = " mon_image " >
220
BOUTONS
La page dexemple
La page dexemple a t agrmente de boutons groups de type radio pour choisir
une vido (voir la figure 6.38).
Testez ! http://bootstrap.twit.free.fr/tutov3/base13.html
1 < div class = " btn - group " data - toggle = " buttons " >
221
CHAPITRE 6. LES PLUGINS JQUERY
Carrousel
La page dexemple
La page dexemple comporte un carrousel (voir la figure 6.39). Pour information, ce
terme prend un R en anglais et deux en franais.
Testez ! http://bootstrap.twit.free.fr/tutov3/base13.html
222
CARROUSEL
Pour chaque item on place une balise <img> pour rfrencer une image. On utilise la
classe active pour dsigner limage qui doit apparatre en premier. Jai utilis une
classe col-lg-8 pour calibrer le carrousel et une classe col-lg-offset-2 pour le cen-
trer. 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 6.40) :
Testez ! http://bootstrap.twit.free.fr/tutov3/carousel01.html
223
CHAPITRE 6. LES PLUGINS JQUERY
Il est possible de faire apparatre un titre pour chaque image dans la partie infrieure
avec la classe carousel-caption (voir figure 6.41) :
Testez ! http://bootstrap.twit.free.fr/tutov3/carousel02.html
Notez que le titre vient au-dessus de limage et quil faut donc adapter le
style aux couleurs prsentes sur limage pour que le titre soit lisible.
224
CARROUSEL
Il est possible de faire apparatre un indicateur pour savoir quelle image est affiche et
aussi pour accder directement une image particulire. Il faut identifier le carrousel et
le pointer avec lattribut data-target. Lattribut data-slide-to permet didentifier
la diapositive concerne. On peut aussi slectionner la diapositive afficher en cliquant
sur lindicateur (voir figure 6.42) :
1 < div id = " carousel " class = " carousel slide " >
2 < ol class = " carousel - indicators " >
3 < li data - target = " # carousel " data - slide - to = " 0 " class = " active
" > </ li >
4 < li data - target = " # carousel " data - slide - to = " 1 " > </ li >
5 < li data - target = " # carousel " data - slide - to = " 2 " > </ li >
6 </ ol >
7 < div class = " carousel - inner " >
8 < div class = " item active " > < img alt = " " src = " images / img47 . png
" > </ div >
9 < div class = " item " > < img alt = " " src = " images / img48 . png " > </ div
>
10 < div class = " item " > < img alt = " " src = " images / img49 . png " > </ div
>
11 </ div >
12 </ div >
Testez ! http://bootstrap.twit.free.fr/tutov3/carousel03.html
Notez que lindicateur vient au-dessus de limage et quil faut donc adapter
le style aux couleurs prsentes sur limage pour quil soit lisible.
225
CHAPITRE 6. LES PLUGINS JQUERY
Testez ! http://bootstrap.twit.free.fr/tutov3/carousel04.html
Notez que les chevrons viennent au-dessus de limage et quil faut donc adap-
ter le style aux couleurs prsentes sur limage pour quils soient visibles.
Amliorer la prsentation
On peut amliorer la prsentation du diaporama avec du style, comme la figure 6.44 :
1 . carousel - inner {
226
CARROUSEL
Mais on peut aussi utiliser une classe de Bootstrap pour obtenir un effet sympathique
sans ajouter de style (voir figure 6.45 ) :
1 < div class = " carousel - inner thumbnail " >
1 $ ( function () {
2 $ ( '. carousel ') . carousel ({ interval : 2000 }) ;
227
CHAPITRE 6. LES PLUGINS JQUERY
3 }) ;
Testez ! http://bootstrap.twit.free.fr/tutov3/carousel07.html
Cycle et pause
On peut avec jQuery commander le dmarrage du cycle ou la pause (voir figure 6.46) :
228
CARROUSEL
Autres commandes
Voici maintenant un exemple plus complet avec une palette de boutons de commande
(voir figure 6.47) :
1 < div class = " container " >
2 < div class = " row " >
3 < div class = " col - lg - offset - 2 col - lg - 8 " >
4 < div id = " carousel " class = " carousel slide " >
5 < div class = " carousel - inner " >
6 < div class = " item active " > < img alt = " " src = " images /
img47 . png " > </ div >
7 < div class = " item " > < img alt = " " src = " images / img48 . png "
> </ div >
8 < div class = " item " > < img alt = " " src = " images / img49 . png "
> </ div >
9 </ div >
10 </ div >
11 </ div >
12 </ div >
13 < div class = " row " >
14 < div class = " col - lg - 12 " >
15 < div class = " btn - group " data - toggle = " buttons " >
16 < label class = " btn btn - success " id = " first " >
17 < input type = " radio " name = " options " > < span class = "
glyphicon glyphicon - fast - backward " > </ span >
18 </ label >
19 < label class = " btn btn - success " id = " previous " >
20 < input type = " radio " name = " options " > < span class = "
glyphicon glyphicon - step - backward " > </ span >
21 </ label >
22 < label class = " btn btn - success " id = " pause " >
23 < input type = " radio " name = " options " > < span class = "
glyphicon glyphicon - pause " > </ span >
24 </ label >
25 < label class = " btn btn - success active " id = " play " >
229
CHAPITRE 6. LES PLUGINS JQUERY
26 < input type = " radio " name = " options " > < span class = "
glyphicon glyphicon - play " > </ span >
27 </ label >
28 < label class = " btn btn - success " id = " next " >
29 < input type = " radio " name = " options " > < span class = "
glyphicon glyphicon - step - forward " > </ span >
30 </ label >
31 < label class = " btn btn - success " id = " last " >
32 < input type = " radio " name = " options " > < span class = "
glyphicon glyphicon - fast - forward " > </ span >
33 </ label >
34 </ div >
35 </ div >
36 </ div >
37 </ div >
38 < script src = " assets / js / jquery . js " > </ script >
39 < script src = " assets / js / bootstrap . min . js " > </ script >
40 < script >
41 $ ( function () {
42 $ ( '. carousel ') . carousel ({ interval : 2000 }) ;
43 $ ( '# first ') . click ( function () { $ ( '. carousel ') . carousel ( 0 ) ;
}) ;
44 $ ( '# previous ') . click ( function () { $ ( '. carousel ') . carousel ( '
prev ') ; }) ;
45 $ ( '# pause ') . click ( function () { $ ( '. carousel ') . carousel ( '
pause ') ; }) ;
46 $ ( '# play ') . click ( function () { $ ( '. carousel ') . carousel ( '
cycle ') ; }) ;
47 $ ( '# next ') . click ( function () { $ ( '. carousel ') . carousel ( ' next
') ; }) ;
48 $ ( '# last ') . click ( function () { $ ( '. carousel ') . carousel ( 2 ) ;
}) ;
49 }) ;
50 </ script >
Testez ! http://bootstrap.twit.free.fr/tutov3/carousel09a.html
Les vnements
Vous disposez de 2 vnements pour ce composant :
vnement Description
slide.bs.carousel Se dclenche ds lappel la mthode slide
slid.bs.carousel Se dclenche lorsque la translation est termine
230
CARROUSEL
231
CHAPITRE 6. LES PLUGINS JQUERY
232
INFO-BULLES ET POPOVER
Info-bulles et Popover
La page dexemple
La page dexemple est agrmente dinfos-bulles (voir figure 6.49).
Testez ! http://bootstrap.twit.free.fr/tutov3/base13.html
Ces deux plugins (Info-bulles et Popover) partagent une bibliothque et ont un fonc-
tionnement analogue, nous allons donc les traiter ensemble.
Info-bulle
Un exemple simple
233
CHAPITRE 6. LES PLUGINS JQUERY
1 Le Tigre ( Panthera tigris ) est un <a data - toggle = " tooltip " href
= " # " title = " Classe de vert br s " >
2 mammif re </ a > carnivore de la famille des f lid s ( Felidae ) du
genre Panthera . Ais ment reconnaissable sa
3 fourrure rousse ray e de noir , il est le plus grand f lin
sauvage et l ' un des plus grands <a data - toggle = " tooltip "
4 href = " # " title = ' Synonyme de " carnassier " ' > carnivores </ a > du
monde . L ' esp ce est divis e en neuf
5 sous - esp ces poss dant des diff rences mineures en termes de
taille ou de comportement .
On utilise des balises <a> avec lattribut data-toggle gal tooltip. Le contenu de
linfo-bulle se place dans lattribut title. Si vous testez ce code il ne se passera rien
parce quil faut initialiser le plugin avec jQuery :
1 $ ( function () {
2 $ ( 'a ') . tooltip () ;
3 }) ;
Il suffit dutiliser la fonction tooltip avec le bon slecteur, ici on a choisit la balise
<a> parce quon veut une info-bulle sur tous les liens de la page. Dans un contexte
plus complexe il faudrait videmment affiner la slection, mais ce nest pas lobjet de
ce cours.
Positionnement de linfo-bulle
On peut changer le positionnement de linfo-bulle qui par dfaut se situe juste au-
dessus avec loption placement. Les possibilits sont top (au-dessus, cest loption par
dfaut), bottom (au-dessous), left ( gauche) et right ( droite). Voici un exemple
dutilisation avec le mme code HTML :
1 $ ( function () {
2 $ ( ' a : first - child ') . tooltip ({ placement : ' left ' }) ;
3 $ ( ' a : last - child ') . tooltip ({ placement : ' bottom ' }) ;
4 }) ;
Ici on utilise loption placement en la dfinissant left pour le premier lien et bottom
pour le second (voir figure 6.51).
234
INFO-BULLES ET POPOVER
Dclenchement de linfo-bulle
Par dfaut linfo-bulle est dclenche lorsque le curseur de la souris se dplace sur
llment concern ou si celui-ci a le focus. On peut modifier ce comportement avec
loption trigger. Les possibilits sont click, hover, focus et manual. Voici un exemple
dutilisation avec le mme code HTML :
1 $ ( function () {
2 $ ( ' a : first - child ') . tooltip ({ trigger : ' click ' }) ;
3 $ ( ' a : last - child ') . tooltip ({ placement : ' bottom ' , trigger : '
hover click ' }) ;
4 }) ;
Ici on utilise loption trigger en la dfinissant click pour le premier lien et hover
et click pour le second (voir figure 6.52). Testez ! http://bootstrap.twit.free.
fr/tutov3/tooltip03.html
1 $ ( function () {
2 $ ( ' a : first - child ') . tooltip ({ delay : 400 }) ;
3 $ ( ' a : last - child ') . tooltip ({ delay : { show : 400 , hide : 200 }
}) ;
4 }) ;
Ici on utilise loption delay en la dfinissant 400 ms pour le premier lien pour laffi-
chage et la disparition. On diffrencie avec 400 ms pour laffichage et 200 ms pour la
disparition pour le second (voir figure 6.53).
Testez ! http://bootstrap.twit.free.fr/tutov3/tooltip04.html
235
CHAPITRE 6. LES PLUGINS JQUERY
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 :
1 <a href = " # " id = " pop " class = " btn btn - info " data - toggle = " popover "
data - content = "C ' est tout simple faire ! " title = " Test du
Popover " >
2 Cliquez sur moi pour le popover </ a >
On utilise des balises <a> avec lattribut data-toggle gal popover. Le contenu se
place dans lattribut data-content et le titre dans lattribut title. Si vous testez ce
code, il ne se passera rien parce quil faut initialiser le plugin avec jQuery :
1 $ ( function () {
2 $ ( " # pop " ) . popover () ;
3 }) ;
Il suffit dutiliser la fonction popover avec le bon slecteur, ici on a choisi tout simple-
ment un id. Vous verrez le rsultat la figure 6.54.
Positionnement
236
INFO-BULLES ET POPOVER
Dlai
Testez ! http://bootstrap.twit.free.fr/tutov3/popover04.html
Dclenchement
Le comportement par dfaut est un dclenchement au clic sur llment, mais on peut
facilement changer ce comportement :
1 $ ( " # pop " ) . popover ({ placement : ' bottom ' , trigger : ' hover '}) ;
Ici on a utilis loption trigger pour avoir un dclenchement au passage (hover) sur
llment (les autres possibilits sont click, focus et manual). On montre aussi quon
peut cumuler plusieurs options puisquon a aussi dfini le positionnement en bas avec
bottom. Testez ! http://bootstrap.twit.free.fr/tutov3/popover03.html
Avec loption manual on peut dfinir une action quelconque pour dclencher le popover
que lon veut. Regardez cet exemple au niveau HTML :
1 < div class = " well " >
2 < img id = " img " data - toggle = " popover " data - content = " Je suis en
col re ! " title = " Attention vous ! " src = " images / visage .
png " >
3 <a href = " # " id = " pop " class = " btn btn - info pull - right " > Cliquer
sur moi plusieurs fois pour le popover </ a >
4 </ div >
237
CHAPITRE 6. LES PLUGINS JQUERY
Par dfaut, vous ne pouvez mettre que du simple texte dans le popover. Toutefois, vous
pouvez mettre loption html true pour changer ce fonctionnement (voir figure 6.57) :
1 <a href = " # " id = " pop " class = " btn btn - info " data - toggle = " popover "
data - html = " true " data - content = " <em >C ' est tout simple
faire ! </ em > "
2 title = " <h3 > Test du popover </ h3 > " >
3 Cliquez sur moi pour le popover </ a >
Effet accordon
Un exemple simple
Le plugin accordon (Collapse) est bien adapt au composant panel, voici un premier
exemple (voir figure 6.58) :
1 < div class = " panel panel - default col - lg - 6 " >
2 < h4 > Les plugins de Bootstrap </ h4 >
3 < div class = " panel - heading " >
4 <a class = " accordion - toggle " href = " # item1 " data - toggle = "
collapse " > Accord on </ a >
5 </ div >
6 < div id = " item1 " class = " panel - collapse collapse in " >
7 < div class = " panel - body " > Ce plugin permet de cr er des
effets " accord on " totalement param trables </ div >
8 </ div >
9 < div class = " panel - heading " >
238
EFFET ACCORDON
10 <a class = " accordion - toggle " href = " # item2 " data - toggle = "
collapse " > Fen tre modale </ a >
11 </ div >
12 < div id = " item2 " class = " panel - collapse collapse " >
13 < div class = " panel - body " > Ce plugin permet de cr er des fen
tres modales l gantes avec une grande simplicit . </ div
>
14 </ div >
15 < div class = " panel - heading " >
16 <a class = " accordion - toggle " href = " # item3 " data - toggle = "
collapse " > Carousel </ a >
17 </ div >
18 < div id = " item3 " class = " panel - collapse collapse " >
19 < div class = " panel - body " > Ce plugin permet de faire d filer
des images ou des vid o , ou tout autre l ment m dia
avec une mise
20 en forme esth tique </ div >
21 </ div >
239
CHAPITRE 6. LES PLUGINS JQUERY
Nous allons voir maintenant une utilisation plus complte du composant panel (voir
figure 6.59) :
240
EFFET ACCORDON
241
CHAPITRE 6. LES PLUGINS JQUERY
De jolies en-ttes
a fonctionne bien mais cest un peu triste sans couleur, comme on utilise le composant
panel, cest facile arranger (voir figure 6.61) :
1 < div id = " monaccordeon " class = " panel - group col - lg - 6 " >
2 < h3 > Les plugins de Bootstrap </ h3 >
3 < div class = " panel panel - info " >
4 < div class = " panel - heading " >
5 < h3 class = " panel - title " >
6 <a class = " accordion - toggle " href = " # item1 " data - parent
= " # monaccordeon " data - toggle = " collapse " > Accord on
</ a >
242
EFFET ACCORDON
7 </ h3 >
8 </ div >
9 < div id = " item1 " class = " panel - collapse collapse in " >
10 < div class = " panel - body " > Ce plugin permet de cr er des
effets " accord on " totalement param trables </ div >
11 </ div >
12 </ div >
13 < div class = " panel panel - info " >
14 < div class = " panel - heading " >
15 < h3 class = " panel - title " >
16 <a class = " accordion - toggle " href = " # item2 " data - parent
= " # monaccordeon " data - toggle = " collapse " > Fen tre
modale </ a >
17 </ h3 >
18 </ div >
19 < div id = " item2 " class = " panel - collapse collapse " >
20 < div class = " panel - body " > Ce plugin permet de cr er des
fen tres modales l gantes avec une grande simplicit
. </ div >
21 </ div >
22 </ div >
23 < div class = " panel panel - info " >
24 < div class = " panel - heading " >
25 < h3 class = " panel - title " >
26 <a class = " accordion - toggle " href = " # item3 " data - parent
= " # monaccordeon " data - toggle = " collapse " > Carrousel
</ a >
27 </ h3 >
28 </ div >
29 < div id = " item3 " class = " panel - collapse collapse " >
30 < div class = " panel - body " > Ce plugin permet de faire d
filer des images ou des vid o , ou tout autre l ment
m dia avec une mise
31 en forme esth tique </ div >
32 </ div >
33 </ div >
34 </ div >
243
CHAPITRE 6. LES PLUGINS JQUERY
244
EFFET ACCORDON
Commande en Javascript
On peut activer ce plugin avec Javascript et lancer des commandes sur nimporte quel
lment. Voici un exemple (rsultat la figure 6.63) :
245
CHAPITRE 6. LES PLUGINS JQUERY
vnement Description
show.bs.collapse Se dclenche ds lappel la mthode show
shown.bs.collapse Se dclenche lorsque la zone devient visible
hide.bs.collapse Se dclenche ds lappel la mthode hide
hidden.bs.collapse Se dclenche lorsque la zone est masque
246
EFFET ACCORDON
Testez ! http://bootstrap.twit.free.fr/tutov3/collapse05.html
Voyons prsent un second exemple, en reprenant leffet accordon sur une liste groupe
vu plus haut. Il serait trs esthtique de modifier licne en fonction de la visibilit de
la liste. Il suffit de modifier lgrement le code en identifiant la liste et en ajoutant un
peu de Javascript (rsultat la figure 6.65) :
1 < div class = " container " >
2 < div class = " row " >
3 < div class = " col - sm - 3 col - md - 3 " >
247
CHAPITRE 6. LES PLUGINS JQUERY
248
EFFET ACCORDON
Testez ! http://bootstrap.twit.free.fr/tutov3/collapse06a.html
249
CHAPITRE 6. LES PLUGINS JQUERY
Le Scrollspy
250
LE SCROLLSPY
251
CHAPITRE 6. LES PLUGINS JQUERY
qui in ea
38 voluptate velit esse quam nihil molestiae consequatur , vel
illum qui dolorem eum fugiat quo voluptas nulla pariatur ? "
39 </ p >
40 </ div >
41 </ div >
42
43 < div class = " jumbotron " id = " produits " >
44 < div class = " container " >
45 < h1 class = " well " > Nos produits attractif ! </ h1 >
46 <p >" Sed ut perspiciatis unde omnis iste natus error sit
voluptatem accusantium doloremque laudantium , totam
rem aperiam ,
47 eaque ipsa quae ab illo inventore veritatis et quasi architecto
beatae vitae dicta sunt explicabo . Nemo enim ipsam
voluptatem
48 quia voluptas sit aspernatur aut odit aut fugit , sed quia
consequuntur magni dolores eos qui ratione voluptatem sequi
nesciunt .
49 Neque porro quisquam est , qui dolorem ipsum quia dolor sit
amet , consectetur , adipisci velit , sed quia non numquam
eius modi
50 tempora incidunt ut labore et dolore magnam aliquam quaerat
voluptatem . Ut enim ad minima veniam , quis nostrum
exercitationem
51 ullam corporis suscipit laboriosam , nisi ut aliquid ex ea
commodi consequatur ? Quis autem vel eum iure reprehenderit
qui in ea
52 voluptate velit esse quam nihil molestiae consequatur , vel
illum qui dolorem eum fugiat quo voluptas nulla pariatur ? "
53 </ p >
54 < hr >
55 < div class = " row " >
56 < div class = " well " >
57 < div class = " row " >
58 < div class = " col - sm - 4 " >
59 < button type = " button " class = " btn btn - primary btn -
lg btn - block " >
60 < span class = " glyphicon glyphicon - wrench " > </ span
> < br > Outillage
61 </ button >
62 </ div >
63 < div class = " col - sm - 4 " >
64 < button type = " button " class = " btn btn - primary btn -
lg btn - block " >
65 < span class = " glyphicon glyphicon - fire " > </ span > < br
> Incendie
66 </ button >
67 </ div >
68 < div class = " col - sm - 4 " >
252
LE SCROLLSPY
69 < button type = " button " class = " btn btn - primary btn -
lg btn - block " >
70 < span class = " glyphicon glyphicon - home " > </ span > < br
> Habitation
71 </ button >
72 </ div >
73 </ div >
74 </ div >
75 </ div >
76 < hr >
77 </ div >
78 </ div >
79
80 < div class = " jumbotron " id = " nouvelles " >
81 < div class = " container " >
82 < h1 class = " well " > Les nouvelles de nos activit s ! </ h1 >
83 <p >" Sed ut perspiciatis unde omnis iste natus error sit
voluptatem accusantium doloremque laudantium , totam
rem aperiam , eaque ipsa
84 quae ab illo inventore veritatis et quasi architecto beatae
vitae dicta sunt explicabo . Nemo enim ipsam voluptatem quia
voluptas sit
85 aspernatur aut odit aut fugit , sed quia consequuntur magni
dolores eos qui ratione voluptatem sequi nesciunt . Neque
porro quisquam est ,
86 qui dolorem ipsum quia dolor sit amet , consectetur , adipisci
velit , sed quia non numquam eius modi tempora incidunt ut
labore et dolore
87 magnam aliquam quaerat voluptatem . Ut enim ad minima veniam ,
quis nostrum exercitationem ullam corporis suscipit
laboriosam , nisi ut
88 aliquid ex ea commodi consequatur ? Quis autem vel eum iure
reprehenderit qui in ea voluptate velit esse quam nihil
molestiae consequatur ,
89 vel illum qui dolorem eum fugiat quo voluptas nulla pariatur ? "
90 </ p >
91 < hr >
92 < div class = " row " >
93 < div class = " well " >
94 < div class = " row " >
95 < div class = " col - sm - 4 " >
96 < button type = " button " class = " btn btn - info btn - lg
btn - block " >
97 < span class = " glyphicon glyphicon - wrench " > </ span
> < br > Outillage
98 </ button >
99 </ div >
100 < div class = " col - sm - 4 " >
101 < button type = " button " class = " btn btn - info btn - lg
btn - block " >
253
CHAPITRE 6. LES PLUGINS JQUERY
102 < span class = " glyphicon glyphicon - fire " > </ span > < br
> Incendie
103 </ button >
104 </ div >
105 < div class = " col - sm - 4 " >
106 < button type = " button " class = " btn btn - info btn - lg
btn - block " >
107 < span class = " glyphicon glyphicon - home " > </ span > < br
> Habitation
108 </ button >
109 </ div >
110 </ div >
111 </ div >
112 </ div >
113 < hr >
114 </ div >
115 </ div >
116
117 < div class = " jumbotron " id = " localisation " >
118 < div class = " container " >
119 < h1 class = " well " >L ' emplacement de nos boutiques ! </ h1 >
120 <p >" Sed ut perspiciatis unde omnis iste natus error sit
voluptatem accusantium doloremque laudantium , totam
rem aperiam ,
121 eaque ipsa quae ab illo inventore veritatis et quasi
architecto beatae vitae dicta sunt explicabo . Nemo enim
ipsam voluptatem
122 quia voluptas sit aspernatur aut odit aut fugit , sed quia
consequuntur magni dolores eos qui ratione voluptatem sequi
nesciunt .
123 Neque porro quisquam est , qui dolorem ipsum quia dolor sit
amet , consectetur , adipisci velit , sed quia non numquam
eius modi
124 tempora incidunt ut labore et dolore magnam aliquam quaerat
voluptatem . Ut enim ad minima veniam , quis nostrum
exercitationem
125 ullam corporis suscipit laboriosam , nisi ut aliquid ex ea
commodi consequatur ? Quis autem vel eum iure reprehenderit
qui in ea
126 voluptate velit esse quam nihil molestiae consequatur , vel
illum qui dolorem eum fugiat quo voluptas nulla pariatur ? "
127 </ p >
128 < hr >
129 < div class = " row " >
130 < div class = " well " >
131 < div class = " row " >
132 < div class = " col - sm - 4 " >
133 < button type = " button " class = " btn btn - warning btn -
lg btn - block " >
254
LE SCROLLSPY
134 < span class = " glyphicon glyphicon - wrench " > </ span
> < br > Outillage
135 </ button >
136 </ div >
137 < div class = " col - sm - 4 " >
138 < button type = " button " class = " btn btn - warning btn -
lg btn - block " >
139 < span class = " glyphicon glyphicon - fire " > </ span > < br
> Incendie
140 </ button >
141 </ div >
142 < div class = " col - sm - 4 " >
143 < button type = " button " class = " btn btn - warning btn -
lg btn - block " >
144 < span class = " glyphicon glyphicon - home " > </ span > < br
> Habitation
145 </ button >
146 </ div >
147 </ div >
148 </ div >
149 </ div >
150 < hr >
151 </ div >
152 </ div >
153
154 </ div >
155 < script src = " assets / js / jquery . js " > </ script >
156 < script src = " assets / js / bootstrap . min . js " > </ script >
157 </ body >
158 </ html >
255
CHAPITRE 6. LES PLUGINS JQUERY
Ensuite on cre la navigation qui pointe des zones faire apparatre sans ajout dautres
classes, le fonctionnement est automatique.
Un mouvement fluide
Lexemple fonctionne correctement, mais on peut regretter la brutalit du mouvement.
La zone demande saffiche spontanment et on ne comprend pas vraiment quil se
produit un dfilement. Il serait plus lgant davoir un mouvement fluide pour passer
dune zone une autre. Ce nest pas prvu au niveau du plugin, mais avec quelques
lignes de Javascript on peut raliser cela :
1 $ ( function () {
2 $ ( ' li >a ') . click ( function () {
3 var pos = $ ( $ ( this ) . attr ( ' href ') ) . offset () . top ;
4 $ ( ' body , html ') . animate ({ scrollTop : pos } , 1000 ) ;
5 })
6 }) ;
Testez ! http://bootstrap.twit.free.fr/tutov3/scrollspy02.html
En rsum
Bootstrap propose un collection de plugins jQuery faciles mettre en uvre.
256
LE SCROLLSPY
Les menus droulants permettent laffichage de liens textuels, auxquels on peut ad-
joindre des icnes et des en-ttes. Ils peuvent sintgrer une barre de navigation ou
un bouton. On peut raliser des sous-menus en ajoutant quelques styles au frame-
work.
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 dafficher 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 dun processus.
Le carrousel permet de faire dfiler des images avec possibilit dajouter 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.
Leffet accordon permet de faire apparatre ou disparatre une zone de la page. Il
est possible dajouter des en-ttes et dintgrer des listes groupes. On lutilise 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.
257
CHAPITRE 6. LES PLUGINS JQUERY
258
Chapitre 7
Configurer Bootstrap
Difficult :
Utiliser directement ce que nous offre Bootstrap cest bien, mais le modifier pour le rendre
exactement adapt nos besoins cest encore mieux. Alors, si vous voulez bidouiller Boots-
trap, ce chapitre est fait pour vous !
259
CHAPITRE 7. CONFIGURER BOOTSTRAP
Configuration simplifie
Une page dexemple
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 :
1 <! DOCTYPE HTML >
2 < html >
3
4 < head >
5 < meta charset = " utf - 8 " >
6 < link href = " assets / css / bootstrap . min . css " rel = " stylesheet " >
7 </ head >
8
9 < body >
10 < div class = " container " >
11 < header class = " row col - sm - 12 " >
12 < div class = " page - header " >
13 < h1 > Mon beau site < img src = " images / papillon . png " class
= " pull - right " > </ h1 >
14 </ div >
15 </ header >
16 < div class = " row col - sm - 12 " >
17 < nav class = " col - sm - 2 " >
18 < ul class = " nav nav - pills nav - stacked " >
19 < li class = " active " > <a href = " # " > < span class = "
glyphicon glyphicon - home " > </ span > Accueil </ a > <
/ li >
20 < li > <a href = " # " > < span class = " glyphicon glyphicon -
book " > </ span > Livres </ a > </ li >
21 < li > <a href = " # " > < span class = " glyphicon glyphicon -
facetime - video " > </ span > Films </ a > </ li >
22 < li > <a href = " # " > < span class = " glyphicon glyphicon -
headphones " > </ span > Musiques </ a > </ li >
23 </ ul >
24 </ nav >
25 < section class = " col - sm - 10 " >
26 < div class = " panel panel - default " >
27 < div class = " panel - heading " >
28 < h3 class = " panel - title " > Bienvenue sur mon site ! <
/ h3 >
29 </ div >
30 < div class = " panel - body " >
31 <p >" Sed ut perspiciatis unde omnis iste natus
error sit voluptatem accusantium doloremque
laudantium , totam rem aperiam ,
32 eaque ipsa quae ab illo inventore veritatis et quasi architecto
beatae vitae dicta sunt explicabo . Nemo enim ipsam
260
CONFIGURATION SIMPLIFIE
261
CHAPITRE 7. CONFIGURER BOOTSTRAP
1. bannire suprieure
2. menu gauche
3. contenu droite
4. 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 7.1.
Testez ! http://bootstrap.twit.free.fr/tutov3/config01.html
Cest dj pas si mal, mais on va amliorer la prsentation avec du style :
1 body {
2 background - color :# bbb ;
262
CONFIGURATION SIMPLIFIE
3 color :# 048 ;
4 font - size : 12px ;
5 line - height : 16px ;
6 }
7 a {
8 color : # 028 ;
9 }
10 footer {
11 text - align : center ;
12 }
13 nav {
14 background - color :# bcd ;
15 border - radius : 8px ;
16 padding : 0 ! important ;
17 border : 1px solid # ddd ;
18 margin - bottom : 20px ;
19 }
20 section {
21 padding - right : 0 ! important ;
22 }
23 . panel {
24 background - color : # bcd ;
25 border - radius : 8px ;
26 padding - bottom : 5px ;
27 }
28 h1 {
29 text - shadow : 4px 4px 5px # 777 ;
30 color : # 449 ;
31 }
32 . nav > li > a : hover , . nav > li > a : focus {
33 background - color : # cde ;
34 }
35 . panel - default > . panel - heading , . nav - pills > li . active > a , .
nav - pills > li . active > a : hover , . nav - pills > li . active > a :
focus {
36 color : # 048 ;
37 background - color : # abc ;
38 border - radius : 8px ;
39 }
263
CHAPITRE 7. CONFIGURER BOOTSTRAP
264
CONFIGURATION SIMPLIFIE
des liens, la taille des caractres. . . On peut se demander sil nest pas plus simple de
modifier directement Bootstrap. . .
Comme on nutilise aucun plugin jQuery, on dcoche tout avec le bouton Toggle all
(voir figure 7.5).
On ne tient pas compte pour le moment des variables LESS. Il ny 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
265
CHAPITRE 7. CONFIGURER BOOTSTRAP
est loin dtre ngligeable ! Il faut quand mme vrifier que la page fonctionne encore
correctement.
Les variables
Il est possible daller plus loin dans la personnalisation. Regardons les variables dispo-
nibles. 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 7.6).
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 naurai
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 7.7).
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 :
266
CONFIGURATION SIMPLIFIE
1 < link href = " assets / css / bootstrap . min . v1_1 . css " rel = " stylesheet "
>
267
CHAPITRE 7. CONFIGURER BOOTSTRAP
36 color : # 048 ;
37 background - color : # abc ;
38 border - radius : 8px ;
39 }
Testez ! http://bootstrap.twit.free.fr/tutov3/config02b.html
On obtient le mme rsultat. On peut videmment se demander lintrt de procder
ainsi pour gagner juste quelques rgles de style. Cest effectivement se donner bien du
mal pour pas grand chose. En revanche, cette dmarche peut devenir intressante dans
le cadre de la cration dun thme spcifique avec beaucoup de rglages de variables.
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
dainsi centraliser les valeurs et faciliter les modifications. Ouvrez le fichier variables.less
268
LESS, UN LANGAGE DE STYLE DYNAMIQUE
qui dfinit la valeur de toutes les variables utilises par Bootstrap. En voici un extrait :
1 ...
2 // Buttons
3 // - - - - - - - - - - - - - - - - - - - - - - - - -
4
5 @btn - font - weight : normal ;
6
7 @btn - default - color : # 333 ;
8 @btn - default - bg : # fff ;
9 @btn - default - border : # ccc ;
10 ...
Une variable est dclare avec une syntaxe simple : il suffit dutiliser 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 :
1 . btn {
2 ...
3 & : focus {
4 color : @btn - default - color ;
5 text - decoration : none ;
6 }
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 :
1 . btn : focus {
2 color : # 333333 ;
3 text - decoration : none ;
4 }
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 nempche aussi daffecter
la valeur dune variable une autre variable comme ici :
269
CHAPITRE 7. CONFIGURER BOOTSTRAP
Inclusion de fichier
Les possibilits de LESS sont loin de sarrter la dfinition de variables. On peut
inclure un fichier avec la commande @import. Par exemple, le fichier bootstrap.less
ne fait que des inclusions :
1 ...
2 // Core variables and mixins
3 @import " variables . less " ;
4 @import " mixins . less " ;
5
6 // Reset
7 @import " normalize . less " ;
8 @import " print . less " ;
9 ...
On peut importer des fichiers less ou css. Sil sagit dun fichier less, il est videm-
ment trait sil comporte des commandes spciales, alors que dans le cas dun fichier
css, il est pris tel quel sans traitement particulier.
Les mixins
On peut aussi inclure des classes dans dautres 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 :
1 // Set the container width , and override it for fixed navbars
in media queries
2 . container {
3 . container - fixed () ;
4 }
On voit que la classe .container-fixed est utilise comme une proprit. Examinons
cette classe appele qui se situe dans le fichier mixin.less :
1 // Centered container element
2 . container - fixed () {
3 margin - right : auto ;
4 margin - left : auto ;
5 padding - left : ( @grid - gutter - width / 2 ) ;
6 padding - right : ( @grid - gutter - width / 2 ) ;
7 & : extend (. clearfix all ) ;
8 }
270
LESS, UN LANGAGE DE STYLE DYNAMIQUE
On voit que cette classe ralise un ombrage selon le paramtre transmis. Si on regarde
le rsultat, on a bien ce qui est demand :
1 . btn - group . open . dropdown - toggle {
2 - webkit - box - shadow : inset 0 3px 5px rgba (0 , 0 , 0 , 0 . 125 ) ;
3 box - shadow : inset 0 3px 5px rgba (0 , 0 , 0 , 0 . 125 ) ;
4 }
Slecteurs embots
On peut inclure des slecteurs dans une dfinition, comme ici dans le fichier dropdowns.less :
1 // Open state for the dropdown
2 // - - - - - - - - - - - - - - - - - - - - - - - - - - -
3 . open {
4 // Show the menu
5 > . dropdown - menu {
6 display : block ;
7 }
8
9 // Remove the outline when : focus is triggered
10 > a {
11 outline : 0 ;
12 }
13 }
271
CHAPITRE 7. CONFIGURER BOOTSTRAP
On a vu plus haut que pour les pseudo-classes, on peut utiliser le signe &, comme par
exemple ici dans le fichier pagination.less :
1 . pagination {
2 ...
3 > li > a ,
4 > li > span {
5 & : hover ,
6 & : focus {
7 color : @pagination - hover - color ;
8 background - color : @pagination - hover - bg ;
9 border - color : @pagination - hover - border ;
10 }
11 }
On trouve ce rsultat :
1 . pagination > li > a : hover ,
2 . pagination > li > span : hover ,
3 . pagination > li > a : focus ,
4 . pagination > li > span : focus {
5 background - color : # eeeeee ;
6 }
Oprations
On peut aussi effectuer des oprations comme ici dans le fichier forms.less :
1 legend {
2 display : block ;
3 width : 100 %;
4 padding : 0 ;
5 margin - bottom : @line - height - computed ;
6 font - size : ( @font - size - base * 1 . 5 ) ;
7 line - height : inherit ;
8 color : @gray - dark ;
9 border : 0 ;
10 border - bottom : 1px solid @legend - border - color ;
11 }
Avec le rsultat :
1 legend {
2 display : block ;
3 width : 100 %;
4 padding : 0 ;
5 margin - bottom : 20px ;
6 font - size : 21px ;
7 line - height : inherit ;
8 color : # 333333 ;
9 border : 0 ;
272
LESS, UN LANGAGE DE STYLE DYNAMIQUE
Fonctions
LESS possde des fonctions bien pratiques, regardez ce code :
1 @brand - primary : # 428bca ;
2 ...
3 @link - color : @brand - primary ;
4 @link - hover - color : darken ( @link - color , 15 %) ;
Ici, on claircit le noir #000 de 20%, ce qui donne #333. On trouve dautres fonctions
classiques comme ceil, qui retourne lentier immdiatement suprieur une valeur :
1 @font - size - base : 14px ;
2 @font - size - large : ceil ( @font - size - base * 1 . 25 ) ; // ~
18px
Le rsultat de 14 * 1.25 est 17.5, larrondi par excs donne bien 18. On trouve la
fonction floor pour larrondi par dfaut, ainsi que bien dautres fonctions que vous
pouvez dcouvrir dans la documentation - http://lesscss.org/#docs.
Un exemple synthtique
Pour illustrer les possibilits et llgance de LESS je vais prendre un exemple qui
regroupe la plupart de ses possibilits en lanalysant. Vous trouvez dans le fichier
jumbotron.less ce code :
1 . jumbotron {
2 padding : @jumbotron - padding ;
3 margin - bottom : @jumbotron - padding ;
4 color : @jumbotron - color ;
5 background - color : @jumbotron - bg ;
6
7 h1 ,
8 . h1 {
9 color : @jumbotron - heading - color ;
10 }
273
CHAPITRE 7. CONFIGURER BOOTSTRAP
11 p {
12 margin - bottom : ( @jumbotron - padding / 2 ) ;
13 font - size : @jumbotron - font - size ;
14 font - weight : 200 ;
15 }
16
17 . container & {
18 border - radius : @border - radius - large ; // Only round corners
at higher resolutions if contained in a container
19 }
20
21 . container {
22 max - width : 100 %;
23 }
24
25 @media screen and ( min - width : @screen - sm - min ) {
26 padding - top : ( @jumbotron - padding * 1 . 6 ) ;
27 padding - bottom : ( @jumbotron - padding * 1 . 6 ) ;
28
29 . container & {
30 padding - left : ( @jumbotron - padding * 2 ) ;
31 padding - right : ( @jumbotron - padding * 2 ) ;
32 }
33
34 h1 ,
35 . h1 {
36 font - size : ( @font - size - base * 4 . 5 ) ;
37 }
38 }
39 }
Les valeurs sont renseignes au moyen de variables. On peut trouver leurs valeurs dans
le fichier variables.less) :
1 @jumbotron - padding : 30px ;
2 @jumbotron - color : inherit ;
3 @jumbotron - bg : @gray - lighter ;
Il faut chercher encore un peu dans le mme fichier pour obtenir la valeur pour la
couleur de fond :
274
LESS, UN LANGAGE DE STYLE DYNAMIQUE
Dans les blocs de ces slecteurs, on a une proprit directe pour font-weight, et les
autres dont la valeur est issue dune variable et mme dun calcul pour margin-bottom.
Il faut nouveau regarder dans le fichier des variable pour trouver les valeurs :
1 @jumbotron - padding : 30px ;
2 @jumbotron - color : inherit ;
3 @jumbotron - font - size : ceil (( @font - size - base * 1 . 5 ) ) ;
Classe embote
275
CHAPITRE 7. CONFIGURER BOOTSTRAP
1 . container & {
2 border - radius : @border - radius - large ;
3 }
Medias Queries
Il y aurait encore beaucoup dire sur LESS, je vous laisse le dcouvrir dans la docu-
mentation du site - http://lesscss.org/#docs qui est trs bien faite.
276
UTILISATION DE LESS DANS BOOTSTRAP
1 body {
2 /* background - color :# bbb ;
3 color :# 048 ; */
4 font - size : 12px ;
5 line - height : 16px ;
6 }
7 a {
8 color : # 028 ;
9 }
10 footer {
11 text - align : center ;
277
CHAPITRE 7. CONFIGURER BOOTSTRAP
12 }
13 nav {
14 background - color :# bcd ;
15 border - radius : 8px ;
16 padding : 0 ! important ;
17 border : 1px solid # ddd ;
18 margin - bottom : 20px ;
19 }
20 section {
21 padding - right : 0 ! important ;
22 }
23 . panel {
24 background - color : # bcd ;
25 border - radius : 8px ;
26 padding - bottom : 5px ;
27 }
28 h1 {
29 text - shadow : 4px 4px 5px # 777 ;
30 color : # 449 ;
31 }
32 . nav > li > a : hover , . nav > li > a : focus {
33 background - color : # cde ;
34 }
35 . panel - default > . panel - heading , . nav - pills > li . active > a , .
nav - pills > li . active > a : hover , . nav - pills > li . active > a :
focus {
36 color : # 048 ;
37 background - color : # abc ;
38 border - radius : 8px ;
39 }
278
UTILISATION DE LESS DANS BOOTSTRAP
279
CHAPITRE 7. CONFIGURER BOOTSTRAP
refaire toutes nos interventions. Envisageons donc une autre approche. . . Puisque nous
disposons de LESS, autant lutiliser aussi pour nos styles complmentaires. Crons un
fichier main.less avec nos styles dans le dossier qui contient tous les fichiers LESS.
1 body {
2 background - color :# bbb ;
3 color :# 048 ;
4 font - size : 12px ;
5 line - height : 16px ;
6 }
7 a {
8 color : # 028 ;
9 }
10 footer {
11 text - align : center ;
12 }
13 nav {
14 background - color :# bcd ;
15 border - radius : 8px ;
16 padding : 0 ! important ;
17 border : 1px solid # ddd ;
18 margin - bottom : 20px ;
19 }
20 section {
21 padding - right : 0 ! important ;
22 }
23 . panel {
24 background - color : # bcd ;
25 border - radius : 8px ;
26 padding - bottom : 5px ;
27 }
28 h1 {
29 text - shadow : 4px 4px 5px # 777 ;
30 color : # 449 ;
31 }
32 . nav > li > a : hover , . nav > li > a : focus {
33 background - color : # cde ;
34 }
35 . panel - default > . panel - heading , . nav - pills > li . active > a , .
nav - pills > li . active > a : hover , . nav - pills > li . active > a :
focus {
36 color : # 048 ;
37 background - color : # abc ;
38 border - radius : 8px ;
39 }
Une fois ce fichier cr, il faut informer le fichier bootstrap.less quil doit en tenir
compte (voir figure 7.11).
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
280
UTILISATION DE LESS DANS BOOTSTRAP
peut supprimer le style inclus dans la page) pour un rsultat identique pour notre page
dexemple :
Tester ! - http://bootstrap.twit.free.fr/tutov3/config02d.html
Le rsultat est trs propre , avec un seul fichier CSS charger et aucune rgle de
style dans la page. Dautre part, sil y a une mise jour faire, il suffit de recompiler.
Les mixins
La grille avec les mixins
Il existe un fichier trs intressant, cest mixins.less, qui ne contient que des mixins
(jai 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. Dautre
part, cette faon de procder sloigne du principe de base qui consiste bien sparer
le contenu de la forme. Lorsque jcris ce code dans mon exemple :
1 < div class = " row col - sm - 12 " >
2 < nav class = " col - sm - 2 " > ... </ nav >
3 < section class = " col - sm - 10 " > ... </ section >
4 </ div >
Je dis clairement que je veux une range avec deux colonnes en indiquant la proportion
de chacune delles. Si je nutilisais pas Bootstrap, ce serait uniquement mes styles qui
dcideraient de cela. Dautre 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 :
1 // Creates a wrapper for a series of columns
2 . make - row ( @gutter : @grid - gutter - width ) {
3 margin - left : ( @gutter / -2 ) ;
4 margin - right : ( @gutter / -2 ) ;
5 & : extend (. clearfix all ) ;
6 }
7 ...
8 // Generate the small columns
9 . make - sm - column ( @columns ; @gutter : @grid - gutter - width ) {
10 position : relative ;
281
CHAPITRE 7. CONFIGURER BOOTSTRAP
282
UTILISATION DE LESS DANS BOOTSTRAP
283
CHAPITRE 7. CONFIGURER BOOTSTRAP
Jai 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 :
1 . contenu , header , footer {
2 . make - row () ;
3 . make - sm - column ( 12 ) ;
4 }
5 body {
6 background - color :# bbb ;
7 color :# 048 ;
8 font - size : 12px ;
9 line - height : 16px ;
10 }
11 a {
12 color : # 028 ;
13 }
14 footer {
15 text - align : center ;
16 }
17 nav {
18 . make - sm - column ( 2 ) ;
19 background - color :# bcd ;
20 border - radius : 8px ;
21 padding : 0 ! important ;
284
UTILISATION DE LESS DANS BOOTSTRAP
Tester ! - http://bootstrap.twit.free.fr/tutov3/config03.html
Je vous conseille dexplorer les possibilits du fichier mixins.less. Et rien ne vous
empche videmment de crer vos propres classes pour rendre votre code HTML com-
pltement indpendant de Bootstrap.
Prenons un autre exemple de lutilit des mixins avec le problme des images dites
Retina . Ce terme a t cr par Apple pour dsigner les crans ayant une rsolution
trs leve (320 dpi pour les IPhone 4 et 5). Sous Android, on parle de HDPI. Quel que
soit le terme utilis, le problme est le mme. Mais quel est-il ? Si vous avez par exemple
une image de 100 x 100 px, celle-ci va bien safficher sur un cran avec une rsolution
standard. En revanche, avec un cran haute rsolution, limage va tre tire et ne va
plus tre aussi jolie. Est-ce cause de la rsolution de lcran ? Pas compltement. Cest
surtout parce que lappareil ne semble pas au courant de la rsolution dont il dispose.
Par exemple, un iPhone 4 avec une rsolution de 320 dpi et une largeur dcran de
640 px pense disposer seulement de 320 px. Du coup notre image de 100 px de ct va
apparatre floue. La solution est donc de rgler le pixel-ratio (le rapport entre les pixels
physiques et les pixels dclars). Voici le mixin propos par Bootstrap pour rgler ce
problme :
285
CHAPITRE 7. CONFIGURER BOOTSTRAP
On constate quon 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
Hauteur de base en pixels
Concrtement, on va crire cette rgle :
1 . img - retina ( " image_de_base . jpg " , " image_double . jpg " , 100px ,
100px ) ;
Tester ! - http://bootstrap.twit.free.fr/tutov3/config04.html
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 en-
suite, il suffit de changer un lment dans un fichier LESS pour obtenir le rsultat.
286
UN THME POUR BOOTSTRAP
Testez ! http://bootstrap.twit.free.fr/tutov3/base14.html
Pour se rendre compte des diffrences, la figure 7.13 reprsente les 2 versions de la
barre de navigation :
On se rend facilement compte que la barre originelle est plate , alors que la nouvelle
a du relief. Leffet est obtenu grce un dgrad. Si on regarde dans le code, on trouve
effectivement une dclaration de dgrad :
287
CHAPITRE 7. CONFIGURER BOOTSTRAP
1 . navbar - inverse {
2 background - image : - webkit - linear - gradient ( top , # 3c3c3c 0 % , #
222 100 %) ;
3 background - image : linear - gradient ( to bottom , # 3c3c3c
0 % , # 222 100 %) ;
4 filter : progid : DXImageTransform . Microsoft . gradient (
startColorstr = '# ff3c3c3c ' , endColorstr = '# ff222222 ' ,
GradientType = 0 ) ;
5 filter : progid : DXImageTransform . Microsoft . gradient ( enabled =
false ) ;
6 background - repeat : repeat - x ;
7 }
On retrouve cet effet de dgrad dans les alertes, les barres de progression, les pan-
neaux. . . Il est prvu galement des ombrages. Vous pouvez voir tous ces effets sur la
page dexemple - http://getbootstrap.com/examples/theme/ du site de Bootstrap.
On peut se demander pourquoi ces effets ne font pas partie de fichier de base de Boots-
trap. La rponse se situe au niveau des performances. Il a t choisi dviter les effets
trop gourmands en ressources.
Dautres thmes
On peut trouver des thmes intressants et gratuits sur le site Bootswatch - http:
//bootswatch.com/. Voyons la figure 7.14 ce que donne le thme Amelia sur notre
page dexemple.
288
UN THME POUR BOOTSTRAP
289
CHAPITRE 7. CONFIGURER BOOTSTRAP
Testez ! http://bootstrap.twit.free.fr/tutov3/base15.html
Ce nest pas mal, mais trop contrast mon got. Mon prfr est Slate, visible la
figure 7.15.
Testez ! http://bootstrap.twit.free.fr/tutov3/base16.html
290
UN THME POUR BOOTSTRAP
Je vais aussi modifier les 5 couleurs de base (Brand) pour les rendre plus adaptes
une tonalit verte :
1 @brand - primary : # 51c1d1 ;
2 @brand - success : # 5cb85c ;
3 @brand - warning : # f0ad4e ;
4 @brand - danger : # d9534f ;
5 @brand - info : # 5bc0de ;
Je vais enfin modifier la couleur de bordure des thumbnails pour les rendre visibles :
1 @thumbnail - border : # aca ;
Pour tester tout a je prends une version un peu adapte de lexemple de thme de
Bootstrap :
1 <! DOCTYPE html >
2 < html lang = " en " >
3 < head >
4 < meta charset = " utf - 8 " >
5 < meta name = " viewport " content = " width = device - width , initial -
scale = 1 . 0 " >
6
7 < title > Theme Template for Bootstrap </ title >
8
9 <! -- Bootstrap core CSS -- >
10 < link href = " assets / css / bootstrap . min . t03 . css " rel = "
stylesheet " >
11
12 <! -- Bootstrap theme -- >
13 < link href = " assets / css / bootstrap - theme . min . css " rel = "
stylesheet " >
14
15 <! -- Custom styles for this template -- >
16 < link href = " assets / css / theme . css " rel = " stylesheet " >
17
18 <! -- HTML5 shim and Respond . js IE8 support of HTML5
elements and media queries -- >
19 <! --[ if lt IE 9 ] >
20 < script src = " ../../ assets / js / html5shiv . js " > </ script >
21 < script src = " ../../ assets / js / respond . min . js " > </ script >
22 < ![ endif ] -- >
291
CHAPITRE 7. CONFIGURER BOOTSTRAP
292
UN THME POUR BOOTSTRAP
55 < button type = " button " class = " btn btn - danger " > Danger </
button >
56 < button type = " button " class = " btn btn - link " > Link </ button
>
57 </ p >
58 <p >
59 < button type = " button " class = " btn btn - sm btn - default " >
Default </ button >
60 < button type = " button " class = " btn btn - sm btn - primary " >
Primary </ button >
61 < button type = " button " class = " btn btn - sm btn - success " >
Success </ button >
62 < button type = " button " class = " btn btn - sm btn - info " > Info <
/ button >
63 < button type = " button " class = " btn btn - sm btn - warning " >
Warning </ button >
64 < button type = " button " class = " btn btn - sm btn - danger " >
Danger </ button >
65 < button type = " button " class = " btn btn - sm btn - link " > Link <
/ button >
66 </ p >
67 <p >
68 < button type = " button " class = " btn btn - xs btn - default " >
Default </ button >
69 < button type = " button " class = " btn btn - xs btn - primary " >
Primary </ button >
70 < button type = " button " class = " btn btn - xs btn - success " >
Success </ button >
71 < button type = " button " class = " btn btn - xs btn - info " > Info <
/ button >
72 < button type = " button " class = " btn btn - xs btn - warning " >
Warning </ button >
73 < button type = " button " class = " btn btn - xs btn - danger " >
Danger </ button >
74 < button type = " button " class = " btn btn - xs btn - link " > Link <
/ button >
75 </ p >
76
77 < div class = " page - header " >
78 < h1 > Thumbnails </ h1 >
79 </ div >
80 < img src = " images / t1 . jpg " class = " img - thumbnail " alt = " Tigre
">
81
82 < div class = " page - header " >
83 < h1 > Dropdown menus </ h1 >
84 </ div >
85 < div class = " dropdown theme - dropdown clearfix " >
86 <a id = " dropdownMenu1 " href = " # " role = " button " class = " sr -
only dropdown - toggle " data - toggle = " dropdown " >
293
CHAPITRE 7. CONFIGURER BOOTSTRAP
Dropdown <b class = " caret " > </ b > </ a >
87 < ul class = " dropdown - menu " role = " menu " aria - labelledby = "
dropdownMenu1 " >
88 < li role = " presentation " > <a role = " menuitem " tabindex = "
-1 " href = " # " > Action </ a > </ li >
89 < li role = " presentation " > <a role = " menuitem " tabindex = "
-1 " href = " # " > Another action </ a > </ li >
90 < li role = " presentation " > <a role = " menuitem " tabindex = "
-1 " href = " # " > Something else here </ a > </ li >
91 < li role = " presentation " class = " divider " > </ li >
92 < li role = " presentation " > <a role = " menuitem " tabindex = "
-1 " href = " # " > Separated link </ a > </ li >
93 </ ul >
94 </ div >
95
96 < div class = " page - header " >
97 < h1 > Navbars </ h1 >
98 </ div >
99
100 < div class = " navbar navbar - default " >
101 < div class = " container " >
102 < div class = " navbar - header " >
103 < button type = " button " class = " navbar - toggle " data -
toggle = " collapse " data - target = " . navbar - collapse "
>
104 < span class = " icon - bar " > </ span >
105 < span class = " icon - bar " > </ span >
106 < span class = " icon - bar " > </ span >
107 </ button >
108 <a class = " navbar - brand " href = " # " > Project name </ a >
109 </ div >
110 < div class = " navbar - collapse collapse " >
111 < ul class = " nav navbar - nav " >
112 < li class = " active " > <a href = " # " > Home </ a > </ li >
113 < li > <a href = " # about " > About </ a > </ li >
114 < li > <a href = " # contact " > Contact </ a > </ li >
115 < li class = " dropdown " >
116 <a href = " # " class = " dropdown - toggle " data - toggle
= " dropdown " > Dropdown <b class = " caret " > </ b > </
a>
117 < ul class = " dropdown - menu " >
118 < li > <a href = " # " > Action </ a > </ li >
119 < li > <a href = " # " > Another action </ a > </ li >
120 < li > <a href = " # " > Something else here </ a > </ li >
121 < li class = " divider " > </ li >
122 < li class = " dropdown - header " > Nav header </ li >
123 < li > <a href = " # " > Separated link </ a > </ li >
124 < li > <a href = " # " > One more separated link </ a > </
li >
125 </ ul >
294
UN THME POUR BOOTSTRAP
295
CHAPITRE 7. CONFIGURER BOOTSTRAP
168 < li class = " active " > <a href = " ./ " > Fixed top </ a > </ li
>
169 </ ul >
170 </ div > <! -- /. nav - collapse -- >
171 </ div >
172 </ div >
173
174 < div class = " page - header " >
175 < h1 > Alerts </ h1 >
176 </ div >
177 < div class = " alert alert - success " >
178 < strong > Well done ! </ strong > You successfully read this
important alert message .
179 </ div >
180 < div class = " alert alert - info " >
181 < strong > Heads up ! </ strong > This alert needs your
attention , but it ' s not super important .
182 </ div >
183 < div class = " alert alert - warning " >
184 < strong > Warning ! </ strong > Best check yo self , you ' re
not looking too good .
185 </ div >
186 < div class = " alert alert - danger " >
187 < strong > Oh snap ! </ strong > Change a few things up and
try submitting again .
188 </ div >
189
190 < div class = " page - header " >
191 < h1 > Progress bars </ h1 >
192 </ div >
193 < div class = " progress " >
194 < div class = " progress - bar " role = " progressbar " aria -
valuenow = " 60 " aria - valuemin = " 0 " aria - valuemax = " 100 "
style = " width : 60 %; " >
195 < span class = " sr - only " > 60 % Complete </ span > </ div >
196 </ div >
197 < div class = " progress " >
198 < div class = " progress - bar progress - bar - success " role = "
progressbar " aria - valuenow = " 40 " aria - valuemin = " 0 "
aria - valuemax = " 100 " style = " width : 40 % " >
199 < span class = " sr - only " > 40 % Complete ( success ) </ span > </ div >
200 </ div >
201 < div class = " progress " >
202 < div class = " progress - bar progress - bar - info " role = "
progressbar " aria - valuenow = " 20 " aria - valuemin = " 0 "
aria - valuemax = " 100 " style = " width : 20 % " >
203 < span class = " sr - only " > 20 % Complete </ span > </ div >
204 </ div >
205 < div class = " progress " >
296
UN THME POUR BOOTSTRAP
206 < div class = " progress - bar progress - bar - warning " role = "
progressbar " aria - valuenow = " 60 " aria - valuemin = " 0 "
aria - valuemax = " 100 " style = " width : 60 % " >
207 < span class = " sr - only " > 60 % Complete ( warning ) </ span > </ div >
208 </ div >
209 < div class = " progress " >
210 < div class = " progress - bar progress - bar - danger " role = "
progressbar " aria - valuenow = " 80 " aria - valuemin = " 0 "
aria - valuemax = " 100 " style = " width : 80 % " >
211 < span class = " sr - only " > 80 % Complete ( danger ) </ span > </ div >
212 </ div >
213 < div class = " progress " >
214 < div class = " progress - bar progress - bar - success " style = "
width : 35 % " > < span class = " sr - only " > 35 % Complete (
success ) </ span > </ div >
215 < div class = " progress - bar progress - bar - warning " style = "
width : 20 % " > < span class = " sr - only " > 20 % Complete (
warning ) </ span > </ div >
216 < div class = " progress - bar progress - bar - danger " style = "
width : 10 % " > < span class = ' sr - only ' > 10 % Complete (
danger ) </ span > </ div >
217 </ div >
218
219 < div class = " page - header " >
220 < h1 > List groups </ h1 >
221 </ div >
222 < div class = " row " >
223 < div class = " col - sm - 4 " >
224 < ul class = " list - group " >
225 < li class = " list - group - item " > Cras justo odio </ li >
226 < li class = " list - group - item " > Dapibus ac facilisis in
</ li >
227 < li class = " list - group - item " > Morbi leo risus </ li >
228 < li class = " list - group - item " > Porta ac consectetur ac
</ li >
229 < li class = " list - group - item " > Vestibulum at eros </ li >
230 </ ul >
231 </ div > <! -- /. col - sm - 4 -- >
232 < div class = " col - sm - 4 " >
233 < div class = " list - group " >
234 <a href = " # " class = " list - group - item active " >
235 Cras justo odio
236 </ a >
237 <a href = " # " class = " list - group - item " > Dapibus ac
facilisis in </ a >
238 <a href = " # " class = " list - group - item " > Morbi leo risus
</ a >
239 <a href = " # " class = " list - group - item " > Porta ac
consectetur ac </ a >
297
CHAPITRE 7. CONFIGURER BOOTSTRAP
240 <a href = " # " class = " list - group - item " > Vestibulum at
eros </ a >
241 </ div >
242 </ div > <! -- /. col - sm - 4 -- >
243 < div class = " col - sm - 4 " >
244 < div class = " list - group " >
245 <a href = " # " class = " list - group - item active " >
246 < h4 class = " list - group - item - heading " > List group
item heading </ h4 >
247 <p class = " list - group - item - text " > Donec id elit non
mi porta gravida at eget metus . Maecenas sed
diam eget risus varius blandit . </ p >
248 </ a >
249 <a href = " # " class = " list - group - item " >
250 < h4 class = " list - group - item - heading " > List group
item heading </ h4 >
251 <p class = " list - group - item - text " > Donec id elit non
mi porta gravida at eget metus . Maecenas sed
diam eget risus varius blandit . </ p >
252 </ a >
253 <a href = " # " class = " list - group - item " >
254 < h4 class = " list - group - item - heading " > List group
item heading </ h4 >
255 <p class = " list - group - item - text " > Donec id elit non
mi porta gravida at eget metus . Maecenas sed
diam eget risus varius blandit . </ p >
256 </ a >
257 </ div >
258 </ div > <! -- /. col - sm - 4 -- >
259 </ div >
260
261 < div class = " page - header " >
262 < h1 > Panels </ h1 >
263 </ div >
264 < div class = " row " >
265 < div class = " col - sm - 4 " >
266 < div class = " panel panel - default " >
267 < div class = " panel - heading " >
268 < h3 class = " panel - title " > Panel title </ h3 >
269 </ div >
270 < div class = " panel - body " >
271 Panel content
272 </ div >
273 </ div >
274 < div class = " panel panel - primary " >
275 < div class = " panel - heading " >
276 < h3 class = " panel - title " > Panel title </ h3 >
277 </ div >
278 < div class = " panel - body " >
279 Panel content
298
UN THME POUR BOOTSTRAP
299
CHAPITRE 7. CONFIGURER BOOTSTRAP
consectetur et . Cras
327 mattis consectetur purus sit amet fermentum . Duis mollis , est
non commodo luctus , nisi erat porttitor ligula , eget lacinia
odio sem
328 nec elit . Aenean lacinia bibendum nulla sed consectetur . </ p >
329 </ div >
330
331 </ div > <! -- / container -- >
332
333 <! -- Bootstrap core JavaScript
334 = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = -- >
335 <! -- Placed at the end of the document so the pages load
faster -- >
336 < script src = " assets / js / jquery . js " > </ script >
337 < script src = " assets / js / bootstrap . min . js " > </ script >
338 </ body >
339 </ html >
300
UN THME POUR BOOTSTRAP
http://colourlovers.com/.
En rsum
On peut gnrer une version personnalise de Bootstrap partir de linterface pro-
pose en ligne en modifiant des paramtres.
Bootstrap utilise LESS, un langage qui simplifie et organise lcriture 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.
301
CHAPITRE 7. CONFIGURER BOOTSTRAP
302