悬停时图像上的 CSS 内边框

Posted

技术标签:

【中文标题】悬停时图像上的 CSS 内边框【英文标题】:CSS Inner Border on Image on Hover 【发布时间】:2015-07-07 09:48:12 【问题描述】:

一直在搜索高低,虽然有很多花哨的悬停效果,但我希望有一些简单的东西可以应用于画廊中的图像,只需放置 10 像素宽、40% 透明度。

许多人展示了如何为每张图片做类似的事情,但我只想要一个可以在需要的地方分配的类。

公平地说,有些插件确实有这个选项,但它们附带了 50 个其他插件,这似乎有点矫枉过正。

【问题讨论】:

我认为这个解决方案与列出的可能重复的解决方案不同,对我来说效果很好,而另一个没有。 【参考方案1】:

添加包装器和伪元素

您不能将任何样式直接应用到图像上,因为它会在悬停时为其提供嵌入边框。但是您可以通过将每个图像包装在某种容器元素中并添加带有应用边框的::after 伪元素来达到预期的效果。

.border 
  display: inline-block;
  position: relative;

.border::after 
  content: '';
  position: absolute;
  top: 0;
  right: 0;
  bottom: 0;
  left: 0;
  box-shadow: inset 0 0 0 0 rgba(255,255,255,.5);
  transition: box-shadow .1s ease;

.border:hover::after 
  box-shadow: inset 0 0 0 10px rgba(255,255,255,.5);

img 
  display: block;
  position: relative;
<div class="border">
  <img src="http://placehold.it/150" />
</div>

【讨论】:

【参考方案2】:

你可以使用插入 box-shadow 例如

http://codepen.io/anon/pen/qdEJGj

标记

<figure>
  <img src="http://lorempixel.com/300/300/nature/" />
</figure>

CSS

figure 
    display: inline-block;
    box-shadow: inset 0 0 0 10px rgba(255, 255, 255, .4);


figure img 
    display: block;
    position: relative;
    z-index: -1;

如果您需要对hover 产生这种效果,您也可以使用transition,例如

figure 
    display: inline-block;
    box-shadow: inset 0 0 0 10px rgba(255,255,255, 0);
    transition: all .5s 0s;


figure:hover 
    box-shadow: inset 0 0 0 10px rgba(255,255,255, .4);


figure img 
    display: block;
    position: relative;
    z-index: -1;

对于边框,我定义了具有40% 不透明度的白色。图像有一个负的z-index,因此应用于figure 元素的嵌入阴影可以看到(当然,如果需要,可以随意使用不同的包装元素)


结果

【讨论】:

我喜欢这个过渡,但我想让它成为一个像上面那样的类,所以我选择它作为解决方案。不过在这方面做得很好,我真的很感激!

以上是关于悬停时图像上的 CSS 内边框的主要内容,如果未能解决你的问题,请参考以下文章

CSS a:悬停图像边框

使用css悬停时td标签上的边框移动整个表格

CSS图像边框翻转效果而不调整图像大小?

如何设置悬停效果(注意:只有方形边框在悬停时应该像钻石形状一样旋转,而不是图像)[关闭]

css 链接上的边框悬停而不移动元素

悬停时的线性渐变底部边框