盒子阴影悬停过渡闪烁

Posted

技术标签:

【中文标题】盒子阴影悬停过渡闪烁【英文标题】:Box-shadow hover transition blinking 【发布时间】:2018-04-20 10:52:30 【问题描述】:

我正在尝试通过使黑色背景从左到右来使 box-shadow 像 img 上的幻灯片动画一样工作。但是如果没有这个奇怪的闪烁问题,我就无法做到。我已经在 Stack Overflow 上寻找解决方案。

我也试过用section代替img,但结果是一样的。

Here's the JSFiddle demo

html

<section>
</section>

CSS

section 
  border:black 1px solid;
  width:500px;
  height:200px;
  transition:1s ease-out


section:hover
  box-shadow:inset 500px 0 0 #222;
  float:left;
  transition:1s ease-out;

【问题讨论】:

【参考方案1】:

另一种解决方案是使用简单的伪元素并通过更改其右属性将过渡应用于宽度:

section 
  border: black 1px solid;
  width: 500px;
  height: 200px;
  position:relative;
  color:#c2c2c2;
  text-align:center;
  padding-top:50px;
  box-sizing:border-box;


section:before 
  position: absolute;
  content: " ";
  top: 0;
  bottom: 0;
  left: 0;
  background: #000;
  right: 100%;
  transition:1s ease-out;
  z-index:-1;

section:hover::before 
  right:0;
<section>
  add your text here
</section>

【讨论】:

【参考方案2】:

这似乎是box-shadow 绘制方式的结果。尝试另一种方法。这是一个无闪烁的解决方案,它可以加厚左边框而不是添加框阴影:

div 
  position: relative;
  display: inline-block;

section 
  border: black 1px solid;
  width: 500px;
  height: 200px;
  transition: 1s ease-out;
  box-sizing: border-box;


div:hover section 
  border-left-width: 500px;
  float: left;
  transition: 1s ease-out;


section~* 
  position: absolute;
  top: 50%;
  left: 50%;
  transform: translateX(-50%) translateY(-50%);
  color: #888;
<div class="prog">
  <section></section>
  <p>Here's some text content.</p>
</div>

https://jsfiddle.net/k5kznmvL/

【讨论】:

【参考方案3】:

您也可以简单地在初始状态中添加某种盒子阴影模拟,其传播半径非常小。

  section 
      box-shadow: inset 0 0 0 0.01px white;
  

【讨论】:

以上是关于盒子阴影悬停过渡闪烁的主要内容,如果未能解决你的问题,请参考以下文章

如何修复框阴影过渡不适用于悬停?

html 定价面板,带有过渡造型的精妙盒子阴影

为啥过渡框阴影会导致整页重绘?

悬停时的 CSS 变换和框阴影

如何让我的 div 的框阴影在悬停时淡入(而不是在悬停时淡出)?

CSS3 过渡缓入和缓出框阴影