Css 伪类:nextTo?
假设我有以下HTML:Css 伪类:nextTo?,css,css-selectors,Css,Css Selectors,假设我有以下HTML: <ul> <li id="1">First issue.</li> <li id="2" class="error">Second issue.</li> <li id="3" class="error">Third issue.</li> <li id="4">Fourth issue.</li> <li id="5"
<ul>
<li id="1">First issue.</li>
<li id="2" class="error">Second issue.</li>
<li id="3" class="error">Third issue.</li>
<li id="4">Fourth issue.</li>
<li id="5" class="error">Fifth issue.</li>
<li id="6" class="error">Sixth issue.</li>
<li id="7" class="error">Seventh issue.</li>
<li id="8" class="error">Eighth issue.</li>
<li id="9">Ninth issue.</li>
<li id="10" class="error">Tenth issue.</li>
</ul>
我想做的是把第一个和最后一个<代码> > LI> <代码>以不同于其他<代码> < LI> < /Cult> s的方式排列在中间。 例如,
#2、#5、#10
都应该匹配“序列选择器中的第一个”<代码>#3、#8、#10应与“序列中的最后一个选择器”匹配
我想将以下样式分别应用于“序列中的第一个”和“序列中的最后一个”:
.firstInSequence {
border-radius-top-right: 10px;
border-radius-top-left: 10px;
}
.lastInSequence {
border-radius-bottom-right: 10px;
border-radius-bottom-left: 10px;
}
有没有选择器可以在CSS中本机使用 我想你也许能拼凑出这一部分来工作,但不是全部。但以下是我的想法 充分利用CSS3和 这些是我认为你有机会做到的 错误位于列表的第一位
li.error:first-child { }
<li error />
<li noerror />
...
<li />
li.error:last-child { }
<li />
...
<li class="error" />
li.错误:第一个子{}
...
错误发生在无错误之后
li:not(li.error) + li.error { }
<li noerror />
<li error />
...
<li />
li:not(li.error)+li.error{}
...
错误是列表中的最后一个错误
li.error:first-child { }
<li error />
<li noerror />
...
<li />
li.error:last-child { }
<li />
...
<li class="error" />
li.错误:最后一个子项{}
...
对于“序列中的第一个”,只要元素相邻,就可以尝试此操作:
演示:
-类为“error”的下一个相邻元素到类为“error”的元素:not(.error)+.error
-类为“error”的任何元素,它是另一个元素的第一个子元素,在上述选择器无法匹配的情况下.error:first child
顺便说一句:检查您的属性名称,应该是
边框左上角半径
,而不是边框左上角半径
,依此类推。如其他答案中所述,您可以使用:not
和:first child
伪选择器设置“序列的第一个”的样式:
:not(.error) + .error,
.error:first-child {
border-top-right-radius: 10px;
border-top-left-radius: 10px;
}
我想我已经找到了这个场景中“序列的最后一个”的解决方案。它使用完全不同的方法完成成品,但最终的结果类似:
基本技术是将带有径向梯度的伪元素
应用于非.error.
在.error
s之后的列表项,并将其上移到上一个(.error
)列表项上:
.error + :not(.error):before {
content:'';
display:block;
width:10px;
height:10px;
position:absolute;
top:-20px;
left:0;
background:-webkit-radial-gradient(100% 0,circle,transparent 10px,white 0);
}
.error + :not(.error):after {
content:'';
display:block;
width:10px;
height:10px;
position:absolute;
top:-20px;
right:0;
background:-webkit-radial-gradient(0 0,circle,transparent 10px,white 0);
}
确保li
具有位置:相对代码>
最后,对于最后一个上的边界半径
,使用类型的最后一个
:
.error:last-of-type{
border-bottom-right-radius:10px;
border-bottom-left-radius:10px
}
(Webkit只是为了简单起见)+1有趣的是,我们在同一时间有了相同的基本想法。我认为您不需要:last child
选择器,除非您试图部分覆盖“序列中的最后一个”位,否则不(.error)+。error
应该覆盖它。是的,我看到了您的答案,实际上更喜欢语法。不幸的是,我看不到他能得到列表中最后一个属性的任何方法,因为CSS中没有:before选择器(我也不认为会有)是的,我认为OP在那个属性上已经没油了。像:not(.error):prev(.error:first)
这样的想象可能会起作用(但肯定很难看)。但是这种情况很少见。我在我的文章中“使用”了你的答案,(虽然我是独立地偶然发现的,如果你愿意的话,这是一个解决方案。)然而,我并不是简单地编辑你的文章,因为我为“顺序中的最后一个”想出了一些很好的东西。我很想知道你的想法。不幸的是,演示没有解决#10,它只在顶部四舍五入,而不是底部。这可以用:类型的最后一个来解决。我更新了我的答案。+1这是一个相当激进的想法。我能想到的唯一问题(除了让它在跨浏览器中工作外)是:需要纯色背景;需要列表项之间的边距。保证金似乎是一个交易破坏者。您可以在这里使用:last child
而不是:last of type
,因为子元素aul
的唯一可能类型是li
。该类不相关。如果不能保证最后一个子类具有错误
类,则该类的最后一个子类没有CSS3选择器。