SlideShare a Scribd company logo
HTML5 and CSS3: Exploring
   Mobile Possibilities
HTML5 and CSS3 – exploring mobile possibilities - Frontend Conference Zürich
HTML5 and CSS3 – exploring mobile possibilities - Frontend Conference Zürich
HTML5 and CSS3 – exploring mobile possibilities - Frontend Conference Zürich
Roby on Rails
Mozilla is a global non-profit
dedicated to putting you in control
of your online experience and
shaping the future of the Web for
the public good
HTML5 and CSS3 – exploring mobile possibilities - Frontend Conference Zürich
HTML5 and CSS3 – exploring mobile possibilities - Frontend Conference Zürich
CSS Media Queries
width                 color
height                color-index
device-width          monochrome
device-height         resolution
orientation           scan
aspect-ratio          grid
device-aspect-ratio
min-width
max-width
orientation
<link rel="stylesheet"
  href="pretty.css"
  media="screen and (min-width: 500px)">
.nav {
    width: 150px;
}

@media screen and (min-width: 500px) {
    .nav {
        width: 300px;
    }
}
@media screen and (min-width: 500px) and (max-width: 1024px) {
    .nav {
        width: 200px;
    }
}
@media screen and (min-width: 100px),
@media handheld {
    .nav {
        width: 350px;
    }
}
@media only screen and (min-width: 100px) {
    .nav {
        width: 350px;
    }
}
@media not screen and (min-width: 100px) {
    .nav {
        width: 100%;
    }
}
@media screen and (orientation: landscape) {
    .nav {
        float: left;
        width: 20%;
    }
    .main {
        float: right;
        width: 80%;
    }
}
@media screen and (orientation: portrait) {
    .nav {
        width: 100%;
    }
    .main {
        width: 100%;
    }
}
<meta name="viewport"
    content="width=device-width, initial-scale=1.0">

<meta name="viewport"
    content="width=device-width, initial-scale=1.0, maximum-scale=1.0">
HTML5 and CSS3 – exploring mobile possibilities - Frontend Conference Zürich
http://mediaqueri.es/
CSS Flex Box
<div class="flex-container">
    <section class="col-1">I am column 1</section>
    <section class="col-2">I am column 2</section>
    <section class="col-3">I am column 3</section>
</div>
.flex-container {
    display: -moz-box;
    display: -ms-box;
    display: -webkit-box;
    display: box;
    -moz-box-orient: horizontal;
    -ms-box-orient: horizontal;
    -webkit-box-orient: horizontal;
    box-orient: horizontal;
}
.col-1 {
    -moz-box-flex: 1;
    -ms-box-flex: 1;
    -webkit-box-flex: 1;
    box-flex: 1;
}

.col-2 {
    -moz-box-flex: 1;
    -ms-box-flex: 1;
    -webkit-box-flex: 1;
    box-flex: 1;
}

.col-3 {
    -moz-box-flex: 2;
    -ms-box-flex: 2;
    -webkit-box-flex: 2;
    box-flex: 2;
}
.col-1 {
    -moz-box-ordinal-group: 2;
    -ms-box-ordinal-group: 2;
    -webkit-box-ordinal-group: 2;
    box-ordinal-group: 2;
}

.col-2 {
    -moz-box-ordinal-group: 3;
    -ms-box-ordinal-group: 3;
    -webkit-box-ordinal-group: 3;
    box-ordinal-group: 3;
}

.col-3 {
    -moz-box-ordinal-group: 1;
    -ms-box-ordinal-group: 1;
    -webkit-box-ordinal-group: 1;
    box-ordinal-group: 1;
}
flex- instead of box-
CSS Transitions
/* Shorthand version */
#hello {
    display: inline-block;
    height: 20px;
    opacity: 0.3;
    -moz-transition: height 1s ease-out, opacity 1s ease;
    -ms-transition: height 1s ease-out, opacity 1s ease;
    -o-transition: height 1s ease-out, opacity 1s ease;
    -webkit-transition: height 1s ease-out, opacity 1s ease;
    transition: height 1s ease-out, opacity 1s ease;
}

#hello:hover {
    height: 40px;
    opacity: 1;
}
/* Shorthand version */
.menu-item {
    position: relative;
    display: inline-block;
    border: 1px dashed #000;
    padding: 10px;
    background: #ffffa2;
    height: 20px;
    opacity: 0.3;
    text-decoration: none;
    -moz-transition: all 1s ease;
    -ms-transition: all 1s ease;
    -o-transition: all 1s ease;
    -webkit-transition: all 1s ease;
    transition: all 1s ease;
}

