HTML: IE: заполнение справа в текстовом поле ввода

Перейдите по адресу http://jsfiddle.net/srLQH/ и заполните текстовое поле ввода в "Результат" Посмотреть.

Если вы сделаете это в FF, Chrome и Safari, ваш текст остановится на 20 пикселей меньше правой стороны.

В IE 7/8 текст не останавливается на 20 пикселей — он доходит до края поля ввода.

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


person SnickersAreMyFave    schedule 22.09.2010    source источник


Ответы (8)


Я искал способ решить эту проблему. Коллега нашел решение, мы протестировали его, и оно отлично работает. Итак, нужно удалить padding: right и добавить border: 20px solid transparent.

person Monica    schedule 05.09.2013
comment
это работает очень хорошо для ie8. Modernizr добавляет класс т.е. к элементу HTML, что упрощает разделение взломов т.е. Используйте box-sizing: border-box; с этим. - person Silkster; 20.09.2013
comment
Это работает и для других популярных браузеров. Не нужно делать исключение для IE. Кстати, левый padding тоже нужно обрабатывать таким же образом. - person feklee; 03.02.2014
comment
ответ mrust - реальное решение - person Wouter; 23.06.2015

Я нашел один способ сделать это, но он некрасивый.

http://jsfiddle.net/dmitrytorba/dZyzr/162/

<!--[if IE]>
<style type="text/css">
input {
  border: none;
  margin: 5px;
  padding-right: 0px;
}
.wrapper {
    border: 1px #aaa inset;
}
.spacer{
    margin-left: 20px;
}
</style>
<![endif]-->


<span class='wrapper'>
    <input type='text' />
    <span class='spacer'></span>
</span>​
person Dmitry Torba    schedule 13.02.2012
comment
Рабочий, честный ответ. Спасибо. - person kapace; 18.12.2012
comment
ответ mrust - реальное решение - person Wouter; 23.06.2015

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

Вы можете добавить «заполнение» обратно в IE, добавив поля к значению, используя следующее.

заполнение ввода по умолчанию


    input[type="text"]{
        padding-left:17px;
        padding-right:17px;
    }

заполнение для ввода IE


    input[type="text"]::-ms-value {
        margin-left:17px;
        margin-right:17px;
    }

но тогда вам нужно будет удалить заполнение для IE 10+ (чтобы он не использовал оба), что вы можете сделать с этим медиа-запросом.


    @media screen and (-ms-high-contrast: active), (-ms-high-contrast: none) {
        input[type="text"] {
            padding-left:0;
            padding-right:0;
        }
    }

person ajmccallum    schedule 25.06.2015
comment
Черт, это умно. Молодец. - person z-x; 08.12.2016

Похоже, что IE применяет CSS, но не до самого конца строки. То есть на заполнение влияет значение, а не на значение, на которое влияет заполнение.

При установке отступа на 20 пикселей по всему периметру со значением по умолчанию, превышающим ширину по умолчанию, вы можете прокрутить до конца и увидеть отступ. http://jsfiddle.net/dZyzr/

Вам придется придумать какой-нибудь визуальный трюк или просто использовать другую таблицу стилей для IE.

person Robert    schedule 22.09.2010
comment
ответ mrust - реальное решение - person Wouter; 23.06.2015

Просто добавьте его в другой элемент, который выполняет отступы в IE, например, в div. Тогда вам не нужно беспокоиться об уродливых хаках, которые сделают вашу таблицу стилей css недействительной. Не забудьте удалить заполнение из ввода, чтобы оно не раздражало другие браузеры. Это также единственный способ дать текстовому полю фоновое изображение, которое не прокручивается вместе с текстом в IE.

person Randy the Dev    schedule 22.09.2010
comment
ответ mrust - реальное решение - person Wouter; 23.06.2015
comment
@Wouter Все ответы были в порядке, когда вопрос был задан в 2010 году, не нужно всех минусовать. - person Randy the Dev; 30.06.2015
comment
stackoverflow.com/help/привилегии/vote-down: используйте свои отрицательные голоса всякий раз, когда вы сталкиваетесь с... ответом, который явно ... неверно. В свете правильного ответа все остальные имхо явно неверны. Я понимаю, что в 2010 году этого не было, но я не понимаю, насколько это актуально сегодня. Ничего личного ;) - person Wouter; 30.06.2015

Это старый вопрос, но я исправил это в IE10, выполнив следующие действия:

Как это исправить Для IE-10:

::-ms-clear {
  display: none;
}

Или для конкретного ввода:

.anyinput::-ms-clear {
    display: none;
}

Дополнительную информацию см. здесь: http://sarveshkushwaha.blogspot.com/2014/06/ie-right-align-text-input-issue.html

person Chewpers    schedule 09.04.2015
comment
Просто использовал это для Kendo MaskedTextBox, отлично работал, когда ни один из других ответов не подходил/не подходил. Спасибо :-) - person tony; 14.04.2015
comment
Это была настоящая причина проблемы и решение. Спасибо! - person Wouter; 23.06.2015

Попробуйте это, т.е. хаки

input{
 padding-right : 20px /* all browsers, of course */  
 padding-right : 20px\9; /* IE8 and below */  
 *padding-right : 20px; /* IE7 and below */  
 _padding-right : 20px; /* IE6 */  
}

демонстрация

http://jsfiddle.net/srLQH/2/

Советы

отступы не работают с элементом формы html, т.е. введите текстовое поле, подобное этому, попробуйте изменить его на margin

input{
 margin-right : 20px /* all browsers, of course */  
 margin-right : 20px\9; /* IE8 and below */  
 *margin-right : 20px; /* IE7 and below */  
 _margin-right : 20px; /* IE6 */  
}

так как в jsfiddle у вас есть один элемент, почему бы вам не попробовать

поле слева вместо поля справа

person Pramendra Gupta    schedule 22.09.2010
comment
Пожалуйста, проверьте свою работу, прежде чем отправить свой ответ. Спасибо. - person Davis; 09.12.2014

Вы можете использовать свойство css text-indent для этого элемента:

Для примера:

<input style="text-indent:15px" name="" type="text" value="test testtesttesttesttesttest" />
person Brotheryura    schedule 27.05.2014
comment
Почему за это не проголосовали?! omg Сайт сломан. Я думаю, это потому, что они просили левый отступ, но я нашел это полезным. :) - person AturSams; 31.07.2014
comment
Было бы неплохо увидеть более эффективное решение - person Davis; 09.12.2014