Bootstrap: snel ontwikkelen met een CSS Library

Hier wordt uitgebreid kennis gemaakt met Bootstrap. Dit doen we op op een manier, die goed bij developers past. Je zult zien dat we al een hele opmaak responsive kunnen realiseren zonder ook maar 1 regel CSS te schrijven.

  • We kiezen ervoor om met npm en de Command Line tool te werken;
  • We gebruiken de CLI ook om het werk op GitHub te plaatsen;
  • Bootstrap wordt pas op het eind met Sass aangepast.

Leerdoelen

  • kennismaken met Bootstrap:
    • installatie;
    • documentatie;
    • lay-out: opmaken van responsive kolommen;
    • enkele componenten:
      • navigatiebalk;
      • jumbotron;
      • modale vensters;
      • cards
  • voor- en nadelen van Bootstrap kennen;
  • werken met npm;
  • werken met CLI voor GitHub;
  • werken met Sass om Bootstrap aan te passen/af te slanken.

Opdracht

Instructievideo (00:01:45)

  1. Download van https://github.com/Theo-denBlanken/LOTR het startdocument of maak een vergelijkbare pagina.
  2. Volg eerst onderstaande instructievideos om het resultaat te krijgen zoals in de video hiernaast.
  3. Voeg daarna een eigen component van Bootstrap toe!
  4. Ga vervolgens Bootstrap aanpassen aan het onderwerp Lord of the Rings.

Site met Bootstrap 1: Bootstrap koppelen aan het document

Instructievideo (00:09:31)

Uitgaande van een document op https://github.com/Theo-denBlanken/LOTR gaan we Bootstrap installeren. Als Node.js is geïnstalleerd kan dat via npm. (Anders zijn er nog verschillende andere manieren zoals rechtstreekse downloads en CDN.) Voor npm starten we de Terminal (windows: command prompt) en navigeren met cd naar de projectmap.
Met npm init initialiseren we node package manager. Daarvoor worden er een aantal vragen beantwoord. Als we ook een repository van ons project op GitHub willen, kunnen we de url daarvan ook opgeven. Mocht je hier een fout maken, dan kun je hem in de editor nog herstellen.
Hierna geven we met npm install bootstrap voor de Bootstrap installatie. Hierna blijkt een map node_modules te zijn aangemaakt alsook package-lock.json en is package.json te zijn aangevuld met de bootstrap dependency.

We kunnen bootstrap.css of een minified versie daarvan koppelen aan ons document een test van het document laat zien dat er een ander font is, en de knoppen en input hebben al een andere vorm.

Site met Bootstrap 2: responsive grid van Bootstrap

Instructievideo (00:10:11)

Alle lay-out met Bootstrap begint met de content in een element (vaak een div) te plaatsen. Bootstrap noemt dit de container-div en hij krijgt dan ook de class container of de class container-fluid mee. Het element krijgt daarmee wat padding.
Wil je kolommen naast elkaar zetten, dan omvat je ze eerst met een div met de class row.
Vervolgens geef je de elementen zelf de class col.
Bootstrap heeft een 12-koloms grid. Het is daarmee goed deelbaar door 2, 3 en 4. Je vertelt van elke kolom hoeveel delen van die 12 hij gaat omspannen. Dus als er 2 kolommen naast elkaar moeten, geef je ze allebei de class col-6.
In onze pagina willen we bij kleine viewports 2 kolommen en met grote viewports 4 kolommen.
We gaan de class van de kolommen dus extra informatie geven. Voor kleine viewports wordt col-6 uitgebreid naar col-sm-6. Daarmee geldt de dit dus voor kleine viewports.
Door de class uit te breiden naar col-sm-6 col-md-3 voeg je dus en breakpoint toe voor gemiddelde viewports waarbij er dan 4 kolommen naast elkaar kunnen.
Documentatie: https://getbootstrap.com/docs/4.3/layout/grid/#mix-and-match.

