Preenchimento de CSS do espaço reservado HTML5


133

Eu já vi esse post e tentei de tudo para alterar o preenchimento do meu espaço reservado, mas, infelizmente, parece que ele não quer cooperar.

Enfim, aqui está o código para o css. ( EDIT : Este é o css gerado a partir de sass)

#search {
  margin-top: 1px;
  display: inline;
  float: left;
  margin-left: 10px;
  margin-right: 10px;
  width: 220px;
}

#search form {
  position: relative;
}

#search input {
  padding: 0 10px 0 29px;
  color: #555555;
  border: none;
  background: url('/images/bg_searchbar.png?1296191141') no-repeat;
  width: 180px;
  height: 29px;
  overflow: hidden;
}

#search input:hover {
  color: #00ccff;
  background-position: 0px -32px;
}

E aqui está o html simples:

<div id="search">
  <form>
    <input type="text" value="" placeholder="Search..." name="q" autocomplete="off" class="">
  </form>
  <div id="jquery-live-search" style="display: block; position: absolute; top: 15px; width: 219px;">
    <ul id="search-results" class="dropdown">
    </ul>
  </div>
</div>

Bem simples? o espaço reservado está desativado por algum motivo, mas quando você tenta digitar o campo de entrada, o texto está alinhado. Parece que você só pode alterar a cor (for webkit) do espaço reservado, mas se eu tentar editar o preenchimento da entrada que contém, isso destruirá o design da entrada! puxa o cabelo

Aqui estão as telas do espaço reservado e do campo de entrada com entrada de texto:

espaço reservado entrada de texto

EDIT :

Por enquanto, recorri a este plugin jquery .

Funciona imediatamente e corrige o problema do meu chrome. Eu ainda gostaria de descobrir qual é o problema (se tiver algo a ver com o MY chrome ou algo assim)

Tenho certeza de que não são os estilos desde que John Catterfeld o reproduziu sem problemas, então espero que alguém lá fora ainda possa me indicar a direção certa do motivo pelo qual isso está acontecendo comigo (o cromo do meu cliente também.) provavelmente é nativo do Chrome / OSX se John estiver usando o Windows)


2
Você pode fornecer o CSS gerado? Seria muito mais fácil trabalhar com isso do que a fonte SASS.
RoToRa

+1 Esse plugin é incrível - simples e tem as opções que eu preciso. Provavelmente a melhor solução de espaço reservado que encontrei até agora.
easwee

Se alguém tiver um problema com a inicialização, essas duas opções ajudarão: tamanho da fonte: grande; em vez de px; e altura da linha: normal;
necker

Respostas:


229

Eu tenho o mesmo problema.

Corrigi-o removendo a altura da linha da minha entrada. Verifique se há alguma altura de linha que está causando o problema


6
Errado. Com um elemento de entrada, o espaço reservado não é afetado pela altura da linha, mas o preenchimento não é a melhor solução. O melhor é usar (e eu sei que normalmente nunca faz nada, mas nesse caso faz) a propriedade CSS VERTICAL-ALIGN.
RIK

1
Sim, surpreendentemente, isso corrigiu o problema. E o texto digitado ainda permanece centralizado verticalmente, mesmo sem a ajuda da altura da linha.
Hndcrftd

59
quando não havia line-height na entrada directamente, em seguida, acrescentando line-height: normal;fez o truque para mim
philfreo

De qualquer forma você tem que adicionar line-height para o IE navegadores, mas que fazer o trabalho para safari
Kaloyan Stamatov

95

Eu tive um problema semelhante, meu problema era com o preenchimento lateral e a solução era com recuo de texto, não sabia que esse recuo afetava a posição lateral do espaço reservado.

input{
  text-indent: 10px;
}

28

Se você deseja manter a altura da linha e forçar o espaço reservado a ter o mesmo, é possível editar diretamente o CSS do espaço reservado desde as versões mais recentes do navegador. Isso fez o truque para mim:

input::-webkit-input-placeholder { /* WebKit browsers */
  line-height: 1.5em;
}
input:-moz-placeholder { /* Mozilla Firefox 4 to 18 */
  line-height: 1.5em;
}
input::-moz-placeholder { /* Mozilla Firefox 19+ */
  line-height: 1.5em;
}
input:-ms-input-placeholder { /* Internet Explorer 10+ */
  line-height: 1.5em;
}


2

A remoção da altura da linha realmente alinha seu texto com o espaço reservado-texto, mas não resolve o problema adequadamente, pois você precisa adaptar seu design a essa falha (não é um bug). Adicionar alinhamento vertical também não será suficiente. Eu não tentei em todos os navegadores, mas não funciona no Safari 5.1.4 com certeza.

Ouvi falar de uma correção do jQuery para isso, que não é o suporte a espaços reservados para vários navegadores (jQuery.placeholder), mas para estilos de espaços reservados, mas ainda não o encontrei.

