html - br :last-child not working when an element is after the br

标签 html css css-selectors

我在移动设备上的 html 中隐藏了 br 标签,但只希望最后一个 br 标签能够正常运行。这似乎有效,除非最后一个 br 之后的元素是 anchor 标记。

我正在使用以下代码:

p br {
  display: none;
}
p br:last-child {
  display: block;
}
<p>lorem
  <br>loremlorem lorem
  <br>
  <br>READ ARTICLE IN JOURNAL</p>
<p>lorem
  <br>loremlorem lorem
  <br>
  <br>
  <a href="#">READ ARTICLE IN JOURNAL</a>
</p>

https://jsfiddle.net/5j8dtwfd/2/

CSS 按预期工作,最后一个 br 标签应用了 display:block

但是,如果我将“阅读文章..”文本包装在 anchor 中,CSS 将无法找到最后一个 br

我不确定这里发生了什么,这是预期的行为吗?

最佳答案

使用 last-child,您的目标是最后一个 sibling ,不一定是最后一个 br。在这种情况下,最后一个兄弟元素是 anchor 元素。相反,请使用 last-of-type

p br {
  display: none;
}
p br:last-of-type {
  display: block;
}
<p>lorem
  <br>loremlorem lorem
  <br>
  <br>READ ARTICLE IN JOURNAL
</p>
<p>lorem
  <br>loremlorem lorem
  <br>
  <br><a href="#">READ ARTICLE IN JOURNAL</a>
</p>

请注意,在您的代码中,CSS 将 display:block 应用于 p br:last-child

既然最后一个 child 被阻塞了, anchor 不应该换行吗?

在这种情况下不是,因为规则仅适用于 br 是最后一个 child 的情况。

因此,以某种循环方式,您的 CSS 以最后一个 child 为目标,但前提是它是 br,但事实并非如此,所以什么也不会发生。实际上最后一个子元素是一个 anchor 元素,但您的 CSS 中没有任何针对它的内容。

如果您从原始代码中的选择器中删除 br,它会将 anchor 换成新行。

p br {
  display: none;
}
p :last-child {
  display: block;
}
<p>lorem
  <br>loremlorem lorem
  <br>
  <br>READ ARTICLE IN JOURNAL
</p>
<p>lorem
  <br>loremlorem lorem
  <br>
  <br>
  <a href="#">READ ARTICLE IN JOURNAL</a>
</p>

关于html - br :last-child not working when an element is after the br,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41254973/

相关文章:

jquery - 如何在 div 类或 id 上设置 anchor

html - 为什么 td of table 在 div 中松开它们的宽度(用于滚动表)

java - 我如何使用 selenium 等待 magento 购物车页面上的预期值

java - Eclipse 似乎认为 CSS 文件是 Java 源代码

css - 如何选择具有 2 个类的元素

javascript - Selenium(网络驱动程序)- 无法单击拆分按钮的右边缘(请参见图片链接)

javascript - 如何动态更改链接的行高或字体大小(<a>)?

html - 与 d3 一起使用时文本溢出属性不起作用

javascript - 网络摄像头快照到 Canvas

javascript - IE Canvas dataURI 安全错误