Site met Bootstrap 3: padding in Bootstrap

Instructievideo (00:02:41)

Om wat meer ruimte tussen de inhoud van de sections te maken geven we met de class p-4 extra padding aan die sections.
Om aan de randen ook diezelfde ruimte te hebben, geven we het row-element ook die padding.

Site met Bootstrap 4: Jumbotron

Instructievideo (00:02:29)

Om de header meer te benadrukken, geven hem de class jumbotron mee.
Documentatie: https://getbootstrap.com/docs/4.3/components/jumbotron/
Daarbinnen weer een container-fluid om gelijke afstand tot de rand te maken als de elementen daaronder.
Met de display-4 class kan een kop 1 nog groter en lichter worden (https://getbootstrap.com/docs/4.3/content/typography/).
De eerste paragraaf wordt iets groter met de class lead.

Site met Bootstrap 5: navigatiebalk

Instructievideo (00:11:54)

Een andere component van Bootstrap is de navbar: de navigatiebalk. Documentatie: https://getbootstrap.com/docs/4.3/components/navbar/

Deze bestaat uit een dusdanig aantal elementen met classes, dat het praktischer is deze in zijn geheel te kopiëren en de links daarin te vervangen door je eigen linkjes.
Een deel daarvan zijn interne links naar delen van de pagina.
Met enkele classes kan het ook een andere kleurschema krijgen: https://getbootstrap.com/docs/4.3/components/navbar/#color-schemes.
Voor de dropdown en de menu-toggle is JavaScript nodig. Deze wordt gekoppeld vanuit de node_modules-map.
Het script blijkt echter afhankelijk van jQuery. Via npm install jquery wordt deze gedownload, en moet het worden gekoppeld vóór het script van Bootstrap.

Site (met Bootstrap): Git met CLI

Instructievideo (00:10:15)

Nu we toch met de commandline werken, kunnen we met de instructies op GitHub ons werk in een repository plaatsen en updaten.

We kunnen lokaal ons README.md maken en ook een .gitignore-bestand.
Dit laatste bestand geeft de bestanden aan, die niet meegenomen moeten worden als we alles online plaatsen. Normaliter hoort daar de node_modules map bij, maar dan moeten de JavaScript bestanden ook naar 1 bestand gecompileerd worden en dat gebeurt in deze training nog niet. In onze .gitignore komt een verborgen bestand te staan die gemaakt en gebruikt wordt door de Finder van MacOS: .DS_Store

Windows- gebruikers zouden de eerste 5 regels kunnen nemen die staat op: https://github.com/github/gitignore/blob/master/Global/Windows.gitignore

Git zou op je systeem geïnstalleerd moeten staan, controleer met git --version of dit het geval is, anders naar https://git-scm.com/downloads Na deze voorbereidingen git initialiseren met git init. Dit staat ook op de instructie van jouw repo.
Er is een verborgen map .git gemaakt en deze zal niet meegenomen worden naar GitHub.
De README.md hoeft niet aangemaakt, met de editor kun je hem wellicht aanpassen.
Voor beginners is het niet handig dit met CLI te doen.
Vervolgens de mee te nemen bestanden voor de commit op de stage plaatsen.
Dit kan met git add -A. Alle bestanden die niet in de .gitignore en .git staan, worden toegevoegd.
Met git status, kun je nog zien welke dat zijn.
De commit is een punt die in het versiebeheersysteem van Git een punt markeert met de toestand van de bestanden. Je geeft er dus een opmerking bij:
git commit -m "de opmerking" Met git remote maak je Git duidelijk dat je jouw lokale repository verbind met die van bijvoorbeeld GitHub:
git remote add origin https://github.com/Theo-denBlanken/demoLOTR.git
Soms moet hier natuurlijk ook het wachtwoord worden toegevoegd.
Hierna kan de commit worden gepusht: git push -u origin master. Mijn systeem vraagt mijn beheerderswachtwoord van mijn Mac nog bij. Dit is voor de eerste keer een flinke klus geweest, maar de volgende wijzigingen gaan dan een stuk eenvoudiger.

In dit voorbeeld wijzigen we README.md en voegen .gitignore toe. (in deze video wordt deze pas na de eerste commit gemaakt.)
Nu is alleen git add -A nodig: deze zet alleen de gewijzigde bestanden op de stage.
Daarna git commit -m "vermeld wat gewijzigd is" en
git push -u origin master.
Met de pijltjes toets ‘naar boven’ zijn deze opdrachten dan vliegensvlug te geven.

Site met Bootstrap 6: een modaal in Bootstrap

Instructievideo (00:15:27)

Bootstrap heeft ook een modaalcomponent.
De instructie op
https://getbootstrap.com/docs/4.3/components/modal/#scrolling-long-content laat weer veel mark-up zien. Als je die kopieert en invoegt, kun je de inhoud in de div met de class modal-body plaatsen. De titel in het h5 element aanpassen evenals de inhoud van de knoppen.
Dat zou bij 1 modaal op de pagina volstaan, maar bij meerdere modalen ontstaan er zo ook meerdere id’s. Deze moet je dus toesnijden op de inhoud en de verwijzingen van de knop naar de inhoud moet ook worden aangepast.

Valideer je mark-up. Op deze manier is naar boven gekomen dat de titel van het modaal ook een id heeft, die per modaal ook echt uniek gemaakt dient te worden.


Site met Bootstrap 7: drie secties naast elkaar

Instructievideo (00:04:29)

Een herhaling van een eerdere handeling: er is een omvattend element met de class container-fluid nodig en daarin een div met de class row. De afbeeldingen moeten kleiner blijven dan de breedte van de kolommen en dat kan met de class img-fluid. De sections daarbinnen krijgen een class col-md-6 col-md-4 zodat ze bij kleine viewports met zijn tweeën naast elkaar staan en bij bredere viewports met zijn drieën.

Naar keuze kan de derde section een class col col-md-4, zodat hij bij de kleine viewport niet smal wordt en een lege ruimte naast zich laat, maar als enige de hele breedte neemt.

Instructievideo (00:06:05)

We geven de footer hier een achtergrondkleur en gaan de inhoud in lijn met de rest van de pagina brengen.
De we zorgen dat er weer 2 elementen zijn met de class container-fluid en row in elkaar zitten met elk een p-4 class.
De achtergrond kan met bg-primary. Dit geven we de nav-bar ook. Ook als zijn deze kleuren nog niet optimaal, verderop gaan we die kleur naar onze smaak omzetten.
De kleur van de tekst gaat met text-white, en voor linkjes moet je dat apart als class aan de link meegeven.
Rechts uitlijnen gaat met text-right.

Site met Bootstrap 9: knoppen op dezelfde hoogte

Instructievideo (00:09:47)

Als je de knoppen, die onderaan in de kolommen staan, op dezelfde hoogte willen hebben, merken we het gemis van CSS Grid of Flexbox.
Het wordt hier daarom met een JavaScript opgelost met matchHeight.js:
http://brm.io/jquery-match-height/ en
https://github.com/liabru/jquery-match-height
Met npm install jquery-match-height wordt de jQuery-plugin geïnstalleerd.
Koppel het script na de koppeling van jQuery.

Daarna kan een eigen scriptje de betrokken elementen selecteren en gelijk maken aan de langste uit de selectie: $('#inleiding p').matchHeight(); selecteert alle paragrafen in de div met de id inleiding en maakt ze even hoog.
Als er meerdere paragrafen in een kolom voorkomen, moeten ze in een gemeenschappelijke parent gestopt worden, die dan geselecteerd kan worden.
Voor de eenheid de overige knoppen allemaal ook de class btn btn-primary meegeven.

Site met Bootstrap 10: GitHub bijwerken

Instructievideo (00:02:28)

Het is weer een mooi moment om GitHub bij te werken.
Merk op dat we tot nu toe niet 1 regel CSS geschreven hebben!!
De volgende 3 opdrachten volstaan:

git add -A
git commit -m “gelijke hoogten gemaakt”
git push -u origin master

Met de pijltjes-omhoog toets zijn ze praktisch op te roepen.
In de video laat ik ook git status zien om te laten zien wat er gebeurd. Je hoeft de GitHub site niet eens te openen, we doen het hier ter demonstratie van het wonder.

Site met Bootstrap 11: Card component

Instructievideo (00:06:15)

Een van de kolommen kan een card-component worden.
Voor de semantiek wordt de huidige section een div en wordt de zichtbare inhoud (exclusief de modaal omdat dit makkelijker werken is) de section. Deze krijgt de class card mee.
Als de kop de class card-header krijgt, de afbeelding de class card-img-top, de inhoud de class card-body en de div om de button de class card-footer. Dan heb je een mooie card gerealiseerd. Geef de footer dan ook nog de class text-center om de knop gecentreerd te krijgen.

Site met Bootstrap 12: Eigen css genereren

Instructievideo (00:16:55)

Er wordt nu nog gebruik gemaakt van de css van bootstrap.css, die meer dan 10.000 regels telt.
We gaan onze eigen css genereren en maken daarvoor een eigen scss-bestand en een eigen css-bestand.
Het scss-bestand importeert de noodzakelijke scss-bestanden uit de node_modules.
Er wordt dus NIET in de node_modules-map gewerkt!
De documentatie van Bootstrap vertelt welke scss-bestanden vereist zijn, voordat je zelf de noodzakelijke eruit pikt:
https://getbootstrap.com/docs/4.3/getting-started/theming/ Vereist: functions, variables, mixins.
Je begint al resultaat te krijgen na reboot, type, images en grid.
Voor de hele LOTR hebben we nodig: dropdown, transitions, navbar, buttons, jumbotorn, class, modal en card en de volgende utilities: text, spacing, background en screenreaders.

Deze exercitie levert een eigen CSS-bestand op van een kleine 5,5-duizend regels. Bijna een halvering van bootstrap.css!!

Site met Bootstrap 13: Bootstrap aanpassen

Instructievideo (00:16:55)

Nu je je eigen Bootstrap hebt, kun je ook de variabelen aanpassen.
Bootstrap maakt gebruik van de !default eigenschap van Sass. Dit betekent dat als er nog geen waarde aan een eigenschap is toegekend, deze de default-waarde krijgt.
Voorbeeld: $primaire-kleur: #123456; !default
Wil je echter dat de primaire kleur rood is, dan wijzig je dus niet de bovenstaande regel. Immers: deze staat in de node_modules-map en daarin wijzig je niets.
Je zet hem in een eigen SCSS-bestand- of document, die gecompileerd wordt voordat de bestanden in de node_modules gecompileerd worden. Daarmee zorg je er dus voor dat de $primaire-kleur rood is gezet en Sass zal dan de default-instelling overslaan.

Daaronder kun je natuurlijk fonts importeren, achtergrondafbeeldingen instellen en zo meer. Je maakt zo je eigen Bootstrap-versie!
Moet er een tekstkleur worden aangepast, probeer dan dat eerst via classes in je markup te doen.

Bonusopdracht

Je kunt op 3 manieren de bonus bemachtigen:

  1. Maak de opdracht met een andere CSS library zoals Foundation;
  2. Programmeer je eigen JS scriptje, die de kolommen even hoog maakt.
  3. Voeg zelf een Bootstrap component op zinvolle wijze toe.
  • Valideer jouw pagina’s op Markup Validation Service van W3C.
  • De validatie icoontjes plaats je in de footer.
  • Maak in jouw GitHub-repo een README.md met daarin tenminste een link naar jouw online uitwerking.
  • Stuur de GitHub-link naar mij.

Met dank aan Theo!