Z tego ćwiczenia w Codelabs dowiesz się, jak utworzyć bezpieczny, dostępny i łatwy w użyciu formularz logowania.
1. Używanie znaczących znaczników HTML
Użyj tych elementów utworzonych na potrzeby zadania:
<form>
<section>
<label>
<button>
Jak widać, te elementy umożliwiają korzystanie z wbudowanych funkcji przeglądarki, poprawiają dostępność i dodają znaczeń do znacznika.
Kliknij Remix, aby edytować, aby umożliwić edycję projektu.
Dodaj do elementu
<body>
ten kod:<form action="#" method="post">
<h1>Sign in</h1>
<section>
<label>Email</label>
<input>
</section>
<section>
<label>Password</label>
<input>
</section>
<button>Sign in</button>
</form>Oto jak powinien wyglądać plik
index.html
:Kliknij Wyświetl aplikację, aby wyświetlić podgląd formularza logowania. Dodany przez Ciebie kod HTML jest prawidłowy, ale domyślny styl przeglądarki sprawia, że wygląda on źle i jest trudny w użyciu, zwłaszcza na urządzeniach mobilnych.
Aby wrócić do kodu źródłowego, kliknij Wyświetl źródło.
2. Projektowanie z myślą o palcach i kciuki
Dostosuj wypełnienie, marginesy i rozmiary czcionek, aby dane wejściowe działały prawidłowo na urządzeniach mobilnych.
Skopiuj ten kod CSS i wklej go do pliku
style.css
:Kliknij Wyświetl aplikację, aby zobaczyć formularz logowania w nowym stylu.
Kliknij Wyświetl źródło, aby wrócić do pliku
style.css
.
To całkiem sporo kodu. Najważniejsze zmiany dotyczą rozmiarów:
- Użytkownicy
padding
imargin
zostali dodani do listy danych wejściowych. font-size
jest inny na komórkach i na komputerach.
Selektor :invalid
wskazuje, że wartość wejściowa jest nieprawidłowa.
To jeszcze nie działa.
Układ CSS jest dostosowany do urządzeń mobilnych:
- Domyślny kod CSS jest przeznaczony do widocznych obszarów o szerokości mniejszej niż 450 pikseli.
- Sekcja zapytań o multimedia ustawia zastąpienia dla widocznych obszarów o szerokości co najmniej 450 pikseli.
Gdy tworzysz własny formularz, na tym etapie bardzo ważne jest przetestowanie kodu na prawdziwych komputerach i urządzeniach mobilnych:
- Czy etykiety i teksty są czytelne, zwłaszcza dla osób niedowidzących?
- Czy pola tekstowe i przycisk Zaloguj się są wystarczająco duże, aby można było je dotykać kciukami?
3. Dodawanie atrybutów wejściowych w celu włączenia wbudowanych funkcji przeglądarki
Umożliwianie przeglądarce przechowywania i autouzupełniania wartości danych wejściowych oraz zapewnianie dostępu do wbudowanych funkcji zarządzania hasłami.
Dodaj atrybuty do kodu HTML formularza, aby wyglądał tak:
<form action="#" method="post">
<h1>Sign in</h1>
<section>
<label for="email">Email</label>
<input id="email" name="email" type="email" autocomplete="username" required autofocus>
</section>
<section>
<label for="password">Password</label>
<input id="password" name="password" type="password" autocomplete="current-password" required>
</section>
<button id="sign-in">Sign in</button>
</form>Ponownie otwórz aplikację i kliknij Wyślij e-maila.
Zauważ, że fokus przenosi się na pole e-maila. Dzieje się tak, ponieważ etykieta jest powiązana z danymi wejściowymi za pomocą atrybutu
for="email"
. Czytniki ekranu odczytują też tekst etykiety, gdy etykieta lub powiązane z nią pole tekstowe zostanie wybrane.Wyśrodkuj pole e-maila na urządzeniu mobilnym.
Zwróć uwagę, że klawiatura jest zoptymalizowana pod kątem wpisywania adresu e-mail. Na przykład na klawiaturze głównej mogą być widoczne znaki
@
i.
, a system operacyjny może wyświetlać zapisane e-maile nad klawiaturą. Dzieje się tak, ponieważ atrybuttype="email"
jest stosowany do elementu<input>
.Wpisz tekst w polu hasła.
Tekst jest domyślnie ukryty, ponieważ do elementu zastosowano atrybut
type="password"
.
- Atrybuty
autocomplete
,name
,id
itype
pomagają przeglądarkom zrozumieć rolę danych wejściowych, aby przechowywać dane, które można później wykorzystać do autouzupełniania.
- Wpisz adres e-mail na komputerze.
Po kliknięciu Pełny ekran możesz zobaczyć adres URL aplikacji. Jeśli w przeglądarce masz zapisane adresy e-mail, zobaczysz prawdopodobnie okno, w którym możesz wybrać jeden z nich. Dzieje się tak, ponieważ atrybut
autocomplete="username"
został zastosowany do pola adresu e-mail.
- Parametry
autocomplete="username"
iautocomplete="current-password"
pomagają przeglądarkom używać zapisanych wartości do automatycznego wypełniania pól.
Różne przeglądarki używają różnych metod do określania roli pól formularza i automatycznego wypełniania pól w różnych witrynach.
Aby to sprawdzić, dodaj i usuń atrybuty.
Bardzo ważne jest testowanie zachowań na różnych platformach. Wartości należy wpisać i przesłać formularz w różnych przeglądarkach na różnych urządzeniach. Testowanie na różnych platformach jest łatwe dzięki BrowserStack, które jest bezpłatne dla projektów open source. Wypróbuj
Oto jak powinien wyglądać plik index.html
:
4. Dodanie interfejsu do przełączania widoczności hasła
Eksperci od użyteczności zdecydowanie zalecają dodanie ikony lub przycisku, który pozwoli użytkownikom zobaczyć tekst wpisany w polu Hasło. Nie ma wbudowanego sposobu na to, więc musisz to zrobić samodzielnie za pomocą kodu JavaScript.
Kod potrzebny do dodania tej funkcji jest prosty. W tym przykładzie użyto tekstu, a nie ikony.
Zaktualizuj pliki index.html
, style.css
i script.js
w następujący sposób.
Dodaj przełącznik do sekcji hasła w pliku
index.html
:<section>
<label for="password">Password</label>
<button id="toggle-password" type="button" aria-label="Show password as plain text. Warning: this will display your password on the screen.">Show password</button>
<input id="password" name="password" type="password" autocomplete="current-password" required>
</section>Dodaj do pliku
style.css
ten kod CSS:button#toggle-password {
background: none;
border: none;
cursor: pointer;
font-weight: 300;
padding: 0;
position: absolute;
top: -4px;
right: -2px;
}W ten sposób przycisk Pokaż hasło wygląda jak zwykły tekst i wyświetla się w prawym górnym rogu sekcji z hasłem.
Dodaj do pliku
script.js
ten kod JavaScriptu, aby przełączać wyświetlanie hasła i ustawić odpowiednią wartośćaria-label
:const passwordInput = document.getElementById('password');
const togglePasswordButton = document.getElementById('toggle-password');
togglePasswordButton.addEventListener('click', togglePassword);
function togglePassword() {
if (passwordInput.type === 'password') {
passwordInput.type = 'text';
togglePasswordButton.textContent = 'Hide password';
togglePasswordButton.setAttribute('aria-label',
'Hide password.');
} else {
passwordInput.type = 'password';
togglePasswordButton.textContent = 'Show password';
togglePasswordButton.setAttribute('aria-label',
'Show password as plain text. ' +
'Warning: this will display your password on the screen.');
}
}Wypróbuj teraz logikę wyświetlania hasła.
- Wyświetl aplikację.
- Wpisz tekst w polu hasła.
- Kliknij Pokaż hasło.
Powtórz 4. krok w różnych przeglądarkach i systemach operacyjnych.
Zastanów się nad projektem UX: czy użytkownicy zauważą przycisk Pokaż hasło i czy go zrozumieją? Czy istnieje lepszy sposób na realizację tej funkcji? To dobry moment, aby przeprowadzić testy użyteczności na ograniczonej grupie w małej grupie znajomych lub współpracowników.
Aby dowiedzieć się, jak ta funkcja działa w przypadku czytników ekranu, zainstaluj rozszerzenie klasycznego ChromeVox i przejrzyj formularz. Czy wartości aria-label
działają zgodnie z oczekiwaniami?
Niektóre witryny, np. Gmail, używają ikon, a nie tekstu, do przełączania wyświetlania hasła. Po zakończeniu tego ćwiczenia zaimplementuj to za pomocą obrazów SVG. Material Design oferuje wysokiej jakości ikony, które możesz pobrać bezpłatnie.
Twój kod powinien wyglądać tak:
5. Dodawanie walidacji formularza
Możesz pomóc użytkownikom w prawidłowym wprowadzaniu danych, umożliwiając im ich weryfikację przed przesłaniem formularza i pokazywaniem, co należy zmienić.
Elementy i atrybuty formularza HTML mają wbudowane funkcje podstawowej walidacji, ale warto też używać JavaScriptu, aby przeprowadzać bardziej zaawansowaną walidację podczas wprowadzania przez użytkowników danych i próby przesłania formularza.
W tym kroku używasz interfejsu Constraint Validation API (który jest powszechnie obsługiwany), aby dodać weryfikację niestandardową za pomocą wbudowanego interfejsu przeglądarki, który ustawia fokus i wyświetla prompty.
Poinformuj użytkowników o ograniczeniach dotyczących haseł i innych danych wejściowych. Nie zmuszaj ich do zgadywania!
Zaktualizuj sekcję dotyczącą hasła w pliku
index.html
:<section>
<label for="password">Password</label>
<button id="toggle-password" type="button" aria-label="Show password as plain text. Warning: this will display your password on the screen.">Show password</button>
<input id="password" name="password" type="password" autocomplete="current-password" aria-describedby="password-constraints" required>
<div id="password-constraints">At least eight characters, with at least one lowercase and one uppercase letter.</div>
</section>
Dodaliśmy 2 nowe funkcje:
- Informacje o ograniczeniach dotyczących haseł
- Atrybut
aria-describedby
dla pola tekstowego z hasłem (czytniki ekranu odczytują tekst etykiety, typ danych (hasło), a następnie opis).
Dodaj do pliku
style.css
ten kod CSS:div#password-constraints {
margin: 5px 0 0 0;
font-size: 16px;
}Dodaj do pliku
script.js
ten kod JavaScript:passwordInput.addEventListener('input', resetCustomValidity);
function resetCustomValidity() {
passwordInput.setCustomValidity('');
}
// A production site would use more stringent password testing.
function validatePassword() {
let message= '';
if (!/.{8,}/.test(passwordInput.value)) {
message = 'At least eight characters. ';
}
if (!/.*[A-Z].*/.test(passwordInput.value)) {
message += 'At least one uppercase letter. ';
}
if (!/.*[a-z].*/.test(passwordInput.value)) {
message += 'At least one lowercase letter.';
}
passwordInput.setCustomValidity(message);
}
const form = document.querySelector('form');
const signinButton = document.querySelector('button#sign-in');
form.addEventListener('submit', handleFormSubmission);
function handleFormSubmission(event) {
event.preventDefault();
validatePassword();
form.reportValidity();
if (form.checkValidity() === false) {
} else {
// On a production site do form submission.
alert('Logging in!')
signinButton.disabled = 'true';
}
}Wypróbuj
Wszystkie nowsze przeglądarki mają wbudowane funkcje sprawdzania poprawności formularzy i obsługują sprawdzanie poprawności za pomocą JavaScript.
- Wpisz nieprawidłowy adres e-mail i kliknij Zaloguj się. Przeglądarka wyświetla ostrzeżenie – nie jest wymagany JavaScript.
- Wpisz prawidłowy adres e-mail, ale nie wpisuj hasła, a następnie kliknij Zaloguj się. Przeglądarka ostrzeże, że brakuje wymaganej wartości, i ustawi fokus na polu hasła.
- Wpisz nieprawidłowe hasło i kliknij Zaloguj się. Teraz zobaczysz różne komunikaty w zależności od tego, co jest nie tak.
Wypróbuj różne sposoby na ułatwienie użytkownikom wpisywania adresów e-mail i haseł. Ulepszone pola formularza hasła zawierają sprytne sugestie.
Twój kod powinien wyglądać tak:
Idź dalej
Nie są one opisane w tym ćwiczeniu, ale i tak musisz znać te 4 ważne funkcje formularza logowania:
Dodaj przycisk Nie pamiętasz hasła?, który ułatwi użytkownikom zresetowanie hasła.
Dodaj link do dokumentów z warunkami korzystania z usługi i polityką prywatności, aby użytkownicy wiedzieli, jak chronisz ich dane.
Weź pod uwagę styl i markę oraz upewnij się, że te dodatkowe funkcje pasują do reszty witryny.
Dodaj Google Analytics i RUM, aby testować i monitorować skuteczność oraz użyteczność projektu formularza.