CSS3 псевдо-классы
и HTML5 формы

CSS3 псевдо-классы и HTML5 формы

Одна из особенностей, введенная с HTML5 - это проверка клиентской формы без использования JavaScript. В этой статье рассмотрим интересный момент интеграции CSS3 и HTML5.

Псевдо-класс это информация об элементе, который находится в дереве документа, но не любой указанный атрибут. Для примера: :first-child, применяется ко всем первым элементам своего родителя.

В CSS2 были похожие псевдо-классы, которые применяются в основном к ссылкам :active, :visited, :hover и т.д. С приходом CSS3, котомка с псевдо-классами была значительно расширена ( :nth-child, :nth-of-type, :checked, :enabled и т.д. ). О чем сейчас и поговорим.

Валидация формы без JavaScript

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

Хотите идти в ногу со временем?

Обязательные и необязательные элементы

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

<input type="text" required id="foo">
<label for="foo">Foo</label>

Чтобы как то оформить такое поле, необходимо использовать :required - новый псевдокласс, который будет применять оформление для любого совпашего тега с таким атрибутом. Например, можно добавить звездочку:

input:required + label::after { content: "*"; }

С помощью псевдо классов можно оформить и необязательный элемент :optional. Следующий пример добавит красную рамку к необязательным элементам формы:

input:optional { border-color: red; }

Прохождение валидации формы

Существуют и другие типы проверки помимо :required и :optional. Например для поля ввода с типом "email":

<input type="email" id="email">
<label for="email">email</label>

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

В любом случае с помощью псевдо-классов css3, можно задать оформление для этого поля в зависимости от правильности его заполнения, с помощью :valid и :invalid. Например можно иммитировать статус поля:

input:invalid { background-color: red; }
input:valid { background-color: green; }
input:invalid + label::after { content: ' поле заполнено не корректно'; }
input:valid + label::after { content: ' ок'; }

Диапазоны чисел

Некотрые из новых типов тегов, позволяют создать форму с вводом диапазона чисел, с ограничением по максимальному и минимальному значению:

<input type="number" max="10" min="1">

Хоть браузер и не позволит пользователю ввести число за пределами этого диапазона, но могут быть случаи ( например, если используется JavaScript для получения значений ), где значение, выходит из допустимого диапазона:

<input type="number" max="10" min="1" value="11">

Контролировать, сей момент, можно новыми псевдо-классами :out-of-range и :in-range.

input[type='number']:out-of-range { border-color: red; }
input[type='number']:in-range { border-color: green; }

Только чтение и ввод

Иногда необходимо изначально заполненное поле ( например условие ), но закрытое для редактирования пользователем. В этом случае используется атрибут readonly:

<textarea readonly>Некоторое условие</textarea>

Собственно для оформления его через CSS используется псевдо-класс :read-only и свойство CSS user-select:

textarea:read-only { user-select: none; }

Для полей которые могут использоваться пользователем для редактирования применяется псевдо-класс :read-write:

textarea:read-write { user-select: text; }

Поддержка браузерами

К сожалению еще не все браузеры до конца поддерживают эти замечательные псевдо-классы.

Псевдо-класс Chrome Firefox IE Opera Safari
:optional / :required 10.0 4.0 10.0 10.0 5.0
:invalid / :valid 10.0 4.0 нет 10.0 5.0
:in-range / :out-of-range 10.0 нет нет 10.0 5.0
:read-only / :read-write 10.0 нет нет 10.0 5.0

01 июля 2012, 19:34
HTML, CSS


Авторизация
Зайди на сайт с помощью соц. сети:
Тебе — сюда нельзя!!!
На сайте присутствует апокалиптичная тарабарщина
и нецензурная брань.
Хмм... и мне-то вообще-то насрать...
Продолжить
Нет, уйти с сайта