CSS 选择最后一个跨度元素

Kev*_*nT. 1 html css css-selectors

我有这个 CSS 代码:

span.input:last-child {
    -webkit-animation-name: blinker;
    -webkit-animation-duration: 1s;
    -webkit-animation-timing-function: ease;
    -webkit-animation-iteration-count: infinite;

    -moz-animation-name: blinker;
    -moz-animation-duration: 1s;
    -moz-animation-timing-function: ease;
    -moz-animation-iteration-count: infinite;

    animation-name: blinker;
    animation-duration: 1s;
    animation-timing-function: ease;
    animation-iteration-count: infinite;
}

@-moz-keyframes blinker {  
    0% { opacity: 1.0; }
    49% { opacity: 1.0; }
    50% { opacity: 0.0; }
    100% { opacity: 0.0; }
}

@-webkit-keyframes blinker {  
    0% { opacity: 1.0; }
    49% { opacity: 1.0; }
    50% { opacity: 0.0; }
    100% { opacity: 0.0; }
}

@keyframes blinker {  
    0% { opacity: 1.0; }
    49% { opacity: 1.0; }
    50% { opacity: 0.0; }
    100% { opacity: 0.0; }
}
Run Code Online (Sandbox Code Playgroud)

我有这个 HTML 代码:

<div class="tc">Some More Text</div>
<br>
<div class="content">
    Hello<br>
    <span class="input">_</span><br>
    <span class="input">_</span><br>
</div>
Run Code Online (Sandbox Code Playgroud)

问题是,最后一个span.input根本没有动画。如何仅使用 CSS 使其工作?

Has*_*ami 5

因为.contentdiv的最后一个孩子是一个<br>元素。并且:last-child不匹配<span>.

element:last-child伪类代表最后一个孩子的其父匹配element

您可以使用:last-of-type伪类来选择最后一个<span>元素,如下所示:

span.input:last-of-type {
    /* styles goes here... */
}
Run Code Online (Sandbox Code Playgroud)

工作演示

但是请注意,无论:last-of-type:last-child伪类还是伪类都不尊重.input类名,它们直接查看父类的子树而不是element.class.

来自MDN

:last-of-typeCSS伪类代表最后它的兄弟型号在它的父元素的孩子的名单。

值得注意的是 IE9+ 支持:last-of-type伪类。


或者,在此特定实例中,您可以使用通用同级选择器 ~ IE7+支持)来选择第二个span.input元素,如下所示:

span.input ~ span.input {
    /* styles goes here... */
}
Run Code Online (Sandbox Code Playgroud)

更新的演示