Разработка сайтов в Горловке, ДНР. Руководство по формам HTML и CSS

 
 

Исторически HTML-формы были довольно сложными — во-первых, потому что требовалось хотя бы немного JavaScript, а во-вторых, потому что никакое количество CSS не могло заставить их работать.

Однако это не обязательно верно в случае современной сети, поэтому давайте узнаем, как размечать формы, используя только HTML и CSS.

Формирование базовой структуры

Ввод формы с предварительно заполненным значением

Начните с

элемента.

 

Здесь нет ничего необычного. Просто покрытие основной структуры.

 

...

 

 

Если вы отправляете данные формы естественным образом (то есть без JavaScript), вам необходимо включить actionатрибут, где значением является URL-адрес, на который вы будете отправлять данные формы. Должно methodбыть GETили POSTв зависимости от того, чего вы пытаетесь достичь (не отправляйте конфиденциальные данные с помощью GET).

Кроме того, есть менее используемый enctypeатрибут, который определяет тип кодирования отправляемых данных. Кроме того, этот targetатрибут, хотя и не обязательно уникальный для форм, может использоваться для отображения вывода на новой вкладке.

Формы на основе JavaScript не обязательно нуждаются в этих атрибутах.

 

 

...

 

 

Формы состоят из входных данных, которые ожидают значений данных.

 

 

 

 

Включение ярлыков для лучшего удобства использования и доступности

Каждому входу нужна метка.

Метка — это текстовый дескриптор, описывающий, для чего предназначен ввод. Есть три способа объявить метку, но один из них лучше двух других. Давайте погрузимся в них сейчас.

Смежные ярлыки

Смежные метки требуют больше всего кода, потому что нам нужно явно объявить, какие входные данные описывает метка. Для большинства это нелогично, потому что вместо этого мы можем обернуть входные данные внутри меток, чтобы добиться того же эффекта с меньшим количеством кода.

При этом соседний метод может понадобиться в исключительных обстоятельствах, так что вот как это будет выглядеть:

Как видно из приведенного выше примера, forатрибут

Этикетки ARIA

Хотя семантический HTML лучше, метки ARIA (Accessible Rich Internet Applications) могут компенсировать их отсутствие. В этом случае вот как может выглядеть метка в отсутствие фактического HTML

aria-label="First name">

К сожалению, недостатком этого подхода является отсутствие визуальной метки. Однако это может подойти для некоторых пометок (например, форма с одним вводом с заголовком и заполнителем):

Subscribe

 

 

aria-label="Email address" placeholder="bruce@wayneenterpris.es">

 

 

(Сейчас я объясню, для чего нужны заполнители.)

Упаковочные этикетки

Обертывание входных данных внутри меток — самый чистый подход. Кроме того, благодаря CSS: focus-withinмы можем даже стилизовать метки, пока их дочерние элементы ввода получают фокус, но мы обсудим это позже.

 

First name

 

Заполнители и ярлыки

Два входа с видимым текстом-заполнителем

Краткое сравнение:

Метки сообщают, что ожидает ввод

Заполнители показывают примеры указанных ожиданий

Заполнители не предназначены для использования в качестве альтернативы меткам, хотя, как мы видели в приведенном выше примере с ARIA, они могут вернуть часть контекста, утраченного при отсутствии визуальных меток.

В идеале, однако, мы должны использовать оба:

 

First name

 

Выбор типов ввода

Заполнители применяются только к текстовому вводу, но на самом деле существует целый ряд различных типов ввода, в том числе:

Семантические типы ввода полезны при проверке формы, особенно при использовании встроенной проверки, которую мы вскоре рассмотрим. Во-первых, давайте узнаем, как стилизовать эти входные данные.

Стилизация входных данных

Возможно, самый раздражающий аспект кодирования форм — это переопределение стилей браузера по умолчанию. К счастью, на сегодняшний день, appearance: none; по данным caniuse.com, поддержка браузерами составляет 96,06%.

После сброса стиля веб-браузера по умолчанию с помощью следующего кода CSS мы можем затем стилизовать входные данные, как мы хотим, и это даже включает в себя как типы ввода радио, так и флажки:

input {

-webkit-appearance: none;

-moz-appearance: none;

appearance: none;

...

}

