【问题标题】:CSS :last-child unexpected behaviour [duplicate]CSS:last-child意外行为[重复]
【发布时间】:2015-11-17 18:39:50
【问题描述】:

您好,我正在尝试使用 last-child 运算符隐藏应用边框的最后一个 div。我的问题是 las div 底部仍有边框

下面是我的测试的 HTML

<div class="car-search">
    <!--other divs removed for example-->
    <div class="border-bottom"></div>
</div>

<div class="car-search">
    <!--other divs removed for example-->
    <div class="border-bottom"></div>
</div>

CSS

.car-search .border-bottom{
    border-bottom: 1px solid $lighterGrey;
    padding-top: 15px;
    margin-bottom: 15px;
    width: 770px;
    margin-left: 15px;
}
.car-search:last-child .border-bottom{
    display: none;
}

我不知道为什么最后一个.car-search上会显示边框

电流输出:

.car-search .border-bottom {
  border-bottom: 1px solid #000;
  padding-top: 15px;
  margin-bottom: 15px;
  width: calc(100% - 30px);
  margin-left: 15px;
}
.car-search:last-child .border-bottom {
  display: none;
}

尝试

我也尝试过使用!important标签,但没有成功

我试过:last-of-type没有成功

【问题讨论】:

  • 使用!important 去掉那个边界
  • 试过没有成功
  • @Amitsingh 不!根本不要使用!important。无论如何,这里应该不需要使用!important,因为前面的选择器上没有display的定义。
  • @Kieranmv95:最后一个.car-search之后有什么元素吗?如果你这样做了,那么.car-search 不是其父级的:last-child,因此选择器将不起作用。请查看此线程以了解有关 :last-child 工作原理的详细信息 - *.com/questions/18995362/…

标签: css css-selectors


【解决方案1】:

很遗憾,CSS 内部没有 last-of-class 选择器。您要么需要从最后一个 .car-search 元素中删除 .border-bottom 元素,要么回退到 Javascript / jQuery 以从 DOM 中删除该元素。

例如,您可以运行以下 jQuery 代码来删除最后一个 .car-search 元素的 .border-bottom

$('.car-search').last().children('.border-bottom').remove();

jsFiddle Demo

或者,如果您希望为此使用纯 CSS,您可以将 .car-search 元素包装在容器 &lt;div&gt; 中并使用 :last-of-type 选择器。

例如,您的新结构可能如下所示:

<div class="car-search-wrapper">    
    <div class="car-search">
        <!--other divs removed for example-->
        <div class="border-bottom"></div>
    </div>
    <div class="car-search">
        <!--other divs removed for example-->
        <div class="border-bottom"></div>
    </div>
</div>

那么你可以使用:

.car-search:last-of-type .border-bottom {
    display: none;
}

jsFiddle Demo

【讨论】:

  • 即使在.car-search 之后有另一个类型为div 的元素也可能不起作用。
  • 好点,正在更新。
  • 另一种选择(而不是回退到 JS)是将所有 .car-search 包装在一个包装器元素中(如 div
【解决方案2】:

如上所述,目前没有 :last-of-class 选择器,因此唯一的方法是使用 javascript。使用 jQuery,您可以运行以下代码:

jQuery('div.car-search:last .border-bottom').css({display:'none'});

此外,你可以使用 scss 编写

.car-search {
    .border-bottom {
        border-bottom: 1px solid $lighterGrey;
        padding-top: 15px;
        margin-bottom: 15px;
        width: calc(100% - 30px);
        margin-left: 15px;    
    }

    &:last-of-type {
        .border-bottom {
            display: none;
        }
    }
}

scss 行少了一点。

在编译后的 CSS 中:

.car-search .border-bottom {
    border-bottom: 1px solid $lighterGrey;
    padding-top: 15px;
    margin-bottom: 15px;
    width: calc(100% - 30px);
    margin-left: 15px;    
}

.car-search:last-of-type .border-bottom {
    display: none;
}

【讨论】:

  • 如果在最后一个 .car-search 之后还有其他 &lt;div&gt; 子级,则不起作用。
  • 您可能希望在此答案中使用/添加已编译的 CSS。不是每个人都使用或理解 SCSS。
  • 我真的很喜欢这个解决方案,但它对我不起作用,谢谢你告诉我你可以在最后添加东西。我是 scss 的新手