gpt4 book ai didi

html - 如何突出显示 CSS 网格单元格?

转载 作者:行者123 更新时间:2023-11-28 08:44:01 26 4
gpt4 key购买 nike

考虑一个 CSS 网格,其中的行可以具有可变高度:

.grid {
display: grid;
grid-template-columns: repeat(8, 1fr);
grid-column-gap: 16px;
grid-row-gap: 8px;
}

.first {
grid-column: 1 / 3;
background-color: #ccc;
}

.second {
grid-column: 5 / 6;
grid-row: 2 / 5;
background-color: #ccc;
height: 120px;
}
<div class="grid">
<div class="first">First</div>
<div class="second">Second</div>
</div>

当悬停在 DevTools 中的网格元素上时,Chrome 会像这样可视化网格:

enter image description here

如何使用 CSS(或 JavaScript,如果需要)实现类似的网格叠加效果?

注意事项:

  1. 应突出显示所有网格单元格,即使网格项未占据它们也是如此。
  2. 网格单元格的高度可以变化(在上面的示例中,第一行的高度小于其余行的高度)。

最佳答案

使用 JS 的一个想法是读取 grid-template-columnsgrid-template-rows 的计算值,以便在您拥有的网格之上创建另一个网格充满占位符元素。

这是一个基本的例子。您应该在悬停时更新值,因为 getComputedStyle 将返回像素值:

var grid = document.querySelector('.grid');
var overlay = document.createElement("div");
overlay.className = 'overlay';
overlay.style.gridTemplateRows = window.getComputedStyle(grid, null).getPropertyValue("grid-template-rows");
overlay.style.gridTemplateColumns = window.getComputedStyle(grid, null).getPropertyValue("grid-template-columns");
grid.appendChild(overlay);

/* Get the number of items*/
var Nc = overlay.style.gridTemplateColumns.split(" ").length;
var Nr = overlay.style.gridTemplateRows.split(" ").length;
/* Create placeholder items*/
for (var i = 0; i < Nc * Nr; i++) {
var d = document.createElement("div");
overlay.appendChild(d);
}

/* Update the values on hover*/
grid.addEventListener('mouseover', function() {
overlay.style.gridTemplateRows = window.getComputedStyle(grid, null).getPropertyValue("grid-template-rows");
overlay.style.gridTemplateColumns = window.getComputedStyle(grid, null).getPropertyValue("grid-template-columns");
})
.grid {
display: grid;
grid-template-columns: repeat(8, 1fr);
grid-column-gap: 16px;
grid-row-gap: 8px;
position: relative;
overflow:hidden;
}

.first {
grid-column: 1 / 3;
background-color: #ccc;
}

.second {
grid-column: 5 / 6;
grid-row: 2 / 5;
background-color: #ccc;
height: 120px;
}

.overlay {
position: absolute;
display: grid;
top: 0;
left: 0;
right: 0;
bottom: 0;
grid-gap: inherit;
opacity: 0;
pointer-events: none;
}

.overlay>* {
border: 1px dotted;
background: rgba(0, 125, 0, 0.4);
}

.grid:hover .overlay {
opacity: 1;
}
<div class="grid">
<div class="first">First</div>
<div class="second">Second</div>
</div>

关于html - 如何突出显示 CSS 网格单元格?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59205867/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com