Однако некоторые из этих входных данных могут иметь особенности, которые трудно или даже невозможно преодолеть (в зависимости от веб-браузера). По этой причине многие разработчики, как правило, возвращаются к type="text"атрибуту=значению по умолчанию, если считают эти особенности нежелательными (например, знак «вставки» на input type="number").

Однако есть и серебряная подкладка...

Указаниеinputmode

По данным caniuse.com, поддержка веб-браузеров составляет 82,3%, и новый inputmodeатрибут указывает, какая раскладка клавиатуры будет отображаться на портативных устройствах независимо от используемого ввода type.

Лучше, чем ничего, верно?

Проверка пользовательского ввода

Если вы выберете проверку нативного HTML, а не решение на JavaScript, помните, что inputmodeв этом отношении вы ничего не добьетесь. inputmode="email" не будет проверять адрес электронной почты, тогда как input type="email"будет. В этом разница.

Отложив это в сторону, давайте обсудим, что запускает проверку:

 

 

Создание пользовательских правил

Пользовательские правила требуют знания регулярных выражений JavaScript, используемых RegExpобъектом (но без косых черт или кавычек). Вот пример, в котором используются символы нижнего регистра (a–z) и minlength/maxlength в одном правиле:

Больше информации здесь.

Примечание: проверка внешнего интерфейса (собственный HTML или другой) никогда не должна использоваться в качестве замены проверки на стороне сервера!

Стилизация действительных/недействительных состояний

Форма с текстом-заполнителем в полях формы и кнопкой отправки/подписки

Просто для большей ясности, вот как мы будем оформлять достоверность:

input: valid {

border-left: 1.5rem solid lime;

}

input: invalid {

border-left: 1.5rem solid crimson;

}

form: invalid {

/* this also works, technically! */

}

Хьюстон у нас проблема!

Входные данные пытаются немедленно проверить свои значения (или их отсутствие), поэтому следующий код (который показывает только допустимые/недопустимые состояния, пока вход содержит значение) может быть лучше:

input: not (: placeholder-shown): valid {

border-left: 1.5rem solid lime;

}

Это показывает допустимый/недопустимый стиль, но только тогда, когда заполнитель не отображается (потому что пользователь что-то набрал).

Другие основные вещи

Отправка данных формы

Для отправки данных формы на сервер обычно требуется, чтобы входные данные имели nameатрибут. Это также относится к скрытым входам:

Принятие длинного ввода

По сути,это то же самое, что и , за исключением того факта, что текстовые области имеют многострочную поддержку. Да, это, безусловно, было бы более интуитивно понятным, но, увы, это правильный способ принимать длинную информацию от пользователей. Кроме того, он принимает большинство (если не все) атрибутов входных данных.

Группировка входов для лучшей доступности

Хотя более короткие формы предлагают гораздо лучший пользовательский интерфейс, иногда неизбежны более длинные формы. В таком сценарии

элемент может использоваться для содержания связанных входных данных, а дочерний элемент используется в качестве заголовка/заголовка для
:

 

 

 

 

Name

 

 

 

 

 

Contact details

 

 

Полезные вещи

Отключение входов

Добавление disabledатрибута может сделать ввод (или любой фокусируемый элемент) недействующим, хотя обычно это применяется/не применяется через JavaScript. Однако вот как это работает:

...

 

 

...

 

И сопутствующий CSS, если необходимо:

: enabled {

opacity: 1;

}

: disabled {

opacity: 0.5;

}

Однако, если все, что вы хотите сделать, это добавить дополнительную визуальную подсказку, намекающую на то, что ввод пользователя недействителен, вы, скорее всего, захотите использовать общий комбинатор родственных элементов (~). Следующий код в основном означает «кнопку отправки, которая следует за любым элементом с недопустимым вводом». Это не меняет никакой функциональности, но когда мы используем проверку формы нативного HTML (которая автоматически обрабатывает отключение/включение возможности отправки), это нормально:

: invalid ~ input[type=submit] {

opacity: 0.5;

}

Отключение ввода, но отправка данных все равно

