Как я могу получить градиентное обрамление ячейки td по всей таблице?

Градиентное выделение ячейки таблицы

table {
  width:200px;
  height: 100px;
}

td {
 width:20px;
 height: 20px;
 background: gray;
}

td:hover {
  background: linear-gradient(270deg, rgba(42, 115, 163, 0.354167) 0%, rgba(42, 115, 163, 0.2) 0.01%, #2A73A3 34.8%, rgba(42, 115, 163, 0.2) 98.82%);

  border: 1px solid;

  border-image-source: linear-gradient(270deg, rgba(42, 115, 163, 0.354167) 0%, rgba(42, 115, 163, 0.2) 0.01%, #2A73A3 34.8%, rgba(42, 115, 163, 0.2) 98.82%);
}
<table>
  <tr>
    <td>
      <span></span>
    </td>
    <td>
      <span></span>
    </td>
    <td>
      <span></span>
    </td>
  </tr>
  <tr>
    <td>
      <span></span>
    </td>
    <td>
      <span></span>
    </td>
    <td>
      <span></span>
    </td>
  </tr>
  <tr>
    <td>
      <span></span>
    </td>
    <td>
      <span></span>
    </td>
    <td>
      <span></span>
    </td>
  </tr>
  <tr>
    <td>
      <span></span>
    </td>
    <td>
      <span></span>
    </td>
    <td>
      <span></span>
    </td>
  </tr>
<table>

CSS с макета, пробовал бордером, тенями, background, не пойму в какую сторону копать, чтобы получить такой результат, может как то можно использовать Jquery ...


Ответы (2 шт):

Автор решения: puffleeck

получить градиентное обрамление

вы про полоски на всю таблицу от ховерной ячейки?

:root{
--grid-w: 300px;
--grid-h: 300px;
}
p{margin: 0; z-index: 3;
}
#x{
position: relative;
display: grid;
grid-template-columns: repeat(5, 1fr);
grid-auto-rows: 1fr;
height: var(--grid-h);
width: var(--grid-w);
overflow: hidden;
border: 1px solid red;
z-index: 2;
}
p:hover:after, p:hover:before{
content: '';
position: absolute;
pointer-events: none;
height: 20%;
width: 20%;
z-index: 1;
}
p:hover:after{
width: var(--grid-w);
background: linear-gradient(90deg, lightblue, darkblue, lightblue);
left: 0;
}
p:hover:before{
height: var(--grid-h);
top: 0;
background: linear-gradient(0deg, lightblue, darkblue, lightblue);
}
<div id='x'>
<p>1</p><p>1</p><p>1</p><p>1</p><p>1</p>
<p>1</p><p>1</p><p>1</p><p>1</p><p>1</p>
<p>1</p><p>1</p><p>1</p><p>1</p><p>1</p>
<p>1</p><p>1</p><p>1</p><p>1</p><p>1</p>
<p>1</p><p>1</p><p>1</p><p>1</p><p>1</p>
</div>

ну как то так...

→ Ссылка
Автор решения: Gene Erbin

Такой вариант с помощью псевдоэлементов ::after и ::before, которые позиционированы абсолютно относительно всей таблицы и имеют по две границы фиксированной ширины/высоты (как у ячейки таблицы).

:root {
  --cell-width: 30px;
  --cell-height: 30px;
}
table {
  border: 1px solid black;
  border-collapse: collapse;
  position: relative;
}
th, td {
  width: var(--cell-width);
  height: var(--cell-height);
}
td:not(.name):hover {
  background: #dce8f1;
}
td:not(.name):hover:after, td:not(.name):hover:before{
  content: '';
  position: absolute;
  pointer-events: none;
  z-index: 1;
}
td:not(.name):hover:after{
  width: 100%;
  height: var(--cell-height);
  left: 0px;
  transform: translateY(-50%);
  border-top: 1px solid transparent;
  border-bottom: 1px solid transparent;
  border-image-source: linear-gradient(90deg, rgba(42, 115, 163, 0.354167) 0%, rgba(42, 115, 163, 0.2) 0.01%, #2A73A3 34.8%, rgba(42, 115, 163, 0.2) 98.82%);
  border-image-slice: 1;
}
td:not(.name):hover:before{
  height: 100%;
  width: var(--cell-width);
  top: 0px;
  border-left: 1px solid transparent;
  border-right: 1px solid transparent;
  border-image-source: linear-gradient(0deg, rgba(42, 115, 163, 0.354167) 0%, rgba(42, 115,     163, 0.2) 0.01%, #2A73A3 34.8%, rgba(42, 115, 163, 0.2) 98.82%);
  border-image-slice: 1;
}
<table>
  <thead>
    <th></th>
    <th>Пн</th>
    <th>Вт</th>
    <th>Ср</th>
    <th>Чт</th>
    <th>Пт</th>
    <th>Сб</th>
    <th>Вс</th>
  </thead>
  <tr>
    <td class="name">Андрей</td>
    <td></td>
    <td></td>
    <td></td>
    <td></td>
    <td></td>
    <td></td>
    <td></td>
  </tr>
  <tr>
    <td class="name">Павел</td>
    <td></td>
    <td></td>
    <td></td>
    <td></td>
    <td></td>
    <td></td>
    <td></td>
  </tr>
  <tr>
    <td class="name">Максим</td>
    <td></td>
    <td></td>
    <td></td>
    <td></td>
    <td></td>
    <td></td>
    <td></td>
  </tr>
  <tr>
    <td class="name">Ольга</td>
    <td></td>
    <td></td>
    <td></td>
    <td></td>
    <td></td>
    <td></td>
    <td></td>
  </tr>
  <tr>
    <td class="name">Виталий</td>
    <td></td>
    <td></td>
    <td></td>
    <td></td>
    <td></td>
    <td></td>
    <td></td>
  </tr>
</table>

→ Ссылка