检测'transform:translate3d'支持

Jam*_*mie 37 css html5 css3

有谁知道我会如何检测transform: translate3d(x,y,z)支持?

我的问题是我想translate3d在支持它的浏览器中使用,因为它倾向于使用硬件加速,因此动画更顺畅,然后回到translate不支持的地方.

Lor*_*ori 43

看看这个解决方案.

它基于以下事实:如果浏览器支持转换,则值为

window.getComputedStyle(el).getPropertyValue('transform')
Run Code Online (Sandbox Code Playgroud)

将3d变换应用于元素时,将包含包含变换矩阵的字符串el.否则,它将是undefined或字符串'none',如Opera 12.02的情况.

它适用于所有主流浏览器.

代码:

function has3d() {
    if (!window.getComputedStyle) {
        return false;
    }

    var el = document.createElement('p'), 
        has3d,
        transforms = {
            'webkitTransform':'-webkit-transform',
            'OTransform':'-o-transform',
            'msTransform':'-ms-transform',
            'MozTransform':'-moz-transform',
            'transform':'transform'
        };

    // Add it to the body to get the computed style.
    document.body.insertBefore(el, null);

    for (var t in transforms) {
        if (el.style[t] !== undefined) {
            el.style[t] = "translate3d(1px,1px,1px)";
            has3d = window.getComputedStyle(el).getPropertyValue(transforms[t]);
        }
    }

    document.body.removeChild(el);

    return (has3d !== undefined && has3d.length > 0 && has3d !== "none");
}
Run Code Online (Sandbox Code Playgroud)

  • @BradAzevedo谢谢,我的回答已被编辑. (3认同)
  • 从理论上讲,如果一些奇怪的浏览器不支持`getComputedStyle`,该函数可能会抛出错误.修复了你的答案. (2认同)

Jon*_*ran 10

宣布3D变换原始博客文章有一个图像翻转演示,它使用媒体查询来完成,如下所示:

@media all and (-webkit-transform-3d) {
  /* Use the media query to determine if 3D transforms are supported */
  #flip-container {
    -webkit-perspective: 1000;
  }
  #flip-card {
    width: 100%;
    height: 100%;
    -webkit-transform-style: preserve-3d;
    -webkit-transition: -webkit-transform 1s;
  }
  #flip-container:hover #flip-card {
    -webkit-transform: rotateY(180deg);
  }
}
Run Code Online (Sandbox Code Playgroud)

这篇博文有一个很好的媒体查询介绍. 有更多细节.

  • 不幸的是,这仅适用于基于WebKit的浏览器. (3认同)

Vit*_*nko 9

您可以尝试CCS3 @supports:

@supports (transform: translate3d) {
  div {
    transform : translate3d(20px,0,0);
  }
}

@supports not (transform: translate3d) {
  div {
    transform: translate(20px,0);
  }
}
Run Code Online (Sandbox Code Playgroud)

我可以使用@support吗?

  • `@support`目前支持非常糟糕...... ios7不支持它,只有android 4.4支持:http://caniuse.com/css-featurequeries (3认同)

Spu*_*ley 4

我建议使用Modernizr

它对整个浏览器功能进行功能检测,包括 3D 转换。它还提供了一种为具有或不具有各种功能的浏览器指定 CSS 规则的方法,因此听起来它会完全满足您的要求。

希望有帮助。

  • 对于任何感兴趣的人,3dtransforms 检测功能在这里:https://github.com/Modernizr/Modernizr/blob/master/modernizr.js#L606 (4认同)
  • 抱歉应该提到已经尝试过,但它不支持上述场景。Modernizr.csstransforms3d 实际上会检查对“perspective”的支持,尽管“-[browser-prefix]-transform:transform3d(x,y,z)”在 chrome/ff 上可用,但目前仅在 Safari 中可用。 (3认同)