CSS-заполнитель не применяется в IE 11

У меня возникают проблемы с применением плейсхолдера css.

Я пытаюсь применить css (т.е. color:#898F9C;) к заполнителю поля ввода, используя селектор псевдокласса :-ms-input-placeholder, но он не работает в IE.

Демо

После некоторого удара и попытки я получаю решение своей проблемы, но это потрясающе.

Если я удалил цвет css/style по умолчанию в поле ввода, заполнитель css работал правильно в IE (это удивительное поведение Internet Explorer).

Мой CSS/стиль по умолчанию:

#search
{
    color:blue;
}

Рабочая скрипка без css по умолчанию для поля ввода

Мой вопрос: почему он не работает с CSS по умолчанию в IE?


person Ishan Jain    schedule 05.03.2014    source источник
comment
возможный дубликат переопределения шрифта-заполнителя css во всех браузерах   -  person Ram    schedule 26.02.2015


Ответы (5)


В дополнение к тому, что ответил Радж, при использовании префиксов поставщиков селекторы должны быть разделены на свои собственные наборы правил для каждого префикса.

Причина этого в том, что для того, чтобы язык CSS развивался, браузеры должны отбрасывать селекторы или объявления, которые они не понимают. Это позволяет добавлять новые функции, не беспокоясь о том, что старые браузеры будут интерпретировать их по-другому, а не просто удалять.

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

Вместо этого вы должны создать новый набор правил для каждого псевдокласса/элемента с префиксом поставщика. К сожалению, повторений много, но такова цена использования экспериментального CSS.

person David Storey    schedule 08.10.2014
comment
Хотя карма Stackoverflow наказывает вас за это, это действительно должно быть ответом Раджа на редактирование, а не отдельным ответом. - person Chris Moschini; 02.12.2015

Как правило, при стилизации заполнителей

При обнаружении неподдерживаемого префикса поставщика механизмы синтаксического анализа CSS сочтут все правило недействительным, поэтому требуется отдельный набор правил для каждого префикса поставщика. Кроме того, я обнаружил, что IE11 требует, чтобы флаг !important переопределял стили пользовательского агента по умолчанию:

/* - Chrome ≤56,
   - Safari 5-10.0
   - iOS Safari 4.2-10.2
   - Opera 15-43
   - Opera Mobile 12-12.1
   - Android Browser 2.1-4.4.4
   - Samsung Internet ≤6.2
   - QQ Browser */
::-webkit-input-placeholder {
    color: #ccc;
    font-weight: 400;
}

/* Firefox 4-18 */
:-moz-placeholder {
    color: #ccc;
    font-weight: 400;
}

/* Firefox 19-50 */
::-moz-placeholder {
    color: #ccc;
    font-weight: 400;
}

/* - Internet Explorer 10–11
   - Internet Explorer Mobile 10-11 */
:-ms-input-placeholder {
    color: #ccc !important;
    font-weight: 400 !important;
}

/* Edge (also supports ::-webkit-input-placeholder) */
::-ms-input-placeholder {
    color: #ccc;
    font-weight: 400;
}

/* CSS Pseudo-Elements Level 4 Editor's Draft
   - Browsers not mentioned in vendor prefixes
   - Browser of newer versions than mentioned in vendor prefixes */
::placeholder {
    color: #ccc;
    font-weight: 400;
}

Только IE11 нужен флаг !important.

Проверьте поддержку браузера на CanIUse

Решение вашей конкретной проблемы

В вашем примере вам понадобятся эти наборы правил для IE11:

#search:-ms-input-placeholder {
    color: #898F9C !important; /* IE11 needs the !important flag */
}

/* (...) Other vendor prefixed rulesets omitted for brevity */

#search::placeholder {
    color: #898F9C;
}
person Lars Gyrup Brink Nielsen    schedule 14.06.2015
comment
Что-нибудь еще? Я вообще не могу заставить заполнитель отображаться в IE 11, даже с этими настройками. Он работает во всех других браузерах. Я ненавижу IE, и еще больше ненавижу то, что все его используют. - person bgmCoder; 21.06.2017
comment
О, это как-то связано с режимом документа. Если я изменю режим документа на 10 и обратно на край, то это сработает. Я ненавижу режим документа. - person bgmCoder; 21.06.2017
comment
Затем не забудьте добавить <meta http-equiv="X-UA-Compatible" content="IE=edge" /> к <head>. Кроме того, используйте тип документа HTML 5, то есть <!DOCTYPE html>. - person Lars Gyrup Brink Nielsen; 22.06.2017
comment
@LarsGyrupBrinkNielsen !important решил проблему в IE11 :) спасибо - person yashhy; 22.06.2018
comment
Знание о необходимости !important для IE11 решило для меня проблему. - person MikeDev; 29.01.2020

определения должны быть разделены.

eg:

#search
{
    color:blue;
}

#search::-webkit-input-placeholder {
   color: red;
}

#search:-moz-placeholder {
   color: red;
}

#search::-moz-p {
   color: red;
}

#search:-ms-input-placeholder {
   color: red;
}

См. здесь: http://jsfiddle.net/DLGFK/203/.

person Raj Parmar    schedule 02.10.2014
comment
Привет, Радж Пармар, он не работает для Internet Explorer 9. Есть ли что-то, что нужно изменить, чтобы получить его, т.е. 9. - person Manju; 03.03.2015
comment
@Manju - Internet Explorer 9 и более ранние версии вообще не поддерживают атрибут HTML5 placeholder - из-за этого текст-заполнитель не будет виден и, конечно же, не может быть стилизован. - person mnsth; 01.08.2015
comment
Юки. Установка непрозрачности повлияет на весь элемент. Решение для этого - цвет: прозрачный (или argb) - person Tom; 18.10.2016
comment
@ Том, кто говорит о непрозрачности? - person Raj Parmar; 18.10.2016
comment
@RajParmar никто. Ваше решение работает просто отлично. Но я хотел, чтобы он работал с непрозрачностью, а не с цветом: красный: p - person Tom; 18.10.2016

Если кто-то пришел сюда, потому что он не может изменить font-size - в настоящее время font-size для заполнителя не поддерживается в IE и Edje. не похоже, что они собираются исправить это в ближайшее время. Ошибка № 11342294

person jonathana    schedule 26.09.2018

Я рекомендую использовать Autoprefixer для создания правильного вывода.

Вход

input::placeholder {
    color: red;
}

Выход

input::-webkit-input-placeholder {
    color: red;
}
input::-moz-placeholder {
    color: red;
}
input:-ms-input-placeholder {
    color: red;
}
input::-ms-input-placeholder {
    color: red;
}
input::placeholder {
    color: red;
}
person sidonaldson    schedule 02.07.2020