【问题标题】:CSS :after hover TransitionCSS:悬停后过渡
【发布时间】:2011-11-10 12:41:49
【问题描述】:

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 不是解决方案,因为它会在图像之外

边框有过渡,在 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 过渡吗? quirksmode.org
  • 是的,我的 firefox 6 上的边框淡入淡出效果很好。检查右上角的 3 个链接,它们在所有浏览器中都有效。
  • 因为链接失效而投反对票
  • @patt 是的链接已损坏,我已将其删除并添加了其他详细信息

标签: css hover css-transitions


【解决方案1】:

Firefox 4+ 是唯一支持 :before:after 等伪元素转换的浏览器。

来源:http://css-tricks.com/13555-transitions-and-animations-on-css-generated-content/

【讨论】:

  • 啊,真的,那么有什么替代品呢?我尝试使用 jQuery,但它也是一团糟,因为将橙色边框保留在图像内部和上方会导致对其自身的图像触发 mouseout 事件,因此它会产生波动效果并且也无法点击。
【解决方案2】:

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;
}

【讨论】:

  • 感谢您的反馈,我可以使用边框,但图像在 img 内有阴影和白色边框,因此应用任何类型的边框都会添加到不需要的阴影之外
【解决方案3】:

如果您可以在元素本身上定义属性并在伪元素中使用inherit,则可以在 :before 和 :after 等伪元素上使用 CSS 过渡。因此,在您的情况下,您可以在border-color 上进行转换,而不是在opacity 上进行转换。

*, *: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>

【讨论】:

    猜你喜欢
    • 2021-12-23
    • 2018-01-22
    • 2021-05-17
    • 2014-08-19
    • 2017-04-03
    • 2011-10-08
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多