Статьи

HTML5 формы: новые элементы управления

htmlcss2thumb

Ниже приводится выдержка из нашей книги « HTML5 и CSS3 для реального мира», 2-е издание , написанной Алексисом Гольдштейном, Луи Лазарисом и Эстель Вейль. Копии продаются в магазинах по всему миру, или вы можете купить их в электронном виде здесь .

Мы рассмотрели новые значения для атрибута type элемента input, а также некоторые атрибуты, которые действительны для большинства элементов формы. Но веб-формы HTML5 еще могут предложить нам больше! В спецификации форм HTML5 datalist пять новых элементов формы: datalist , output , keygen , progress и meter . Мы рассмотрели данные выше. Мы познакомили вас с progress и meter в последней главе, поскольку они часто полезны вне форм. Итак, давайте подведем итоги и рассмотрим два других элемента.

Элементы progress и meter

Двумя наиболее известными элементами HTML5 являются элементы progress и meter .

Элемент meter обеспечивает датчик, отображающий общее значение в пределах диапазона. Вы указываете минимальное ( min ) и максимальное ( max ) значения, а также требуемое value которое находится между этими минимальными и максимальными значениями. Хотя многие считают, что это элемент управления формы с атрибутами, похожими на некоторые числовые типы ввода, он не имеет атрибута name и не будет отправлен при отправке формы.

meter умолчанию установит минимальное значение 0 или значение измерителя, в зависимости от того, какое value меньше. Максимальное значение по умолчанию равно 1 или value счетчика, в зависимости от того, какое value больше. Используйте meter когда есть минимальное значение, максимальное значение и оптимальные значения, и это значение может увеличиваться и уменьшаться, как тестовый уровень, уровень бензобака или кровяное давление. С этими тремя атрибутами браузеры, поддерживающие счетчик, включая Android 4.4+ (но не iOS7 или IE11), будут показывать зеленый индикатор.

meter позволяет нам показать, когда значение находится в правильном диапазоне с low , high и optimum значениями. Если value находится между min и low , индикатор желтый. Если значение находится между low и high значением, индикатор горит зеленым. Если value находится между high и max , оно будет красным. В настоящее время optimum значение не имеет заметного эффекта.

Элемент meter не должен использоваться для индикации прогресса; вместо этого используйте индикатор выполнения, чтобы указать процент выполнения задачи.

Атрибуты прогресса включают в себя max и value , причем прогресс всегда находится в диапазоне от 0 до 100%. Браузер рассчитывает, какой процент значения является максимальным, и соответствующим образом корректирует длину индикатора выполнения. Он отображает частично заполненный серый или синий индикатор выполнения, где он полностью серый на 0% и полностью синий на 100%.

Если value не указано, индикатор выполнения является неопределенным. Chrome, Opera, Safari и Firefox отображают неопределенный прогресс в виде анимированных полос, а IE отображает его как анимированные точки.

В отличие от meter , progress идет только в направлении 100% от max значения. По умолчанию в презентации используется встроенный блок, поэтому вы можете установить width и height для элементов progress . Высота не изменит фактическую высоту стилизованной панели (в отличие от meter ), но добавит пространство под ней.

Элемент output

Назначение output элемента — принять и отобразить результат расчета. output элемент должен использоваться, когда пользователь может видеть значение, но не может напрямую им манипулировать, и когда значение может быть получено из других значений, введенных в форму. Примером использования может быть общая стоимость, рассчитанная после доставки, и налоги в корзине.

Значение output элемента содержится между открывающим и закрывающим тегами. Как правило, имеет смысл использовать JavaScript в браузере для обновления этого значения. output элемент имеет атрибут for , который используется для ссылки на идентификаторы полей формы, значения которых были использованы для вычисления значения output элемента.

name и value output элемента передаются вместе с формой.

Элемент keygen является элементом управления для генерации пары открытый-закрытый ключ и для отправки открытого ключа из этой пары ключей. Opera, Chrome, Safari, Android и Firefox поддерживают этот элемент, отображая его в виде раскрывающегося меню с параметрами длины сгенерированных ключей; все предоставляют разные варианты, хотя. Все еще нет поддержки в iOS7 и IE11.

Элемент keygen вводит два новых атрибута: атрибут challenge указывает строку, которая отправляется вместе с открытым ключом, а атрибут keytype указывает тип сгенерированного ключа. На момент написания документа единственным поддерживаемым значением типа keytype является rsa , общий алгоритм, используемый в криптографии с открытым ключом.

