【问题标题】:transition effect not working on hover with linear-gradient to bottom过渡效果不适用于线性渐变到底部的悬停
【发布时间】:2021-01-06 20:04:44
【问题描述】:

我有两个框,每个框都有 :hover 选择器,用于转换线性渐变背景图像。 到顶部的线性渐变与过渡效果完美(下面的代码)。

.box7:hover{
            color: #FFF; 
            background-image: linear-gradient(to top, #000 50%, #fff 50%);
            background-position: 0% 100%;
            background-size: 100% 200%;
            transition: all 1s ease;
            border: none;
        }

但是我遇到了线性渐变到底部的问题,过渡效果似乎不起作用(下面的代码)。

.box2:hover{
            color: #FFF; 
            background-image: linear-gradient(to bottom, #000 50%, #fff 50%);
            background-position: 100% 0%;
            background-size: 100% 200%;
            transition: all 1s ease;
            border: none;
        }

任何帮助将不胜感激。 以下是要检查的链接(悬停在所有框上) https://conrad93.github.io/linear-gradient-sliding-effect/boxbox.html

【问题讨论】:

  • 寻求代码帮助的问题必须包括在问题本身中重现它所需的最短代码,最好是在堆栈片段中。尽管您提供了一个链接,但如果它变得无效,那么您的问题对于未来遇到同样问题的其他 SO 用户将毫无价值。见Something in my website/example doesn't work can I just paste a link

标签: css css-transitions linear-gradients


【解决方案1】:

问题是当您没有将鼠标悬停在元素上时,您的样式不会被应用。因此,解决方案是将这些样式也应用于元素的默认状态。像这样的:

// html

<div class="container">
  <div class="box box-1"></div>
  <div class="box box-2"></div>
  <div class="box box-3"></div>
  <div class="box box-4"></div>
</div>

//  CSS

.container {
  display: flex;
}

.box {
  width: 100px;
  height: 100px;
  border: solid 1px red;
  margin: 5px;
  transition: all .4s ease;
  background-color: lightgoldenrodyellow;
}

.box-1 {
  background-image: linear-gradient(to top, crimson 50%, lightgoldenrodyellow 50%);
  background-position: 0% 0%;
  background-size: 100% 200%;
}

.box-1:hover {
  background-position: 0% 100%;
}

.box-2 {
  background-image: linear-gradient(to bottom, crimson 50%, lightgoldenrodyellow 50%);
  background-position: 0% -100%;
  background-size: 100% 200%;
}

.box-2:hover {
  background-position: 0% -200%;
}

.box-3 {
  background-color: crimson;
  background-image: linear-gradient(to bottom left, crimson 50%, lightgoldenrodyellow 50%);
  background-position: 0% 100%;
  background-size: 200% 200%;
  background-repeat: no-repeat;
}

.box-3:hover {
  background-position: 0% -100%;
}

.box-4 {
  background-image: linear-gradient(to top right, crimson 50%, lightgoldenrodyellow 50%);
  background-position: 0% -100%;
  background-size: 200% 200%;
  background-repeat: no-repeat;
}

.box-4:hover {
  background-position: 0% 100%;
}

在悬停状态的声明块中,您只需要声明那些正在更改的属性,在本例中为background-position

这是JsFiddle 上的一个工作示例。

您可能还希望对角渐变从元素的左下角向上动画。这有点棘手,但您可以在示例中看到它的工作原理。要了解它为什么起作用,您需要了解 background-position 属性中的 x 和 y 值的含义。 MDN docs 是一个学习的好地方。

【讨论】:

  • 你能在我的代码中显示到底部的线性渐变,但不能显示到底部
  • 是的,我将其添加到示例中。其他方向,例如从左到右,只需遵循相同的模式。
猜你喜欢
  • 2013-09-04
  • 2021-12-13
  • 2016-03-13
  • 2020-06-03
  • 2016-02-15
  • 2014-12-10
  • 1970-01-01
  • 2018-09-17
  • 2018-06-16
相关资源
最近更新 更多