.menu-item:hover {
    opacity: 1;
    -moz-transform: scale(2) rotate(30deg) translate(50px);
    -ms-transform: scale(2) rotate(30deg) translate(50px);
    -o-transform: scale(2) rotate(30deg) translate(50px);
    -webkit-transform: scale(1.2) rotate(30deg) translate(50px);
    transform: scale(2) rotate(30deg) translate(50px);
}
HTML5 and CSS3 – exploring mobile possibilities - Frontend Conference Zürich
.love-me {
    -webkit-transform: translate3d(0, 0, 0);
}
CSS Animations
.animation-container {
    height: 60px;
    padding: 10px;
    -moz-animation-name: movearound;
    -moz-animation-duration: 4s;
    -moz-animation-iteration-count: infinite;
    -moz-animation-direction: normal;
    -moz-animation-timing-function: ease;
    -webkit-animation-name: movearound;
    -webkit-animation-duration: 4s;
    -webkit-animation-iteration-count: infinite;
    -webkit-animation-direction: normal;
    -webkit-animation-timing-function: ease;
}

@-moz-keyframes movearound {
    from {
         width: 200px;
         background: #f00;
         opacity: 0.5;
         -moz-transform: scale(0.5) rotate(15deg);
    }
    to {
         width: 400px;
         background: #ffffa2;
         opacity: 1;
         -moz-transform: scale(1) rotate(0deg);
    }
}
@-webkit-keyframes movearound {
    from {
         width: 200px;
         background: #f00;
         opacity: 0.5;
         -webkit-transform: scale(0.5) rotate(15deg);
    }
    to {
         width: 400px;
         background: #ffffa2;
         opacity: 1;
         -webkit-transform: scale(1) rotate(0deg);
    }
}
CSS box-shadow and text-shadow
HTML5 and CSS3 – exploring mobile possibilities - Frontend Conference Zürich
HTML5 and CSS3 – exploring mobile possibilities - Frontend Conference Zürich
text-overflow: ellipsis
HTML5 and CSS3 – exploring mobile possibilities - Frontend Conference Zürich
HTML5 and CSS3 – exploring mobile possibilities - Frontend Conference Zürich
HTML5 Forms
New form types


<input type="color">             <input type="range">

<input type="date">              <input type="search"
                                    results="5"
<input type="datetime">             autosave="saved-searches">

<input type="datetime-local">    <input type="tel">

<input type="email">             <input type="time">

<input type="month">             <input type="url">

<input type="number">            <input type="week">
HTML5 and CSS3 – exploring mobile possibilities - Frontend Conference Zürich
HTML5 and CSS3 – exploring mobile possibilities - Frontend Conference Zürich
HTML5 and CSS3 – exploring mobile possibilities - Frontend Conference Zürich
HTML5 and CSS3 – exploring mobile possibilities - Frontend Conference Zürich
HTML5 and CSS3 – exploring mobile possibilities - Frontend Conference Zürich
New form attributes

<input type="text" autocomplete="off">

<input type="text" autofocus>

<input type="submit" formaction="http://example.org/save" value="Save">

<input type="submit" formenctype="application/x-www-form-urlencoded"
       value="Save with enctype">

<input type="submit" formmethod="POST" value="Send as POST">

<input type="submit" formnovalidate value="Don't validate">

<input type="submit" formtarget="_blank" value="Post to new tab/window">
<input type="text" list="data-list">

<input type="range" max="95">

<input type="range" min="2">

<input type="file" multiple>

<input type="text" readonly>

<input type="text" required>

<input type="text" pattern="[A-Z]*">

<input type="text" placeholder="E.g. Robocop">

<input type="text" spellcheck="true">

<input type="number" step="5">
New form elements



<input type="text" list="data-list">

<datalist id="data-list">
    <option value="Hugo Reyes">
    <option value="Jack Shephard">
    <option value="James 'Sawyer' Ford">
    <option value="John Locke">
    <option value="Sayid Jarrah">
</datalist>
<keygen></keygen>

<meter min="0" max="10" value="7"></meter>

<input type="range" id="range">
<output for="range" id="output"></output>

<progress max="100" value="70">70%</progress>
<input type="range" id="range">
<output for="range" id="output"></output>

