gpt4 book ai didi

css - 样式化 css 列中的第一项

转载 作者:技术小花猫 更新时间:2023-10-29 11:08:09 26 4
gpt4 key购买 nike

我有一个显示在多个列中的列表。每个列表项都是 block 元素 (display:block) 并附加了一些样式(底部有一个 1px 的边框)。目前看起来像这样:

List item    List item    List item
--------- --------- ---------
List item List item List item
--------- --------- ---------
List item List item
--------- ---------

我想在每一列的第一个元素的顶部添加一个相同的边框,例如

---------    ---------    ---------    
List item List item List item
--------- --------- ---------
List item List item List item
--------- --------- ---------
List item List item
--------- ---------

我已经尝试过 :first-line 和::first-line,在这种情况下它们似乎都不起作用(可能是因为它不适用于 block 元素?)

列表的长度可能会有所不同,所以我无法确定每一列中有多少元素,所以我也不能使用 :nth-of-type()。

有谁知道这是否可以做到(或者相反,如果它绝对不能做到?)

我的 HTML

<ul>
<li><a href="">List item</a></li>
<li><a href="">List item</a></li>
<li><a href="">List item</a></li>
...
</ul>

我的 CSS

  ul {
list-style: none;
padding: 21px;
-moz-column-count: 4;
-webkit-column-count: 4;
column-count: 4;
-moz-column-gap: 21px;
-webkit-column-gap: 21px;
column-gap: 21px;
}
li {
display: block;
-moz-column-break-inside: avoid;
-webkit-column-break-inside: avoid;
-mx-column-break-inside: avoid;
column-break-inside: avoid;
padding: 1em 0;
border-bottom: 1px dotted #000;
}

最佳答案

看到代码后和 1 小时后编辑:完成!使用纯 CSS!

我花了很长时间才不想使用 javascript。这是幕后真实情况的演示 http://jsfiddle.net/mEtF6/1/ ,这是工作版本: http://jsfiddle.net/mEtF6/2/ 。如果您不了解任何内容,请随时询问,因为它没有很好的文档记录。我实际上必须添加一个包装“ul”的 div,因为 overflow: hiddenul不会表现得像 border-top在元素之外。这是工作代码:

<div>
<ul>
<li><a href="">List item 1</a></li>
<li><a href="">List item 2</a></li>
<li><a href="">List item 3</a></li>
<li><a href="">List item 4</a></li>
<li><a href="">List item 5</a></li>
<li><a href="">List item 6</a></li>
<li><a href="">List item 7</a></li>
<li><a href="">List item 8</a></li>
<li><a href="">List item 9</a></li>
</ul>
</div>

还有CSS:

div {
/* This will hide the white space at the right (blue in the explanation) */
overflow: hidden;
}

ul {
position: relative; /* Needed to place the :before pseudo element in the proper position */
list-style: none;
border-top: 1px dotted #000;
padding: 0;
margin: 0;
-moz-column-count: 4;
-webkit-column-count: 4;
column-count: 4;
-moz-column-gap: 20px;
-webkit-column-gap: 20px;
column-gap: 20px;
}

/* This 'cuts' the top margin of ul so it's displayed in the same way as the other */
ul:before {
content: " ";
position: absolute;
display: block;
width: 100%;
height: 1px;

/* Put the gaps on the <ul> top margin */
top: -1px;

/* Background-size = 1/4 of the width + 1/4 of the space between columns */
background-size: calc(25% + 5px) 1px;

/* Or it will hide the border-top of the ul */
background-color: transparent;

/* The actual white gaps at the top */
background-image: linear-gradient(
90deg,
transparent calc(100% - 20px), /* All the <li> width minus the gap is transparent */
red 20px); /* Those 20px are white */
}

li {
-moz-column-break-inside: avoid;
-webkit-column-break-inside: avoid;
-mx-column-break-inside: avoid;
column-break-inside: avoid;
padding: 0;
border-bottom: 1px dotted #000;
}

/* This will hide the top margin of the last columns without elements */
li:last-child:before {
position: absolute;
/* You want to place the top */
margin-left: calc(25% + 5px);
content: " ";
display: block;
background-color: blue;
width: 10px;
height: 1px;
top: -1px;
width: 100%;
}

/* Make the <a> fill the whole space of the <li> */
li a {
display: block;
padding: 1em 0;
}

注意:我添加了对 <a> 的适当支持标签,使整个 block 都可以点击,而不仅仅是其中的文本。你当然可以逆转它。

注意 2: 仅使用 FIREFOX 进行测试。您可能需要添加一些其他的 -webkit 渐变以使其跨浏览器。抱歉,我会把这个肮脏的工作留给你 (; 我发现了一个明显的错误并询问了 question here in SO about it

同样,工作演示:http://jsfiddle.net/mEtF6/2/ .

关于css - 样式化 css 列中的第一项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19300024/

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