HTML5 a CSS3 v praxi
	HTML5 – Už tam budeme?
	
	<audio> <video>
	
<video controls poster="image.png">
	<source src="video-small.mp4" 
		type="video/mp4; codecs='avc1.42E01E, mp4a.40.2'" 
		media="screen and (max-width:500px)" 
	/>
	<source src="video.mp4" type="video/mp4; codecs='avc1.42E01E, mp4a.40.2'" />
	<source src="video.ogv" type="video/ogg; codecs='theora, vorbis'"/>
	<source src="video.webm" type="video/webm; codecs='vp8, vorbis'" />
	<!-- embed flash jako fallback -->
</video>
	<audio> <video> formáty
	
		| Klient | WAVE | MP3 | WebM | Ogg Vorbis / Theora | H264 | AAC | Opus | 
|---|
| Firefox 3.5+ | ✓ |  | ✓ | ✓ |  |  |  | 
| Firefox 15+ | ✓ |  | ✓ | ✓ |  |  | ✓ | 
| Chrome 9+ |  | ✓ | ✓ | ✓ | ✓ |  |  | 
| Safari 3+ |  | ✓ |  |  | ✓ | ✓ |  | 
| Opera 10+ |  |  | ✓ | ✓ |  |  |  | 
| IE 9 | ✓ | ✓ | ✓ |  | ✓ | ✓ |  | 
| iPhone / iPad |  | ✓ |  |  | ✓ | ✓ |  | 
| Android |  | ✓ | ✓ |  | ✓ |  |  | 
| Flash |  | ✓ | ✓ |  | ✓ | ✓ |  | 
	<audio> <video> JS API
	
var a = new Audio("song.mp3");
a.canPlayType("audio/mpeg"); /* "", "maybe", "probably" */
a.play();
	<canvas>
	
		- Ukázka
- Všechny prohlížeče krom IE≤8
- Obstojná rychlost
- WebGL: stále slabá podpora (hardware, ovladače)
SVG
	
		- Ukázka
- Všechny prohlížeče krom IE≤8
- Prehistorický standard z roku 2001
- VML pro IE≤8
- Rozšířený pro vektorovou grafiku
- DOM, události, stylování
- Horší výkon v porovnání s <canvas>
File API
	
		- IE až od verze 10
- Metadata vybraných souborů
- Přístup k obsahu
/* první soubor vybraný uživatelem */
var file = document.getElementById("fileinput").files[0]; 
var reader = new FileReader();
reader.addEventListener("load", function() {  
	alert(reader.result);
});
reader.readAsDataURL(file);
/* readAsText(), readAsBinaryString(), readAsArrayBuffer() */
	XMLHttpRequest 2
	
		- IE až od verze 10
- POST obsahu souboru
- Událost xhr.upload.onprogress
- Nahrávání příloh e-mailu
Application Cache
	
		- IE až od verze 10
- Možnost "uložit" stránku a její data do cache prohlížeče
- Zejména pro mobilní zařízení
- Automatické použití cachovaných hodnot, když je přístroj offline
<html manifest="example.appcache">
	CACHE MANIFEST
index.html
stylesheet.css
images/logo.png
scripts/main.js
	localStorage
	
var saveGame = function() {
	localStorage.name = "player";
	localStorage.hitPoints = 7;
}
if (localStorage.name) { /* load */ }
	
		- Všechny prohlížeče krom IE≤7
- Různá kapacita
- Není info o zbylém prostoru, přiřazení vyvolá výjimku
navigator.geolocation
	
		- Ukázka
- Všechny prohlížeče krom IE≤8
- Přesnost leckdy na houby
- Často nutné připojení k Internetu
WebSockets
	
		- Ukázka
- Vlastní, obousměrný komunikační protokol nad TCP
- Není HTTP ⇒ nutná podpora na backendu
- IE až od verze 10
- Rychlá komunikace klient-server (nikoliv klient-klient)
Media queries
	
		- Všechny prohlížeče krom IE≤8
- Aplikování CSS pravidel podmíněně dle parametrů zobrazovacího zařízení
- Jedna z nejužitečnějších technologií balíku HTML5/CSS3 vůbec!
@media screen and (min-height: 500px) { ... }
	<link media="all and (max-device-width: 480px)" ... />
	CSS selektory
	a:checked, a:not(:target), img:nth-child(3n+2) { ... }
	
		- Všechny prohlížeče krom IE≤8
- Vysoká užitná hodnota
- :targetdovoluje měnit styly při navigaci v rámci stránky
- :nth-childa- :nth-of-typepro střídání stylů
CSS transformace
	
		- Ukázka
- Všechny prohlížeče krom IE≤8
- Měřítko, posun, natočení, zkosení
- Design, efekty
- Perspektivní (3D) transformace až v nejnovějších verzích
- Na mnoha zařízeních jsou transformace hardwarově akcelerovány
@font-face
	
		- Vynikající podpora prohlížečů
- Ideální pro ideogramy (ikonky)
- Obtížné sehnat dobrý font
- Často mizerná diakritika (Google Web Fonts)
CSS efekty: stíny, oblé rohy, přechody
	
		- Obdélníkové stíny, oblé rohy: všechny prohlížeče krom IE≤8
- Barevné přechody, stín textu: až IE 10
- Ideální kandidát pro progressive enhancement
- Náročné na výpočetní výkon
CSS transitions & animations
	
		- Ideální a dobře navržené řešení animací
- Žádný JavaScript
- IE až od verze 10
- Problematika tzv. vendor prefixů
.anim li {
	-webkit-transition: padding 3s;
	-moz-transition: padding 3s;
	-o-transition: padding 3s;
	transition: padding 3s;
}
.anim li:nth-child(1):hover {
	padding-left: 50%;
}