<script>
    (function () {
         var theForm = document.getElementById("the-form");
         if ("oninput" in theForm) {
             theForm.addEventListener("input", function () {
                 output.value = range.value;
             }, false);
         }
    })();
</script>
HTML5 and CSS3 – exploring mobile possibilities - Frontend Conference Zürich
http://www.quirksmode.org/html5/inputs.html

http://www.quirksmode.org/html5/inputs_mobile.html

http://wufoo.com/html5/
Link protocols
#b
                                                   ro
                                                        ws
                                                             er
<a href="tel:+441111234567">tel: link</a>                         lo
                                                                       ve

<a href="sms:+441111234567">sms: link</a>

<a href="sms:+441111234567?body=Text%20me">
     sms: with body
</a>

<a href="sms:+441111234567,+441111678901">
     sms: with multiple numbers
</a>

<a href="sms:+441111234567,+441111678901?body=Text%20me">
     sms: with multiple numbers + body
</a>
JavaScript on mobile
Web Storage
HTML5 and CSS3 – exploring mobile possibilities - Frontend Conference Zürich
sessionStorage.setItem("Charming", "Piers Morgan");
console.log(sessionStorage.getItem("Charming"));
localStorage.setItem("Job", "Show host");
var piersMorgan = {
    "Transportation" : "Segway",
    "Damage" : "Three broken ribs"
};

localStorage.setItem("piersMorgan", JSON.stringify(piersMorgan));

console.log(typeof JSON.parse(localStorage.getItem("piersMorgan")));
Web SQL   IndexedDB
Geolocation
if (navigator.geolocation) {
    navigator.geolocation.getCurrentPosition(function (position) {
        alert(position.coords.latitude + ", " + position.coords.longitude);
    });
}
HTML5 and CSS3 – exploring mobile possibilities - Frontend Conference Zürich
HTML5 and CSS3 – exploring mobile possibilities - Frontend Conference Zürich
Offline Web Applications
// Poll the navigator.onLine property
setInterval(function () {
    console.log(navigator.onLine);
}, 1000);
<!DOCTYPE html>
<html manifest="offline.appcache">
<head>
...
CACHE MANIFEST

# VERSION 10

CACHE:
offline.html
base.css

FALLBACK:
online.css offline.css

NETWORK:
/live-updates
History API
window.history.pushState(state, title, url);
var url = "http://robertnyman.com",
title = "My blog",
state = {
    address : url
};

window.history.pushState(state, title, url);
HTML5 and CSS3 – exploring mobile possibilities - Frontend Conference Zürich
Mobile Perf
weinre
HTML5 and CSS3 – exploring mobile possibilities - Frontend Conference Zürich
HTML5 and CSS3 – exploring mobile possibilities - Frontend Conference Zürich
position: fixed

overflow: scroll

-webkit-overflow-scrolling: touch

Web Workers
HTML5 and CSS3 – exploring mobile possibilities - Frontend Conference Zürich
HTML5 and CSS3 – exploring mobile possibilities - Frontend Conference Zürich
HTML5 and CSS3 – exploring mobile possibilities - Frontend Conference Zürich
HTML5 and CSS3 – exploring mobile possibilities - Frontend Conference Zürich
Robert Nyman
robertnyman.com/speaking/ robnyman@mozilla.com
robertnyman.com/html5/    Twitter: @robertnyman
robertnyman.com/css3/

More Related Content

Similar to HTML5 and CSS3 – exploring mobile possibilities - Frontend Conference Zürich (20)

PDF
Accelerated Stylesheets
Wynn Netherland
 
