sobota, 14 kwietnia 2012

HTML 5 okiem .NET-owca - odc. 1

Trochę notatek z wprowadzenia do HTML5 oraz na temat formularzy, kontrolek do wprowadzania danych i walidacji.

Nowe tagi w HTML5:

  • article - główna zawartość strony
  • aside - treść związana z artykułem lub stroną
  • audio - współpracuje z source
  • canvas
  • command - w podobnym znaczeniu jak w XAML
  • detalist
  • details
  • embed
  • figcaption
  • figure
  • footer
  • header
  • hgroup
  • keygen - zarządzanie danymi kryptograficznymi
  • mark - podobnie jak <run> w XAML
  • meter - pokazywanie zakresu wartości
  • nav - jawne określenie nawigacji poza stronę
  • output - efekt wykonania programowej operacji np. w JS
  • progress - kontrolka wizualizująca postęp
  • rp
  • rt
  • ruby
  • section - podobnie jak div, ale ma znaczenie semantyczne
  • source - wskazuje źródło (współpracuje z audio i video)
  • summary
  • time - wyświetlenie daty i czasu
  • video - współpracuje z source
  • wbr - word break (jak strona ma dzielić długie słowo)

Nowe API w Java Script:

  • Kontakty
  • Selection - DOM
  • Aplikacje offline
  • Indexed Database
  • Web Workers
  • Web Storage
  • Web Sockets
  • Web SQL DB
  • Zdarzenia serwera
  • XMLHttpRequest Level 2
  • Geolokalizacja
  • Canvas 2D
  • HTML Microdata
  • Media Capture
  • Messaging
  • Forms
  • File API html

www.modernizr.com – biblioteka dla HTML5 i CSS3 (pozwala też sprawdzać wsparcie dla elementów dla danej przeglądarki)

2022 - data “ukończenia” HTML5 (wszystkie przeglądarki będą implementować wszystkie funkcjonalności)

<!doctype html>

<html lang=”en”>

<head>

</head>

<body>

<div>

<header>

<a href>

<hgroup>

<h1></h1>

</hgroup>

</a>

<nav>

<ul>

<li><a href/></li>

</ul>

</nav>

</header>

<article>

<h1></h1>

<div>

<audio>

<source/>

<object/>

</audio>

</div>

<figure>

<pre></pre>

<figcaption></figcaption>

</figure>

</figure>

</article>

<aside>

<h1></h1>

<p></p>

</aside>

<footer>

<nav>

</nav>

</footer>

<details>

<summary/>

<time pubdate></time>

</details>

</div>

</body>

</html>

HTML5 Forms

Nowe typy input  (implementacje – np. Opera)

  • color

 image

  • datalist

 image

  • date

image

  • datetime

  image

  • datetime-local

   image

  • email  (pole tekstowe z walidacją)
  • month

   image

  • number

      image

  • range

    image

  • search  (implementacja Chrome)

     image

  • tel  (pole tekstowe z walidacją)
  • time

    image

  • url  (pole tekstowe z walidacją)
  • week

    image

HTML5 określa tylko, co kontrolki powinny robić. Ich wygląd i zachowanie zależy od producenta przeglądarki. Input typu search dla Chrome przypomina mi pole tekstowe w Windows 8 (chodzi mi o krzyżyk).

<label for=”name”>Name:</label>

<input type=”text” id=”name” name=”name” placeholder=”First and last” required/>

<form novalidated> - wyłączenie walidacji

Atrybuty input

  • placeholder - na polach tekstowych watermarki
  • autofocus - automatyczne ustawienie focusa
  • min, max - minimalna i maksymalna wartość dla pól numerycznych, range, daty
  • step - wartość inkrementacji/dekrementacji w polach numerycznych i range
  • list - wskazanie na datalist dla danego pola

<input type=”text” list=”colors”/>

<datalist id=”colors”>

<option value=””/>

</datalist>

  • ppp

Aktualizowanie pola tekstowego w zależności od położenia suwaka:

range.onchange = function() {

rangeValue.innerText = this.Value;

}

rangeValue.innerText = range.Value;

Walidacja

image

<input …>

<div class=”invalid”/>

Atrybuty input:

  • pattern - wyrażenie regularne dla pola tekstowego
  • maxlength - maksymalna długość napisu
  • required

Style dla pola input w stanie poprawnym i niepoprawnym:

input:valid  {

border: 2px solid #ccc;

}

input:valid +.invalid {

visibility: hidden;

}

input:invalid +.invalid {

visibility: visible;

}

input.required {

border: 2px solid #900;

}

Sposób HTML na imitowanie – jak dla mnie – kilku wybranych stanów wizualnych elementów input związanych z walidacją.

Wbudowane reguły walidacyjne

  • valueMissing
  • typeMismatch
  • patternMismatch
  • tooLong
  • rangeUnderflow
  • rangeOverflow
  • stepMismatch
  • valid

Poniżej “przepis” na bardziej zaawansowaną obsługę walidacji, jaki znalazłem:

<input id=”username” name=”username”  …>

<div id=”usernameRules” class=”rules”>

<span class=”valueMissing vmsg none”>Nazwa użytkownika jest wymagana</span>

<span class=”patternMismatch vmsg none”>Znaki specjalne nie są dopuszczalne</span>

</div>

image

image

image

image

W porównaniu do Silverlight jest to jednak znacznie prymitywniejsze, choć kontrolka też ma jakieś property związane z walidacją –:) W Silverlight w szablonie kontrolki jest binding do pierwszego błędu z kolekcji zawartej w attached property.

Tworzenie własnych reguł walidacyjnych

Poniżej przykład jaki znalazłem.

image

image

Cóż, na razie w porównaniu do wielu możliwości definiowania własnej walidacji, w tym asynchronicznej w Silverlight, nie wydaje się to szczególnie lepsze, ale jest to standard i będzie się wykonywało pod każdą przeglądarką wspierającą walidację z HTML5.

Brak komentarzy: