Как я могу применить селектор CSS к значениям атрибута, чувствительным к регистру?
Если CSS и HTML являются нечувствительными к регистру языками (*), а W3C говорит
Чувствительность атрибутов имен и значений атрибутов в селекторах зависит от языка документа.
Как я могу смириться с тем, что значения атрибутов чувствительны к регистру в селекторах? Например,
div[title=TITLE] {color:green}
не делает текст зеленым для этого HTML:
<div title="title">This is a div</div>
Здесь скрипта.
Является ли это ошибкой в браузере? И когда я говорю "браузер", я имею в виду всех. Или я смотрю на незавершенную версию спецификаций CSS3? Что было бы странно, поскольку одна и та же строка текста также содержалась в спецификациях CSS2 здесь.
(*), за исключением некоторых функций, которые являются явными исключениями, такими как имена классов и идентификаторов. Обратите внимание, что в этом примере нет имен классов или идентификаторов.
Ответы
Ответ 1
HTML5 фактически содержит весь раздел, посвященный чувствительности к регистру для целей выбора селектора. Вот что он говорит об именах и значениях атрибутов:
Имена атрибутов и элементов HTML-элементов в документах HTML должны рассматриваться как ASCII без учета регистра для целей выбора.
Все остальное (значения атрибутов для элементов HTML, идентификаторов и классов в режиме отсутствия quirks и режима с ограниченными лимитами, а также имена элементов, имена атрибутов и значения атрибутов в документах XML) должны рассматриваться как чувствительные к регистру для целей выбора селектора.
Конечно, HTML 4 ничего не говорит о взаимодействии с селекторами, но он говорит, что атрибут title
, в частности, чувствителен к регистру. Поскольку селекторы зависят от языка документа для определения чувствительности к регистру, здесь нет никакой разницы.
XHTML следует тому же набору правил, что и в XML: все значения атрибутов должны быть чувствительны к регистру, поэтому селектор должен следовать этой чувствительности к регистру. Опять же, никакой разницы.
Итак, что вы видите, полностью по дизайну; нет проблемы с браузером или спецификацией.
Ответ 2
Вы ответили на свой вопрос:
Чувствительность атрибутов имен и значений атрибутов в селекторах зависит от языка документа.
Но, я думаю, это потому, что браузеру it
и it
не принадлежат те же строки. В браузере две разные вещи.
ИЗМЕНИТЬ ---
Вы добавили что-то хорошее в свой комментарий. Позвольте мне объяснить: парсер HTML/CSS читает HTML и CSS как нечувствительные к регистру. Это потому, что они есть. Но атрибутов нет, потому что они определяются пользователем. Таким образом, он читает их как чувствительные к регистру. В принципе, HTML и CSS стандартизированы. Атрибутов нет.
ИЗМЕНИТЬ СНОВА --- HTTP-методы стандартизированы (я думаю), поэтому для них не обязательно быть чувствительным к регистру.
Ответ 3
Строки в селекторах атрибутов сопоставляются случайным образом в HTML, и это в значительной степени. Я не знаю, почему они не будут - возьмите name
, например. name="foo"
и name="foo"
все равно отправляются на сервер по-разному. Даже id
чувствительны к регистру, если вы хотите, чтобы они были; этот работает отлично и проверяет, и кажется, что он должен соответствовать спецификации (но я бы не доверял ей работать везде).
См. спецификация (соответствующий бит находится в спецификации HTML, а не CSS):
Спецификация Selectors оставляет чувствительность к регистру идентификаторов, классов, имен элементов, имен атрибутов и значений атрибутов, определяемых языком хоста. [СЕЛЕКТОРЫ]
Уникальный идентификатор элементов HTML в документах, находящихся в режиме quirks, должен рассматриваться как ASCII без учета регистра для целей выбора.
Классы из атрибута класса элементов HTML в документах, которые находятся в режиме quirks, должны рассматриваться как ASCII без учета регистра для целей выбора.
При сравнении селектора типа элемента CSS с именами элементов HTML в документах HTML, селектор типа элемента CSS должен быть сначала преобразован в нижний регистр ASCII. Тот же селектор по сравнению с другими элементами должен сравниваться в соответствии с его оригинальным случаем. В обоих случаях сравнение чувствительно к регистру.
При сравнении части имени селектора атрибутов CSS с именами атрибутов без пространства имен в HTML-элементах в документах HTML часть имени селектора атрибутов CSS сначала должна быть преобразована в нижний регистр ASCII. Тот же селектор по сравнению с другими атрибутами должен сравниваться в соответствии с его оригинальным случаем. В обоих случаях сравнение чувствительно к регистру.
Все остальное (значения атрибутов для элементов HTML, идентификаторов и классов в режиме отсутствия quirks и режима с ограниченными лимитами, а также имена элементов, имена атрибутов и значения атрибутов в документах XML) должны рассматриваться как чувствительные к регистру для целей выбора селектора.
Ответ 4
Некоторые новые браузеры поддерживают этот синтаксис
div[title=TITLE i] { color:green; }
или
div[title=TITLE i] { color:green; }
которые соответствуют этому DIV:
<div title="title">This is a div</div>
Примечание: Поддержка: версия: Chrome >= 49.0, Firefox (Gecko) >= 47.0, Safari >= 9