IE8 не принимает несколько классов в режиме причуд? - PullRequest
1 голос
/ 02 ноября 2009

Я сталкиваюсь с ситуацией, когда IE8, кажется, отбрасывает селекторы CSS. Мне трудно в это поверить, но я не могу понять, что происходит.

В файле .css у меня есть это объявление:

#srp tr.objectPath.hover td {
    border-top:none;
}

Однако, когда я проверяю файл в IE8 с помощью встроенных инструментов разработчика, объявление изменяется следующим образом:

#srp TR.hover TD {
    border-top:medium none;
}

Меня не волнует изменение в кейсе или повторное формулирование правила, но удаление «.objectPath» является реальной проблемой, потому что оно нацелено на правило более широко, чем я намереваюсь.

Замечу, что эта страница находится и должна оставаться в режиме причуд.

Есть идеи, что происходит?

Спасибо!

Ответы [ 3 ]

2 голосов
/ 08 января 2010

В режиме Quirks IE 8 отображает страницу и обрабатывает DOM так же, как IE 5.5. По этой причине IE 8 в режиме Quirks игнорирует несколько классов. Это не ошибка в IE 8, если вы хотите, чтобы ваша страница анализировалась и отображалась правильно, то вы должны иметь правильный DOCTYPE для отображения страницы в режиме стандартов.

1 голос
/ 03 ноября 2009

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, поскольку у вас нет доступа ни к чему другому. Это возможно, но очень подвержено ошибкам .

Во-вторых, для этого потребуется создать функцию getElementsByClass в этом JavaScript, которая может принимать несколько имен классов в качестве параметров. Это будет очень значительный кусок кода .

Наконец, вы, вероятно, захотите указать, что этот код используется только IE , чтобы пользователям других браузеров не приходилось сталкиваться с какими-либо потенциальными проблемами из всего этого.

Чтобы уточнить, Я бы НЕ рекомендовал делать это . Вместо этого я хотел бы предложить связаться с кем-то, у кого есть доступ к исходному коду HTML (при условии, что вы действительно работаете в партнерстве с ними), чтобы они могли применить гораздо более простое исправление добавления класса objectPathhover к элементам tr, которые принадлежат к обоим классам или даже к их td детям.

0 голосов
/ 03 ноября 2009

Похоже, что у вас неправильный синтаксис в объявлении, но трудно точно сказать, что вы делаете. Вы пытаетесь соответствовать состоянию при наведении или существует класс, который на самом деле называется hover?

Если собираешься на государство, попробуй:

#srp tr.objectPath:hover td {
    ...
}

Если есть другой класс, вам может понадобиться 2 отдельных объявления:

#srp tr.objectPath td {
    ...
}

#srp tr.hover td {
    ...
}
...