formularze html5 z polyfills - czy warto?
Pomimo całego szumu wokół formularzy html5, wydaje mi się, że tworzysz dodatkową pracę, w większości scenariuszy, idąc tą drogą.
Weźmy na przykład pole datepicker. Natywna implementacja html5 tego renderuje inaczej w każdej przeglądarce. Ponadto Twoje rozwiązanie polyfilled (na przykład jQuery UI), dla przeglądarki nie obsługującej tej funkcji, również będzie renderowane inaczej.
Teraz wprowadziliśmy wiele punktów dostosowywania i konserwacji dla ta sama forma, kiedy mieliśmy doskonale działające i ujednolicone rozwiązanie z jquery!
Chciałbym usłyszeć o prawdziwych doświadczeniach w tej dziedzinie, ponieważ denerwuje mnie ten cały szum!
3 answers
Po pierwsze jestem twórcą webshims lib (jednego z tych polifili, który nie jest już utrzymywany). Aby odpowiedzieć na twoje pytanie:
Czy warto tworzyć formularze dla projektu?
Nie, naprawdę ciężko jest to zrobić tylko dla jednego projektu. Cóż, zrobiłem to, po prostu dlatego, że chcę korzystać z nowoczesnych technologii.Czy warto używać forms polyfill jak webshims lib do projektu?
Tak, oczywiście! A oto dlaczego:1. Nice standaryzowane deklaratywne API znaczników
Po włączeniu webshimów i skryptów:
//polyfill forms (constraint validation) and forms-ext (date, range etc.)
$.webshims.polyfill('forms forms-ext');
Możesz po prostu wpisać swoje widżety i ograniczenia do formularza:
<input type="date" />
<input type="date" min="2012-10-11" max="2111-01-01" />
<input type="range" disabled />
<input type="email" required placeholder="Yo you can use a placeholder" />
Spowoduje to utworzenie 3 różnych widżetów i każdy z nich jest skonfigurowany inaczej. Żaden dodatkowy JS nie wymaga tylko standaryzowanego, czystego i szczupłego kodu.
2. Standaryzowane DOM-API
To samo dotyczy API DOM. Oto tylko dwa przykłady: łączenie dwóch pól daty i łączenie pola zakresu z polem daty.
3. działa bez JS w nowoczesnych przeglądarkach
Rozkłada się wdzięcznie w starych przeglądarkach i działa dobrze w nowoczesnych.
4. Mniejszy rozmiar pliku w nowoczesnych przeglądarkach
[9]} szczególnie dobre dla urządzeń mobilnych (iOS 5, Blackberry mają wsparcie dla daty na przykład)5. Lepszy UX [głównie mobilny]
Better mobile UX (lepszy interfejs wejściowy dla dotyku, lepsza wydajność, pasuje do systemu), jeśli go używasz: type= "email", type= "number" and type= "date" / type= "range"
Ale co z możliwością dostosowania?
Jestem programistą w większej agencji i masz absolutną rację większość klientów i większość projektantów nie toleruje zbyt dużych różnic, ale nadal chcę korzystać z nowoczesnych technologii, co oznacza, że webshims lib może dać ci to, co najlepsze z obu światów.
Dostosowywanie walidacji ograniczeń
Polyfilling część
//polyfill constraint validation
$.webshims.polyfill('forms');
Dostosowywanie interfejsu użytkownika dla bąbelka błędu:
//on DOM-ready
$(function(){
$('form').bind('firstinvalid', function(e){
//show the invalid alert for first invalid element
$.webshims.validityAlert.showFor( e.target );
//prevent browser from showing native validation message
return false;
});
});
Generuje następujące znaczniki:
<!-- the JS code above will generate the following custom styleable HTML markup for the validation alert -->
<span class="validity-alert-wrapper" role="alert">
<span class="validity-alert">
<span class="va-arrow"><span class="va-arrow-box"></span></span>
<span class="va-box">Error message of the current field</span>
</span>
</span>
Dostosowywanie stylu nieprawidłowego / poprawnego pola formularza:
.form-ui-invalid {
border-color: red;
}
.form-ui-valid {
border-color: green;
}
Dostosowywanie tekstu alertu ważności:
<input required data-errormessage="Hey this is required!!!" />
A teraz o co chodzi:
- nadal działa bez JS
- nowoczesne przeglądarki ładują tylko kod dostosowywania (3KB min / gziped), a stare przeglądarki ładują dodatkowe API (około 13kb min / gzip) (formularze zawierają o wiele więcej niż tylko API walidacji ograniczeń, na przykład istnieje również autofocus, placeholder, output i tak dalej) {]}
A jaki jest Twój specjalny przykład, dostosowywanie pola danych?
No problem:
//configure webshims to use customizable widget UI in all browsers
$.webshims.setOptions('forms-ext', {
replaceUI: true
});
$.webshims.polyfill('forms forms-ext');
A także tutaj:
- nadal działa bez JS w nowoczesnych przeglądarkach
- nowoczesne przeglądarki ładują tylko interfejs użytkownika i klej UI-API, ale nie DOM-API (valueAsNumber, valueAsDate...)
A teraz nadchodzi najlepsze:
//configure webshims to use customizable widget UI in all non mobile browsers, but a customizable one in all desktop and all non-capable mobile browsers
$.webshims.setOptions('forms-ext', {
//oh, I know this is bad browser sniffing :-(
replaceUI: !(/mobile|ipad|iphone|fennec|android/i.test(navigator.userAgent))
});
$.webshims.polyfill('forms forms-ext');
- mniejszy rozmiar pliku i lepszy UX dla przeglądarek mobilnych (większość klientów i większość projektantów pokocha cię za posiadanie innego interfejsu w telefonie komórkowym!!!)
- nadal działa bez JS w nowoczesnych przeglądarkach
- nowoczesne przeglądarki ładują tylko interfejs użytkownika i klej interfejsu UI-API, ale nie DOM-API (valueAsNumber, valueAsDate...)
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-09-29 10:01:00
Na poparcie odpowiedzi Alexandra webshims zrobiłem znaczne badania w zachowaniu cross przeglądarek wejść HTML5 z perspektywy UX, UI i front-end. Mój wniosek jest taki, że jedynym sposobem na preferowane zachowanie na urządzeniach i przeglądarkach jest użycie polyfill takiego jak webshims. Wiele z tego ma związek z tym, że nie jest w stanie korzystać z funkcji natywnych na urządzeniach takich jak rolki bębna do dat i klawiatur numerycznych dla numerów bez konieczności również obsługi pulpitu przeglądarki, które nie implementują tych funkcji.
Oto analiza zachowania wprowadzania daty w różnych implementacjach natywnych vs popularnych wtyczek:
Analiza danych wejściowych-arkusz kalkulacyjny Google
(Możesz zobaczyć, jak webshims dostaje najlepsze ze wszystkich implementacji)
Oto analiza tego, jak rzeczywiste typy danych wejściowych zachowują się w popularnych przeglądarkach natywnie i z zapasowym webshim:
analiza UX wejść HTML5 z webshim fallback-Google arkusz kalkulacyjny
Oto strona demonstracyjna użyta do analizy tych danych wejściowych:
HTML5 inputs page demo-CodePen
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-06-02 03:00:47
Byłem też sceptyczny, jeśli naprawdę warto przejść przez warstwę polyfill zamiast używać prostego interfejsu jquery. Po użyciu webshims lib i HTML5, mogłem od razu zobaczyć, że jest znacznie mniejszy kod javascript. Nie jest już wymagana wtyczka walidacji. Dzięki Alexander za stworzenie i wspieranie tego wspaniałego polyfill, webshims lib. Oto przykład wykonania połączenia ajax w przesłanym kliknięciu formularza.
<!DOCTYPE html>
<html>
<head>
<script src="http://code.jquery.com/jquery-1.9.1.js" type="text/javascript"></script>
<script src="http://code.jquery.com/ui/1.10.1/jquery-ui.js" type="text/javascript"></script>
<script>
// set options for html5shiv
if(!window.html5){
window.html5 = {};
}
window.html5.shivMethods = false;
</script>
<script src="webshims/js-webshim/minified/extras/modernizr-custom.js"></script>
<script src="webshims/js-webshim/minified/polyfiller.js"></script>
<script class="example">
$.webshims.setOptions({
//we do not use any DOM-/JS-APIs on DOM-ready, so we do not need to delay the ready event <- good against fouc
waitReady: false
});
//load all polyfill features
$.webshims.polyfill('forms forms-ext');
</script>
<script type="text/javascript">
$(function(){
var frm = $('#tstForm');
frm.submit(function () {
var someDate=$('#someDate').val();
alert('someDate:'+someDate);
// you can make your ajax call here.
return false;
});
});
</script>
</head>
<body>
<form id="tstForm">
Some Date:<input id="someDate" name="someDate" type="date" min="2013-01-01" max="2013-06-01" ></input>
Full Name:<input id="fullName" name="fullName" type="text" required></input>
Age:<input id="age" name="age" type="number" required min="18" max="120"></input>
<input type="submit" value="Submit"/>
</form>
</body>
</html>
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-03-07 05:21:36