# Terrarium-projekti Osa 1: Johdatus HTML:ään
```mermaid
journey
title Your HTML Learning Journey
section Foundation
Create HTML file: 3: Student
Add DOCTYPE: 4: Student
Structure document: 5: Student
section Content
Add metadata: 4: Student
Include images: 5: Student
Organize layout: 5: Student
section Semantics
Use proper tags: 4: Student
Enhance accessibility: 5: Student
Build terrarium: 5: Student
```

> Sketchnote: [Tomomi Imura](https://twitter.com/girlie_mac)
HTML eli HyperText Markup Language on jokaisen verkkosivun perusta, jonka olet koskaan vieraillut. Ajattele HTML:ää verkkosivujen "luurankona" – se määrittää, mihin sisältö sijoitetaan, miten se järjestetään ja mitä kukin osa edustaa. Vaikka CSS myöhemmin "pukee" HTML:n väreillä ja asetteluilla ja JavaScript tuo siihen interaktiivisuutta, HTML tarjoaa olennaisen rakenteen, joka tekee kaiken muun mahdolliseksi.
Tässä oppitunnissa luot HTML-rakenteen virtuaaliselle terraario-käyttöliittymälle. Tämä käytännön projekti opettaa sinulle HTML:n peruskäsitteitä samalla, kun rakennat visuaalisesti houkuttelevaa sisältöä. Opit järjestämään sisältöä semanttisten elementtien avulla, työskentelemään kuvien kanssa ja luomaan perustan interaktiiviselle verkkosovellukselle.
Oppitunnin lopussa sinulla on toimiva HTML-sivu, joka näyttää kasvikuvia järjestetyissä sarakkeissa ja on valmis tyyliteltäväksi seuraavassa oppitunnissa. Älä huoli, jos se näyttää aluksi yksinkertaiselta – juuri siltä HTML:n kuuluukin näyttää ennen kuin CSS lisää visuaalista viimeistelyä.
```mermaid
mindmap
root((HTML Fundamentals))
Structure
DOCTYPE Declaration
HTML Element
Head Section
Body Content
Elements
Tags & Attributes
Self-closing Tags
Nested Elements
Block vs Inline
Content
Text Elements
Images
Containers (div)
Lists
Semantics
Meaningful Tags
Accessibility
Screen Readers
SEO Benefits
Best Practices
Proper Nesting
Valid Markup
Descriptive Alt Text
Organized Structure
```
## Ennakkokysely
[Ennakkokysely](https://ff-quizzes.netlify.app/web/quiz/15)
> 📺 **Katso ja opi**: Tutustu tähän hyödylliseen videoesittelyyn
>
> [](https://www.youtube.com/watch?v=1TvxJKBzhyQ)
## Projektin valmistelu
Ennen kuin sukellamme HTML-koodiin, luodaan kunnollinen työtila terraario-projektillesi. Järjestelmällisen tiedostorakenteen luominen alusta alkaen on tärkeä tapa, joka hyödyttää sinua koko verkkokehitysmatkasi ajan.
### Tehtävä: Luo projektirakenne
Luo oma kansio terraario-projektillesi ja lisää ensimmäinen HTML-tiedostosi. Tässä on kaksi lähestymistapaa, joita voit käyttää:
**Vaihtoehto 1: Visual Studio Code -editorin käyttö**
1. Avaa Visual Studio Code
2. Klikkaa "File" → "Open Folder" tai käytä `Ctrl+K, Ctrl+O` (Windows/Linux) tai `Cmd+K, Cmd+O` (Mac)
3. Luo uusi kansio nimeltä `terrarium` ja valitse se
4. Explorer-paneelissa klikkaa "New File" -ikonia
5. Nimeä tiedostosi `index.html`

**Vaihtoehto 2: Käytä terminaalikomentoja**
```bash
mkdir terrarium
cd terrarium
touch index.html
code index.html
```
**Mitä nämä komennot tekevät:**
- **Luo** uuden hakemiston nimeltä `terrarium` projektillesi
- **Siirtyy** terraariohakemistoon
- **Luo** tyhjän `index.html`-tiedoston
- **Avaa** tiedoston Visual Studio Codessa muokattavaksi
> 💡 **Vinkki**: Tiedostonimi `index.html` on erityinen verkkokehityksessä. Kun joku vierailee verkkosivustolla, selaimet etsivät automaattisesti `index.html`-tiedostoa oletussivuksi. Tämä tarkoittaa, että URL-osoite kuten `https://mysite.com/projects/` näyttää automaattisesti `projects`-kansion `index.html`-tiedoston ilman, että tiedostonimeä tarvitsee erikseen määrittää URL-osoitteessa.
## HTML-dokumentin rakenteen ymmärtäminen
Jokainen HTML-dokumentti noudattaa tiettyä rakennetta, jonka selaimet tarvitsevat ymmärtääkseen ja näyttääkseen sisällön oikein. Ajattele tätä rakennetta kuin virallista kirjettä – siinä on vaadittuja elementtejä tietyssä järjestyksessä, jotka auttavat vastaanottajaa (tässä tapauksessa selainta) käsittelemään sisältöä oikein.
```mermaid
flowchart TD
A[""] --> B[""]
B --> C["
"]
C --> D[""]
C --> E[""]
C --> F[""]
B --> G[""]
G --> H["
Heading"]
G --> I["
Containers"]
G --> J[" Images"]
style A fill:#e1f5fe
style B fill:#f3e5f5
style C fill:#fff3e0
style G fill:#e8f5e8
```
Aloitetaan lisäämällä jokaisen HTML-dokumentin tarvitsema perusta.
### DOCTYPE-määrittely ja juurielementti
HTML-tiedoston kaksi ensimmäistä riviä toimivat dokumentin "esittelynä" selaimelle:
```html
```
**Mitä tämä koodi tekee:**
- **Määrittää** dokumenttityypin HTML5:ksi käyttämällä ``
- **Luo** juurielementin ``, joka sisältää kaiken sivun sisällön
- **Vakiinnuttaa** modernit verkkostandardit oikeaa selaimen renderöintiä varten
- **Varmistaa** yhtenäisen ulkoasun eri selaimissa ja laitteissa
> 💡 **VS Code -vinkki**: Vie hiiri minkä tahansa HTML-tagin päälle Visual Studio Codessa nähdäksesi hyödyllistä tietoa MDN Web Docsista, mukaan lukien käyttöesimerkit ja selainten yhteensopivuustiedot.
> 📚 **Lisätietoa**: DOCTYPE-määrittely estää selaimia siirtymästä "quirks mode" -tilaan, jota käytettiin tukemaan hyvin vanhoja verkkosivustoja. Moderni verkkokehitys käyttää yksinkertaista ``-määrittelyä varmistaakseen [standardien mukaisen renderöinnin](https://developer.mozilla.org/docs/Web/HTML/Quirks_Mode_and_Standards_Mode).
### 🔄 **Pedagoginen tarkistus**
**Pysähdy ja pohdi**: Ennen kuin jatkat, varmista että ymmärrät:
- ✅ Miksi jokainen HTML-dokumentti tarvitsee DOCTYPE-määrittelyn
- ✅ Mitä ``-juurielementti sisältää
- ✅ Kuinka tämä rakenne auttaa selaimia renderöimään sivuja oikein
**Nopea itsearviointi**: Voitko selittää omin sanoin, mitä "standardien mukainen renderöinti" tarkoittaa?
## Välttämättömän dokumenttimetadata lisääminen
HTML-dokumentin ``-osio sisältää tärkeää tietoa, jota selaimet ja hakukoneet tarvitsevat, mutta jota vierailijat eivät näe suoraan sivulla. Ajattele sitä "kulissien takana" olevana tietona, joka auttaa verkkosivua toimimaan oikein ja näyttämään oikein eri laitteilla ja alustoilla.
Tämä metadata kertoo selaimille, miten sivu näytetään, mitä merkistöä käytetään ja miten eri näyttökokoja käsitellään – kaikki olennaisia asioita ammattimaisen ja saavutettavan verkkosivun luomisessa.
### Tehtävä: Lisää dokumentin pääosa
Lisää tämä ``-osio avaus- ja sulkevien ``-tagien väliin:
```html
Welcome to my Virtual Terrarium
```
**Mitä kukin elementti tekee:**
- **Asettaa** sivun otsikon, joka näkyy selaimen välilehdissä ja hakutuloksissa
- **Määrittää** UTF-8-merkistökoodauksen tekstin oikeaa näyttämistä varten maailmanlaajuisesti
- **Varmistaa** yhteensopivuuden Internet Explorerin modernien versioiden kanssa
- **Konfiguroi** responsiivisen suunnittelun asettamalla näkymän laitteen leveyden mukaiseksi
- **Säätää** alkuperäisen zoomaustason sisällön luonnollisen koon näyttämiseksi
> 🤔 **Pohdittavaa**: Mitä tapahtuisi, jos asettaisit näkymän meta-tagin näin: ``? Tämä pakottaisi sivun aina 600 pikselin levyiseksi, mikä rikkoisi responsiivisen suunnittelun! Lue lisää [näkymän oikeasta konfiguroinnista](https://developer.mozilla.org/docs/Web/HTML/Viewport_meta_tag).
## Dokumentin rungon rakentaminen
``-elementti sisältää kaiken verkkosivusi näkyvän sisällön – kaiken, mitä käyttäjät näkevät ja minkä kanssa he ovat vuorovaikutuksessa. Vaikka ``-osio antoi ohjeita selaimelle, ``-osio sisältää varsinaisen sisällön: tekstiä, kuvia, painikkeita ja muita elementtejä, jotka luovat käyttöliittymän.
Lisätään rungon rakenne ja ymmärretään, miten HTML-tagit toimivat yhdessä merkityksellisen sisällön luomiseksi.
### HTML-tagin rakenteen ymmärtäminen
HTML käyttää parillisia tageja elementtien määrittämiseen. Useimmilla tageilla on avaus-tagi, kuten `
`, ja sulkeva tagi, kuten `
`, joiden välissä on sisältö: `
Hello, world!
`. Tämä luo kappale-elementin, joka sisältää tekstin "Hello, world!".
### Tehtävä: Lisää rungon elementti
Päivitä HTML-tiedostosi sisältämään ``-elementti:
```html
Welcome to my Virtual Terrarium
```
**Mitä tämä kokonaisrakenne tarjoaa:**
- **Luo** HTML5-dokumentin peruskehikon
- **Sisältää** olennaisen metadatan oikeaa selaimen renderöintiä varten
- **Luo** tyhjän rungon näkyvälle sisällöllesi
- **Noudattaa** modernin verkkokehityksen parhaita käytäntöjä
Nyt olet valmis lisäämään terraarion näkyvät elementit. Käytämme `
`-elementtejä säiliöinä eri sisältöosioiden järjestämiseen ja ``-elementtejä kasvikuvien näyttämiseen.
### Kuvien ja asettelusäiliöiden käyttö
Kuvat ovat erityisiä HTML:ssä, koska ne käyttävät "itse sulkeutuvia" tageja. Toisin kuin elementit, kuten ``, jotka ympäröivät sisältöä, ``-tagi sisältää kaiken tarvittavan tiedon itsessään käyttämällä attribuutteja, kuten `src` kuvatiedoston polulle ja `alt` saavutettavuuden parantamiseksi.
Ennen kuin lisäät kuvia HTML:ään, sinun on järjestettävä projektitiedostosi oikein luomalla kuvat-kansio ja lisäämällä kasvigrafiikat.
**Ensin, valmistele kuvasi:**
1. Luo kansio nimeltä `images` terraario-projektikansiosi sisälle
2. Lataa kasvikuvat [ratkaisukansiosta](../../../../3-terrarium/solution/images) (yhteensä 14 kasvikuvan tiedostoa)
3. Kopioi kaikki kasvikuvat uuteen `images`-kansioosi
### Tehtävä: Luo kasvien näyttöasettelu
Lisää kasvikuvat järjestettyinä kahteen sarakkeeseen ``-tagien väliin:
```html
```
**Vaihe vaiheelta, mitä tässä koodissa tapahtuu:**
- **Luo** pääsivun säiliön `id="page"`, joka sisältää kaiken sisällön
- **Määrittää** kaksi sarakesäiliötä: `left-container` ja `right-container`
- **Järjestää** 7 kasvia vasempaan sarakkeeseen ja 7 kasvia oikeaan sarakkeeseen
- **Käärii** jokaisen kasvikuvan `plant-holder`-diviin yksittäistä sijoittelua varten
- **Käyttää** yhtenäisiä luokkanimiä CSS-tyylittelyä varten seuraavassa oppitunnissa
- **Määrittää** jokaiselle kasvikuville yksilölliset ID:t JavaScript-vuorovaikutusta varten myöhemmin
- **Sisältää** oikeat tiedostopolut, jotka osoittavat kuvat-kansioon
> 🤔 **Pohdittavaa**: Huomaa, että kaikilla kuvilla on tällä hetkellä sama alt-teksti "plant". Tämä ei ole ihanteellista saavutettavuuden kannalta. Näytönlukijan käyttäjät kuulisivat "plant" 14 kertaa peräkkäin tietämättä, mitä kukin kuva esittää. Voisitko keksiä parempia, kuvaavampia alt-tekstejä jokaiselle kuvalle?
> 📝 **HTML-elementtityypit**: `
`-elementit ovat "block-level" ja vievät koko leveyden, kun taas ``-elementit ovat "inline" ja vievät vain tarvittavan leveyden. Mitä luulet tapahtuvan, jos vaihtaisit kaikki nämä `
`-tagit ``-tageiksi?
### 🔄 **Pedagoginen tarkistus**
**Rakenteen ymmärtäminen**: Käy läpi HTML-rakenteesi:
- ✅ Voitko tunnistaa pääsäiliöt asettelussasi?
- ✅ Ymmärrätkö, miksi jokaisella kuvalla on yksilöllinen ID?
- ✅ Kuinka kuvailisit `plant-holder`-divien tarkoitusta?
**Visuaalinen tarkistus**: Avaa HTML-tiedostosi selaimessa. Sinun pitäisi nähdä:
- Yksinkertainen lista kasvikuvista
- Kuvat järjestettyinä kahteen sarakkeeseen
- Yksinkertainen, tyylittelemätön asettelu
**Muista**: Tämä yksinkertainen ulkoasu on juuri sitä, miltä HTML:n kuuluukin näyttää ennen CSS-tyylittelyä!
Kun tämä merkintä on lisätty, kasvit näkyvät näytöllä, vaikka ne eivät vielä näytä viimeistellyiltä – siihen tarvitaan CSS seuraavassa oppitunnissa! Tällä hetkellä sinulla on vankka HTML-perusta, joka järjestää sisältösi oikein ja noudattaa saavutettavuuden parhaita käytäntöjä.
## Semanttisen HTML:n käyttö saavutettavuuden parantamiseksi
Semanttinen HTML tarkoittaa HTML-elementtien valitsemista niiden merkityksen ja tarkoituksen, ei vain ulkonäön perusteella. Kun käytät semanttista merkintää, kommunikoit sisältösi rakenteen ja merkityksen selaimille, hakukoneille ja apuvälineille, kuten näytönlukijoille.
```mermaid
flowchart TD
A[Need to add content?] --> B{What type?}
B -->|Main heading| C["