czwartek, 3 maja 2012

HTML5 okiem .NET-owca - odc. 3

W tym odcinku trochę notatek o CSS3, o wykrywaniu wsparcia dla funkcjonalności HTML5 w przeglądarkach , o manifeście aplikacji HTML5 i jej cachowaniem oraz o funkcjonalności geolokalizacji.

Visual Studio 2010 SP1 –> Extension Manager –> Web Standards Update for Microsoft Visual Studio = obsługa intellisense dla HTML5 & CSS3 oraz zaktualizowana walidacja JS z uwzględnieniem nowego API  (o możliwościach Visual Studio 11 w kontekście HTML5 napiszę innym razem)

File –> Export Template (z bieżącej strony HTML5 można utworzyć sobie szablon)

W każdym bloku semantycznym <h1>

Na stronie może być odtwarzanych wiele plików multimedialnych jednocześnie.

<canvas>Twoja przeglądarka … </canvas> - prosty fallback

<figure> - obrazek, video, canvas

Na znacznikach <input> można też ustawiać istniejący już wcześniej atrybut title.

Można łączyć grafikę i animacje z canvas z obrazem video, co może dawać ciekawe efekty.

<meter min=”1” max=”31” value=”5”>Piąty dzień</meter>

<input type=”tel” pattern=””/>

CSS3

Nowości

  • czcionki
  • cienie
  • zaokrąglone rogi
  • gradienty
  • łatwiejszy layout
  • transformaty

@charset ‘utf-8’;  - pierwsza linijka w pliku .css w CSS3

Czcionki

@font-face  {

font-family: Michroma;

src: url(../fonts/michroma-webfont.woff);

}

body  {

font-family: Michroma;

}

Kolory

::selection, ::-moz-selection  {

background-color: rgba(122, 134, 45, 0.3);

}

Cienie

h1  {

text-shadow:  2px 2px 2px #000; 

}

.linkbutton  {

-moz-box-shadow: 5px 5px 8px #000;

-webkit-box-shadow: 5px 5px 8px #000;

-o-box-shadow: 5px 5px 8px #000;

box-shadow: 5px 5px 8px #000;

}

Uaktualnienia webowe Visual Studio 2010 dla CSS3:

  • intellisense
  • podgląd kolorów
  • Add vendor specific properties (uzupełnianie stylu o properties poszczególnych dostawców przeglądarek)

Zaokrąglone rogi

.linkbutton  {

border-radius:  10px;

}

Gradienty

.linkbutton  {

background: -ms-linear-gradient(bottom, #c34000 23%, #ff5400 62%);

background: -moz-linear-gradient(bottom center, #c34000 23%, #ff5400 62%);

background: -webkit-gradient(linear, left bottom, left top, color-stop(0.23, #c34000), color-stop(0.62, #ff5400));

}

Transformaty

mark  {

-ms-transform: scaleX(-1.5) rotate(-4deg);

-moz-transform: scaleX(-1.5) rotate(-4deg);

-webkit-transform: scaleX(-1.5) rotate(-4deg);

-o-transform: scaleX(-1.5) rotate(-4deg);

transform: scaleX(-1.5) rotate(-4deg);

}

Form inputs

  • input.data:required 
  • input.data:focus

 

Obsługa wielu przeglądarek

Informowanie użytkownika, że dana funkcjonalność nie jest wspierana w jego przeglądarce:

fallbacks - w tagach tj. <audio>, <video>, <canvas>

w funkcjach np.

function supports_canvas()  {

return !!document.createElement(‘canvas’).getContext;

}

modernizr.custom.js - np. Modernizr.canvas;

 

Aplikacje off-line

Browser events + Application Cache

Anatomia

  • Cache Manifest
    • CACHE MANIFEST
    • #version 1
    • CACHE: lista plików na lokalnej maszynie
    • NETWORK: lista adresów/plików wykluczonych z cachowania
    • FALLBACK: alternatywna strony dla podanych stron przy off-line
    • //Mime Type: text/cache-manifest
    • //Encoding: utf-8

    <html manifest=”manifest.aspx”></html>

Nie łączymy cache przeglądarki z cache’m aplikacji!

Zdarzenia

  • First load: Checking, Downloading, Progress, Cached
  • Not Updated: Checking, No Update
  • Updated: Checking, Downloading, Progress, Cached

Odświeżanie plików tylko przy zmianie manifestu! Nie ma wykrywania zmian w plikach.

Stany cache

0 - UNCACHED (niezainicjowany)

1 - IDLE (w danym momencie nieaktualizowany)

2 - CHECKING (szukanie manifestu dla ustalenia zmian)

3 - DOWNLOADING (pobieranie plików z manifestu do przeglądarki)

4 - UPDATEREADY (wszystkie pliki z manifestu zostały pobrane)

5 - OBSOLETE (zawartość cache zestarzała się i wymaga ponownego pobrania)

window.applicationCache

  • onchecking
  • oncached
  • onnoupdate
  • onobsolete
  • ondownloading
  • onupdateready
  • onerror
  • swapCache()

Odświeżanie strony ręczne lub automatyczne po odświeżeniu cache:  location.reload()

Wykrywanie on-line/off-line:

  • navigator.onLine
  • window.addEventListener(“online”, …, true)
  • window.addEventListener(“offline”,…, true)

Pliki z manifestu cache jako pakiet, błąd w jednym powoduje błąd strony

Geolokalizacja

Opcje:

  • High Accuracy
  • Timeout
  • Maximum Age

Dialog o pozwolenie w przeglądarce

navigator.geolocation.getCurrentPosition(showPosition, positionError);

function showPosition(position)  {

     var coords = position.coords;   ….

}

position.coords

  • latitude
  • longitude
  • accuracy - 95%,
  • altitude - wysokość urządzenia w m
  • altitudeAccuracy - m
  • heading - kierunek w stopniach względem północy
  • speed - m/s
  • timestamp - czas i data pomiaru

watchID = navigator.geolocation.watchPosition(showPosition, positionError);

nawigator.geolocation.clearWatch(watchID);

var options = { enableHighAccuracy: true, timeout: 10000, maximumAge: 1000 };

navigator.geolocation.getCurrentPosition(showPosition, positionError, options);

Brak komentarzy: