Правильного ответа нет. Любой выбор приводит к жертвам, любое решение требует платы. | Лишь навык имеет значение.
Здравствуйте.
Снова вопрос по CSS.
Вот есть поле. type=text, то бишь. У него стоит required.
В css правило input[type="text"]:invalid. Мысль была в том, что если поле пустое, то отображается подсказка типа "type your e-mail address".
Если же пользователь печатает (:focus) или поле не пустое, то background: none, чтобы текст на фоне не смешивался с вбитым пользователем.
Пока оно в таком варианте - всё ок и замечательно.
Но захотелось мне поиграться с атрибутом pattern, чтоб проверку формы делал браузер (принцип "всё что можно сделать без js - делаем без js").
И тут получает загвоздка, т.к. :invalid происходит когда неверные данные в поле (пустое поле или допустим e-mail русскими буквами).
И получается, что если вбить неверные данные, они остаются в поле, срабатывает :invalid и на фон поля ставится подсказка (ну, если фокус потеряется, а он потеряется скорее всего, т.к. пользователь тупо ткнёт где-нибудь, чтоб окошко-предупреждалку убрать).
В итоге имеем пересечение вбитого текста и фонового.
Собсно вопрос, это можно как-то обойти?
Чтобы при пустом поле был один стиль, а при заполненном (пусть и неверно) был другой.
Снова вопрос по 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+ Это не отвечает на вопрос можно ли прописать разные стили для пустого поля, и поля с текстом.
-
-
06.12.2014 в 14:05средствами css нельзя, :empty предназначен для другого. (нельзя означает что я такого способа не знаю)
-
-
06.12.2014 в 14:12Ну хотя бы по опере нижняя граница.)
средствами css нельзя, :empty предназначен для другого. (нельзя означает что я такого способа не знаю)
Ну вот да... :empty не поможет, т.к. input type="text" всегда имеет :empty, читал об этом недавно.
По value тоже не получается, т.к. обрабатывается только начальное значение, то бишь только на момент загрузки документа. Если потом меняется, то ноль реакции.
-
-
06.12.2014 в 14:19-
-
06.12.2014 в 14:37Врезку прочитал, но не скажу что понял. Ибо с инглишем всё также не очень, а транслейт ясности не внёс.
В любом случае, плейсхолдер не настолько поддерживается. чтобы я его использовал. + Не въезжаю что есть роли и их отношение к текущему вопросу.
нет, давайте закручивать гвоздь отвёрткой
Вот вечно вас в крайности кидает.))) Где надо, я сделаю тем что работает. Но интересно же, можно ли без скриптов? Тут просто интерес как к задачке.)
Наличие известного решения не всегда означает, что это решение единственное.) Хотя для данного случая js видимо всё же необходим.