简体   繁体   English

检查CSS线性渐变支持

[英]Checking CSS Linear gradient support

Support for CSS properties(border-radius here) can be checked by this code: 此代码可以检查对CSS属性的支持(此处为border-radius):

if(document.createElement('test').style.borderRadius===''){
//some code
}

but what do I do in case of linear gradients? 但在线性渐变的情况下我该怎么办? The declaration being like: 声明如下:

background:linear-gradient(top,bottom,#123,#456);

PS I don't want to use Modernizr. PS我不想使用Modernizr。 I want to learn how-to do this. 我想学习如何做到这一点。

I looked up Modernizr's source code for you. 我查找了Modernizr的源代码。 It does a string search on backgroundImage after trying to set a gradient. 尝试设置渐变后,它会在backgroundImage上进行字符串搜索。 Here it is: 这里是:

https://github.com/Modernizr/Modernizr/blob/dfb4cff564dabcdb65b5957b235c3fa3e5b164eb/feature-detects/css/gradients.js https://github.com/Modernizr/Modernizr/blob/dfb4cff564dabcdb65b5957b235c3fa3e5b164eb/feature-detects/css/gradients.js

    var str1 = 'background-image:';
    var str2 = 'gradient(linear,left top,right bottom,from(#9f9),to(white));';
    var str3 = 'linear-gradient(left top,#9f9, white);';

    var css =
      // legacy webkit syntax (FIXME: remove when syntax not in use anymore)
      (str1 + '-webkit- '.split(' ').join(str2 + str1) +
       // standard syntax             // trailing 'background-image:'
       prefixes.join(str3 + str1)).slice(0, -str1.length);

    var elem = createElement('div');
    var style = elem.style;
    style.cssText = css;

    // IE6 returns undefined so cast to string
    return ('' + style.backgroundImage).indexOf('gradient') > -1;

You should probably just use Modernizr than copy and or rewrite this yourself. 您应该只使用Modernizr而不是复制或自己重写。 Sometimes people borrow things from third parties, and that's fine if the license allows it, just try to keep it separated from your code, include the license and copyright information. 有时候人们会从第三方借用东西,如果许可证允许,那就没关系,只是试着将它与代码分开,包括许可证和版权信息。

You can definitely roll your own poor man's Modernizr. 你绝对可以推出自己的穷人的Modernizr。 However, if you do go this route I recommend encapsulating all the checks in a browser validation object for ease-of-use. 但是,如果你这样做,我建议将所有检查封装在浏览器验证对象中,以便于使用。 Here's what I do: 这是我做的:

// Check browser capabilities
var browser = {
    '3d': testCss('perspective', 'Perspective'),
    'addEventListener': !!window.addEventListener,
    'animations': testCss('animationName', 'AnimationName'),
    'canvas': !!window.CanvasRenderingContext2D,
    'gradients': testCss('backgroundImage', '', 'background-image:linear-gradient(black,white),radial-gradient(black,white)'),
    'svg': !!(document.createElementNS && document.createElementNS('http://www.w3.org/2000/svg','svg').createSVGRect),
    'touch': !!('ontouchstart' in window || (window.DocumentTouch && document instanceof DocumentTouch) || navigator.msMaxTouchPoints),
    'transitions': testCss('transitionProperty', 'Transition'),
    'vw': testCss('width', '', 'width:100vw')
  };

function testCss(sPropStandard, sPropPrefixed, sCss) {
  var isSupported = false;
  if (sCss===undefined) {
    // Check property support
    var aProps = [
        sPropStandard,
        'Webkit' + sPropPrefixed,
        'Moz' + sPropPrefixed,
        'ms' + sPropPrefixed,
        'O' + sPropPrefixed
      ];
    for (var i=0; i<aProps.length; ++i) {
      if (aProps[i] in document.documentElement.style) {
        isSupported = true;
        break;
      }
    }
  } else {
    // Check value support
    var el = document.createElement('temp');
    el.style.cssText = sCss;
    isSupported = el.style[sPropStandard]!=='';
    delete el;
  }
  return isSupported;
}

Now you can check whether the browser supports CSS3 gradients with this: 现在您可以检查浏览器是否支持CSS3渐变:

if (browser.gradients) {
  // Do something with gradients here  
}

Similarly, to check whether the browser supports SVG: 同样,要检查浏览器是否支持SVG:

if (browser.svg) {
  // Do something with SVGs here  
}

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM