Вертикально выровнять текст в поле ввода фиксированной высоты без отображения: таблицы или заполнения?

Свойство line-height обычно заботится о вертикальном выравнивании, но не о входных данных. Есть ли способ автоматически центрировать текст, не играя с отступами?

Не экспериментируя с обивкой? Не по моему опыту. Если вы хотите, чтобы он отображался (почти) одинаково во всех браузерах, я обнаружил, что использование отступов необходимо.

Zack The Human 29.11.2008 05:32
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Введение в CSS
Введение в CSS
CSS является неотъемлемой частью трех основных составляющих front-end веб-разработки.
Как выровнять Div по центру?
Как выровнять Div по центру?
Чтобы выровнять элемент <div>по горизонтали и вертикали с помощью CSS, можно использовать комбинацию свойств и значений CSS. Вот несколько методов,...
Навигация по приложениям React: Исчерпывающее руководство по React Router
Навигация по приложениям React: Исчерпывающее руководство по React Router
React Router стала незаменимой библиотекой для создания одностраничных приложений с навигацией в React. В этой статье блога мы подробно рассмотрим...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
CSS: FlexBox
CSS: FlexBox
Ранее разработчики использовали макеты с помощью Position и Float. После появления flexbox сценарий полностью изменился.
77
1
186 228
16
Перейти к ответу Данный вопрос помечен как решенный

Ответы 16

Сам не пробовал, но попробуйте установить:

height : 36px; //for other browsers
line-height: 36px; // for IE

Где 36 пикселей - это высота вашего ввода.

Фактически свойство line-height решило проблему в IE. Думаю, это самый простой способ.

user669677 13.09.2011 11:58

Единственная проблема, которую я бы здесь заметил, - это перенос текста.

JacobRossDev 07.01.2014 22:37

Я обнаружил, что высота строки также необходима, особенно на iPhone 13 Safari.

pzrq 18.12.2020 09:09
Ответ принят как подходящий

В Opera 9.62, Mozilla 3.0.4, Safari 3.2 (для Windows) это помогает, если вы поместите текст или хотя бы пробел в той же строке, что и поле ввода.

<div style = "line-height: 60px; height: 60px; border: 1px solid black;">
    <input type = "text" value = "foo" />&nbsp;
</div>

(представьте & nbsp после оператора ввода)

IE 7 игнорирует все попытки взлома CSS. Я бы рекомендовал использовать отступы только для IE. Должен упростить вам правильное размещение, если он должен работать только в одном конкретном браузере.

-1 Это выравнивает поле ввода, а не текст в поле ввода.

kontur 01.03.2012 12:35

выравнивание текста: центр; Применил это к CSS текстового поля, и это сработало для меня

Zohab Ali 02.05.2018 08:16

Я сам столкнулся с этой проблемой. Я обнаружил, что не указание высоты ввода, а использование сочетания font-height и padding приводит к вертикально выровненному тексту.

Например, допустим, вы хотите иметь поле ввода высотой 42 пикселя с размером шрифта 20 пикселей. Вы можете просто найти разницу между высотой ввода и размером шрифта, разделить ее на два и установить отступ на это значение. В этом случае у вас будет 22 пикселя для заполнения, то есть по 11 пикселей с каждой стороны.

<input type = "text" style = "padding: 11px 0px 11px 0px; font-size: 20px;" />

Это даст вам поле ввода высотой 42 пикселя с идеальным вертикальным выравниванием.

Надеюсь, это поможет.

Несмотря на то, что это работает, исходный вопрос заключался в том, как решить эту проблему без заполнения.

Micros 23.02.2012 18:55

Как отмечает Micros, это действительно работает, но исходный вопрос заключался в том, как это сделать без заполнения, что кажется возможным. Я считаю, что ответ Криса Хоуза - самое простое решение, и оно не требует использования отступов.

Tim Mackey 17.04.2012 22:05

Иногда вам нужна явная высота, и в этом случае использование отступов недопустимо. Хотя это действительно работает, оно не решает эту ситуацию (о чем был задан вопрос). См. Ответ Криса Хоуза ниже, чтобы узнать правильный ответ без заполнения (например, "высота строки").

dkamins 08.11.2012 06:21

После долгих поисков и разочарований у меня сработала комбинация установки высоты, высоты строки и отсутствия отступов при использовании фонового изображения с фиксированной высотой (24 пикселя) для поля ввода текста.

.form-text {
    color: white;
    outline: none;
    background-image: url(input_text.png);
    border-width: 0px;
    padding: 0px 10px 0px 10px;
    margin: 0px;
    width: 274px;
    height: 24px;
    line-height: 24px;
    vertical-align: middle;
}

vertical-align выравнивает входной элемент относительно его родителя, а не внутри него.

xmarcos 13.03.2011 01:42

