我正在创建 Google 图片前一段时间的页面布局。在所选图像下有一个图像网格,其中包含大的完整部分。我很好奇是否可以用 css 属性标记此页面disaply: grid。
起初我制作了三列的容器。一切都很好:
.container {
display: grid;
grid-template-columns: repeat(3, 1fr);
grid-gap: 20px;
}
.item {
border: 1px solid;
height: 20px;
}Run Code Online (Sandbox Code Playgroud)
<div class="container">
<div class="item"></div>
<div class="item"></div>
<div class="item"></div>
<div class="item"></div>
</div>Run Code Online (Sandbox Code Playgroud)
但我不知道如何在这个网格内插入描述块。我不确定这是否可能。我将通过 切换描述display: none | block。图像和行数未知。
.container {
display: grid;
grid-template-columns: repeat(3, 1fr);
grid-gap: 20px;
}
.item {
border: 1px solid;
height: 20px;
}
.item__description {
border: 1px solid red;
height: 10px;
}Run Code Online (Sandbox Code Playgroud)
<div class="container">
<div class="item">
<div class="item__description">Description of the first item</div>
</div>
<div class="item"></div>
<div class="item"></div>
<div class="item"></div>
<div class="item__description">Description of the last item. No matter where to place this description: inside or outside 'item' block</div>
</div>Run Code Online (Sandbox Code Playgroud)
这个想法是在不进行任何 js DOM 操作的情况下创建此布局。
设置grid-auto-flow: row dense;在 上.container。移动.item__description项目的外部,然后将其放置grid-column: 1 / span 3;在其上。
.container {
display: grid;
grid-template-columns: repeat(3, 1fr);
grid-auto-flow: row dense;
grid-gap: 20px;
}
.item {
border: 1px solid;
height: 20px;
}
.item__description {
grid-column: 1 / -1;
border: 1px solid red;
height: 20px;
}Run Code Online (Sandbox Code Playgroud)
<div class="container">
<div class="item"></div>
<div class="item__description">Description of the first item</div>
<div class="item"></div>
<div class="item"></div>
<div class="item"></div>
<div class="item__description">Description of the last item. No matter where to place this description: inside or outside 'item' block</div>
</div>Run Code Online (Sandbox Code Playgroud)
这也适用于显示切换(悬停一个项目):
.container {
display: grid;
grid-template-columns: repeat(3, 1fr);
grid-auto-flow: row dense;
grid-gap: 20px;
}
.item {
border: 1px solid;
height: 20px;
}
.item__description {
display: none;
grid-column: 1 / -1;
border: 1px solid red;
height: 20px;
}
.item:hover + .item__description {
display: block;
}Run Code Online (Sandbox Code Playgroud)
<div class="container">
<div class="item">Hover Me 1</div>
<div class="item__description">Description of the item 1</div>
<div class="item">Hover Me 2</div>
<div class="item__description">Description of the item 2</div>
<div class="item">Hover Me 3</div>
<div class="item__description">Description of the item 3</div>
<div class="item">Hover Me 4</div>
<div class="item__description">Description of the item 4</div>
</div>Run Code Online (Sandbox Code Playgroud)