Сочетание и в следующем примере гарантирует, что значение не может быть изменено. Разница в том, что, в отличие от disabled, readonlyзначения отправляются как данные формы; и в отличие от hidden, readonlyвидно:

Изменение приращения

Числовые входы имеют «кнопку прокрутки» для настройки числового значения, и они также принимают stepатрибут, который определяет альтернативное возрастающее значение каждой корректировки:

Стилизация форм, меток и наборов полей в фокусе

Мы можем использовать focus-within: для стилизации любого родителя ввода, который в данный момент получает фокус. Скорее всего, этот элемент будет входным

,

 

 

 

 

 

3D-печать5GABC-анализAndroidAppleAppStoreAsusCall-центрChatGPTCRMDellDNSDrupalExcelFacebookFMCGGoogleHuaweiInstagramiPhoneLinkedInLinuxMagentoMicrosoftNvidiaOpenCartPlayStationPOS материалPPC-специалистRuTubeSamsungSEO-услугиSMMSnapchatSonyStarlinkTikTokTwitterUbuntuUp-saleViasatVPNWhatsAppWindowsWordPressXiaomiYouTubeZoomАвдеевкаАктивные продажиАкцияАлександровск ЛНРАлмазнаяАлчевскАмвросиевкаАнализ конкурентовАнализ продажАнтимерчандайзингАнтрацитАртемовскАртемовск ЛНРАссортиментная политикаБелгородБелицкоеБелозерскоеБердянскБизнес-идеи (стартапы)БрендБрянкаБукингВахрушевоВендорВидеоВикипедияВирусная рекламаВирусный маркетингВладивостокВнутренние продажиВнутренний маркетингВолгоградВолновахаВоронежГорловкаГорнякГорскоеДебальцевоДебиторкаДебиторская задолженностьДезинтермедитацияДзержинскДивизионная система управленияДизайнДимитровДирект-маркетингДисконтДистрибьюторДистрибьюцияДобропольеДокучаевскДоменДружковкаЕкатеринбургЕнакиевоЖдановкаЗапорожьеЗимогорьеЗолотоеЗоринскЗугрэсИжевскИловайскИрминоКазаньКалининградКировскКировскоеКомсомольскоеКонстантиновкаКонтент-маркетингКонтент-планКопирайтингКраматорскКрасноармейскКрасногоровкаКраснодарКраснодонКраснопартизанскКрасный ЛиманКрасный ЛучКременнаяКураховоКурскЛисичанскЛуганскЛутугиноМакеевкаМариупольМаркетингМаркетинговая информацияМаркетинговые исследованияМаркетинговый каналМаркетинг услугМаркетологМарьинкаМедиаМелекиноМелитопольМенеджментМерчандайзерМерчандайзингМиусинскМолодогвардейскМоскваМоспиноНижний НовгородНиколаевНиколаевкаНишевой маркетингНовоазовскНовогродовкаНоводружескНовосибирскНумерическая дистрибьюцияОдессаОмскОтдел маркетингаПартизанский маркетингПервомайскПеревальскПетровскоеПлата за кликПоисковая оптимизацияПопаснаяПравило ПаретоПривольеПрогнозирование продажПродвижение сайтов в ДонецкеПроизводство видеоПромоПромоушнПрямой маркетингРабота для маркетологаРабота для студентаРазработка приложенийРаспродажаРегиональные продажиРекламаРеклама на асфальтеРемаркетингРетро-бонусРибейтРитейлРовенькиРодинскоеРостов-на-ДонуРубежноеСамараСанкт-ПетербургСаратовСватовоСвердловскСветлодарскСвятогорскСевастопольСеверодонецкСеверскСедовоСейлз промоушнСелидовоСимферопольСинергияСколковоСлавянскСнежноеСоздание сайтов в ДонецкеСоледарСоциальные сетиСочиСтаробельскСтаробешевоСтахановСтимулирование сбытаСуходольскСчастьеТелемаркетингТельмановоТираспольТорговый представительТорезТрейд маркетингТрейд промоушнТюменьУглегорскУгледарУкраинскХабаровскХарцызскХерсонХостингЦелевая аудиторияЦифровой маркетингЧасов ЯрЧелябинскШахтерскЮжно-СахалинскЮнокоммунаровскЯндексЯсиноватая