SlideShare une entreprise Scribd logo
1  sur  233
So good, it hurts.
Workshop Demo Download:
bit.ly/TaskListDemo
10 %
Read
20%
Hear
30% See
50% Hear + See
70% Say + Write
90% Experience
Hello, my name is…
@toddanglin
VP, Technology & Developer Relations
Telerik (a Progress Company)
AM
oBrowsers & Debugging
oNew web APIs
o Markup
o Media
o Storage
o Offline
PM
oModern JavaScript (ES6)
oModern CSS
o Styling
o Layouts
o Mobile & Media Queries
1. Expand awareness of modern web
technologies
2. Introduce techniques for using modern web
3. Enhance knowledge of existing web
technologies
4. Provide practical “next steps” on modern
web journey
Source: Wikipedia, https://en.wikipedia.org/wiki/HTML5
22:31
<HTML>
CSS:3;
ECMAScript();
“HTML5”
“Living Standard”
WebSockets FileAPI
WebGL
HTML5 Forms
Geolocation
Offline
Canvas Video
Audio
Canvas
Video
Geolocation
Semantic
Tags
SVG
WHATWG | W3C | IETF
Where the word “standard” reeks with irony
WD LC CR PR REC
Browser
Layout/Rendering Engine
JavaScript Engine
Browser Layout Engine JavaScript Engine
Mozilla Gecko Spidermonkey
Chrome/Opera
Blink
(fork from WebKit)
V8
Safari WebKit JavaScriptCore
IE/Edge Trident/EdgeHTML Chakra
Node.js V8
of internet browses with
IE, FF, Safari, Chrome, or Opera
99%
StatCounter NetMarketShare
Records data from 3 million websites Analyzes data from 40 thousand websites
Analyzes 17.5 billion page views per month Analyzes 160 million unique visits per month
Make no adjustments or weightings other than
removing bot activity and pre-rendering
Applies country weightings according to CIA
Internet Traffic data. For example, if Brazil
accounts for 4% of global traffic but only 2% of
NetMarketShare data, the results are doubled
Is independent and has no commercial partners
Is a commercial company with partners paying
for data
Reports are based on page views Reports are based on daily unique visitors
Source: http://www.sitepoint.com/browser-trends-april-2015-statcounter-vs-netmarketshare/
“Evergreen” Versioned
WinXP
WinVista
< v9
IE Evergreen
Source: Morgan Stanley
0
20
40
60
80
100
120
140
160
180
200
IE7 IE8 IE9 IE10 IE11 Edge
(13)
FeatureCount
Supported HTML5/CSS3 Features
As reported by CanIUse.com
Selectors (2.1)
position:fixed
7.0 LocalStorage
DragDrop API
JSON
querySelector
8.0
Video
Audio
WOFF
SVG
Canvas
Geolocation
Semantic Tags
Lots of CSS3
9.0
XHR2
Web Workers
Web Sockets
IndexedDB
History API
File API
CORS
Blob URLs
Typed Arrays
Defer/Async
Form Validation
New Input Types
Offline App Cache
Much more CSS3
10.0
Selectors (2.1)
position:fixed
7.0 LocalStorage
DragDrop API
JSON
querySelector
8.0
Video
Audio
WOFF
SVG
Canvas
Geolocation
Semantic Tags
Lots of CSS3
9.0
XHR2
Web Workers
Web Sockets
IndexedDB
History API
File API
CORS
Blob URLs
Typed Arrays
Defer/Async
Form Validation
New Input Types
Offline App Cache
Much more CSS3
10.0
3D Transforms
Web Crypto
CustomEvent
X-Doc Messaging
DeviceOrientation
FileReader API
HTTP/2
CSP 1.0
SVG effects
Touch events
Video tracks
ES6
getUserMedia
Templates
Picture
Meter
PointerLock API
ASM.js
Gamepad API
Date/time inputs
…
Edge (13)
status.modern.ie
17 18 33
113 113
222 250 270 300 304 322 329 346
396 396 396 405
449 452 467 470 493 497 501 526
0
100
200
300
400
500
600
IE10
IE11
Edge
X X X X X
X X X
X X
X X X
X X
Only use features
natively available in all
target browsers
X X X X X
X X X
X X
X X X
X X
Only use features
either natively available
OR available via
JavaScript polyfill
X X
X X X X X
X X X
X X
X X X
X X
Only use features
available in target
browsers AND design
alternate experience
for other browsers
X X
X X X
X X
22:31
graceful
degradation
[Source: Aaron Olaf, Flickr]
22:31
[Source: Mercedes USA, http://mbusa.com/]22:31
X X X X X
X X X
X X
X X X
X X
Create experiences
targeted at specific
browsers (or classes of
browsers)
X X
X X X
X X
22:31
Modernizr.[featureName]
if (Modernizr.canvas) { //Use It! }
.[featureName] || .no-[featureName]
.no-canvas { //Styles }
.canvas { //Other Styles}
Modernizr
It’s more than the DOM and Images
DOM/Markup
JavaScript API
CSS States
WebAPI
(or today, too, if IE support is not critical)
HTML5 Forms
Geolocation
Video
CSS3
{Web Sockets}
{Storage}
{IndexedDb}
{Semantic Data}
tag: <header> <footer> <nav> <article> <hgroup>
support: IE9, FF3.5, Safari, Chrome, Opera
<body>
<div id=“header”>
</div>
<div id=“content”>
<div id=“nav”></div>
</div>
<div id=“footer”>
</div>
</body>
<body>
<header>
</header>
<section>
<nav></nav>
</section>
<footer></footer>
</body>
VS.
oAccessibility*
oSEO*
oCode readability
oDeveloper street cred
oWhy not?
data-*
Valid approach to storing data in HTML
<!--Store values in data-* attributes-->
<div id="mydiv" data-key="26" data-name="My product name">
...
</div>
<!--Access values with JavaScript-->
var key = mydiv.getAttribute("data-key")
//OR
var key = mydiv.dataset.key
support: IE9, FF3.5, Safari, Chrome, Opera
oEmbed data in page
22:31
Semantic rich media
Reach more people on more devices
Container
Codec
Silverlight
FlashHTML5
<video src="clip.mp4" controls type="video/mp4">
<object classid="...">
<param name="flashvars" value="file=clip.mp4" />
<param name="movie" value=“player.swf" />
<embed src="player.swf” type="application/x-shockwave-
flash” flashvars="file=clip.mp4" />
Your browser does not support video
</object>
</video>
support: IE9, FF3.6, Safari, Chrome, Opera
22:31
oVideo for plug-less mobile
devices
oEliminate dependencies
on Flash/Silverlight (future
proofing)
22:31
tag: time, date, search, email, etc.
Web Forms 2.0 HTML5 Forms
<form>
<input type="email" autofocus="autofocus"
placeholder="Enter your email" />
</form>
support: Safari, FF4*, Chrome, Opera
oHTML: Required, Type, Pattern
oJS: checkValidity()
oCSS: :invalid, :valid, :required
<form>
<input type="email" placeholder="Enter your email" required title="Please
enter a valid email address" />
<input type="submit" value="Go" />
</form>
via A List Apart (bit.ly/html5validation)
22:31
22:31
iOS 7 & 8 deprecated datetime support
& handles week poorly
22:31
22:31
“Consuming raw or undercooked meat, poultry,
seafood, shellfish or eggs may increase risk of
foodborne illness.”
COOKEDRAW
22:31
Available heat:
- Kendo UI (validation + UI)
- jQuery HTML5 Form
- H5F
oMobile input
oImproved form behavior in
modern browsers
oSemantic forms
oNew styling options
22:31
navigator.geolocation.getCurrentPosition(callback);
function callback(position){
var lat = position.coords.latitude;
var lng = position.coords.longitude;
var acc = position.coords.accuracy;
}
support: IE9, Safari, FF3.5, Chrome, Opera
opt-in user feature to share physical position
COOKEDRAW
22:31
oEnrich apps with location
awareness
oTrack user position
22:31
sessionStorage = per window
localStorage = per browser
<script>
sessionStorage.setItem('value', this.value);
localStorage.setItem('value', this.value);
sessionStorage.getItem(‘value’);
sessionStorage.clear();
localStorage.clear();
</script>
support: IE9, FF3.5, Safari, Chrome, Opera
5 MB limit
protocol
host port
(+ browser mode)
COOKEDRAW
22:31
Available heat:
- localstorage polyfill
- amplifyJS
- lawnchairJS
oBetter than cookies
oSimple API
22:31
easy drag & drop for any HTML element
<!-- Make an HTML element draggable -->
<div id=“myDiv” draggable=“true”>...</div>
//Handle the DnD events, such as Drop
function onDrop(e){
//e.target is the current target element
if(e.stopPropigation) e.stopPropigation(); //Prevent redirect
//Do something with payload
return false;
}
support: IE9, FF, Safari, Chrome, Opera
IMG
File
HTML
draggable
dragstart
drag
dragenter
dragleave
dragover
drop
dragend
Change appearance,
Set payload
Change drop target
appearance
Process DnD
payload
dragstart
drop
e.dataTransfer.setData([MIME type], [payload])
e.dataTransfer.getData([MIME type])
e.dataTransfer.files; //FileList object
COOKEDRAW
22:31
Available heat:
- Kendo UI (DnD & Upload)
- jQuery UI Draggable
oSupport DnD files in the
browser
oReduce JS footprint
22:31
access to local file system & data streaming
var file = e.dataTransfer.files[0],
reader = new FileReader();
reader.onload = function (event) {
var dataUrl = event.target.result;
};
reader.readAsDataURL(file);
.readAsBinaryString(file);
.readAsText(file);
.readAsArrayBuffer(file);
support: IE10, FF4, Chrome, Opera 11.1
COOKEDRAW
22:31
oProcess files with fewer
server trips
oImprove usability
oDesktop-like experiences
oBetter file upload
22:31
<div id="slider">
<input checked="" type="radio" name="slider" id="slide1" selected="false">
<input type="radio" name="slider" id="slide2" selected="false">
<input type="radio" name="slider" id="slide3" selected="false">
<input type="radio" name="slider" id="slide4" selected="false">
<div id="slides">
<div id="overflow">
<div class="inner">
<img src="images//rock.jpg">
<img src="images/grooves.jpg">
<img src="images/arch.jpg">
<img src="images/sunset.jpg">
</div>
</div>
</div>
<label for="slide1"></label>
<label for="slide2"></label>
<label for="slide3"></label>
<label for="slide4"></label>
</div>
<img-slider>
<img src="images/sunset.jpg" alt="a dramatic sunset”>
<img src="images/arch.jpg" alt="a rock arch”>
<img src="images/grooves.jpg" alt="some neat grooves”>
<img src="images/rock.jpg" alt="an interesting rock”>
</img-slider>
1. Custom Elements
2. Shadow DOM
3. Templates
4. HTML Imports
<head>
<link rel=“import” href=“/components/my-tag.html”>
...
</head>
<body>
<my-tag ranking=“2” />
</body>
Shadow Root
<img-slider>
</img-slider>
Shadow Host Shadow Boundary
Component CSS
Component JS
Component DOM
COOKEDRAW
22:31
Available heat:
- X-Tags
- Polymer
Polymer
(Google)
IE10+
X-Tag
(Mozilla)
IE9+
*Custom Elements only
<kendo-dropdownlist style="width: 100%;">
<option value="male" selected>Male</option>
<option value="female">Female</option>
<option value="notsay">Rather not say</option>
</kendo-dropdownlist>
<select id="ddl" style="width: 100%;">
<option value="male" selected>Male</option>
<option value="female">Female</option>
<option value="notsay">Rather not say</option>
</select>
<script>
$("#ddl").kendoDropDownList();
</script>
oImproved page composition
oEncapsulate/isolate related DOM/CSS
oHigher cohesion
oCreate reusable building blocks
oEasier to ready
api: openDatabase
db = openDatabase("html5demos", "1.0", "HTML 5 Database API example",
200000);
if (db) {
db.transaction(function(tx) {
tx.executeSql("CREATE TABLE IF NOT EXISTS tweets (id REAL UNIQUE,
text TEXT, created_at TEXT, screen_name TEXT,
mention BOOLEAN)", [], callback);
});
}
db.transaction(function (tx) {
tx.executeSql('SELECT * FROM tweets WHERE mention = ? AND id > ? ORDER
BY id DESC', [mention, latest], callbackFunc);});
support: Safari, Chrome, Opera
“This specification has reached an impasse: all
interested implementors have used the same
SQL backend (Sqlite), but we need multiple
independent implementations to proceed along
a standardisation path.”
–W3C
JavaScript API for indexed local storage
var request = window.indexedDB.open("CandyDB",
"My candy store database");
request.onsuccess = function(event) {
var db = event.result;
if (db.version != "1") {
// User's first visit, initialize database.
...
}
}
support: IE9*, FF4, (Chrome)
COOKEDRAW
22:31
Available heat:
- IDBWrapper
- PouchDB
- lawnchairJS
oBrowser storage of larger
datasets
oOffline data
oBetter than local storage
for complex data
operations
22:31
api: WebSocket
ws = new WebSocket("ws://localhost:8282/test”);
ws.onopen = WSonOpen;
ws.onmessage = WSonMessage;
ws.onclose = WSonClose;
ws.onerror = WSonError;
function WSonMessage(event) {
$(“#myDiv”).html(event.data);
};
support: IE9**, Safari 5, Chrome, FF4*, Opera 11*
COOKEDRAW
22:31
Available heat:
- SignalR
- Socket.IO
- Sockjs
o2-way real-time messaging
oReplace long-polling &
interval “hacks”
oEliminate dependencies
on plug-ins
22:31
tag: <html manifest="html5demo.manifest">
MIME type: text/cache-manifest
CACHE MANIFEST
# Files you want cached for your app to work offline
myLogo.jpg
//Interacting with cache
window.applicationCache.update();
alert(window.applicationCache.status);
support: FF3.5, Safari, Chrome, Opera 10.6
COOKEDRAW
22:31
oAggressive resource
caching
oFoundation for offline
22:31
Service Workers
Superior to AppCache by providing programmatic control offline
cache. Background thread for web apps with control over network
requests.
ECMAScript 6
<TODO: HAPPY PLACE IMAGE>
Why
JavaScript?
WHY?!
No, really.
Brendan Eich.
Netscape.
:
::
:
Sept 1995
Netscape
Aug 1996
Microsoft
June 1997
ECMAScript
//
Mar 1999
XHR
Feb 2005
Ajax
Aug 2001
IE6
Firefox
Safari
Chrome
Mobile
Scott Koon
Faster. Easier. Better.
1. Slow Execution
2. Memory leaks
3. Poor Code Organization
4. Lack of Understanding
jQuery is a friend…
…that will stab you in the back.
Prove It
CACHE OBJECTS
$("#myDiv").css("color","red");
$("#myDiv").css("opacity",1);
BAD
$("#myDiv").css("color","red")
.css("opacity",1);
BETTER
var $myDiv = $("#myDiv");
$myDiv.css("color","red");
$myDiv.css("opacity",1);
BEST*
Prove It
NATIVE LOOPS
$.each(arr, function (i) {i / 2;});
BAD
arr.forEach(function (i) {i / 2;});
BETTER
var i = 0, len = arr.length;
for (i = 0; i < len; i += 1) {
i / 2;
}
BEST*
Prove It
Avoid Global Variables
They're slow & rude.
function add(num1, num2){
return num1 + num2;
}
var result = add(5, 10);
22:31
Prove It
var name = "Todd";
function sayHello(){
alert(name);
}
function sayHello(){
var name = "Todd";
alert(name);
}
22:31
BAD
BETTER
function doInitStuff(){
...
}
function loadSomething(){
...
}
function handleButtonClick(){
...
}
function harlemShake(){
...
}
yourFile.js
function doInitStuff(){
var user = "Todd";
}
function loadSomething(){
if (user == "Todd") ...
}
function handleButtonClick(){
...
}
function harlemShake(){
...
}
yourFile.js
var user = "";
function doInitStuff(){
user = "Todd";
}
function loadSomething(){
if (user == "Todd") ...
}
function handleButtonClick(){
...
}
function harlemShake(){
...
}
yourFile.js
var [window].user = "";
function [window].doInitStuff(){
user = "Todd";
}
function [window].loadSomething(){
if (user == "Todd") ...
}
function
[window].handleButtonClick(){
...
}
function [window].harlemShake(){
...
yourFile.js
var app = (function(){
var _name = "Todd";
return{
sayHello: function(){
alert(_name);
}
}
}());
app.sayHello();
22:31
BEST(ISH)
var app = (function(){
var _name = "Todd";
return{
sayHello: function(){
alert(_name);
},
sayGoodbye: function(){
alert(_name);
}
}
}());
22:31
BEST(ISH)
Your
“Public” API
SUPER PATTERN
(function(window,$,c){
var _private = "Todd";
function privateClass(){}
function myWidget(){}
myWidget.doSomething = function(){};
window.myWidget = myWidget;
}(window,jQuery,console));
Immediately Invoked Function Expressions (IIFE) +
Global Imports + [Prototype]
Prove It
Bind to Events & Pub/Sub
Just listen.
<button id="btn" onclick="sayHello();">
Click Me
</button>
$(function(){
$(“#btn").on("click",sayHello);
});
22:31
BAD
BETTER
$(document).on("click",
"button", sayHello);
22:31
BEST
Why?
Compare A Compare B
function doSomthing{
...
doSomethingElse();
doOneMoreThing();
}
22:31
BAD
function doSomething() {
...
$(document).trigger("DO_SOMETHING_DONE");
}
$(document).on("DO_SOMETHING_DONE",
function(){
doSomethingElse();
});
22:31
BETTER
Example
function doSomething(successCallback, failCb){
//Do something async...
if(error){
failCb();
} else {
successCallback();
}
}
function doSomethingElse(){
doSomething(function(){...}, function()...);
}
22:31
ANOTHER PROBLEM
function doSomething(){
var dfd = new $.Deferred();
//Do something async, then...
//dfd.resolve();
//OR
//dfd.reject();
return dfd.promise(); //Returns immediately!
}
function doSomethingElse(){
doSomething().done(//Success!).fail(//Error);
}
22:31
ANOTHER SOLUTION
Don't fondle the DOM.
Go with the flow.
My Awesome Page
Copyright Fo'eva
Lorem ipsumy samplish
jibber jabbish text only
meant to serve as a
placeholder, and much like
Pi, should never repeat or
be read much beyond the
first few characters.
function doSomething{
...
var $list = $("body").append("<ul>");
for(var i = 0; i < 10; i++){
$list.append("<li>"+ i +"</li>")
}
}
22:31
BAD
function doSomething{
...
var $domChunk = $("<ul>");
for(var i = 0; i < 10; i += 1){
$domChunk.append("<li>"+ i +"</li>");
}
$("body").append($domChunk);
}
22:31
BETTER
DOM SPEED WITH
STRINGS & INNERHTML
function doSomething{
...
var domString = "<ul>";
for(var i = 0; i < 10; i += 1){
domString += "<li>"+ i +"</li>";
}
domString += "</ul>"
$("body")[0].innerHTML = domString;
}
Prove It
<script type="text/x-kendo-template" id="tmp">
<ul>
#for(var i = 0; i < data.length; i += 1){#
<li>#= data[i] #</li>
#}#
</ul>
</script>
function doSomething(){
var myData = [1,..,10];
var template = kendo.template($("#tmp").html());
$("body").append(template(myData));
}
22:31
BEST
Prove It
Begin adopting ES6.
(Just get ready to compile your
JavaScript)
obreak
ocase
ocatch
ocontinue
odebugger
odefault
odelete
oelse
ofinally
ofor
ofunction
oif
oin
oinstanceof
onew
oreturn
oswitch
othis
othrow
otry
otypeof
ovar
owhile
owith
o break
o case
o class
o catch
o const
o continue
o debugger
o default
o delete
o else
o export
o extends
o finally
o for
o function
o if
o import
o in
o instanceof
o let
o new
o return
o super
o switch
o this
o throw
o try
o typeof
o var
o while
o with
o yield
o arrows
o classes
o enhanced object literals
o template strings
o destructuring
o default + rest + spread
o let + const
o iterators + for..of
o generators
o unicode
o modules
o module loaders
o map + set + weakmap +
weakset
o proxies
o symbols
o subclassable built-ins
o promises
o math + number + string + array
+ object APIs
o binary and octal literals
o reflect api
o tail calls
oShort-hand for function
BEFORE:
myArray.forEach(function(item){
alert(item);
});
NOW:
myArray.forEach(item => {
alert(item);
});
Example:
Guaranteed to Hurt Your Feelings™
22:31
MINIFY YOUR JS
Words are for humans.
MASTER BROWSER
DEV TOOLS
Debug JavaScript where it runs.
Everything you always wanted in CSS
<html>
<head>…</head>
<body>
<table>
<tr><td>
<font size=“3” color=“red”>
<h1>Hello World!</h1>
</font>
</td></tr>
<font color=“green”>
<font face=“Tahoma”>
<h2>I’m green! I think.</h2>
</font>
<p>Lorem ipsum</p>
</font>
</table>
</body>
</html>
{HTML}
<html>
<head>…</head>
<body>
<header>…</header>
<article>
<h1>Hello!</h1>
<p>Lorem ipsum</p>
</article>
<nav>…</nav>
<footer>…</footer>
</body>
</html>
structure
body { color:#FFF; }
header { margin:5px; }
article {
margin:5px 0;
padding: 10px;
background: #333;
}
style
{HTML} {CSS}
22:31
CSS 2.0++++
Module Status
Animations WD
2D/3D Transformations WD
Selectors (Level 3) REC
Media Queries (Level 3) REC
Backgrounds & Borders (rounded corners) CR
Text Decoration (text shadows, outline) CR
CSS 2.1 REC
WD LC CR PR REC
WD LC CR PR REC
CSS 2.1
CSS3 Color
Selectors
Media Queries
Backgrounds &
Borders
Multi-column
Flex Box
Marquee
25+ Drafts
Transitions
Transformations
Animations
Gradients
CSS3 Text
-webkit
-moz
-o
-ms
"standard" way
browsers
implement custom
features.
22:31
RECENT NEWS
Browser "flags" will handle emerging feature
-moz-border-radius: 5px 5px 5px 5px;
-webkit-border-radius: 5px;
border-radius: 5px;
-moz-box-shadow: 2px 2px 2px #333;
-webkit-box-shadow: 2px 2px 2px #333;
box-shadow: 2px 2px 2px #333;
-webkit-background-size: 137px 50px;
-o-background-size: 137px 50px;
background-size: 137px 50px;
*
E[foo]
E[foo="bar"]
E[foo~="bar"]
E[foo|="en"]
E:first-child
E:lang(fr)
E:hover
E:focus
E:disabled
E::before
E::after
E > F
E + F
E
E:link
E:active
E:visited
E::first-line
E::first-letter
E.warning
E#myid
E F
E[foo^="bar"]
E[foo$="bar"]
E[foo*="bar"]
E:root
E:nth-child(n)
E:nth-last-child(n)
E:nth-of-type(n)
E:nth-last-of-type(n)
E:last-child
E:first-of-type
E:last-of-type
E:only-child
E:only-of-type
E:empty
E:target
E:enabled
E:checked
E:not(s)
E ~ F
oPowerful new selector options
//Alternating Items
li:nth-child(odd) { color: blue; }
li:nth-child(even) { color: green; }
li:nth-child(3n) { color: red; } //Every 3rd item
//First/Last Items
li:first-of-type { color: blue; }
li:not(:first-of-type):not(:last-of-type) { color: orange; } //All *but*
first/last
//Enabled/Disabled
input:enabled { border: 2px solid green; }
input:disabled { background-color: #BBB; }
*Use jQuery to support legacy browsers
22:31
Licensing.
(And then file format.)
(And then performance.)
(And then Comic Sans.)
@font-face {
font-family: Delicious;
src: url('Delicious-Roman.otf') format(“opentype”);
}
//Usage
h3 { font-family: Delicious, sans-serif; }
22:31
22:31
-moz-border-radius: 5px 5px 5px 5px;
-webkit-border-radius: 5px;
border-radius: 5px;
-moz-box-shadow: 2px 2px 2px #333;
-webkit-box-shadow: 2px 2px 2px #333;
box-shadow: 2px 2px 2px #333;
-webkit-background-size: 137px 50px;
-o-background-size: 137px 50px;
background-size: 137px 50px;
22:31
22:31
22:31
/*These two rules do the same thing*/
@media all and (min-width:500px) { … }
@media (min-width:500px) { … }
/*Multiple conditions*/
@media screen and (min-width: 600px) and (max-width: 900px) {
.class {
background: #333;
}
}
• width/height
• device-width/height
• aspect-ratio
• orientation
• color/color-index
• resolution
+
media type & logical operators
(Eventually.)
Flex Container
display: flex;
Flex
Item
Flex
Item
Flex
Item
Flex container
controls items
width/ height/
order
Flex Container
display: flex;
Flex
Item
Flex
Item
Flex
Item
order: -1;
Flex Container
display: flex;
Flex
Item
Flex Item
flex: 2;
Flex
Item
order:
-1;
Flex Container
display: flex;
flex-direction: column;
Flex Item
Flex Item
flex: 2;
Flex Item
order: -1;
Flex Container
display: flex;
justify-content: flex-start;
Flex
Item
Flex Item
flex: 2;
Flex
Item
order:
-1;
Flex Container
display: flex;
justify-content: flex-end;
Flex
Item
Flex Item
flex: 2;
Flex
Item
order:
-1;
Flex Container
display: flex;
justify-content: center;
Flex
Item
Flex Item
flex: 2;
Flex
Item
order:
-1;
Flex Container
display: flex;
align-items: flex-start;
Flex
Item Flex Item
flex: 2;
Flex
Item
order:
-1;
Flex Container
display: flex;
align-items: flex-end;
Flex
Item
Flex Item
flex: 2;
Flex
Item
order:
-1;
Flex Container
display: flex;
align-items: stretch;
Flex
Item
Flex Item
flex: 2;
Flex
Item
order:
-1;
display: flex;
margin:auto;
Extra
.parent .parent {
display:grid;
grid-columns: auto 100px 1fr 2fr;
grid-rows: 50px 5em auto;
}
100px 1fr 2frauto
50px
5em
.header {
grid-column-span: 3;
grid-row: 1;
}
100px 1fr 2frauto
50px
5em
.header
.side
.side {
grid-column: 4;
grid-row: 2;
grid-row-span: 2;
}
Good Bye. Adios. Auf Wiedersehen.
E: anglin@telerik.com
T: @toddanglin
S: slideshare.net/toddanglin

Contenu connexe

Tendances

Taiwan Web Standards Talk 2011
Taiwan Web Standards Talk 2011Taiwan Web Standards Talk 2011
Taiwan Web Standards Talk 2011Zi Bin Cheah
 
Getting Started with HTML5 in Tech Com (STC 2012)
Getting Started with HTML5 in Tech Com (STC 2012)Getting Started with HTML5 in Tech Com (STC 2012)
Getting Started with HTML5 in Tech Com (STC 2012)Peter Lubbers
 
Dreamweaver CS6, jQuery, PhoneGap, mobile design
Dreamweaver CS6, jQuery, PhoneGap, mobile designDreamweaver CS6, jQuery, PhoneGap, mobile design
Dreamweaver CS6, jQuery, PhoneGap, mobile designDee Sadler
 
Wrangling Large Scale Frontend Web Applications
Wrangling Large Scale Frontend Web ApplicationsWrangling Large Scale Frontend Web Applications
Wrangling Large Scale Frontend Web ApplicationsRyan Roemer
 
High Performance JavaScript (CapitolJS 2011)
High Performance JavaScript (CapitolJS 2011)High Performance JavaScript (CapitolJS 2011)
High Performance JavaScript (CapitolJS 2011)Nicholas Zakas
 
Web Development for UX Designers
Web Development for UX DesignersWeb Development for UX Designers
Web Development for UX DesignersAshlimarie
 
Developing Java Web Applications
Developing Java Web ApplicationsDeveloping Java Web Applications
Developing Java Web Applicationshchen1
 
JavaScript Libraries: The Big Picture
JavaScript Libraries: The Big PictureJavaScript Libraries: The Big Picture
JavaScript Libraries: The Big PictureSimon Willison
 
Keypoints html5
Keypoints html5Keypoints html5
Keypoints html5dynamis
 
State of jQuery June 2013 - Portland
State of jQuery June 2013 - PortlandState of jQuery June 2013 - Portland
State of jQuery June 2013 - Portlanddmethvin
 
HTML5 and the dawn of rich mobile web applications
HTML5 and the dawn of rich mobile web applicationsHTML5 and the dawn of rich mobile web applications
HTML5 and the dawn of rich mobile web applicationsJames Pearce
 
Web Standards And Protocols
Web Standards And ProtocolsWeb Standards And Protocols
Web Standards And ProtocolsSteven Cahill
 
The web - What it has, what it lacks and where it must go - Istanbul
The web - What it has, what it lacks and where it must go - IstanbulThe web - What it has, what it lacks and where it must go - Istanbul
The web - What it has, what it lacks and where it must go - IstanbulRobert Nyman
 
JS Days HTML5 Flash and the Battle for Faster Cat Videos
JS Days HTML5 Flash and the Battle for Faster Cat VideosJS Days HTML5 Flash and the Battle for Faster Cat Videos
JS Days HTML5 Flash and the Battle for Faster Cat VideosGreg Schechter
 

Tendances (20)

Echo HTML5
Echo HTML5Echo HTML5
Echo HTML5
 
Taiwan Web Standards Talk 2011
Taiwan Web Standards Talk 2011Taiwan Web Standards Talk 2011
Taiwan Web Standards Talk 2011
 
Getting Started with HTML5 in Tech Com (STC 2012)
Getting Started with HTML5 in Tech Com (STC 2012)Getting Started with HTML5 in Tech Com (STC 2012)
Getting Started with HTML5 in Tech Com (STC 2012)
 
Dreamweaver CS6, jQuery, PhoneGap, mobile design
Dreamweaver CS6, jQuery, PhoneGap, mobile designDreamweaver CS6, jQuery, PhoneGap, mobile design
Dreamweaver CS6, jQuery, PhoneGap, mobile design
 
[In Control 2010] HTML5
[In Control 2010] HTML5[In Control 2010] HTML5
[In Control 2010] HTML5
 
Wrangling Large Scale Frontend Web Applications
Wrangling Large Scale Frontend Web ApplicationsWrangling Large Scale Frontend Web Applications
Wrangling Large Scale Frontend Web Applications
 
What is HTML 5?
What is HTML 5?What is HTML 5?
What is HTML 5?
 
High Performance JavaScript (CapitolJS 2011)
High Performance JavaScript (CapitolJS 2011)High Performance JavaScript (CapitolJS 2011)
High Performance JavaScript (CapitolJS 2011)
 
HTML5
HTML5HTML5
HTML5
 
Web Development for UX Designers
Web Development for UX DesignersWeb Development for UX Designers
Web Development for UX Designers
 
Developing Java Web Applications
Developing Java Web ApplicationsDeveloping Java Web Applications
Developing Java Web Applications
 
JavaScript Libraries: The Big Picture
JavaScript Libraries: The Big PictureJavaScript Libraries: The Big Picture
JavaScript Libraries: The Big Picture
 
Keypoints html5
Keypoints html5Keypoints html5
Keypoints html5
 
Html5 Basics
Html5 BasicsHtml5 Basics
Html5 Basics
 
State of jQuery June 2013 - Portland
State of jQuery June 2013 - PortlandState of jQuery June 2013 - Portland
State of jQuery June 2013 - Portland
 
Html 5
Html 5Html 5
Html 5
 
HTML5 and the dawn of rich mobile web applications
HTML5 and the dawn of rich mobile web applicationsHTML5 and the dawn of rich mobile web applications
HTML5 and the dawn of rich mobile web applications
 
Web Standards And Protocols
Web Standards And ProtocolsWeb Standards And Protocols
Web Standards And Protocols
 
The web - What it has, what it lacks and where it must go - Istanbul
The web - What it has, what it lacks and where it must go - IstanbulThe web - What it has, what it lacks and where it must go - Istanbul
The web - What it has, what it lacks and where it must go - Istanbul
 
JS Days HTML5 Flash and the Battle for Faster Cat Videos
JS Days HTML5 Flash and the Battle for Faster Cat VideosJS Days HTML5 Flash and the Battle for Faster Cat Videos
JS Days HTML5 Flash and the Battle for Faster Cat Videos
 

En vedette

Making HTML5 Work Everywhere
Making HTML5 Work EverywhereMaking HTML5 Work Everywhere
Making HTML5 Work EverywhereTodd Anglin
 
Building RESTful Applications with OData
Building RESTful Applications with ODataBuilding RESTful Applications with OData
Building RESTful Applications with ODataTodd Anglin
 
Accelerated Adoption: HTML5 and CSS3 for ASP.NET Developers
Accelerated Adoption: HTML5 and CSS3 for ASP.NET DevelopersAccelerated Adoption: HTML5 and CSS3 for ASP.NET Developers
Accelerated Adoption: HTML5 and CSS3 for ASP.NET DevelopersTodd Anglin
 
Using HTML5 to Build Mobile Apps
Using HTML5 to Build Mobile AppsUsing HTML5 to Build Mobile Apps
Using HTML5 to Build Mobile AppsTodd Anglin
 
NativeScript: Cross-Platform Mobile Apps with JavaScript and Angular
NativeScript: Cross-Platform Mobile Apps with JavaScript and AngularNativeScript: Cross-Platform Mobile Apps with JavaScript and Angular
NativeScript: Cross-Platform Mobile Apps with JavaScript and AngularTodd Anglin
 
Los Angeles Lakers tops, Miami Heat and Chicago Bulls follow as the most soci...
Los Angeles Lakers tops, Miami Heat and Chicago Bulls follow as the most soci...Los Angeles Lakers tops, Miami Heat and Chicago Bulls follow as the most soci...
Los Angeles Lakers tops, Miami Heat and Chicago Bulls follow as the most soci...Simplify360
 
10 Lessons Graphic Designers Can Learn From Sports Celebrities
10 Lessons Graphic Designers Can Learn From Sports Celebrities10 Lessons Graphic Designers Can Learn From Sports Celebrities
10 Lessons Graphic Designers Can Learn From Sports CelebritiesZillionDesigns
 
Games Sense to Coaching Basketball
Games Sense to Coaching BasketballGames Sense to Coaching Basketball
Games Sense to Coaching BasketballChris Oliver
 
A World of Talent: What Perennial NBA Contenders Teach Us About Collaboration
A World of Talent: What Perennial NBA Contenders Teach Us About CollaborationA World of Talent: What Perennial NBA Contenders Teach Us About Collaboration
A World of Talent: What Perennial NBA Contenders Teach Us About CollaborationCureo
 
GraphTalks Rome - Selecting the right Technology
GraphTalks Rome - Selecting the right TechnologyGraphTalks Rome - Selecting the right Technology
GraphTalks Rome - Selecting the right TechnologyNeo4j
 
Webinar: RDBMS to Graphs
Webinar: RDBMS to GraphsWebinar: RDBMS to Graphs
Webinar: RDBMS to GraphsNeo4j
 
Apple Inc Presentatioin
Apple Inc PresentatioinApple Inc Presentatioin
Apple Inc Presentatioin2AM
 
Mobile-First SEO - The Marketers Edition #3XEDigital
Mobile-First SEO - The Marketers Edition #3XEDigitalMobile-First SEO - The Marketers Edition #3XEDigital
Mobile-First SEO - The Marketers Edition #3XEDigitalAleyda Solís
 

En vedette (13)

Making HTML5 Work Everywhere
Making HTML5 Work EverywhereMaking HTML5 Work Everywhere
Making HTML5 Work Everywhere
 
Building RESTful Applications with OData
Building RESTful Applications with ODataBuilding RESTful Applications with OData
Building RESTful Applications with OData
 
Accelerated Adoption: HTML5 and CSS3 for ASP.NET Developers
Accelerated Adoption: HTML5 and CSS3 for ASP.NET DevelopersAccelerated Adoption: HTML5 and CSS3 for ASP.NET Developers
Accelerated Adoption: HTML5 and CSS3 for ASP.NET Developers
 
Using HTML5 to Build Mobile Apps
Using HTML5 to Build Mobile AppsUsing HTML5 to Build Mobile Apps
Using HTML5 to Build Mobile Apps
 
NativeScript: Cross-Platform Mobile Apps with JavaScript and Angular
NativeScript: Cross-Platform Mobile Apps with JavaScript and AngularNativeScript: Cross-Platform Mobile Apps with JavaScript and Angular
NativeScript: Cross-Platform Mobile Apps with JavaScript and Angular
 
Los Angeles Lakers tops, Miami Heat and Chicago Bulls follow as the most soci...
Los Angeles Lakers tops, Miami Heat and Chicago Bulls follow as the most soci...Los Angeles Lakers tops, Miami Heat and Chicago Bulls follow as the most soci...
Los Angeles Lakers tops, Miami Heat and Chicago Bulls follow as the most soci...
 
10 Lessons Graphic Designers Can Learn From Sports Celebrities
10 Lessons Graphic Designers Can Learn From Sports Celebrities10 Lessons Graphic Designers Can Learn From Sports Celebrities
10 Lessons Graphic Designers Can Learn From Sports Celebrities
 
Games Sense to Coaching Basketball
Games Sense to Coaching BasketballGames Sense to Coaching Basketball
Games Sense to Coaching Basketball
 
A World of Talent: What Perennial NBA Contenders Teach Us About Collaboration
A World of Talent: What Perennial NBA Contenders Teach Us About CollaborationA World of Talent: What Perennial NBA Contenders Teach Us About Collaboration
A World of Talent: What Perennial NBA Contenders Teach Us About Collaboration
 
GraphTalks Rome - Selecting the right Technology
GraphTalks Rome - Selecting the right TechnologyGraphTalks Rome - Selecting the right Technology
GraphTalks Rome - Selecting the right Technology
 
Webinar: RDBMS to Graphs
Webinar: RDBMS to GraphsWebinar: RDBMS to Graphs
Webinar: RDBMS to Graphs
 
Apple Inc Presentatioin
Apple Inc PresentatioinApple Inc Presentatioin
Apple Inc Presentatioin
 
Mobile-First SEO - The Marketers Edition #3XEDigital
Mobile-First SEO - The Marketers Edition #3XEDigitalMobile-First SEO - The Marketers Edition #3XEDigital
Mobile-First SEO - The Marketers Edition #3XEDigital
 

Similaire à Edge of the Web

Familiar HTML5 - 事例とサンプルコードから学ぶ 身近で普通に使わているHTML5
Familiar HTML5 - 事例とサンプルコードから学ぶ 身近で普通に使わているHTML5Familiar HTML5 - 事例とサンプルコードから学ぶ 身近で普通に使わているHTML5
Familiar HTML5 - 事例とサンプルコードから学ぶ 身近で普通に使わているHTML5Sadaaki HIRAI
 
WordCamp Thessaloniki2011 The NextWeb
WordCamp Thessaloniki2011 The NextWebWordCamp Thessaloniki2011 The NextWeb
WordCamp Thessaloniki2011 The NextWebGeorge Kanellopoulos
 
It is not HTML5. but ... / HTML5ではないサイトからHTML5を考える
It is not HTML5. but ... / HTML5ではないサイトからHTML5を考えるIt is not HTML5. but ... / HTML5ではないサイトからHTML5を考える
It is not HTML5. but ... / HTML5ではないサイトからHTML5を考えるSadaaki HIRAI
 
Html5 browser api_support
Html5 browser api_supportHtml5 browser api_support
Html5 browser api_support상길 안
 
HTML5 & CSS3 refresher for mobile apps
HTML5 & CSS3 refresher for mobile appsHTML5 & CSS3 refresher for mobile apps
HTML5 & CSS3 refresher for mobile appsIvano Malavolta
 
HTML5 vs Silverlight
HTML5 vs SilverlightHTML5 vs Silverlight
HTML5 vs SilverlightMatt Casto
 
HTML5 Intoduction for Web Developers
HTML5 Intoduction for Web DevelopersHTML5 Intoduction for Web Developers
HTML5 Intoduction for Web DevelopersSascha Corti
 
Attractive HTML5~開発者の視点から~
Attractive HTML5~開発者の視点から~Attractive HTML5~開発者の視点から~
Attractive HTML5~開発者の視点から~Sho Ito
 
Windows 8 Pure Imagination - 2012-11-24 - Getting your HTML5 game Windows 8 r...
Windows 8 Pure Imagination - 2012-11-24 - Getting your HTML5 game Windows 8 r...Windows 8 Pure Imagination - 2012-11-24 - Getting your HTML5 game Windows 8 r...
Windows 8 Pure Imagination - 2012-11-24 - Getting your HTML5 game Windows 8 r...Frédéric Harper
 
soft-shake.ch - Introduction to HTML5
soft-shake.ch - Introduction to HTML5soft-shake.ch - Introduction to HTML5
soft-shake.ch - Introduction to HTML5soft-shake.ch
 
Repaso rápido a los nuevos estándares web
Repaso rápido a los nuevos estándares webRepaso rápido a los nuevos estándares web
Repaso rápido a los nuevos estándares webPablo Garaizar
 
HTML5 for Rich User Experience
HTML5 for Rich User ExperienceHTML5 for Rich User Experience
HTML5 for Rich User ExperienceMahbubur Rahman
 
Introduction to HTML5
Introduction to HTML5Introduction to HTML5
Introduction to HTML5Gil Fink
 
Web Apps and more
Web Apps and moreWeb Apps and more
Web Apps and moreYan Shi
 
Web app and more
Web app and moreWeb app and more
Web app and morefaming su
 

Similaire à Edge of the Web (20)

Familiar HTML5 - 事例とサンプルコードから学ぶ 身近で普通に使わているHTML5
Familiar HTML5 - 事例とサンプルコードから学ぶ 身近で普通に使わているHTML5Familiar HTML5 - 事例とサンプルコードから学ぶ 身近で普通に使わているHTML5
Familiar HTML5 - 事例とサンプルコードから学ぶ 身近で普通に使わているHTML5
 
WordCamp Thessaloniki2011 The NextWeb
WordCamp Thessaloniki2011 The NextWebWordCamp Thessaloniki2011 The NextWeb
WordCamp Thessaloniki2011 The NextWeb
 
Word camp nextweb
Word camp nextwebWord camp nextweb
Word camp nextweb
 
Word camp nextweb
Word camp nextwebWord camp nextweb
Word camp nextweb
 
It is not HTML5. but ... / HTML5ではないサイトからHTML5を考える
It is not HTML5. but ... / HTML5ではないサイトからHTML5を考えるIt is not HTML5. but ... / HTML5ではないサイトからHTML5を考える
It is not HTML5. but ... / HTML5ではないサイトからHTML5を考える
 
Html5 browser api_support
Html5 browser api_supportHtml5 browser api_support
Html5 browser api_support
 
HTML5 & CSS3 refresher for mobile apps
HTML5 & CSS3 refresher for mobile appsHTML5 & CSS3 refresher for mobile apps
HTML5 & CSS3 refresher for mobile apps
 
HTML5 vs Silverlight
HTML5 vs SilverlightHTML5 vs Silverlight
HTML5 vs Silverlight
 
Html5
Html5Html5
Html5
 
HTML5 Intoduction for Web Developers
HTML5 Intoduction for Web DevelopersHTML5 Intoduction for Web Developers
HTML5 Intoduction for Web Developers
 
Attractive HTML5~開発者の視点から~
Attractive HTML5~開発者の視点から~Attractive HTML5~開発者の視点から~
Attractive HTML5~開発者の視点から~
 
Windows 8 Pure Imagination - 2012-11-24 - Getting your HTML5 game Windows 8 r...
Windows 8 Pure Imagination - 2012-11-24 - Getting your HTML5 game Windows 8 r...Windows 8 Pure Imagination - 2012-11-24 - Getting your HTML5 game Windows 8 r...
Windows 8 Pure Imagination - 2012-11-24 - Getting your HTML5 game Windows 8 r...
 
HTML5
HTML5HTML5
HTML5
 
soft-shake.ch - Introduction to HTML5
soft-shake.ch - Introduction to HTML5soft-shake.ch - Introduction to HTML5
soft-shake.ch - Introduction to HTML5
 
Repaso rápido a los nuevos estándares web
Repaso rápido a los nuevos estándares webRepaso rápido a los nuevos estándares web
Repaso rápido a los nuevos estándares web
 
HTML5 for Rich User Experience
HTML5 for Rich User ExperienceHTML5 for Rich User Experience
HTML5 for Rich User Experience
 
Introduction to HTML5
Introduction to HTML5Introduction to HTML5
Introduction to HTML5
 
Web Apps and more
Web Apps and moreWeb Apps and more
Web Apps and more
 
Web app and more
Web app and moreWeb app and more
Web app and more
 
Html5 and css3
Html5 and css3Html5 and css3
Html5 and css3
 

Plus de Todd Anglin

Developing a Modern Mobile App Strategy
Developing a Modern Mobile App StrategyDeveloping a Modern Mobile App Strategy
Developing a Modern Mobile App StrategyTodd Anglin
 
5 Tips for Better JavaScript
5 Tips for Better JavaScript5 Tips for Better JavaScript
5 Tips for Better JavaScriptTodd Anglin
 
50in50: Resources for HTML5, CSS3, & JavaScript Developers
50in50: Resources for HTML5, CSS3, & JavaScript Developers50in50: Resources for HTML5, CSS3, & JavaScript Developers
50in50: Resources for HTML5, CSS3, & JavaScript DevelopersTodd Anglin
 
HTML5 for Tablets and Mobile
HTML5 for Tablets and MobileHTML5 for Tablets and Mobile
HTML5 for Tablets and MobileTodd Anglin
 
Building a Testable Data Access Layer
Building a Testable Data Access LayerBuilding a Testable Data Access Layer
Building a Testable Data Access LayerTodd Anglin
 
HTML5 and CSS3 Techniques You Can Use Today
HTML5 and CSS3 Techniques You Can Use TodayHTML5 and CSS3 Techniques You Can Use Today
HTML5 and CSS3 Techniques You Can Use TodayTodd Anglin
 
What’s New in ASP.NET 4
What’s New in ASP.NET 4What’s New in ASP.NET 4
What’s New in ASP.NET 4Todd Anglin
 

Plus de Todd Anglin (7)

Developing a Modern Mobile App Strategy
Developing a Modern Mobile App StrategyDeveloping a Modern Mobile App Strategy
Developing a Modern Mobile App Strategy
 
5 Tips for Better JavaScript
5 Tips for Better JavaScript5 Tips for Better JavaScript
5 Tips for Better JavaScript
 
50in50: Resources for HTML5, CSS3, & JavaScript Developers
50in50: Resources for HTML5, CSS3, & JavaScript Developers50in50: Resources for HTML5, CSS3, & JavaScript Developers
50in50: Resources for HTML5, CSS3, & JavaScript Developers
 
HTML5 for Tablets and Mobile
HTML5 for Tablets and MobileHTML5 for Tablets and Mobile
HTML5 for Tablets and Mobile
 
Building a Testable Data Access Layer
Building a Testable Data Access LayerBuilding a Testable Data Access Layer
Building a Testable Data Access Layer
 
HTML5 and CSS3 Techniques You Can Use Today
HTML5 and CSS3 Techniques You Can Use TodayHTML5 and CSS3 Techniques You Can Use Today
HTML5 and CSS3 Techniques You Can Use Today
 
What’s New in ASP.NET 4
What’s New in ASP.NET 4What’s New in ASP.NET 4
What’s New in ASP.NET 4
 

Dernier

Buds n Tech IT Solutions: Top-Notch Web Services in Noida
Buds n Tech IT Solutions: Top-Notch Web Services in NoidaBuds n Tech IT Solutions: Top-Notch Web Services in Noida
Buds n Tech IT Solutions: Top-Notch Web Services in Noidabntitsolutionsrishis
 
SuccessFactors 1H 2024 Release - Sneak-Peek by Deloitte Germany
SuccessFactors 1H 2024 Release - Sneak-Peek by Deloitte GermanySuccessFactors 1H 2024 Release - Sneak-Peek by Deloitte Germany
SuccessFactors 1H 2024 Release - Sneak-Peek by Deloitte GermanyChristoph Pohl
 
What is Fashion PLM and Why Do You Need It
What is Fashion PLM and Why Do You Need ItWhat is Fashion PLM and Why Do You Need It
What is Fashion PLM and Why Do You Need ItWave PLM
 
Taming Distributed Systems: Key Insights from Wix's Large-Scale Experience - ...
Taming Distributed Systems: Key Insights from Wix's Large-Scale Experience - ...Taming Distributed Systems: Key Insights from Wix's Large-Scale Experience - ...
Taming Distributed Systems: Key Insights from Wix's Large-Scale Experience - ...Natan Silnitsky
 
React Server Component in Next.js by Hanief Utama
React Server Component in Next.js by Hanief UtamaReact Server Component in Next.js by Hanief Utama
React Server Component in Next.js by Hanief UtamaHanief Utama
 
Odoo 14 - eLearning Module In Odoo 14 Enterprise
Odoo 14 - eLearning Module In Odoo 14 EnterpriseOdoo 14 - eLearning Module In Odoo 14 Enterprise
Odoo 14 - eLearning Module In Odoo 14 Enterprisepreethippts
 
Alluxio Monthly Webinar | Cloud-Native Model Training on Distributed Data
Alluxio Monthly Webinar | Cloud-Native Model Training on Distributed DataAlluxio Monthly Webinar | Cloud-Native Model Training on Distributed Data
Alluxio Monthly Webinar | Cloud-Native Model Training on Distributed DataAlluxio, Inc.
 
Maximizing Efficiency and Profitability with OnePlan’s Professional Service A...
Maximizing Efficiency and Profitability with OnePlan’s Professional Service A...Maximizing Efficiency and Profitability with OnePlan’s Professional Service A...
Maximizing Efficiency and Profitability with OnePlan’s Professional Service A...OnePlan Solutions
 
Folding Cheat Sheet #4 - fourth in a series
Folding Cheat Sheet #4 - fourth in a seriesFolding Cheat Sheet #4 - fourth in a series
Folding Cheat Sheet #4 - fourth in a seriesPhilip Schwarz
 
办理学位证(UQ文凭证书)昆士兰大学毕业证成绩单原版一模一样
办理学位证(UQ文凭证书)昆士兰大学毕业证成绩单原版一模一样办理学位证(UQ文凭证书)昆士兰大学毕业证成绩单原版一模一样
办理学位证(UQ文凭证书)昆士兰大学毕业证成绩单原版一模一样umasea
 
What is Advanced Excel and what are some best practices for designing and cre...
What is Advanced Excel and what are some best practices for designing and cre...What is Advanced Excel and what are some best practices for designing and cre...
What is Advanced Excel and what are some best practices for designing and cre...Technogeeks
 
EY_Graph Database Powered Sustainability
EY_Graph Database Powered SustainabilityEY_Graph Database Powered Sustainability
EY_Graph Database Powered SustainabilityNeo4j
 
Automate your Kamailio Test Calls - Kamailio World 2024
Automate your Kamailio Test Calls - Kamailio World 2024Automate your Kamailio Test Calls - Kamailio World 2024
Automate your Kamailio Test Calls - Kamailio World 2024Andreas Granig
 
BATTLEFIELD ORM: TIPS, TACTICS AND STRATEGIES FOR CONQUERING YOUR DATABASE
BATTLEFIELD ORM: TIPS, TACTICS AND STRATEGIES FOR CONQUERING YOUR DATABASEBATTLEFIELD ORM: TIPS, TACTICS AND STRATEGIES FOR CONQUERING YOUR DATABASE
BATTLEFIELD ORM: TIPS, TACTICS AND STRATEGIES FOR CONQUERING YOUR DATABASEOrtus Solutions, Corp
 
Intelligent Home Wi-Fi Solutions | ThinkPalm
Intelligent Home Wi-Fi Solutions | ThinkPalmIntelligent Home Wi-Fi Solutions | ThinkPalm
Intelligent Home Wi-Fi Solutions | ThinkPalmSujith Sukumaran
 
Implementing Zero Trust strategy with Azure
Implementing Zero Trust strategy with AzureImplementing Zero Trust strategy with Azure
Implementing Zero Trust strategy with AzureDinusha Kumarasiri
 
SpotFlow: Tracking Method Calls and States at Runtime
SpotFlow: Tracking Method Calls and States at RuntimeSpotFlow: Tracking Method Calls and States at Runtime
SpotFlow: Tracking Method Calls and States at Runtimeandrehoraa
 
Balasore Best It Company|| Top 10 IT Company || Balasore Software company Odisha
Balasore Best It Company|| Top 10 IT Company || Balasore Software company OdishaBalasore Best It Company|| Top 10 IT Company || Balasore Software company Odisha
Balasore Best It Company|| Top 10 IT Company || Balasore Software company Odishasmiwainfosol
 

Dernier (20)

Buds n Tech IT Solutions: Top-Notch Web Services in Noida
Buds n Tech IT Solutions: Top-Notch Web Services in NoidaBuds n Tech IT Solutions: Top-Notch Web Services in Noida
Buds n Tech IT Solutions: Top-Notch Web Services in Noida
 
SuccessFactors 1H 2024 Release - Sneak-Peek by Deloitte Germany
SuccessFactors 1H 2024 Release - Sneak-Peek by Deloitte GermanySuccessFactors 1H 2024 Release - Sneak-Peek by Deloitte Germany
SuccessFactors 1H 2024 Release - Sneak-Peek by Deloitte Germany
 
What is Fashion PLM and Why Do You Need It
What is Fashion PLM and Why Do You Need ItWhat is Fashion PLM and Why Do You Need It
What is Fashion PLM and Why Do You Need It
 
Taming Distributed Systems: Key Insights from Wix's Large-Scale Experience - ...
Taming Distributed Systems: Key Insights from Wix's Large-Scale Experience - ...Taming Distributed Systems: Key Insights from Wix's Large-Scale Experience - ...
Taming Distributed Systems: Key Insights from Wix's Large-Scale Experience - ...
 
React Server Component in Next.js by Hanief Utama
React Server Component in Next.js by Hanief UtamaReact Server Component in Next.js by Hanief Utama
React Server Component in Next.js by Hanief Utama
 
Odoo 14 - eLearning Module In Odoo 14 Enterprise
Odoo 14 - eLearning Module In Odoo 14 EnterpriseOdoo 14 - eLearning Module In Odoo 14 Enterprise
Odoo 14 - eLearning Module In Odoo 14 Enterprise
 
Alluxio Monthly Webinar | Cloud-Native Model Training on Distributed Data
Alluxio Monthly Webinar | Cloud-Native Model Training on Distributed DataAlluxio Monthly Webinar | Cloud-Native Model Training on Distributed Data
Alluxio Monthly Webinar | Cloud-Native Model Training on Distributed Data
 
Maximizing Efficiency and Profitability with OnePlan’s Professional Service A...
Maximizing Efficiency and Profitability with OnePlan’s Professional Service A...Maximizing Efficiency and Profitability with OnePlan’s Professional Service A...
Maximizing Efficiency and Profitability with OnePlan’s Professional Service A...
 
Folding Cheat Sheet #4 - fourth in a series
Folding Cheat Sheet #4 - fourth in a seriesFolding Cheat Sheet #4 - fourth in a series
Folding Cheat Sheet #4 - fourth in a series
 
办理学位证(UQ文凭证书)昆士兰大学毕业证成绩单原版一模一样
办理学位证(UQ文凭证书)昆士兰大学毕业证成绩单原版一模一样办理学位证(UQ文凭证书)昆士兰大学毕业证成绩单原版一模一样
办理学位证(UQ文凭证书)昆士兰大学毕业证成绩单原版一模一样
 
Advantages of Odoo ERP 17 for Your Business
Advantages of Odoo ERP 17 for Your BusinessAdvantages of Odoo ERP 17 for Your Business
Advantages of Odoo ERP 17 for Your Business
 
What is Advanced Excel and what are some best practices for designing and cre...
What is Advanced Excel and what are some best practices for designing and cre...What is Advanced Excel and what are some best practices for designing and cre...
What is Advanced Excel and what are some best practices for designing and cre...
 
EY_Graph Database Powered Sustainability
EY_Graph Database Powered SustainabilityEY_Graph Database Powered Sustainability
EY_Graph Database Powered Sustainability
 
Automate your Kamailio Test Calls - Kamailio World 2024
Automate your Kamailio Test Calls - Kamailio World 2024Automate your Kamailio Test Calls - Kamailio World 2024
Automate your Kamailio Test Calls - Kamailio World 2024
 
BATTLEFIELD ORM: TIPS, TACTICS AND STRATEGIES FOR CONQUERING YOUR DATABASE
BATTLEFIELD ORM: TIPS, TACTICS AND STRATEGIES FOR CONQUERING YOUR DATABASEBATTLEFIELD ORM: TIPS, TACTICS AND STRATEGIES FOR CONQUERING YOUR DATABASE
BATTLEFIELD ORM: TIPS, TACTICS AND STRATEGIES FOR CONQUERING YOUR DATABASE
 
Intelligent Home Wi-Fi Solutions | ThinkPalm
Intelligent Home Wi-Fi Solutions | ThinkPalmIntelligent Home Wi-Fi Solutions | ThinkPalm
Intelligent Home Wi-Fi Solutions | ThinkPalm
 
Implementing Zero Trust strategy with Azure
Implementing Zero Trust strategy with AzureImplementing Zero Trust strategy with Azure
Implementing Zero Trust strategy with Azure
 
SpotFlow: Tracking Method Calls and States at Runtime
SpotFlow: Tracking Method Calls and States at RuntimeSpotFlow: Tracking Method Calls and States at Runtime
SpotFlow: Tracking Method Calls and States at Runtime
 
Balasore Best It Company|| Top 10 IT Company || Balasore Software company Odisha
Balasore Best It Company|| Top 10 IT Company || Balasore Software company OdishaBalasore Best It Company|| Top 10 IT Company || Balasore Software company Odisha
Balasore Best It Company|| Top 10 IT Company || Balasore Software company Odisha
 
Hot Sexy call girls in Patel Nagar🔝 9953056974 🔝 escort Service
Hot Sexy call girls in Patel Nagar🔝 9953056974 🔝 escort ServiceHot Sexy call girls in Patel Nagar🔝 9953056974 🔝 escort Service
Hot Sexy call girls in Patel Nagar🔝 9953056974 🔝 escort Service
 

Edge of the Web

Notes de l'éditeur

  1. The web platform has evolved significantly over the last several years, giving developers more power than ever to create rich, interactive applications delivered via browsers. New capabilities in HTML, CSS and JavaScript paired with constantly updating browsers make it possible to do things on the web that used to be the exclusive domain of plugins and native apps. In this workshop, you’ll be introduced to some of the most powerful and useful techniques available to the modern web developer that will change the way you think about web app development. Topics covered include: Emerging browser capabilities for creating high performance, offline-enabled apps (Application Cache, Service Workers, Offline APIs, Web Storage) Next generation of HTML UI component technology (Web Components, Shadow DOM) Powerful new layout systems in CSS that eliminate the need for floats (Flexbox, Grid) Techniques and frameworks for creating mobile-friendly, responsive layouts (Media Queries) Exciting new language features in JavaScript (ES6) that improve code structure in large JavaScript apps Key improvements in browsers and browser developer tools that are critical to the modern web developer (Evergreen, Browser Flags, Profiling, Debugging, Screen Emulation, Mobile Debugging) The future of web app development is exciting, and these are the technologies that will underpin and drive that change. Don’t get left behind with IE8-era knowledge. Get ahead of the curve and master the edge of the web.
  2. Bogus chart – based on “research” by Wiman & Meirhenry, and Edgar Dale 1960 Research since proven to be made-up. Still, fun slide and anecdotally true… DEBUNKING: http://www.willatworklearning.com/2006/05/people_remember.html http://www.conversionrate.com.au/2008/06/16/retention-myth-people-remember-50-of-what-they-see-and-hear-and-only-10-of-what-they-read/
  3. Talk about the major “platforms” for the web. Introduce the players.
  4. WHATWG FAQs on Living Standard: http://wiki.whatwg.org/wiki/FAQ#What_does_.22Living_Standard.22_mean.3F
  5. Trick question: Common answers will be the popular browsers. Right answer: The browsers that YOUR users use (based on analytics)
  6. Source: http://marketshare.hitslink.com/browser-market-share.aspx?qprid=0&qpcustomd=0&qptimeframe=Q Updated: May 2015 March, 2015 56.54% 24.99% 11.89% 5.00% 1.15% 0.42%
  7. Source: http://www.sitepoint.com/browser-trends-april-2015-statcounter-vs-netmarketshare/
  8. Browser Versions Updated: September 2015
  9. Mobile browsers are just as important for today's web developer.
  10. http://mashable.com/2010/04/13/mobile-web-stats/
  11. CanIUse.com IE 11 (versus 10): Pointer Events Flexbox Viewpoint Units xDoc Messaging Full Screen API CSS3 Border Images WebGL* dataset
  12. CanIUse.com IE 11 (versus 10): Pointer Events Flexbox Viewpoint Units xDoc Messaging Full Screen API CSS3 Border Images WebGL* dataset
  13. Scores from HTML5Test.com (updated Oct 2013)
  14. Sun Spider benchmark test: http://www.webkit.org/perf/sunspider/sunspider.html
  15. Show off some HTML5 in action
  16. This is not a question with a single correct answer. It all depends on your audience and strategy. There are several general strategies for defining what is “usable” today.
  17. Useful for adding HTML5 to both older browsers + new browsers that do not have a specific HTML5 feature http://remysharp.com/2010/10/08/what-is-a-polyfill/ https://github.com/Modernizr/Modernizr/wiki/HTML5-Cross-browser-Polyfills
  18. Strategy: Design for lowest common denominator, Enrich/Enhance as more capabilities are available Image Source: http://www.flickr.com/photos/aaronolaf/833342657/
  19. Strategy: Design for best case scenario (premium features), and gracefully remove features as resources are not available Image Source: http://www.mbusa.com/mercedes/index
  20. Modern adoption of HTML5 is done by checking for individual feature support, NOT by checking for specific browsers/browser versions. This helps you adopt as much of HTML5 as possible in a progressively optimistic manner.
  21. http://www.modernizr.com/
  22. http://www.modernizr.com http://www.alistapart.com/articles/taking-advantage-of-html5-and-css3-with-modernizr/ Modernizr now ships with ASP.NET MVC 3
  23. Important to define the scope and vastness of HTML5
  24. Focusing on features most popular in use today by HTML5 developers. Sources: http://css-tricks.com/poll-results-html5-features-in-use-on-production-sites/ http://css.dzone.com/articles/what-are-most-common-html5
  25. Demo End Result Goal
  26. Focusing on features most popular in use today by HTML5 developers. Sources: http://css-tricks.com/poll-results-html5-features-in-use-on-production-sites/ http://css.dzone.com/articles/what-are-most-common-html5
  27. http://www.w3.org/TR/html5/text-level-semantics.html http://media.smashingmagazine.com/cdn_smash/wp-content/uploads/images/html5-cheat-sheet/html5-cheat-sheet.pdf http://gsnedders.html5.org/outliner http://diveintohtml5.org/examples/blog-original.html http://visualstudiogallery.msdn.microsoft.com/en-us/d771cbc8-d60a-40b0-a1d8-f19fc393127d
  28. http://www.javascriptkit.com/dhtmltutors/customattributes.shtml http://html5doctor.com/html5-custom-data-attributes/ Two methods of access: - Via Attributes (http://api.jquery.com/category/attributes/) Via “dataset” (plug-in required today: http://www.orangesoda.net/jquery.dataset.html)
  29. Chrome H.264 from MSFT: http://arstechnica.com/microsoft/news/2011/02/microsoft-offers-h264-plugin-for-chrome-queries-google-on-webm.ars http://blogs.msdn.com/b/ie/archive/2011/02/01/html5-and-web-video-questions-for-the-industry-from-the-community.aspx Chrome’s pull of H.264: http://arstechnica.com/web/news/2011/01/googles-dropping-h264-from-chrome-a-step-backward-for-openness.ars/
  30. http://www.whatwg.org/specs/web-apps/current-work/multipage/states-of-the-type-attribute.html#states-of-the-type-attribute http://www.html5laboratory.com/s/simple-html5-contact-form.html Web Forms 2 (old spec – now Forms in HTML5): http://dev.w3.org/html5/web-forms-2/ http://www.whatwg.org/specs/web-apps/current-work/multipage/forms.html#forms Defined input types: http://www.whatwg.org/specs/web-apps/current-work/multipage/the-input-element.html#the-input-element Cross browser input types: http://net.tutsplus.com/tutorials/html-css-techniques/how-to-build-cross-browser-html5-forms/ Cross browser forms 2.0: https://github.com/westonruter/webforms2
  31. Useful articles: http://www.alistapart.com/articles/forward-thinking-form-validation/ https://developer.mozilla.org/en/HTML/HTML5/Forms_in_HTML5#Constraint_Validation_API http://www.the-art-of-web.com/html/html5-form-validation/
  32. Link to demo from A List Apart (good final cap demo on validation)
  33. iOS varies the keyboard significantly on the iPhone depending on the input type Shown: iOS5 (not available in iOS4)
  34. http://diveintohtml5.org/geolocation.html Spec: http://dev.w3.org/geo/api/spec-source.html Only lat, long, acc are guranteed. Other values might be available, including altitude, altitudeAccuracy, heading, speed Can force maximum age for cached geolocation objects Can handle errors and make repeat location calls using navigatior.geolocation.watchPosition(successCallback, errorCallback, {maximumAge:time}) Google Maps API v3 Reference: http://code.google.com/apis/maps/documentation/javascript/basics.html (Free to use on all apps that are free to consumers – no API keys needed)
  35. http://html5demos.com/storage Tutorial: http://html5tutorial.net/tutorials/working-with-html5-localstorage.html Fallback for older browsers: http://amplifyjs.com/api/store/
  36. Same Origin Policy for JS security https://developer.mozilla.org/en/Same_origin_policy_for_JavaScript
  37. http://www.html5rocks.com/en/tutorials/dnd/basics/
  38. File API: http://www.w3.org/TR/file-upload/ http://www.html5rocks.com/en/tutorials/file/dndfiles/ Demo: http://html5demos.com/file-api
  39. Focusing on features most popular in use today by HTML5 developers. Sources: http://css-tricks.com/poll-results-html5-features-in-use-on-production-sites/ http://css.dzone.com/articles/what-are-most-common-html5
  40. Example source: https://css-tricks.com/modular-future-web-components/
  41. Example source: https://css-tricks.com/modular-future-web-components/
  42. WebSql is not proceeding: http://dev.w3.org/html5/webdatabase/ State of web local storage: http://rethink.unspace.ca/2010/5/10/the-state-of-html5-local-data-storage Replacement Tech is IndexedDB: http://dvcs.w3.org/hg/IndexedDB/raw-file/tip/Overview.html Syncing back to a server database: http://stackoverflow.com/questions/1744522/best-way-to-synchronize-local-html5-db-storage-with-a-server PersistenceJS: https://github.com/zefhemel/persistencejs Google Web Stroage Portability Layer: http://google-opensource.blogspot.com/2009/05/web-storage-portability-layer-common.html
  43. Kills Google Gears http://www.w3.org/TR/IndexedDB/ https://developer.mozilla.org/en/IndexedDB http://www.html5rocks.com/tutorials/indexeddb/todo/ Good comparison by Mozilla to former WebDatabase approach: http://hacks.mozilla.org/2010/06/comparing-indexeddb-and-webdatabase/
  44. Example code for .NET WebSockets: http://www.undisciplinedbytes.com/2010/06/html-5-c-web-sockets-server-and-asp-net-client-implementation/ Online demo: http://websocket.org/echo.html Opera on Sockets: http://my.opera.com/core/blog/websockets Sockets disabled by default in FF and Opera: http://annevankesteren.nl/2010/12/websocket-protocol-vulnerability Enabling sockets in Opera 11: opera:config#UserPrefs|EnableWebSockets Enabling sockets in FF4: about:config -> network.websocket.override-security-block;true IE9 can do WebSockets via a prototype Silverlight hack: http://html5labs.interoperabilitybridges.com/prototypes/available-for-download/websockets Limits: http://html5labs.interoperabilitybridges.com/media/2311/readme.htm Sockets vs. traditional polling performance: http://soa.sys-con.com/node/1315473 3rd party sockets solution for older browsers:
  45. http://html5demos.com/offlineapp http://diveintohtml5.org/offline.html http://html5doctor.com/go-offline-with-application-cache/ (Good practical tips) Inspect appcache in Chrome: chrome://appcache-internals/ Stephen Walther on using ASP.NET to serve Cache manifest: http://stephenwalther.com/blog/archive/2011/01/26/creating-html5-offline-web-applications-with-asp-net.aspx Fix IIS Express manifest type: http://www.danielroot.info/2010/07/how-microsofty-writes-ipad-apps.html C:\Users\{YOU}\Documents\IISExpress\config\applicationHost.config Comment out the .manifest mime type (sorry ClickOnce!) Add the following line: <mimeMap fileExtension=".manifest" mimeType="text/cache-manifest" /> Can also override in IIS7+ config (integrated pipeline): <system.webServer> <staticContent> <mimeMap fileExtension=".manifest" mimeType="text/cache-manifest" /> </staticContent> </system.webServer> Application Cache API: http://www.w3.org/TR/html5/offline.html#application-cache-api
  46. Compatibility updated May 2015
  47. AGENDA: - Why JavaScript? Why?! - Most Common JS Problems - TIPS - Future of JavaScript
  48. JavaScript uses syntax influenced by that of C. JavaScript copies many names and naming conventions from Java, but the two languages are otherwise unrelated and have very different semantics. The key design principles within JavaScript are taken from the Self and Scheme programming languages. http://en.wikipedia.org/wiki/JavaScript
  49. NOTES: History Evolution The IE Connection (IE6 memory) Modern JS Engines BOTTOM LINE: Only Cross Platform Language Solution
  50. Netscape also wanted a lightweight interpreted language that would complement Java by appealing to nonprofessional programmers, like Microsoft's VB
  51. Credit: Brendan Eich via Wikipedia Source: http://www.jwz.org/blog/2010/10/every-day-i-learn-something-new-and-stupid/#comment-1021 Brendan further said that JavaScript saved the world from VBScript http://www.jwz.org/blog/2010/10/every-day-i-learn-something-new-and-stupid/#comment-1049
  52. Java is to JavaScript AS Car is to Carpet Netscape was going to release JavaScript as “LiveScript.” Last minute change produced JavaScript.
  53. HOW DID JAVASCRIPT BECOME UBIQUITOUS? Netscape shipped first in Netscape 2 Microsoft support added in IE3 (“JScript”) Other environments adopted JavaScript-like script languages: ActionScript (Flash), PDFs, Qt
  54. http://www.codinghorror.com/blog/2007/05/javascript-the-lingua-franca-of-the-web.html
  55. Contributing factors: New JS engines (V8) CPU speed (more local processing power) Better debugging tools Better understanding of language (closures, patterns, functional programming, JSLint)
  56. Chrome is 10x faster than IE7 (IE6 too old to test) Used crude relative test: http://jsbenchmark.celtickane.com
  57. http://geekmontage.com/firefox-vs-chrome-vs-ie/
  58. http://www.codinghorror.com/blog/2007/07/the-principle-of-least-power.html The Principle of Least Power
  59. jQuery built for convenience, not for performance. PERF PROOF: http://jsperf.com/id-vs-class-vs-tag-selectors/46 Note: This in general is applicable to native JavaScript methods too, like document.getElementById()  not limited to jQuery only objects DOM lookups are slow especially if DOM is huge. Instead of this: $('#test').bind('click', function() { /**/ }); $('#test').css('border', '1px solid #999'); Better use jQuery Method chaining: $('#test').bind('click', function() {/**/ })                  .css('border', '1px solid #999'); Or cache jQuery object: var $test = $('#test'); $test.bind('click', function() {/**/ }); $test.css('border', '1px solid #999'); (Performance comparison here: http://jsperf.com/jquery-chaining/12) (~+30% here, but it stacks on each additional method call)
  60. PRO TIP CONVENTION: Name jQuery variables with $ (ie $myObject) PERF TEST: http://jsperf.com/caching-jquery-objects-perf http://jsbin.com/udizam/2
  61. PERF TEST: http://jsperf.com/for-vs-foreach-vs-each/3 - Caching the array length improves perf by about 15% (http://jsperf.com/for-vs-foreach-vs-each/24) - Technically a reverse (count down) for loop is faster (15%) than count-up loop, but much harder to read/use
  62. Global variables pollute the JS app and are slower to use in code. Harder to be a good JS "neighbor" with global variables (collide with other JS code). Better to use local variables, cached variable, or closures
  63. Chart credit: http://oreilly.com/server-administration/excerpts/even-faster-websites/writing-efficient-javascript.html PERF TEST: http://jsperf.com/global/2
  64. Global memory garbage collecting problem example: http://fiddle.jshell.net/toddanglin/EhEBM/3/show/light/
  65. Pattern sometimes referred to as: MODULE EXPORT http://www.adequatelygood.com/2010/3/JavaScript-Module-Pattern-In-Depth BE CAREFUL WITH CLOSURES: Most common source of memory leaks in modern apps https://developers.google.com/speed/articles/optimizing-javascript Circular Reference Memory Leaks: http://blogs.msdn.com/b/ericlippert/archive/2003/09/17/53028.aspx
  66. Pattern sometimes referred to as: MODULE EXPORT http://www.adequatelygood.com/2010/3/JavaScript-Module-Pattern-In-Depth BE CAREFUL WITH CLOSURES: Most common source of memory leaks in modern apps https://developers.google.com/speed/articles/optimizing-javascript Circular Reference Memory Leaks: http://blogs.msdn.com/b/ericlippert/archive/2003/09/17/53028.aspx
  67. PERF TEST: http://jsperf.com/prototype-vs-closures/20 Explanation of term: http://benalman.com/news/2010/11/immediately-invoked-function-expression/ Suppose you develop a widget. The widget has a number of axillary classes. If you just define them globally they will pollute the global window class, meaning they will be available from everywhere. Instead consider the following definition:               (function (window) {                         function classA () {}                         function classB () {}                                                 function myWidget () {}                         myWidget.prototype.method1 = function ()                         {                         }                                                 window.myWidget = myWidget;                                     }) (window, undefined);   This is the pattern which jQuery follows. Now the only available global definition will be of myWidget. classA and classB remain hidden in the anonymous function. If you look closely in the definition, you will see the that window and undefined are passed to the anonymous function. Passing anonymous guaranties that undefined will be available in the scope of this function and will prevent you from someone who accidentally did something like:   undefined = true;   before your function. Also, if you use some minifier, it will replace all occurrences of window with some shorter name. Of course you can pass as much params as you wish, thus assuring that these objects exist in the scope of your anonymous function.
  68. - Binding to delegates is less brittle, easier to avoid memory leaks - Pub/Sub is super flexible, less coupling
  69. The scope of an inline event bind is GLOBAL! Inline event handlers can also cause memory leaks in IE: https://developers.google.com/speed/articles/optimizing-javascript
  70. Old jQuery syntax: .delegate
  71. Every time you need to dispose a DOM element, make sure you unbind all of its events, unless you want to come up with a memory leak. Whenever you bind an event handler to an event, you tell the processor to allocate memory for it. The more event handlers you have running at the same time, the more memory you are using. This is why it's important to unbind or detach your event handlers soon as you no longer need them. http://www.learnjquery.org/newsletter/Tutorial-3-jquery-events.html
  72. Event listening PUB/SUB
  73. Reducing the time spent changing the DOM improves perf. Using templates improves readability/maintainability. Instead of this: var $list = $('#mylist').append('<ul>'); for (var i = 0, l = itemlist.length; i < l; i++) {        $list.append('<li>' + itemlist[i] + '</li>'); } better this: var $list = $('<ul>'); for (var i = 0, l = itemlist.length; i < l; i++) {        $list.append('<li>' + itemlist[i] + '</li>'); } $('#mylist').append($list); (Performance comparison here: http://jsperf.com/jquery-dom-manipulation/3) (up to x5 in this case)
  74. PERF TEST: http://jsperf.com/jquery-dom-manipulation/4 When you want to dynamically build html, prefer string concatenation like:   var html = ’<p>some paragraph</p>’; html += ‘<p>another paragraph</p>’; $(“#placeHolder”).html(html);   over DOM object creation and appending/prepending like:               var p1 = document.createElement('p');             p1.innerHTML = "some paragraph";             document.body.appendChild(p1);               var p2 = document.createElement('p’);             p2.innerHTML = "another paragraph";             document.body.appendChild(p2);        assigning directly to the innerHTML proves to be the fastest method for html creation.
  75. PERF TEST: http://jsperf.com/jquery-dom-manipulation/5
  76. Common Examples: RequireJS, CommonJS Applications of any size are painful to manage without a module pattern.
  77. ES6 Comparison: http://es6-features.org/
  78. JSLint – by Douglas Crockford Code quality tool for JavaScript http://www.jslint.com/
  79. Before CSS: Styles were mixed with HTML tags (difficult to update, difficult to read) Layout was defined with HTML tags (poor semantic use of tags)
  80. CSS exists to separate styling and layout decisions from structural meaning of underlying document *Separation of concerns to a degree CSS rules often tend to create dependencies on HTML Other benefits of CSS: Performance (caching of CSS rules) Semantic HTML
  81. Peter Griffin CSS cartoon
  82. Extensions for CSS2.1 Add functionality, refine definitions New CSS3 features CSS3 principles Show example of CSS3 in action List of all CSS properties: http://meiert.com/en/indices/css-properties/ http://www.w3.org/Style/CSS/current-work http://www.w3.org/TR/2010/WD-css-2010-20101202/#css3
  83. CSS3’s evolutionary approach Microsoft is focusing primarily on adding product support at the Candidate Recommendation stage Review status of various CSS3 proposed specs: http://www.w3.org/Style/CSS/current-work Updated: Oct 2012
  84. Microsoft Extensions: http://blogs.msdn.com/b/ie/archive/2008/09/08/microsoft-css-vendor-extensions.aspx Vendor specific prefixes: http://reference.sitepoint.com/css/vendorspecific
  85. CSS Selectors over time (1, 2, 3) - As of Nov 2011
  86. @font-face was first proposed for CSS2 and has been implemented in Internet Explorer since version 5 IE relied on proprietary Embedded Open Type (.eot) Old school solutions involved things like sIFR (http://www.mikeindustries.com/blog/sifr/) Modern browsers finally support TTF and OTF + Most support new WOFF (exception is Safari) Resources: http://www.css3.info/preview/web-fonts-with-font-face/ http://www.alistapart.com/articles/cssatten
  87. Illustrate media query adapting (video?)
  88. http://www.webdesignerwall.com/tutorials/css3-media-queries/ http://www.w3.org/TR/css3-mediaqueries/ http://www.w3.org/TR/2010/CR-css3-mediaqueries-20100727/
  89. http://www.webdesignerwall.com/tutorials/css3-media-queries/ http://www.w3.org/TR/css3-mediaqueries/ http://www.w3.org/TR/2010/CR-css3-mediaqueries-20100727/
  90. http://www.webdesignerwall.com/tutorials/css3-media-queries/ http://www.w3.org/TR/css3-mediaqueries/ http://www.w3.org/TR/2010/CR-css3-mediaqueries-20100727/
  91. http://codepen.io/HugoGiraudel/pen/qIAwr