CSS :after伪类的hover过渡效果

9
HTML结构
<div id="small_gal">
    <div><img src="images1.jpg" /></div>
    <div><img src="images1.jpg" /></div>
    <div><img src="images1.jpg" /></div>
    <div><img src="images1.jpg" /></div>
    <div><img src="images1.jpg" /></div>
    <div><img src="images1.jpg" /></div>
    <div><img src="images1.jpg" /></div>
    <div><img src="images1.jpg" /></div>
</div>

图片具有下拉阴影,因此border不是解决方案,因为它会在图片外部。 enter image description here enter image description here 边框具有过渡效果,在FF上可以平稳运行,但在Chrome或其他浏览器上无法正常工作。
这是我使用的代码。
#small_gal div:hover{cursor: pointer;}
#small_gal div:after {
    content: '';
    position: absolute;
    width: 112px;
    height: 81px;
    border: 3px solid #e27501;
    left: 9px; top: 9px;
    z-index: 9;

    opacity: 0;
    -webkit-transition: opacity 0.5s ease-in-out;
    -moz-transition: opacity 0.5s ease-in-out;
    -o-transition: opacity 0.5s ease-in-out;
    -ms-transition: opacity 0.5s ease-in-out;
    transition: opacity 0.5s ease-in-out;
}
#small_gal div:hover:after {
    opacity: 1;
}

注意:

#small_gal

这只是一个容器,每个图像都被包裹在div中,以便我们可以实现: after


你确定你使用的浏览器中已经实现了CSS过渡效果吗?http://www.quirksmode.org/ - marcgg
是的,边框淡入效果在我的Firefox 6上运行良好。请检查右上角的3个链接,它们在所有浏览器中都可以正常工作。 - Aamir Mahmood
因为链接失效,所以被踩了。 - thomas-peter
1
@patt 是的,链接已经失效了,我已经将其删除并添加了其他细节。 - Aamir Mahmood
3个回答

16

啊,是啊,那有什么替代方案吗?我尝试使用jQuery,但它也很混乱,因为将橙色边框保持在图像内部并覆盖在图像上会导致鼠标移出事件在图像本身上被触发,所以它会产生抖动效果,并且也无法点击。 - Aamir Mahmood

3

CSS转换在WebKit中仍处于实验阶段,因此您可能遇到了涉及::after伪选择器的一些边缘情况错误。我建议完全避免使用它,而只是转换border-color。这在Chrome和Safari中都可以正常工作:

#small_gal div.p {
    border: 2px solid transparent;
    -webkit-transition: border-color 1s ease-in;
}

#small_gal div.p:hover {
    border-color: orange;
}

感谢您的反馈,我可以使用边框,但是图像具有投影和白色边框,因此应用任何类型的边框都会添加在不需要的阴影之外。 - Aamir Mahmood

1
如果您可以在元素本身上定义属性并在伪元素中使用inherit,则可以在伪元素(如:before和:after)上使用CSS过渡效果。因此,在您的情况下,您可以在border-color上放置一个过渡效果,而不是在opacity上放置一个过渡效果。请注意保留html标签。

*, *:before, *:after {
  -webkit-box-sizing: border-box;
  -moz-box-sizing: border-box;
  box-sizing: border-box;
}

#small_gal div {
  border-color: transparent;
  cursor: pointer;
  display: inline-block;
  position: relative;
  -webkit-transition: border-color 0.5s ease-in-out;
  -moz-transition: border-color 0.5s ease-in-out;
  -o-transition: border-color 0.5s ease-in-out;
  -ms-transition: border-color 0.5s ease-in-out;
  transition: border-color 0.5s ease-in-out;
}
#small_gal div:after {
  content: '';
  position: absolute;
  width: 100%;
  height: 100%;
  border-color: inherit;
  border-style: solid;
  border-width: 3px;
  left: 0;
  top: 0;
}
#small_gal div:hover {
  border-color: #e27501;
}
#small_gal div img {
  display: block;
  height: auto;
  max-width: 150px;
  width: auto;
}
<div id="small_gal">
    <div><img src="//c2.staticflickr.com/6/5826/23633880170_4bb8492de8_z.jpg" /></div>
    <div><img src="//c2.staticflickr.com/6/5826/23633880170_4bb8492de8_z.jpg" /></div>
    <div><img src="//c2.staticflickr.com/6/5826/23633880170_4bb8492de8_z.jpg" /></div>
    <div><img src="//c2.staticflickr.com/6/5826/23633880170_4bb8492de8_z.jpg" /></div>
    <div><img src="//c2.staticflickr.com/6/5826/23633880170_4bb8492de8_z.jpg" /></div>
</div>


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接