-
-
Save lorenzopolidori/3794226 to your computer and use it in GitHub Desktop.
Testing for CSS 3D Transforms Support
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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"); | |
} |
Good point, thanks. I changed it.
I had problems with elements with position: fixed
becoming invisible on Android Browser after running this function. I worked around it by sandboxing el
inside an iframe
: https://gist.github.com/jgonera/5250507
For performance I'd go with something like:
var has3d = (function(){
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 (transforms.hasOwnProperty(t)) {
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");
}());
Just so the above function only runs the once per page instead of whenever you need to detect if we have 3d...
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
The last lines can be wrapped to
return (has3d !== undefined && has3d.length > 0 && has3d !== "none");