Jesse Cravens and Jeff Burtoft
Editors: Simon St. Laurent and Meghan Blanchette
Production Editor: Holly Bauer
Copyeditor: Audrey Doyle
Proofreader: Rachel Leach
Indexer: Judith McConville
Cover Designer: Mark Paglietti
Interior Designer: David Futato
Illustrator: Rebecca Demarest
Book Details
Price
|
2.00 USD |
---|---|
Pages
| 504 p |
File Size
|
25,210 KB |
File Type
|
PDF format |
ISBN
| 978-1-449-33499-4 |
Copyright
| 2013 Jesse Cravens, Jeff Burtoft |
Jesse Cravens is a senior engineer at frog, where he works with the world’s leading
companies, helping them to design, engineer, and bring to market meaningful products
and services. He possesses a deep background in web application development
and has recently been focusing on single-page web application architecture, the mobile
web, and HTML5.
He previously held senior development and technical management positions at USAA,
leading a team of mobile application developers in the planning, designing, development,
testing, implementation, and maintenance of USAA’s industry-leading iOS, Android,
Blackberry, and mobile web applications for their eight million members deployed
worldwide.
Jesse holds a B.A. in Art from Rice University and a master’s degree in Curriculum
and Instruction from the University of Texas at San Antonio. He currently resides in
Austin, TX, with his wife and two children. He can be reached at jessecravens.com.
Jeff Burtoft is an HTML5 Evangelist for Microsoft, where he has the pleasure of
working with the HTML5 community every day. He is also a blogger at
HTML5Hacks.com and has personally released several Hybrid Mobile Applications
into some of the popular mobile app markets.
Jeff Burtoft is an HTML5 Evangelist for Microsoft, where he has the pleasure of
working with the HTML5 community every day. He is also a blogger at
HTML5Hacks.com and has personally released several Hybrid Mobile Applications
into some of the popular mobile app markets.
Jeff has been in the web development community for over 10 years. His work experience
is varied, with positions such as web master of a startup company and multimedia
consultant for the Department of Defense. Jeff has also spent over five years
working as the principal front-end engineer for a Fortune 500 Company in San Antonio,
TX. Jeff has a B.A. in Rhetorical Studies from Duquesne University and a certification
in Latin American Business from Inter-American University in San Juan, Puerto
Rico. Throughout the years, Jeff’s first love has been the web: HTML, JavaScript, CSS,
and now HTML5.
Jeff lives in Bellevue, WA, with his wife and three children. In his free time, he enjoys
writing mobile apps and playing video games with his kids
Preface
HTML5 is the new catchall term for “the Web.” Like Ajax and Web 2.0 before, the term
can cause confusion when used in different contexts. HTML5 is technically the fifth
revision of the HTML markup language, but you will find the term being used to describe
an umbrella of next-generation web technology specifications that include
CSS3, SVG, and JavaScript APIs.
In order to understand HTML5 in this context, first it is important to understand that
HTML5 is not one technology that is applied or added to a web application. There are
more than 30 specifications within the HTML5 umbrella, and each is at a different
stage of maturity. Furthermore, each specification is also at a different state of adoption
and, potentially, implementation, by the major browser manufacturers.
Depending on an application’s business requirements, the app’s developer will pick
and choose the HTML5 features to take advantage of. It is entirely possible that only
a handful of the available specifications will be used for the final implementation of a
modern web application.
Critics often proclaim it is necessary to wait until HTML5 is 100% supported before
you use it in your application. This is simply not true. Many specifications have already
reached maturity and are fully implemented by modern browsers. Other specifications
are at an early stage of development, or are poorly supported by some of the
major browser manufacturers. It’s important to know which specification type you are
using. Research is helpful, but the only true way to tell is to thoroughly test your apps
in all browsers.
For the specifications that are newer or that aren’t as strongly supported, some clever
developers have produced free and open source code that can be utilized to shim, or
polyfill, support in older browsers. As defined by Remy Sharp, “A polyfill, or polyfiller,
is a piece of code (or plug-in) that provides the technology that you, the developer,
expect the browser to provide natively. Flattening the API landscape, if you will.” In our
opinion, the best polyfill is one that lets you write your code just as you would if the
feature were natively supported, and that does the work in the background when necessary,
being transparent to both the user and the developer. In most circumstances,
each HTML5 specification has a polyfill, or multiple competing polyfills, and is ready
to be used today. You will find references to some of the Web’s most effective polyfills
within this book.
Table of Contents
Preface . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . vii
1. Hacking the Semantic Way . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1
Hack 01. Simplify Your Doc with the Right <doctype> 1
Hack 02. Adopt Common Structures 2
Hack 03. Make Your New HTML5 Tags Render Properly in Older Browsers 5
Hack 04. Bring Back the <input> Tag 11
Hack 05. Easily Implement Form Validation Without JavaScript 16
Hack 06. Improve the Usability of Your Forms with New Controls 24
Hack 07. Know What’s Going On in Your App with New DOM Events 37
Hack 08. Add Rich Context to Your Markup with Custom Data 40
Hack 09. Track User Events with Custom Data 44
Hack 10. Make Your Page Consumable by Robots and Humans Alike with Microdata 47
2. Hacking with Style . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 53
Hack 11. Use Experimental CSS Features with Browser Prefixes 54
Hack 12. Design with Custom Fonts Using Web Fonts 56
Hack 13. Use Google Web Fonts for Simple @font-face Implementation 61
Hack 14. Use CSS3 Text Effects to Make Your Text Not Suck 70
Hack 15. Make Elements Appear Transparent Without Altering the Opacity 73
Hack 16. Use Media Queries to Build Responsive Design 77
Hack 17. Make Your Web App Respond to Device Orientation Changes 81
Hack 18. Take Full Control of Your DOM with Pseudoclasses 85
Hack 19. Hack Up Your Sprite and Put Your Images Inline with Image Data URIs 87
Hack 20. Build Gradients the Easy Way 92
Hack 21. Make Borders Interesting Again, with Border Treatments 98
Hack 22. Set Multiple Background Images to the Same Element 103
Hack 23. Free Your Page Elements from Their Traditional Space with CSS3 Transforms 106
Hack 24. Turn Transforms into Animations with CSS3 Transitions 110
Hack 25. Make iOS-Style Card Flips with CSS Transforms and Transitions 113
Hack 26. Use Respond.js to Polyfill CSS3 Media Queries in IE 117
Hack 27. Control Mobile Layout with the viewport <meta> Tag 121
3. Multimedia Hacking . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 125
Hack 28. Embed Video Directly in Your Application with HTML5 Video 125
Hack 29. Choose the Right Codecs for Your Video Files 128
Hack 30. Create Custom Video Controls with Video APIs 130
Hack 31. Replace the Background of Your HTML5 Video with the <canvas> Tag 135
Hack 32. Add Subtitles to Your HTML5 Video Element 139
Hack 33. Beautify Your HTML5 Video Cues 143
Hack 34. Use the Cuepoint.js Polyfill for Subtitles 147
Hack 35. Easily Build Audio-Rich Applications with Buzz 150
Hack 36. Simplify Your HTML5 Media with MediaElement.js 154
4. Hacking Your Graphics with Canvas and SVG . . . . . . . . . . . . . . . . 157
Hack 37. Draw Shapes on Your HTML5 <canvas> Tag 158
Hack 38. Apply Styles to Your Canvas Elements 164
Hack 39. Style Canvas Elements with Image Files 171
Hack 40. Use the HTML5 <canvas> Tag to Create High-Res, Retina-
Display-Ready Media 177
Hack 41. Accelerate Animation with Canvas Drawings 181
Hack 42. Build “Native” Illustrations with Scalable Vector Graphics 188
Hack 43. Style SVG Elements with CSS 192
Hack 44. Animate Illustrations with SVG 199
Hack 45. Embed SVG Directly in Your HTML 204
5. User Interactions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 209
Hack 46. Make Any Content Draggable Within Your Application 210
Hack 47. Update the DOM with a Drag-and-Drop Data Transfer Object 214
Hack 48. Drag Files In and Out of Your Web Application 220
Hack 49. Make Any Element on Your Page User-Customizable with
Editable Content 226
Hack 50. Turn Your Web Page into a WYSIWYG Editor 229
Hack 51. Take Control of the Browser History Buttons with HTML5 Session History 232
6. Client-Side Data Storage Hacks . . . . . . . . . . . . . . . . . . . . . . . . . 239
Hack 52. Embed Binary Data in an Inline URL 239
Hack 53. Convert a Data URI to a Blob and Append It to Form Data with XHR2 244
Hack 54. Use the WebStorage API to Persist User Data 246
Hack 55. Polyfill LocalStorage with YepNope.js and Storage.js 252
Hack 56. Cache Media Resources Locally with the FileSystem API 255
Hack 57. Build a Milestone Calendar with IndexedDB and FullCalendar.js 264
7. Geolocation Hacks . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 273
Hack 58. Use the Geolocation APIs to
Display Longitude and Latitude in a Mobile Web Application 274
Hack 59. Use Google’s Geocoding API to Reverse-Geocode a User’s Location 280
Hack 60. Update a User’s Current Location in a Google Map 286
Hack 61. Use the Geoloqi Service to Build a Geofence 291
Hack 62. Use the Geoloqi Real-Time Streaming Service to Broadcast a Remote User’s Movement 298
Hack 63. Polyfill Geolocation APIs with Webshims 302
8. WebWorker API . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 307
How Browsers Handle JavaScript 307
Hack 64. Use the BlobBuilder Interface to Create an Inline Worker 309
Hack 65. Perform Heavy Array Computations in a Dedicated Web Worker 315
Hack 66. Use a Timer to Send Application State to Workers 325
Hack 67. Process Image Data with Pixel Manipulation in a Dedicated Worker 338
Hack 68. Use Import Scripts to Make Twitter JSONP Requests 343
Hack 69. Connect to Shared Workers Simultaneously from Multiple Browser Windows 347
9. Hacking HTML5 Connectivity . . . . . . . . . . . . . . . . . . . . . . . . . . . 351
Hack 70. Use Kaazing’s Remote WebSocket Server to Echo Simple
Messages from a Browser 352
Hack 71. Build a Blazing-Fast WebSocket Server with Node.js and the ws Module 360
Hack 72. Build a Donation Thermometer with Web Sockets, the Pusher API, and PHP 367
Hack 73. Build Plug-Ins for jWebSocket 383
Hack 74. Push Notifications to the Browser with Server-Sent Events 394
Hack 75. Configure Amazon S3 for Cross-Origin Resource Sharing to Host a Web Font 404
Hack 76. Control an HTML5 Slide Deck with Robodeck 414
Hack 77. Inspect a Socket.IO Connection to Determine If It Is Native or Emulated 435
Hack 78. Build a Simple SPDY Server with node-spdy 435
10. Pro HTML5 Application Hacks with Node.js . . . . . . . . . . . . . . . . . 439
HTML5 Application Design Considerations 439
Hack 79. Deliver “Hello Html5” to the Browser 440
Hack 80. Detect the User Agent String Within the Request Object 448
Hack 81. Use Node.js’s Response Object to Respond to the Client with
Device-Specific Data 450
Hack 82. Use the Node Package Manager to Add a Web Application
Framework As a Third-Party Module 452
Hack 83. Use the Express Application Generator to Bootstrap Your App 453
Hack 84. Build a Custom Module to Handle Routing 455
Hack 85. Configure Express to Use a View Engine 457
Hack 86. Use Jade Layouts to DRY Up Your Application’s Views 458
Hack 87. Use a Jade Partial to Create a Common Navigation Bar in Your Views 461
Hack 88. Use Jade Mixins to Populate Your Views with Data 463
Hack 89. Set Up Expressive, Dynamic, Robust CSS with Stylus 466
Hack 90. Include HTML5 Boilerplate As Your Default Starter Template 469
Become an HTML5 Hacker 475
Index . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 477
Why HTML5?
A beginning developer might ask, “Why should I care about HTML5?” Unfortunately,
there is not a simple answer to this question. Even the most advanced web developers
will answer this question differently depending on the features they are most familiar with.
But overall, there are some common trends that span the feature set and on which
most developers would agree. Before HTML5, the Web was not considered to be a rival
to native desktop and mobile applications. Nearly since its inception, the Web has
been considered to be an easily deployable, cross-platform solution. However, it has
been hampered due to its lack of highly important business requirements: namely,
performance, security, and graphics. The theory has been that if the modern web
browser could mature as an application platform, developers would be able to stop
creating platform-specific native applications.
The Ajax revolution took the web application world in the right direction by providing
asynchronous, background updates to the server via the XMLHttpRequest object,
JSON transfer format, and an explosion of JavaScript libraries that stretched the
boundaries of application development in the browser, many of which continue to
make up the basis for polyfill support. However, HTML5 is about the modern browser
providing the necessary support to enable sophisticated application development
natively. In order to accomplish this, features such as the ability to maintain browser
history and bookmarking during asynchronous interactions, cross-domain communication,
local storage, offline support, rich graphics, and even new protocols to improve
the speed and efficiency of the connectivity layer still needed to be created and improved.
Browser prefixes are most common in CSS. We urge you to read the introduction to
Chapter 2 to get a full explanation of how browser prefixes are implemented in CSS.
Why HTML5 Hacks?
The term hacker carries a negative connotation within the media, but the term has
evolved to describe a number of different technical people. Wikipedia provides three
very different definitions for the term hacker:
1. Hacker (computer security), someone who accesses a computer system
by circumventing its security system
2. Hacker (hobbyist), who makes innovative customizations or combinations
of retail electronic and computer equipment
3. Hacker (programmer subculture), who shares an anti-authoritarian approach
to software development now associated with the free software
movement
It is in the context of definition 2 that we are using the term hack. Among these types
of hacks, the term refers to a self-contained proof of concept, similar to agile spikes,
or recipes. These quick solutions exercise or validate an API, feature, or technology,
and can also serve a very important role, not only in educating the software team, but
also in driving the direction of development within a project’s life cycle.
Who This Book Is For
HTML5 Hacks introduces readers to the umbrella of HTML5 specifications through
90 hacks. For beginners it can serve as a starting point for building browser-based
applications. For intermediate to advanced developers it can serve to quickly fill in the
gaps for specifications they have yet to be exposed to.
Nevertheless, this book will be what you make of it.
.
Contents of This Book
This book consists of 10 chapters, organized as follows:
Chapter 1, Hacking the Semantic Way
Introduces new key HTML5 markup elements and attributes
Chapter 2, Hacking with Style
Covers visual expression and behaviors with CSS3
Chapter 3, Multimedia Hacking
Discusses HTML5 audio and video tags
Chapter 4, Hacking Your Graphics with Canvas and SVG
Covers working with Canvas and SVG
Chapter 5, User Interactions
Introduces HTML5 drag-and-drop, editing elements, and other interactions.