gpt4 book ai didi

css - CSS 中代表行的元素是否可以构成网格?

转载 作者:行者123 更新时间:2023-11-28 11:55:37 25 4
gpt4 key购买 nike

我正在尝试使用适用于现代浏览器的 HTML/CSS 复制此设计:

enter image description here

它本质上是一个表格,有行和列,这意味着如果一行的名称单元格变大,它应该对所有行都变大。我看到了两种可能性:表格和 CSS 网格。

据我所知,表格中的行样式不够丰富,例如它们不能采用边框半径,我还没有尝试过框阴影。

如果我使用 CSS 网格,我可以设置单元格的样式以在末尾模拟边框半径,但是这样框阴影就变得不可能了,因为第二个单元格的框阴影覆盖了第一个单元格。

我认为问题归结为具有表示样式的行的元素,但仍在每个行中,单元格的宽度应与其他行中的宽度相同,以表示列。

在 CSS 中有什么方法可以实现这一点吗?

例如,这是对 HTML 的 table 的尝试,其中边距和边框半径没有影响:

table {
border-collapse: collapse;
}

tr {
background-color: grey;
border-radius: 8px;
margin: 10px;
}
<table>
<tr>
<td>Eva Lee</td>
<td>Call back</td>
<td>15/02/19</td>
</tr>
<tr>
<td>Evelyn Allen</td>
<td>Call back</td>
<td>14/01/19</td>
</tr>
<tr>
<td>Slawomir Pelikan</td>
<td>Voicemail</td>
<td>14/01/19</td>
</tr>
<tr>
<td>Christopher Walken</td>
<td>Voicemail</td>
<td>14/01/19</td>
</tr>
</table>

这是另一种尝试,使用 display:table,它的作用与 table 相同:

.table {
display: table;
border-collapse: collapse;
}

.row {
display: table-row;
background-color: grey;
border-radius: 8px;
margin: 10px;
}

.cell {
display: table-cell;
}
<div class="table">
<div class="row">
<div class="cell">Eva Lee</div>
<div class="cell">Call back</div>
<div class="cell">15/02/19</div>
</div>
<div class="row">
<div class="cell">Evelyn Allen</div>
<div class="cell">Call back</div>
<div class="cell">14/01/19</div>
</div>
<div class="row">
<div class="cell">Slawomir Pelikan</div>
<div class="cell">Voicemail</div>
<div class="cell">14/01/19</div>
</div>
<div class="row">
<div class="cell">Christopher Walken</div>
<div class="cell">Voicemail</div>
<div class="cell">14/01/19</div>
</div>
</div>

最佳答案

编辑1

这适用于 FF、Chrome、MSIE、MS Edge。
Edge 可能需要稍微调整一下,因为表格单元格具有子像素宽度,如果现在给定像素宽度,则会导致令人讨厌的垂直条。

这通过在包裹单元格内容的 div 上使用负边距和在单元格上使用 overflow: hidden 来实现。

table {
border-collapse: collapse;
border-spacing: 0;
}
table tr td {
overflow: hidden;
padding: 0 0 5px 0;
}
table tr td > div {
background-color: gold;
padding: 4px;
border-radius: 0px;
box-shadow: 3px 3px 5px rgba(0, 0, 0, 0.3);
margin-left: -10px;
margin-right: -10px;
padding-left: 14px;
padding-right: 14px;
}
table tr td:first-child {
padding-left: 10px;
}
table tr td:first-child > div {
border-radius: 10px 0 0 10px;
}
table tr td:last-child {
padding-right: 20px;
}
table tr td:last-child > div {
border-radius: 0 10px 10px 0;
}
<table>
<tr>
<td>
<div>Lorem.</div>
</td>
<td>
<div>Ea!</div>
</td>
<td>
<div>Animi.</div>
</td>
</tr>
<tr>
<td>
<div>Quas!</div>
</td>
<td>
<div>Dolor!</div>
</td>
<td>
<div>Suscipit.</div>
</td>
</tr>
<tr>
<td>
<div>Mollitia?</div>
</td>
<td>
<div>Inventore!</div>
</td>
<td>
<div>Dolorem.</div>
</td>
</tr>
</table>

旧的,不能在 Chrome 中工作

来点伪元素魔法怎么样?

table {
border-spacing: 10px;
border-collapse: separate;
}

tr {
position: relative;
margin: 10px;
}
tr:before {
content: "";
position: absolute;
top: 0;
left: 0;
width: 100%;
height: 100%;
background-color: gold;
z-index: -1;
border-radius: 20px;
box-shadow: 3px 2px 5px rgba(0, 0, 0, 0.25);
}

td {
padding: 10px;
}
<table>
<tr>
<td>Eva Lee</td>
<td>Call back</td>
<td>15/02/19</td>
</tr>
<tr>
<td>Evelyn Allen</td>
<td>Call back</td>
<td>14/01/19</td>
</tr>
<tr>
<td>Slawomir Pelikan</td>
<td>Voicemail</td>
<td>14/01/19</td>
</tr>
<tr>
<td>Christopher Walken</td>
<td>Voicemail</td>
<td>14/01/19</td>
</tr>
</table>

关于css - CSS 中代表行的元素是否可以构成网格?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54347078/

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