У меня есть таблица, где:
- Строки и ячейки обычно не имеют заданного фона; фон таблицы просвечивает.
- Строки с псевдоклассом
:hover
имеют цвет фона для их выделения, например, для отслеживания строк при перемещении мыши по таблице (в IE7 и во всем остальном современном).
- Некоторые ячейки должны быть выделены другим цветом фона (и различными другими стилями); у них есть свой собственный класс.
Проблема в том, что я хочу, чтобы специальные ячейки , а не были особенными, когда строка подсвечивается при наведении курсора; это выглядит действительно странно. Мне нужно поддерживать IE7 (к счастью, не 6!) И естественно хочу поддерживать Chrome, Firefox, Safari и большинство других современных браузеров.
Вот урезанные версии соответствующих правил:
table.status
{
border-collapse: collapse;
background-color: #CDD8ED;
}
table.status tr:hover
{
background-color: #FAF0BD;
}
/* "down" cells are special */
table.status td.down
{
background-color: #D22;
color: white;
}
Вещи, которые я пробовал:
- Псевдокласс
:not
из CSS3: table.status tr:not(:hover) td.down
. Работает в Chrome и Firefox, а не в IE7.
- Более конкретное правило (например,
table.status tr:hover td.down
), которое повторяет свойства, используя ключевое слово inherit
. (Довольно хрупко, нужно быть уверенным при добавлении стилей к одному правилу, которое вы добавляете, наследуют стили к другому правилу.) Снова работает в Chrome и Firefox, а не в IE7.
Вещи, которые я действительно не хотел бы делать:
- Более конкретное правило, устанавливающее соответствующие стили, чтобы они соответствовали стилям таблицы. Blech, даже более хрупкий, чем
inherit
вещь выше. Но функционал.
- Используйте JavaScript для эффекта наведения (хотя это также имеет преимущество в поддержке IE6). Наведение в JavaScript, как правило, связано с большими накладными расходами, чем встроенные.
Есть ли другое решение CSS?
FWIW, вот моя тестовая страница:
<!DOCTYPE HTML>
<html>
<head>
<meta http-equiv="Content-type" content="text/html;charset=UTF-8">
<title>Hover Test Page</title>
<style type='text/css'>
body
{
font-family: sans-serif;
}
table.status
{
border-collapse: collapse;
background-color: #CDD8ED;
}
table.status th
{
text-align: left;
background-color: #14429E;
color: #FEFEFE;
}
table.status td, table.status th
{
padding: 2px 0.5em;
}
table.status tr:hover
{
background-color: #FAF0BD;
}
/*table.status tr:not(:hover) td.down*/
table.status td.down
{
background-color: #D22;
color: white;
font-weight: bold;
}
/*table.status tr:hover td.down
{
background-color: inherit;
color: inherit;
font-weight: inherit;
}*/
</style>
</head>
<body>
<table class='status'>
<thead>
<tr>
<th>Server</th>
<th>Details</th>
<th>www</th>
<th>mail</th>
</tr>
</thead>
<tbody>
<tr>
<td>Server1</td>
<td>blah blah blah</td>
<td class='up'>Up</td>
<td class='up'>Up</td>
</tr>
<tr>
<td>Server2</td>
<td>blah blah blah</td>
<td class='up'>Up</td>
<td class='down'>Down</td>
</tr>
<tr>
<td>Server3</td>
<td>blah blah blah</td>
<td class='sched'>Down (scheduled)</td>
<td class='sched'>Down (scheduled)</td>
</tr>
<tr>
<td>Server4</td>
<td>blah blah blah</td>
<td class='up'>Up</td>
<td class='up'>Up</td>
</tr>
</tbody>
</table>
</body>
</html>