contenteditable атрибут

Хотя всегда лучше использовать наиболее подходящий элемент формы для его предназначения, иногда существующие элементы формы не соответствуют нашим потребностям; например, никакой элемент управления формы не создает хорошего встроенного текстового редактора WYSIWYG.

Однако для этого есть обходное решение. Любой элемент в документе HTML5 можно сделать редактируемым с помощью атрибута contenteditable . Атрибут contenteditable , записанный просто как contenteditable или contenteditable="true" , делает элемент, в который он включен, доступным для редактирования. Обычно вы найдете этот атрибут в элементах div, но вы даже можете сделать элемент style который установлен на "display:block" редактируемым и изменять CSS на лету. Хотя любой элемент, который изначально не является элементом управления формой, по умолчанию не будет отправляться на сервер вместе с остальными данными формы при отправке формы, вы можете использовать JavaScript для отправки отредактированного пользователем содержимого на сервер асинхронно или при отправке формы.

Если вы когда-либо видели редактируемый профиль, в котором элемент, на который нужно щелкнуть, совсем не похож на элемент управления формы, есть вероятность, что вы действительно редактировали элемент contenteditable . Любые изменения, внесенные в contenteditable компоненты, фактически обновляют DOM.

Простое добавление contenteditable к элементу делает этот элемент редактируемым во всех браузерах. Кроме того, его потомки также будут редактируемыми, если к ним явно не применяется contenteditable="false" . Хотя это обновляет клиентскую часть DOM, вам нужно добавить JavaScript, чтобы явно сохранить его.

Изменения в существующих элементах управления формы

Было несколько других изменений в элементах управления формы в HTML5.

Элемент form

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

Во-первых, как мы уже видели, HTML5 предоставляет несколько способов нативной проверки полей формы; определенные типы ввода, такие как email и url , например, а также required атрибуты и атрибуты pattern . Однако вы можете захотеть использовать эти типы ввода и атрибуты для стилизации или семантических целей, не препятствуя отправке формы. Новый логический атрибут novalidate позволяет novalidate форму без собственной проверки ее полей.

Далее, формам больше не нужно определять атрибут action . Вам больше не нужно явно указывать URL-адрес, чтобы использовать его для отправки формы. Если опущено, форма будет вести себя так, как если бы action было установлено для текущей страницы. Вы можете написать или переопределить URL-адрес, определенный в атрибуте action формы, с formaction атрибута formaction типов ввода кнопки, которые активируют formaction формы.

Наконец, атрибут autocomplete мы ввели ранее, также может быть добавлен непосредственно в элемент form ; в этом случае он будет применяться ко всем полям в этой форме, если только эти поля не переопределяют его своим собственным атрибутом autocomplete .

Элемент optgroup

В HTML5 у вас может быть optgroup optgroup , которая полезна для многоуровневых меню select .

Элемент textarea

В HTML 4 мы должны были указать размер элемента textarea , указав значения для атрибутов cols и cols . В HTML5 эти атрибуты больше не требуются; Вы должны использовать CSS для определения ширины и высоты textarea .

Новым в HTML5 является атрибут wrap . Этот атрибут применяется к элементу textarea и может иметь значения soft (по умолчанию) или hard . При использовании soft текст отправляется без разрывов строк, кроме тех, которые фактически введены пользователем, тогда как hard передает любые разрывы строк, введенные браузером, из-за размера поля. Если вы установили wrap , то вам нужно указать атрибут cols .

В заключение

К сожалению, мы не смогли охватить все — это должно быть книга сама по себе. Это было, однако, довольно глубокое введение. По мере роста поддержки входных элементов и атрибутов HTML5 сайтам будет все меньше и меньше требовать JavaScript для проверки на стороне клиента и улучшения пользовательского интерфейса, в то время как браузеры справляются с большей частью тяжелой работы. Устаревшие пользовательские агенты, скорее всего, останутся в обозримом будущем, но нет причин избегать продвижения вперед и использования веб-форм HTML5, где соответствующие заполнения и отступления заполняют пробелы, где это необходимо.

В следующей главе мы продолжим работу над «Вестником HTML5», добавив то, что многие считают убийственной функцией HTML5: нативное видео и аудио.