В этой лабораторной работе вы узнаете, как создать безопасную, доступную и простую в использовании форму входа.
1. Используйте осмысленный HTML
Используйте следующие элементы, созданные для этой работы:
-
<form>
-
<section>
-
<label>
-
<button>
Как вы увидите, эти элементы активируют встроенную функциональность браузера, улучшают доступность и добавляют смысла в вашу разметку.
Нажмите «Ремикс для редактирования», чтобы сделать проект редактируемым.
Добавьте следующий код в элемент
<body>
:<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>
Вот как должен выглядеть ваш файл
index.html
на этом этапе:Нажмите «Просмотреть приложение» , чтобы просмотреть форму входа. Добавленный вами HTML-код корректен и корректен, но из-за стиля браузера по умолчанию он выглядит ужасно и неудобен в использовании, особенно на мобильных устройствах.
Нажмите «Просмотреть исходный код» , чтобы вернуться к исходному коду.
2. Дизайн для пальцев и больших пальцев
Отрегулируйте отступы, поля и размер шрифта, чтобы обеспечить корректное отображение введенных данных на мобильных устройствах.
Скопируйте следующий CSS-код и вставьте его в файл
style.css
:Нажмите «Просмотреть приложение» , чтобы увидеть обновленную форму входа.
Нажмите «Просмотреть исходный код» , чтобы вернуться к файлу
style.css
.
Довольно много кода! Главное, на что следует обратить внимание, — это изменения размеров:
- К входным данным добавляются
padding
иmargin
. -
font-size
для мобильных устройств и компьютеров отличается.
Селектор :invalid
используется для указания недопустимого входного значения. Пока это не работает.
Макет CSS ориентирован в первую очередь на мобильные устройства:
- CSS по умолчанию предназначен для областей просмотра шириной менее 450 пикселей.
- Раздел медиа-запросов устанавливает переопределения для областей просмотра шириной не менее 450 пикселей.
При создании собственной формы таким образом крайне важно на данном этапе протестировать код на реальных устройствах — как на настольных компьютерах, так и на мобильных устройствах:
- Можно ли прочитать текст меток и ввода, особенно для людей со слабым зрением?
- Достаточно ли велики поля ввода и кнопка «Войти», чтобы их можно было использовать в качестве сенсорных зон для больших пальцев?
3. Добавьте входные атрибуты для включения встроенных функций браузера.
Разрешите браузеру сохранять и автоматически заполнять введенные значения, а также предоставьте доступ к встроенным функциям управления паролями.
Добавьте атрибуты в HTML-код вашей формы, чтобы он выглядел следующим образом:
<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>
Просмотрите приложение еще раз и нажмите « Отправить по электронной почте» .
Обратите внимание, как фокус перемещается на поле ввода электронной почты. Это происходит потому, что метка связана с полем ввода через атрибут
for="email"
. Программы чтения с экрана также озвучивают текст метки, когда фокус попадает на метку или связанное с ней поле ввода.Ограничьте ввод электронной почты на мобильном устройстве.
Обратите внимание, как клавиатура оптимизирована для ввода адреса электронной почты. Например, символы
@
и.
могут отображаться на основной клавиатуре, а операционная система может отображать сохранённые адреса электронной почты над клавиатурой. Всё это происходит потому, что к элементу<input>
применён атрибутtype="email"
.Введите текст в поле пароля.
По умолчанию текст скрыт, поскольку к элементу применен атрибут
type="password"
.
- Атрибуты
autocomplete
,name
,id
иtype
помогают браузерам понимать роль входных данных для хранения данных, которые можно использовать позже для автозаполнения.
- Переведите фокус ввода электронной почты на настольном устройстве и введите текст. URL вашего приложения можно увидеть, нажав «Полноэкранный режим».
Если вы сохранили адреса электронной почты в браузере, вы, вероятно, увидите диалоговое окно, позволяющее выбрать один из них. Это происходит из-за того, что к вводу адреса электронной почты применен атрибут
autocomplete="username"
.
-
autocomplete="username"
иautocomplete="current-password"
помогают браузерам использовать сохраненные значения для автоматического заполнения входных данных.
Разные браузеры используют разные методы для определения роли полей ввода форм и обеспечения автозаполнения для различных веб-сайтов.
Добавьте и удалите атрибуты, чтобы попробовать это самостоятельно.
Крайне важно тестировать поведение приложения на разных платформах. Вводить значения и отправлять форму следует в разных браузерах на разных устройствах. С помощью BrowserStack, бесплатного инструмента для проектов с открытым исходным кодом , легко протестировать приложение на разных платформах. Попробуйте!
Вот как должен выглядеть ваш файл index.html
на этом этапе:
4. Добавьте пользовательский интерфейс для переключения отображения пароля.
Эксперты по юзабилити настоятельно рекомендуют добавить значок или кнопку, позволяющую пользователям видеть текст, вводимый в поле «Пароль» . Встроенного решения для этого нет , поэтому вам придётся реализовать это самостоятельно с помощью JavaScript.
Код для добавления этой функции прост. В этом примере используется текст, а не значок.
Обновите файлы index.html
, style.css
и script.js
следующим образом.
Добавьте переключатель в раздел паролей в файле
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>
Добавьте следующий CSS-код в конец файла
style.css
:button#toggle-password { background: none; border: none; cursor: pointer; font-weight: 300; padding: 0; position: absolute; top: -4px; right: -2px; }
Это сделает кнопку «Показать пароль» похожей на обычный текст и отобразит ее в правом верхнем углу раздела паролей.
Добавьте следующий JavaScript-код в файл
script.js
, чтобы включить или отключить отображение пароля и задать соответствующую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.'); } }
Попробуйте логику показа пароля прямо сейчас.
- Просмотреть ваше приложение.
- Введите текст в поле пароля.
- Нажмите Показать пароль .
Повторите четвертый шаг в нескольких браузерах на разных операционных системах.
Подумайте о дизайне пользовательского опыта: заметят ли пользователи функцию «Показать пароль» и поймут её? Есть ли лучший способ реализовать эту функцию? Сейчас самое время попробовать провести юзабилити-тестирование с небольшой группой друзей или коллег.
Чтобы понять, как эта функция работает для программ чтения с экрана, установите расширение ChromeVox Classic и пройдитесь по форме. Работают ли значения aria-label
так, как задумано?
Некоторые сайты, например, Gmail , используют значки, а не текст, для переключения отображения паролей. После завершения работы над этой практической работой реализуйте это с помощью изображений SVG. Material Design предлагает высококачественные значки, которые можно скачать бесплатно.
Вот как должен выглядеть ваш код на этом этапе:
5. Добавьте проверку формы
Вы можете помочь пользователям правильно вводить свои данные, если позволите им проверить свои данные перед отправкой формы и покажете им, что им нужно изменить.
Элементы и атрибуты HTML-форм имеют встроенные функции для базовой проверки, но вам также следует использовать JavaScript для выполнения более надежной проверки, когда пользователи вводят данные и пытаются отправить форму.
На этом этапе используется API проверки ограничений ( широко поддерживаемый ) для добавления пользовательской проверки со встроенным пользовательским интерфейсом браузера, который устанавливает фокус и отображает подсказки.
Расскажите пользователям об ограничениях на пароли и другие входные данные. Не заставляйте их гадать!
Обновите раздел пароля файла
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>
Это добавляет две новые функции:
- Информация об ограничениях паролей
- Атрибут
aria-describedby
для ввода пароля (Программы чтения с экрана считывают текст метки, тип ввода (пароль), а затем описание.)
Добавьте следующий CSS-код в конец файла
style.css
:div#password-constraints { margin: 5px 0 0 0; font-size: 16px; }
Добавьте следующий JavaScript-код в файл
script.js
: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'; } }
Попробуйте!
Все современные браузеры имеют встроенные функции проверки форм и поддерживают проверку с помощью JavaScript.
- Введите неверный адрес электронной почты и нажмите «Войти» . Браузер выдаст предупреждение — JavaScript не требуется!
- Введите действительный адрес электронной почты, а затем нажмите « Войти без пароля». Браузер предупредит о том, что вы пропустили обязательное значение, и переключит фокус на поле ввода пароля.
- Введите неверный пароль и нажмите «Войти» . Теперь вы видите разные сообщения в зависимости от того, что именно не так.
Попробуйте разные способы помочь пользователям вводить адреса электронной почты и пароли. В разделе «Улучшенные поля формы паролей» есть несколько полезных советов.
Вот как должен выглядеть ваш код на этом этапе:
Идти дальше
Они не показаны в этой лабораторной работе, но вам все равно понадобятся эти четыре важные функции формы входа:
Добавьте кнопку «Забыли пароль?» , которая позволит пользователям легко сбросить свои пароли.
Разместите ссылку на ваши условия предоставления услуг и документы политики конфиденциальности, чтобы ваши пользователи знали, как вы защищаете их данные.
Подумайте о стиле и брендинге и убедитесь, что эти дополнительные функции соответствуют остальной части вашего веб-сайта.
Добавьте Analytics и RUM, чтобы вы могли тестировать и отслеживать производительность и удобство использования вашего дизайна формы.