Existe uma maneira de detectar se uma entrada possui ou não texto via CSS? Eu tentei usar a :empty
pseudo-classe e tentei usar [value=""]
, nenhuma das quais funcionou. Não consigo encontrar uma solução única para isso.
Eu imagino que isso deve ser possível, considerando que temos pseudo-classes para :checked
, e :indeterminate
, as quais são algo parecido.
Observe: estou fazendo isso para um estilo "Elegante" , que não pode utilizar JavaScript.
Observe também que o Stylish é usado, no lado do cliente, em páginas que o usuário não controla.
Respostas:
Elegante não pode fazer isso porque CSS não pode fazer isso. O CSS não possui (pseudo) seletores para
<input>
valor (es). Vejo:O
:empty
seletor refere-se apenas a nós filhos, não a valores de entrada.[value=""]
faz o trabalho; mas apenas para o estado inicial . Isso ocorre porque ovalue
atributo de um nó (que o CSS vê) não é o mesmo que a propriedade do nóvalue
(Alterado pelo usuário ou pelo javascript do DOM e enviado como dados do formulário).A menos que você se importe apenas com o estado inicial, você deve usar um userscript ou script Greasemonkey. Felizmente isso não é difícil. O script a seguir funcionará no Chrome ou Firefox com o Greasemonkey ou Scriptish instalado ou em qualquer navegador que suporte scripts de usuários (ou seja, a maioria dos navegadores, exceto o IE).
Veja uma demonstração dos limites do CSS mais a solução javascript nesta página jsBin .
fonte
:valid
opção requer reescrever a página - que é algo que o OP não pode fazer com elegante e que nenhuma das outras respostas mostrar a todos em um contexto de navegação. O usuário não tem controle sobre a página que está visitando.É possível, com as ressalvas usuais de CSS e se o código HTML pode ser modificado. Se você adicionar o
required
atributo ao elemento, o elemento corresponderá:invalid
ou:valid
se o valor do controle está vazio ou não. Se o elemento não tivervalue
atributo (ou temvalue=""
), o valor do controle está inicialmente vazio e fica vazio quando qualquer caractere (mesmo um espaço) é inserido.Exemplo:
As pseudo-classificadas
:valid
e:invalid
são definidas apenas nos documentos CSS do nível Working Draft, mas o suporte é bastante difundido nos navegadores, exceto que no IE, ele veio com o IE 10.Se você deseja tornar “vazio” incluir valores que consistem apenas em espaços, é possível adicionar o atributo
pattern=.*\S.*
.Atualmente, não existe um seletor de CSS para detectar diretamente se um controle de entrada tem um valor não vazio; portanto, precisamos fazê-lo indiretamente, conforme descrito acima.
Geralmente, os seletores de CSS se referem à marcação ou, em alguns casos, às propriedades do elemento definidas com scripts (JavaScript do lado do cliente), em vez de ações do usuário. Por exemplo,
:empty
combina elemento com conteúdo vazio na marcação; todos osinput
elementos são inevitavelmente vazios nesse sentido. O seletor[value=""]
testa se o elemento tem ovalue
atributo na marcação e tem a cadeia vazia como seu valor. E:checked
e:indeterminate
são coisas semelhantes. Eles não são afetados pela entrada real do usuário.fonte
required
atributo pode impedir o envio do formulário.novalidate
atributo no<form>
elemento para que não se preocupe com a exibição vermelha quando o campo estiver vazio depois de preenchido uma vez:<form ... novalidate> <input ... required /> </form>
Você pode usar a
:placeholder-shown
pseudo classe. Tecnicamente, é necessário um espaço reservado, mas você pode usar um espaço.fonte
:placeholder-shown
, essa deverá se tornar a resposta aceita. Orequired
método não leva em consideração os casos adicionais. Note-se que você pode passar um espaço para um espaço reservado e esse método ainda funcionará. Parabéns.input:not(:placeholder-shown)
sempre corresponderá<input/>
mesmo que não haja valor.e
vai funcionar :-)
edit: http://jsfiddle.net/XwZR2/
fonte
input[value]:not([value=""])
- é melhor. Obrigado a todos. codepen.io/iegik/pen/ObZpqoBasicamente, o que todo mundo está procurando é:
MENOS:
CSS puro:
fonte
Você pode usar o
placeholder
truque conforme escrito acima sem orequired
campo.O problema
required
é que, quando você escreveu algo e o excluiu - a entrada agora será sempre vermelha como parte da especificação HTML5 -, você precisará de um CSS conforme descrito acima para corrigi-lo / substituí-lo.Você pode fazer coisas simples sem
required
CSS
Caneta de código: https://codepen.io/arlevi/pen/LBgXjZ
fonte
CSS simples:
Este código aplicará o css fornecido no carregamento da página se a entrada estiver preenchida.
fonte
Você pode definir
input[type=text]
um estilo diferente, dependendo de a entrada ter ou não texto estilizando o espaço reservado. Este não é um padrão oficial neste momento, mas possui amplo suporte ao navegador, embora com prefixos diferentes:Exemplo: http://fiddlesalad.com/scss/input-placeholder-css
fonte
Usando JS e CSS: não pseudoclasse
fonte
O seletor válido fará o truque.
fonte
Você pode aproveitar o espaço reservado e usar:
fonte
Truque simples com jQuery e CSS Assim:
JQuery:
CSS:
fonte
faça-o na parte HTML assim:
O parâmetro necessário exigirá que haja texto no campo de entrada para ser válido.
fonte
Sim! você pode fazer isso com atributo básico simples com seletor de valor.
fonte
Isso não é possível com o css. Para implementar isso, você precisará usar JavaScript (por exemplo
$("#input").val() == ""
).fonte