CSS :after hover Transition CSS :after伪类用于向元素的内容之后插入一个伪元素。当使用:hover伪类选择器时,可以将过渡效果应用到:after伪元素。 例如,以下CSS代码将在鼠标悬停在元素上时,为元素的:after伪元素添加过渡效果: ```css .element:after { content: ""; position: absolute; top: 0; left: 0; width: 100%; height: 100%;
CSS :after hover Transition CSS :after伪类用于向元素的内容之后插入一个伪元素。当使用:hover伪类选择器时,可以将过渡效果应用到:after伪元素。 例如,以下CSS代码将在鼠标悬停在元素上时,为元素的:after伪元素添加过渡效果: ```css .element:after { content: ""; position: absolute; top: 0; left: 0; width: 100%; height: 100%;
HTML结构
图片带有阴影,所以border
不是解决方案,因为它会在图片外部
边框具有过渡效果,Firefox上运行流畅,但在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 :after伪元素无法使用过渡效果的原因是:无法在伪元素上直接定义过渡效果,只能在元素本身上定义过渡效果,并在伪元素上使用inherit
继承属性。
解决方法是:将过渡效果从opacity
属性移至border-color
属性。
以下是解决方法的代码示例:
*, *: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; }
以上代码将解决问题并实现了在:hover状态下,边框颜色由透明变为#e27501的过渡效果。
CSS过渡效果在WebKit中仍处于实验阶段,所以很可能你遇到了涉及到::after伪选择器的某种边缘情况bug。我建议完全避免使用它,而是转而对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; }
非常感谢您的反馈,我可以使用border,但是图片带有阴影和白色边框,所以应用任何类型的边框都会在阴影外添加,这是不希望的。