マウスカーソル位置のセルの左端のみをハイライトするCSS

今日のネタもとはココ: カーソル位置のセルの上端と横端をハイライトする JavaScript
たぶん、「マウスオーバーしたトコのセルについて、その上端と左端のセルをハイライトするJavaScript」なんだと思います。何で「だと思います」かというと、JavaScriptはオフにしてるもので。確かめるのがめんどくさいのだ。
で、たいへんすばらしいワザなので、まねさせていただくコトにしました。といっても、前述のとおりJavaScriptはオフにしてるので、CSSのみでやってみようと思います。
たださすがにCSSでまったく同じコトはできないので、制限を付けます。

  • ハイライトするのは左端のセルのみ。上端のセルはJavaScript使わないとたぶん無理じゃないかと*1
  • colspanやrowspanはナシ
  • ハイライトの対象はtbody内のみ。theadとかtfootではハイライトさせない。

CSSはこんな感じ。

tbody>tr:hover>th:first-child, tbody>tr:hover>td:first-child {
  background: xxx; /* xxxを設定したい背景色にする */
}

簡単に説明すると、「『tbodyの子要素のうち、マウスカーソルがホバーしたtr要素について、その最初の子要素thまたはtd』の背景色をxxxにする」といったところでしょうか*2。…わかりにくいですねぇ。
あとはこんな感じの(X)HTMLを用意します。

<table summary="ハイライトのテスト">
  <caption>ハイライトのテスト</caption>
  <colgroup><col /></colgroup>
  <colgroup><col span="4" /></colgroup>
  <thead>
    <tr>
      <th />
      <th>A</th>
      <th>B</th>
      <th>C</th>
      <th>D</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <th>1</th>
      <td>A1</td>
      <td>B1</td>
      <td>C1</td>
      <td>D1</td>
    </tr>
    <tr>
      <th>2</th>
      <td>A2</td>
      <td>B2</td>
      <td>C2</td>
      <td>D2</td>
    </tr>
    <tr>
      <th>3</th>
      <td>A3</td>
      <td>B3</td>
      <td>C3</td>
      <td>D3</td>
    </tr>
    <tr>
      <th>4</th>
      <td>A4</td>
      <td>B4</td>
      <td>C4</td>
      <td>D4</td>
    </tr>
  </tbody>
</table>

実際にやってみます*3

A B C D
1 A1 B1 C1 D1
2 A2 B2 C2 D2
3 A3 B3 C3 D3
4 A4 B4 C4 D4

ブラウザの対応状況ですが、こんな感じになるのではなかろうかと。いいかげんでごめんなさい。

ブラウザ 対応状況 備考
IE 対応してない 7.0で対応する可能性アリ
Firefoxとか 対応してるハズ 1.5で確認済み
Opera 対応してるらしい id:danpaletaさんthx
Safari 対応してるらしい id:danpaletaさんthx

IE6には対応してませんが、IE7は対応してるかもしれません。任意の要素で:hoverが使えるようになるなど、CSSへの対応がかなり強化されるようですので期待してます。

*1:上端のセルの位置と大きさを絶対指定すればできそうな気もするケド、手で書くのはものすごく大変になりそうなので考えたくないです。

*2:厳密には違うんでしょうケド、気にしないでください。

*3:はてなダイアリーの制限により、前述のものから少し変更してます。