Стиль ввода текста на основе типизированных данных с использованием только CSS - PullRequest
2 голосов
/ 16 декабря 2011

После просмотра всего, кроме источника Gecko, меня несколько смущает следующее поведение.Я хотел посмотреть, смогу ли я стилизовать ввод текста на основе введенного пользователем значения, и в итоге получился следующий CSS:

input[value="password"] {
  border:1px solid red;
}

Проблема в том, что, кажется, значение ввода проверяетсяна создание элементов, как видно в этом примере .

Возможно ли сделать это без использования Javascript?Почему браузер не обновляет стили соответственно?

Ответы [ 3 ]

2 голосов
/ 16 декабря 2011

Это не работает, потому что селекторы атрибутов «соответствуют элементам, которые имеют определенные атрибуты, определенные в исходном документе» ( Селекторы атрибутов в CSS 2.1 ).Все немного сложнее, потому что вызов setAttribute('value','password') для элемента input вызывает совпадение во многих браузерах (не в IE).Но это не имеет значения, если вы не используете JavaScript.

Существует, однако, косвенный путь, хотя пока он в основном теоретический, из-за ограниченной поддержки браузера и из-за сложностей в реализации.Вы можете написать:

<style>
input:valid { border: 1px solid red; }
</style>
<input pattern=password id=x>

При этом используется атрибут HTML5 pattern, в данном случае задается регулярное выражение, представляющее собой просто фиксированную строку без подстановочных знаков, и Базовый пользовательский интерфейс CSS3 :valid псевдокласс, который проверяет, удовлетворяет ли состояние элемента ограничениям допустимости.Это не подходит для обычного использования (например, не поддерживается в IE 9), но в особых ситуациях в контролируемых средах подобные вещи могут быть полезны.

Однако браузеры, поддерживающие такие функции, как правило, имеют свои собственныесообщение об ошибках достоверности, например, специальный цвет вокруг прямоугольника, когда значение недопустимо, и я не думаю, что вы можете изменить это в CSS - JavaScript может помочь, но… Таким образом, отчетность может конфликтовать с вашими целями здесь.Более того, кажется, что браузеры, поддерживающие эти функции, обрабатывают состояние элемента как действительное, когда поле пусто.Это странно, и попытки обойти это, делая ввод обязательным (атрибут HTML5 required), скорее, открывают новые банки червей, чем исправляют.Но, возможно, в некоторых случаях вы могли бы использовать только какое-то начальное значение, скажем value="?", которое пользователь должен заменить этим вводом.

1 голос
/ 16 декабря 2011

Это не работает, потому что вы на самом деле не меняете атрибут value элемента.Например, посмотрите на эту скрипку:

http://jsfiddle.net/jblasco/J9xSd/

Это работает, потому что атрибут value действительно изменен.Простой ввод в поле или обновление с помощью используемого вами метода Javascript не изменит его.Что обычно полезно для получения значения по умолчанию позже, но, возможно, не так полезно в этом смысле.

1 голос
/ 16 декабря 2011

Нет.CSS не может проверить значение поля ввода после того, что доступно в структуре HTML.

Когда вы печатаете в поле ввода, вы фактически не меняете атрибут вHTML.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...