Учитываются ли имена классов в CSS-селекторах?
Я постоянно читаю, что CSS не чувствителен к регистру, но у меня есть этот селектор
.holiday-type.Selfcatering
который, когда я использую в своем HTML, вот так, подбирается
<div class="holiday-type Selfcatering">
Если я изменил вышеприведенный селектор, как этот
.holiday-type.Selfcatering
Тогда стиль не подбирается.
Кто-то лжет.
Ответы
Ответ 1
CSS-селекторы обычно нечувствительны к регистру; это включает селекторы класса и идентификатора.
Но имена классов HTML чувствительны к регистру (см. определение атрибута), и это приводит к несоответствию во втором примере. Это не изменилось в HTML5. 1
Это связано с тем, что регистр чувствительности селекторов зависит от того, что говорит язык документа:
Синтаксис всех селекторов нечувствителен к регистру в пределах диапазона ASCII (т.е. [A-z] и [A-Z] эквивалентны), за исключением частей, которые не контролируются селекторами. Чувствительность к регистру имен элементов языка документа, имен атрибутов и значений атрибутов в селекторах зависит от языка документа.
Таким образом, учитывая элемент HTML с классом Selfcatering
, но без класса SelfCatering
, селекторы .Selfcatering
и [class~="Selfcatering"]
будут соответствовать ему, тогда как селекторы .SelfCatering
и [class~="SelfCatering"]
не будут. 2
Если тип документа определит имена классов как нечувствительные к регистру, то совпадение будет у вас независимо.
1 В режиме причуд для всех браузеров классы и идентификаторы чувствительны к регистру. Это означает, что несоответствующие регистры селекторы всегда будут совпадать. Это поведение одинаково во всех браузерах по устаревшим причинам и упоминается в этой статье.
2 Что бы это ни стоило, уровень селекторов 4 содержит предложенный синтаксис для принудительного поиска без учета регистра значений атрибутов с использованием [class~="Selfcatering" i]
или [class~="SelfCatering" i]
. Оба селектора будут сопоставлять элемент HTML или XHTML либо с классом Selfcatering
, либо с классом SelfCatering
(или, конечно, с обоими). Однако такого синтаксиса для селекторов класса или идентификатора не существует (пока?), Возможно, потому, что они несут семантику, отличную от обычных селекторов атрибутов (с которой не связана семантика), или из-за того, что сложно создать пригодный для использования синтаксис.
Ответ 2
Возможно, не ложь, а потребность в разъяснении.
Фактический сам css не чувствителен к регистру.
Например
wiDth:100%;
но имена, они должны быть чувствительны к регистру, чтобы быть уникальными идентификаторами.
Надеюсь, что это поможет.
Ответ 3
В режиме quirks все браузеры ведут себя как без учета регистра при использовании CSS class
и id names
.
В режиме quirks имена классов CSS и id нечувствительны к регистру. В в стандартном режиме они чувствительны к регистру. (Это также относится к getElementsByClassName.) читайте больше...
Иногда, когда у вас неправильные доктрины, например, ниже, ваш браузер переходит в режим quirks.
<!DOCTYPE html PUBLIC>
<!DOCTYPE html anytext>
вы должны использовать стандартный doctype
HTML 5
<!DOCTYPE html>
HTML 4.01 Строгий
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
HTML 4.01 Transitional
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
HTML 4.01 Frameset
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Frameset//EN" "http://www.w3.org/TR/html4/frameset.dtd">
XHTML 1.0 Строгий
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
XHTML 1.0 Transitional
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
XHTML 1.0 Frameset
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Frameset//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-frameset.dtd">
XHTML 1.1
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
если ваш CSS class
или id names
ведет себя case insensitive
, проверьте свой doctype.
Ответ 4
CSS не чувствителен к регистру.
Но в HTML5 класс и ID чувствительны к регистру
Итак, свойства CSS, значения, имена псевдоклассов, имена псевдоэлементов, имена элементов не чувствительны к регистру
И класс CSS, id, URL, семейства шрифтов чувствительны к регистру.
примечание: в режиме html quirks css нечувствителен к регистру даже для идентификатора и класса (если вы удалите объявление doctype)
Пример на CodePen: https://codepen.io/swapnilPakolu/pen/MWgvQyB?&editable=true#anon-signup
<!DOCTYPE html>
<html>
<head>
<title>CSS case sensitive ?</title>
<style>
P#id
{color:RED;}
p#ID
{font-size:30PX;}
#iD
{BORDER:4px solid blue;}
.class
{text-decoration:underLine;}
.CLASS
{background-color:graY;}
.Class
{font-weight:900;}
#ID::afTeR
{conTent:"colored text";
disPlay:bLock;
color:#fAdAcA;}
.class:hoVeR
{background-color:lightblue;}
</style>
</head>
<body>
<p id="id" class="class">red and underline</p>
<p id="ID" class="CLASS">30px font size and gray background</p>
<p id="iD" class="Class">bold and blue border</p>
</body>
</html>