{"componentChunkName":"component---src-templates-post-js","path":"/html-css/kak-dovesti-raboty-s-form-do-ideala/","result":{"pageContext":{"slug":"kak-dovesti-raboty-s-form-do-ideala","content":"\n<p>У всех у нас были моменты, когда при использовании автозаполнения мы попадали в полный беспорядок. Одни поля остаются пустыми, другие заполняются неверными значениями, а еще одни полагаются на placeholder’ы, которые должны нам сказать то, чем же должна быть заполнена форма. Правильно ли вы в таком случае введете содержимое формы?</p>\n\n\n\n<p>Возможно единственным способом убедиться в верности заполненного значения будет удаление значения, выставленного автозаполнением, чтобы увидеть заново <code>placeholder</code>. Это расстраивает и вообще так не должно быть, в принципе.</p>\n\n\n\n<h2 id=\"22e6\">Делаем разметку правильно</h2>\n\n\n\n<p id=\"1a20\">Хорошая форма начинается с правильной разметки.</p>\n\n\n\n<h3 id=\"6f5f\">Выключаем автокоррекцию</h3>\n\n\n\n<p id=\"5346\">Выключайте&nbsp;<code>autocorrect</code>, когда он вам не нужен. Очень надоедает, когда система пытается что-то исправить, особенно если она не знает что. Это могут быть имена, названия улиц, компаний и городов. Всякий раз, когда вы пишете&nbsp;<code>&lt;input&gt;</code>, спросите себя: является ли потенциальное значение чем-то из общепринятого словаря? Если ответ — нет, то выключайте автокоррекцию. Вам это не нужно и пользователю уж темболее.</p>\n\n\n\n<pre class=\"wp-block-code html\"><code>&lt;input autocorrect=\"off\" ...></code></pre>\n\n\n\n<h2 id=\"8386\">2. Выключайте autocapitalise</h2>\n\n\n\n<p id=\"76e7\">Выключайте его когда он вам не нужен. Похоже, что этот подход можно применить только к полям email, но поверьте, это очень удобно, избегать того, чтобы первый символ email был написан с большой буквы.</p>\n\n\n\n<pre class=\"wp-block-code html\"><code>&lt;input autocapitalize=\"off\" …></code></pre>\n\n\n\n<h2 id=\"0be1\">3. Используйте autocomplete</h2>\n\n\n\n<p id=\"e662\">Этот атрибут позволяет вам контролировать то, как браузер должен заполнять заданные поля формы. Это ключ к правильно работающему автозаполнению. Популярными значениями для атрибута являются:&nbsp;<code>name</code>,&nbsp;<code>email</code>,&nbsp;<code>username</code>,&nbsp;<code>new-password</code>&nbsp;и&nbsp;<code>current-password</code>, но лист значений которые вы можете использовать&nbsp;<a rel=\"noreferrer noopener\" href=\"https://html.spec.whatwg.org/multipage/form-control-infrastructure.html#attr-fe-autocomplete-name\" target=\"_blank\">может быть буквально бесконечным.</a></p>\n\n\n\n<pre class=\"wp-block-code html\"><code>&lt;input autocomplete=\"tel\" …>\n&lt;input autocomplete=\"email\" …></code></pre>\n\n\n\n<h2 id=\"bc21\">4. Используйте required</h2>\n\n\n\n<p id=\"2c93\">Этот атрибут указывает на то, что поле ввода должно быть обязательно заполнено перед отправкой. Старайтесь использовать его, вместо валидации на JS, тогда, когда это возможно. Лучше дать браузеру сделать эту работу, вместо изобретения колеса с кастомной валидацией.</p>\n\n\n\n<p id=\"2445\">Браузеры по дефолту делают очень много: например, появляется подсказка и <code>input</code> попадает под видимость, когда пользователь пытается засабмитить пустое, требующее заполнение поле.</p>\n\n\n\n<p id=\"3d54\">Так же рекомендуется указывать на обязательность заполнения поля, добавляя подсказку для пользователя рядом с&nbsp;<code>input&nbsp;</code>или&nbsp;<code>label</code>. И даже тогда, когда все поля требуют заполнения.</p>\n\n\n\n<pre class=\"wp-block-code html\"><code>&lt;input required ...></code></pre>\n\n\n\n<h2 id=\"ee21\">5. Используйте&nbsp;<code>type</code>&nbsp;и pattern</h2>\n\n\n\n<p id=\"eaa6\">Сенсорные устройства могут показывать разные, оптимизированные клавиатуры для каждой формы ввода, сразу же, как вы укажете им это сделать. Для примера: цифровая клавиатура на iPhone 6S имеет область-клика на 521% больше, чем дефолтная клавиатура. И это просто идеально для инпутов, которые принимаются только числовые значения.</p>\n\n\n\n<p id=\"5970\">Оптимизированные шаблоны клавиатуры могут быть вызваны при использовании type и pattern атрибутов. Есть также новый атрибут <code>inputmode</code>, но пока что он не может использоваться во многих браузерах.</p>\n\n\n\n<p id=\"f4a5\">Используйте&nbsp;<code>pattern=\"[0–9]*\"</code>&nbsp;или&nbsp;<code>inputmode=\"numeric\"</code>&nbsp;для вызова числовой клавиатуры.</p>\n\n\n\n<p id=\"6639\">Используйте&nbsp;<code>type=\"email\"</code>, чтобы вызвать email клавиатуру.</p>\n\n\n\n<p id=\"e928\">Используйте&nbsp;<code>type=\"url\"</code>, чтобы вызвать url клавиатуру.</p>\n\n\n\n<pre class=\"wp-block-code html\"><code>&lt;input pattern=\"\\d*\" ...>\n&lt;input type=\"email\" ...>\n&lt;input type=\"url\" ...></code></pre>\n\n\n\n<h2 id=\"e165\">5. Используйте лейблы</h2>\n\n\n\n<p id=\"8bcd\">Дизайнеры и разработчики любят пропускать&nbsp;<code>&lt;label&gt;</code>, так как это делает форму чище, а код и стилизацию проще, но он играет важную роль для пользователей. Контроль формы, который полагается только на placeholder, является неидентифицируемым при заполнении. Это является особенной проблемой, тогда когда форма была заполнена с использованием автозаполнения: пользователи не могут сказать, заполнен ли <code>input</code> правильно, пока они не удалят введенное значение.</p>\n\n\n\n<pre class=\"wp-block-code html\"><code>&lt;label for=\"email\">E-Mail&lt;/label>\n&lt;input id=\"email\" …></code></pre>\n\n\n\n<h2 id=\"cd77\">6. Используйте placeholder</h2>\n\n\n\n<p id=\"18fa\">Placeholder это подсказка для пользователя. Они всегда должны показывать потенциальное значение в ожидаемом формате. Такие&nbsp;<code>placeholder&nbsp;</code>как&nbsp;<code>+49</code>&nbsp;или&nbsp;<code>https://</code>&nbsp;идеальны для того, чтобы сказать пользователям, что они должны начать вводить номера телефонов с кода страны, а ссылки с протокола.</p>\n\n\n\n<pre class=\"wp-block-code html\"><code>&lt;input placeholder=\"Jane Doe\" …></code></pre>\n\n\n\n<h2 id=\"25c8\">7. Используйте disabled</h2>\n\n\n\n<p id=\"9d34\">Используйте этот атрибут, чтобы деактивировать поля ввода. Не класс. Я повторяю: не класс.&nbsp;<code>disabled</code>&nbsp;может быть применен ко всем контроллерам форм и говорить браузеру, чтобы пользователь не использовал этот элемент. Добавление дополнительного класса в плане стилизации это ок, но помните, что вы можете также выбрать элемент с использованием&nbsp;<code>input[disabled]</code>&nbsp;в CSS.</p>\n\n\n\n<pre class=\"wp-block-code html\"><code>&lt;select disabled>\n\t&lt;option value=\"a\">A&lt;/option>\n\t&lt;option value=\"b\">B&lt;/option>\n&lt;/select>\n\n&lt;select>\n\t&lt;option disabled>Choose A or B&lt;/option>\n\t&lt;option value=\"a\">A&lt;/option>\n\t&lt;option value=\"b\">B&lt;/option>\n&lt;/select>\n\n&lt;input disabled ...>\n&lt;textarea disabled ...>&lt;/textarea></code></pre>\n\n\n\n<h2 id=\"5b9f\">Получаем правильное юзабилити</h2>\n\n\n\n<p id=\"5bf1\">Правильная разметка это уже хорошая база для хорошего юзабилити.&nbsp;<code>autocorrect</code>,&nbsp;<code>autocapitalize</code>&nbsp;и autocomplete упрощают заполнение формы, используя&nbsp;<code>type</code>&nbsp;и&nbsp;<code>pattern</code>, вы точно будете знать, что сенсорные устройства показывают оптимизированную клавиатуру и placeholder дает пользователям знать, что им нужно ввести. Но этого недостаточно. Все еще есть множество моментов, в которых вы можете ошибиться, когда дело доходит до стилизации и общей структуры. Вот три отличных ресурса, чтобы улучшить UX ваших форм.</p>\n\n\n\n<p id=\"9ef7\"><a href=\"https://uxdesign.cc/design-better-forms-96fadca0f49c\" target=\"_blank\" rel=\"noreferrer noopener\">Делаем формы лучше</a>.</p>\n\n\n\n<p id=\"887d\"><a href=\"http://uxmovement.com/category/forms/\" target=\"_blank\" rel=\"noreferrer noopener\">UX Movement</a>. Это блог, который вам поможет улучшить ваши интерфейсы, показывая то, как хороший и плохой дизайн практически влияют на поведение пользователя.</p>\n\n\n\n<p id=\"7204\"><a href=\"https://baymard.com/blog\" target=\"_blank\" rel=\"noreferrer noopener\">Baymard Institute</a></p>\n\n\n\n<p id=\"06a5\">E-commerce UX исследование — раскрывает то, какие дизайн-проекты вызывают проблемы с юзабилити и как создать опыт взаимодействия в e-commerce по последнему слову техники. Бесплатные статье также содержат некоторые отличные посты, относящиеся к формам и инпутам.</p>\n\n\n\n<h2 id=\"416c\">Делаем стилизацию правильно</h2>\n\n\n\n<p id=\"eab8\">Стилизация формы это кошмар. Элементы даются со своим собственным стилем, который варьируется от системы к системе и от браузера к браузеру. Есть даже многостраничное руководство на MDN, объясняющее то, почему так тяжело стилизовать виджеты с CSS?</p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" width=\"1000\" height=\"630\" src=\"https://stasonmars.ru/wp/wp-content/uploads/2021/01/1_yy6jDGA2Pga_Kpg6bZA7zQ.png\" alt=\"\" class=\"wp-image-121\" srcset=\"https://stasonmars.ru/wp/wp-content/uploads/2021/01/1_yy6jDGA2Pga_Kpg6bZA7zQ.png 1000w, https://stasonmars.ru/wp/wp-content/uploads/2021/01/1_yy6jDGA2Pga_Kpg6bZA7zQ-300x189.png 300w, https://stasonmars.ru/wp/wp-content/uploads/2021/01/1_yy6jDGA2Pga_Kpg6bZA7zQ-768x484.png 768w\" sizes=\"(max-width: 1000px) 100vw, 1000px\" /></figure>\n\n\n\n<p id=\"81aa\">Я провел очень много времени за стилизацией форм, так что принял решение сделать базу дефолтных стилей для распространенных input элементов:&nbsp;<a rel=\"noreferrer noopener\" href=\"https://github.com/electerious/formbase\" target=\"_blank\">formbase</a>&nbsp;устраняет кроссбраузерные баги, несоответствия между системами и применяет красивую дефолтную стилизацию для нескольких элементов input. Ноль зависимостей, без JavaScript, только CSS.</p>\n\n\n\n<p id=\"07e1\">Альтернатива formbase это Boilerform: маленький бойлерплэйт из HTML и CSS, который начался с подачи Chris Coyier (<a rel=\"noreferrer noopener\" href=\"https://css-tricks.com/boilerform/\" target=\"_blank\">A Boilerform Idea</a>) Она уже превратилась в проект, который пытается сделать работу с формами безболезненной.</p>\n\n\n\n<h2 id=\"9a7c\">Примеры разметки</h2>\n\n\n\n<p id=\"9e21\">Я бы хотел завершить этот пост несколькими примерами, показывающими распространенные поля ввода и их правильные атрибуты. Заходите в эту секцию всякий раз, когда вы пишите форму, чтобы убедиться в том, что ваша разметка соответствует лучшим практикам в этом деле.</p>\n\n\n\n<h3 id=\"fa68\">Имя</h3>\n\n\n\n<p id=\"d2c7\">Совет: всегда используйте одно имя, вместо разделения одного целого инпута.</p>\n\n\n\n<pre class=\"wp-block-code html\"><code>&lt;label for=\"name\">Name&lt;/label>\n&lt;input id=\"name\" name=\"name\" type=\"text\" autocorrect=\"off\" autocomplete=\"name\" placeholder=\"Jane Doe\"></code></pre>\n\n\n\n<h3>Компания</h3>\n\n\n\n<pre class=\"wp-block-code html\"><code>&lt;label for=\"company\">Company&lt;/label>\n&lt;input id=\"company\" name=\"company\" type=\"text\" autocorrect=\"off\" autocomplete=\"organization\" placeholder=\"World Wide Web Consortium\"></code></pre>\n\n\n\n<h2 id=\"227d\">Почтовый код</h2>\n\n\n\n<p id=\"e81f\">Совет: некоторые страны используют буквы в своих почтовых кодах. Убедитесь, что вы удалили pattern, когда пользователю нужно будет ввести почтовый код одной из таких стран.</p>\n\n\n\n<pre class=\"wp-block-code html\"><code>&lt;label for=\"postalcode\">Postal code&lt;/label>\n&lt;input id=\"postalcode\" name=\"postalcode\" type=\"text\" pattern=\"\\d*\" novalidate autocorrect=\"off\" autocomplete=\"postal-code\" placeholder=\"02139\"></code></pre>\n\n\n\n<h3>Город</h3>\n\n\n\n<pre class=\"wp-block-code html\"><code>&lt;label for=\"city\">City&lt;/label>\n&lt;input id=\"city\" name=\"city\" type=\"text\" autocorrect=\"off\" autocomplete=\"address-level2\" placeholder=\"Cambridge\"></code></pre>\n\n\n\n<h3>Улица</h3>\n\n\n\n<pre class=\"wp-block-code html\"><code>&lt;label for=\"country\">Country name&lt;/label>\n&lt;input id=\"country\" name=\"countryname\" type=\"text\" autocomplete=\"country\" placeholder=\"Germany\"></code></pre>\n\n\n\n<h3>Телефон</h3>\n\n\n\n<pre class=\"wp-block-code html\"><code>&lt;label for=\"tel\">Phone&lt;/label>\n&lt;input id=\"tel\" name=\"tel\" type=\"tel\" autocorrect=\"off\" autocomplete=\"tel\" placeholder=\"+1 617 253 5702\"></code></pre>\n\n\n\n<h3>E-mail</h3>\n\n\n\n<pre class=\"wp-block-code html\"><code>&lt;label for=\"email\">E-Mail&lt;/label>\n&lt;input id=\"email\" name=\"email\" type=\"email\" autocapitalize=\"off\" autocorrect=\"off\" autocomplete=\"email\" placeholder=\"janedoe@example.com\"></code></pre>\n\n\n\n<h3>Дата рождения</h3>\n\n\n\n<pre class=\"wp-block-code html\"><code>&lt;label for=\"birthday\">Birthday&lt;/label>\n&lt;input id=\"birthday\" name=\"birthday\" type=\"date\" autocorrect=\"off\" autocomplete=\"bday\" placeholder=\"YYYY-MM-DD\" disabled></code></pre>\n\n\n\n<p></p>\n","type":"html-css","date":"2021-01-20T14:58:50.000Z","acf":{"seo_desc":"Давйате посмотри на то, как можно довести работу с тегом <form> до идела и сделать жизнь пользователей проще","pub_date":"2018-05-22","keywords":"form в html, работа с form в html,  идеальный form","tags":"HTML, Формы"},"title":"Как довести работу с <form> до идеала","id":"c6a3e197-bfc6-545b-928c-48c436f865e3","excerpt":"<p>Давйате посмотри на то, как можно довести работу с тегом form до идела и сделать жизнь пользователей проще</p>\n","featured_media":{"source_url":"https://stasonmars.ru/wp/wp-content/uploads/2021/01/fjhbdhjsfbjshdbfjhsbdjkfsbk.jpg"},"interesting":[{"title":"Стандарты написания гибкого, надежного и жизнеспособного HTML c CSS","slug":"standarty-napisaniya-gibkogo-nadezhnogo-i-zhiznesposobnogo-html-s-css","type":"html-css"},{"title":"Как довести работу с <form> до идеала","slug":"kak-dovesti-raboty-s-form-do-ideala","type":"html-css"}]}},"staticQueryHashes":["3576131997","63159454"]}