【问题标题】:get css background property of gradient element by .css()通过 .css() 获取渐变元素的 CSS 背景属性
【发布时间】:2014-04-29 18:02:19
【问题描述】:

我正在尝试使用 jquery 从渐变背景切换到元素的纯背景。

由于某些原因,我不能使用 toggleClass 和其他类方法,所以我必须修改元素的 css 属性——在我的例子中是背景颜色。

问题是,当我尝试接收当前背景 css 属性时,.css() 方法返回一些奇怪的东西。

我的元素具有多个背景(渐变)属性,针对不同的浏览器进行了优化

 .element {
       background: #ce4f57 !important;
       background: -moz-linear-gradient(top, #ce4f57 0%, #b7333b 100%) !important;
       background: -webkit-gradient(linear, left top, left bottom, color-stop(0%, #ce4f57), color-stop(100%, #b7333b)) !important;
       background: -webkit-linear-gradient(top, #ce4f57 0%, #b7333b 100%) !important;
       background: -o-linear-gradient(top, #ce4f57 0%, #b7333b 100%) !important;
       background: -ms-linear-gradient(top, #ce4f57 0%, #b7333b 100%) !important;
       background: linear-gradient(to bottom, #ce4f57 0%, #b7333b 100%) !important;
       filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ce4f57', endColorstr='#b7333b', GradientType=0) !important;
     }

当我尝试接收该属性时

 $('.element').css('background');

我明白了:

 rgba(0, 0, 0, 0) linear-gradient(rgb(206, 79, 87) 0%, rgb(183, 51, 59) 100%) repeat scroll 0% 0% / auto padding-box border-box

JsFiddle

据我了解,它是编译属性?我可以通过 js 函数获取原始 css 吗? 如果不是,请建议如何编写正则表达式来获得渐变的第一种颜色,假设在不同的浏览器中可能有不同的编译 css...

【问题讨论】:

  • 我说它返回您的特定浏览器当前正在使用的值..
  • 看起来像这样,但我需要第一种颜色才能将背景从渐变变为纯色,我该如何获得它?
  • 您的意思是您正在寻找第一个值,也就是。背景:#ce4f57!重要; ?
  • 为什么不能使用toggleClass等类方法?有什么限制?
  • 因为它应该是不同类的一个功能......许多不同的类

标签: jquery css background


【解决方案1】:

如果您想选择渐变的第一个点 (0%),您可以通过

var css = $('.element').css('background-image');

然后拆分成一个RGB值

var gradient = css.split('0%')[0].split('linear-gradient(')[1]

在 Chrome 和 FF 中它可以正常工作。您可以使用以下小提琴对其进行测试:http://jsfiddle.net/6hvZT/277/

更新 - 这将是跨浏览器兼容:

$("button").click(function(){    
    var css = $('.element').css('background-image');
    var bg_color;

    if ( css === 'none' ) {
        bg_color = $('.element').css('background-color');
    } else {
        bg_color = css.split('0%')[0].split('linear-gradient(')[1]                  
    }

    $('#css').html(bg_color);
}); 

【讨论】:

  • 你的答案解决了这个问题(部分地,对​​于使用线性渐变属性的浏览器),但我正在寻找获取预编译 css 的一般方法
  • @ProstoTrader 我已经更新了在不支持线性渐变的浏览器中工作的解决方案
【解决方案2】:

您的代码只需稍作调整 - http://jsfiddle.net/jayblanchard/6hvZT/267/

$("button").click(function(){    
    var css = $('.element').css('background-color'); // note the change
    $('#css').html(css);
}); 

在小提琴中,内联样式应该覆盖分配的类,但看起来这里还有更多的作用。内联样式或应用样式无关紧要,单击返回“透明”,即继承样式。如果您注释掉 CSS,那么您将获得内联样式的返回值。

我可以在这个例子中使用 toggleClass() - http://jsfiddle.net/jayblanchard/6hvZT/270/

$('#b1').click(function() {
    $('#foo').toggleClass('element1 element2');
});

这不是你最初的问题吗?

【讨论】:

  • css('background-color') 返回 rgba(0, 0, 0, 0) 根本不是这种情况 - 我有红色背景,而不是黑色。 css('background') 至少返回渐变...
  • 实际上,当我测试 css('background') 时,它在 FF 中什么也不返回。感谢您的反对。
  • 我使用 chrome of couse
  • 其实浏览器应该没关系。您的访问者都将使用 Chrome 吗?
  • 明白了。我希望你能想办法弄明白,这听起来像是一些过于复杂的 CSS。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-06-01
  • 2011-12-09
  • 2012-08-26
  • 2011-08-08
  • 1970-01-01
相关资源
最近更新 更多