我有一个<ul>
- 列表,其中每个列表项包含多个文本部分。
我希望每个文本部分尽可能地缩小,但我仍然希望所有这些部分在项目之间垂直对齐。 E.g。
<ul>
<li> A. Name | Some complex address | 555-1234 </li>
<li> Longer Name | Short Addr. | 555-1234 </li>
<li> P. Diddy | No home | 555-1234 </li>
</ul>
我希望css网格可以为我解决这个问题,但我无法弄明白......
ul {
list-style: none;
display: grid;
justify-content: stretch;
}
li {
display: grid;
grid-template-columns: auto 1fr auto;
grid-column-gap: 10px;
}
p:nth-child(1) {
background: #EEEEEE;
border-right: 1px solid;
}
p:nth-child(2) {
background: #CECECE;
border-right: 1px solid;
}
p:nth-child(3) {
background: #EEEEEE;
}
<ul>
<li>
<p>A. Name</p>
<p>Some complex address</p>
<p>555-1234</p>
</li>
<li>
<p>Longer Name</p>
<p>Short Addr.</p>
<p>555-1234</p>
</li>
<li>
<p>P. Diddy</p>
<p>No home</p>
<p>555-1234</p>
</li>
</ul>
css grid是错误的工具吗,还是我错过了什么?
答案 0 :(得分:3)
他们需要属于同一个网格才能获得此结果,因此您可以尝试这样的事情:
是的,没有更多的清单
.list {
display: grid;
grid-template-columns: auto 1fr auto;
grid-column-gap: 10px;
}
p:nth-child(3n + 1) {
background: #EEEEEE;
border-right: 1px solid;
}
p:nth-child(3n +2) {
background: #CECECE;
border-right: 1px solid;
}
p:nth-child(3n+3) {
background: #EEEEEE;
}
<div class="list">
<p>A. Name</p>
<p>Some complex address</p>
<p>555-1234</p>
<p>Longer Name</p>
<p>Short Addr.</p>
<p>555-1234</p>
<p>P. Diddy</p>
<p>No home</p>
<p>555-1234</p>
</div>
或者考虑display:table,你可以保留你的列表结构:
.list {
display: table;
margin:0;
padding:0;
border-spacing: 10px;
}
.list li {
display:table-row;
}
p {
display:table-cell;
}
p:nth-child(1) {
background: #EEEEEE;
border-right: 1px solid;
white-space:nowrap;
}
p:nth-child(2) {
background: #CECECE;
border-right: 1px solid;
width:100%;
}
p:nth-child(3) {
background: #EEEEEE;
white-space:nowrap;
}
<ul class="list">
<li>
<p>A. Name</p>
<p>Some complex address</p>
<p>555-1234</p>
</li>
<li>
<p>Longer Name</p>
<p>Short Addr.</p>
<p>555-1234</p>
</li>
<li>
<p>P. Diddy</p>
<p>No home</p>
<p>555-1234</p>
</li>
</ul>
答案 1 :(得分:3)
解决此问题的新方法是使用display:content。
它会使你的HTML变得扁平化,保持语义。
支持仍然是low,但可能比subgrid更快。
您可以找到this article in CSS Tricks有趣的
ul {
list-style: none;
justify-content: stretch;
display: grid;
grid-template-columns: auto 1fr auto;
grid-column-gap: 10px;
}
li {
display: contents; /* make it disapear */
}
li:nth-child(odd) {
background-color: red;
color: blue;
font-weight: bold;
}
p:nth-child(1) {
border-right: 1px solid;
background-color: inherit;
}
p:nth-child(2) {
background: #CECECE;
border-right: 1px solid;
}
p:nth-child(3) {
background: #EEEEEE;
}
&#13;
<ul>
<li>
<p>A. Name</p>
<p>Some complex address</p>
<p>555-1234</p>
</li>
<li>
<p>Longer Name</p>
<p>Short Addr.</p>
<p>555-1234</p>
</li>
<li>
<p>P. Diddy</p>
<p>No home</p>
<p>555-1234</p>
</li>
</ul>
&#13;