# Terrariumprojekt Del 1: Introduktion till HTML

> Sketchnote av [Tomomi Imura](https://twitter.com/girlie_mac)
HTML, eller HyperText Markup Language, är grunden för varje webbplats du någonsin har besökt. Tänk på HTML som skelettet som ger struktur åt webbsidor – det definierar var innehållet ska placeras, hur det organiseras och vad varje del representerar. Medan CSS senare kommer att "klä upp" din HTML med färger och layout, och JavaScript kommer att ge den liv med interaktivitet, tillhandahåller HTML den grundläggande strukturen som gör allt annat möjligt.
I denna lektion kommer du att skapa HTML-strukturen för ett virtuellt terrariumgränssnitt. Detta praktiska projekt kommer att lära dig grundläggande HTML-koncept samtidigt som du bygger något visuellt engagerande. Du kommer att lära dig att organisera innehåll med semantiska element, arbeta med bilder och skapa grunden för en interaktiv webbapplikation.
I slutet av denna lektion kommer du att ha en fungerande HTML-sida som visar växtbilder i organiserade kolumner, redo att stylas i nästa lektion. Oroa dig inte om det ser enkelt ut till en början – det är precis vad HTML ska göra innan CSS lägger till den visuella finishen.
## Förkunskapsquiz
[Förkunskapsquiz](https://ff-quizzes.netlify.app/web/quiz/15)
> 📺 **Titta och lär**: Kolla in denna hjälpsamma videogenomgång
>
> [](https://www.youtube.com/watch?v=1TvxJKBzhyQ)
## Förbered ditt projekt
Innan vi dyker in i HTML-kod, låt oss skapa en ordentlig arbetsyta för ditt terrariumprojekt. Att skapa en organiserad filstruktur från början är en viktig vana som kommer att tjäna dig väl under hela din resa inom webbutveckling.
### Uppgift: Skapa din projektstruktur
Du kommer att skapa en dedikerad mapp för ditt terrariumprojekt och lägga till din första HTML-fil. Här är två tillvägagångssätt du kan använda:
**Alternativ 1: Använda Visual Studio Code**
1. Öppna Visual Studio Code
2. Klicka på "File" → "Open Folder" eller använd `Ctrl+K, Ctrl+O` (Windows/Linux) eller `Cmd+K, Cmd+O` (Mac)
3. Skapa en ny mapp som heter `terrarium` och välj den
4. I Explorer-panelen, klicka på ikonen "New File"
5. Namnge din fil `index.html`

**Alternativ 2: Använda terminalkommandon**
```bash
mkdir terrarium
cd terrarium
touch index.html
code index.html
```
**Det här gör kommandona:**
- **Skapar** en ny katalog som heter `terrarium` för ditt projekt
- **Navigerar** in i terrariumkatalogen
- **Skapar** en tom `index.html`-fil
- **Öppnar** filen i Visual Studio Code för redigering
> 💡 **Proffstips**: Filnamnet `index.html` är speciellt inom webbutveckling. När någon besöker en webbplats letar webbläsare automatiskt efter `index.html` som standardfil att visa. Detta innebär att en URL som `https://mysite.com/projects/` automatiskt kommer att visa `index.html`-filen från mappen `projects` utan att behöva ange filnamnet i URL:en.
## Förstå HTML-dokumentstruktur
Varje HTML-dokument följer en specifik struktur som webbläsare behöver för att förstå och visa korrekt. Tänk på denna struktur som ett formellt brev – det har nödvändiga element i en viss ordning som hjälper mottagaren (i detta fall webbläsaren) att bearbeta innehållet korrekt.
Låt oss börja med att lägga till den grundläggande grunden som varje HTML-dokument behöver.
### DOCTYPE-deklarationen och rootelementet
De två första raderna i en HTML-fil fungerar som dokumentets "introduktion" till webbläsaren:
```html
```
**Förstå vad denna kod gör:**
- **Deklarerar** dokumenttypen som HTML5 med ``
- **Skapar** rootelementet `` som kommer att innehålla allt sidinnehåll
- **Fastställer** moderna webbstandarder för korrekt rendering i webbläsaren
- **Säkerställer** konsekvent visning över olika webbläsare och enheter
> 💡 **VS Code-tips**: Håll muspekaren över en HTML-tagg i VS Code för att se användbar information från MDN Web Docs, inklusive användningsexempel och webbläsarkompatibilitet.
> 📚 **Läs mer**: DOCTYPE-deklarationen förhindrar att webbläsare går in i "quirks mode", som användes för att stödja mycket gamla webbplatser. Modern webbutveckling använder den enkla deklarationen `` för att säkerställa [standardkompatibel rendering](https://developer.mozilla.org/docs/Web/HTML/Quirks_Mode_and_Standards_Mode).
## Lägga till viktig dokumentmetadata
Sektionen `
` i ett HTML-dokument innehåller viktig information som webbläsare och sökmotorer behöver, men som besökare inte ser direkt på sidan. Tänk på det som "bakom kulisserna"-information som hjälper din webbsida att fungera korrekt och visas korrekt på olika enheter och plattformar.
Denna metadata berättar för webbläsare hur de ska visa din sida, vilken teckenkodning som ska användas och hur man hanterar olika skärmstorlekar – allt som är viktigt för att skapa professionella, tillgängliga webbsidor.
### Uppgift: Lägg till dokumenthuvudet
Infoga denna ``-sektion mellan dina öppnande och avslutande ``-taggar:
```html
Welcome to my Virtual Terrarium
```
**Bryta ner vad varje element gör:**
- **Ställer in** sidtiteln som visas i webbläsarflikar och sökresultat
- **Anger** UTF-8-teckenkodning för korrekt textvisning världen över
- **Säkerställer** kompatibilitet med moderna versioner av Internet Explorer
- **Konfigurerar** responsiv design genom att ställa in viewporten för att matcha enhetens bredd
- **Kontrollerar** initial zoomnivå för att visa innehåll i naturlig storlek
> 🤔 **Fundera på detta**: Vad skulle hända om du ställde in en viewport-meta-tagg som denna: ``? Detta skulle tvinga sidan att alltid vara 600 pixlar bred, vilket bryter mot responsiv design! Läs mer om [korrekt viewport-konfiguration](https://developer.mozilla.org/docs/Web/HTML/Viewport_meta_tag).
## Bygga dokumentets kropp
Elementet `` innehåller allt synligt innehåll på din webbsida – allt som användare kommer att se och interagera med. Medan sektionen `` gav instruktioner till webbläsaren, innehåller sektionen `` det faktiska innehållet: text, bilder, knappar och andra element som skapar ditt användargränssnitt.
Låt oss lägga till kroppens struktur och förstå hur HTML-taggar fungerar tillsammans för att skapa meningsfullt innehåll.
### Förstå HTML-taggstruktur
HTML använder parade taggar för att definiera element. De flesta taggar har en öppningstagg som `
` och en avslutningstagg som `
`, med innehåll däremellan: `
Hello, world!
`. Detta skapar ett paragrafelement som innehåller texten "Hello, world!".
### Uppgift: Lägg till kroppselementet
Uppdatera din HTML-fil för att inkludera elementet ``:
```html
Welcome to my Virtual Terrarium
```
**Det här ger den kompletta strukturen:**
- **Fastställer** den grundläggande HTML5-dokumentramen
- **Inkluderar** viktig metadata för korrekt rendering i webbläsaren
- **Skapar** en tom kropp redo för ditt synliga innehåll
- **Följer** moderna webbutvecklingsbästa praxis
Nu är du redo att lägga till de synliga elementen i ditt terrarium. Vi kommer att använda `
`-element som behållare för att organisera olika sektioner av innehåll och ``-element för att visa växtbilder.
### Arbeta med bilder och layoutbehållare
Bilder är speciella i HTML eftersom de använder "självstängande" taggar. Till skillnad från element som `` som omsluter innehåll, innehåller ``-taggen all information den behöver inom själva taggen med attribut som `src` för bildfilens sökväg och `alt` för tillgänglighet.
Innan du lägger till bilder i din HTML måste du organisera dina projektfiler korrekt genom att skapa en bildmapp och lägga till växtgrafiken.
**Först, ställ in dina bilder:**
1. Skapa en mapp som heter `images` inuti din terrariumprojektmapp
2. Ladda ner växtbilderna från [lösningsmappen](../../../../3-terrarium/solution/images) (14 växtbilder totalt)
3. Kopiera alla växtbilder till din nya `images`-mapp
### Uppgift: Skapa layouten för växtvisningen
Lägg nu till växtbilderna organiserade i två kolumner mellan dina ``-taggar:
```html
```
**Steg för steg, här är vad som händer i denna kod:**
- **Skapar** en huvudbehållare för sidan med `id="page"` för att hålla allt innehåll
- **Fastställer** två kolumnbehållare: `left-container` och `right-container`
- **Organiserar** 7 växter i vänstra kolumnen och 7 växter i högra kolumnen
- **Omsluter** varje växtbild i en `plant-holder` div för individuell positionering
- **Använder** konsekventa klassnamn för CSS-styling i nästa lektion
- **Tilldelar** unika ID:n till varje växtbild för JavaScript-interaktion senare
- **Inkluderar** korrekta filvägar som pekar på bildmappen
> 🤔 **Fundera på detta**: Lägg märke till att alla bilder för närvarande har samma alt-text "plant". Detta är inte idealiskt för tillgänglighet. Användare av skärmläsare skulle höra "plant" upprepas 14 gånger utan att veta vilken specifik växt varje bild visar. Kan du tänka dig bättre, mer beskrivande alt-text för varje bild?
> 📝 **HTML-elementtyper**: `
`-element är "blocknivå" och tar upp hela bredden, medan ``-element är "inline" och tar bara upp nödvändig bredd. Vad tror du skulle hända om du ändrade alla dessa `
`-taggar till ``-taggar?
Med denna markup tillagd kommer växterna att visas på skärmen, även om de inte ser polerade ut än – det är vad CSS är till för i nästa lektion! För tillfället har du en solid HTML-grund som organiserar ditt innehåll korrekt och följer bästa praxis för tillgänglighet.
## Använda semantisk HTML för tillgänglighet
Semantisk HTML innebär att välja HTML-element baserat på deras betydelse och syfte, inte bara deras utseende. När du använder semantisk markup kommunicerar du strukturen och betydelsen av ditt innehåll till webbläsare, sökmotorer och hjälpmedelstekniker som skärmläsare.
Denna metod gör dina webbplatser mer tillgängliga för användare med funktionsnedsättningar och hjälper sökmotorer att bättre förstå ditt innehåll. Det är en grundläggande princip inom modern webbutveckling som skapar bättre upplevelser för alla.
### Lägga till en semantisk sidtitel
Låt oss lägga till en korrekt rubrik till din terrariumsida. Infoga denna rad direkt efter din öppnande ``-tag:
```html
My Terrarium
```
**Varför semantisk markup är viktig:**
- **Hjälper** skärmläsare att navigera och förstå sidstrukturen
- **Förbättrar** sökmotoroptimering (SEO) genom att klargöra innehållshierarkin
- **Ökar** tillgängligheten för användare med synnedsättningar eller kognitiva skillnader
- **Skapar** bättre användarupplevelser över alla enheter och plattformar
- **Följer** webbstandarder och bästa praxis för professionell utveckling
**Exempel på semantiska vs. icke-semantiska val:**
| Syfte | ✅ Semantiskt val | ❌ Icke-semantiskt val |
|-------|------------------|-----------------------|
| Huvudrubrik | `
` |
> 🎥 **Se det i praktiken**: Titta på [hur skärmläsare interagerar med webbsidor](https://www.youtube.com/watch?v=OUDV1gqs9GA) för att förstå varför semantisk markup är avgörande för tillgänglighet. Lägg märke till hur korrekt HTML-struktur hjälper användare att navigera effektivt.
## Skapa terrariumbehållaren
Nu ska vi lägga till HTML-strukturen för själva terrariet – glasbehållaren där växterna så småningom kommer att placeras. Denna sektion demonstrerar ett viktigt koncept: HTML tillhandahåller struktur, men utan CSS-styling kommer dessa element ännu inte att vara synliga.
Terrariummarkupen använder beskrivande klassnamn som kommer att göra CSS-styling intuitiv och lätt att underhålla i nästa lektion.
### Uppgift: Lägg till terrariumstrukturen
Infoga denna markup ovanför den sista `
`-taggen (före den avslutande taggen för sidbehållaren):
```html
```
**Förstå denna terrariumstruktur:**
- **Skapar** en huvudbehållare för terrariet med ett unikt ID för styling
- **Definierar** separata element för varje visuell komponent (topp, väggar, jord, botten)
- **Inkluderar** nästlade element för glaseffekter (glansiga element)
- **Använder** beskrivande klassnamn som tydligt indikerar varje elements syfte
- **Förbereder** strukturen för CSS-styling som kommer att skapa glasterrariumutseendet
> 🤔 **Lägg märke till något?**: Även om du har lagt till denna markup, ser du inget nytt på sidan! Detta illustrerar perfekt hur HTML tillhandahåller struktur medan CSS tillhandahåller utseende. Dessa `
`-element existerar men har ännu ingen visuell styling – det kommer i nästa lektion!
---
## GitHub Copilot Agent-utmaning
Använd Agent-läget för att slutföra följande utmaning:
**Beskrivning:** Skapa en semantisk HTML-struktur för en sektion om växtvård som kan läggas till i terrariumprojektet.
**Uppgift:** Skapa en semantisk HTML-sektion som innehåller en huvudrubrik "Växtvårdsguide", tre undersektioner med rubrikerna "Vattning", "Ljusbehov" och "Jordvård", där varje sektion innehåller ett stycke med information om växtvård. Använd korrekta semantiska HTML-taggar som ``, `
`, `
` och `
` för att strukturera innehållet på rätt sätt.
Läs mer om [agentläge](https://code.visualstudio.com/blogs/2025/02/24/introducing-copilot-agent-mode) här.
## Utforska HTML:s historia-utmaning
**Lär dig om webbens utveckling**
HTML har utvecklats avsevärt sedan Tim Berners-Lee skapade den första webbläsaren på CERN 1990. Vissa äldre taggar som `