I denna laboration ska du i ett antal delar se på hur navigeringen kommer in i grid
och kan utformas med bl.a. flex
. Vi börjar med de grundläggande delarna i några övningar, där du först gör en grund för layout och navigering. Sedan gör du förändringar i ett par media queries. Därefter tas olika sätt att utforma navigeringen upp i ett antal exempel, som demonstreras i varsin film. Du bör också själv experimentera med dessa exempel.
24 min.
Förberedelser
- Öppna mappen L5d-0 (som finns i L5d) i Visual Studio Code (VSC).
- Öppna filerna index.html och style.css i VSC och öppna sidan i Live Server.
- Studera den kod som finns i HTML- och CSS-filerna, så att du blir insatt i den. Det finns också flera HTML-filer, men alla är strukturerade på samma sätt. Se speciellt att navigeringslänkarna ligger i en
ul
-lista inav
-elementet.
Layout och placering av navigeringen
- Lägg in följande kod i regeln för
body
.display: grid; grid-template-columns: auto 180px minmax(auto,820px) auto; grid-template-rows: min-content auto min-content; grid-template-areas: "header header header header" ". nav main ." "footer footer footer footer";
- De olika elementen som ingår i layouten är redan namngivna med
grid-area
i regler förheader
,main
,footer
ochnav
. - Med denna kod skapas en layout med navigeringen i en kolumn till vänster. Bredden för nav ska vara 180px, medan bredden för main är flexibel med en maximal bredd på 820px.
- De olika elementen som ingår i layouten är redan namngivna med
Innehållet i nav
- I början av
nav
-elementet finns ettlabel
- ochinput
-element. Dessa ska senare användas i en media query, men ska nu döljas. Lägg till en regel för#menuicon, #menucheckbox
meddisplay: none;
- Lägg till
display: flex;
i regeln förnav ul
- Lägg också in
flex-direction: column;
så att det blir en kolumn igen.- Det var ju redan en kolumn även utan
flex
, men vi kan nu lätt ändra till en rad, då vi senare i en media query förändrar layouten. Vi kan också använda andra "flex-egenskaper" för ytterligare utformning av navigeringen.
- Det var ju redan en kolumn även utan
- Lägg till
gap: 1em;
för att få lite avstånd mellan länkarna. - Eftersom
flex
ligger iul
-elementet, är detli
-elementen som är flexboxarna. Ta fram Inspektören i Firefox och peka påli
-elementen i koden. Observera att de är block-element, så de täcker hela bredden inomnav
.- Vi har inget behov av någon ytterligare stilsättning av
li
-elementen nu, utan ska istället gå vidare med länkarna som finns i dem.
- Vi har inget behov av någon ytterligare stilsättning av
Länkarna
- Lägg till en regel för
nav a:hover
medbackground-color: #20985a;
ochcolor: #e3eed7;
- Testa att föra muspekaren över länkarna på webbsidan, så att du ser att färgen ändras.
- Stäng först konsolen med Inspektören, ifall du fortfarande har den öppen.
- Testa att föra muspekaren över länkarna på webbsidan, så att du ser att färgen ändras.
- I HTML-filerna är länken för aktuell sida markerad med ett
class
-attribut med namnet "thisPage". Lägg in en regel i CSS-koden förnav a.thisPage
medbackground-color: #1e39d0;
ochcolor: #ffffff;
- Testa att klicka på länkarna i webbläsaren.
- Lägg till
display: block;
i regeln förnav a
och testa i webbläsaren.- Ett
a
-element är normalt ett inline-element, så det är inte bredare än dess textinnehåll. Genom att ändra till block-element fyller länkarna nu hela bredden och blir därmed lika breda.
- Ett
Media query för att flytta navigeringen
- Lägg in följande media query i slutet av CSS-filen:
@media screen and (max-width: 740px) { body { grid-template-columns: auto; grid-template-rows: min-content min-content auto min-content; grid-template-areas: "nav" "header" "main" "footer"; } nav ul { flex-direction: row; } }
- Ta fram Följsamt designläge och dra ner bredden till under 740px, för att se hur layouten förändras.
- Layouten är omgjord till en kolumn med navigeringen högst upp. Eftersom
flex
används behöver vi endast ändraflex-direction
, för att få det till en rad.
- Layouten är omgjord till en kolumn med navigeringen högst upp. Eftersom
- Lägg till
justify-content: flex-end;
i regeln förnav ul
, ifall du vill ha länkarna till höger.- Prova gärna med andra värden på
justify-content
.
- Prova gärna med andra värden på
Media query för att ändra navigeringen till en meny
- Du ska nu lägga in kod så att navigeringsmenyn kan visas eller döljas, genomklick på en s.k. "hamburgerikon". Lägg först in följande media query. Ta sedan fram Följsamt designläge, dra ner bredden på fönstret och testa menyn. Läs därefter beskrivningen under koden nedan.
- Lägg in följande:
@media screen and (max-width: 400px) { #menuicon { background-image: url(../img/menuicon.png); width: 24px; height: 24px; display: inline-block; cursor: pointer; } #menucheckbox ~ ul { display: none; } #menucheckbox:checked ~ ul { display: flex; } nav ul { flex-direction: column; gap: 0; } }
- Beskrivning av koden:
- HTML-koden
- En
input
-tagg som är en "kryssruta" (checkbox
) kan vara ibockad eller ej. Den kan alltså ha två lägen och det går i CSS införa regler för dessa. så att vi kan sätta olika stil. Det ska användas för att visa eller dölja menyn. - För att visa en bild istället för "kryssrutan" finns också ett
label
-element, som kopplas tillinput
-taggen viafor
- ochid
-attributen med samma namn (menucheckbox
). Bilden läggs in som en bakgrundsbild i CSS-koden, se nedan.
- En
- CSS-koden
- Visa ikonen
- Bilden läggs in som en bakgrundsbild. Storleken på elementet sätts också till samma storlek som bilden, så att bilden syns. Eftersom
label
-elementet inte har något innehåll i HTML-koden, skulle det annars inte ha någon storlek och därmed inte visas. - Tidigare doldes
label
- ochinput
-elementen meddisplay: none
. Nu visaslabel
-elementet meddisplay: inline-block;
så bilden visas. Kryssrutan ska inte visas, såinput
-elementet ska fortfarande vara dolt. - Muspekaren (
cursor
) ändras, då den förs in över bilden, så att användaren ser att man kan klicka.
- Bilden läggs in som en bakgrundsbild. Storleken på elementet sätts också till samma storlek som bilden, så att bilden syns. Eftersom
- Visa/dölj menyn
- Med regeln
#menucheckbox ~ ul
refererar man tillul
-element som ligger efter elementet medid="menucheckbox"
(dvsinput
-elementet). Denna regel gäller då kryssrutan inte är ibockad och då skaul
-listan med länkarna vara dold. - Regeln
#menucheckbox:checked ~ ul
gäller då kryssrutan är ibockad och då skaul
-listan visas.
- Med regeln
- Stil för menyn
- I regeln för
nav ul
ändrasul
-listan till en kolumn. - Avståndet mellan länkarna, som tidigare infördes, tas nu bort.
- I regeln för
- Visa ikonen
- HTML-koden
Fler exempel på utformning av navigeringen
I mappen L5d finns ytterligare ett antal mappar med exempel på hur navigeringen kan utformas. De demonstreras här i de följande filmerna. Öppna också mapparna själv och studera koden samt experimentera med den.
L5d-1: Koden för ovanstående övningar, med ett tillägg
6 min.
L5d-2: Expanderbar lista med global och lokal navigering
5 min.
L5d-3: Lokal navigering i en dropdown-meny
12 min.
L5d-4: Global/lokal navigering i separata ul-listor
4 min.
L5d-5: Global/lokal navigering i separata nav-element
7 min.
Klar
Detta var den sista delen av laboration L5. Titta nu på exemplet på sidan "Exempel" i navigeringen högst upp på sidan. Fortsätt sedan med uppgift U2.