HTML5 заполнитель css padding

133

Я уже видел этот пост и перепробовал все, что мог, чтобы изменить отступы для моего заполнителя, но, увы, похоже, он просто не хочет сотрудничать.

Во всяком случае, вот код для CSS. ( РЕДАКТИРОВАТЬ : это сгенерированный CSS из 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;
}

А вот простой HTML:

<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>

Довольно просто? по какой-то причине заполнитель отключен, но при попытке ввода в поле ввода текст выравнивается. Кажется, что вы можете изменить только цвет (для webkit) заполнителя, но если я попытаюсь редактировать заполнение содержащего ввода, это разрушит дизайн ввода! вырывает волосы

Вот скриншоты заполнителя и поля ввода с вводом текста:

заполнитель ввод текста

РЕДАКТИРОВАТЬ :

Сейчас я прибег к этому плагину jquery .

Это работает прямо из коробки, и это решает проблему моего хрома. Я все еще хотел бы раскрыть, в чем проблема (если это имеет какое-то отношение к МОЕМ хрому или что-то)

Я почти уверен, что это не стили, так как Джон Каттерфельд воспроизвел его без проблем, поэтому я надеюсь, что кто-то еще сможет указать мне правильное направление относительно того, почему это происходит со мной (хром моего клиента. Так что это, вероятно, родной для Chrome / OSX, если Джон использует Windows)

коррозия
источник
2
Можете ли вы предоставить сгенерированный CSS? С этим было бы намного проще работать, чем с источником SASS.
RoToRa
+1 Этот плагин потрясающий - простой и имеет нужные опции, которые мне нужны. Вероятно, лучшее решение для заполнителя, с которым я сталкиваюсь до сих пор.
easwee
Если у кого-то есть проблемы с настройкой начальной загрузки, могут помочь следующие два параметра: font-size: large; вместо px; и высота строки: нормальная;
шей

Ответы:

229

У меня та же проблема.

Я исправил это, удалив высоту строки из моего ввода. Проверьте, есть ли высота линии, которая вызывает проблему

Johansrk
источник
6
Неправильно. В элементе input заполнитель не зависит от высоты строки, но заполнение - не лучшее решение. Лучше всего использовать (и я знаю, что обычно он ничего не делает, но в этом случае это делает) свойство CSS VERTICAL-ALIGN.
RIK
1
Да, удивительно, что DID решил проблему. И напечатанный текст все еще остается вертикально центрированным даже без помощи высоты строки.
hndcrftd
59
когда на входе не было высоты строки, добавление line-height: normal;
помогло
В любом случае, вы должны добавить высоту строки для браузеров, но это делает работу для сафари
Калоян Стаматов,
95

У меня была похожая проблема, моя проблема была с боковым отступом, и решение было с текстовым отступом, я не понимал, что текстовый отступ влияет на положение стороны заполнителя.

input{
  text-indent: 10px;
}
talsibony
источник
28

Если вы хотите сохранить высоту строки и сделать так, чтобы местозаполнитель был одинаковым, вы можете напрямую редактировать CSS-заглушку начиная с более новых версий браузера. Это помогло мне:

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;
}
floribon
источник
25
line-height: normal; 

работал на меня;)

user2264934
источник
Работает в Safari.
monteirobrena
Работал в сафари
Zam85
2

Удаление высоты строки действительно приводит ваш текст в соответствие с вашим заполнителем-текстом, но это не решает вашу проблему должным образом, так как вам нужно адаптировать свой дизайн к этому недостатку (это не ошибка). Добавление вертикального выравнивания также не поможет. Я не пробовал во всех браузерах, но в Safari 5.1.4 он точно не работает.

Я слышал об исправлении jQuery для этого, которое заключается не в поддержке кросс-браузерного заполнителя (jQuery.placeholder), а для стилизации заполнителей, но я пока не нашел его.

В то же время вы можете найти таблицу на этой странице, которая показывает разные браузеры для разных стилей.

Изменить: Нашел плагин! jquery.placeholder.min.js предоставляет вам как полную стилизацию, так и поддержку кросс-браузерной сделки.

