【问题标题】:CSS :after pseudo element not showing up on <img>? [duplicate]CSS :after 伪元素没有出现在 <img> 上? [复制]
【发布时间】:2013-01-29 14:21:13
【问题描述】:

我有一个图像,当您将其悬停时,它会从菜单中向上滑动。因为它隐藏在菜单下,所以我想通过在底部添加暗淡来给图像底部一点深度。我认为实现这一目标的最佳方法是使用伪元素。我不太关心 IE 支持,因为这是一个小细节。

所以,这就是我所拥有的:

.header-section .trygg-ehandel-icon {
    position: absolute;
    top: 45px;
    right: 280px;
    z-index: 0;
    display: block;
    // Stripped out some transition style here
  }

  // Here's where the cool stuff begins!
  .header-section .trygg-ehandel-icon::after {
    position: absolute;
    top: 0px; left: 0px;
    height: 20px; width: 20px;
    display: block;
    content: '.';
    z-index: -999999px;
    background: red;
  } 

首先,我不确定在“之后”之前是使用双冒号还是单冒号。我一直用一个,但最近我注意到有人用两个,那该怎么办?两者似乎都有效!

你可以在这里看到它的实际效果:http://goo.gl/RupQa

这是标题菜单上方弹出的黄色徽标。为什么我在图像上方看不到 20x20 的红色框?父级 (.trygg-ehandel-icon) 是绝对定位的,所以伪元素应该相对于它显示,对吧?

我已经尝试解决这个问题一个多小时了,有什么建议吗?

【问题讨论】:

  • +1 用于美观的网站设计。
  • "首先,我不确定是使用双冒号还是单冒号" 如果您不关心 IE8,那么请使用双冒号,这样您就知道您正在使用伪元素(这就是双冒号的用途)。单冒号只能用于 IE8,因为它不理解伪元素的双冒号。
  • @BoltClock 你是对是错:w3.org/wiki/CSS/Selectors#Pseudo-classes。双冒号仅用于first-line、first-letter、before 和after。
  • @qwerty:差不多,虽然单冒号是以前唯一的选择;双冒号仅在 CSS3 中引入以区分伪元素和伪类。你说得对 - IE8(非常!)专注于 CSS2.1,到处都是 CSS3,所以有人可以说它故意忽略了规范,虽然很奇怪@987654330 @ 和高级属性选择器出现。
  • stackoverflow.com/questions/5843035/… 显然,使用带有img 标签的::before 和::after 伪元素在大多数浏览器中不起作用。即使是最简单的例子,我也完全无法让它在我的测试中工作。请注意,该链接中有一些被黑的变通办法,以及关于为什么它不能开箱即用的技术解释。

标签: css pseudo-element


【解决方案1】:

正如in this question的回答。

将before 和after 伪元素与img 标签一起使用在大多数浏览器中不起作用,设计使然。

图像标签是自闭合 (&lt;tag /&gt;) 标签,因为它们不包含任何内容。由于它们不包含任何内容,因此生成的内容不能附加 (::after) 或附加 (::before) 到现有内容。

上面链接的文章列出了两种解决方法。 CSS 变通方法本质上是非常 hackish,而 jQuery 解决方案更优雅,但取决于启用的 Javascript 和包含的 jQuery 库。

【讨论】:

  • 给未来读者的说明。这似乎也适用于输入(至少就我的测试而言)。有道理,因为它们也会自动关闭。
  • @ErikHonn 以及任何其他 void 元素,它们是:&lt;area&gt;、&lt;base&gt;、&lt;br&gt;、&lt;col&gt;、&lt;command&gt;、&lt;embed&gt;、&lt;hr&gt;、 &lt;keygen&gt;、&lt;link&gt;、&lt;meta&gt;、&lt;param&gt;、&lt;source&gt;、&lt;track&gt; 和 &lt;wbr&gt;。
  • “因为它们不包含任何内容,所以不能附加任何内容”——这是一个非常尴尬的解释。你真的想告诉我我正在查看的这张图片没有内容吗?当然有内容!这是一个技术问题,也是规范的一个缺点。软件应该设计得直观。如果我认为我应该能够在 img 之后添加一个伪元素,那么我应该能够做到这一点。这种限制是不必要的。
  • @hawk,从技术上讲,&lt;img /&gt; 元素没有内容。它在文档树中标记了应该插入外部内容(使用src 属性引用的图像)的点,但这只是一个点,即使alt 属性也不是元素的内容。可能将其设计为 &lt;img src="..."&gt;alternative content&lt;/img&gt; 会更好(例如 &lt;object&gt; 或 &lt;iframe&gt;),但这种模式是在 被广泛使用几年后引入的。
  • @Pavlo,有趣的是,几乎所有浏览器实际上都允许将::before 和::after 添加到hr 元素:css-tricks.com/simple-styles-for-horizontal-rules :)
猜你喜欢
  • 1970-01-01
  • 2022-01-02
  • 2014-10-27
  • 2018-04-19
  • 1970-01-01
  • 1970-01-01
  • 2011-11-15
  • 2013-09-17
相关资源
最近更新 更多