<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Gfx - digimedia-alan yhteisö</title>
	<atom:link href="http://gfx.fi/feed/" rel="self" type="application/rss+xml" />
	<link>http://gfx.fi</link>
	<description></description>
	<lastBuildDate>Tue, 07 Sep 2010 22:41:07 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.8.2</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>XSS – aliarvioitu uhka?</title>
		<link>http://gfx.fi/2010/08/xss-%e2%80%93-aliarvioitu-uhka/</link>
		<comments>http://gfx.fi/2010/08/xss-%e2%80%93-aliarvioitu-uhka/#comments</comments>
		<pubDate>Thu, 19 Aug 2010 14:13:21 +0000</pubDate>
		<dc:creator>Gfx.fi</dc:creator>
				<category><![CDATA[Site building]]></category>
		<category><![CDATA[tietoturva]]></category>
		<category><![CDATA[xss]]></category>

		<guid isPermaLink="false">http://gfx.fi/?p=2248</guid>
		<description><![CDATA[Cross-site scripting (XSS) on haavoittuvuuden muoto, jonka avulla web-sivustolla voidaan ajaa ulkoista selainpuolen koodia, käytännössä JavaScriptiä. XSS-haavoittuvuudet mahdollistavat niin pienen kiusan kuin pahimillaan synnyttävät vakavampia tietoturvauhkia. XSS-haavoittuvuudet ovat yllättävän yleisiä ja myös melko helposti löydettävissä. Kaikesta huolimatta niihin suhtaudutaan usein liiankin kevyesti.]]></description>
			<content:encoded><![CDATA[<p><strong>Cross-site scripting (XSS) on haavoittuvuuden muoto, jonka avulla web-sivustolla voidaan ajaa ulkoista selainpuolen koodia, käytännössä JavaScriptiä. XSS-haavoittuvuudet mahdollistavat niin pienen kiusan kuin pahimillaan synnyttävät vakavampia tietoturvauhkia.</strong></p>
<p>XSS-haavoittuvuudet ovat yllättävän yleisiä ja myös melko helposti löydettävissä. Kaikesta huolimatta niihin suhtaudutaan usein liiankin kevyesti.</p>
<p>Kesäkuussa Mikko Hyppönen <a rel="external" href="http://www.f-secure.com/weblog/archives/00001972.html">kirjoitti F-Securen blogissa XSS-haavoittuvuudesta</a>, joka oli löytynyt heidän omalta sivustoltaan. Tämän johdosta päätin kirjoittaa artikkelin tietoturvaongelmasta, jota mielestäni aliarvioidaan.</p>
<p>Hyppönen tiivisti ongelman ytimen erinomaisesti toteamalla <em>“Jos edes tietoturvayhtiöt eivät saa omia sivujaan täysin aukottomiksi, niin minkälaista toivoa on yhtiöillä, joiden erikoisosaamisala ei ole tietoturva?”</em>.</p>
<p>Allekirjoitan Hyppösen väittämän täysin: kirjoittaessani tätä artikkelia kävin läpi 15 satunnaista sivustoa <a rel="external" href="http://www.gallupweb.com/tnsmetrix/">Suomen 25 vierailluimmasta sivustosta</a>. Lyhyehköillä, manuaalisilla testeillä löysin XSS-haavoittuvuuden yhdeksästä eri palvelusta. Kahdeksassa näistä palveluista on käyttäjäosio, kahdessa palvelussa liikkuu oikea raha.</p>
<p>Tässä artikkelissa käyn läpi XSS-haavoittuvuuksien eri muotoja, mitä ne todellisuudessa mahdollistavat, ja yhtälailla sitä, mitkä ovat XSS:n heikkoudet. Käyn läpi myös yhden kuvitteellisen esimerkin, jonka tarkoituksena on havainnollistaa tarkemmin XSS:n käyttöä todellisessa tilanteessa.</p>
<p>Artikkeli ei tarjoa neuvoja XSS-haavoittuvuuksien torjumiseksi, sillä aihe on monin osin teknologiariippuvainen. Artikkelin lopussa on kuitenkin listattuna muutama hyödyllinen linkki, jotka osaltaan antavat vinkkejä myös torjumiselle.</p>
<h2>Mistä oikeastaan on kyse?</h2>
<ul>
<li>XSS-haavoittuvuuksien määrän on arvioitu olevan noin 80% kaikista tietoturvahaavoittuvuuksista (Symantec, 2007),</li>
<li>OWASP (The Open Web Application Security Project) listaa XSS-haavoittuvuudet vuoden 2010 toiseksi pahimmaksi tietoturvauhkaksi,</li>
<li>XSS-haavoittuvuuksia on esiintynyt myös erittäin tunnetuilla sivustoilla, kuten Facebook, Twitter tai Wikipedia.</li>
</ul>
<p>Lyhyenä johtopäätöksenä voidaan todeta, että XSS on laaja ja vakavasti otettava uhka, jolta edes suuret toimijat eivät voi välttyä.</p>
<h2>XSS-haavoittuvuuksien muotoja</h2>
<p>XSS-haavoittuvuuksia on olemassa ainakin neljää eri muotoa:</p>
<ol>
<li>URL:n välityksellä suoritettava haavoittuvuus,</li>
<li>Sivustolle lähetetyssä syötteessä esiintyvä haavoittuvuus,</li>
<li>Selainpuolen logiikassa esiintyviä virheitä hyödyntävä haavoittuvuus,</li>
<li>Ulkoista syötettä hyödyntävä haavoittuvuus,</li>
</ol>
<p>Lisäksi viidentenä uhkana on syytä listata “käyttäjän itsensä ajama haittakoodi”.</p>
<h3>1) URL:n välityksellä suoritettava haavoittuvuus</h3>
<p>Tämä lienee yleisin muoto haavoituvuudelle. Osoitteen välityksellä suoritettu haavoittuvuus on myös lyhytikäinen ja helpoiten havaittavissa.</p>
<p>Jos sivusto ei osaa validoida oikein URL:ssa välitettyjä parametreja, niin tämän haavoittuvuuden hyödyntäminen on helppoa. Tällöin URL voisi näyttää esimerkiksi tältä: <strong>http://www.domain.tld/?page=Main&#8221;%3e%3c%73%63%72%69%70%74%20%73%72%63=//%62%69%74%2e%6c%79/%78%73%73_1%3e</strong>.</p>
<p>Uskallan väittää, että keskivertokäyttäjä (keskiverto, et siis sinä) ei näe tässä mitään epäilyttävää. Lisäksi keskivertokäyttäjän selain näkee tässä harvemmin mitään epäilyttävää. Ja vaikka näkisikin, niin sen kiertämiseksi on yleensä keinoja. Tämän lisäksi URL:n lyhennystä tarjoavat palvelut tarjoavat mahdollistavat käyttäjän hämäämisen.</p>
<h3>2) Sivustolle lähetetyssä syötteessä esiintyä haavoittuvuus</h3>
<p>Tämä tapaus on astetta vakavampi, sillä kyseessä on sivustolla pysyvästi esiintyvä haavoittuvuus.</p>
<p>Perusideana on löytää sivuston lomakkeista kenttiä, joiden kautta haittakoodi on lisättävissä. Esimerkkinä mainittakoon, että tällainen haavoittuvuus löytyi mm. Facebookista vielä muutama kuukausi sitten, jossa ryhmän nimeä ei validoitu, kun se esitettiin dynaamisissa hakutuloksissa.</p>
<p>Nykyään monet sivustot ovat rakennettu valmiiden tuotteiden tai frameworkien päälle, joissa tämänkaltaiset haavoittuvuudet on lähes poikkeuksetta estetty.</p>
<h3>3) Selainpuolen logiikassa esiintyvät virheet</h3>
<p>Tämä haavoittuvuuden muoto on idealtaan samankaltainen kuin kohdan #1 haavoittuvuus. Tässä tapauksessa haittakoodia ei lisätä HTML-rakenteeseen vaan se suoritetaan jo olemassa olevan Javascript-koodin avulla.</p>
<p>Tällainen haavoittuvuus esiintyy harvemmin. Tilanteissa, joissa sivustolle lisätään skriptejä dynaamisesti, suoritetaan <em>eval()</em> funktio tai muulla tavoin manipuloidaan DOM-rakennetta hyödyntäen suoraan URL:ssa välitettyjä parametreja, on tämän haavoittuvuuden hyödyntäminen täysin mahdollista.</p>
<h3>4) Ulkoista syötettä hyödyntävä haavoittuvuus</h3>
<p>Tämä haavoittuvuus on harvinaisempi ja esiintyy lähinnä silloin, kun ollaan toimittu todella ajattelemattomasti.</p>
<p>Esimerkkinä on tilanne, jossa sivustolla julkaistaan Twitter-feed jonkin hash-tagin perusteella kuitenkaan validoimatta feediä, tai käsittelemällä feediä selainpuolella (kohta #3). Näin kävi muun muassa tapauksessa <a rel="external" href="http://www.flickr.com/photos/meg/4453821027/">#cashgordon</a>.</p>
<h3>5) Käyttäjän itsensä ajama haittakoodi</h3>
<p>Tämä haavoittuvuus on ikävä siitä syystä, että sivuston ylläpitäjällä ei käytännössä ole vaikutusmahdollisuuksia haavoittuvuuden esiintymiseen. Haavoittuvuus perustuu sille, että käyttäjä saadaan itse ajamaan JavaScriptiä selaimessaan.</p>
<p>Mutta miksi käyttäjä ajaisi selaimessaan JavaScriptiä?</p>
<p>Tämä haavoittuvuus perustuu kolmeen asiaan: 1) peruskäyttäjä ei tiedä tämän olevan kovin vaarallista, 2) suositus haittakoodin ajamiseksi tulee monesti muilta, yleensä tutuilta ihmisiltä ja 3) uteliaisuus ei ole synti.</p>
<p>Asetelma on käytännössä hyvin samanlainen kuin sähköposteilla leviävien matojen ja viruksien osalta.</p>
<p>Moni meistä on nähnyt tämän tapahtuvan esimerkiksi Facebookissa. Kuvitellaan skenaario: luodaan ryhmä, jossa kerrotaan dislike-toiminnon saamisesta käyttöön ajamalla yksinkertainen komento selaimen osoitepalkissa. Tämän avulla lisätään sivulle skripti, joka tekee automaattisen status-päivityksen, jolloin huijaus leviää.</p>
<p>Tämä skenaario on itse asiassa totta. Tällä tavoin huijausta saatiin levitettyä satojen tuhansien Facebook-käyttäjien keskuudessa. Enkä yhtään ihmettele.</p>
<h2>XSS tarkoittaa aina ongelmia</h2>
<p>Alla on listattuna muutama ongelma, jotka ensimmäisenä tulevat mieleeni XSS-haavoittuvuuksista:</p>
<h3>Käyttäjän syöte on selkokielistä</h3>
<p>Tärkeimpänä huomio on, että injektoitu sivu voi kerätä talteen selkokielisenä kaiken, mitä käyttäjä sivulle syöttää. Käyttäjä voi luulla normaalisti kirjautuvansa palveluun syöttäen tunnuksen ja salasanan ollen täysin tietämätön, mihin tiedot todellisuudessa päätyvät.</p>
<h3>Käyttäjä luottaa tuttuun sivustoon</h3>
<p>Toinen tärkeä huomio on, että XSS mahdollistaa toimimisen ympäristössä, johon käyttäjä luottaa. Tämä madaltaa kynnystä sille, että käyttäjä on valmis luovuttamaan arkaluontoisia tietoja. Kun tutun palvelun ruudulle ilmestyy dialogi, joka luotettavasti esittää syitä, miksi käyttäjän on syötettävä tunnuksensa ja salasanansa, ei käyttäjä välttämättä osaa epäillä mitään.</p>
<h3>XSS-haavoittuvuus indikoi myös muista tietoturvaongelmista</h3>
<p>Jos sivustolta löytyy XSS-haavoittuvuus, niin ei ole epäkohteliasta olettaa sivustolla olevan myös muita puutteita tietoturvassa. XSS-haavoittuvuus antaa usein viittaukseen siihen, että sivusto ei ole rakennettu valmiin tuotteen päälle, jolloin tietoturvaan liittyvät seikat on täytynyt miettiä erikseen. Vaikka sivusto olisikin tehty hyödyntäen valmista frameworkia, niin tällöin on tehty auttamattomasti väärin.</p>
<p>Joka tapauksessa on varmaa, että XSS-haavoittuvuus houkuttelee ei-toivottuja vieraita sivusto(i)lle.</p>
<h3>Virheillä on tapana toistua</h3>
<p>Kun sivuston luonut taho on tiedossa, syntyy uudenlainen ongelma: googlaamalla tai vierailemalla tahon oman sivustolla on usein löydettävissä muut saman tahon luomat sivustot, joilla samat tietoturvaongelmat mahdollisesti toistuvat.</p>
<h3>Käyttäjän silmissä jokainen haavoittuvuus on yhtä vakava</h3>
<p>Kun käyttäjä kuulee sivustolla olleen tietoturvaongelmia, hänen luottamus sivustoa kohtaan on usein menetetty. Sillä on harvemmin väliä, onko joku onnistunut saamaan haltuunsa yksittäiset tunnukset, viemään koko tietokannan tai tehnyt vain pientä kiusaa XSS-haavoittuvuuden avulla. Peruskäyttäjiä ei niinkään kiinnosta tekniset yksityiskohdat tai sivuston ylläpitäjän selitykset tietoturvaongelmien eri vakavuusasteista.</p>
<h2>Kuvitteellinen esimerkki XSS-haavoittuvuudesta</h2>
<p>Tämän esimerkin tarkoituksena on havainnollistaa, minkälaisen tilanteen XSS-haavoittuvuus voi mahdollistaa.</p>
<h3>Alkutilanne</h3>
<p>Olemme löytäneet XSS-haavoittuvuuden hyvin suositulta keskustelupalstalta. Haavoittuvuus voidaan ajaa lisäämällä haittakoodi yhdessä keskustelusäikeen tunnisteen parametrissä: <strong>http://www.foobarforum.com/?threadID=42%27%3e%3c%73%63%72%69%70%74%20%73%72%63=//%62%69%74%2e%6c%79/%78%73%73_1%3e</strong></p>
<p>Valtaosa merkeistä on UTF-8 formaatissa. Osoitteen lyhentämiseksi voimme toimia myös siten, että muutamme vain osan merkeistä UTF-8 formaattiin. Vaihtoehtoisesti voisimme käyttää URL:n lyhentäjiä.</p>
<h3>Valmistelut</h3>
<p>Olemme siis luoneet keskustelun, jonka ID on 42. Lisäksi olemme luoneet skriptin, jota kutsumme. Tämä skripti ajaa haittakoodin sekä tekee tarvittavat muutokset, jotta loppuvaikutelma on luotettava.</p>
<p>Olemme aiemmin luoneet käyttäjätunnuksia muille suosituille keskustelupalstoille sekä kirjoittaneet muutamia  viestejä, jotta luodut tunnukset ovat muiden käyttäjien silmissä luotettavampia.</p>
<p>Tämän jälkeen luomme viestejä muille keskustelupalstoille, joissa viittaamme XSS-haavoittuvuuden sisältävälle keskustelupalstalle:</p>
<p><img src="http://gfx.fi/wordpress/wp-content/uploads/2010/08/xss-aliarvioitu-uhka-1.png" alt="Kuva keskustelupalstan viestistä, jossa houkutellaan käyttäjiä XSS-haavoittuvuuden sisältävälle sivustolle." /></p>
<p>Olemme kirjoittaneet viestin työajan ulkopuolella, kuitenkin keskustelupalstojen käyttäjien ollessa vielä aktiivisia.  Eli keskustelupalstoilla vierailevien käyttäjien määrä on suuri, mutta ylläpitäjän viive haavoittuvuuden korjaamiseksi voidaan olettaa olevan pidempi.</p>
<p>Viestin tarkoitus on olla riittävän houkutteleva, mutta samalla uskottava. Keskustelupalstat ovat usein rakentuneet jonkin teeman ympärille (tekniikka, musiikki, perhe, jne.), jolloin houkuttelevien palkintojen ja muiden lupausten keksiminen on hyökkääjän kannalta triviaalia.</p>
<p>Hyökkäyksen kannalta on ongelmallista, että ennemmin tai myöhemmin joku käyttäjistä huomaa linkin hyödyntävän XSS-haavoittuvuutta – ilmoittaen asiasta sekä keskustelupalstalle että kohdesivuston ylläpitäjälle. Olemme kuitenkin jakaneet linkkiä useilla eri sivustoilla, jolloin vierailevia käyttäjiä tulee useista lähteistä.</p>
<h3>Varsinainen ongelma</h3>
<p>Koska olemme kiinnostuneet käyttäjätunnuksista, meidän on ylläpidettävä tarinaa, joka saa käyttäjän kirjautumaan tai rekisteröitymään palveluun. Lisäksi meidän on huolehdittava siitä, että käyttäjä ei välillä poistu injektoidusta dokumentista:</p>
<p><img src="http://gfx.fi/wordpress/wp-content/uploads/2010/08/xss-aliarvioitu-uhka-2.png" alt="Kuva haavoittuneesta dokumentista, jossa käyttäjää houkutellaan syöttämään arkaluontoista tietoa." /></p>
<p>Olemme muokanneet dokumentin sisältöosiota jättäen ympäröivä rakenne alkuperäiseen muotoonsa, pois lukien sivuston oma kirjautumisosio (1). Kerromme käyttäjälle aiemmin kuvaillulla tavalla, että sivustolle on kirjauduttava sisään, jotta (kilpailu)viesti on nähtävissä. Samalla tarjoten myös toista lomaketta (2) sisäänkirjautumista varten.</p>
<p>Kumpikaan kirjautumislomakkeesta ei todellisuudessa ohjaa uudelle sivulle vaan ainoastaan lähettää syötetyt tiedot hyökkääjän palvelimelle sekä näyttää “väärä käyttäjätunnus tai salasana” -ilmoituksen haavoittuneessa dokumentissa.</p>
<p>Jos käyttäjä on jo rekisteröitynyt palveluun, on myös mahdollista, että hänellä on käytössään selaimen suorittama tunnuksen ja salasanan esitäyttö sivuston omaan sisäänkirjautumislomakkeeseen. Tässä tilanteessa saamme suoraan poimituksi tunnuksen ja salasanan.</p>
<p>Lisäksi tarjoamme rekisteröitymismahdollisuutta (3), joka tässä tapauksessa avaa täytettäväksi dynaamisesti luodun dialogin. Samoin menettelemme myös “unohtuneen salasanan” (4) kohdalla.</p>
<p>Hyökkäyksen elinkaaren kannalta on tärkeää saada käyttäjä pidetyksi haavoittuneessa dokumentissa mahdollisimman pitkään.</p>
<p>Jokaiselta löytyy (tai ainakin pitäisi löytyä) useampia eri salasanoja, joita käyttää eri palveluissa. Tämän myötä on aivan mahdollista, että jo rekisteröitynyt käyttäjä tulee kokeilleeksi useampia käyttämiään salasanojaan yrittäessään kirjautua palveluun. Käyttäjän pyytäessä uutta salasanaa on varsin tavallista tiedustella käyttäjän sähköpostiosoitetta sekä mahdollisesti vastausta johonkin turvakysymykseen. Tämä mahdollistaa jälleen uusien, arkaluontoisten tietojen keruun.</p>
<p>Tämän kaiken lisäksi on mahdollista, että löydämme meitä hyödyttävää tietoa myös evästeistä tai muista sivustolla käytettävistä muuttujista.</p>
<h3>Lopputulos</h3>
<p>Tarjoamme käyttäjälle useamman mahdollisuuden syöttää joko olemassaoleva tunnus ja salasana palveluun tai rekisteröityä palveluun, jolloin voimme pyytää käyttäjältä muita henkilökohtaisia tietoja.</p>
<p>Vaikka lopputuloksena olisi se, että emme saisi yhdenkään käyttäjän tunnuksia, niin vahinko on jo tapahtunut. Vähintä (tai järkevintä), mitä haavoittuneen sivuston ylläpitäjä voi tehdä, on kertoa tilanteesta ja kehoittaa kaikkia käyttäjiä vaihtamaan salasanansa omassa palvelussaan sekä myös muissa palveluissa, joissa on käytössä sama salasana.</p>
<h2>Johtopäätös</h2>
<p>Kuten aiemmin totesin, XSS-haavoittuvuuksia löytyy jatkuvasti niin pieniltä kuin suurilta sivustoilta. Tein itse vain pienen pintaraapaisun käydessäni läpi joitakin Suomen suosituimpia sivustoja todeten, että yli puolessa palveluista löytyy haavoittuvuus. Kaiken kaikkiaan olen tänä vuonna raportoinut reilu viisikymmentä haavoittuvuutta, näiden tapausten ollessa yleensä todella ilmeisiä.</p>
<p>Olen valmis tekemään johtopäätöksen, että XSS-haavoittuvuuksiin joko suhtaudutaan verkkopalveluiden ylläpitäjien näkökulmasta liian kevyesti tai tietoisuus tästä haavoittuvuuden muodosta on aivan liian vähäinen. Toisena johtopäätöksenä on, että loppukäyttäjän ei voida koskaan olettaa olevan riittävän valveutunut tai vastuussa haavoittuvuuteen lankeamisesta, vaan vastuu on aina sivuston ylläpitäjällä.</p>
<p>XSS-haavoittuvuuksien hyödyntäminen vaatii jonkin verran luovuutta ja mielikuvitusta, eli “ei se tarina, vaan miten se kerrotaan”. Jos tavoitteena todella on aiheuttaa haittaa, niin keinojen keksiminen ei viime kädessä ole ongelma.</p>
<h2>Luettavaa</h2>
<ul>
<li><a rel="external" href="http://fi.wikipedia.org/wiki/Cross_site_scripting">Wikipedia: Cross Site Scripting</a></li>
<li><a rel="external" href="http://ha.ckers.org/xss.html">XSS Cheat Sheet</a></li>
<li><a rel="external" href="http://www.xssed.com/">XSSed – Cross Site Scripting attacks information and archive</a></li>
<li><a rel="external" href="http://blog.c22.cc/2010/03/16/alertxss-the-slow-death-of-xss/">“alert(‘xss’) – The slow death of XSS”</a></li>
<li><a rel="external" href="http://dev.opera.com/articles/view/opera-javascript-for-hackers-1/">Opera Dev Community: JavaScript for Hackers</a></li>
<li><a rel="external" href="http://blip.tv/file/3684946">Video: JavaScript: The Evil Parts (Billy Hoffman, JSConf 2010)</a></li>
<li><a rel="external" href="http://www.ihminen.org/xss/">Listaus XSS-haavoittuvuuksista Suomessa (päivitetty viimeksi 19.4.2008)</a></li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://gfx.fi/2010/08/xss-%e2%80%93-aliarvioitu-uhka/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>jQuery:n käyttö dynaamisesti ladatun sisällön kanssa</title>
		<link>http://gfx.fi/2010/07/jqueryn-kaytto-dynaamisesti-ladatun-sisallon-kanssa/</link>
		<comments>http://gfx.fi/2010/07/jqueryn-kaytto-dynaamisesti-ladatun-sisallon-kanssa/#comments</comments>
		<pubDate>Mon, 26 Jul 2010 18:58:45 +0000</pubDate>
		<dc:creator>Gfx.fi</dc:creator>
				<category><![CDATA[Site building]]></category>
		<category><![CDATA[javascript]]></category>
		<category><![CDATA[jquery]]></category>

		<guid isPermaLink="false">http://gfx.fi/?p=2223</guid>
		<description><![CDATA[Eri selaimien ja selainversioiden kanssa tapellessa jQuery helpottaa Front-end-koodarin elämää valtavasti. jQuery on suuri tuskan poistaja esimerkiksi Ajax:in kanssa temppuillessa, mutta silti on vielä joitakin sudenkuoppia, mitä sivunrakentajan on syytä varoa.]]></description>
			<content:encoded><![CDATA[<p><strong>Eri selaimien ja selainversioiden kanssa tapellessa jQuery  helpottaa Front-end-koodarin elämää valtavasti. jQuery on suuri tuskan  poistaja esimerkiksi Ajax:in kanssa temppuillessa, mutta silti on vielä  joitakin sudenkuoppia, mitä sivunrakentajan on syytä varoa.</strong></p>
<p><a href="http://gfx.fi/wordpress/matsku/artikkeli-2223/index.html">Katso demo</a></p>
<p><a href="http://gfx.fi/wordpress/matsku/artikkeli-2223/jqueryn_kaytto_dynaamisesti_ladatun_sisallon_kanssa.zip">Lataa  tiedostot</a></p>
<p>Tämä opas on henkinen jatko-osa jutulle nimeltään <a href="../../2010/06/ajaxin-alkeet-jqueryn-avulla/">Ajax:in  alkeet jQueryn avulla</a>. Demosivu muistuttaa pitkälti edelliskertaista  sivua, mutta joitakin muutoksia on tullut:</p>
<p><strong>index.html:</strong></p>
<pre class="brush: xml;">
&lt;!DOCTYPE html&gt;
&lt;html lang=&quot;fi&quot;&gt;

&lt;head&gt;
	&lt;meta charset=utf-8&gt;
	&lt;title&gt;Otsikko&lt;/title&gt;

	&lt;script src=&quot;http://www.google.com/jsapi&quot;&gt;&lt;/script&gt;
&lt;/head&gt;

&lt;body&gt;

	&lt;h1&gt;Otsikko&lt;/h1&gt;

	&lt;ul id=&quot;navigointi&quot;&gt;
		&lt;li&gt;&lt;a id=&quot;etusivu&quot; href=&quot;#&quot;&gt;Etusivu&lt;/a&gt;&lt;/li&gt;
		&lt;li&gt;&lt;a id=&quot;uutiset&quot; href=&quot;#&quot;&gt;Uutiset&lt;/a&gt;&lt;/li&gt;
		&lt;li&gt;&lt;a id=&quot;yhteystiedot&quot; href=&quot;#&quot;&gt;Yhteystiedot&lt;/a&gt;&lt;/li&gt;
	&lt;/ul&gt;

	&lt;div id=&quot;sisalto&quot;&gt;

	&lt;/div&gt;

&lt;/body&gt;
&lt;/html&gt;
</pre>
<p>Nyt navigointilinkit eivät johda mihinkään ja sivun varsinainen  sisältö on poistettu, sillä tulemme hoitamaan tämän kaiken jQueryn ja  Ajaxin avulla. Näinhän ei tietenkään oikealla sivulla koskaan tulisi  toimia, mutta jotta juttumme pääasia tulisi mahdollisimman selväksi,  oiotaan mutkia tältä osin hiukan.</p>
<p>Kaikki sisältö on siirretty yhteen dokumenttiin nimeltään <strong>ajax.html</strong>,  jotta jatkossa osioiden käsittely jQueryllä olisi hiukan helpompaa.  Heitetään soppaan vielä mukaan pieni kuvagalleria jokaiselle osiolle:</p>
<p><strong>ajax.html:</strong></p>
<pre class="brush: xml;">

&lt;div id=&quot;etusivu&quot;&gt;
	&lt;h2&gt;Etusivun jutut&lt;/h2&gt;

	&lt;p&gt;Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua...&lt;/p&gt;

	&lt;ul id=&quot;kuvalinkit&quot;&gt;
		&lt;li&gt;&lt;a href=&quot;#&quot; class=&quot;kuva1&quot;&gt;Kuva 1&lt;/a&gt;&lt;/li&gt;
		&lt;li&gt;&lt;a href=&quot;#&quot; class=&quot;kuva2&quot;&gt;Kuva 2&lt;/a&gt;&lt;/li&gt;
		&lt;li&gt;&lt;a href=&quot;#&quot; class=&quot;kuva3&quot;&gt;Kuva 3&lt;/a&gt;&lt;/li&gt;
	&lt;/ul&gt;

	&lt;div id=&quot;galleria&quot;&gt;
		&lt;div class=&quot;kuva1&quot;&gt;&lt;/div&gt;
		&lt;div class=&quot;kuva2&quot;&gt;&lt;/div&gt;
		&lt;div class=&quot;kuva3&quot;&gt;&lt;/div&gt;
	&lt;/div&gt;
&lt;/div&gt;

&lt;div id=&quot;uutiset&quot;&gt;
	&lt;h2&gt;Uutiset&lt;/h2&gt;

	&lt;p&gt;Päivän tärkeimmät tapahtumat.&lt;/p&gt;

	&lt;ul id=&quot;kuvalinkit&quot;&gt;
		&lt;li&gt;&lt;a href=&quot;#&quot; class=&quot;kuva1&quot;&gt;Kuva 1&lt;/a&gt;&lt;/li&gt;
		&lt;li&gt;&lt;a href=&quot;#&quot; class=&quot;kuva2&quot;&gt;Kuva 2&lt;/a&gt;&lt;/li&gt;
		&lt;li&gt;&lt;a href=&quot;#&quot; class=&quot;kuva3&quot;&gt;Kuva 3&lt;/a&gt;&lt;/li&gt;
	&lt;/ul&gt;

	&lt;div id=&quot;galleria&quot;&gt;
		&lt;div class=&quot;kuva1&quot;&gt;&lt;/div&gt;
		&lt;div class=&quot;kuva2&quot;&gt;&lt;/div&gt;
		&lt;div class=&quot;kuva3&quot;&gt;&lt;/div&gt;
	&lt;/div&gt;
&lt;/div&gt;

&lt;div id=&quot;yhteystiedot&quot;&gt;
	&lt;h2&gt;Yhteystiedot&lt;/h2&gt;

	&lt;p&gt;Osoite, puhelinnumero yms...&lt;/p&gt;

	&lt;ul id=&quot;kuvalinkit&quot;&gt;
		&lt;li&gt;&lt;a href=&quot;#&quot; class=&quot;kuva1&quot;&gt;Kuva 1&lt;/a&gt;&lt;/li&gt;
		&lt;li&gt;&lt;a href=&quot;#&quot; class=&quot;kuva2&quot;&gt;Kuva 2&lt;/a&gt;&lt;/li&gt;
		&lt;li&gt;&lt;a href=&quot;#&quot; class=&quot;kuva3&quot;&gt;Kuva 3&lt;/a&gt;&lt;/li&gt;
	&lt;/ul&gt;

	&lt;div id=&quot;galleria&quot;&gt;
		&lt;div class=&quot;kuva1&quot;&gt;&lt;/div&gt;
		&lt;div class=&quot;kuva2&quot;&gt;&lt;/div&gt;
		&lt;div class=&quot;kuva3&quot;&gt;&lt;/div&gt;
	&lt;/div&gt;
&lt;/div&gt;
</pre>
<p>Galleriat sisältävät kolme ”kuvaa” jotka tulevat päivittymään <strong>#sisalto</strong>-divin  sisällä dynaamisesti käyttäjän klikkaillessa kuvalinkkejä. Tässä  esimerkissä simuloimme kuvia tyhjillä diveillä. Kuvat on oletuksena  piilotettu näkyvistä <strong>display: none;</strong> -määreellä.</p>
<p>Kirjoitetaan navigoinnista vastaava jQuery uusiksi:</p>
<pre class="brush: xml;">
google.load(&quot;jquery&quot;, &quot;1.4.2&quot;);
google.setOnLoadCallback(function() {

	// Ladataan etusivun sisällöt näkyviin
	$('#sisalto').load('ajax.html #etusivu');

	// Vaihdetaan näkymää klikatun linkin mukaan
	$('#navigointi a').click( function() {

		$('#sisalto').load('ajax.html #' + $(this).attr('id'));

		return false;

	});

});
</pre>
<p>Ensimmäinen jQuery-loitsu on  varmaankin aika selvä. Toisessa  pätkässä lataamme klikatun linkin id:tä vastaavan div:in <strong>ajax.html</strong>:stä.</p>
<p>Seuraavaksi voimmekin jatkaa edellisen perään galleriamme  toiminnallisuus. Logiikka on pitkälti sama, kuin aiemminkin:</p>
<pre class="brush: xml;">
google.load(&quot;jquery&quot;, &quot;1.4.2&quot;);
google.setOnLoadCallback(function() {

	// Ladataan etusivun sisällöt näkyviin
	$('#sisalto').load('ajax.html #etusivu');

	// Vaihdetaan näkymää klikatun linkin mukaan
	$('#navigointi a').click( function() {
		$('#sisalto').load('ajax.html #' + $(this).attr('id'));
		return false;
	});

	// Avaa klikattu kuva ja piilota edellinen
	$('#kuvalinkit a').click( function() {

		$('#galleria .' + $(this).attr('class')).show('slow')
		.siblings()
		.hide('slow');

		return false;

	});
});
</pre>
<p>Kaiken järjen mukaan edellisen koodin pitäisi toimia aivan kuten  navigoinninkin, mutta klikatessa kuvalinkkejä kuvat eivät kuitenkaan  aukea. Mitä oikein tapahtui?</p>
<h2>Ken vanhoja muistaa, sitä tikulla silmään</h2>
<p>Kun selain on saanut ladattua sivun rakenteen, <a href="http://en.wikipedia.org/wiki/Document_Object_Model">DOM</a>:in,  jQuery käy sen läpi ja lisää mm. klikkausten tapahtumakäsittelijät  (click event handlers) vaadituille elementeille, meidän tapauksessamme  kuvalinkeille. Kun lataamme Ajax-kutsulla <strong>#sisalto</strong>-diviin  jonkin sisältönäkymistä, muokkaamme tätä rakennetta jälkeenpäin. jQuery  ja JavaScript ovat tällä hetkellä hieman ulalla, sillä kukaan ei ole  kertonut heille, että sivuilla on jotain tapahtunut. Meidän täytyy siis  kertoa JavaScriptille jotenkin, että sivu on päivittynyt ja sen täytyy  ottaa huomioon myös uusi sisältö.</p>
<h2>Kun ei homma itseltä onnistu, delegoidaan</h2>
<p>jQueryn tuorein päivitys, 1.4.2, toi mukanaan uuden <a href="http://api.jquery.com/delegate/">.delegate()</a>-metodin, jolla  saamme ongelmamme ratkaistua. Delegate-metodin toimintaperiaate ei  välttämättä aukea aivan heti kaikille joten otetaanpa alkuun pieni annos  JavaScriptin teoriaa:</p>
<p>Tapahtumien kupliminen, tai event bubbling, on olennainen osa koko  JavaScriptin filosofiaa. Kun käyttäjä klikkaa elementtiä sivuilla, alkaa  taustalla erikoinen tapahtumaketju. Katsotaan vaikka esimerkiksi  demosivumme linkkilistaa: Klikatessa linkkiä listassa, laukeaa  klikkaustapahtuma tässä kyseisessä HTML-elementissä. Tämän jälkeen  linkkielementti ”mainostaa” tätä tapahtumaa isäntänään olevalle  LI-elementille. LI-elementti taas heittää tämän viestin ylöspäin  UL-elementille ja näin jatketaan ylöspäin aina dokumenttipuun alkuun  asti, ellei kuplimista jostain syystä erityisesti haluta katkaista.</p>
<p>Delegate-metodin temppuna on hakea jokin ylempi elementti sivuilta  ja sitoa kuplimisen kautta jonkin alempana dokumenttipuussa olevan  elementin tapahtuma, tässä tapauksessa klikkaus, siihen. Jotta saisimme  delegate-metodin käyttöömme, pitää meidän valita sivuilta jokin kaikille  linkeille yhteinen elementti, jota ei päivitetä Ajax-kutsuja tehdessä. <strong>Body</strong> on useasti aika varma valinta. Käytämme <strong>body</strong>:a  hyväksemme kierrättämällä klikkaustapahtumat sen kautta ja delegoimme  tapahtumat alaspäin uusille, Ajax:lla tuoduille elementeille.</p>
<p>Muutetaan alkuperäisiä kuvanvaihtolinkkiemme tapahtumakäsittelijöitä  hiukan niin, että otamme delegate-metodin mukaan leikkeihin:</p>
<pre class="brush: xml;">
// Avaa klikattu kuva ja piilota edellinen
$('body').delegate('#kuvalinkit a', 'click', function() {
	$('#galleria .' + $(this).attr('class')).show('slow')
	.siblings()
	.hide('slow');
	return false;
});
</pre>
<p>Nyt kuvalinkit pelaavat kaikissa alinäkymissä kauniisti. Olisimme  voineet sitoa delegoinnin myös lähemmäksi kuvalinkkejä demosivullamme,  esimerkiksi <strong>#sisalto</strong>-diviin, mutta suorituskyvyllisesti  tällä ei näin pienessä demossa ole merkitystä.</p>
<p>Mitä suuremmaksi Ajax-projektit kasvavat, sitä arvokkaammaksi  suorituskyvyn parantajaksi delegate nousee. Vanhemmissa  jQuery-versioissa käytetty <a href="http://api.jquery.com/live/">live()</a>-metodin  perusidea on pitkälle sama, kuin delegatella, mutta se sitoo  tapahtumakäsittelijät aina dokumentin alkuun. Delegatella voimme sitoa  klikkausten seurannan mahdollisimman lähelle klikkauksen alkujuuria ja  näin vähentää selaimen taakkaa JavaScriptin käsittelyssä.</p>
<p>jQueryn ja JavaScriptin optimoinnista syvemmin kiinnostuneiden  kannattaa katsoa <a href="http://paulirish.com/">Paul Irish</a>:in  esitelmä aiheesta: <a href="http://vimeo.com/10295601">jQuery  Anti-Pattern for Performance</a>.</p>
<p>Valmiin demon voit katsastaa <a href="http://gfx.fi/wordpress/matsku/artikkeli-2223/index.html">täältä</a>.</p>
<p><a href="http://gfx.fi/wordpress/matsku/artikkeli-2223/jqueryn_kaytto_dynaamisesti_ladatun_sisallon_kanssa.zip">Lataa  tiedostot</a></p>
]]></content:encoded>
			<wfw:commentRss>http://gfx.fi/2010/07/jqueryn-kaytto-dynaamisesti-ladatun-sisallon-kanssa/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>Ajax:in alkeet jQueryn avulla</title>
		<link>http://gfx.fi/2010/06/ajaxin-alkeet-jqueryn-avulla/</link>
		<comments>http://gfx.fi/2010/06/ajaxin-alkeet-jqueryn-avulla/#comments</comments>
		<pubDate>Tue, 15 Jun 2010 09:36:08 +0000</pubDate>
		<dc:creator>Gfx.fi</dc:creator>
				<category><![CDATA[Site building]]></category>
		<category><![CDATA[javascript]]></category>
		<category><![CDATA[jquery]]></category>

		<guid isPermaLink="false">http://gfx.fi/?p=2196</guid>
		<description><![CDATA[Ajax-termiltä ei ole voinut välttyä varmasti yksikään, joka edes millään muotoa on harrastanut web-sivujen tekoa. Tässä oppaassa tutustumme Ajaxin alkeisiin, teemme yksinkertaisen demosivun ja päivitämme sen sisältöä dynaamisesti JavaScriptin avulla.]]></description>
			<content:encoded><![CDATA[<p><strong>Ajax-termiltä ei ole voinut välttyä varmasti yksikään, joka edes millään muotoa on harrastanut web-sivujen tekoa. Tässä oppaassa tutustumme Ajaxin alkeisiin, teemme yksinkertaisen demosivun ja päivitämme sen sisältöä dynaamisesti JavaScriptin avulla.</strong></p>
<p><a href="http://gfx.fi/wordpress/matsku/artikkeli-2196/index.html">Katso demo</a><a href="http://gfx.fi/wordpress/wp-content/uploads/2010/06/ajaxin_alkeet_jqueryn_avulla.zip"><br />
Lataa tiedostot</a></p>
<p>Monille ensimmäinen kosketus dynaamisten sivujen rakentamiseen on PHP:n <a href="http://php.net/manual/en/function.include.php">include</a>-ominaisuus jolla HTML-sivu voidaan koostaa useammasta pienemmästä kappaleesta. Näin esimerkiksi sivun navigointia ei tarvitse ei tarvitse toistaa HTML-koodissa uudestaan joka sivulla, vaan se voidaan hakea yhdestä tiedostosta joka kerta.</p>
<p>Tänä päivänä sivulle voi helposti  tuoda sisältöä myös sivun latauksen jälkeen. Tähän käytetään <a href="http://fi.wikipedia.org/wiki/Ajax_(ohjelmointi)" target="_blank"> AJAX-tekniikkaa</a>, joka mahdollistaa sivun sisällön päivittämisen ilman,  että koko sivu ladataan uudelleen.</p>
<p>Käytän esimerkeissä <a href="http://jquery.com/">jQuery</a> JavaScript-kirjastoa, joka harmonisoi mukavasti selainten erilaisen käyttäytymisen JavaScriptin kanssa, sekä helpottaa ja nopeuttaa kaiken kaikkiaan koodin kirjoittamista.</p>
<p>Tehdään alkuun yksinkertainen mallisivu, jolla on vain pieni navigointi ja yksi div-elementti, johon dynaaminen sisältö ladataan. Ei mitään liian jännää:</p>
<pre class="brush: xml;">
&lt;h1&gt;Otsikko&lt;/h1&gt;

&lt;ul&gt;
 &lt;li&gt;&lt;a id=&quot;etusivu&quot; href=&quot;index.html&quot;&gt;Etusivu&lt;/a&gt;&lt;/li&gt;
 &lt;li&gt;&lt;a id=&quot;uutiset&quot; href=&quot;uutiset.html&quot;&gt;Uutiset&lt;/a&gt;&lt;/li&gt;
 &lt;li&gt;&lt;a id=&quot;yhteystiedot&quot; href=&quot;yhteystiedot.html&quot;&gt;Yhteystiedot&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;div id=&quot;sisalto&quot;&gt;
 &lt;h2&gt;Etusivun jutut&lt;/h2&gt;
 &lt;p&gt;Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua...&lt;/p&gt;
&lt;/div&gt;
</pre>
<p>Seuraavaksi voimme tehdä navigointia vastaavat sisältöosiot omiin tiedostoihinsa:</p>
<h3>uutiset.html</h3>
<pre class="brush: xml;">
&lt;h2&gt;Uutiset&lt;/h2&gt;

&lt;p&gt;Päivän tärkeimmät tapahtumat.&lt;/p&gt;
</pre>
<h3>yhteystiedot.html</h3>
<pre class="brush: xml;">
&lt;h2&gt;Yhteystiedot&lt;/h2&gt;

&lt;p&gt;Osoite, puhelinnumero yms...&lt;/p&gt;
</pre>
<p>Lisää vielä seuraava rimpsu sivusi <strong>head</strong>-osioon:</p>
<pre class="brush: xml;">
&lt;script src=&quot;http://www.google.com/jsapi&quot;&gt;&lt;/script&gt;
</pre>
<p>Edellinen koodinpätkä mahdollistaa jQueryn käytön suoraan Googlen palvelimelta, joten sinun ei tarvitse asentaa kirjastoa välttämättä itsellesi.</p>
<p>Nyt meillä on kaikki tarvittava sisältö ja voimme alkaa rakentamaan JavaScriptiä, joka hoitaa sisällön hakemisen <strong>#sisalto</strong>-diviin kun käyttäjä klikkaa navigoinnin linkkiä. Käytämme jQueryn <a href="http://api.jquery.com/load/">.load()</a>-metodia, jonka syntaksi on hyvin yksinkertainen:</p>
<pre class="brush: xml;">
// Ladataan jQuery Googlen palvelimelta ja ajetaan JS vasta kun
// koko dokumentti on latautunut.
google.load(&quot;jquery&quot;, &quot;1.4.2&quot;);
google.setOnLoadCallback(function() {

	// Kun Uutiset-linkkiä klikataan:
	$('#uutiset').click( function() {

		// Lataa uutiset.html-tiedoston sisältö 'sisalto'-divin sisään.
		// Samalla vanha sisältö pyyhkiytyy pois.
		$('#sisalto').load('uutiset.html');

		// Lopuksi estämme selainta turhaan seuraamasta linkkiä
		// klikattuun osoitteeseen.
		return false;

	});

	// Toistetaan sama temppu yhteystiedoille
	$('#yhteystiedot').click( function() {
		$('#sisalto').load('yhteystiedot.html');
		return false;
	});

});
</pre>
<p>Tällä hetkellä emme ole vielä tehneet mitään etusivulle vievälle linkille ja tässä yksinkertaisessa esimerkissä kaikki toimii jo nyt ok, mutta voimme ladata myös etusivun sisältöosuuden uudestaan etusivulle.</p>
<pre class="brush: xml;">
	// Ladataan etusivun sisällöt takaisin näkyviin ilman
	// koko sivun uudelleen päivittämistä
	$('#etusivu').click( function() {
		$('#sisalto').load('index.html #wrapper');
		return false;
	});
</pre>
<p>Syntaksi on hiukan muuttunut tällä kertaa. Koska etusivun jutuille ei ole olemassa omaa erillistä HTML-tiedostoaan, vihreiden arvojen kunniaksi kierrätämme index.html-tiedoston uusiokäyttöön, mutta otamme siitä vain tarvitun osan, eli sisällön:</p>
<pre class="brush: xml;">
$('#sisalto').load('index.html #wrapper');
</pre>
<p>Jos yrittäisimme käyttää edellisten esimerkkien koodia ja lataisimme vain suoraan #sisalto-divin vanhan #sisalto-divin sisään tapahtuisi aika epätoivottu reaktio:</p>
<pre class="brush: xml;">
&lt;div id=&quot;sisalto&quot;&gt;
 &lt;div id=&quot;sisalto&quot;&gt;
 &lt;h2&gt;Etusivun jutut&lt;/h2&gt;
 &lt;p&gt;Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua...&lt;/p&gt;
 &lt;/div&gt;

&lt;/div&gt;
</pre>
<p>Koska <a href="http://mashable.com/wp-content/uploads/2009/03/yo-dawg-yo-yos.jpg">Yo Dawg</a>-efekti ei ole tavoitteissamme, lisäämme alkuperäiseen index.html-tiedostoon ylimääräisen wrapperin heti #sisalto-divin jälkeen. Ylimääräisen HTML:n lisääminen ei ole kovin elegantti ratkaisu, mutta jokainen voi kotitehtävänä miettiä, miten edellä esitetty ongelma kierretään tyylikkäämmin.</p>
<p>Valmiin demon voit katsastaa <a href="http://gfx.fi/wordpress/matsku/artikkeli-2196/index.html">täältä</a>.</p>
<p><a href="http://gfx.fi/wordpress/wp-content/uploads/2010/06/ajaxin_alkeet_jqueryn_avulla.zip">Lataa tiedostot</a></p>
]]></content:encoded>
			<wfw:commentRss>http://gfx.fi/2010/06/ajaxin-alkeet-jqueryn-avulla/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Savalanche &#8211; sosiaalisen median verkkokauppa</title>
		<link>http://gfx.fi/2010/05/savalanche-sosiaalisen-median-verkkokauppa/</link>
		<comments>http://gfx.fi/2010/05/savalanche-sosiaalisen-median-verkkokauppa/#comments</comments>
		<pubDate>Sun, 23 May 2010 18:30:22 +0000</pubDate>
		<dc:creator>Gfx.fi</dc:creator>
				<category><![CDATA[Digiala]]></category>
		<category><![CDATA[verkkokauppa]]></category>

		<guid isPermaLink="false">http://gfx.fi/?p=2128</guid>
		<description><![CDATA[Saimme ainutlaatuisen tilaisuuden tutustua tulevaan suomalaiseen web-innovaatioon ja henkilöihin sen taustalla. Savalanche on uudenlainen verkkokauppakonsepti, joka menee sinne missä ihmiset ovat. Lue miten Savalanche saattaa mullistaa tulevaisuuden verkkokauppamaailman.]]></description>
			<content:encoded><![CDATA[<p><strong>Saimme ainutlaatuisen tilaisuuden tutustua tulevaan suomalaiseen web-innovaatioon ja henkilöihin sen taustalla. Savalanche on uudenlainen verkkokauppakonsepti, joka menee sinne missä ihmiset ovat. Lue miten Savalanche saattaa mullistaa tulevaisuuden verkkokauppamaailman.</strong></p>
<h2>Mikä Savalanche?</h2>
<p>Savalanche on uudenlainen verkkokauppapalvelu, joka rakentuu  Internetin sosiaalisen median palveluiden päälle &#8211; <em>tai oikeastaan niiden  sisälle</em>. Savalanchessa kuka tahansa voi perustaa kaupan, jopa ilman  omia tuotteita. Kaupassa voi nimittäin myydä muiden tahojen maahantuomia tai valmistamia  tuotteita, näin esimerkiksi suositun blogin tai keskustelupalstan  ylläpitäjä voi helposti ansaita lisätuloja.</p>
<p>Savalanche on periaatteessa tavanomainen täyden palvelun  verkkokauppapalvelu, jolla yritys voi viedä tuotteensa myyntiin  web-sivuilleen ja esim. Facebookin kaltaisiin sosiaalisiin medioihin. Juju piileekin siinä, että Savalanchea  hyödyntäen kuka tahansa voi rakentaa laajan, monikanavaisen verkkokauppaverkoston. Lisäksi palvelulla voidaan myös kerätä varoja esim. hyväntekeväisyyteen tai  urheiluseuroille.</p>
<h2>Kolme muskettisoturia</h2>
<p>Savalanche palvelun takana ovat kolme suomalaista IT-alan konkaria, jotka aikaisemmassa elämässään ovat olleet  suunnittelemassa, rakentamassa ja myymässä suuria tietojärjestelmiä ja ohjelmistoja matkapuhelinteollisuuden tarpeisiin. He muodostavat yhdessä <a href="http://vuole.fi/" target="_blank">Vuole Digitalin</a>.</p>
<p>Apuja kehitystyöhön on löytynyt omien alojensa asiantuntijayrityksistä. Palveluun uskovat muutkin, sillä tuotekehitystä ovat olleet tukemassa mm. <a href="http://www.tekes.fi" target="_blank">Tekes</a> ja <a href="http://www.finnvera.fi" target="_blank">Finnvera</a>.</p>
<h2>Kuinka palvelu erottuu tavanomaisista verkkokaupoista?</h2>
<p>Savalanchessa verkkokaupan voi perustaa ilman ainuttakaan omaa  tuotetta. Kuulostaa ehkä kummalliselta, mutta tämä on juuri se todellinen oivallus, sillä myymällä tuotteita muiden valikoimista voi ansaita provisiota  ilman omaa varastoa tai muuta päänvaivaa. Sen lisäksi käyttäjät voivat myydä myös omia tuotteitaan kuten normaalissa verkkokaupassa. Laajuudeltaan tuotevalikoima voi olla muutamasta kappaleesta satoihin.</p>
<p>Kuulostaisiko ura verkkokauppiaana hyvälle? Kohta se on helppoa kuin heinänteko. Savalanche on rakennettu toimimaan yhdessä  Facebookin kaltaisten sosiaalisen median palveluiden kanssa. Kuka tahansa voi perustaa verkkokaupan  Facebook-sivuilleen muutamassa minuutissa.</p>
<p>Savalanchen avulla käyttäjät voivat halutessaan kerätä rahaa myös  hyväntekeväisyyteen tai yhdistyksille, urheiluseuroille, koululuokille  jne. Tärkeän työn tukeminen on entistä helpompaa.</p>
<p>Savalanche on muutamasta markkinoilla olevasta <strong> social shopping -palveluista</strong> poiketen voimakkaammin <strong>social selling  -palvelu</strong>, jossa ihmiset luovat ystäväpiiriään ja samanhenkisiä ihmisiä kiinnostavia kauppoja ja valikoimia <strong>crowdsourcing  -hengessä</strong>.</p>
<h2>Savalanche käytännössä</h2>
<p>Verkkokaupan perustaminen omille sivuilleen, Facebookiin tai blogiin  tapahtuu <a href="http://www.savalanche.com" target="_blank">Savalanche.com</a>:ssa, tai suoraan Savalanchen  Facebook-sovelluksessa. Kaupan perustaminen on täysin  ilmaista ja vaikeustaso on samaa tasoa web-sähköpostipalveluun  rekisteröitymisen kanssa. Tämän jälkeen käyttäjälle alkaa kertyä myyntituottoja  sitä mukaa, kun hänen kaupastaan ostetaan tuotteita.</p>
<p>Savalanchen kautta esim. maahantuojat voivat listata  tuotevalikoimansa tai varastonsa sisällön palveluun, jolloin kuka  tahansa kiinnostunut voi myydä heidän tuotteitaan perustamassaan  verkkokaupassa. Senkin pitäisi olla lupauksen mukaan nopeaa, helppoa ja ilmaista.</p>
<h2>Kenelle Savalanche on suunnattu?</h2>
<p>Savalanchen pitäisi soveltua periaatteessa kaikille. Palvelusta hyötyvät niin maahantuojat ja tuotteiden valmistajat kuin  kuka tahansa Internetin aktiivi. Olennaisinta on tietysti se miten paljon lukijoita tai  kavereita on palvelussa, sillä tuottomahdollisuudet kasvavat sen mukaan.</p>
<p>Helpotusta pitäisi tulla myös nuoremmalle väelle ja varsinkin heidän vanhemmilleen. Urheiluseurat, koululuokat, yhdistykset ynnä muut voivat hankkia lisävaroja tai  korvata perinteisen (ja usein kovin turhauttavan) ovelta ovelle -myynnin keskittämällä varainkeruun  Savalanchen avulla webbiin.</p>
<p>Savalanchesta on iloa myös tiskin toiselle puolelle. Selailemalla kiinnostavaa blogia tai  ystävien kauppoja valikoimat vastaavat myös todennäköisesti omia tarpeita ja kiinnostuksen kohteita. Esimerkiksi  maastopyöräilyaiheisen keskustelupalstan ylläpitäjällä on  todennäköisesti erittäin hyvät valmiudet valita verkkokauppaansa  sellaisia tuotteita, jotka kiinnostavat myös hänen lukijoitaan.</p>
<h2>Kohti tulevaisuutta</h2>
<p>Kuuleman mukaan Savalanche käynnistyy suljettuna pilottina kesän 2010 aikana. Palveluun tehdään silloin viimeiset säädöt ja varmistetaan, että  luvattu helppokäyttöisyys ja selkeys toteutuvat myös käytännössä. Savalanchen pitäisi aueta kaikille suomalaisille syksyllä 2010. Gfx.fi toivottaa onnea uudelle lupaavalle palvelulle ja sen kehitystiimille. Jäämme odottamaan jännityksellä tulevaa syksyä.</p>
<p>P.S. Palvelun kehittäjät tarvitsevat kesän 2010 pilottiin vielä muutaman beta-testaajan. Heräsikö kiinnostus? Lisätietoja saat  sähköpostilla osoitteesta info@savalanche.com.</p>
]]></content:encoded>
			<wfw:commentRss>http://gfx.fi/2010/05/savalanche-sosiaalisen-median-verkkokauppa/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Opiskelemaan digialalle!</title>
		<link>http://gfx.fi/2010/05/opiskelemaan-digialalle/</link>
		<comments>http://gfx.fi/2010/05/opiskelemaan-digialalle/#comments</comments>
		<pubDate>Sun, 02 May 2010 15:19:50 +0000</pubDate>
		<dc:creator>Gfx.fi</dc:creator>
				<category><![CDATA[Digiala]]></category>
		<category><![CDATA[opiskelu]]></category>

		<guid isPermaLink="false">http://gfx.fi/?p=1990</guid>
		<description><![CDATA[Hyvä koulutus kehittää ammattitaitoa ja osaamista. Takataskussa komeileva tutkinto parantaa myös mahdollisuuksia työmarkkinoilla. Gfx päättikin selvittää missä kaikkialla Suomessa järjestetään digialaan liittyvää koulutusta. Lista ei valitettavasti ole kaiken kattava, vaikka saimmekin koottua sisältöä ihan mukavasti.]]></description>
			<content:encoded><![CDATA[<p><strong>Hyvä koulutus kehittää ammattitaitoa ja osaamista. Takataskussa komeileva tutkinto parantaa myös mahdollisuuksia työmarkkinoilla. Gfx päättikin selvittää missä kaikkialla Suomessa järjestetään digialaan liittyvää koulutusta. Lista ei valitettavasti ole kaiken kattava, vaikka saimmekin koottua sisältöä ihan mukavasti.<br />
</strong></p>
<p>Listalle on valittu 3. asteen opintopaikkoja ympäri Suomen &#8211; sisältäen ammattikorkeakouluja ja yliopistoja. Listalta löytyy mm. ohjelmointiin, graafiseen suunnitteluun ja viestintään liittyviä koulutusohjelmia. Lista on aakkosjärjestyksessä. Koulut ovat itse toimittaneet esittelymateriaalin koulutusohjelmistaan.</p>
<h2>Jyväskylän ammattikorkeakoulu</h2>
<p>Jyväskylän ammattikorkeakoulun Teknologiayksikössä olevalla ICT-tulosalueella on<br />
kolme koulutusohjelmaa, joissa koulutetaan tietoverkkoihin liittyvää osaamista:</p>
<ul>
<li>Mediatekniikan koulutusohjelma, jossa opiskellaan mm. verkkomultimediaa</li>
<li>Ohjelmistotekniikan koulutusohjelma, jossa aiheina ovat mm. web- ja mobiiliohjelmointi</li>
<li>Tietotekniikan koulutusohjelma, jossa keskitytään tietoverkkojen suunnittelun ja ylläpidon koulutukseen.</li>
</ul>
<p><a href="http://www.jamk.fi/koulutus/tutkinnot/nuoret/tekniikanjaliikenteenala" target="_blank">Lisätietoja koulutusohjelmista</a></p>
<h2>Kymenlaakson ammattikorkeakoulu</h2>
<p>Alla tietoa Kymenlaakson ammattikorkeakoulun digialan koulutuksesta sekä sitä läheltä liippaavista suuntautumisvaihtoehdoista.</p>
<h3>Viestintä</h3>
<p>Kymenlaakson ammattikorkeakoulu tarjoaa viestinnän koulutusohjelmassa av-median, digitaalisen median sekä graafisen suunnittelun koulutusta.</p>
<ul>
<li>Av-median suuntautuminen tuottaa osaajia audiovisuaalisen alan toteutus- ja suunnittelutehtäviin.</li>
<li>Monipuolinen verkko-osaajien suuntautumisvaihtoehto on Digitaalinen media, jossa suunnitellaan ja toteutetaansisältöjä 3D-, peli-, web-, ja mobiiliympäristöihin. Digitaalisen median sv:ssa opiskellaan muun muassa käyttöliittymäsuunnittelua, e-markkinointia, hakukoneoptimointia, sisällöntuotantoa, web-ohjelmointia sekä mobiili- ohjelmointia. Samoin tarjolla on pelituotantoon liittyvä opinto-osio. Sen painopiste on pelien suunnittelussa, konseptoinnissa, käsikirjoittamisessa sekä visuaalisten sisältöjen tuotannossa.</li>
<li>Graafinen suunnittelija hallitsee kuvallisen viestinnän eri medioissa.</li>
</ul>
<p><a href="http://www.kyamk.fi/Koulutus/AMK-tutkinnot/AMK%2C%20nuoret/Kulttuuriala/Viestint%C3%A4" target="_blank">Lisätietoja koulutusohjelmasta</a></p>
<h3>Tietotekniikka</h3>
<p>KyAMK:n tietotekniikan koulutusohjelman ohjelmistotekniikan suuntautumisvaihtoehdon opiskelijat sijoittuvat valmistumisensa jälkeen ohjelmistojen ja web-palvelujen kehitystehtäviin. Koulutus keskittyy ohjelmointiin ja tapahtuu osittain Ohjelmistoakatemiassa oikeissa ohjelmistoprojekteissa. Eritysalana KyAMK:ssa on valinnainen peliohjelmoinnin koulutus (18 op), jonka toteutukseen osallistuu peliteollisuus.</p>
<p><a href="http://www.kyamk.fi/Koulutus/AMK-tutkinnot/AMK%2C%20nuoret/Tekniikan%20ja%20liikenteen%20ala/Tietotekniikka" target="_blank">Lisätietoja koulutusohjelmasta</a></p>
<h2>HAAGA-HELIA AMK</h2>
<p>HAAGA-HELIAsta löytyy mm. tietojenkäsittelyn koulutusohjelman opetusta.</p>
<p>Tässä linkki suomenkieliseen <a href="http://www.haaga-helia.fi/fi/koulutus/amk-tutkinto/tietojenkasittelyn-ko-helsinki/index_html" target="_blank">opetussuunnitelmaan</a> ja tässä linkki <a href="http://tiko.haaga-helia.fi/" target="_blank">opiskelijatöiden esittelysivustoon</a>, jota kehitetään parasta aikaa.</p>
<h2>Vaasan ammattikorkeakoulu</h2>
<p>Vaasan ammattikorkeakoulussa (Vamkissa) on tarjolla mm. tietojenkäsittelyn ja tietotekniikan koulutusohjelmat.</p>
<p>Vaasan ammattikorkeakoulussa löytyy alan koulutusta  tietojenkäsittelyn koulutusohjelman muodossa. Koulutusohjelmassa valmistutaan ict-alan tradenomiksi ja digitaaliset palvelut on yksi suuntautumisvaihtoehdoista. Tietojenkäsittelyn koulutusohjelman tiedot löydät <a href="http://www.puv.fi/fi/koulutus/nuortenkoulutus/koulutusohjelmat/tietojenkasittely" target="_blank">täältä</a>.  Vastaava ruotsinkielinen ohjelma on <em>informationsbehandling</em>, josta  löytyvät tiedot <a href="http://www.puv.fi/fi/koulutus/nuortenkoulutus/koulutusohjelmat/informationsbehandling" target="_blank">täältä</a>.</p>
<p>Digitaalisen palvelun sisältö: Digitaaliset palvelut: graafisen tuotannon työkalut, sisällöntuotanto  verkossa, Flash ja animaatiot, multimedian tuotannon työkalut, videokuvaus ja  editointi, 3d-mallinnus ja animaatiot.</p>
<p><a href="http://www.puv.fi/fi/koulutus/nuortenkoulutus/koulutusohjelmat/tietotekniikka" target="_blank">Tietotekniikkaa</a> on tarjolla meillä suomenkielisessä koulutusohjelmassa  ja englanninkielellä <a href="http://www.puv.fi/fi/koulutus/nuortenkoulutus/koulutusohjelmat/informationtechnology" target="_blank">Information Technology -koulutusohjelmassa</a>.</p>
<h2>Hämeen ammattikorkeakoulu</h2>
<p>Alta löydät Hämeen ammattikorkeakoulun tietojenkäsittelyn ja liiketalouden<br />
koulutusohjelmien tiedot ja linkit.</p>
<p><em>Kaikki käyttävät nettiä, me teemme sitä!</em><br />
Opiskele <a href="http://www.hamk.fi/tietojenkasittely" target="_blank">tietojenkäsittelyn tradenomiksi </a>Hämeenlinnassa Hämeen ammattikorkeakoulussa.</p>
<p><em>Asiakastyytyväisyys, innovatiivisuus ja yhteistyökyky!</em><br />
Opiskele <a href="http://www.hamk.fi/liiketalous" target="_blank">liiketalouden tradenomiksi</a> Hämeenlinnassa Hämeen ammattikorkeakoulussa. Kurssisisältönä mm. Digital Enterprise 30 op.</p>
<h2>Tampereen yliopisto</h2>
<p>Tampereen yliopiston informaatiotieteiden tiedekunnassa on mm. seuraavia koulutuksia:</p>
<p><a href="http://www.uta.fi/opiskelijaksi/oppiaineet/inme.html" target="_blank">Interaktiivisen median maisterikoulutus</a></p>
<p><a href="http://www.uta.fi/opiskelijaksi/oppiaineet/tvop.html" target="_blank">Tietojenkäsittelytieteiden koulutusohjelma</a><em>:</em><br />
Koulutusohjelmassa mm. käyttöliittymien ohjelmistokehitykseen tai vuorovaikutteiseen teknologiaan syventävät maisterikoulutukset</p>
<h2>Vaasan yliopisto</h2>
<p><a href="http://www.uwasa.fi/giga" target="_blank">Teknisen viestinnän koulutusohjelma</a>.</p>
<p>Vuonna 1996 perustetun Teknisen viestinnän koulutusohjelman perusajatuksena on se, että viestintätieteiden ja tietotekniikan opiskelijat opiskelevat yhdessä koko koulutusohjelman ajan, vaikka he kuuluvatkin eri tiedekuntiin (filosofiseen ja teknilliseen) ja eri pääaineisiin.</p>
<p>Koulutusohjelman opiskelijoilla on yhteiset perus- ja aineopinnot sekä syventävät opinnot. Muut opinnot, kuten sivuaineet, suoritetaan oman<br />
oppiaineen ja tiedekunnan vaatimusten mukaan. Myös tutkinnot ovat tiedekuntakohtaisia. Koulutusohjelmasta valmistuu humanististen tieteiden kandidaatteja, filosofian maistereita, kauppatieteiden kandidaatteja ja kauppatieteiden maistereita.</p>
<p>Koulutusohjelmasta valmistuneet opiskelijat työskentelevät mm. www-toimittajina, www-ohjelmoijina, teknisinä viestijöinä (projektipäälliköinä erilaisissa dokumentointiprojekteissa, visuaalisina suunnittelijoina, teknisinä kirjoittajina jne.).</p>
<h2>Satakunnan ammattikorkeakoulu</h2>
<p>Satakunnan ammattikorkeakoulussa (SAMK) liiketoiminnan ja kulttuurin alalla on kaksi koulutusohjelmaa, jossa käsitellään verkossa tapahtuvaa suunnittelu- ja tuotantotyötä:</p>
<p><a href="http://www.samk.fi/viestinta" target="_blank">Viestintä</a><br />
<a href="http://www.samk.fi/kuvataide" target="_blank">Kuvataide</a></p>
<p>Koulutusohjelmien kuvaukset löytyvät yllä olevista linkeistä.</p>
<h2>Oulun ammattikorkeakoulu</h2>
<p>Alaan liittyviä koulutusohjelmia:</p>
<p><a href="http://www.oamk.fi/hakijalle/opas/koulutusohjelmat_fi/kultt/index.php?sivu=viestinta" target="_blank">Viestintä</a><br />
<a href="http://www.oamk.fi/hakijalle/opas/koulutusohjelmat_fi/liike/index.php?sivu=tietojenkasittely" target="_blank">Tietojenkäsittely</a></p>
<p>Koulutusohjelmien kuvaukset löytyvät yllä olevista linkeistä.</p>
<h2>Aalto-yliopiston taideteollinen korkeakoulu</h2>
<p><a href="http://www.taik.fi/osastot/visuaalinen_kulttuuri/opiskelu/visuaalisen_kulttuurin_osaston_koulutusohjelmat/graafinen_suunnittelu.html" target="_blank">Graafinen suunnittelu</a>:<br />
Opetusalueet kattavat graafisen viestinnän kaikki mediamuodot ja levityskanavat. Opiskelija saa valmiudet toimia erilaisissa alan työtehtävissä, kuten suunnittelijana, kuvittajana, taittajana, kirjagraafikkona, pakkaussuunnittelijana, mainosgraafikkona, informaatiosuunnittelijana sekä av- ja animaatiosuunnittelijana. Maisterin tutkinto kehittää valmiuksia konseptisuunnitteluun ja art director -tehtäviin sekä luo mahdollisuuksia tutkimuksen tekemiseen ja jatko-opintoihin siirtymiseen.</p>
<p><em>New Media</em> ja <em>Sound Design in New Media</em><br />
(+ suuntautumisvaihtoehtona uusi <em>Game Design and Production</em>):<br />
<a href="http://www.taik.fi/mela/" target="_blank">http://www.taik.fi/mela/</a> ja <a href="http://mlab.taik.fi/" target="_blank">http://mlab.taik.fi/</a></p>
<p>Uuden median opetukseen ja tutkimukseen erikoistuneen Medialaboratorion opetusaloja ovat uusmedian sisältötuotanto, &#8216;tiedon design&#8217;, vuorovaikutteinen kerronta, virtuaaliympäristöt sekä tulevaisuuden mediaratkaisut.</p>
<h2>Oulun Yliopisto</h2>
<p>Oulun yliopistossa selkeiten digimedian kenttään osuvat seuraavat:</p>
<p><a href="http://www.ee.oulu.fi/Opiskelijaksi/Koulutusohjelmat/Tietotekniikka" target="_blank">Tietotekniikka</a><br />
<a href="http://www.tol.oulu.fi/index.php?id=14" target="_blank">Tietojenkäsittelytieteiden koulutusohjelma</a></p>
<h2>Kajaanin ammattikorkeakoulu</h2>
<p>Kajaanin ammattikorkeakoulussa on Suomen ainoa korkeakoulututkintoon tähtäävä koulutus pelikehityksen alalle. Lisätietoa koulutuksesta löytyy osoitteesta: <a href="http://www.kajak3d.com" target="_blank">http://www.kajak3d.com</a></p>
<h2>Laurea-ammattikorkeakoulu</h2>
<p><strong>Digitaalisen median koulutusohjelma</strong></p>
<p>Tietojenkäsittelyn koulutusohjelmasta valmistutaan tradenomiksi. Koulutus antaa valmiudet toimia laaja-alaisesti tietojenkäsittelytehtävissä. Mahdollisia tehtäviä ovat mm. verkkosivujen suunnittelu, ohjelmistokehitystyö, käytettävyystutkimus, visuaalinen suunnittelu, yritysviestinnän teknisten ratkaisujen kehittäminen.</p>
<p>Opintoihin kuuluu pakollisena osana niin tietojenkäsittelyn, liiketalouden kuin viestinnänkin perusopinnot. Verkkosivujen kehittämisen perusosaamista syvennetään ohjelmointiosaamisen sekä käyttäjäkeskeisen käyttöliittymä- ja ohjelmistosuunnittelun alueille. Osaaminen syvenee myös visuaalisen suunnittelun ja erilaisten mediaelementtien käytön osalta.</p>
<h2>Eikä tässä kaikki&#8230;</h2>
<p>Yllä oleva lista on vain pieni osa mahdollisista opiskelupaikoista Suomen rajojen sisäpuolella. Jos huomaat tutun oppilaitoksen tai koulutusohjelman puuttumisen listalta niin lisää sen tiedot kommentin yhteyteen. Miten on &#8211; Häämöttääkö sinulla edessä opiskeleminen vai joko koulut on käyty?</p>
]]></content:encoded>
			<wfw:commentRss>http://gfx.fi/2010/05/opiskelemaan-digialalle/feed/</wfw:commentRss>
		<slash:comments>7</slash:comments>
		</item>
		<item>
		<title>CSS3 Transitiot &#8211; olemmeko jo perillä?</title>
		<link>http://gfx.fi/2010/04/css3-transitiot-olemmeko-jo-perilla/</link>
		<comments>http://gfx.fi/2010/04/css3-transitiot-olemmeko-jo-perilla/#comments</comments>
		<pubDate>Mon, 26 Apr 2010 18:29:42 +0000</pubDate>
		<dc:creator>Gfx.fi</dc:creator>
				<category><![CDATA[Site building]]></category>
		<category><![CDATA[css]]></category>
		<category><![CDATA[css3]]></category>

		<guid isPermaLink="false">http://gfx.fi/?p=2056</guid>
		<description><![CDATA[Olen jakanut tämän aiheen kahteen artikkeliin. Ensimmäisessä artikkelissa käsittelen CSS3 Transitioita yleisesti. Lisäksi esittelen perustason käyttötapauksia muutamien CSS-arvojen avulla, joita voi hyödyntää CSS3-transitioita ja -transformaatioita luotaessa.]]></description>
			<content:encoded><![CDATA[<p><strong>CSS3 on ollut olemassa jo &#8220;jonkin aikaa&#8221; (<a title="Introduction to CSS3" href="http://www.w3.org/TR/css3-roadmap/">esiteltiin ensi kertaa 9 vuotta sitten</a>). Kaikesta huolimatta, CSS3:sta on ollut mahdollista käyttää yleisesti vain noin kahden vuoden ajan.</strong></p>
<p>CSS3-transitiot esiteltiin käytännössä <a title="CSS Animation" href="http://webkit.org/blog/138/css-animation/">loppuvuodesta 2007</a> Safarin toimesta. Tuohon aikaan, niihin viitattiin termillä &#8220;CSS Animations&#8221;, mutta terminologia muuttui Safarin esitellessä omat selainkohtaiset ominaisuutensa, joita nykyään kutsutaan <a title="CSS Animations" href="http://webkit.org/blog/324/css-animation-2/">CSS-animaatioiksi</a>.</p>
<p>Olen jakanut tämän aiheen kahteen artikkeliin. Ensimmäisessä artikkelissa käsittelen CSS3 Transitioita yleisesti. Lisäksi esittelen perustason käyttötapauksia muutamien CSS-arvojen avulla, joita voi hyödyntää CSS3-transitioita ja -transformaatioita luotaessa.</p>
<p>Tämä artikkeli sisältää myös viittauksia erinomaisiin CSS3-artikkeleihin. Joten artikkelin luettuasi, voit niiden avulla päivittää ja parantaa tietouttasi CSS3-transitioista.</p>
<p>Kuten jo totesin, aihe on jaettu kahdeksi artikkeliksi. Ensimmäisen osan nimi on &#8220;CSS3 Transitiot &#8211; olemmeko jo perillä?&#8221;, tarjoten yleisen katselmuksen CSS3-transitioiden tämänhetkiseen tilaan. Toisen osan nimi on &#8220;CSS3 Transitions &#8211; ongelmatilanteet ja ratkaisut&#8221;, joka pureutuu syvemmälle transitioihin ja niiden eroihin eri selainten välillä.</p>
<p>Ensimmäinen artikkeli rakentuu seuraavista osista:</p>
<ul>
<li><a href="#gettingStarted">Kuinka päästä alkuun</a> &#8211; mitä sinulta täytyy löytyä</li>
<li><a href="#theBasicsOfTheBasics">Perusteiden perusteet</a> &#8211; mitä sinun on hyvä tietää transitioista</li>
<li><a href="#theBasics">Perusteet</a> &#8211; mitä sinun täytyy tietää transitioista (demo-osio)</li>
<li><a href="#conclusions">Johtopäätökset</a> &#8211; eli olemmeko jo perillä vai emme?</li>
<li><a href="#resources">Ulkoiset viittaukset</a> &#8211; missä sinun kannattaa vierailla artikkelin luettuasi</li>
</ul>
<h2 id="gettingStarted">Kuinka päästä alkuun</h2>
<p>Alkuun päästäksesi tarvitset ainakin yhden selaimen, joka tukee CSS3-transitioita:</p>
<ul>
<li><a title="Apple Safari Download" href="http://www.apple.com/safari/download/">Apple Safari</a> (tuettuna Safari 3.1:sta ja iPhone OS 2.0:sta lähtien)</li>
<li><a title="Google Chrome Download" href="http://www.google.com/chrome/">Google Chrome</a></li>
<li><a title="Mozilla Firefox 3.7 a" href="http://ftp.mozilla.org/pub/mozilla.org/firefox/nightly/latest-trunk/">Mozilla Firefox 3.7 alpha</a> (tunnetaan myös Minefield:ina)</li>
<li><a href="http://www.opera.com/browser/ title=">Opera 10.5x</a> (tuettuna myös Opera Mobile 10 beta 2)</li>
</ul>
<h3>Entä Internet Explorer?</h3>
<p>Tällä hetkellä on ilmoitettu, että edes Internet Explorer 9 ei tule tukemaan CSS3-transitioita. Paras tuki Internet Explorerin transitioille ja transformaatioille voidaan luoda hyödyntämällä <a href="http://msdn.microsoft.com/en-us/library/ms533014(v=VS.85).aspx">Matrix Filteria</a>.</p>
<p>Lisäksi suosittelen lukemaan artikkelin <a title="Cross-Browser Animated CSS Transforms — Even in IE" href="http://www.useragentman.com/blog/2010/04/05/cross-browser-animated-css-transforms-even-in-ie/">Cross-Browser Animated CSS Transforms — Even in IE</a>, jonka on kirjoittanut <em>Zoltan “Du Lac” Hawryluk</em>. Hän on myös <a title="cssSandpaper – a CSS3 JavaScript Library" rel="external" href="http://www.useragentman.com/blog/csssandpaper-a-css3-javascript-library/">cssSandpaperin</a> luoja.</p>
<h2 id="theBasicsOfTheBasics">Perusteiden perusteet</h2>
<p>Ikävä kyllä CSS3-transitioiden luomiseksi ei ole olemassa vain yhtä sääntöä. Itse asiassa, jokaisella selaimella on oma selainkohtainen tapansa kirjoittaa sääntöjä. Onneksi syötettävien arvojen syntaksi on eri selainten välillä keskenään samanlainen.</p>
<h3>Mihin ominaisuuksiin transitiot vaikuttavat?</h3>
<p>Valtaosa ominaisuuksista tukevat transitioita enkä lähde listaamaan niitä ykistellen. Selainten välillä on kuitenkin joitain eroja ja selkein niistä on tällä hetkellä se, että Firefox 3.7a ei tue ollenkaan transformaatioiden transitiointia.</p>
<h3>Arvot transitioiden luomiseksi</h3>
<p>Transitiot voidaan määritellä maksimissaan neljän eri arvon avulla:</p>
<p><strong>Lyhyt muoto:</strong></p>
<pre class="brush: xml;">
-webkit-transition: property_name duration timing_function delay;
-moz-transition: property_name duration timing_function delay;
-o-transition: property_name duration timing_function delay;
transition: property_name duration timing_function delay;
</pre>
<p>Voit myös määritellä jokaisen arvon yksityiskohtaisesti:</p>
<p><strong>(Kohde)ominaisuus:</strong></p>
<pre class="brush: xml;">
-webkit-transition-property: property_name;
-moz-transition-property: property_name;
-o-transition-property: property_name;
transition-property: property_name;
</pre>
<p><strong>Kesto:</strong></p>
<pre class="brush: xml;">
-webkit-transition-duration: duration;
-moz-transition-duration: duration;
-o-transition-duration: duration;
transition-duration: duration;
</pre>
<p>Kesto (kuten viivekin) voidaan syöttää joko sekunteina (esim. <em>0.5s</em>) tai millisekunteina (esim. <em>500ms</em>). On kuitenkin tärkeää huomata, että ilman määrettä transitio ei toimi laisinkaan.</p>
<p><strong>(Liikkeen) ajoitus-funktio:</strong></p>
<pre class="brush: xml;">
-webkit-transition-timing-function: timing_function;
-moz-transition-timing-function: timing_function;
-o-transition-timing-function: timing_function;
transition-timing-function: timing_function;
</pre>
<p>Käytössä olevat ajoitus-funktiot:</p>
<ul>
<li><a title="Cubic Bezier Timing Function" rel="external" href="http://www.netzgesta.de/dev/cubic-bezier-timing-function.html">cubic-bezier(cp1<sub>x</sub>, cp1<sub>y</sub>, cp2<sub>x</sub>, cp2<sub>y</sub>)</a></li>
<li><em>ease</em> &#8211; sama kuin cubic-bezier(0.25, 0.1, 0.25, 1.0).</li>
<li><em>linear</em> &#8211; sama kuin cubic-bezier(0.0, 0.0, 1.0, 1.0).</li>
<li><em>ease-in</em> &#8211; sama kuin cubic-bezier(0.42, 0, 1.0, 1.0).</li>
<li><em>ease-out</em> &#8211; sama kuin cubic-bezier(0, 0, 0.58, 1.0).</li>
<li><em>ease-in-out</em> &#8211; sama kuin cubic-bezier(0.42, 0, 0.58, 1.0).</li>
</ul>
<p><strong>Viive:</strong></p>
<pre class="brush: xml;">
-webkit-transition-delay: delay;
-moz-transition-delay: delay;
-o-transition-delay: delay;
-transition-delay: delay;
</pre>
<p>Viive (kuten kesto) voidaan syöttää joko sekunteina (esim. <em>0.5s</em>) tai millisekunteina (esim. <em>500ms</em>).</p>
<p>Yleisesti ottaen transitiot kannattaa määritellä oletustason selektorille, ilman pseudo-luokkia. Tämän ansiosta transitio tapahtuu molempiin suuntiin, esimerkiksi vietäessä kursori elementin päälle ja pois elementin päältä.</p>
<p>Muista myös, että joudut syöttämään jokaisen ominaisuuden neljästi saavuttaaksesi kattavan selaintuen. Siksi on melkein aina parasta käyttää lyhyttä muotoa pitääksesi CSS-koodin siistinä.</p>
<h2 id="theBasics">Perusteet</h2>
<p>Tässä vaiheessa on hyvä demonstroida muutamia transitioita. Sinun tulee joko viedä kursori elementin päälle tai klikata elementin alla olevaa painiketta, jotta transitiot toimivat.</p>
<p>Kaikki koodiesimerkit on kirjoitettu jättäen selainkohtaiset määritykset pois tilan säästämiseksi.</p>
<h3>Perus-transitio: Ulottuvuudet ja skaalaaminen</h3>
<p>Aloitan esimerkillä yksinkertaisimmasta transitiosta. Samalla tässä tulee demotuksi, mitä eroa on perusominaisuuksilla width+height sekä scale-transformaatiolla.</p>
<pre class="brush: xml;">
#widthHeight {transition:all 500ms;}
#widthHeight:hover {width:200px; height:200px; line-height:200px;}
#scale {transition:all 500ms;}
#scale:hover {transform:scale(2.0, 2.0);}
</pre>
<div id="widthHeight" class="block">Width + Height</div>
<div id="scale" class="block">Scale</div>
<p>Kuten huomaat, leveys ja korkeus -arvot kasvattavat elementtiä normaalisti, mutta skaalaus vaikuttaa samoin kuin, jos elementti olisi suhteellisesti positioitu. Scale-transformaatiossa origo on keskellä, kun taas leveyttä ja korkeutta säädettäessä origo on vasemmassa yläkulmassa.</p>
<h3>Transitio ajoitus-funktioilla</h3>
<p>Alla on kaksi lohkoa, jotka pyörivät; ensimmäinen pyörii hyödyntäen <em>linear</em> ajoitus-funktiota käyttäen ja toinen käyttää <em>ease</em> ajoitus-funktiota.</p>
<pre class="brush: xml;">
#rotateLinear {position:relative; clear:both; left:0px; transition:all 2500ms linear;}
#rotateEasing {position:relative; clear:both; left:0px; transition:all 2500ms ease;}
#rotateLinear:target {left:200px; transform:rotate(360deg);}
#rotateEasing:target {left:200px; transform:rotate(360deg);}
</pre>
<div class="iframe-wrapper">
  <iframe src="http://gfx.fi/wordpress/matsku/artikkeli-2056" frameborder="0" scrolling="no" style="height:290px;width:585px;">Please upgrade your browser</iframe>
</div>

<p>Kuten luultavasti huomasit, elementtien liike oli keskenään erilaista, mutta itse transitio päättyy samaan aikaan (2500ms jälkeen).</p>
<h3>Transitio viiveellä</h3>
<p>Viiveestä on joskus hyötyä. Ja viiveen käyttöönottaminen transitioissa on vaivatonta:</p>
<pre class="brush: xml;">
#bgColorDelay {background-color:#12142B; transition:background-color 500ms linear 800ms;}
#bgColorDelay:hover {background-color:#336699;}
</pre>
<div id="bgColorDelay" class="block">800ms delay</div>
<h3>Peräkkäiset transitiot</h3>
<p>Useita transitioita voidaan ajaa myös peräkkäin. Tälle ei ole olemassa mitään oletusarvoa, mutta &#8220;ketju&#8221; voidaan saada aikaiseksi hyödyntäen viivettä:</p>
<pre class="brush: xml;">
#widthHeightOpacity {transition:width 500ms, height 500ms linear 500ms, opacity 500ms linear 1000ms;}
#widthHeightOpacity:hover {width:200px; height:200px; opacity:0.1;}
</pre>
<div id="widthHeightOpacity" class="block">w+h+opacity</div>
<p>Tässä on kuitenkin yksi miinus: transitio esitetään samassa järjestyksessä riippumatta siitä viedäänkö kursori elementin päälle vai pois sen päältä. Useimmissa tapauksissa, siinä ei ole mitään järkeä. Siksipä meidän tulee määritellä transitiot (aikaisempiin esimerkkeihin nähden) käänteisessä järjestyksessä:</p>
<pre class="brush: xml;">
#widthHeightOpacity {transition:width 500ms 1000ms, height 500ms linear 500ms, opacity 500ms linear;}
#widthHeightOpacity:hover {width:200px; height:200px; opacity:0.1; transition:width 500ms, height 500ms linear 500ms, opacity 500ms linear 1000ms;}
</pre>
<h3>Muita transitioita?</h3>
<p>Mahdollisesti on asioita, joita en tässä vaiheessa ymmärrä mainita. Mutta esimerkkien pääpaino on osoittaa kuinka yksinkertaista transitioiden käyttöönottaminen on (vaikka ne vaativatkin hieman lisätyötä kattavan selaintuen saavuttamiseksi).</p>
<h2 id="conclusions">Johtopäätökset</h2>
<p>Olemmeko jo perillä? Kyllä, olemme ainakin yli puolen matkan. Transitiot ovat yleisesti ottaen todella tyylikkäitä, kunhan niitä käyttää oikeissa tilanteissa.</p>
<p>Olen kuitenkin henkilökohtaisesti hieman epäileväinen CSS3-transitioiden suhteen: tässä vaiheessa niihin ei voi täysin luottaa ja lisäksi ne vaativat läpikohtaista selaintestaamista. Tulen käsittelemään näitä ongelmakohtia seuraavassa osassa. Lisäksi tulen vertailemaan CSS3-transitioita Javascript-kirjastojen (tässä tapauksessa jQuery) tarjoamien animaatioiden välillä.</p>
<p>Jos kuitenkin olet tekemisissä alustan kanssa, joka hyödyntää puhtaasti WebKit:iä (kuten iPhone tai Adobe AIR) niin älä jää ihmettelemään, vaan ota kaikki ilo irti sekä CSS3-transitioista ja Webkit-animaatioista.</p>
<h2 id="resources">Ulkoiset viittaukset</h2>
<p>Alla on listattuna hyviä viitteitä eri resursseihin, joita sekä selainvalmistajat että yksityishenkilöt ovat tuottaneet. Suosittelen ehdottomasti lukemaan ne.</p>
<ul>
<li><a title="Safari CSS Visual Effect Guide: Transitions" rel="external" href="http://developer.apple.com/safari/library/documentation/InternetWeb/Conceptual/SafariVisualEffectsProgGuide/Transitions/Transitions.html">Safari CSS Visual Effect Guide: Transitions</a></li>
<li><a rel="external" href="https://developer.mozilla.org/en/CSS/CSS_transitions">Mozilla CSS transitions &#8211; MDC</a></li>
<li><a title="Opera: CSS3 Transitions support in Opera Presto 2.3" rel="external" href="http://www.opera.com/docs/specs/presto23/css/transitions/">Opera: CSS3 Transitions support in Opera Presto 2.3</a></li>
</ul>
<ul>
<li><a title="CSS3.info" rel="external" href="http://www.css3.info/">CSS3.info</a></li>
<li><a title="CSS3 Please" rel="external" href="http://www.css3please.com/">CSS3, Please! The Cross-Browser CSS3 Rule Generator</a></li>
<li><a title="CSS Fundamentals: CSS 3 Transitions | NetTuts+" rel="external" href="http://net.tutsplus.com/tutorials/html-css-techniques/css-fundametals-css-3-transitions/">CSS Fundamentals: CSS 3 Transitions | NetTuts+</a></li>
<li><a title="CSS Transitions 101 | Webdesigner Depot" rel="external" href="http://www.webdesignerdepot.com/2010/01/css-transitions-101/">CSS Transitions 101 | Webdesigner Depot</a></li>
<li><a title="Going Nuts with CSS Transitions | 24 ways" rel="external" href="http://24ways.org/2009/going-nuts-with-css-transitions">Going Nuts with CSS Transitions | 24 ways</a></li>
<li><a title="Safari CSS Visual Effect Guide: Animations" rel="external" href="http://developer.apple.com/safari/library/documentation/InternetWeb/Conceptual/SafariVisualEffectsProgGuide/Animations/Animations.html">Safari CSS Visual Effect Guide: Animations</a></li>
</ul>
<h2>Kommentteja?</h2>
<p>Kommentteja artikkelista otetaan mielellään vastaan. Lisäksi, jos sinulla on lähettää hyviä viitteitä CSS3-transitioita käsitteleviin artikkeleihin, niin näistä on varmasti suurta apua minulle ja lukijoille.</p>
]]></content:encoded>
			<wfw:commentRss>http://gfx.fi/2010/04/css3-transitiot-olemmeko-jo-perilla/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Julkaisujärjestelmä – paras juttu ikinä</title>
		<link>http://gfx.fi/2010/03/julkaisujarjestelma-%e2%80%93-paras-juttu-ikina/</link>
		<comments>http://gfx.fi/2010/03/julkaisujarjestelma-%e2%80%93-paras-juttu-ikina/#comments</comments>
		<pubDate>Tue, 30 Mar 2010 20:46:34 +0000</pubDate>
		<dc:creator>Gfx.fi</dc:creator>
				<category><![CDATA[Digiala]]></category>
		<category><![CDATA[julkaisujärjestelmä]]></category>

		<guid isPermaLink="false">http://gfx.fi/?p=1958</guid>
		<description><![CDATA[Jokainen webbipulju myy nykyään julkaisujärjestelmää osana kotisivujaratkaisujaan. Superdynaamisen järjestelmän avulla asiakas voi päivittää kotisivunsa, imuroida makkarin ja varata liput U2:n keikalle. Vaan olisikohan vielä varaa parantaa?]]></description>
			<content:encoded><![CDATA[<p><strong>Jokainen webbipulju myy nykyään julkaisujärjestelmää osana  kotisivujaratkaisujaan. Superdynaamisen järjestelmän avulla asiakas voi  päivittää kotisivunsa, imuroida makkarin ja varata liput U2:n keikalle.  Vaan olisikohan vielä varaa parantaa?</strong></p>
<p>Kotisivujen jurakaudella kotisivubisnes oli totta tosiaan erilaista  kuin tänä päivänä. Päivittäminen oli teknistä ja kallista puuhaa, joten  sitä pyrittiin välttämään viimeiseen asti. Jos asiakas halusi sivuille  päivitystä, täytyi pirauttaa mainostoimiston tekniselle kaverille, joka  tuntihintaan lisäsi ajankohtaisen uutisen sinne, pilkun tänne.</p>
<p>Päivitystyötä helpottavien julkaisujärjestelmien esiinmarssi  viimeisen kymmenen vuoden aikana on muuttanut tilannetta ratkaisevasti.  Enää sisällönpäivityksessä ei ole kyse mustasta magiasta, vaan toimistot  uskaltavat myydä asiakkailleen ihan oikeasti helppokäyttöistä ja  käyttökelpoista päivitystyökalua. Kerrotaan järjestelmän eduista, ja  luvataan että <strong><em>”jos sulta tään Wordin ja Lärvikirjan käyttö onnistuu,  niin osaat sää sitte tänkin, heh heh!”</em></strong>.  Hommanhan pitäisi olla  nimenomaan näin, mutta kertoisiko joku miksi sitten niin moni  julkaisujärjestelmällä varustettu sivu jää kaikesta tästä huolimatta  päivittämättä?</p>
<h2>Räätälöity tuote, only for you!</h2>
<p>Eletään vuotta 2010. Voisiko olla, että <em>hyvän ja elävän</em> palvelun tuottamiseksi asiakas tarvitsisi muutakin apua kuin  könttähintaan tuntien puitteissa pykätyn päivitysjärjestelmän? Jos  asiakkaan asiakkaat ansaitsevat fiksut ja selkeät kotisivut, voisiko  asiakas itse ansaita <em>oikeasti</em> helppokäyttöisen ja hänen  tarpeitaan ajatellen säädetyn julkaisualustan? Saisiko asiakas peräti  tietää, mitä kaikkea netissä voitaisiin ihan pienelläkin vaivalla tehdä?</p>
<p>Tulee ymmärtää, että lähes kaikki web-sivustoja päivittävät henkilöt  tekevät päivitystä oman työnsä ohessa. Jokainen osaa konettaa käyttää,  mutta kukaan heistä ei ole digialan ammattilainen. Jos yrityksen  yhteystiedot muuttuvat, päivitetään uudet tiedot nettiin tietenkin  vaikka hampaat irvessä, koska asia on niin tärkeä. Mutta mikäli  päivityksessä jokin tökkii, ei aamupalaverissa pyydetä  teknologiajohtajalta blogikirjoitusta, lisätä messuilmoitusta tai  suunnitella kevätkampanjan esittelyä näyttävästi myös kotisivuilla.</p>
<p>Ihmiset innostuvat edelleen helposti nähdessään omaa kädenjälkeään  julkiwebissä. Jos päivitys ei suju kuin tanssi, innostus hiipuu.  Sivuston kehitystä ja päivitystyötä ei koeta tärkeäksi, jos se on  hankalaa! Tämä korostuu eksponentiaalisesti silloin, kun asiakkaan  ydinosaaminen ei rullaa webissä.</p>
<h2>Onko julkkari aina vain julkkari?</h2>
<p><img class="alignnone size-full wp-image-1959" title="30" src="http://gfx.fi/wordpress/wp-content/uploads/2010/03/30.jpg" alt="30" width="450" height="171" /></p>
<p>Pieni pulma on siinä, että sanalla <em>”julkaisujärjestelmä”</em> voidaan tarkoittaa lähes mitä tahansa. Järjestelmä voi olla Wordpress,  Joomla, Drupal tai digiyrityksen oma, vuonna 1999 lanseerattu ja  sittemmin pintakuorrutettu muinaismuisto. <em>”Helppo päivitettävyys”</em> voi tarkoittaa mitä tahansa. <em>”Yksinkertainen”</em> voidaan käsittää  usealla eri tavalla. Varsinainen ongelma tulee kuitenkin vastaan siinä,  että edes käytetty julkaisualusta ei kerro vielä ollenkaan koko kuvaa  lopullisesta tuotteesta. Ei edes valveutuneelle asiakkaalle, joka tietää  eri järjestelmien erot ja ymmärtää omat tarpeensa täydellisesti!</p>
<p>Käsitteen hämäryys johtuu pitkälti siitä, että webbitoimistoissa  julkkaritöitä tehdään monesti liukuhihnalta. Teknisen puolen kaveri  vääntää yhden valmiiksi kuin kone, ja siirtyy sitten seuraavaan  keissiin. Hommassa on sen verran kiire, ettei tekijää kiinnosta miten  Maikki Mallikas 43v kokee työkalun nähdessään sen ensimmäisen kerran  omalla koneellaan. <em>Myynnin Pena hoitaa koulutuksen, mä teen niinku  ennenki että sekin tajuu.</em> Tekijän mielipide on se, että hommahan  selvästi toimii – <em>näin helppoa se on, katsokaas</em> – ja se saa  luvan riittää. <em>Näitä on tullut tehtyä viime vuosina monia, ja  valituksia ei ole kuulunut. Teen siis hyvää työtä.</em></p>
<p>Kuitenkin massatuotannossa käy usein niin, että julkaisujärjestelmään  jää näkyville sellaisia toimintoja, joita ei yksittäisissä tapauksissa  käytetä. Voikohan asiakkaalla mennä sormi suuhun? <em>Mitähän nuo  tiedostokategoriat ovat? Entä avainsanat? Keskustelun asetukset? Ei  tällaisesta koulutuksessa puhuttu&#8230;</em></p>
<p>Asiakas ei ymmärrä, ja kokee ettei käsitä työkalusta kaikkea.  Epävarmuus iskee aivan turhaan.</p>
<p>Harmi kyllä päivitystyökalujen ongelmat harvoin rajoittuvat vain  siihen, että ylimääräistä informaatiota ei ole karsittu pois. Usein myös  ominaisuudet toteutetaan tavalla joka kyllä toimii, muttei välttämättä  ole kaikkein intuitiivisin. Budjetit ovat rajalliset, ja siitä syystä  asioita ei ole varaa pyöritellä kaiken aikaa, vaan mennään siitä mistä  aita on matalin. Mennään sieltä mistä on aiemminkin menty. Onko näin  toimiminen kaiken aikaa järkevää bisnestä?</p>
<p>Sivujen koostajana paljon töitä tehneenä minua aina masentaa, kun  poikkean kuukausia aiemmin toteuttamalleni saitille vain huomatakseni,  että ensimmäisen ”Sivusto on julkaistu”-viestin jälkeen  ajankohtaispalstalle ei ole ilmaantunut mitään. Viimeisin päivitys  mihinkään on tehty viikko sivujen julkaisun jälkeen. Tiedän että sivut  on kyllä maksettu, olen saanut palkan ja asiakas on ollut niihin  ilmeisen tyytyväinen. Mutta väkisinkin mieleen hiipii ajatus: eikö  tehtäväni alan ammattilaisena ole nimenomaan auttaa asiakasta  kommunikoimaan webissä omien asiakkaidensa kanssa? Enkö ole jossain  suhteessa tässä tavoitteessani nyt epäonnistunut?</p>
<h2>Asiakasko tietää mitä tahtoo?</h2>
<p>Kun asiakas hakee kotisivuilleen uutta ilmettä ja tyyliä vuonna 2010,  hän hakee myös apua kiinnostavan sisällön tuottamiseen ja kävijöiden  houkutteluun, ymmärsi hän sitä itse tai ei. Mainostoimisto ei  useastikaan voi tuottaa asiakkaan sivujen sisältöä, vaan aloitteen on  tultava asiakkaalta itseltään. Toimisto voi kuitenkin ehdottomasti  miettiä tapoja opettaa asiakasta aktivoimaan kotisivuissa piilevät  voimavarat.</p>
<p>On molempien tahojen yhteinen etu, kun asiakkaan web-presenssi elää  ja voi hyvin. Tulee käsittää, että harva asiakas todella ymmärtää  internetin mahdollisuuksia tiedonjakokanavana, varsinkaan jurojen  punastelijoiden luvatussa maassa, Suomessa. Web on hieno asia! Asiakasta  tulee innostaa kantamaan oman kortensa kekoon! Mikään ei ole typerämpi  sijoitus kuin nettisivut, joilla ei ole mitään eikä koskaan vieraile  ketään.</p>
<p>Kokemani perusteella web elää erittäin nopeasti, mutta asiakkaille  suuremmat mullistukset tulevat aina pienellä viiveellä. Ennen riittivät  pelkät näyttävät sivut, sitten keksittiin myydä päivitettävyyttä ja rich  mediaa. Tärkein asia tästä hetkestä ikuisuuteen on kuitenkin sisältö.  Ehkä seuraavaksi myytäisiinkin apua sisällöntuottoon?</p>
<p>Niin, tai ehkä ei. Se on aika vaikeaa hommaa. <em>Emmä kyllä tiedä  mitä meidän asiakkaat oikeasti haluu.</em></p>
]]></content:encoded>
			<wfw:commentRss>http://gfx.fi/2010/03/julkaisujarjestelma-%e2%80%93-paras-juttu-ikina/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>HTML, mistä tultiin ja mihin ollaan menossa?</title>
		<link>http://gfx.fi/2010/03/html-mista-tultiin-ja-mihin-ollaan-menossa/</link>
		<comments>http://gfx.fi/2010/03/html-mista-tultiin-ja-mihin-ollaan-menossa/#comments</comments>
		<pubDate>Sun, 28 Mar 2010 17:45:48 +0000</pubDate>
		<dc:creator>Gfx.fi</dc:creator>
				<category><![CDATA[Site building]]></category>
		<category><![CDATA[html]]></category>

		<guid isPermaLink="false">http://gfx.fi/?p=1926</guid>
		<description><![CDATA[90-luku oli todellista Internetin esiinmarssin aikaa. Internet ja myös kaikki sen ympärillä kehittyivät huimaa tahtia. Nettiyhteydet, tietokoneet sekä muut laitteet tuplasivat nopeutensa vähän väliä. Internetin isäksi kutsutun Tim Berners-Lee:n johdolla perustettiin W3C, joka otti hoitaakseen HTML-standardin ylläpidon ja kehitystyön.]]></description>
			<content:encoded><![CDATA[<h2>Historiaa</h2>
<p>90-luku oli todellista Internetin esiinmarssin aikaa. Internet, ja myös kaikki sen ympärillä, kehittyivät huimaa tahtia. Nettiyhteydet,  tietokoneet sekä muut laitteet tuplasivat nopeutensa vähän väliä. Internetin isäksi kutsutun <strong>Tim Berners-Lee</strong>:n johdolla perustettiin <a href="http://www.w3.org/" target="_blank"><strong>W3C</strong></a>, joka otti hoitaakseen HTML-standardin ylläpidon ja kehitystyön.</p>
<p><strong>Netscape</strong> ja <strong>IE</strong> kävivät veristä kamppailua nettiselainmarkkinoilla. Koko ajan kehitettiin jotain uutta  ja kaikki olivat innoissaan. Vuosituhannen taitteeseen mennessä oli  HTML:stä julkaistu jo 4.01 suositus ja IE oli ottanut suvereenisti ykköspaikan käytetyinpänä selaimena. Mutta mitä sitten tapahtui?</p>
<h2>2000-luku: W3C ja XHTML</h2>
<p>W3C päätti 2000-luvulla ottaa uutta suuntaa HTML:n kanssa kehittäen uuden XML-pohjaisen <strong>XHTML</strong>-suosituksen. XHTML:n tarkoituksena oli tehdä uusi modulaarinen pohja internetsivuille ja tarkentaa koodauksen sääntöjä.  1.0 suositus julkaistiinkin jo 2001 ja siihen päivitys heti perään.</p>
<p>Samaan aikaan IE:n kehitystahti hiipui melkoisesti. <strong>Microsoft</strong>, joka oli  tönäissyt Netscapen täysin pois markkinoilta ja kahmaissut itselleen lähes 100%-osuuden markkinoista, ei enää lähtenyt samalla tavalla rynnistelemään eteenpäin kuten muutamia vuosia aikaisemmin, vaan resurssit ohjattiin jonnekin muualle. Tämä oli kova isku W3C:lle, jonka oli tajuttava että netti elääkin täysin selainvalmistajien armoilla, ja jos heitä ei uudet suositukset ja yhteistyö innosta, on XHTML:n tai minkä tahansa muun asiaan liittyvän vieminen eteenpäin melko hankalaa.</p>
<h2>2004 &#8211; Firefox 1.0</h2>
<p>Selainmarkkinoilla elettiin siis pitkään hiljaisempaa vaihetta, mutta 2004 tapahtui jotain suurta. Netscapen tuhkista nousseen <strong>Mozilla Foundationin</strong> ja <strong>AOL</strong>:n tuella julkaistiin uusi kauan kaivattu selain <strong>Firefox</strong> 1.0. Firefox oli kuin Obama selainmarkkinoilla, todellinen ilmiö joka sai paljon julkisuutta osakseen ja loi uutta toivoa jämähtäneeseen tilanteeseen.</p>
<p>Markkinointi toimi ja muutamassa vuodessa Firefox otti 20% osuuden selainmarkkinoista ja yhdessä <strong>Operan</strong> ja <strong>Safarin</strong> kanssa aiheuttivat hämmennystä IE:n leirissä. Pikkuhiljaa alkoi taas kaikki selainvalmistajat tuomaan uusia ja parempia versioita julkisuuteen ja www-suunnittelijat alkoivat rohkeammin käyttää uudempaa teknikkaa sivujen rakennuksessa.</p>
<h2>2004 &#8211; WHATWG</h2>
<p>Vuonna 2004 kohistiin myös HTML:n parissa. Tietyt selainvalmistajat kuten Apple, Mozilla ja Opera huolestuivat W3C:n XHTML visioista. Haluttiin palata vanhaan kunnon HTML:ään, tutkia ja korjata puutteita ja kehittää sitä eteenpäin, eikä niinkään kehittää jotain täysin uutta.</p>
<p>Edellämainittujen tahojen aloitteesta syntyi <a href="http://www.whatwg.org/" target="_blank"><strong>WHATWG</strong></a> (Web Hypertext Application Technology Working Group). WHATWG potkaisi <strong>HTML5</strong> kehityksen kunnolla käyntiin. Kehitystyöhön haluttiin  tuoda lisää avoimuutta ja ensimmäisenä tartuttiin selkeisiin ongelmiin mihin vuosien saatossa oli törmätty. Yksi iso asia on koittaa pudottaa tiettyjen yrityksien takana olevat, lähes standardeiksi muodostuneet erilliset sovellukset kuten <strong>Flash</strong> ja <strong>Silverlight</strong>. HTML5 olisi avoin pohja uudelle netille, joka toisi mukanaan jo nykyään täysin arkipäivää olevat videon ja äänen ja paljon muuta, ilman erillisiä lisäpalikoita.</p>
<h2>2007 &#8211; W3C + WHATWG</h2>
<p>W3C tajusi muutaman vuoden päästä, että HTML5:ssä on totta tosiaan järkeä ja otti vuonna 2007 projektin siipiensä suojaan. Nyt yhdessä WHATWG:n kanssa kehitystyötä viedään eteenpäin. Ihan hetkessä siirtyminen uuteen ei tule tapahtumaan. Selaimet ottavat uusia ominaisuuksia omakseen aina päivitysten yhteydessä hiljalleen, hurjimmat tornihuhut HTML5 aikakaudesta ajoittuvat vasta vuodelle 2022.</p>
<h3>Netistä poimittuja:</h3>
<p><strong>1989</strong> &#8211; Alkuperäinen ehdotus WWW toimintamallista, Berners-Lee:<br />
<a href="http://www.w3.org/History/1989/proposal.html" target="_blank">http://www.w3.org/History/1989/proposal.html</a><br />
<strong>1996</strong> &#8211; HTML 2.0 tutoriaaleja, Eric Meyer:<br />
<a href="http://www.case.edu/help/Help_www2.html" target="_blank">http://www.case.edu/help/Help_www2.html</a><br />
<strong>1996</strong> &#8211; 3COM robotics 56k TV-mainos:<br />
<a href="http://www.youtube.com/watch?v=0oJhthSoCFk" target="_blank">http://www.youtube.com/watch?v=0oJhthSoCFk</a><br />
<strong>1997</strong> &#8211; Mozilla ja IE riidoissa:<br />
<a href="http://home.snafu.de/tilman/mozilla/stomps.html" target="_blank">http://home.snafu.de/tilman/mozilla/stomps.html</a><br />
<strong>1998</strong> &#8211; Microsoftia vastaan nostetaan syyte monopoliaseman väärinkäytöstä:<br />
<a href="http://www.justice.gov/atr/public/press_releases/1998/1764.htm" target="_blank">http://www.justice.gov/atr/public/press&#8230; 8/1764.htm<br />
</a> <strong>1998 </strong>- Aol ostaa Netscapen:<br />
<a href="http://news.cnet.com/2100-1023-218360.html" target="_blank">http://news.cnet.com/2100-1023-218360.html</a><br />
<strong>2000</strong> &#8211; XHTML tulee:<br />
<a href="http://www.alistapart.com/articles/xhtml/" target="_blank">http://www.alistapart.com/articles/xhtml/</a><br />
<strong>2004</strong> &#8211; Firefox 1.0 julkaisupäivä lähenee:<br />
<a href="http://labnol.blogspot.com/2004/10/firefox-10-release-date-announced.html" target="_blank">http://labnol.blogspot.com/2004/10/fire&#8230;unced.html</a><br />
<strong>2005</strong> &#8211; Spread the Firefox, sivusto vauhdittamaan Firefoxin leviämistä:<br />
<a href="http://www.spreadfirefox.com/" target="_blank">http://www.spreadfirefox.com</a><br />
<strong>2005</strong> &#8211; HTML:n tulevaisuus, WHATWG:<br />
<a href="http://brunovernay.wordpress.com/2005/12/09/the-future-of-html-part-1-whatwg/" target="_blank">http://brunovernay.wordpress.com/2005/1&#8230;-1-whatwg/</a><br />
<strong>2009</strong> &#8211; HTML5 tulevaisuus, Bruce Lawsonin presentaatio @ FOWA 09:<a href="http://vimeo.com/6985053" target="_blank"><br />
http://vimeo.com/6985053</a></p>
]]></content:encoded>
			<wfw:commentRss>http://gfx.fi/2010/03/html-mista-tultiin-ja-mihin-ollaan-menossa/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Web design trendit 2010 – osa 2</title>
		<link>http://gfx.fi/2010/03/web-design-trendit-2010-%e2%80%93-osa-2/</link>
		<comments>http://gfx.fi/2010/03/web-design-trendit-2010-%e2%80%93-osa-2/#comments</comments>
		<pubDate>Thu, 18 Mar 2010 22:20:38 +0000</pubDate>
		<dc:creator>Gfx.fi</dc:creator>
				<category><![CDATA[web design]]></category>
		<category><![CDATA[trendit]]></category>

		<guid isPermaLink="false">http://gfx.fi/?p=1784</guid>
		<description><![CDATA[Mikä on tällä hetkellä “hot-hot”? Moniosaisen juttusarjan toisessa osassa katsastamme lisää Web design trendejä. Tällä kertaa vuorossa on viisi trendiä makeiden esimerkkien kera.]]></description>
			<content:encoded><![CDATA[<p><strong>Mikä on tällä hetkellä “hot-hot”? Moniosaisen juttusarjan toisessa  osassa katsastamme lisää Web design trendejä. Tällä kertaa vuorossa on </strong><strong>viisi trendiä </strong><strong>makeiden esimerkkien kera.</strong></p>
<h2>Automaattinen rullaus</h2>
<p>Sivustoa ei enää ainoastaan vieritetä alaspäin. Rullauksella voidaan luoda aivan uusia sisällöllisiä ja visuaalisia kokemuksia. Tsekkaa esimerkit.</p>
<h3><a href="http://www.bountybev.com/" target="_blank">http://www.bountybev.com/</a></h3>
<p><a href="http://www.bountybev.com/" target="_blank"><img class="alignnone size-full wp-image-1849" title="bountybev" src="http://gfx.fi/wordpress/wp-content/uploads/2010/03/bountybev.jpg" alt="bountybev" width="500" height="300" /></a></p>
<h3><a href="http://gavincastleton.com/" target="_blank">http://gavincastleton.com/</a></h3>
<p><a href="http://gavincastleton.com/" target="_blank"><img class="alignnone size-full wp-image-1913" title="gavincastleton" src="http://gfx.fi/wordpress/wp-content/uploads/2010/03/gavincastleton1.jpg" alt="gavincastleton" width="500" height="300" /></a></p>
<h3><a href="http://arbel-designs.com/" target="_blank">http://arbel-designs.com/</a></h3>
<p><a href="http://arbel-designs.com/" target="_blank"><img class="alignnone size-full wp-image-1851" title="arbel-designs" src="http://gfx.fi/wordpress/wp-content/uploads/2010/03/arbel-designs.jpg" alt="arbel-designs" width="500" height="300" /></a></p>
<h2>Kohokuviointi – bling bling</h2>
<p>Kohokuviointi on helppo ja nopea tapa lisätä sivuston elementeille ja typografialle näyttävyyttä. Valitse uppokuvio tai kohokuvio, miksei jopa molemmat.</p>
<h3><a href="http://graphik.fi/" target="_blank">http://graphik.fi/</a></h3>
<p><a href="http://graphik.fi/" target="_blank"><img class="alignnone size-full wp-image-1852" title="graphik" src="http://gfx.fi/wordpress/wp-content/uploads/2010/03/graphik.jpg" alt="graphik" width="500" height="300" /></a></p>
<h3><a href="http://niittymaa.com/" target="_blank">http://niittymaa.com/</a></h3>
<p><a href="http://niittymaa.com/" target="_blank"><img class="alignnone size-full wp-image-1853" title="niittymaa" src="http://gfx.fi/wordpress/wp-content/uploads/2010/03/niittymaa.jpg" alt="niittymaa" width="500" height="300" /></a></p>
<h3><a href="http://www.mailchimp.com/" target="_blank">http://www.mailchimp.com/</a></h3>
<p><a href="http://www.mailchimp.com/" target="_blank"><img class="alignnone size-full wp-image-1855" title="mailchimp" src="http://gfx.fi/wordpress/wp-content/uploads/2010/03/mailchimp1.jpg" alt="mailchimp" width="500" height="300" /></a></p>
<h2>Ruutu ruudun sisässä</h2>
<p>iPhone, iMac ja erilaiset läppärit toimivat usein kuvan tai animaation raameina. Nättiä, mutta niin tylsää. Kyseinen trendi on puhkikulutuksen kynnyksellä. Käytä varoen.</p>
<h3><a href="http://www.webbyran.nu/" target="_blank">http://www.webbyran.nu/</a></h3>
<p><a href="http://www.webbyran.nu" target="_blank"><img class="alignnone size-full wp-image-1856" title="webbyran" src="http://gfx.fi/wordpress/wp-content/uploads/2010/03/webbyran.jpg" alt="webbyran" width="500" height="300" /></a></p>
<h3><a href="http://liftux.com/" target="_blank">http://liftux.com/</a></h3>
<p><a href="http://liftux.com" target="_blank"><img class="alignnone size-full wp-image-1857" title="lift" src="http://gfx.fi/wordpress/wp-content/uploads/2010/03/lift.jpg" alt="lift" width="500" height="300" /></a></p>
<h3><a href="http://selectstartstudios.com/" target="_blank">http://selectstartstudios.com/</a></h3>
<p><a href="http://selectstartstudios.com" target="_blank"><img class="alignnone size-full wp-image-1858" title="selectstartstudios" src="http://gfx.fi/wordpress/wp-content/uploads/2010/03/selectstartstudios.jpg" alt="selectstartstudios" width="500" height="300" /></a></p>
<h2>Video on keksitty uudelleen</h2>
<p>Videoformaatti ei ole enää kömpelö ja tahmeasti toimiva pieni pikseliruutu, vaan varteenotettava vaihtoehto aina resurssien sen mahdollistaessa. Toimiva video nappaa vierailijan huomion ja jää muistiin. Videota voidaan jalostaa monella eri tavalla – luovuus on valttia.</p>
<h3><a href="http://wearehughes.com/" target="_blank">http://wearehughes.com/</a></h3>
<p><a href="http://wearehughes.com/" target="_blank"><img class="alignnone size-full wp-image-1859" title="hughes" src="http://gfx.fi/wordpress/wp-content/uploads/2010/03/hughes.jpg" alt="hughes" width="500" height="300" /></a></p>
<h3><a href="http://www.yit.fi/together/" target="_blank">http://www.yit.fi/together/</a></h3>
<p><a href="http://www.yit.fi/together/" target="_blank"><img class="alignnone size-full wp-image-1860" title="yit-together" src="http://gfx.fi/wordpress/wp-content/uploads/2010/03/yit-together.jpg" alt="yit-together" width="500" height="300" /></a></p>
<h3><a href="http://survivetheoutbreak.com/" target="_blank">http://survivetheoutbreak.com/</a></h3>
<p><a href="http://www.survivetheoutbreak.com/" target="_blank"><img class="alignnone size-full wp-image-1861" title="survivetheoutbreak" src="http://gfx.fi/wordpress/wp-content/uploads/2010/03/survivetheoutbreak.jpg" alt="survivetheoutbreak" width="500" height="300" /></a></p>
<h2>Puhekupla</h2>
<p>Puhekupla esiintyy tekstissä, kuvissa, navigaatiossa, logossa ja oikeastaan ihan missä vain. Visuaalisuuden lisäksi se ohjaa samalla katseen suuntaa haluttuun pisteeseen.</p>
<h3><a href="http://duplos.org/" target="_blank">http://duplos.org/</a></h3>
<p><a href="http://duplos.org/" target="_blank"><img class="alignnone size-full wp-image-1862" title="duplos" src="http://gfx.fi/wordpress/wp-content/uploads/2010/03/duplos.jpg" alt="duplos" width="500" height="300" /></a></p>
<h3><a href="http://sxsw.madebymany.co.uk/" target="_blank">http://sxsw.madebymany.co.uk/</a></h3>
<p><a href="http://sxsw.madebymany.co.uk/" target="_blank"><img class="alignnone size-full wp-image-1863" title="madebymany" src="http://gfx.fi/wordpress/wp-content/uploads/2010/03/madebymany.jpg" alt="madebymany" width="500" height="300" /></a></p>
<h3>h<a href="http://morphix.si/" target="_blank">ttp://morphix.si/</a></h3>
<p><a href="http://morphix.si/" target="_blank"><img class="alignnone size-full wp-image-1899" title="morphix" src="http://gfx.fi/wordpress/wp-content/uploads/2010/03/morphix.jpg" alt="morphix" width="500" height="300" /></a></p>
<h2>Jatkoa luvassa&#8230;</h2>
<p>Web-tekijät keksivät uusia tapoja hyödyntää teknologiaa luoden samalla innovatiivisia käyttäjäkokemuksia. Trendit kohtaavat ja törmäyksen yhteydessä syntyy uusia trendejä. Suurimman comebackin tekee video ja se tulee yhdessä  3D-animaation kanssa mullistamaan web-suunnittelua. Seuraavassa julkaisussa luvassa taas lisää silmänkarkkia, nam!</p>
<p>Lue julkaisun ensimmäinen osa <a href="http://gfx.fi/2010/02/web-design-trendit-2010-%E2%80%93-osa-1/#article">tästä</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://gfx.fi/2010/03/web-design-trendit-2010-%e2%80%93-osa-2/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>CSS3 tutuksi</title>
		<link>http://gfx.fi/2010/03/css3-tutuksi/</link>
		<comments>http://gfx.fi/2010/03/css3-tutuksi/#comments</comments>
		<pubDate>Sun, 07 Mar 2010 20:42:34 +0000</pubDate>
		<dc:creator>Gfx.fi</dc:creator>
				<category><![CDATA[Site building]]></category>
		<category><![CDATA[css]]></category>
		<category><![CDATA[css3]]></category>

		<guid isPermaLink="false">http://gfx.fi/?p=1751</guid>
		<description><![CDATA[CSS3 tulee selaimiin kovalla vauhdilla. Koska vanhemmat selaimet ohittavat CSS:n mitä ne eivät ymmärrä, voidaan nämä uudet tekniikat valjastaa käyttöön jo tänä päivänä.]]></description>
			<content:encoded><![CDATA[<p><strong>CSS3 tulee selaimiin kovalla vauhdilla. Koska vanhemmat selaimet ohittavat CSS:n mitä ne eivät ymmärrä, voidaan nämä uudet tekniikat valjastaa käyttöön jo tänä päivänä.</strong></p>
<p>CSS3:sta puhutaan usein yhtenä standardina. Tämä on muutamallakin tavalla hieman harhaanjohtavaa, sillä <a href="http://w3c.org/">W3C</a> ei julkaise standardeja vaan suosituksia ja CSS3 koostuu erillisistä moduuleista, joita kehitetään <a href="http://www.css3.info/modules/">omaan tahtiinsa</a> ja joita selainvalmistajat voivat lisätä selaimiinsa sitä mukaa miten parhaaksi katsovat.</p>
<p>Selaintuki CSS3:n uusille ominaisuuksille vaihtelee jonkin verran eri selainten välillä, pois lukien Internet Explorer, joka tukee vain web-fontteja. Seuraavaksi esiteltävät ominaisuudet toimivat kaikissa muissa suosituimmissa selaimissa (Firefox, Chrome, Opera, Safari), ellei jutussa erikseen toisin ole mainittu.</p>
<h2>Varo teräviä kulmia!</h2>
<p>Useimmat meistä ovat varmasti jossain vaiheessa joutuneet kiroilemaan elementtien kulmien pyöristyksen kanssa. Monet ratkaisivat ongelman tekemällä pyöreät kulmat kuvankäsittelyohjelmassa ja lisäämällä ne sivuille käyttäen ylimääräisiä HTML-tageja. Jos pyöristettyjen elementtien täytyi vielä skaalautua sivusuunnassa, tarvittiin hirvittävää CSS-jonglöörausta ja jos sivun väreihin joutui myöhemmin tekemään korjauksia, tarkoitti tämä jälleen kuvankäsittelyohjelman avaamista ja kaikkien kuvien muokkaamista yksi kerrallaan.</p>
<p>CSS3 poistaa nämä ongelmat kertaheitolla. Pyöristetyt kulmat kaikille sivun diveille onnistuu seuraavasti:</p>
<pre class="brush: xml;">
  div {
    -moz-border-radius: 15px;
    -webkit-border-radius: 15px;
    border-radius: 15px;
  }
</pre>
<p><img class="alignnone size-full wp-image-1773" title="css3-tutuksi-screenshot-1" src="http://gfx.fi/wordpress/wp-content/uploads/2010/03/css3-tutuksi-screenshot-11.jpg" alt="css3-tutuksi-screenshot-1" width="454" height="250" /></p>
<p>Firefox ja Safari/Chrome tarvitsevat pyöristysten kanssa vielä oman etuliitteensä määrityksen eteen. Opera tukee reunojen pyöristystä suoraan ilman etuliitettä versiosta 10.50 eteenpäin. Vanhemmat selaimet ja kaikki IE:t aina versioon 8 asti eivät ymmärrä reunanpyöristyksiä, joten ne näyttävät kulmat normaalisti neliskanttisina.</p>
<p>Microsoft on <a href="http://blogs.msdn.com/ie/archive/2009/11/18/an-early-look-at-ie9-for-developers.aspx">lupaillut</a> tuoda ainakin reunojen pyöristykset seuraavaan selainversioonsa. Reunojen pyöristyksiin, kuten muihinkin CSS3-ominaisuuksiin voi halutessaan lisätä IE:tä varten määrityksen <strong>-ms</strong>-etuliitteellä.</p>
<p>Reunoja voidaan pyöristää myös yksi kerrallaan:</p>
<pre class="brush: xml;">
  div {
    -moz-border-radius-topleft: 15px;
    -webkit-border-top-left-radius: 15px;
    border-top-left-radius: 15px;
  }
</pre>
<p><img class="alignnone size-full wp-image-1774" title="css3-tutuksi-screenshot-2" src="http://gfx.fi/wordpress/wp-content/uploads/2010/03/css3-tutuksi-screenshot-21.jpg" alt="css3-tutuksi-screenshot-2" width="454" height="250" /></p>
<p>Edellisessä esimerkissä kannattaa huomata Firefoxin hieman eroava syntaksi. CSS3:n <a href="http://www.w3.org/TR/css3-background/">Backgrounds and Borders</a> -moduuli on jo Candidate Recommendation tilassa, joten luultavasti myös Firefox ja muut Gecko-moottoria käyttävät selaimet siirtyvät käyttämään samaa syntaksia muiden selainten kanssa.</p>
<h2>Teksti- ja laatikkovarjot</h2>
<p>Toinen ominaisuus, joka aiemmin on voitu toteuttaa vain kuvien avulla on varjon lisääminen tekstin tai muiden sivuelementtien taakse. Syntaksi on hyvin yksinkertainen:</p>
<pre class="brush: xml;">
  p {
    text-shadow: 1px 2px 3px #555;
  }
</pre>
<p><img class="alignnone size-full wp-image-1766" title="css3-tutuksi-screenshot-3" src="http://gfx.fi/wordpress/wp-content/uploads/2010/03/css3-tutuksi-screenshot-3.jpg" alt="css3-tutuksi-screenshot-3" width="454" height="250" /></p>
<p>Edellinen lisää kappaleen taustalle harmaan teksivarjon joka on tekstistä yhden pikselin oikealla, kaksi alaspäin ja hajoaa kolmen pikselin alueelle. Text-shadow on laajasti tuettu ja se ei tarvitse erikseen selainkohtaisia etuliitteitä. Box-shadow toimii samalla periaatteella, mutta Gecko- ja Webkit-selaimet tarvitsevat vielä etuliitteet:</p>
<pre class="brush: xml;">
  div {
    -moz-box-shadow: 10px 10px 15px #555;
    -webkit-box-shadow: 10px 10px 15px #555;
    box-shadow: 10px 10px 15px #555;
  }
</pre>
<p><img class="alignnone size-full wp-image-1767" title="css3-tutuksi-screenshot-4" src="http://gfx.fi/wordpress/wp-content/uploads/2010/03/css3-tutuksi-screenshot-4.jpg" alt="css3-tutuksi-screenshot-4" width="454" height="250" /></p>
<h2>Läpinäkyvyys RGBA:n avulla</h2>
<p>Lähes kaikki selaimet ovat tukeneet CSS:n osittaista läpinäkyvyyttä opacity-ominaisuuden kautta jo pitkään, mutta opacityn käytössä on yksi suuri ongelma: Läpinäkyvyys periytyy aina myös lapsielementeille.</p>
<p>RGBA-värit ratkaisevat tämän ongelman tuomalla väreihin mukaan alpha-kanavan. Alpha-kanavan avulla voidaan säätää elementtien läpinäkyvyyttä vaikuttamatta lapsielementtien näkyvyyteen:</p>
<pre class="brush: xml;">
  div {
    background: rgb( 0, 255, 0 );
    background: rgba( 0, 255, 0, .5 );
  }
</pre>
<p><img class="alignnone size-full wp-image-1768" title="css3-tutuksi-screenshot-5" src="http://gfx.fi/wordpress/wp-content/uploads/2010/03/css3-tutuksi-screenshot-5.jpg" alt="css3-tutuksi-screenshot-5" width="454" height="250" /></p>
<p>Elementille voidaan määrittää läpinäkyvyys välillä 1-0, jolloin 1 tarkoitaa 100% väritäyttöä ja 0 Täydellistä läpinäkyvyyttä. RGBA:ta käyttäessä on aina muistettava määrittää perinteiset värit vanhemille selaimille niiden ymmärtämässä muodossa tai muuten elementit perivät värinsä isäntäelementiltänsä. Edellisen esimerkin ensimmäinen rivi voidaan korvata myös perinteisemmillä heksa-arvoilla: <strong>#0f0</strong>.</p>
<h2>Gradientit ilman kuvia</h2>
<p>Liukuvärit eli gradientit on suosittu ja nopea tapa kohentaa sivujen ulkoasua. Aiemmin ainoa vaihtoehto on ollut lisätä gradientit sivuille jpg:nä tai läpinäkyvällä png-kuvana. CSS3:lla on mahdollista nopeuttaa sivujen latautumista joskus jopa huomattavasti siirtämällä gradientit selaimen laskettavaksi.</p>
<p>Annetaan diveille pohjalta alkava musta gradientti, joka päättyy divin yläreunaan:</p>
<pre class="brush: xml;">
  div {
    background: -webkit-gradient(linear, left top, left bottom, from(transparent), to(#000));
    background: -moz-linear-gradient(100% 100% 90deg, #000, transparent);
    background: -o-linear-gradient(100% 100% 90deg, #000, transparent);
    background: linear-gradient(100% 100% 90deg, #000, transparent);
  }
</pre>
<p><img class="alignnone size-full wp-image-1770" title="css3-tutuksi-screenshot-6" src="http://gfx.fi/wordpress/wp-content/uploads/2010/03/css3-tutuksi-screenshot-6.jpg" alt="css3-tutuksi-screenshot-6" width="454" height="250" /></p>
<p>Gradientit toimivat tällä hetkellä vasta Webkit- ja Gecko-pohjaisissa selaimissa, mutta tuki on todennäköisesti tulossa pian myös Operaan, jota varten edelliseen on lisätty varmuuden vuoksi määritys <strong>-o</strong>-etuliitteellä. CSS-gradientit ovat osa <a href="http://dev.w3.org/csswg/css3-images/">Image Values</a> -moduulia, joka on vasta Editor&#8217;s Draft -vaiheessa, joten muutokset lopulliseen syntaksiin ovat vielä erittäin mahdollisia.</p>
<p>CSS-gradientit taipuvat monenlaisiin hienouksiin perus väriliukujen lisäksi. Kannattaa katsastaa vaikka Chris Coyierin opas aiheesta <a href="http://css-tricks.com/css3-gradients/">CSS-tricksistä</a>.</p>
<h2>Animaatiota CSS:n avulla</h2>
<p>Animaatio netissä on pitkään ollut pääosin vain Flashin ja JavaScriptin heiniä. Nyt pientä interaktiivisuutta on helppo lisätä sivuille myös ilman ohjelmointitaitoja. Lisätään kaikkiin sivun linkkeihin pieni animoitu siirtymä eri tilojen välille:</p>
<pre class="brush: xml;">
  *:link,
  *:visited,
  *:hover,
  *:active,
  *:focus {
    -webkit-transition:
      color .25s linear,
      background-color .25s linear,
      border-color .25s linear;
    -moz-transition:
      color .25s linear,
      background-color .25s linear,
      border-color .25s linear;
    transition:
      color .25s linear,
      background-color .25s linear,
      border-color .25s linear;
  }
</pre>
<p>CSS-animatioita tukee tällä hetkellä vain Opera ja Safari/Chrome. Myöskin tuleva <a href="https://developer.mozilla.org/en/CSS/-moz-transition">Firefox 3.7</a> -versio mitä todennäköisimmin tukee tätä ominaisuutta.</p>
<h2>Fontit</h2>
<p>CSS3:n avulla on mahdollista ladata käyttäjän koneelle fontteja suoraan sivuilta. Enää siis sivujen typografian ei tarvitse rajoittua muutamaan <a href="http://dustinbrewer.com/fonts-on-the-web-and-a-list-of-web-safe-fonts/">web-turvalliseen</a> fonttiin.</p>
<p>Ladattavan fontit eivät ole oikeastaan uusi juttu. Ne olivat osa jo vanhaa CSS 2 -suositusta, mutta ne pudotettiin pois versiosta 2.1. Erikoisesti tässä asiassa IE on ollut edelläkävijä, sillä se on tukenut @font-face -ominaisuutta jo 4.0-versiostaan asti. Tosin ainoastaan omassa eot-formaatissaan, valitettavasti.</p>
<p>Fontteja sivuille lisätessä kannattaa olla tarkkana, sillä usein jopa ostettujen fonttien käyttöä saatetaan rajoittaa webissä. Lisenssiehdot kannattaa aina lukea huolella. Ilmaisia fontteja voi metsästää vaikka <a href="http://www.webfonts.info/wiki/index.php?title=Fonts_available_for_%40font-face_embedding">Webfonts.info</a>:sta.</p>
<p>Ladattavien fonttien lisääminen on helppoa. Halutut fontit ladataan CSS:n alussa:</p>
<pre class="brush: xml;">
    /* Fonts by Jos Buivenga (exljbris) -&gt; www.exljbris.com */
    @font-face {
      font-family: CallunaRegular;
      src: url(&quot;Calluna-Regular.otf&quot;) format(&quot;opentype&quot;);
    }
</pre>
<p><img class="alignnone size-full wp-image-1771" title="css3-tutuksi-screenshot-7" src="http://gfx.fi/wordpress/wp-content/uploads/2010/03/css3-tutuksi-screenshot-7.jpg" alt="css3-tutuksi-screenshot-7" width="454" height="250" /></p>
<p><a href="http://www.exljbris.com">Hra. Buivenga</a> antaa ilmaiset fonttinsa muuten vapaaseen käyttöön, mutta pyytää, että vähintään CSS-tiedostossa mainitaan yhteystiedot hänen sivuilleen.</p>
<p>Kun fontti on ladattu, voidaan sitä kutsua myöhemmin CSS:ssä kuten tavallisiakin fontteja:</p>
<pre class="brush: xml;">
  body {
    font-family: CallunaRegular, 'Palatino Linotype', Palatino, serif;
  }
</pre>
<p>Jos käyttäjän selain ei tue @font-face -määritystä, käytetään sen sijasta seuraavaksi listassa tulevaa tuettua fonttia.</p>
<h2>Tulevaisuus</h2>
<p>Tällä hetkellä CSS3:n käyttö on vielä hiukan työlästä monien selainkohtaisten etuliitteiden johdosta, mutta tilanne tulee vielä helpottumaan, kunhan moduulit kehittyvät ja W3C niitä yksi kerrallaan nostaa suosituksen asemaan.</p>
<p>Tässäkin muodossa CSS3 nopeuttaa sivujen kehitystä huomattavasti, sillä vaikka lopullisilla sivuilla ei käyttäisikään CSS:ää esimerkiksi reunojen pyöristyksessä, on niillä erilaisten ulkoasuvaihtoehtojen prototyyppaaminen huomattavasti nopeampaa suoraan selaimessa ilman tarvetta avata kuvankäsittelyohjelmaa ennen kuin miellyttävä lopputulos on löytynyt.</p>
]]></content:encoded>
			<wfw:commentRss>http://gfx.fi/2010/03/css3-tutuksi/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
	</channel>
</rss>
