Upload
jens-christian-fischer
View
1.070
Download
0
Embed Size (px)
DESCRIPTION
Früher war alles besser - sowieso! Konnte man vor 20 Jahren alleine mit HTML einen Webauftritt gestalten, hat sich die Anzahl der Technologien, die eine Webentwicklerin beherrschen muss, ... Vortrag am Internet Briefing in Zürich, 4.12.2012
Citation preview
Beyond HTMLScriptsprachen, Frameworks, Templatesprachen und
vieles mehr
4. Dezember 2012Jens-Christian Fischer
@jcfischer
Freitag, 7. Dezember 12
Beyond HTMLScriptsprachen, Frameworks, Templatesprachen und
vieles mehr
4. Dezember 2012Jens-Christian Fischer
@jcfischer
Werkzeug
Freitag, 7. Dezember 12
Freitag, 7. Dezember 12
Freitag, 7. Dezember 12
1992Freitag, 7. Dezember 12
Freitag, 7. Dezember 12
1998Freitag, 7. Dezember 12
Freitag, 7. Dezember 12
2001Freitag, 7. Dezember 12
Freitag, 7. Dezember 12
Freitag, 7. Dezember 12
2012Freitag, 7. Dezember 12
Freitag, 7. Dezember 12
Freitag, 7. Dezember 12
Freitag, 7. Dezember 12
Freitag, 7. Dezember 12
http://flickr.com/photos/glennharper/49536169/
Freitag, 7. Dezember 12
Freitag, 7. Dezember 12
Werkzeuge
The Way of the carpenter is to become proficient in the use of his tools, first to lay his plans with a true measure and then perform his work according to plan.
– Go Rin No Sho
Freitag, 7. Dezember 12
Software Tools
Freitag, 7. Dezember 12
Freitag, 7. Dezember 12
Freitag, 7. Dezember 12
Freitag, 7. Dezember 12
http://ivanzuzak.info/2012/11/18/the-web-engineers-online-toolbox.html
Freitag, 7. Dezember 12
Freitag, 7. Dezember 12
Freitag, 7. Dezember 12
HTMLCSS
JavaScript
Freitag, 7. Dezember 12
Freitag, 7. Dezember 12
Offline
<!DOCTYPE HTML><html manifest="/cache.manifest"><body>...</body></html>
CACHE MANIFESTFALLBACK:/ /offline.htmlNETWORK:/tracking.cgiCACHE:/clock.css/clock.js/clock-face.jpg
http://diveintohtml5.info/offline.html
Freitag, 7. Dezember 12
Storage
http://diveintohtml5.info/storage.html
if (Modernizr.localstorage) { var foo = localStorage.getItem("key"); // ... localStorage.setItem("key", foo);} else { alert('No storage capabilities');}
Freitag, 7. Dezember 12
Websocketsvar sockets = new webSockets("ws://foo.example.com:8181/socket");
sockets.bind("open", function (msg) { debug(Verbindung steht!");});sockets.bind("close", function (msg) { debug("Verbindung verloren!");});sockets.bind("doStuff", function (msg) { var data = msg.data; if (data) { doSomething(data); }});
Freitag, 7. Dezember 12
Datei Zugriff<ol ondragstart="dragStartHandler(event)"> <li draggable="true" data-value="fruit-apple">Apples</li> <li draggable="true" data-value="fruit-orange">Oranges</li> <li draggable="true" data-value="fruit-pear">Pears</li></ol><script> var internalDNDType = 'text/x-example'; function dragStartHandler(event) { if (event.target instanceof HTMLLIElement) { // use the element's data-value="" attribute as the value to be moving: event.dataTransfer.setData(internalDNDType, event.target.dataset.value); event.dataTransfer.effectAllowed = 'move'; // only allow moves } else { event.preventDefault(); // don't allow selection to be dragged } }</script
http://www.whatwg.org/specs/web-apps/current-work/multipage/dnd.html#the-dragevent-and-datatransfer-interfaces
Freitag, 7. Dezember 12
Semantisch
http://slides.html5rocks.com/#new-form-types
Freitag, 7. Dezember 12
Multimedia
<audio id="audio" src="sound.mp3" controls></audio><video id="video" src="movie.webm" autoplay controls></video>
<script> document.getElementById("audio").muted = false; document.getElementById("video").play();</script>
Freitag, 7. Dezember 12
3D Graphik
http://slides.html5rocks.com/#canvas-3d
Freitag, 7. Dezember 12
Präsentation (CSS 3)
Freitag, 7. Dezember 12
Präsentation (CSS 3)Typographie (Webfonts)
Freitag, 7. Dezember 12
Präsentation (CSS 3)Typographie (Webfonts)
Rotation (2D / 3D)
Freitag, 7. Dezember 12
Responsive Design
Freitag, 7. Dezember 12
HTML Tools
http://www.flickr.com/photos/lynnfriedman/5570720402/
Freitag, 7. Dezember 12
<div id="profile"> <div class="left column"> <h4>Willkommen</h4> <p id="address"><%= current_user.address %></p> </div> <div class="right column"> <ul> <li id="email"><%= current_user.email %></li> <li id="bio"><%= current_user.bio %></li> </ul> </div></div>
HTML
profileleft column
address = current_user.address
right column
email = current_user.emailbio = current_user.bio
h4 Willkommenp
ul
lili
Freitag, 7. Dezember 12
HTML
profileleft column
address = current_user.address
right column
email = current_user.emailbio = current_user.bio
h4 Willkommenp
ul
lili
Freitag, 7. Dezember 12
HAML
profileleft column
address= current_user.addressright column
email= current_user.emailbio= current_user.bio
h4p
ullili
Freitag, 7. Dezember 12
#profile .left.column %h4 Willkommen %p#address= current_user.address .right.column %ul %li#email= current_user.email %li#bio= current_user
HAML
profileleft column
address= current_user.addressright column
email= current_user.emailbio= current_user.bio
h4p
ullili
Freitag, 7. Dezember 12
http://haml-lang.com/
Python, Lua, ASP.NET, .NET, PHP, PHP5, JavaScript, Perl, Scala, Java
Freitag, 7. Dezember 12
HAML
#profile .left.column %h4 Willkommen %p#address= current_user.address .right.column %ul %li#email= current_user.email %li#bio= current_user
profileleft column
address= current_user.addressright column
email= current_user.emailbio= current_user.bio
h4p
ullili
Willkommen
Freitag, 7. Dezember 12
Jade
profileleft column
address= current_user.addressright column
email= current_user.emailbio= current_user.bio
h4p
ullili
http://jade-lang.com/
Willkommen
Freitag, 7. Dezember 12
Jade
#profile .left.column h4 Willkommen p#address= current_user.address .right.column ul li#email= current_user.email li#bio= current_user
profileleft column
address= current_user.addressright column
email= current_user.emailbio= current_user.bio
h4p
ullili
http://jade-lang.com/
Willkommen
Freitag, 7. Dezember 12
Templates
http://www.flickr.com/photos/jima/460348206/
Freitag, 7. Dezember 12
Freitag, 7. Dezember 12
Freitag, 7. Dezember 12
Freitag, 7. Dezember 12
{{ }}Mustache
http://mustache.github.com/
Freitag, 7. Dezember 12
<h1>{{header}}</h1>
{{#items}} {{#first}} <li><strong>{{name}}</strong></li> {{/first}} {{#link}} <li><a href="{{url}}">{{name}}</a></li> {{/link}}{{/items
Mustache Template
Freitag, 7. Dezember 12
JSON Daten
{ "header": "Colors", "items": [ {"name": "red", "first": true, "url": "#Red"}, {"name": "green", "link": true, "url": "#Green"}, {"name": "blue", "link": true, "url": "#Blue"} ],}
Freitag, 7. Dezember 12
Resultat
<h1>Colors</h1><li><strong>red</strong></li><li><a href="#Green">green</a></li><li><a href="#Blue">blue</a></li
Freitag, 7. Dezember 12
CSS Tools
http://www.flickr.com/photos/the-meir/2201434695/
Freitag, 7. Dezember 12
<font face="Arial Black"> Google search, a <font color="#0000ff">new</font> service from</font><big><font face="Arial Black"><big><strong><font size="4"><a href="http://www.leicatime.com"><img src="favicon.gif" border="0" width="16" height="16"></a></font></strong></big></font></big><strong><br></strong><b><font face="Arial Black">ATTENTION: for my "how to purchase" INFO page, please <a target="_blank" href="a000-PURCHASE-info.htm">click HERE !</a> Partita IVA: IT 06822200587<br>--------------------------------------</font></b><br><font size="4"><strong><font color="#ff0000"><img alt="globeTurns.gif (7996 byte)" src="http://www.leicatime.com/globeTurns.gif" width="30" height="30"></font></strong></font><font size="5"><img border="0" src="http://www.leicatime.com/EuropeanUnionWte2.gif" width="75" height="50"></font><font size="5"><b><font size="1"><a href="http://www.leicatime.com/a000-CASES-line.htm" target="_blank"><img border="0" src="http://www.leicatime.com/LeicatimeBannerOK.jpg" width="141" height="75"></a></font></b><img src="http://www.leicatime.com/GianniFototesseraSmart.jpg" width="75" height="89"><font size="3"></font><font color="#800080" size="5" face="Arial Black">
http://leicatime.com/
Freitag, 7. Dezember 12
InhaltFormVerhalten
Freitag, 7. Dezember 12
Inhalt Form
Verhalten
Freitag, 7. Dezember 12
html css
javascript
Freitag, 7. Dezember 12
Freitag, 7. Dezember 12
Freitag, 7. Dezember 12
2744 Zeilen
Freitag, 7. Dezember 12
„Besseres“ CSS
Freitag, 7. Dezember 12
„Besseres“ CSS
SCSShttp://sass-lang.com/
Freitag, 7. Dezember 12
„Besseres“ CSS
SCSShttp://sass-lang.com/ http://lesscss.org/
Freitag, 7. Dezember 12
Vorteile
• Modular - includes
• Variablen
• Berechnungen
• Mixins
Freitag, 7. Dezember 12
SCSS#navbar { $navbar-width: 800px; $items: 5; $navbar-color: #ce4dd6;
width: $navbar-width; border-bottom: 2px solid $navbar-color;
li { float: left; width: $navbar-width/$items - 10px;
background-color: lighten($navbar-color, 20%); &:hover { background-color: lighten($navbar-color, 10%); } }}
Freitag, 7. Dezember 12
SCSS#navbar { $navbar-width: 800px; $items: 5; $navbar-color: #ce4dd6;
width: $navbar-width; border-bottom: 2px solid $navbar-color;
li { float: left; width: $navbar-width/$items - 10px;
background-color: lighten($navbar-color, 20%); &:hover { background-color: lighten($navbar-color, 10%); } }}
Variablen
Freitag, 7. Dezember 12
SCSS#navbar { $navbar-width: 800px; $items: 5; $navbar-color: #ce4dd6;
width: $navbar-width; border-bottom: 2px solid $navbar-color;
li { float: left; width: $navbar-width/$items - 10px;
background-color: lighten($navbar-color, 20%); &:hover { background-color: lighten($navbar-color, 10%); } }}
Variablen
Berechnungen
Freitag, 7. Dezember 12
SCSS#navbar { $navbar-width: 800px; $items: 5; $navbar-color: #ce4dd6;
width: $navbar-width; border-bottom: 2px solid $navbar-color;
li { float: left; width: $navbar-width/$items - 10px;
background-color: lighten($navbar-color, 20%); &:hover { background-color: lighten($navbar-color, 10%); } }}
Variablen
Berechnungen
Funktionsaufruf
Freitag, 7. Dezember 12
CSS
#navbar { width: 800px; border-bottom: 2px solid #ce4dd6; } #navbar li { float: left; width: 150px; background-color: #e5a0e9; } #navbar li:hover { background-color: #d976e0; }
Freitag, 7. Dezember 12
Browser Prefixe
Präfix Browser
-moz- Firefox
-webkit- Safari, Chrome
-o- Opera
-ms-, -mso- Internet Explorer
Freitag, 7. Dezember 12
.my-class, #my-id { border-radius: 1em; transition: all 1s ease; box-shadow: #123456 0 0 10px;}
Freitag, 7. Dezember 12
.my-class, #my-id { -moz-border-radius: 1em; -webkit-border-radius: 1em; -ms-border-radius: 1em; border-radius: 1em; -moz-transition: all 1s ease; -o-transition: all 1s ease; -webkit-transition: all 1s ease; -ms-transition: all 1s ease; transition: all 1s ease; -moz-box-shadow: #123456 0 0 10px; -webkit-box-shadow: #123456 0 0 10px; -ms-box-shadow: #123456 0 0 10px; box-shadow: #123456 0 0 10px; }
Freitag, 7. Dezember 12
@mixin rounded($side, $radius: 10px) { border-#{$side}-radius: $radius; -moz-border-radius-#{$side}: $radius; -webkit-border-#{$side}-radius: $radius;}
#navbar li { @include rounded(top); }#footer { @include rounded(top, 5px); }#sidebar { @include rounded(left, 8px); }
SCSS
Freitag, 7. Dezember 12
@mixin rounded($side, $radius: 10px) { border-#{$side}-radius: $radius; -moz-border-radius-#{$side}: $radius; -webkit-border-#{$side}-radius: $radius;}
#navbar li { @include rounded(top); }#footer { @include rounded(top, 5px); }#sidebar { @include rounded(left, 8px); }
Mixin
SCSS
Freitag, 7. Dezember 12
@mixin rounded($side, $radius: 10px) { border-#{$side}-radius: $radius; -moz-border-radius-#{$side}: $radius; -webkit-border-#{$side}-radius: $radius;}
#navbar li { @include rounded(top); }#footer { @include rounded(top, 5px); }#sidebar { @include rounded(left, 8px); }
Mixin Variable
SCSS
Freitag, 7. Dezember 12
#navbar li { border-top-radius: 10px; -moz-border-radius-top: 10px; -webkit-border-top-radius: 10px; }
#footer { border-top-radius: 5px; -moz-border-radius-top: 5px; -webkit-border-top-radius: 5px; }
#sidebar { border-left-radius: 8px; -moz-border-radius-left: 8px; -webkit-border-left-radius: 8px; }
CSS
Freitag, 7. Dezember 12
Modular
Freitag, 7. Dezember 12
WebKit
Freitag, 7. Dezember 12
WebKit
ist der neue IE 6
Freitag, 7. Dezember 12
JavaScript Tools
Freitag, 7. Dezember 12
JS DOM Frameworks
Freitag, 7. Dezember 12
Application Frameworks
Freitag, 7. Dezember 12
Freitag, 7. Dezember 12
Tools
Socketstream
Freitag, 7. Dezember 12
Testing
Freitag, 7. Dezember 12
Jasmine
http://pivotal.github.com/jasmine/
describe("CreditCard", function() { it("cleans number by removing spaces and dashes", function() { expect(CreditCard.cleanNumber("123 4-5")).toEqual("12345"); }); it("validates based on mod 10", function() { expect(CreditCard.validNumber("4111 1111-11111111")).toBeTruthy(); expect(CreditCard.validNumber("4111111111111121")).toBeFalsy(); }); it("validates when text field loses focus", function() { loadFixtures("order_form.html"); $("#card_number").validateCreditCardNumber(); $("#card_number").val("123"); $("#card_number").blur(); expect($("#card_number_error")).toHaveText("Invalid credit card number."); $("#card_number").val("4111 1111-11111111"); $("#card_number").blur(); expect($("#card_number_error")).toHaveText(""); });});
Freitag, 7. Dezember 12
http://visionmedia.github.com/mocha/Freitag, 7. Dezember 12
Freitag, 7. Dezember 12
Server
Freitag, 7. Dezember 12
node.js
var http = require('http');http.createServer(function (req, res) { res.writeHead(200, {'Content-Type': 'text/plain'}); res.end('Hello World\n');}).listen(1337, '127.0.0.1');console.log('Server running at http://127.0.0.1:1337/');
Freitag, 7. Dezember 12
CoffeeScriptnumber = 42opposite = true
number = -42 if opposite
square = (x) -> x * x
list = [1, 2, 3, 4, 5]
math = root: Math.sqrt square: square cube: (x) -> x * square x
race = (winner, runners...) -> print winner, runners
alert "I knew it!" if elvis?
cubes = (math.cube num for num in list)
Freitag, 7. Dezember 12
var cubes, list, math, num, number, opposite, race, square, __slice = [].slice;
number = 42;
opposite = true;
if (opposite) { number = -42;}
square = function(x) { return x * x;};
list = [1, 2, 3, 4, 5];
math = { root: Math.sqrt, square: square, cube: function(x) { return x * square(x); }};
race = function() { var runners, winner; winner = arguments[0], runners = 2 <= arguments.length ? __slice.call(arguments, 1) : []; return print(winner, runners);};
if (typeof elvis !== "undefined" && elvis !== null) { alert("I knew it!");}
cubes = (function() { var _i, _len, _results; _results = []; for (_i = 0, _len = list.length; _i < _len; _i++) { num = list[_i]; _results.push(math.cube(num)); } return _results;})();
http://coffeescript.org/
Freitag, 7. Dezember 12
Freitag, 7. Dezember 12
http://www.flickr.com/photos/gruts/4612133889/
Freitag, 7. Dezember 12
Jens-Christian Fischer
@jcfischer
Freitag, 7. Dezember 12
Beyond HTML Präsentation am Internet Briefing von Jens-Christian Fischer steht unter einer Creative Commons Namensnennung - Weitergabe unter gleichen Bedingungen 3.0 Schweiz Lizenz.
Freitag, 7. Dezember 12