HTML5 Peeks, Pokes and Pointers | |||||||
Common abbreviations (you’ll see these throughout this chart): | |||||||
$new=document.createElement
| $bool=function(any){return!(any=="no"||!any)}
| ||||||
Most new features can be detected in JavaScript. To test for HTML5 video support, create a <video> element and check for a property in its DOM: if("canPlayType" in $new("video")){...} See Chapter 2: Detecting HTML5 Features.
| |||||||
New elements | 5 > 2 Forms | ||||||
See Chapter 3: What Does It All Mean? | Backward-compatible with HTML 4. See Chapter 9: A Form of Madness. | ||||||
Test for support | Test for support | ||||||
<command> | "type" in $new("command")
| Validation | "noValidate" in $new("form")
| ||||
<datalist> | "options" in $new("datalist")
| Regex constraint | "pattern" in $new("input")
| ||||
<details> | "open" in $new("details")
| Placeholder text | "placeholder" in $new("input")
| ||||
<output> | "value" in $new("output")
| Autofocus | "autofocus" in $new("input")
| ||||
<progress> | "value" in $new("progress")
| Required | "required" in $new("input")
| ||||
<meter> | "value" in $new("meter")
| New input types Browsers may customize style or input methods. | |||||
<time> | "valueAsDate" in $new("time")
| type="search"
| search box | ||||
Text annotations | <ruby> , <rt> , <rp>
| type="number"
| spinbox | ||||
Semantics Usable in all browsers. IE < 9 requires a shim. | type="range"
| slider | |||||
<article> , <aside> , <header> , <hgroup> , <footer> ,
| type="color"
| color picker | |||||
<section> , <nav> , <figure> , <figcaption> , <mark> ,
| type="tel"
| telephone number | |||||
<summary>
| type="url"
| web address | |||||
Newly documented | <embed> , <keygen> , <wbr>
| type="email"
| email address | ||||
Obsolete Still supported, but won’t validate. | type="date"/"time"/"month"/"week"/"datetime"
| ||||||
<basefont> , <big> , <center> , <font> , <s> , <strike> ,
| Test for new input types All tests follow the same pattern. | ||||||
<frame> , <frameset> , <noframes> , <applet> , <dir> ,
| function() {
| ||||||
<isindex> , <tt> , <u> , <acronym> (use <abbr> )
| var i = $new("input");
| ||||||
Always quote your attribute values unless you’re a rockstar. Keep your trailing slashes if you like. Validation is still cool: html5.validator.nu | i.setAttribute("type", "search");
| ||||||
return i.type !== "text";
| |||||||
}
| |||||||
Some browers claim to “support” an input type but offer no default | |||||||
user interface. Modernizr can detect this. | |||||||
look ma, no plugins Multimedia | |||||||
Encode video with Firefogg (Theora), HandBrake (H.264), or Miro Video Encoder (multiple). See Chapter 5: Video on the Web. | |||||||
<audio> support | "canPlayType" in $new("audio")
| ||||||
Vorbis | $bool($new("audio").canPlayType('audio/ogg; codecs="vorbis"'))
| ||||||
MP3 | $bool($new("audio").canPlayType('audio/mpeg;'))
| ||||||
AAC | $bool($new("audio").canPlayType('audio/mp4; codecs="mp4a.40.2"'))
| ||||||
<video> support | "canPlayType" in $new("video")
| ||||||
WebM | $bool($new("video").canPlayType('video/webm; codecs="vp8, vorbis"'))
| ||||||
Theora | $bool($new("video").canPlayType('video/ogg; codecs="theora"'))
| ||||||
H.264 | $bool($new("video").canPlayType('video/mp4; codecs="avc1.42E01E, mp4a.40.2"'))
| ||||||
Properties | These apply to both <audio> and <video> elements.
| ||||||
src
| string | currentSrc
| string, read-only | ||||
preload
| string | tracks
| array of TimedTrack objects | ||||
currentTime
| in seconds | buffered
| TimeRanges object, read-only | ||||
initialTime
| in seconds, read-only | played
| TimeRanges object, read-only | ||||
duration
| in seconds, read-only | seekable
| TimeRanges object, read-only | ||||
startOffsetTime
| datetime, read-only | networkState
| enumerated, read-only | ||||
paused
| boolean | readyState
| enumerated, read-only | ||||
ended
| boolean, read-only | error.code
| enumerated, read-only | ||||
autoplay
| boolean | List multiple | |||||
loop
| boolean | ||||||
controls
| boolean | ||||||
volume
| 0.0 to 1.0, default = 1.0 | ||||||
muted
| boolean | ||||||
playbackRate
| default = 1.0 | ||||||
Offline | IsGeolocationPartOfHTML5.com Geolocation | ||||||
See Chapter 8: Let’s Take This Offline. | Location sharing is always opt-in. See Chapter 6: You Are Here. | ||||||
Test for support | window.applicationCache
| Test for support | navigator.geolocation
| ||||
<html manifest> | Links to cache manifest. | Functions | |||||
Cache manifest sections | Position getCurrentPosition(callback, err, opt);
| ||||||
CACHE: | Always cached. No wildcards. | long watchPosition(callback, err, opt);
| |||||
NETWORK: | Never cached. "*" wildcards. | void clearWatch(watchId);
| |||||
FALLBACK: | Pairs; second is used offline. | void callback(position); Called on success
| |||||
Events | First four are most common. | void err(positionError); Called on error
| |||||
checking
| always first | PositionOptions object | |||||
downloading
| found manifest, fetching stuff | timeout
| in milliseconds | ||||
progress
| still fetching stuff | maximumAge
| also milliseconds | ||||
cached
| all resources cached | enableHighAccuracy
| true or false | ||||
noupdate
| manifest hasn't changed | Position object (in callback) has timestamp and coords .
| |||||
updateready
| call swapCache() to activate
| Coordinates object Unsupported properties will be null .
| |||||
obsolete
| manifest is 404 (or 410) | latitude
| in decimal degrees | ||||
error
| it all went wrong somewhere | longitude
| also decimal degrees | ||||
HTTP semantics still apply to resources listed in the cache manifest, so check your | altitude
| meters above the reference ellipsoid | |||||
accuracy
| in meters | ||||||
altitudeAccuracy
| also in meters | ||||||
heading
| degrees CCW from true north | ||||||
speed
| in meters/second | ||||||
PositionError object (in err callback) has message and code :
| |||||||
TIMEOUT, POSITION_UNAVAILABLE, | |||||||
PERMISSION_DENIED, or UNKNOWN_ERROR | |||||||
Math is hard. Let’s go shopping! Canvas | |||||||
Paths are like tracing in pencil; nothing is drawn until fill() or stroke() ! See Chapter 4: Let’s Call It A Draw(ing) Surface.
| |||||||
Basic support | "getContext" in $new("canvas")
| ||||||
Text support | typeof $new("canvas").fillText=="function"
| ||||||
Functions | Root path is implicit; subpaths must be explicit. drawImage() can also draw video or canvas.
| ||||||
beginPath();
| drawImage(image,dx,dy,dw,dh);
| quadraticCurveTo(cpx,cpy,x,y);
| |||||
closePath();
| rotate(angle);
| bezierCurveTo(cp1x,cp1y,cp2x,cp2y,x,y);
| |||||
moveTo(x,y);
| translate(x,y);
| arc(x,y,radius,startAngle,endAngle,anticlockwise);
| |||||
lineTo(x,y);
| arcTo(x1,y1,x2,y2,radius);
| getImageData(sx,sy,sw,sh);
| |||||
rect(x,y,w,h);
| isPointInPath(x,y);
| putImageData(imagedata,dx,dy,x,y,w,h);
| |||||
fill();
| fillRect(x,y,w,h);
| fillText(text,x,y,maxWidth);
| |||||
stroke();
| strokeRect(x,y,w,h);
| strokeText(text,x,y,maxWidth);
| |||||
clip();
| clearRect(x,y,w,h);
| measureText(text);
| |||||
save();
| setTransform(a,b,c,d,e,f);
| createLinearGradient(x0,y0,x1,y1);
| |||||
restore();
| transform(a,b,c,d,e,f);
| createRadialGradient(x0,y0,r0,x1,y1,r1);
| |||||
scale(x,y);
| createImageData(sw,sh);
| createPattern(image,repetition);
| |||||
Properties | All properties are read/write. fillStyle and strokeStyle can also be a gradient or pattern.
| ||||||
fillStyle
| CSS color, default = "black" | shadowColor
| CSS color, default = "black" | ||||
strokeStyle
| CSS color, default = "black" | shadowOffsetX
| in pixels, default = 0 | ||||
font
| CSS font, default = "10px sans-serif" | shadowOffsetY
| in pixels, default = 0 | ||||
textAlign
| enumerated, default = "start" | shadowBlur
| in pixels, default = 0 | ||||
textBaseline
| enumerated, default = "alphabetic" | Learn about states! A canvas state includes the clipping path, all properties, and all transformations. | |||||
globalAlpha
| 0.0 (transparent) to 1.0 (opaque) | ||||||
lineWidth
| in pixels, default = 1 | ||||||
lineCap
| enumerated, default = "butt" | ||||||
lineJoin
| enumerated, default = "miter" | ||||||
miterLimit
| float, default = 10 | ||||||
Bits & Bytes | |||||||
Doctype | <!DOCTYPE html> Triggers standards-based rendering in all browsers. It’s 2011; stop relying on “quirks mode”!
| ||||||
Text encoding | <meta charset="utf-8"> Always declare a charset, even if you’re a rockstar. UTF-8 is always a safe choice.
| ||||||
Optional end tags | <html> , <head> , <body> , <li> , <p> , <dt> , <dd> , <colgroup> , <option> , <optgroup> , <rt> , <rp> ,
| ||||||
<thead> , <tbody> , <tfoot> , <tr> , <td> . Exception: always close <p> before <table> to avoid IE weirdness.
| |||||||
Optional start tags | <html> , <head> , <body> , <tbody> , <colgroup> . Amaze your friends! Skip the <html> tags and still validate!
| ||||||
New attributes | <a media> , <a ping> , <base target> , <style scoped> , <script async> , <ol reversed>
| ||||||
Miscellaneous tests | See The All-In-One Almost-Alphabetical No-Bullshit Guide to Detecting Everything. | ||||||
IndexedDB | window.indexedDB
| contentEditable | "isContentEditable" in $new("a")
| ||||
Web Workers | window.Worker
| Drag-and-drop | "draggable" in $new("span")
| ||||
Web Sockets | window.WebSocket
| File API | typeof FileReader!=="undefined"
| ||||
X-doc messaging | window.postMessage
| Undo history | typeof UndoManager!=="undefined"
| ||||
Web SQL | window.openDatabase
| <iframe sandbox> | "sandbox" in $new("iframe")
| ||||
Web Storage | "localStorage" in window && window["localStorage"] !== null See Chapter 7: Local Storage.
| ||||||
History API | window.history && window.history.pushState See Chapter 11: History API.
| ||||||
Inline SVG | function() { var e=$new("div"); e.innerHTML="<svg></svg>";
| ||||||
return window.SVGSVGElement && e.firstChild instanceof window.SVGSVGElement}
| |||||||
Serial Number 110518 Credits | |||||||
Writing | Mark Pilgrim | References | HTML5, HTML-diff, HTML vs. XHTML | ||||
Code | Modernizr (Paul Irish et. al.) | Inspiration | Beagle Bros | ||||
Typography | Chunk, Latin Modern | License | CC-BY-3.0 | ||||