PDF
Responsive Web Design: From Mobile To Desktop, And Beyond (updated for MobiDe...
gravityworksdd
 
PDF
Media queries
Kevin DeRudder
 
PDF
Multi screen HTML5
Ron Reiter
 
PDF
Real-world CSS3
Zoe Gillenwater
 
PDF
Building Better Responsive Websites
Holger Bartel
 
KEY
Ease into HTML5 and CSS3
Brian Moon
 
PPT
The Mobile Development Landscape
Ambert Ho
 
PDF
Dynamic User Interfaces for Desktop and Mobile
peychevi
 
PDF
Html standards presentation
Tiago Cardoso
 
KEY
CSS3 Takes on the World
Jonathan Snook
 
KEY
HTML5와 모바일
ACCESS
 
PDF
Responsive Websites
Joe Seifi
 
PDF
CSS3: Using media queries to improve the web site experience
Zoe Gillenwater
 
PDF
Future proof rwd
Adam Chambers
 
PDF
Future-Proof Responsive Web Design #RWD
Digital Surgeons
 
PDF
Accessible code-patterns
Francesco Bedussi
 
PDF
Implementing Awesome: An HTML5/CSS3 Workshop
Shoshi Roberts
 
PDF
Using jQuery to Extend CSS
Chris Coyier
 
PDF
Effective and Efficient Design with CSS3
Zoe Gillenwater
 
Accelerated Stylesheets
Wynn Netherland
 
Responsive Web Design: From Mobile To Desktop, And Beyond (updated for MobiDe...
gravityworksdd
 
Media queries
Kevin DeRudder
 
Multi screen HTML5
Ron Reiter
 
Real-world CSS3
Zoe Gillenwater
 
Building Better Responsive Websites
Holger Bartel
 
Ease into HTML5 and CSS3
Brian Moon
 
The Mobile Development Landscape
Ambert Ho
 
Dynamic User Interfaces for Desktop and Mobile
peychevi
 
Html standards presentation
Tiago Cardoso
 
CSS3 Takes on the World
Jonathan Snook
 
HTML5와 모바일
ACCESS
 
Responsive Websites
Joe Seifi
 
CSS3: Using media queries to improve the web site experience
Zoe Gillenwater
 
Future proof rwd
Adam Chambers
 
Future-Proof Responsive Web Design #RWD
Digital Surgeons
 
Accessible code-patterns
Francesco Bedussi
 
Implementing Awesome: An HTML5/CSS3 Workshop
Shoshi Roberts
 
Using jQuery to Extend CSS
Chris Coyier
 
Effective and Efficient Design with CSS3
Zoe Gillenwater
 

More from Robert Nyman (20)

PDF
Have you tried listening?
Robert Nyman
 
PDF
Building for Your Next Billion - Google I/O 2017
Robert Nyman
 
PDF
Introduction to Google Daydream
Robert Nyman
 
PDF
Predictability for the Web
Robert Nyman
 
PDF
The Future of Progressive Web Apps - View Source conference, Berlin 2016
Robert Nyman
 
PDF
The Future of the Web - Cold Front conference 2016
Robert Nyman
 
PDF
The Future of Progressive Web Apps - Google for Indonesia
Robert Nyman
 
PDF
Google tech & products
Robert Nyman
 
PDF
Introduction to Progressive Web Apps, Google Developer Summit, Seoul - South ...
Robert Nyman
 
PDF
Progressive Web Apps keynote, Google Developer Summit, Tokyo, Japan
Robert Nyman
 
PDF
The web - What it has, what it lacks and where it must go - keynote at Riga D...
Robert Nyman
 
PDF
The web - What it has, what it lacks and where it must go - Bulgaria Web Summ...
Robert Nyman
 
PDF
The web - What it has, what it lacks and where it must go - Istanbul
Robert Nyman
 
PDF
The web - What it has, what it lacks and where it must go
Robert Nyman
 
PDF
Google, the future and possibilities
Robert Nyman
 
PDF
Developer Relations in the Nordics
Robert Nyman
 
PDF
What is Developer Relations?
Robert Nyman
 
PDF
Android TV Introduction - Stockholm Android TV meetup
Robert Nyman
 
PDF
New improvements for web developers - frontend.fi, Helsinki
Robert Nyman
 
PDF
Mobile phone trends, user data & developer climate - frontend.fi, Helsinki
Robert Nyman
 
Have you tried listening?
Robert Nyman
 
Building for Your Next Billion - Google I/O 2017
Robert Nyman
 
Introduction to Google Daydream
Robert Nyman
 
Predictability for the Web
Robert Nyman
 
The Future of Progressive Web Apps - View Source conference, Berlin 2016
Robert Nyman
 
The Future of the Web - Cold Front conference 2016
Robert Nyman
 
The Future of Progressive Web Apps - Google for Indonesia
Robert Nyman
 
Google tech & products
Robert Nyman
 
Introduction to Progressive Web Apps, Google Developer Summit, Seoul - South ...
Robert Nyman
 
Progressive Web Apps keynote, Google Developer Summit, Tokyo, Japan
Robert Nyman
 
The web - What it has, what it lacks and where it must go - keynote at Riga D...
Robert Nyman
 
The web - What it has, what it lacks and where it must go - Bulgaria Web Summ...
Robert Nyman
 
The web - What it has, what it lacks and where it must go - Istanbul
Robert Nyman
 
The web - What it has, what it lacks and where it must go
Robert Nyman
 
Google, the future and possibilities
Robert Nyman
 
Developer Relations in the Nordics
Robert Nyman
 
What is Developer Relations?
Robert Nyman
 
Android TV Introduction - Stockholm Android TV meetup
Robert Nyman
 
New improvements for web developers - frontend.fi, Helsinki
Robert Nyman
 
Mobile phone trends, user data & developer climate - frontend.fi, Helsinki
Robert Nyman
 
Ad

Recently uploaded (20)

PPTX
MuleSoft MCP Support (Model Context Protocol) and Use Case Demo
shyamraj55
 
PDF
Go Concurrency Real-World Patterns, Pitfalls, and Playground Battles.pdf
Emily Achieng
 
DOCX
Cryptography Quiz: test your knowledge of this important security concept.
Rajni Bhardwaj Grover
 
PDF
[Newgen] NewgenONE Marvin Brochure 1.pdf
darshakparmar
 
PPTX
AUTOMATION AND ROBOTICS IN PHARMA INDUSTRY.pptx
sameeraaabegumm
 
PDF
Exolore The Essential AI Tools in 2025.pdf
Srinivasan M
 
PDF
Jak MŚP w Europie Środkowo-Wschodniej odnajdują się w świecie AI
dominikamizerska1
 
PPTX
COMPARISON OF RASTER ANALYSIS TOOLS OF QGIS AND ARCGIS
Sharanya Sarkar
 
PDF
Newgen 2022-Forrester Newgen TEI_13 05 2022-The-Total-Economic-Impact-Newgen-...
darshakparmar
 
PDF
New from BookNet Canada for 2025: BNC BiblioShare - Tech Forum 2025
BookNet Canada
 
PDF
How do you fast track Agentic automation use cases discovery?
DianaGray10
 
PPTX
"Autonomy of LLM Agents: Current State and Future Prospects", Oles` Petriv
Fwdays
 
PPTX
Future Tech Innovations 2025 – A TechLists Insight
TechLists
 
PDF
Bitcoin for Millennials podcast with Bram, Power Laws of Bitcoin
Stephen Perrenod
 
PDF
Agentic AI lifecycle for Enterprise Hyper-Automation
Debmalya Biswas
 
PDF
CIFDAQ Market Wrap for the week of 4th July 2025
CIFDAQ
 
PDF
Mastering Financial Management in Direct Selling
Epixel MLM Software
 
PDF
“Voice Interfaces on a Budget: Building Real-time Speech Recognition on Low-c...
Edge AI and Vision Alliance
 
PDF
Transforming Utility Networks: Large-scale Data Migrations with FME
Safe Software
 
PDF
"AI Transformation: Directions and Challenges", Pavlo Shaternik
Fwdays
 
MuleSoft MCP Support (Model Context Protocol) and Use Case Demo
shyamraj55
 
Go Concurrency Real-World Patterns, Pitfalls, and Playground Battles.pdf
Emily Achieng
 
Cryptography Quiz: test your knowledge of this important security concept.
Rajni Bhardwaj Grover
 
[Newgen] NewgenONE Marvin Brochure 1.pdf
darshakparmar
 
AUTOMATION AND ROBOTICS IN PHARMA INDUSTRY.pptx
sameeraaabegumm
 
Exolore The Essential AI Tools in 2025.pdf
Srinivasan M
 
Jak MŚP w Europie Środkowo-Wschodniej odnajdują się w świecie AI
dominikamizerska1
 
COMPARISON OF RASTER ANALYSIS TOOLS OF QGIS AND ARCGIS
Sharanya Sarkar
 
Newgen 2022-Forrester Newgen TEI_13 05 2022-The-Total-Economic-Impact-Newgen-...
darshakparmar
 
New from BookNet Canada for 2025: BNC BiblioShare - Tech Forum 2025
BookNet Canada
 
How do you fast track Agentic automation use cases discovery?
DianaGray10
 
"Autonomy of LLM Agents: Current State and Future Prospects", Oles` Petriv
Fwdays
 
Future Tech Innovations 2025 – A TechLists Insight
TechLists
 
Bitcoin for Millennials podcast with Bram, Power Laws of Bitcoin
Stephen Perrenod
 
Agentic AI lifecycle for Enterprise Hyper-Automation
Debmalya Biswas
 
CIFDAQ Market Wrap for the week of 4th July 2025
CIFDAQ
 
Mastering Financial Management in Direct Selling
Epixel MLM Software
 
“Voice Interfaces on a Budget: Building Real-time Speech Recognition on Low-c...
Edge AI and Vision Alliance
 
Transforming Utility Networks: Large-scale Data Migrations with FME
Safe Software
 
"AI Transformation: Directions and Challenges", Pavlo Shaternik
Fwdays
 
Ad

HTML5 and CSS3 – exploring mobile possibilities - Frontend Conference Zürich

  • 1. HTML5 and CSS3: Exploring Mobile Possibilities
  • 6. Mozilla is a global non-profit dedicated to putting you in control of your online experience and shaping the future of the Web for the public good
  • 10. width color height color-index device-width monochrome device-height resolution orientation scan aspect-ratio grid device-aspect-ratio
  • 12. <link rel="stylesheet" href="pretty.css" media="screen and (min-width: 500px)">
  • 13. .nav { width: 150px; } @media screen and (min-width: 500px) { .nav { width: 300px; } }
  • 14. @media screen and (min-width: 500px) and (max-width: 1024px) { .nav { width: 200px; } }
  • 15. @media screen and (min-width: 100px), @media handheld { .nav { width: 350px; } }
  • 16. @media only screen and (min-width: 100px) { .nav { width: 350px; } }
  • 17. @media not screen and (min-width: 100px) { .nav { width: 100%; } }
  • 18. @media screen and (orientation: landscape) { .nav { float: left; width: 20%; } .main { float: right; width: 80%; } }
  • 19. @media screen and (orientation: portrait) { .nav { width: 100%; } .main { width: 100%; } }
  • 20. <meta name="viewport" content="width=device-width, initial-scale=1.0"> <meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0">
  • 24. <div class="flex-container"> <section class="col-1">I am column 1</section> <section class="col-2">I am column 2</section> <section class="col-3">I am column 3</section> </div>
  • 25. .flex-container { display: -moz-box; display: -ms-box; display: -webkit-box; display: box; -moz-box-orient: horizontal; -ms-box-orient: horizontal; -webkit-box-orient: horizontal; box-orient: horizontal; }
  • 26. .col-1 { -moz-box-flex: 1; -ms-box-flex: 1; -webkit-box-flex: 1; box-flex: 1; } .col-2 { -moz-box-flex: 1; -ms-box-flex: 1; -webkit-box-flex: 1; box-flex: 1; } .col-3 { -moz-box-flex: 2; -ms-box-flex: 2; -webkit-box-flex: 2; box-flex: 2; }
  • 27. .col-1 { -moz-box-ordinal-group: 2; -ms-box-ordinal-group: 2; -webkit-box-ordinal-group: 2; box-ordinal-group: 2; } .col-2 { -moz-box-ordinal-group: 3; -ms-box-ordinal-group: 3; -webkit-box-ordinal-group: 3; box-ordinal-group: 3; } .col-3 { -moz-box-ordinal-group: 1; -ms-box-ordinal-group: 1; -webkit-box-ordinal-group: 1; box-ordinal-group: 1; }
  • 30. /* Shorthand version */ #hello { display: inline-block; height: 20px; opacity: 0.3; -moz-transition: height 1s ease-out, opacity 1s ease; -ms-transition: height 1s ease-out, opacity 1s ease; -o-transition: height 1s ease-out, opacity 1s ease; -webkit-transition: height 1s ease-out, opacity 1s ease; transition: height 1s ease-out, opacity 1s ease; } #hello:hover { height: 40px; opacity: 1; }
  • 31. /* Shorthand version */ .menu-item { position: relative; display: inline-block; border: 1px dashed #000; padding: 10px; background: #ffffa2; height: 20px; opacity: 0.3; text-decoration: none; -moz-transition: all 1s ease; -ms-transition: all 1s ease; -o-transition: all 1s ease; -webkit-transition: all 1s ease; transition: all 1s ease; } .menu-item:hover { opacity: 1; -moz-transform: scale(2) rotate(30deg) translate(50px); -ms-transform: scale(2) rotate(30deg) translate(50px); -o-transform: scale(2) rotate(30deg) translate(50px); -webkit-transform: scale(1.2) rotate(30deg) translate(50px); transform: scale(2) rotate(30deg) translate(50px); }
  • 33. .love-me { -webkit-transform: translate3d(0, 0, 0); }
  • 35. .animation-container { height: 60px; padding: 10px; -moz-animation-name: movearound; -moz-animation-duration: 4s; -moz-animation-iteration-count: infinite; -moz-animation-direction: normal; -moz-animation-timing-function: ease; -webkit-animation-name: movearound; -webkit-animation-duration: 4s; -webkit-animation-iteration-count: infinite; -webkit-animation-direction: normal; -webkit-animation-timing-function: ease; } @-moz-keyframes movearound { from { width: 200px; background: #f00; opacity: 0.5; -moz-transform: scale(0.5) rotate(15deg); } to { width: 400px; background: #ffffa2; opacity: 1; -moz-transform: scale(1) rotate(0deg); } }
  • 36. @-webkit-keyframes movearound { from { width: 200px; background: #f00; opacity: 0.5; -webkit-transform: scale(0.5) rotate(15deg); } to { width: 400px; background: #ffffa2; opacity: 1; -webkit-transform: scale(1) rotate(0deg); } }
  • 37. CSS box-shadow and text-shadow
  • 44. New form types <input type="color"> <input type="range"> <input type="date"> <input type="search" results="5" <input type="datetime"> autosave="saved-searches"> <input type="datetime-local"> <input type="tel"> <input type="email"> <input type="time"> <input type="month"> <input type="url"> <input type="number"> <input type="week">
  • 50. New form attributes <input type="text" autocomplete="off"> <input type="text" autofocus> <input type="submit" formaction="http://example.org/save" value="Save"> <input type="submit" formenctype="application/x-www-form-urlencoded" value="Save with enctype"> <input type="submit" formmethod="POST" value="Send as POST"> <input type="submit" formnovalidate value="Don't validate"> <input type="submit" formtarget="_blank" value="Post to new tab/window">
  • 51. <input type="text" list="data-list"> <input type="range" max="95"> <input type="range" min="2"> <input type="file" multiple> <input type="text" readonly> <input type="text" required> <input type="text" pattern="[A-Z]*"> <input type="text" placeholder="E.g. Robocop"> <input type="text" spellcheck="true"> <input type="number" step="5">
  • 52. New form elements <input type="text" list="data-list"> <datalist id="data-list"> <option value="Hugo Reyes"> <option value="Jack Shephard"> <option value="James 'Sawyer' Ford"> <option value="John Locke"> <option value="Sayid Jarrah"> </datalist>
  • 53. <keygen></keygen> <meter min="0" max="10" value="7"></meter> <input type="range" id="range"> <output for="range" id="output"></output> <progress max="100" value="70">70%</progress>
  • 54. <input type="range" id="range"> <output for="range" id="output"></output> <script> (function () { var theForm = document.getElementById("the-form"); if ("oninput" in theForm) { theForm.addEventListener("input", function () { output.value = range.value; }, false); } })(); </script>
  • 58. #b ro ws er <a href="tel:+441111234567">tel: link</a> lo ve <a href="sms:+441111234567">sms: link</a> <a href="sms:+441111234567?body=Text%20me"> sms: with body </a> <a href="sms:+441111234567,+441111678901"> sms: with multiple numbers </a> <a href="sms:+441111234567,+441111678901?body=Text%20me"> sms: with multiple numbers + body </a>
  • 64. var piersMorgan = { "Transportation" : "Segway", "Damage" : "Three broken ribs" }; localStorage.setItem("piersMorgan", JSON.stringify(piersMorgan)); console.log(typeof JSON.parse(localStorage.getItem("piersMorgan")));
  • 65. Web SQL IndexedDB
  • 67. if (navigator.geolocation) { navigator.geolocation.getCurrentPosition(function (position) { alert(position.coords.latitude + ", " + position.coords.longitude); }); }
  • 71. // Poll the navigator.onLine property setInterval(function () { console.log(navigator.onLine); }, 1000);
  • 73. CACHE MANIFEST # VERSION 10 CACHE: offline.html base.css FALLBACK: online.css offline.css NETWORK: /live-updates
  • 76. var url = "http://robertnyman.com", title = "My blog", state = { address : url }; window.history.pushState(state, title, url);