06:11

Правильного ответа нет. Любой выбор приводит к жертвам, любое решение требует платы. | Лишь навык имеет значение.
Здравствуйте.

Снова вопрос по CSS.

Вот есть поле. type=text, то бишь. У него стоит required.

В css правило input[type="text"]:invalid. Мысль была в том, что если поле пустое, то отображается подсказка типа "type your e-mail address".
Если же пользователь печатает (:focus) или поле не пустое, то background: none, чтобы текст на фоне не смешивался с вбитым пользователем.

Пока оно в таком варианте - всё ок и замечательно.
Но захотелось мне поиграться с атрибутом pattern, чтоб проверку формы делал браузер (принцип "всё что можно сделать без js - делаем без js").

И тут получает загвоздка, т.к. :invalid происходит когда неверные данные в поле (пустое поле или допустим e-mail русскими буквами).
И получается, что если вбить неверные данные, они остаются в поле, срабатывает :invalid и на фон поля ставится подсказка (ну, если фокус потеряется, а он потеряется скорее всего, т.к. пользователь тупо ткнёт где-нибудь, чтоб окошко-предупреждалку убрать).
В итоге имеем пересечение вбитого текста и фонового.

Собсно вопрос, это можно как-то обойти?
Чтобы при пустом поле был один стиль, а при заполненном (пусть и неверно) был другой.

Комментарии
06.12.2014 в 12:32

как обычно, ваши проблемы проистекают из непонимания, нелюбопытности и общей профнепригодности.

:invalid не предназначен для подсказки, его функция -- показать юзеру что поле заполнено неверно.

developer.mozilla.org/en-US/docs/Web/HTML/Eleme... (обратите внимание на врезку)
06.12.2014 в 13:46

Правильного ответа нет. Любой выбор приводит к жертвам, любое решение требует платы. | Лишь навык имеет значение.
ehlo_kitty, htmlbook.ru/html/input/placeholder фиговая у него кроссбраузерность да и вообще поддержка. На совсем будущее ок, но на текущее время, не выход. Разве что в ТЗ на вёрстку условия подойдут, что врядли.

+ Это не отвечает на вопрос можно ли прописать разные стили для пустого поля, и поля с текстом.
06.12.2014 в 14:05

но простите, у htmlbook.ru/css/invalid поддержка ещё хуже.

средствами css нельзя, :empty предназначен для другого. (нельзя означает что я такого способа не знаю)
06.12.2014 в 14:12

Правильного ответа нет. Любой выбор приводит к жертвам, любое решение требует платы. | Лишь навык имеет значение.
ehlo_kitty, но простите, у htmlbook.ru/css/invalid поддержка ещё хуже.

Ну хотя бы по опере нижняя граница.)


средствами css нельзя, :empty предназначен для другого. (нельзя означает что я такого способа не знаю)

Ну вот да... :empty не поможет, т.к. input type="text" всегда имеет :empty, читал об этом недавно.
По value тоже не получается, т.к. обрабатывается только начальное значение, то бишь только на момент загрузки документа. Если потом меняется, то ноль реакции.
06.12.2014 в 14:19

вы читали врезку к плейсхолдеру? для того чтобы указать роль поля в форме используется
06.12.2014 в 14:37

Правильного ответа нет. Любой выбор приводит к жертвам, любое решение требует платы. | Лишь навык имеет значение.
ehlo_kitty, для того чтобы указать роль поля

Врезку прочитал, но не скажу что понял. Ибо с инглишем всё также не очень, а транслейт ясности не внёс.
В любом случае, плейсхолдер не настолько поддерживается. чтобы я его использовал. + Не въезжаю что есть роли и их отношение к текущему вопросу.


нет, давайте закручивать гвоздь отвёрткой

Вот вечно вас в крайности кидает.))) Где надо, я сделаю тем что работает. Но интересно же, можно ли без скриптов? Тут просто интерес как к задачке.)
Наличие известного решения не всегда означает, что это решение единственное.) Хотя для данного случая js видимо всё же необходим.