CSS Grid: Holy Grail
Layout
![](ohjeimg/semantic_layout-01.jpg)
Screenshots
![layout_pc](ohjeimg/layout_pc.jpg)
![layout_tab](ohjeimg/layout_tab.jpg)
![layout_mob](ohjeimg/layout_mob.jpg)
![small_grid](ohjeimg/small_grid-01.jpg)
Tehtävä
HTML (2/2) Sisältö
header
- lisää headeriin figure-tagia
- lisää figuren sisälle a tagi href #aparts
- lisää a tagin sisälle kuva svg/house.svg
- ja kuvan alle figcaption ”Asunnot”
- Kopio tätä rakennetta 3 kpl:
- vaihda linkitykset (#garages, #forests)
- vaihda kuvakkeet (garage.svg, tree.svg)
- vaihda tekstit (Autotallit, Metsätilat)
article id="aparts"
- lisää h2 väliotsikko ”Asunnot
- lisää sen alle tyhjä div, jonka sisälle:
- figure, jonka sisällä on 2 kuvaa allekkain ja figcaption
- toinen kuva on asunnon valokuva ja toinen sen pohjapiirros
- figcaption tagin sisällä on allekkain 2 p tagia, joista ylemmässä asunnon hinta, neliömetrit ja huoneet
- kääri huoneet (oh + tk + jne) span tagiin
- alemmassa p tagissa lukee paikkakunta
- kopioi figure tagilla luotua rakennetta 4 kpl ja vaihda kuvat ja tesktit
![figure](ohjeimg/figure-fig_1.jpg)
article id="garages"
- lisää väliotsikko ”Autotallit”
- lisää sen alle tyhjä div, jonka sisälle kopioit Asunnot-kohdan figure-rakenteita
- Kuvia (img) tulee tosin vain yksi
![figure](ohjeimg/figure-fig_2.jpg)
article id="forests"
- Metsätilat on samanlainen kuin ylempi garages, mutta
- vaihda otsikko h2 ”Metsätilat”
- vaihda figure tagien siällä olevat kuvat ja tekstit
aside
1. diviin tulee:
- label for area, jossa lukee ”Paikkakunta”
- input (text) id area
- h4 hinta
- label for minprice jossa lukee ”min.”
- input (range) class slider, id minprice
- span id minprice_disply
- label for maxprice jossa lukee ”max.”
- input (range) class slider, id maxprice
- span id maxprice_disply
2. diviin tulee:
- h4 ”Asunnon tyyppi”
- checkbox id kerros
- label for kerros ”Kerrostalo”
- checkbox id pari
- label for pari ”Paritalo”
- checkbox id rivi
- label for rivi ”Rivitalo”
- checkbox id omakoti
- label for omakoti ”Omakotitalo”
3. diviin tulee:
- h4 "Asumismuoto"
- checkbox id vuokra
- label for vuokra ”vuokra”
- checkbox id omistus
- label for omistus ”omistus”
- checkbox id asumisoikeus
- label for asumisoikeus ”asumisoikeus”
- input (submit) jossa lukee "Hae"
CSS (2/2) style.css
- h1, h2, h3
- vaihda otsikoiden väri ja käytä muuttujaa
- nollaa ylämarginaalit
- .active a
- aseta alleviivaus aktiiviselle linkille
- header figure
- keskitä teksti
- header a, header:visited
- poista alleviivaus
- aseta tekstin väri valkoinen
- header a:hover
- aseta läpinäkyvyys 20%, eli näkyvyys 80%
- article
- aseta padding 1em
- article:nth-child(-n+2)
- laita artikkeleille alas reunaviiva
- article div, section div
- tee asuntokuvista flex elementtejä
- aseta elementtien väriin 1em tyhjää tilaa
- salli flexin uudelleenrivitys wrap
- article figure, section figure
- position: relative; jotta kuva voidaan asemoida suhteessa tähän elementtiin
- rajoita elementin maksimileveys esim 300px
- nollaa marginaalit
- article figure img, section figure img
- aseta maksimileveys 100%
- article figure img:nth-child(2)
- asuntokuvissa on 2 kuvaa (img) joten asetetaan jälkimmäinen ensimmäisen päälle
- position: absolute;
- left: 0; jotta kuvat ovat samassa kohdassa
- opacity: 0; jotta pohjapiirroskuva ei näy oletuksena
- figure img:nth-child(2):hover
- opacity: 1; jotta pohjapiirroskuva näkyy kun hiiri on asuntokuvan päällä
- tee kursorista sormi
- aseta 0,5 sekuntia pitkä siirtymä, kun kuva tulee näkyviin
- article figcaption p, section figcaption p
- nolla marginaaalit, jotta kohdetiedot mahtuvat pienempään tilaan
- article figcaption span
- float: right; jotta kohteen huoneet on listattu oikeaan laitaan
- summary
- säädä fontin kokoa isommaksi ja vaihda sen väri
- tee fontista lihavoitu
- aseta hiire sormeksi
- aseta minimileveys 220px
- form
- tee lomakkeesta flex elementti
- vaihda flexin suunta sarakkeeksi
- form input[type=submit]
- muotoile napin, tekstin ja reunaviivan väri
- aseta padding ylös ja alas 0.5em
- aseta padding oikealle ja vasemmalle 1em
- pyöristä napin kulmat
- aseta leveys 90%
- tee napille myös :hover, joka vaihtaa taustavärin ja tekstin värin
- tee kursorista sormi kun se on napin päällä
JavaScriptiä kokeiltavaksi
Sulkee hampurilaisvalikon, kun käyttäjä painaa jotain linkkiä
Asettaa ”active” CSS-luokan navigaatiolinkille, jota on klikattu
Poistaa ”active” CSS-luokan jos sivua vieritetään hiirellä tai scrollbarista tai puhelimella
Seuraa ”range” tyyppisen inputin muuttumista ja näyttää sen arvot asuntohaussa kohdassa max ja min hinnat
HTML (1/2) Holy Grail Layout
- Tutustu Holy Grail layoutin ja css gridin periaatteisiin
- Holy grail wikipedia
- css grid w3schools
Saat ladattua projektin kuvat helpoiten, kun kloonaat ensin malli-repon työpöydälle
ja sitten siirrät img ja svg kansiot omaan harjoituskansioosi
- Luo index.html ja style.css
- Alusta index.html
- Linkitä style.css headiin
- Vaihda dokumentin title esim. Kiinteistö LKV
- lisää favicon img/house_fav_icon.png
- Anna bodylle id top
- Lisää navigaatio:
- Käytetään samaa navigaatiota, kuin Kalatorissa Responsiivinen navigaatio
- Tee menu.css ja linkitä se headiin
- Kopioi Kalatorin navigaation css koodi menu.css tiedostoon
- Kopioi navigaation html-koodi bodyyn
- vaihda navigaation logo svg/house_logo.svg
- Lisää muut layoutissa käytetyt elementit bodyyn:
- header
- div class="advert_tab"
- div class="advert_mob"
- div id="container"
- class="advert_pc"
- main
- article id="aparts"
- article id="garages"
- article id="forests"
- aside
- class="advert_pc"
- div class="advert_tab"
- div class="advert_mob"
- footer
CSS (1/2) style.css
:root tee muuttujat:- navigaation korkeus 50px (--nav-height)
- headerin korkeus 150px (--header-height)
- footerin korkeus 50px (--footer-height)
- teemaväri esim. sininen (--sky_blue)
Eli siis: Määritettiin elementtien laskentatapa siten , että padding ja reunaviiva siältyvät ulkomittoihin Ankkurilinkit rullaavat sivun tiettyyn, kohtaan, mutta koska nav on position fixed se peittää osan sisällöstä alleen. Jotta otsikko jonka kohdalle scrollataan jää näkyviin, tarvitaan scroll-marginaali. Hyvällä tuurilla myös scroll-behavior: smooth toimii ja lisää scrollaukseen kiihtyvyyden, suoran hypähdyksen sijaan.
-
body
- nollaa marginaalit
- aseta taustaväri esim. valkoinen
- valitse Google-fonts fontti tai käytä Arial nav
- lisätään navigaatiolle vielä heittovarjo alareunaan
- aseta z-index: 999; jotta navigaatio on kaikkien elementtien päällä myös scrollatessa #container
- keskitä sisältö vaakasuunnassa margin: 0 auto;
- tee containersita flex elementti
- jeskitä flex sisältö vaakasuunnassa .advert_pc
- lisää ylämarginaalia
- aseta minimileveys 150px .advert_tab
- aseta leveys 100%
- aseta maksimileveys 800px
- aseta minimikorkeus 150px
- lisää ylös 1em marginaali
- laita vasen ja oikea marginaali auto, jolloin keskität elementin
- nollaa alamarginaali
- aseta display: none; koska tablettimainos ei kuulu olla näkyvissä työpöytänäkymässä .advert_mob
- lisää padding 1em (joka puolelle)
- aseta display: none; koska mobiilimainos ei kuulu olla näkyvissä työpöytänäkymässä header
- aseta valitsemasi teemaväri ja käytä muuttujaa
- aseta elementin korkeus ja käytä muuttujaa
- aseta ylämarginaali ja käytä muuttujaa
- tee headerista flex elementti
- keskitä sisältö vaaka- ja pystysuunnassa main
- lisää padding 1em (joka puolelle)
- aseta taustaväriksi esim. valkoinen
- aseta tumma tekstin väri
- tee mainista 100% leveä
- aseta maksimileveys 1000px
- eli siis, asetettiin main täyttämään navigaatiolta, headerilta ja footerilta jäljelle jäävä tila ruudun korkeudesta
- tee mainista grid elmentti display: grid;
- aseta 1em tilaa grid elementien väliin gap: 1em;
- aseta paddin 1em
- aseta näkyvä taustaväri (väliaikaisesti)
- grid-area: aparts;
- eli siis div jolla on id aparts, käyttää nyt gridin soluja aparts #garages
- aseta näkyvä taustaväri (väliaikaisesti)
- grid-area: garages; #forests
- aseta näkyvä taustaväri (väliaikaisesti)
- grid-area: forests; aside
- grid-area: aside;
- aseta näkyvä taustaväri (väliaikaisesti)
- aseta padding 1em
- aseta vasemmalle ohut reunaviiva footer
- aseta footerille sama taustaväri kuin headerille
- aseta footerin korkeus käyttäen muuttujaa
- tee footerista flex elementti
- keskitä flex sisältö vaaka- ja pystysuunnassa
eli siis ruudukossa on 3 riviä ja 3 saraketta
ylimmällä rivillä on 2/3 osaa #aparts elementtiä ja 1/3 osaa aside-elementtiä
keskirivillä on 2/3 osaa #garages elementtiä ja 1/3 osaa aside-elementtiä
keskirivillä on 2/3 osaa #forests elementtiä ja 1/3 osaa aside-elementtiä
@media only screen and (max-width: 1050px){
.advert_pc
piilota pc mainos
.advert_tabnäytä tablettimainos display: block;
keskitä teksti
.advert_tab imgrajoita kuvan max leveys 100%
mainmuokkaa gridiä:
nyt gridissä on vain yksi sarake ja kaikki elementit ovat päällekkäin
asidepoista vasen reunaviiva
form- vaihda flexin suunta pystyyn flex-direction: row;
- tasaa flex elementit justify-content: space-around;
- lisää tyhjää tillaa flex elementtien väliin gap: 2em;
.advert_tab
piilota tablettimainos
.advert_mobnäytä mobiilimainos display: block;
keskitä teksti
article div, section divkäännä artikkelin flexin suunta pystyyn flex-direction: column;
formkäännää lomakkeen flexin suunta pystyyn flex-direction: column;
}Kuvat
![](img/asunto1.jpg)
![](img/asunto2.jpg)
![](img/asunto3.jpg)
![](img/asunto4.jpg)
![](img/pohja1.jpg)
![](img/pohja2.jpg)
![](img/pohja3.jpg)
![](img/pohja4.jpg)
![](img/talli1.jpg)
![](img/talli2.jpg)
![](img/tila1.jpg)
![](img/tila2.jpg)
![](img/mainos_tab_1.jpg)
![](img/mainos_tab_2.jpg)
![](img/mainos_mob_1.jpg)
![](img/mainos_mob_2.jpg)
![](img/mainos_pc_1.jpg)
![](img/mainos_pc_2.jpg)