Bootstrap Avec Angular
Bootstrap Avec Angular
Bootstrap Avec Angular
Angular 15
Guide Complet
07/12/2022
Nous allons
intégrer Bootstrap version
5.2.3 dans notre Application
Web.
ganatan.com
Ce que nous allons faire
Prototype Bootstrap
Pourquoi et comment créer un prototype Bootstrap ?
Le langage HTML
HyperText Markup Language (Langage de Balisage HyperText)
il permet de créer et de représenter le contenu d'une page web et sa
structure
Le langage CSS
Cascading Style Sheets (Feuilles de style en cascade)
il est utilisé pour décrire la présentation d'une page
Le langage Javascript
Il permet de créer des fonctionnalités interactives dans la page.
Foundation
Materialize CSS
Bootstrap
Pure
Bootstrap est l'un des framework CSS les plus connus et les plus utilisés.
Création du projet
Vous pouvez consulter le tutoriel suivant qui vous explique en détails comment
faire
https://www.ganatan.com/tutorials/demarrer-avec-angular
Vous pouvez installer ce projet sur votre poste de travail en utilisant les
commandes suivantes.
# Exécutez le programme
npm run start
Frontend
Backend
Fullstack
Web Designer
C'est pour cela que nous allons créer tout d'abord un prototype graphique.
Ce prototype servira de base à la phase de conception de votre site web.
Donc.
Prototypage horizontal
Créer une maquette statique.
Dessiner un schéma (wireframe)
Définir les zones et composants
Prototypage vertical
Intégrer les fonctionnalités
Une image va nous permettre d'avoir une vue d'ensemble de notre prototype au
sein de notre application Angular.
Passons à la pratique.
Nous allons chercher sur le web tous les éléments nécessaires que nous
placerons dans l'arborescence de notre projet Angular.
Version 4 vs Version 5
Le projet final utilisera la version 5, j'ai testé, ça marche, alors pourquoi pas !
Au diable la prudence.
On aura le temps d'être prudent quand on sera mort.
Donc commençons !
bootstrap
fontawesome
params
Remarque
Tous les fichiers installés ne seront pas utilisés.
Nous pouvons dans ce cas faire le ménage et ne laisser que l'essentiel.
Pour fontawesome nous ne garderons que les fichiers all.css , all.min.css et
all.js et all.min.js
Vous retrouverez le résultat final sur le dépôt du code source indiqué en fin de
tutoriel.
ui (code bootstrap 5)
Notre première page Bootstrap
Nous allons créer notre première page en utilisant un exemple proposé par
bootstrap.
Version 5
https://v5.getbootstrap.com/docs/5.2/examples/
Style Body
<style>
body {
padding-top: 3.5rem;
font-family: "Roboto", sans-serif;
}
</style>
Style Header
<style>
.navbar.navbar-dark .navbar-nav .nav-item .nav-link {
color: white;
font-weight: 500;
border-top: 1px solid #09238d;
border-bottom: 1px solid #09238d;
}
.nga-navbar {
-webkit-box-shadow: 0 2px 5px 0 rgba(0, 0, 0, 0.16), 0 11px
10px 0 rgba(0, 0, 0, 0.12);
box-shadow: 0 2px 5px 0 rgba(0, 0, 0, 0.16), 0 11px 10px 0
rgba(0, 0, 0, 0.12);
background-color: #09238d;
}
.nga-logo {
font-weight: 700;
}
.nga-logo:hover {
color: rgba(255, 255, 255, 0.75);
}
.nga-btn-navbar {
color: #fff;
background-color: #1976d2;
border-color: #0d6efd;
}
.nga-btn-navbar:hover {
color: white;
background-color: #0b5ed7;
border-color: #0a58ca;
}
</style>
Style Footer
<style>
.nga-footer {
background-color: #212121;
color: white;
}
.nga-footer a {
color: white;
text-decoration: none
}
.nga-footer a:hover,
.nga-footer a:focus {
color: yellow;
text-decoration: underline;
}
.nga-footer .hint {
background-color: #1976d2;
}
.nga-footer .hint:hover {
opacity: 0.8;
}
</style>
Style Home
<style>
.nga-card {
display: block;
background-color: rgba(255, 255, 255, .8);
box-shadow: 0 1px 3px rgba(0, 0, 0, .12), 0 1px 2px rgba(0,
0, 0, .24);
border-radius: 2px;
transition: all .2s ease-in-out;
cursor: pointer;
}
.nga-card:hover {
box-shadow: 0 10px 20px rgba(0, 0, 0, .19), 0 6px 6px
rgba(0, 0, 0, .23);
}
</style>
Html Header
<main>
</main>
Intégration de bootstrap dans Angular
"@fortawesome/fontawesome-free": "6.1.2",
"bootstrap": "5.2.0",
"rxjs": "7.4.0",
"tslib": "2.3.1",
"zone.js": "0.11.4"
Mise à jour
Réutilisons donc les éléments de notre prototype.
Copiez tout le répertoire params de notre prototype dans notre application
angular au niveau de src/assets
https://v5.getbootstrap.com/docs/5.2/components/popovers/
https://v5.getbootstrap.com/docs/5.2/components/toasts/
index.js
Pour rajouter le code spécifique à notre projet ici
angular.json
"build": {
"builder": "@angular-devkit/build-angular:browser",
"options": {
"outputPath": "dist/angular-starter",
"index": "src/index.html",
"main": "src/main.ts",
"polyfills": "src/polyfills.ts",
"tsConfig": "tsconfig.app.json",
"assets": [
"src/favicon.ico",
"src/assets"
],
"styles": [
"node_modules/@fortawesome/fontawesome-free/css/all.min.css",
"node_modules/bootstrap/dist/css/bootstrap.min.css",
"src/assets/params/css/fonts.googleapis.min.css",
"src/styles.css"
],
"scripts": [
"node_modules/bootstrap/dist/js/bootstrap.bundle.min.js"
]
},
src/assets/params/css/index.css
body {
padding-top: 3.5rem;
font-family: "Roboto", sans-serif;
}
Nous allons modifier les fichiers suivants qui contiendront la nouvelle interface
app.component.html
app.component.css
home.component.html
home.component.ts
home.component.css
environment.prod.ts
environment.ts
app.component.spec.ts
about.css
signin.css
contact.css
ganatan.png
src/app/app.component.html (Version 4)
<header>
<nav class="navbar navbar-expand-md fixed-top navbar-dark " style="background-color:
#212121;">
<a class="navbar-brand" routerLink="/">
<span class="mr-1" style="color:white">ganatan</span>
<img src="assets/params/images/logo/ganatan.png" width="20" height="20"
alt="ganatan">
</a>
<button class="navbar-toggler" type="button" data-toggle="collapse" data-
target="#navbarsExampleDefault"
aria-controls="navbarsExampleDefault" aria-expanded="false" aria-label="Toggle
navigation">
<span class="navbar-toggler-icon"></span>
</button>
<div class="collapse navbar-collapse" id="navbarsExampleDefault">
<ul class="navbar-nav mx-auto">
<li class="nav-item active">
<a class="nav-link" routerLink="/">
<i class="fas fa-home mr-1"></i>home
</a>
</li>
<li class="nav-item active">
<a class="nav-link" routerLink="/about">
<i class="far fa-question-circle mr-1"></i>About
</a>
</li>
<li class="nav-item active">
<a class="nav-link" routerLink="/contact">
<i class="fas fa-envelope mr-1"></i>Contact
</a>
</li>
<li class="nav-item active">
<a class="nav-link" routerLink="/signin">
<i class="fas fa-user mr-1"></i>Sign in
</a>
</li>
<li class="nav-item active">
<a class="nav-link" href="https://github.com/ganatan">
<i class="fab fa-github mr-1"></i>Github
</a>
</li>
</ul>
</div>
</nav>
</header>
<main>
<div class="container-fluid">
<router-outlet></router-outlet>
</div>
</main>
<div class="footer">
<div class="container">
<div class="row">
<div class="col-12">
<p class="text-center text-white">© 2020 - www.ganatan.com</p>
</div>
</div>
</div>
</div>
src/app/app.component.css
.footer {
background: #3F729B;
padding: 2em;
}
src/app/modules/general/home/home.component.html
src/app/modules/general/home/home.component.ts (Version 4)
import { Component, OnInit } from '@angular/core';
import { environment } from '../../../../environments/environment';
@Component({
selector: 'app-home',
templateUrl: './home.component.html',
styleUrls: ['./home.component.css']
})
export class HomeComponent implements OnInit {
name = environment.application.name;
angular = environment.application.angular;
bootstrap = environment.application.bootstrap;
fontawesome = environment.application.fontawesome;
constructor() { }
ngOnInit() :void {
}
src/app/modules/general/home/home.component.ts (Version 5)
@Component({
selector: 'app-home',
templateUrl: './home.component.html',
styleUrls: ['./home.component.css']
})
export class HomeComponent implements OnInit {
name = environment.application.name;
angular = environment.application.angular;
bootstrap = environment.application.bootstrap;
fontawesome = environment.application.fontawesome;
constructor() { }
ngOnInit(): void {
this.loadScript('assets/params/js/index.js');
}
.card {
display: block;
background-color: rgba(255, 255, 255, .8);
box-shadow: 0 1px 3px rgba(0, 0, 0, .12), 0 1px 2px rgba(0, 0, 0, .24);
border-radius: 2px;
transition: all .2s ease-in-out;
cursor: pointer;
}
.card:hover {
box-shadow: 0 10px 20px rgba(0, 0, 0, .19), 0 6px 6px rgba(0, 0, 0, .23);
}
src/environments/environments.ts
src/app/app.component.spec.ts
describe('AppComponent', () => {
beforeEach(async () => {
await TestBed.configureTestingModule({
imports: [
RouterTestingModule
],
declarations: [
AppComponent
],
}).compileComponents();
});
src/app/modules/general/contact/contact.html
<div class="row">
<div class="col-12 col-sm-12 col-md-3 col-lg-3 col-xl-3">
<p class="text-center">contact works!</p>
<ul>
<li><a routerLink="/contact/mailing">Mailing</a></li>
<li><a routerLink="/contact/map">Map</a></li>
</ul>
</div>
<div class="col-12 col-sm-12 col-md-9 col-lg-9 col-xl-9">
<router-outlet></router-outlet>
</div>
</div>
src/app/modules/general/signin/signin.html
src/app/modules/general/not-found/not-found.html
{
path: 'bootstrap-prototype',
loadChildren: () => import('./modules/application/example-bootstrap-prototype/example-
bootstrap-prototype.module')
.then(mod => mod.ExampleBootstrapPrototypeModule)
app-routing.module.ts
},
# Développement
npm run start
http://localhost:4200/
# Tests
npm run lint
npm run test
npm run e2e
# Production
npm run build
Code source
En suivant chacun des conseils que je vous ai donnés dans ce guide vous
obtenez au final un code source Angular.