我有一个CSS网格来表示井字游戏。我只想在网格内部放置一个边框。今天,我将这样做:
:root {
--border: 2px dashed #393939;
--symbol-color: #FF7F5B;
}
.grid {
height: 100%;
display: grid;
grid-template-columns: repeat(3, calc(100%/3));
grid-template-rows: repeat(3, calc(100%/3));
}
.child {
display: flex;
align-items: center;
align-content: center;
color: var(--symbol-color);
font-size: 2.5rem;
}
.child:nth-child(1),
.child:nth-child(2),
.child:nth-child(3) {
border-bottom: var(--border);
}
.child:nth-child(7),
.child:nth-child(8),
.child:nth-child(9) {
border-top: var(--border);
}
.child:nth-child(1),
.child:nth-child(4),
.child:nth-child(7) {
border-right: var(--border);
}
.child:nth-child(3),
.child:nth-child(6),
.child:nth-child(9) {
border-left: var(--border);
}
<div class="grid">
<div class="child"></div>
<div class="child"></div>
<div class="child"></div>
<div class="child"></div>
<div class="child"></div>
<div class="child"></div>
<div class="child"></div>
<div class="child"></div>
<div class="child"></div>
</div>
结果:
这个解决方案工作,但我觉得它没有吸引力。你有一个想法重构这个解决方案?
7条答案
按热度按时间tuwxkamq1#
既然你想要一个风格化的边框(在本例中是虚线),那么你的方法和其他答案中采用的方法似乎是有用的。
但是,如果您决定使用简单的实线边框,那么方法可以简化。只需使用网格的背景色作为边框颜色,并使用
grid-gap
属性作为边框宽度。vyswwuz22#
有一件事,你可以像下面这样更好地使用
nth-child
选择器,而不是一个接一个地定位。cuxqih213#
您可以考虑此解决方案。
您可以使用grid-template-columns来实现这一点。
汽车;
超文本标记语言
为了帮助你形象化,我创建了一个示例代码
http://plnkr.co/edit/gIeumXLt0k3FPVCgGlDd?p=preview
希望能帮上忙
干杯!
sq1bmfud4#
您可以从this answer减少
nth-child
选择器的数量。cedebl8k5#
尝试在
.child
类中使用负边距,此处overflow:hidden
在父.grid
类中...此处无需使用nth-child
选择器...of1yzvn46#
使用
background
和linear-gradient
:lyfkaqu17#
我有点晚了这个问题,但有一个解决方案.每个孩子必须有border-right和border-bottom设置.父div在边缘边界上有伪,以模仿删除.它只适用于如果你在一个普通的背景色使用这个.
在我的例子中,背景是白色的。
CSS: