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 {
    ...
}
Другие вопросы по тегам