首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計綜合問答

CSS 選擇器深度解析:tbody tr:hover td 與 tr.over td 的協作機制

     編輯:程式設計綜合問答

代碼片段:

tbody tr:hover td,
tbody tr.over td {
    background-color: #888888;
    color: #fff;
}

選擇器拆解

` 上時,該行所有 `` 內所有 `
選擇器含義生效條件
tbody tr:hover td滑鼠懸停在 `
` 的樣式現代瀏覽器(IE7+、所有現代瀏覽器)
tbody tr.over td擁有 class `over` 的 `
` 的樣式所有瀏覽器(含 IE6)

為何同時寫兩個?

兼容 IE6。IE6 僅支援 `` 標籤的 `:hover` 偽類,不支援 ``、`

` 等元素的 `:hover`。早期前端工程師會用 JavaScript 在 `onmouseover`/`onmouseout` 時切換 `over` class:

// jQuery 範例
$('tbody tr').hover(
    function() { $(this).addClass('over'); },
    function() { $(this).removeClass('over'); }
);

現代最佳實踐(2024+)

  1. 捨棄 IE6 支援:全球份額 < 0.1%,移除 `tr.over` 邏輯與 JS 綁定。
  2. 使用 `:hover` 僅作視覺增強:關鍵交互(如刪除按鈕顯示)勿依賴 `:hover`,觸控設備無懸停狀態。
  3. 優化選擇器效能:避免通用選擇器 `*`、屬性選擇器在大型表格中頻繁匹配;`tbody tr:hover td` 效能可接受。
  4. 無障礙補充:配合 `:focus-within` 支援鍵盤導航高亮:
tbody tr:hover td,
tbody tr:focus-within td {
    background-color: #888;
    color: #fff;
}

常見誤區

  • ❌ 以為 `tr:hover td` 會影響 `` → 僅選 ``,表頭需單獨寫 `tbody tr:hover th`。
  • ❌ 在 ``/`` 也生效 → 選擇器限定 `tbody` 範圍。
  • ❌ 覺得 `over` class 是框架內建 → 實為開發者自定義,需配合 JS 切換。

理解歷史包袱,才能在現代專案中果斷刪除無效代碼,保持 CSS 精簡。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved