CSS:在<img>上没有显示伪元素之后?

qwe*_*rty 21 css css3 pseudo-element

当你悬停它时,我有一个从菜单中滑出的图像.因为它隐藏在菜单下面,我希望通过在底部添加深色淡入淡出来为图像的底部提供一点点deph.我认为实现这一目标的最佳方法是使用伪元素.我并不太关心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;
  } 
Run Code Online (Sandbox Code Playgroud)

首先,我不确定在"之后"之前是否使用双重或单个冒号.我总是使用一个,但最近我注意到人们使用两个,所以还有什么方法可以去?要么似乎工作!

你可以在这里看到它:http://goo.gl/RupQa

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

我一直试图解决这个问题超过一个小时了,有什么建议吗?

cru*_*ush 46

作为回答了在这个问题上.

使用beforeafter伪元素与img标签没有在大多数浏览器工作,通过设计.

图像标记是自闭(<tag />)标记,因为它们不包含任何内容.由于它们不包含任何内容,因此不能将生成的内容附加(::after)或预先附加(::before)到现有内容.

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

  • 未来读者的注释.这似乎也适用于输入(至少就我的测试而言).有意义,因为他们也是自我关闭. (11认同)
  • @ErikHonn以及任何其他void元素,它们是:`<area>`,`<base>`,```,`<col>`,`<command>`,`<embed>`, `<hr>`,`<keygen>`,`<link>`,`<meta>`,`<param>`,`<source>`,`<track>`和`<wbr>`. (2认同)
  • @hawk,从技术上讲,`<img rel="nofollow noreferrer" />`元素没有内容.它标记了文档树中的一个点,其中应该插入外部内容(用`src`属性引用的图像),但它只是一个点,甚至`alt`属性也不是元素的内容.可能最好将其设计为`<img rel="nofollow noreferrer" src ="...">替代内容</ img>`(比如`<object>`或`<iframe>`),但这种模式仅被引入<img>被广泛使用几年后. (2认同)