当背景使用CSS渐变时,可以在悬停时操纵背景吗?

时间:2013-02-10 03:40:19

标签: hover gradient css

我有这个具有内联样式的按钮。它是内联的,因为它是用户选择的,所以不幸的是无法将类链接到此。

所以我有以下CSS内联:

background: #1e5799; /* Old browsers */
background: -moz-linear-gradient(top,  #1e5799 0%, #7db9e8 100%); /* FF3.6+ */
background: -webkit-gradient(linear, left top, left bottom, color-stop(0%,#1e5799), color-stop(100%,#7db9e8)); /* Chrome,Safari4+ */
background: -webkit-linear-gradient(top,  #1e5799 0%,#7db9e8 100%); /* Chrome10+,Safari5.1+ */
background: -o-linear-gradient(top,  #1e5799 0%,#7db9e8 100%); /* Opera 11.10+ */
background: -ms-linear-gradient(top,  #1e5799 0%,#7db9e8 100%); /* IE10+ */
background: linear-gradient(to bottom,  #1e5799 0%,#7db9e8 100%); /* W3C */
filter: progid:DXImageTransform.Microsoft.gradient( startColorstr='#1e5799', endColorstr='#7db9e8',GradientType=0 ); /* IE6-9 */

所以我的问题是,我怎么能应用悬停颜色,我想简单地以某种方式反转背景。但请记住我事先并不知道颜色,因此我无法在悬停时使用任何颜色。但如果我简单地反转背景,它将模拟悬停效果。

此外,按钮可以是可变尺寸。

可以这样做吗?

这是一个小提琴http://jsfiddle.net/hLrvA/

我已经尝试了这个,它有点工作,但不是真的因为它没有填充按钮。

a:hover { background-position:0 -15px !important; }

我将非常感谢任何关于如何解决此问题的见解。

2 个答案:

答案 0 :(得分:0)

在悬停状态下反转背景颜色的唯一方法是在每个背景属性中交换十六进制值。

但是,您可以应用悬停状态,该状态使用基于梯度中定义的颜色的渐变作为默认状态。

Check it out on jsFiddle

HTML:

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

CSS:

a {
    background: #1e5799; /* Old browsers */
    background: -webkit-linear-gradient(#1e5799, #7db9e8);
    background: -moz-linear-gradient(#1e5799, #7db9e8);
    background: -o-linear-gradient(#1e5799, #7db9e8);
    background: linear-gradient(#1e5799, #7db9e8);
    filter: progid:DXImageTransform.Microsoft.gradient( startColorstr='#1e5799', endColorstr='#7db9e8',GradientType=0 );
    background-size:1px 200px;
    border-radius: 8px;
    color: #fff;
    cursor:pointer; 
    display: block;
    font-size: 1.4em;
    height: 100px;
    line-height: 100px;
    text-decoration: none;
    text-align: center;
    width: 200px;

    -webkit-transition: background 1s ease-out;
       -moz-transition: background 1s ease-out;
         -o-transition: background 1s ease-out;
            transition: background 1s ease-out;
}

a:hover {
    background-position:100px;
}

答案 1 :(得分:0)

尝试更改背景颜色属性时遇到了类似的事情:hover

<强> HTML

<div class="demo"></div>

<强> CSS

.demo{
    width: 50px;
    height: 150px;
    background: #388cb6;
    background: -moz-linear-gradient(top, #41a2c5 0%, #388cb6 50%, #327cab 100%);
    background: -webkit-gradient(linear, left top, left bottom, color-stop(0%,#41a2c5), color-stop(50%,#388cb6), color-stop(100%,#327cab));
    background: -webkit-linear-gradient(top, #41a2c5 0%,#388cb6 50%,#327cab 100%);
    background: -o-linear-gradient(top, #41a2c5 0%,#388cb6 50%,#327cab 100%);
    background: -ms-linear-gradient(top, #41a2c5 0%,#388cb6 50%,#327cab 100%);
    background: linear-gradient(to bottom, #41a2c5 0%,#388cb6 50%,#327cab 100%);
    filter: progid:DXImageTransform.Microsoft.gradient( startColorstr='#41a2c5', endColorstr='#327cab',GradientType=0 );

}
.demo:hover{
    background-color: red;
}

上述方法不起作用,但是如果您直接定位背景而不是更具体的背景颜色,那么它将起作用:

.demo:hover{
    background: red;
}

似乎大多数浏览器更喜欢单个内联后台声明而不是单个属性。

注意:我使用伪类来说明它不仅限于锚链接。