如何更改最后一个元素之前的 CSS?
如果可能的话,我喜欢获得最干净的代码,所以要么通过常规 CSS 要么通过 jQuery。 它必须是跨浏览器并在 IE 中工作。
标记是面包屑。
<div id="breadcrumb">
<ul>
<li><a href="#">Home</a></li>
<li><a href="#">Sports</a></li>
<li><a href="#">Football</a></li>
<li><a href="#">Leagues/a></li>
</ul>
</div>
所以,我想分三步来设计这个面包屑的样式。
- 第一个 a 项
- 中间 a 项(所以不是第一个也不是最后一个)
- 最后一个 a 项目
我无法使用常规 CSS 计算出来,因为 IE 不支持像 :first-child 等伪类。
取得了一些成功:
$("#breadcrumb li:last > a").addClass("last");
所以我尝试了 jQuery 并使用以下方法 无法弄清楚如何定位介于两者之间的那些,因为如果我将所有样式设置为 #breadcrumb li > a 类为“middle”,那么使用 .addClass 就不再起作用了。
有什么建议吗?
I like to get the cleanest code if possible, so either via regular CSS or jQuery.
It has to be cross browser and work in IE.
The markup is a breadcrumb.
<div id="breadcrumb">
<ul>
<li><a href="#">Home</a></li>
<li><a href="#">Sports</a></li>
<li><a href="#">Football</a></li>
<li><a href="#">Leagues/a></li>
</ul>
</div>
So, I want to style this breadcrumb in 3 steps.
- The first a item
- The in between a items (so not first and not last)
- The last a item
I couldn't figure it out using regular CSS because IE doesn't support pseudo classes like :first-child etc.
So I tried jQuery and got some success using:
$("#breadcrumb li:last > a").addClass("last");
But I can't figure out how to target those in between, because if I style all #breadcrumb li > a with class "middle", then using .addClass doesn't work anymore.
Any suggestions?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
您可以将
:not()
与:first
和:last
,如下所示:You can use
:not()
with:first
and:last
, like this:我建议改变对这个问题的思考:
I propose a change in thinking about the problem:
为了扩展这里的一些答案,您基本上有两个问题:
因此,我建议采用两步方法:
首先,相应地设置 HTML+CSS
其次,修复 IE,
如果您无法在服务器上(或静态地)添加第一个子类和最后一个子类,我会使用这个jQuery JS:
最后,我会使用条件注释或某种功能检测(不确定什么功能检测会起作用)来确保只有需要修复的浏览器才能获得第一个/最后一个修复。您可以创建一个屏幕外的 div,并查看第一个/最后一个规则是否适用于它。
请注意,如果您经常使用first-child/last-child,则可以轻松调整 jQuery 代码,您可以用两行将这些类添加到整个 DOM 中。
编辑 我测试了我的解决方案,发现如果您在逗号分隔的规则列表中包含 :last-child ,则 IE8 无法解析 CSS 规则,因此不幸的是您必须复制 IE 的规则。然而,一旦您不再关心支持 IE8(叹息......有一天),这使得删除那部分代码库变得更容易。
To expand on some of the answers here, you basically have two concerns:
Therefore I recommend a two step approach:
First, set your HTML+CSS accordingly
Second, to fix for IE,
If you can't add the first-child and last-child classes on the server (or statically) I'd use this jQuery JS:
Finally, I'd use conditional comments or some kind of feature detection (not sure what feature detection would work) to ensure that only browsers who need the fix get the first/last fix. You could create a div that's off-screen and see if first/last rules work on it.
Note that the jQuery code could be adapted easily if you use first-child/last-child a lot, you can add those classes all over your DOM in two lines.
Edit I tested my solution and found that IE8 can't parse the CSS rules if you have the :last-child in a comma-separated rule list so unfortunately you have to duplicate the rules for IE. However, this makes it easier to delete that part of the code base once you no longer care about supporting IE8 (sigh... one day).