# 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 ``` ![Johdatus HTML:ään](../../../../translated_images/webdev101-html.4389c2067af68e98280c1bde52b6c6269f399eaae3659b7c846018d8a7b0bbd9.fi.png) > 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 > > [![HTML:n perusteet -video](https://img.youtube.com/vi/1TvxJKBzhyQ/0.jpg)](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` ![VS Code Explorer näyttää uuden tiedoston luomisen](../../../../translated_images/vs-code-index.e2986cf919471eb984a0afef231380c8b132b000635105f2397bd2754d1b689c.fi.png) **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["<meta charset>"] C --> F["<meta viewport>"] B --> G["<body>"] G --> H["<h1> Heading"] G --> I["<div> Containers"] G --> J["<img> 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 <!DOCTYPE html> <html></html> ``` **Mitä tämä koodi tekee:** - **Määrittää** dokumenttityypin HTML5:ksi käyttämällä `<!DOCTYPE html>` - **Luo** juurielementin `<html>`, 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 `<!DOCTYPE html>`-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ä `<html>`-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 `<head>`-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ä `<head>`-osio avaus- ja sulkevien `<html>`-tagien väliin: ```html <head> <title>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
plant
plant
plant
plant
plant
plant
plant
plant
plant
plant
plant
plant
plant
plant
``` **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["

"] B -->|Subheading| D["

,

, etc."] B -->|Paragraph| E["

"] B -->|List| F["

    ,
      "] B -->|Navigation| G["