# Terrarium-projekti Osa 1: Johdatus HTML:ään

> 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:si 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 terrarium-käyttöliittymälle. Tämä käytännön projekti opettaa sinulle HTML:n peruskäsitteitä samalla kun rakennat visuaalisesti kiinnostavaa 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ää kasvikuvat järjestetyissä sarakkeissa, valmiina tyyliteltäväksi seuraavassa oppitunnissa. Älä huoli, jos se näyttää aluksi yksinkertaiselta – juuri näin HTML:n kuuluukin toimia ennen kuin CSS lisää visuaalisen viimeistelyn.
## 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 terrarium-projektille. Jäsennellyn tiedostorakenteen luominen alusta alkaen on tärkeä tapa, joka hyödyttää sinua koko verkkokehitysmatkasi ajan.
### Tehtävä: Luo projektirakenne
Luo terrarium-projektille oma kansio ja lisää ensimmäinen HTML-tiedostosi. Tässä on kaksi lähestymistapaa:
**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ä tiedosto `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** terrarium-hakemistoon
- **Luo** tyhjän `index.html`-tiedoston
- **Avaa** tiedoston muokattavaksi Visual Studio Codessa
> 💡 **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 `index.html`-tiedoston `projects`-kansiosta ilman, että tiedostonimeä tarvitsee erikseen määrittää.
## 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 vaadittavat elementit tietyssä järjestyksessä, jotka auttavat vastaanottajaa (tässä tapauksessa selainta) käsittelemään sisältöä oikein.
Aloitetaan lisäämällä jokaisen HTML-dokumentin tarvitsema perusrakenne.
### DOCTYPE-määrittely ja juurielementti
Jokaisen 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 näytön 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 hyvin vanhojen verkkosivustojen tukemiseen. Moderni verkkokehitys käyttää yksinkertaista ``-määrittelyä varmistaakseen [standardien mukaisen renderöinnin](https://developer.mozilla.org/docs/Web/HTML/Quirks_Mode_and_Standards_Mode).
## 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äkymää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
- **Määrittää** responsiivisen suunnittelun asettamalla näkymän leveyden laitteen leveyden mukaan
- **Säätää** alkuperäisen zoomaustason sisällön luonnollisen koon näyttämiseksi
> 🤔 **Pohdittavaa**: Mitä tapahtuisi, jos asettaisit näkymän metatagin näin: ``? Tämä pakottaisi sivun aina 600 pikselin levyiseksi, mikä rikkoisi responsiivisen suunnittelun! Lue lisää [näkymän metatagin oikeasta konfiguroinnista](https://developer.mozilla.org/docs/Web/HTML/Viewport_meta_tag).
## Dokumentin rungon rakentaminen
HTML:n ``-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 muodostavat käyttöliittymän.
Lisätään rungon rakenne ja ymmärretään, miten HTML-tagit toimivat yhdessä luodakseen merkityksellistä sisältöä.
### 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ää sisältöä varten
- **Noudattaa** modernin verkkokehityksen parhaita käytäntöjä
Nyt olet valmis lisäämään terrariumin näkyvät elementit. Käytämme `
`-elementtejä säiliöinä eri sisältöosioiden järjestämiseen ja ``-elementtejä kasvikuvien näyttämiseen.
### Työskentely kuvien ja asettelusäiliöiden kanssa
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.
**Ensiksi, valmistele kuvasi:**
1. Luo kansio nimeltä `images` terrarium-projektikansiosi sisälle
2. Lataa kasvikuvat [ratkaisukansiosta](../../../../3-terrarium/solution/images) (yhteensä 14 kasvikuvia)
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ääsivusä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
- **Antaa** yksilölliset ID:t jokaiselle kasvikuville JavaScript-interaktiota varten
- **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. Ruudunlukijan käyttäjät kuulisivat "plant" toistettuna 14 kertaa 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?
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! Toistaiseksi 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ätapaa, välität sisältösi rakenteen ja merkityksen selaimille, hakukoneille ja apuvälineille, kuten ruudunlukijoille.
Tämä lähestymistapa tekee verkkosivustoistasi saavutettavampia vammaisille käyttäjille ja auttaa hakukoneita ymmärtämään sisältöäsi paremmin. Se on modernin verkkokehityksen perusperiaate, joka luo parempia kokemuksia kaikille.
### Lisää semanttinen sivun otsikko
Lisätään asianmukainen otsikko terrarium-sivullesi. Lisää tämä rivi heti avaus-``-tagin jälkeen:
```html
My Terrarium
```
**Miksi semanttinen merkintätapa on tärkeää:**
- **Auttaa** ruudunlukijoita navigoimaan ja ymmärtämään sivun rakennetta
- **Parantaa** hakukoneoptimointia (SEO) selkeyttämällä sisällön hierarkiaa
- **Lisää** saavutettavuutta näkövammaisille tai kognitiivisista eroista kärsiville käyttäjille
- **Luo** parempia käyttäjäkokemuksia kaikilla laitteilla ja alustoilla
- **Noudattaa** verkkostandardeja ja ammatillisen kehityksen parhaita käytäntöjä
**Esimerkkejä semanttisista vs. ei-semattisista valinnoista:**
| Tarkoitus | ✅ Semanttinen valinta | ❌ Ei-semanttinen valinta |
|-----------|-----------------------|--------------------------|
| Pääotsikko | `
` |
> 🎥 **Katso käytännössä**: Katso [miten ruudunlukijat toimivat verkkosivujen kanssa](https://www.youtube.com/watch?v=OUDV1gqs9GA) ymmärtääksesi, miksi semanttinen merkintätapa on tärkeää saavutettavuuden kannalta. Huomaa, miten oikea HTML-rakenne auttaa käyttäjiä navigoimaan tehokkaasti.
## Terrarium-säiliön luominen
Lisätään nyt HTML-rakenne itse terrariumille – lasisäiliölle, johon kasvit lopulta sijoitetaan. Tämä osio havainnollistaa tärkeää käsitettä: HTML tarjoaa rakenteen, mutta ilman CSS-tyylittelyä nämä elementit eivät vielä näy.
Terrarium-merkintä käyttää kuvaavia luokkanimiä, jotka tekevät CSS-tyylittelystä intuitiivista ja helposti ylläpidettävää seuraavassa oppitunnissa.
### Tehtävä: Lisää terrarium-rakenne
Lisää tämä merkintä viimeisen `
```
**Mitä tämä terrarium-rakenne tekee:**
- **Luo** pääterrarium-säiliön, jolla on yksilöllinen ID tyylittelyä varten
- **Määrittää** erilliset elementit kullekin visuaaliselle komponentille (yläosa, seinät, multa, pohja)
- **Sisältää** sisäkkäisiä elementtejä lasin heijastusefektejä varten (kiiltävät elementit)
- **Käyttää** kuvaavia luokkanimiä, jotka selkeästi osoittavat kunkin elementin tarkoituksen
- **Valmistelee** rakenteen CSS-tyylittelyä varten, joka luo lasisen terrariumin ulkonäön
> 🤔 **Huomaa jotain?**: Vaikka lisäsit tämän merkinnän, et näe mitään uutta sivulla! Tämä havainnollistaa täydellisesti, miten HTML tarjoaa rakenteen, kun taas CSS vastaa ulkonäöstä. Nämä `
`-elementit ovat olemassa, mutta niillä ei ole vielä visuaalista tyylittelyä – se tulee seuraavassa oppitunnissa!
---
## GitHub Copilot Agent -haaste
Käytä Agent-tilaa suorittaaksesi seuraavan haasteen:
**Kuvaus:** Luo semanttinen HTML-rakenne kasvien hoito-ohjeiden osioon, joka voidaan lisätä terrarium-projektiin.
**Prompt:** Luo semanttinen HTML-osio, joka sisältää pääotsikon "Kasvien hoito-opas", kolme alaosiota otsikoilla "Kastelu", "Valon tarve" ja "Maan hoito", joista jokaisessa on kappale kasvien hoitoon liittyvää tietoa. Käytä asianmukaisia semanttisia HTML-tageja, kuten ``, `
`, `
` ja `
`, rakenteen luomiseen.
Lue lisää [agenttitilasta](https://code.visualstudio.com/blogs/2025/02/24/introducing-copilot-agent-mode) täältä.
## Tutustu HTML:n historiaan -haaste
**Tietoa verkkokehityksen evoluutiosta**
HTML on kehittynyt merkittävästi sen jälkeen, kun Tim Berners-Lee loi ensimmäisen verkkoselaimen CERNissä vuonna 1990. Jotkin vanhemmat tagit, kuten `