Обработка двоеточия в идентификаторе элемента в селекторе CSS

JSF устанавливает идентификатор поля ввода на search_form:expression. Мне нужно указать стиль для этого элемента, но это двоеточие выглядит для браузера как начало псевдоэлемента, поэтому он помечается как недопустимый и игнорируется. Есть ли способ избежать толстой кишки или чего-то в этом роде?

input#search_form:expression {
  ///...
}
mothereffingcssescapes.com/#search_form%3Aexpression
Mathias Bynens 06.07.2011 09:28
Jomohke's отвечать should be selected as the correct one.
kzh 31.08.2012 22:14
Приемы 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 сценарий полностью изменился.
150
2
54 201
8
Перейти к ответу Данный вопрос помечен как решенный

Ответы 8

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

Обратная косая черта:

input#search_form\:expression {  ///...}

Я обнаружил, что IE7 не поддерживает обратную косую черту.

Craig Hyatt 03.10.2008 00:05

Вероятно, лучше также избегать подчеркивания, чтобы избежать проблем в IE6. См. mothereffingcssescapes.com/#search_form%3Aexpression и мой ответ для получения дополнительной информации.

Mathias Bynens 06.07.2011 09:32

Я только что столкнулся с проблемой с именами элементов Magento с двоеточиями в идентификаторах, этот ответ был МАССИВНОЙ помощью. Просто хотел поблагодарить вас и дать небольшой лайк.

Dwayne Charrington 28.10.2011 04:12

Этот ответ не сработал для IE8 в режиме совместимости. Другой ответ на тот же вопрос работал. в основном A вместо \:.

Merlyn Morgan-Graham 30.03.2012 06:32

Еще одна причина ненавидеть Magento. :-(

Vee 25.07.2015 13:20

\: отлично работает в IE 11, а при эмуляции IE 8 - IE 10. Он ломается при эмуляции IE 7.

Andrew 03.10.2017 20:04

Вы можете избежать этого с помощью обратной косой черты

input#search_form\:expression {
  ///...
}

От CSS Spec

4.1.3 Символы и регистр

Всегда соблюдаются следующие правила:

Все таблицы стилей CSS нечувствительны к регистру, за исключением частей, которые не контролируются CSS. Например, чувствительность к регистру значений атрибутов HTML «id» и «class», имен шрифтов и URI выходит за рамки данной спецификации. Обратите внимание, в частности, что имена элементов нечувствительны к регистру в HTML, но чувствительны к регистру в XML. В CSS идентификаторы (включая имена элементов, классы и идентификаторы в селекторах) могут содержать только символы [a-z0-9] и символы ISO 10646 U + 00A1 и выше, а также дефис (-) и подчеркивание (_). ; они не могут начинаться с цифры или дефиса, за которым следует цифра. Идентификаторы также могут содержать экранированные символы и любой символ ISO 10646 в виде числового кода (см. Следующий пункт). Например, идентификатор «Ч / Б?» может быть записано как "Ч / Б \?" или "B \ 26 W \ 3F". Обратите внимание, что Unicode является кодовым эквивалентом ISO 10646 (см. [UNICODE] и [ISO10646]).

В CSS 2.1 символ обратной косой черты () обозначает три типа экранирования символов. Во-первых, внутри строки обратная косая черта, за которой следует новая строка, игнорируется (т.е. считается, что строка не содержит ни обратной косой черты, ни новой строки).

Во-вторых, он отменяет значение специальных символов CSS. Любой символ (кроме шестнадцатеричной цифры) может быть экранирован обратной косой чертой, чтобы удалить его особое значение. Например, "\" "- это строка, состоящая из одной двойной кавычки. Препроцессоры таблиц стилей не должны удалять эти обратные косые черты из таблицы стилей, так как это изменит значение таблицы стилей.

В-третьих, экранирование обратной косой черты позволяет авторам ссылаться на символы, которые им нелегко вставить в документ. В этом случае за обратной косой чертой следует не более шести шестнадцатеричных цифр (0..9A..F), которые обозначают символ ISO 10646 ([ISO10646]) с этим числом, которое не должно быть нулевым. (В CSS 2.1 не определено, что произойдет, если таблица стилей действительно содержит символ с нулевым кодом Unicode.) Если символ в диапазоне [0-9a-f] следует за шестнадцатеричным числом, необходимо указать конец числа Чисто. Это можно сделать двумя способами:

с пробелом (или другим символом пробела): «\ 26 B» («& B»). В этом случае пользовательские агенты должны рассматривать пару «CR / LF» (U + 000D / U + 000A) как один символ пробела. предоставив ровно 6 шестнадцатеричных цифр: "\ 000026B" ("& B") Фактически, эти два метода можно комбинировать. После шестнадцатеричного escape-символа игнорируется только один пробельный символ. Обратите внимание, что это означает, что «реальный» пробел после escape-последовательности должен быть либо экранирован, либо удвоен.