zykadelic
источник
пытался найти исправление не заполнитель, хотя, как я уже использовал плагин jquery выше :) спасибо за помощь!
коррозия
Имейте в виду, что это два разных плагина. Я не уверен, что делает тот, который вы используете (демонстрация не работает ни в одном из моих браузеров), но этот использует атрибут placeholder элемента и динамически создает диапазон, отображаемый над полем ввода, что обеспечивает максимальные возможности для укладки.
zykadelic
2

У меня была проблема, которая появляется только в Internet Explorer. Поле ввода было стилизовано

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

К сожалению, в IE начальный заполнитель отображается не в правильной позиции. Но когда я щелкнул в поле и затем покинул это поле, заполнитель появился в правильном положении.

Моим решением было установить:

line-height:normal;
Бабс
источник
2

Установка line-height: 0px;исправила это для меня в Chrome

JobJob
источник
2
Можете ли вы объяснить, что это добавляет к принятому ответу четыре года назад?
Натан Тагги,
1
@NathanTuggy для меня принятый ответ предложил line-heightполностью удалить атрибут из элемента. Для меня это ничего не сделало, и что исправило проблему для меня, чтобы установитьline-height: 0px
JobJob
То же самое здесь, это то, что на самом деле исправило проблему для меня.
аэрозон
1

Я создал скрипку, используя ваш скриншот в качестве фонового изображения и убрав лишнюю наценку, и, кажется, работает нормально

http://jsfiddle.net/fLdQG/2/ (требуется веб-браузер)

Это работает для вас? Если нет, можете ли вы обновить скрипку с вашей точной разметкой и CSS?

ajcw
источник
хм, я проверил ссылку, и она не работает для меня. Как вы думаете, есть плагин / что-то в моем Chrome, что вызывает это? снимок экрана: grab.by/8OFf
коррозия
проверил это с помощью сафари, и он работает. не должны ли Chrome и Safari отображать одно и то же?
коррозия
Хм, я не знаю плагин, который бы влиял на ваш макет, как это, но Chrome и Safari оба работают нормально для меня (и да, они должны отображать одно и то же).
ajcw
1
Я использую 9.0.597.84 (хром) на Mac. что вы используете?
коррозия
Я использую Chrome 8.0.552.237 на Windows 7.
ajcw
1

Я заметил эту проблему в тот момент, когда я обновил Chrome для OS X до последней стабильной версии (9.0.597.94), так что это ошибка Chrome, и, надеюсь, будет исправлена.

Я испытываю искушение даже не пытаться обойти это и просто ждать исправления. Это просто будет означать больше работы по его устранению.

воля
источник
ммм так это подтверждается тогда? Есть ли способ "понизить" наш хром, чтобы проверить, действительно ли это хром?
коррозия
1
это 2013, и у меня все еще есть эта проблема на последней версии Chrome: Версия 27.0.1453.116 м
Postscripter
1

Заполнитель не затронут line-heightи paddingнесовместим в браузерах.

Я нашел другое решение, хотя.

VERTICAL-ALIGN, Вероятно, это единственный раз, когда это работает, но попробуйте это и пропустите множество строк кода CSS.

РИК
источник
2
не делает ничего для меня.
Постскриптум
1

Удалить высоту строки или установить с помощью отступов ... это работает во всех браузерах

Хирен Дихора
источник
1

Я нашел ответ, который исправил мои разочарования по этому поводу в блоге Джона Каттерфельда .

... Chrome (v20-30) реализует почти все стили, но с серьезным предостережением - стили заполнителей не меняют размер поля ввода, поэтому избегайте таких вещей, как высота строки и отступы сверху или снизу.

Если вы используете высоту строки или отступы, вы будете разочарованы полученным заполнителем. Я не нашел способ обойти это до этого момента.

Rb-
источник
1

Если вы хотите переместить текст заполнителя вправо и оставить курсор на пустом месте, вам нужно добавить пробелы в начало атрибута заполнителя:

<input type="email" placeholder="  Your email" />
Римский
источник
1

Я проверил почти все методы, приведенные здесь на этой странице для моего приложения Angular. Только я нашел решение через &nbsp;который вставляет пробелы т.е.

Угловой материал

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

Не угловой материал

<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>

Wasif
источник