Просто не устанавливайте высоту поля ввода, установите только размер шрифта, это будет нормально

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

Мне нужно, чтобы поле ввода текста было ровно 40 пикселей в высоту, включая границу в 1 пиксель по всему периметру. Конечно, во всех браузерах я хотел, чтобы текст был выровнен по центру по вертикали.

Граница в 1 пиксель сверху
Нижняя граница в 1 пиксель Отступ сверху 8 пикселей Отступ снизу 8 пикселей Размер шрифта 22 пикселя

1 + 1 + 8 + 8 + 22 = ровно 40 пикселей.

Следует помнить, что вы должны удалить свойство высоты css, иначе эти пиксели будут добавлены к вашей общей сумме, указанной выше.

<input type = "text" style = "padding-top:8px; padding-bottom:8px; margin: 0; border: solid 1px #000000; font-size:22px;" />

Это работает в Firefox, Chrome, IE 8 и Safari. Я могу только предположить, что если что-то подобное работает в IE8, оно должно работать аналогичным образом в 6, 7 и 9, но я не тестировал это. Пожалуйста, дайте мне знать, и я соответствующим образом отредактирую этот пост.

I can only assume that if something simple like this is working in IE8, it should work similarly in 6, 7 - есть МНОГО очень простых вещей (по крайней мере, по сегодняшним меркам), которые работают (пусть и наполовину) в IE8, но невозможны в IE6 или даже 7. Напоминаем, что IE6 не так много поддерживает. как position: fixed или даже прозрачные PNG.
Camilo Martin 29.08.2012 05:28

Если ваш элемент является блочным элементом, содержащимся / или с таким отображением:

display: table-cel

Или, с фиксированной высотой строки, вы можете установить вертикальное выравнивание следующим образом:

Vertical-Align: Middle;

В других случаях это не сработает, но в этих условиях работает нормально.

Это работает только в блочных элементах с display: table-cell или в блоках с фиксированным line-height.

Marc B 28.06.2011 00:46

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

    #search #searchbox {
    height: 21px;
    line-height: 21px;
}

ваше здоровье! JP

Вот как я это делаю.

<ul>
   <li>First group of text here.</li>
   <li><input type = "" value = "" /></li>
</ul>

затем внутри вашего файла CSS

ul li {
  display: block;
  float: left;
}

Это должно сработать для вас.

Вам не нужно display: block при использовании с float. Помните, что float = block.

drpelz 21.07.2014 18:47

Пытаться :

height: 21px;
line-height: 21px; /* FOR IE */

Потому что в некоторых версиях IE (<9) высота свойства не интерпретируется должным образом.

Это точное решение уже было дано в нескольких ответах, когда вы опубликовали это.

TylerH 05.01.2019 03:21

Выберите line-height.

Тег vertical-align отлично подходит для кнопки отправки, но не для текста в поле ввода. Установка line-height на высоту поля ввода работает во всех браузерах. Включая IE7.

хотя этот ответ дает вескую причину, он не дает ответа. Я пробую сейчас, и это даже не работает. во-первых, высота переопределяет и делает высоту строки бесполезной. во-вторых, line-height только увеличивает / уменьшает поле ввода и ничего не делает для регулировки положения текста.

ahnbizcad 04.09.2020 04:24
input[type=text]
{
   height: 15px; 
   line-height: 15px;
}

это правильный способ установить вертикально-среднее положение.

Это точное решение уже было дано в нескольких ответах, когда вы опубликовали это.

TylerH 05.01.2019 03:21

Вам следует удалить текст заголовка и использовать поле ввода для заголовка метки. После этого немного поработают визуальные элементы и CSS, и ваша форма будет выглядеть компактной и удобной для пользователя. Я знаю о недостатках, но это полностью избавит от борьбы за выравнивание.

Поздно к вечеринке, но текущие ответы не будут работать, если у вас есть box-sizing: border-box set (который в наши дни многие люди делают для элементов формы).

Просто сбросьте размер окна для IE8 на box-sizing: content-box;, затем используйте один из ответов о заполнении / высоте.

Внутреннее вертикальное выравнивание будет зависеть от высоты шрифта и высоты ввода, поэтому его можно отрегулировать с помощью отступов !!!

Попробуйте что-нибудь вроде:

.InVertAlign {
   height: 40px;
   line-height: 40px;
   font-size: 2em;
   padding: 0px 14px 3px 5px;
}

...

<input type = "text" class = "InVertAlign" />

Не забудьте настроить значения в классе css в соответствии с вашими потребностями!

Я просто работал над этим в текстовых входах MaterialUI. Добавление padding-top: 0.5rem в стиль ввода у меня сработало. Пока вы настраивали отступы, по крайней мере, вам не нужно беспокоиться о корректировке обновлений, не говоря уже о различных точках останова.

Другие вопросы по теме