Если число выходит за пределы диапазона, разрешенного Unicode (например, «\ 110000» превышает максимальное значение 10FFFF, разрешенное в текущем Unicode), UA может заменить escape-символ «символом замены» (U + FFFD). Если символ должен отображаться, UA должен показать видимый символ, например глиф «отсутствующий символ» (см. 15.2, пункт 5).

Примечание: экранирование обратной косой черты, где разрешено, всегда считается частью идентификатора или строки (т. Е. "\ 7B" не является пунктуацией, даже если "{" и "\ 32" разрешено в начале имя класса, даже если "2" нет). Идентификатор «te \ st» в точности совпадает с идентификатором «test».

Вероятно, лучше также избегать подчеркивания, чтобы избежать проблем в IE6. См. mothereffingcssescapes.com/#search_form%3Aexpression и мой ответ для получения дополнительной информации.

Mathias Bynens 06.07.2011 09:32

Использование обратной косой черты перед двоеточием не работает во многих версиях IE (особенно 6 и 7; возможно, в других).

Обходной путь - использовать шестнадцатеричный код для двоеточия - \ 3A.

пример:

input#search_formA expression {  }

Это работает во всех браузерах: включая IE6 + (и, возможно, более ранние?), Firefox, Chrome, Opera и т. д. Это часть Стандарт CSS2.

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

sholsinger 14.10.2010 18:59

Обратная косая черта отлично работает в IE6 - это неэкранированное подчеркивание, которое заставляет игнорировать все правило. См. мой ответ для получения дополнительной информации.

Mathias Bynens 06.07.2011 09:27

+1; Обратная косая черта + двоеточие не работает в IE8 в режиме совместимости. Этот ответ решает эту проблему и совместим с несколькими браузерами.

Merlyn Morgan-Graham 30.03.2012 06:29

\: отлично работает в IE 11, а при эмуляции IE 8 - IE 10. Он ломается при эмуляции IE 7.

Andrew 03.10.2017 20:04

У меня была такая же проблема с двоеточиями, и я не мог их изменить (не мог получить доступ к коду, выводящему двоеточия), и я хотел получить их с помощью селекторов CSS3 с jQuery.

Я поместил это здесь, потому что это может быть полезно для кого-то

input[id = "something:something"] отлично работал в селекторах jQuery, а также может работать в таблицах стилей (могут быть проблемы с браузером)

Вы можете просто использовать document.getElementById('search_form:expression') или, например, при использовании querySelector или jQuery: $('#search\_form\:expression'). См. mothereffingcssescapes.com/#search_form%3Aexpression и мой ответ для получения дополнительной информации.

Mathias Bynens 06.07.2011 09:31

В JSF 2,0 вы можете указать разделитель, используя файл web.xml в качестве параметра инициализации javax.faces.SEPARATOR_CHAR

Прочитай это:

Я обнаружил, что только этот формат у меня работает в IE7 (в том числе и в Firefox), и я использую JSF / Icefaces 1.8.2.

Say form id=FFF, element id=EEE

var jq=jQuery.noConflict();
jq(document).ready(function() {
jq("[id=FFF:EEE]").someJQueryLibFunction({ jQuery lib function options go here })
});

Вы можете просто использовать document.getElementById('search_form:expression') или, например, при использовании querySelector или jQuery: $('#search\_form\:expression'). См. mothereffingcssescapes.com/#search_form%3Aexpression и мой ответ для получения дополнительной информации.

Mathias Bynens 06.07.2011 09:30

На самом деле он говорил о правилах CSS, а не о JS.

Haroldo_OK 27.05.2013 22:35

эта статья расскажет вам, как избежать любого символа в CSS.

Теперь для этого есть даже инструмент: http://mothereff.in/css-escapes#0search%5fform%3Aexpression

TL; DR Все остальные ответы на этот вопрос неверны. Вам нужно избегать подчеркивания (чтобы IE6 не игнорировал правило в некоторых крайних случаях) и символа двоеточия, чтобы селектор работал правильно в разных браузерах.

Технически символ двоеточия может быть экранирован как \:, но это не работает в IE <8, поэтому вам придется использовать a:

#search\_forma expression {}

\: не работает в IE8 в режиме совместимости. A делает.

Merlyn Morgan-Graham 30.03.2012 06:30

@ MerlynMorgan-Graham Хороший улов! Я обновлю инструмент и сообщение в блоге как можно скорее.

Mathias Bynens 30.03.2012 13:01

Я работаю в среде ADF, и мне часто приходится использовать JQuery для выбора элементов. Этот формат мне подходит. Это также работает в IE8.

$('[id* = "gantt1::majorAxis"]').css('border-top', 'solid 1px ' + mediumGray);

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