css-grid - CSS网格重叠单元格而不破坏正常流程
问题描述
我想知道是否可以指定一个网格单元格与网格的另一个区域重叠,而不必明确指定它重叠的单元格的行和列。
考虑一个为期两周的日历:
<div class="calendar">
<span>1</span>
<span>2</span>
<span>3</span>
<span>4</span>
<span>5</span>
<span>6</span>
<span>7</span>
<span>8</span>
<span>9</span>
<span>10</span>
<span>11</span>
<span>12</span>
<span>13</span>
<span>14</span>
</div>
使用网格:
.calendar {
display: grid;
grid-template-columns: repeat(7, 1fr);
}
到目前为止,一切都很好:
我现在想添加一个范围突出显示单元格:
<!-- ... -->
<span>13</span>
<span>14</span>
<span class="range"></span>
</div>
它应该跨越第一周的周三至周日:
.range {
grid-column: 3/8;
grid-row: 1;
width: 100%;
height: 100%;
background: skyblue;
}
除非我现在明确地为五个受影响的日期单元格中的每一个指定行和列,否则不会自动重叠。
为了获得我想要的重叠,我需要添加:
.calendar span:nth-child(3) {
grid-row: 1;
grid-columN: 3;
}
.calendar span:nth-child(4) {
grid-row: 1;
grid-columN: 4;
}
/* etc... */
结果:
有没有办法说所有单元格都应该按顺序自动流动,除非另有说明,即使它们重叠?
片段
.calendar {
display: grid;
grid-template-columns: repeat(7, 1fr);
width: 30em;
}
.range {
grid-column: 3/8;
grid-row: 1;
width: 100%;
height: 100%;
background: skyblue;
z-index: -1;
}
/* I don't want to do this: */
.calendar span:nth-child(3) {
grid-row: 1;
grid-columN: 3;
}
.calendar span:nth-child(4) {
grid-row: 1;
grid-columN: 4;
}
.calendar span:nth-child(5) {
grid-row: 1;
grid-columN: 5;
}
.calendar span:nth-child(6) {
grid-row: 1;
grid-columN: 6;
}
.calendar span:nth-child(7) {
grid-row: 1;
grid-columN: 7;
}
<div class="calendar">
<span>1</span>
<span>2</span>
<span>3</span>
<span>4</span>
<span>5</span>
<span>6</span>
<span>7</span>
<span>8</span>
<span>9</span>
<span>10</span>
<span>11</span>
<span>12</span>
<span>13</span>
<span>14</span>
<span class="range"></span>
</div>
解决方案
您只需要定位绝对范围,这会使它失去流动性。(您还需要设置日历位置相对)
.calendar {
display: grid;
grid-template-columns: repeat(7, 1fr);
width: 30em;
position: relative;
}
.range {
grid-column: 3/8;
grid-row: 1 / span 1;
width: 100%;
height: 100%;
background: skyblue;
z-index: -1;
position: absolute;
}
<div class="calendar">
<span>1</span>
<span>2</span>
<span>3</span>
<span>4</span>
<span>5</span>
<span>6</span>
<span>7</span>
<span>8</span>
<span>9</span>
<span>10</span>
<span>11</span>
<span>12</span>
<span>13</span>
<span>14</span>
<span>15</span>
<span class="range"></span>
</div>
推荐阅读
- php - 如何将文本框中的信息添加到 SQL
- date - 如何在 GStreamer 视频流上显示日期(文本叠加)?
- r - 构建一个迭代其他数据帧的大数据帧
- azure - iOS xamarin - 在应用内购买时首次启动时崩溃
- sqlite - 将数据从 Oracle (SQL Developer) 移动到 MS SQL Server 的有效方法
- html - 关于 create-react-app 的初学者问题:先完成 HTML/CSS,然后添加到应用程序
- r - 在 for 循环期间设置数据帧的子集时,我得到一个零行数据帧而不是预期的一行?
- authentication - 具有动态客户端注册的 OAuth2 资源所有者密码凭证
- python - 使用 xml 作为数据发布请求给出错误 415
- angular - 登录后导航到选项卡时如何修复“错误:无法匹配任何路由”?