HTML5 Den enda versionen av HTML du behöver Emil Stenström – Suniweb 2010 @EmilStenstrom [email protected] Approach • HTML5 är både stort, och luddigt • Vi har 45 minuter på oss • Era frågor får styra vad jag berättar om Varför använder ni inte redan HTML5? HTML5 • Vad ingår i HTML5? • Ny och ändrad HTML • Javascript API:er med exempelkod • Argument för HTML5 • Hur gör man? • • • • Tillgänglighet Sökmotorer Bakåtkompatibilitet Vad händer med XHTML? Vad ingår i HTML5? • Massor • 300.000 ord (vs. 100.000 ord i HTML4) • 160.000 ord för webbutvecklare • • • • • Specifikation av parsning Uppdatering av taggar och attribut ~15 nya JavaScript-API:er Förhållandet till XHTML Idé om bakåt- och framåtkompatibilitet Parsning av HTML • HTML4 saknar • • • parsningsinstruktioner HTML5 har hela algoritmen i spec:en Kommer med referensimplementation: http://html5.validator.nu Byggd tillsammans med alla webbläsartillverkare Vad är korrekt HTML5? • • • • <DIV>A monkey</DIV> <p id=john>John's P</p> <InPuT type="text"> <input type="text" /> • Japp, allt det är korrekt. Uppdatering av tillåtna taggar • • • • • Ny Doctype Nya taggar Ändrade taggar Borttagna taggar Nya attribut Ny doctype • <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd"> • <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1strict.dtd"> • <!doctype html> Nya taggar • • • • • • • • • • section article aside hgroup header footer nav figure figcaption ... Generell avdelning. Används med hX. Oberoende del av dokumentet Innehåll med svag koppling till resten En rubrik, som kan innehålla flera hX Avdelning för introduktion/navigation Avdelning för författare/copyright Del av sidan med navigation i Oberoende atomärt innehåll Valfri beskrivningstext till figure Nya taggar • • • • • • • • • video audio embed mark progress meter time ruby/rt/rp ... Videouppspelning utan plugin Ljuduppspelning utan plugin För att starta plugins. Ej tidigare spec:ad Text som är markerad i referenssyfte Visa hur långt som är kvar Mätvärde, t.ex. vid diskanvändning Datum, Tid, eller båda Annotering av (primärt) östasiatisk text Nya taggar • • • • • • • • wbr canvas command details summary datalist keygen output Hint för vad radbrytning kan göras Dynamisk rityta för javascript Kommando som användaren kan anropa Mera information om något, kan öppnas Sammanfattning av innehållet i details Lista av värden för <input type=”list”> Gränssnitt för generering av nyckelpar Någon slags utdata, t.ex. från beräkning (Några) ändrade taggar • • • • • • • • b cite hr i menu s small strong Stilistiskt annorlunda, utan extra vikt Titeln på ett refererat verk Tematiskt avbrott Text i annan stil, eller typografiskt kursiv Toolbar eller meny Inte längre relevant text Finstilt Vikt snarare än betoning Borttagna taggar Presentionstaggar • basefont • big • center • font • strike • tt • u Tillgänglighetsproblem • frame • frameset • noframes Har bättre ersättare • acronym • applet • isindex • dir Nya attribut för input-element • • • • • • • • • • • • • tel search url email datetime date month week time datetime-local number range color • Fallback till text där det inte känns igen. • Möjlighet att göra javascript-version • • där stöd saknas. Validering client-side Default-styling görs i webbläsaren Några intressanta attribut meta: charset <meta http-equiv="Content-Type“ content="text/html; charset=UTF-8"> input: autofocus input: placeholder style: scoped html: manifest iframe: sandbox <input type=”text” autofocus> <input type=”text” placeholder=”http://”> <style scoped> p { color: blue; } </style> <html manifest=”clock.manifest”> <iframe sandbox></iframe> Och 20-30 attribut till... Microdata-attribut <div> <h1>Hendershot's Coffee Bar</h1> <p>1560 Oglethorpe Ave, Athens, GA</p> </div> Microdata-attribut <div itemscope itemtype="http://data-vocabulary.org/Organization"> <h1 itemprop="name">Hendershot's Coffee Bar</h1> <p itemprop="address" itemscope itemtype="http://datavocabulary.org/Address"> <span itemprop="street-address">1560 Oglethorpe Ave</span>, <span itemprop="locality">Athens</span>, <span itemprop="region">GA</span>. </p> </div> Nya Javascript API:er • Canvas • Cross-document • • • • • Messaging Geolocation Inline Editing Local storage Selectors Video & Audio • Cross-Origin Resource • • • • • • • Sharing Drag and Drop History Offline apps Server events WebGL Web sockets Web workers Nya Javascript API:er • Canvas • Cross-document • • • • • Messaging Geolocation Inline Editing Local storage Selectors Video & Audio • Cross-Origin Resource • • • • • • • Sharing Drag and Drop History Offline apps Server events WebGL Web sockets Web workers Canvas • <canvas id="c" width="150" height="150”></canvas> • http://code.google.com/p/explorercanvas/ Canvas • <canvas id="c" width="150" height="150"> <img src="clock.png" width="150" height="150"> </canvas> • Göm <img> för Safari, som kan visa <canvas> men inte stödjer fallback Canvas var canvas = document.getElementById('tutorial'); var ctx = canvas.getContext('2d'); ctx.fillStyle = "rgb(200,0,0)"; ctx.fillRect(10, 10, 55, 50); ctx.fillStyle = "rgba(0, 0, 200, 0.5)"; ctx.fillRect(30, 30, 55, 50); Cross-document Messaging #1 <iframe src="http://dev.jquery.com/~john/message/" id="iframe"></iframe> <form id="form"> <input type="text" id="msg" value="Message to send"/> <input type="submit"/> </form> <script> window.onload = function(){ var win = document.getElementById("iframe").contentWindow; document.getElementById("form").onsubmit = function(e){ win.postMessage( document.getElementById("msg").value ); e.preventDefault(); }; }; </script> Cross-document Messaging #2 <b>This iframe is located on dev.jquery.com</b> <div id="test">Send me a message!</div> <script> document.addEventListener("message", function(e){ document.getElementById("test").textContent = e.domain + " said: " + e.data; }, false); </script> Cross-document Messaging • http://benalman.com/projects/jquery-postmessage-plugin/ Geolocation if (navigator.geolocation) { navigator.geolocation.getCurrentPosition( function (position) { alert( position.coords.latitude, position.coords.longitude ); }, function (error){ ... } ) } Geolocation if (navigator.geolocation) { navigator.geolocation.watchPosition( function (position) { alert( position.coords.latitude, position.coords.longitude ); }, function (error){ ... } ) } Geolocation http://gears.google.com Inline editing http://accessgarage.wordpress.com/2009/05/08/howto-hack-your-app-to-make-contenteditable-work/ Local Storage • sessionStorage – För en browsersession • localStorage – Över flera sessioner, knutna till en viss domän sessionStorage var field = document.getElementById("field"); if ( sessionStorage.autosave ) { field.value = sessionStorage.autosave; } setInterval(function(){ sessionStorage.autosave = field.value; }, 1000); sessionStorage http://code.google.com/p/sessionstorage/ Selectors API <table id="score"> <tr> <td>A</td> <td>87%</td> </tr><tr> <td>B</td> <td>78%</td> </tr><tr> <td>C</td> <td>81%</td> </tr> </table> var cells = document.querySelectorAll( "#score > tr > td:nth-of-type(2)" ); Selectors API <table id="score"> <tr> <td>A</td> <td>87%</td> </tr><tr> <td>B</td> <td>78%</td> </tr><tr> <td>C</td> <td>81%</td> </tr> </table> var cells = document.querySelector( "#score > tr > td:nth-of-type(2)" ); Selectors API • http://sizzlejs.com/ (4 kb) Audio API <audio id="a" controls> <source src="elvis.mp3" /> <source src="elvis.ogg" /> <!-- fallback --> </audio> Audio API <input type="button" value="Play" id="playpause" onclick="video.play()"> var audio = document.getElementById(”a”); var playpause = document.getElementById('playpause'); audio.onpause = function(e) { playpause.value = 'Play'; playpause.onclick = function(e) { video.play(); } } video.onplay = funtion(e) { playpause.value = 'Pause'; playpause.onclick = function(e) { video.pause(); } } Audio API Video API <video width="320" height="240" controls> <source src="pr6.mp4" type='video/mp4;codecs="avc1.42E01E, mp4a.40.2"'> <source src="pr6.webm" type='video/webm; codecs="vp8, vorbis"'> <source src="pr6.ogv" type='video/ogg; codecs="theora, vorbis"'> </video> Video API var idata = bc.getImageData(0,0,w,h); var data = idata.data; for(var i = 0; i < data.length; i+=4) { var r = data[i]; var g = data[i+1]; var b = data[i+2]; var brightness = (3*r+4*g+b)>>>3; data[i] = brightness; data[i+1] = brightness; data[i+2] = brightness; } idata.data = data; c.putImageData(idata,0,0); Video API Hur gör man? <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1strict.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" lang="sv" xml:lang="sv"> <head> <title>Stockholms universitet: Startsida</title> <meta http-equiv="content-type" content="text/html; charset=ISO-8859-1" /> <link rel="stylesheet" type="text/css" href="style.css"/> Hur gör man? <!DOCTYPE html> <html xmlns="http://www.w3.org/1999/xhtml" lang="sv" xml:lang="sv"> <head> <title>Stockholms universitet: Startsida</title> <meta http-equiv="content-type" content="text/html; charset=ISO-8859-1" /> <link rel="stylesheet" type="text/css" href="style.css"/> Hur gör man? <!DOCTYPE html> <html lang="sv"> <head> <title>Stockholms universitet: Startsida</title> <meta http-equiv="content-type" content="text/html; charset=ISO-8859-1" /> <link rel="stylesheet" type="text/css" href="style.css"/> Hur gör man? <!DOCTYPE html> <html lang="sv"> <head> <title>Stockholms universitet: Startsida</title> <meta charset="ISO-8859-1"> <link rel="stylesheet" type="text/css" href="style.css"/> Hur gör man? <!DOCTYPE html> <html lang="sv"> <head> <title>Stockholms universitet: Startsida</title> <meta charset="ISO-8859-1"> <link rel="stylesheet" href="style.css"/> Förhållandet till XHTML • 99% validerar inte idag • Många skickar XHTML som text/html • Två vägar: • Gör HTML striktare (XHTML 2) • Gör specifikationen friare vägen som valdes • Men... finns också en XML-serialisering av HTML5, kallad XHTML5. Vad krävs för XHTML5? • • • • Att man följer XML-specifikationen Möjligt att vara både HTML och XHTML Valfritt med DOCTYPE SVG och MathML tillåtet i HTML Vad krävs för XHTML5? • Skickar som MIME-type: application/xml eller • • • • • • • application/xhtml+xml <?xml version="1.0" encoding="UTF-8"?> Ingen användning av document.write() XML-namespace för alla HTML-taggar: xmlns Syntax: <br/> <span class=”type”> Inga ”--” inne i kommetarer <![CDATA[...]]> för HTML-taggar som ej parsas CSS blir case-sensitive Frågor kring tillgänglighet • Hur tolkar skärmläsare de nya taggarna? • Tolkning av nästlade rubriknivåer • Nya tillgänglighetsfunktioner • WAI-ARIA, role-attributet • Mer struktur för innehåll, inkl. <nav> • Nya problem? • Fallback för video, audio, canvas? Tolkning av nya taggar • Alla de vanligaste skärmläsarna är plugins • Skärmläsare klarar det som webbläsare klarar • http://www.accessibleculture.org/research/html5aria/ • JAWS 11, Window-Eyes 7.11, SAToGO 3.0.202, VoiceOver • Internet Explorer 8 och Firefox 3.6 Nya tillgänglighetsfeatures • • • • • • Semantiska element Nya formulärfälttyper m. tangentbord Audio & Video: Tangentbord + Captioning Drag & Drop: Tangentbord Text-alternativ till bilder (font-face...) Alla har potiential, men ingen stöds ännu. Hönan eller ägget? • Varning: Hela gränssnitt i Canvas (t.ex. Bespin) ARIA Landmark Roles • Fungerar idag, validerar med HTML5 • Överlapp med HTML5-element, men stöds redan av flera skärmläsare • <nav role=”navigation”> • Roller: application, banner, complementary, contentinfo, form, main, navigation, search Exempel: JAWS ARIA • Del av ARIA, som tävlar med HTML5 om att vara först med tillgänglighetsfeatures, håll koll. • “If the host language incorporates ARIA support and there is a conflict between a host language feature and an ARIA feature, assistive technologies should assign preference to the ARIA feature.” ARIA Spec. Argument för HTML5 • Tekniska: • HTML • Javascript • Interoperabilitet HTML-delen • • • • HTML5 beskriver parsning, inte bara spec Fungerar rakt av med din befintliga kod Semantik möjliggör nya features på din kod Mindre kod att skriva, som man kommer ihåg, kan någon rabbla en html4-doctype? • Oro hos vissa: Dåligt verktygsstöd? • Enda som behöver ändras är doctype... Javascript • Spec:en startade som ”Web applications 1.0” • Tydligt mål att ge webbsidor samma möjligheter som desktopapplikationer • Extra tydligt i mobilvärlden, där webbsajter har samma möjligheter som native-appar. • Lika bra att börja experimentera nu, så att man är på banan när ännu flera features kommer Javascript • Prestanda: • QuerySelector • Canvas • Web Workers • Web sockets • WebGL • Interaktiv grafik: • Video • Audio • Canvas • WebGL Vare sig ni vill eller inte... • Webbläsartillverkare != Webbutvecklare • Samtliga kommer byta till HTML5-parsers • http://caniuse.com/ Sökmotorer • Bra: • Mer innehåll i text-form • Värdering (article > footer) • Segmentering (article, article, article) • Dåligt: • Oklart vad som stöds idag • Multipla nästlade hX-taggar Sökmotorer Bakåtkompatibilitet • En parser HTML5 • måste fungera för allt gammalt innehåll Problem: • Internet Explorer < 9 • Fallback för HTML • Javascript-funktioner Internet Explorer < 9 • • • • Stödjer inte CSS-styling av HTML5-element Får inte heller vara med i CSS-selektorer Kan inte köra javascript på HTML5-element Utskrift blir fel fast de andra är lösta Internet Explorer < 9 • document.createElement(”nav”) • Utskrift: Byt element mot div temporärt • http://html5shim.googlecode.com/svn/trunk/html5.js • Alternativ för avslagen JS: • Styla andra element • Använd * istället för elementen • Använd special-CSS i noscript-tagg Fallback för HTML-element • Okända element beter sig som span • article, aside, details, figcaption, figure, footer, header, hgroup, menu ,nav, section { display:block; } • • • http://html5doctor.com/html-5-reset-stylesheet/ Canvas, Video, Audio fallback • elementets innehåll Okända attribut på forumlärfält • Faller tillbaka på type=”text”. Använd JS för stöd. Javascriptfunktioner • Detektera stöd (väldefinerat), och använd bibliotek för att ersätta • Använd inbyggd funktionalitet om det går... • Modernizr bibliotek för att detektera • Klasser på body-taggen som kan användas från CSS-filen Verktyg • HTML5 Validator: http://html5.validator.nu/ • HTML5 Outliner: http://gsnedders.html5.org/outliner/ Källor • http://diveintohtml5.org/ • http://github.com/Modernizr/Modernizr/wiki/HTML5• • • • • Cross-browser-Polyfills http://www.slideshare.net/benschwarz/building-abetter-web http://www.slideshare.net/stevefaulkner/html-5accessibility http://www.brucelawson.co.uk/2009/redesigning-withhtml-5-wai-aria/ http://www.slideshare.net/remy.sharp/html5-js-apis http://dev.opera.com/articles/view/everything-youneed-to-know-about-html5-video-and-audio/
© Copyright 2024