IE8 не принимает несколько классов в режиме причуд?
Я сталкиваюсь с ситуацией, когда IE8, кажется, отбрасывает селекторы CSS. Мне трудно в это поверить, но я не могу понять, что происходит.
В файле.css у меня есть это объявление:
#srp tr.objectPath.hover td {
border-top:none;
}
Однако, когда я проверяю файл в IE8 через встроенные средства разработчика, объявление изменяется на это:
#srp TR.hover TD {
border-top:medium none;
}
Меня не волнует изменение в кейсе или переформулировка правила, но удаление ".objectPath" является реальной проблемой, потому что оно нацелено на правило более широко, чем я намереваюсь.
Я отмечаю, что эта страница находится и должна оставаться в режиме причуд.
Есть идеи, что происходит?
Спасибо!
3 ответа
В режиме Quirks IE 8 отображает страницу и обрабатывает DOM так же, как IE 5.5. По этой причине IE 8 в режиме Quirks игнорирует несколько классов. Это не ошибка в IE 8, если вы хотите, чтобы ваша страница анализировалась и отображалась правильно, тогда вы должны иметь правильный DOCTYPE для отображения страницы в режиме стандартов.
tr.objectPath.hover
неверный синтаксис, если вы пытаетесь использовать hover
псевдо-класс. Правильный синтаксис будет с двоеточием (т.е. tr.objectPath:hover
). Когда машина читает ваш код, она читает objectPath
как tr
имя класса, но потом, когда он доходит до hover
он избавляется от старого имени класса и заменяет его на hover
класс (есть ли на самом деле какие-либо элементы, принадлежащие к этому классу или нет. Кроме того, если это так, то я не вижу, что вы пытаетесь сделать, ссылаясь на потомок экземпляра :hover
,
Это вы на самом деле используете hover
как имя класса (которое я бы не рекомендовал, так как это может смутить людей, читающих ваш код), и вы хотите, чтобы CSS применялся к td
дети tr
это как objectPath
а также hover
классы, вы можете подумать о создании нового класса для элементов обоих классов и использовании его вместо этого (т.е. #srp tr.newClass td
).
РЕДАКТИРОВАТЬ: Глядя дальше в этом вопросе, кажется, что это (пока) (еще) известная ошибка в IE. Я проверил его в IETester, и он, кажется, существует во всех версиях IE. Единственное решение, которое я мог видеть с вашей стороны, очень и очень грязное:
Во-первых, это потребует использования JavaScript в вашем CSS, поскольку у вас нет доступа ни к чему другому. Это возможно, но очень подвержено ошибкам.
Во-вторых, для этого потребуется создать в этом JavaScript функцию getElementsByClass, которая может принимать несколько имен классов в качестве параметров. Это был бы очень большой кусок кода.
Наконец, вы, вероятно, захотите изучить спецификацию этого кода, который будет использоваться только IE, чтобы пользователи других браузеров не сталкивались с какими-либо потенциальными проблемами из-за всего этого.
Чтобы уточнить, я бы не рекомендовал делать это. Вместо этого я хотел бы предложить связаться с кем-то, у кого есть доступ к исходному коду HTML (при условии, что вы на самом деле работаете в партнерстве с ними), чтобы они могли применить гораздо более простое исправление добавления objectPathhover
класс к tr
элементы, которые принадлежат обоим классам или даже их td
дети.
Похоже, у вас есть неправильный синтаксис в вашем объявлении, но трудно точно сказать, что вы делаете. Вы пытаетесь соответствовать состоянию при наведении или существует класс, который на самом деле называется hover?
Если собираетесь на государство, попробуйте:
#srp tr.objectPath:hover td {
...
}
Если есть другой класс, вам может понадобиться 2 отдельных объявления:
#srp tr.objectPath td {
...
}
#srp tr.hover td {
...
}