Como aplico um estilo a uma caixa de entrada vazia? Se o usuário digitar algo no campo de entrada, o estilo não deverá mais ser aplicado. Isso é possível em CSS? Eu tentei isso:
input[value=""]
css
input
css-selectors
Sjoerd
fonte
fonte
Nos navegadores modernos, você pode usar
:placeholder-shown
para direcionar a entrada vazia (não deve ser confundida::placeholder
).Mais informações e suporte ao navegador: https://css-tricks.com/almanac/selectors/p/placeholder-shown/
fonte
Não há seletor em CSS que faça isso. Os seletores de atributo correspondem aos valores dos atributos, não aos valores calculados.
Você precisaria usar JavaScript.
fonte
:empty
selector único trabalho sobre os elementos vazios, ou seja, apenas em elementos que têm de abertura e tag de fecho que está vazio no meio, e elementos de tag individuais que considerado sempre vazio, exemplo , por isso, não pode ser utilizado em elementos de entrada, exceptotextarea
A atualização do valor de um campo não atualiza seu atributo value no DOM; é por isso que seu seletor sempre corresponde a um campo, mesmo quando ele não está vazio.
Em vez disso, use a
invalid
pseudo-classe para alcançar o que deseja, da seguinte maneira:fonte
input[value=""], input:not([value])
funciona com:
Mas o estilo não será alterado assim que alguém começar a digitar (você precisa de JS para isso).
fonte
input[value=""], input:not([value])
.Se suportam navegadores antigos não é necessário, você pode usar uma combinação de
required
,valid
einvalid
.A coisa boa sobre como usar esse é o
valid
einvalid
pseudo-elementos funcionam bem com os atributos de tipo de campos de entrada. Por exemplo:Para referência, JSFiddle aqui: http://jsfiddle.net/0sf6m46j/
fonte
em jQuery. Eu adicionei uma classe e estilizei com css.
fonte
Isso funcionou para mim:
Para o HTML, inclua o
required
atributo no elemento de entradaPara o CSS, use o
:invalid
seletor para direcionar a entrada vaziaNotas:
required
a partir w3Schools.com : "Quando presente, ele especifica que um campo de entrada deve ser preenchido antes de submeter o formulário"fonte
Essa pergunta pode ter sido feita há algum tempo, mas, como eu recentemente entrei nesse tópico, procurando validação de formulário do lado do cliente e, como o
:placeholder-shown
suporte está melhorando, pensei que o seguinte poderia ajudar outras pessoas.Usando Berend idéia de de usar essa pseudo classe CSS4, consegui criar uma validação de formulário acionada somente depois que o usuário terminava de preenchê-lo.
Aqui está um exemplo e explicação sobre o CodePen: https://codepen.io/johanmouchet/pen/PKNxKQ
fonte
Se você estiver feliz por não oferecer suporte ao IE ou ao Edge anterior ao Chromium (o que pode ser bom se você estiver usando isso para aprimoramento progressivo), use
:placeholder-shown
como Berend disse. Observe que, para o Chrome e o Safari, você realmente precisa de um espaço reservado não vazio para que isso funcione, embora um espaço funcione.fonte
Funcionou para mim adicionar um nome de classe à entrada e depois aplicar regras CSS a isso:
fonte
Estou surpreso com as respostas que temos atributo claro para obter caixas de entrada vazias, dê uma olhada neste código
ATUALIZAR
Mais para ter uma ótima aparência na validação
fonte
:empty
aplica-se apenas a elementos que não têm filhos. As entradas não podem ter nós filhos, portanto sua entrada estará sempre com borda vermelha. Veja também este comentáriovalue
não altera o número de nós filhos.<parent><child></child></parent>
). Você apenas tem<input></input>
e enquanto você digita o que está mudando não é um<value>
interior nó<input>
, mas um valor atributo :<input value='stuff you type'></input>
Sei que esse é um tópico muito antigo, mas as coisas mudaram um pouco desde então e isso me ajudou a encontrar a combinação certa de coisas necessárias para resolver o problema. Então pensei em compartilhar o que fiz.
O problema era que eu tinha o mesmo css aplicado a uma entrada opcional se ela fosse preenchida, como solicitava para uma entrada preenchida. O css usou a classe psuedo: valid, que aplicou o css na entrada opcional também quando não foi preenchida.
Foi assim que eu consertei;
HTML
CSS
fonte