• Открыть меню    

    Подсветить строку и колонку таблицы при помощи CSS

    Подсветить строку и колонку таблицы при помощи CSS, при наведении курсора мышки на ячейку таблицы Подсветить строку таблицы при помощи CSS достаточно легко: tr:hover {background: yellow;} и задача выполнена. Подсветить колонку всегда было немного сложнее, так как нет простого HTML-элемента, который бы являлся родителем ячейки таблицы в столбце. Есть просто решение на javascript, но в этой заметке мы рассмотрим решение без использования javascript.

    Трюк в использовании громадных псевдоэлементов для элемента td, при этом псевдоэлементы скрываются за пределами таблицы

    Реализовывать подсветку будем при помощи псевдоэлементов, при этом у псевдоэлемента ширина должна быть равна ширине ячейки, а верхнее отрицательное поле должно быть равно половине значения от высоты (которая, в свою очередь, назначается с запасом, чтобы перекрыть любую по высоте таблицу) псевдоэлемента.

    CSS

    table {
      overflow: hidden;
    }
    
    tr:hover {
      background-color: #ffa;
    }
    
    td:hover::after,
    th:hover::after {
      content: "";
      position: absolute;
      background-color: #ffa;
      left: 0;
      top: -5000px;
      height: 10000px;
      width: 100%;
      z-index: -1;
    }

    Отрицательный z-index располагает псевдоэлемент ниже контента. Отрицательный z-index любопытный трюк, но будьте осторожны, когда таблица вложена в другие элементы с фоном, иначе подсветка пойдет под ними.

    See the Pen Простая подсветка строки и колонки на CSS by dnzl (@dnzl) on CodePen.

    Как заставить работать с сенсорными дисплеями

    Псевдокласс :hover любопытно работает на touch-устройствах. Во-первых, элемент должен быть фокусируемым, что по умолчанию для ячеек таблиц не так. Вы, конечно, можете добавить обработчик события click на ячейку таблицы и реализовать все на JavaScript, но вот метод, позволяющий сохранить большую часть работы в CSS:

    jQuery

    // Для любых мобильных устройст по вашему желанию
    if (screen.width < 500) {
    
      // :hover will trigger also once the cells are focusable
      // you can use this class to separate things
      $("body").addClass("nohover");
    
      // Делаем все ячейки фокус доступными
      $("td, th")
        .attr("tabindex", "1")
        // При нажатии ставим на них фокус
        .on("touchstart", function() {
          $(this).focus();
        });
    
    }
    

    Затем в CSS вам потребуется следующие стили:

    CSS

    td:focus::after,
    th:focus::after {
      content: '';
      background-color: lightblue;
      position: absolute;
      left: 0;
      height: 10000px;
      top: -5000px;
      width: 100%;
      z-index: -1;
    }
    
    td:focus::before {
      background-color: lightblue;
      content: '';
      height: 100%;
      top: 0;
      left: -5000px;
      position: absolute;
      width: 10000px;
      z-index: -1;
    }

    В моем финальном примере, я немного поправил CSS с целью исключить срабатывание наведения на пустых ячейках, при наведении на заголовок в элементе thead срабатывает выделение только столбца, а при наведении на заголовок в tbody выделяется лишь строка.

    Здесь вы можете просмотреть полное демо.

    источник

    Комментарии к статье