Last active
June 29, 2024 13:49
-
-
Save davidhund/b995353fdf9ce387b8a2 to your computer and use it in GitHub Desktop.
The simplest feature-detect for flexbox?
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
/* | |
* Trying to feature-detect (very naive) | |
* CSS Flexbox support. | |
* - Only most modern syntax | |
* | |
* Is this nonsense? | |
*/ | |
(function NaiveFlexBoxSupport(d){ | |
var f = "flex", e = d.createElement('b'); | |
e.style.display = f; | |
return e.style.display == f; | |
})(document); |
@brentonstrine, I think it's IE8 (per @davidhund's answer: https://gist.github.com/davidhund/b995353fdf9ce387b8a2#gistcomment-1317135)
David, how about this solution?
https://github.com/ergcode/ergonomic.detect_flex
Wrote a version of Davids script that returns a boolean
export const testFlexbox = () => {
const f = 'flex';
const fw = `-webkit-${f}`;
const el = document.createElement('b');
try {
el.style.display = fw;
el.style.display = f;
return !!(el.style.display === f || el.style.display === fw);
} catch (err) {
return false;
}
};
Or you could make it css property generic
function cssPropertySupported(pNames) {
const element = document.createElement('a')
let index = pNames.length
try {
while (index--) {
const name = pNames[index]
element.style.display = name
if (element.style.display === name) {
return true
}
}
} catch (pError) {}
return false
}
cssPropertySupported(['-webkit-box', '-ms-flex', 'flex'])
according to mcshaman post:
cssPropertySupported(['-webkit-box', '-ms-flex', 'flex'])
should be:
cssPropertySupported(['-ms-flexbox', '-webkit-box', 'flex'])
By the way:
return true
should be:
return name
so you know what syntax is used
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Just curious in what circumstances this will cause an error. I'm assuming it can cause an error since you added the
try/catch
block.