具有线性渐变的CSS过渡

我正在尝试向按钮添加过渡,我的背景是使用css linear-gradient制成的,但无法正常工作。

这是我的按钮的CSS。

a.button
{
background: -webkit-gradient(linear, left top, left bottom, color-stop(0%,@green), color-stop(100%,#a5c956));
-webkit-transition: background 5s linear;
}

a.button:hover
{
-webkit-gradient(linear, left top, left bottom, color-stop(0%,@greenhover), color-stop(100%,#89af37))
}

如果您想知道@green和@greenhover,我正在使用.less来制作CSS。

这有什么问题吗? 有任何想法吗?

Johan Alkstål asked 2020-01-14T10:59:22Z
8个解决方案
40 votes

可悲的是,您现在真的不能过渡渐变。

因此,唯一可行的解决方法是使用具有所需渐变的额外元素并过渡其不透明度:

<a href="#" class="button"><span class="button-helper"></span>button</a>
<a href="#" class="button"><span class="button-helper"></span>button</a>

kizu answered 2020-01-14T11:00:43Z
23 votes

这很棘手..当然,棘手的技巧很酷;)

好的..我有解决办法。 它基本上是通过惊人的:after选择器完成的

:after
:after


注意:我只是添加了:after sudo类,仅用于顶部图像占位符小。

有一个很棒的样式;)

Biskrem Muhammad answered 2020-01-14T11:02:21Z
5 votes

您可以使用阴影伪造渐变过渡!例如,从我的页面之一:

c { 
color: #FFF;
background: #000;
border-style:solid;
border-color:#CCC;
border-width: 0 0 0 1px;
box-shadow: 2px 2px 2px #555, inset 0 25px 20px -10px rgba(255, 255, 255, 0.3),
    inset 0 -15px 20px -10px rgba(0, 0, 0, 0.15);
-moz-box-shadow: 2px 2px 2px #555, inset 0 25px 20px -10px rgba(255, 255, 255, 0.3),
    inset 0 -15px 20px -10px rgba(0, 0, 0, 0.15);
-o-box-shadow: 2px 2px 2px #555, inset 0 25px 20px -10px rgba(255, 255, 255, 0.3),
    inset 0 -15px 20px -10px rgba(0, 0, 0, 0.15);
-webkit-box-shadow: 2px 2px 2px #555,
    inset 0 25px 20px -10px rgba(255, 255, 255, 0.3),
    inset 0 -15px 20px -10px rgba(0, 0, 0, 0.15);
-moz-transition: background-color .5s ease; 
-o-transition: background-color .5s ease; 
-webkit-transition: background-color .5s ease-in-out; 
transition: background-color .5s ease;
}

其次是:

c:hover {
color:#FFF;
background: #505;
position:relative;
top:1px;
box-shadow: -1px -1px -1px #555,inset 0 20px 20px -10px rgba(0, 0, 0, 0.15), 
        inset 0 -15px 20px -10px rgba(255, 255, 255, 0.3);
-moz-box-shadow: -1px -1px -1px #555,inset 0 20px 20px -10px rgba(0, 0, 0, 0.15),
    inset 0 -15px 20px -10px rgba(255, 255, 255, 0.3);
-o-box-shadow: -1px -1px -1px #555, inset 0 20px 20px -10px rgba(0, 0, 0, 0.15), 
        inset 0 -15px 20px -10px rgba(255, 255, 255, 0.3);
-webkit-box-shadow: 1px -1px -1px #555, inset 0 20px 20px -10px rgba(0, 0, 0, 0.15), 
    inset 0 -15px 20px -10px rgba(255, 255, 255, 0.3);
}

在这里,您实际上是在使用嵌入式阴影作为类似Photoshop的蒙版,从而对基础元素造成渐变效果。 悬停时,反转效果。

Mark Choi answered 2020-01-14T11:02:50Z
2 votes

如果将鼠标悬停在按钮上时要突出显示一点,则有一个更简单的解决方案。 您可以将渐变稍微往下移,并使背景色与渐变的顶部颜色相同:[http://cdpn.io/oaByI]

我知道这是非常有限的,但是对于该用例来说是否很好用。

Hampus Ahlgren answered 2020-01-14T11:03:15Z
1 votes

我知道这个问题已经很老了,但是我找到了一种在某些情况下可以使基本渐变动画化的好方法。

此方法将使您可以为渐变的颜色设置动画,但不能设置颜色停止位置的动画。

[https://jsfiddle.net/62vzydeh/]

HTML:

<div class="button">
    Click Me!
</div>

CSS:

.button {

  width: 200px;
  height: 30px;

  margin: 50px;
  padding-top: 10px;

  color: #C0C0C0;
  background: linear-gradient(to left, #F8F8F8, transparent 30%);
  background-color: #808080;

  text-align: center;
  font-family: sans-serif;

  cursor: pointer;

  transition: background-color 500ms;
}

.button:hover {

  background-color: #A0A0A0;
}
Gogeta70 answered 2020-01-14T11:03:52Z
1 votes

我知道这很老了,但是我找不到任何好的解决方案。 因此,这里我为此提供了很好的解决方案。

首先在“:before”上创建渐变,并用不透明度隐藏它,然后在悬停时将不透明度转换为1。

[https://jsfiddle.net/sumon380/osqLpboc/3/]

HTML:

<a href="#" class="button">Button</a>

CSS:

.button {
    text-decoration: none;
    padding: 10px 25px;
    font-size: 20px;
    color: #333;
    display: inline-block;
    background: #d6e9eb;
    position: relative;
    z-index: 1;
    transition: color 0.3s ease-out;

}
.button:before {
    background: #91a5f4;
    background: linear-gradient(135deg, #91a5f4 0%, #b08cf9 86%);
    content: "";
    width: 100%;
    height: 100%;
    top: 0;
    left: 0;
    position: absolute;
    z-index: -1;
    opacity: 0;
    transition: opacity 0.3s ease-out;
}
.button:hover:before {
    opacity: 1;
}
.button:hover {
    color: #fff;
}
user2462948 answered 2020-01-14T11:04:30Z
0 votes

我尝试过的一种骇人听闻的方式是将大量<spans>复制到“位置”,此处仅CSS骇客:[https://codepen.io/philipphilip/pen/OvXEaV]

philip answered 2020-01-14T11:04:50Z
-1 votes

您必须在源代码中具有相同的样式,而在目标库中必须具有更改的样式。

喜欢

a {
   background: transparent;
   background: linear-gradient(transparent,transparent);
   -moz-transition: all 0.3s ease;
   -o-transition: all 0.3s ease;
   -webkit-transition: all 0.3s ease;
   transition: all 0.3s ease;
}
a:hover
{
   background: #abc07c;
   background: linear-gradient(#c5db95,#88a743);
}

Omid Moridi answered 2020-01-14T11:05:18Z
translate from https://stackoverflow.com:/questions/7363141/css-transition-with-linear-gradient