Enquanto isso, você pode resolver a tabela nesta página, que mostra suporte a navegadores diferentes para estilos diferentes.

Edit: Encontrado o plugin! O jquery.placeholder.min.js fornece recursos completos de estilo e suporte a vários navegadores.


estava tentando encontrar uma correção de não marcador de posição, como eu já usei o plugin jquery acima :) obrigado pela ajuda!
corroído

Lembre-se, porém, que esses são dois plugins diferentes. Não sei ao certo o que você está usando (a demonstração não funciona em nenhum dos meus navegadores), mas este usa o atributo placeholder do elemento e cria dinamicamente um intervalo renderizado acima do campo de entrada, o que fornece possibilidades máximas de estilo.
zykadelic

2

Eu tive um problema, que aparece apenas no Internet Explorer. O campo de entrada foi estilizado

height:38px;
line-height:38px;

Infelizmente, no IE, o espaço reservado inicial não aparece na posição correta. Mas, quando clico no campo e deixo esse campo, o espaço reservado aparece na posição correta.

Minha solução foi definir:

line-height:normal;

2

A configuração line-height: 0px;corrigiu para mim no Chrome


2
Você pode explicar o que isso acrescenta à resposta aceita de quatro anos atrás?
Nathan Tuggy

1
@NathanTuggy para mim, a resposta aceita sugeriu que você remova o line-heightatributo inteiramente do elemento. Para mim, que não fez nada, e que resolveu o problema para mim foi setline-height: 0px
JobJob

Mesmo aqui, é isso que realmente corrigiu o problema para mim.
aeroson 18/08/16

1

Eu criei um violino usando sua captura de tela como imagem de fundo e removendo a marcação extra, e parece funcionar bem

http://jsfiddle.net/fLdQG/2/ (é necessário navegador da Webkit)

Isso funciona para você? Caso contrário, você pode atualizar o violino com sua marcação exata e CSS?


hmm eu verifiquei o link e ele não funciona para mim também. você acha que há um plugin / algo no meu chrome que está causando isso? screenshot: grab.by/8OFf
corroído

verifiquei usando o safari e funciona. Chrome e Safari não deveriam render a mesma coisa?
corroído

Hmm, eu não estou ciente de um plug-in que afetaria seu layout assim, mas o Chrome e o Safari funcionam bem para mim (e sim, eles devem renderizar a mesma coisa).
11289 ajcw

1
estou usando 9.0.597.84 (chrome) no mac. qual voce esta usando?
corroído

Estou usando Chrome 8.0.552.237 no Windows 7.
ajcw

1

Percebi o problema no momento em que atualizei o Chrome no os x para a versão estável mais recente (9.0.597.94), portanto esse é um bug do Chrome e espero que seja corrigido.

Estou tentado a nem tentar contornar isso e apenas esperar pela correção. Significará apenas mais trabalho para retirá-lo.


mmm, para que seja confirmado então? existe uma maneira de "rebaixar" nosso chrome para verificar se ele realmente é chrome?
corroído

1
é 2013 e eu ainda tenho esse problema na versão mais recente do chrome: Versão 27.0.1453.116 m
Postscripter

1

O espaço reservado não é afetado line-heighte paddingé inconsistente nos navegadores.

Eu encontrei outra solução embora.

VERTICAL-ALIGN. Esta é provavelmente a única vez que funciona, mas tente fazer isso e desobstrua muitas linhas de código CSS.


2
não faz nada por mim.
Postscripter

1

Remover altura da linha ou definir usando preenchimento ... está funcionando em todos os navegadores


1

Encontrei a resposta que remediou minhas frustrações com relação a isso no blog de John Catterfeld .

... O Chrome (v20-30) implementa quase todos os estilos, mas com uma grande ressalva - os estilos de espaço reservado não redimensionam a caixa de entrada, portanto, fique longe de coisas como altura da linha e preenchimento na parte superior ou inferior.

Se você estiver usando altura de linha ou preenchimento, ficará frustrado com o espaço reservado resultante. Eu não encontrei uma maneira de contornar isso até este ponto.


1

Se você deseja mover o texto do espaço reservado para a direita e deixar o cursor no espaço em branco, adicione espaço (s) no início do atributo do espaço reservado:

<input type="email" placeholder="  Your email" />

1

Eu testei quase todos os métodos fornecidos aqui nesta página para o meu aplicativo Angular. Só encontrei solução via &nbsp;que insere espaços ou seja

Material angular

<input matInput type="text" class="pl-2" placeholder="&nbsp;&nbsp;Email">

Material não angular

<link href="https://stackpath.bootstrapcdn.com/bootstrap/4.3.1/css/bootstrap.min.css" rel="stylesheet"/>

<div class="container m-3 d-flex flex-column align-items-center justify-content-around" style="height:100px;">
<input type="text" class="pl-0" placeholder="Email with no Padding" style="width:240px;">
<input type="text" class="pl-3" placeholder="Email with 1 rem padding" style="width:240px;">
</div>

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.