CSS:not(:last-child):选择器之后

Mat*_*son 344 css css-selectors pseudo-element

我有一个元素列表,其样式如下:

ul {
    list-style-type: none;
    text-align: center;
}

li {
    display: inline;
}

li:not(:last-child):after {
    content:' |';
}
Run Code Online (Sandbox Code Playgroud)
<ul>
    <li>One</li>
    <li>Two</li>
    <li>Three</li>
    <li>Four</li>
    <li>Five</li>
</ul>
Run Code Online (Sandbox Code Playgroud)

输出One | Two | Three | Four | Five |而不是One | Two | Three | Four | Five

任何人都知道如何选择CSS除了最后一个元素?

您可以在此处查看:not()选择器的定义

imm*_*mma 412

如果not选择器出现问题,您可以设置所有选项并覆盖最后一个选择器

li:after
{
  content: ' |';
}
li:last-child:after
{
  content: '';
}
Run Code Online (Sandbox Code Playgroud)

或者如果你以前可以使用,不需要最后一个孩子

li+li:before
{
  content: '| ';
}
Run Code Online (Sandbox Code Playgroud)

  • 这实际上是让它早在IE8上工作的唯一方法(对不起,没有IE7和之前的cheetos).`li:not(:first-child):before`对于旧版本的Internet Explorer来说有点太可怕了. (12认同)

Viv*_*vek 225

每件事似乎都是正确的 您可能希望使用以下css选择器而不是您使用的css选择器.

ul > li:not(:last-child):after
Run Code Online (Sandbox Code Playgroud)

  • @ScottBeeson这是现代浏览器的最佳助手,但接受了旧浏览器的回答.(我同意你的观点,这应该是公认的) (4认同)

Liz*_*aly 25

您编写的示例在Chrome 11中完全适用于我.也许你的浏览器不支持:not()选择器?

您可能需要使用JavaScript或类似工具来完成此跨浏览器.jQuery 在其选择器API中实现:not().

  • 我通过执行`li:not(:first-child):before`并在之前添加竖线来解决这个问题.我正在使用稳定版Chrome,似乎不支持最后一个孩子.Canary构建确实如此.谢谢你的回答. (8认同)

Lor*_*ita 19

使用CSS的示例

  ul li:not(:last-child){
        border-right: 1px solid rgba(153, 151, 151, 0.75);
    }
Run Code Online (Sandbox Code Playgroud)


Ash*_*sim 16

对我来说很好

&:not(:last-child){
            text-transform: uppercase;
        }
Run Code Online (Sandbox Code Playgroud)

  • 这个答案可能与 SCSS 而不是 CSS 相关。 (4认同)

小智 10

您的示例在我的IE中不起作用,您必须在文档中指定Doctype标头,以便在IE中以标准方式呈现您的页面以使用内容CSS属性:

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<head>
<link href="style.css" rel="stylesheet" type="text/css">
</head>
<html>

<ul>
    <li>One</li>
    <li>Two</li>
    <li>Three</li>
    <li>Four</li>
    <li>Five</li>
</ul>

</html>
Run Code Online (Sandbox Code Playgroud)

第二种方法是使用CSS 3选择器

li:not(:last-of-type):after
{
    content:           " |";
}
Run Code Online (Sandbox Code Playgroud)

但您仍需要指定Doctype

第三种方法是使用JQuery和一些脚本如下:

<script type="text/javascript" src="jquery-1.4.1.js"></script>
<link href="style2.css" rel="stylesheet" type="text/css">
</head>
<html>

<ul>
    <li>One</li>
    <li>Two</li>
    <li>Three</li>
    <li>Four</li>
    <li>Five</li>
</ul>

<script type="text/javascript">
  $(document).ready(function () {
      $("li:not(:last)").append(" | ");
    });
</script>
Run Code Online (Sandbox Code Playgroud)

第三种方式的优点是你不必指定doctype和jQuery将兼顾兼容性.

  • <!DOCTYPE html>是新的HTML5标准. (6认同)