Chrome
Selector Hacks
Supports Hacks
@supports (-webkit-appearance:none) {}
- Chrome ≥ 28
- Safari ≥ 9
- Internet Explorer/Edge >= 12
- Opera ≥ 14
Property/Value Hacks
.selector { (;property: value;); }
.selector { [;property: value;]; }
- Chrome ≤ 28
- Safari ≤ 7
- Opera ≥ 14
JavaScript Hacks
Webkit
var isWebkit = 'WebkitAppearance' in document.documentElement.style;
- Chrome *
- Safari ≥ 3
- Opera ≥ 14
Media Query Hacks
Firefox
Selector Hacks
Media Query Hacks
Selector Hacks
Media Query Hacks
Selector Hacks
Media Query Hacks
@media all and (min--moz-device-pixel-ratio:0) and (min-resolution: .001dpcm) {}
@media all and (-moz-images-in-menus:0) and (min-resolution: .001dpcm) {}
- firefox ≥ 8
@media all and (min--moz-device-pixel-ratio:0) { @media (min-width: 0px) {} }
@media all and (-moz-images-in-menus:0) { @media (min-width: 0px) {} }
- firefox ≥ 11
Supports Hacks
Selector Hacks
Supports Hacks
Media Query Hacks
Supports Hacks
@supports (-moz-appearance:meterbar) and (background-blend-mode:difference,normal) {}
- firefox ≥ 30
JavaScript Hacks
Selector Hacks
JavaScript Hacks
Miscellaneous
Selector Hacks
Everything but Firefox and Internet Explorer ≤8
_::selection, .selector:not([attr*='']) {}
- Internet Explorer/Edge ≤ 8
- firefox *
Internet explorer/edge
Supports Hacks
@supports (-webkit-appearance:none) {}
- Chrome ≥ 28
- Safari ≥ 9
- Internet Explorer/Edge >= 12
- Opera ≥ 14
Selector Hacks
.unused-class can be any unused class
* html .selector {}
.unused-class.selector {}
- Internet Explorer/Edge ≤ 6
*:first-child+html .selector {}
.selector, x:-IE7 {}
*+html .selector {}
body*.selector {}
- Internet Explorer/Edge 7
Everything but Internet Explorer ≤7
html > /**/ body .selector {}
head ~ /**/ body .selector {}
- Internet Explorer/Edge ≤ 7
Everything but Firefox and Internet Explorer ≤8
_::selection, .selector:not([attr*='']) {}
- Internet Explorer/Edge ≤ 8
- firefox *
Everything but Internet Explorer ≤8
:root .selector {}
body:last-child .selector {}
body:nth-of-type(1) .selector {}
body:first-of-type .selector {}
.selector:not([attr*='']) {}
- Internet Explorer/Edge ≤ 8
Property/Value Hacks
Any combination of these characters: ! $ & * ( ) = % + @ , . / ` [ ] # ~ ? : |
.selector { !property: value; }
.selector { $property: value; }
.selector { &property: value; }
.selector { *property: value; }
.selector { )property: value; }
.selector { =property: value; }
.selector { %property: value; }
.selector { +property: value; }
.selector { @property: value; }
.selector { ,property: value; }
.selector { .property: value; }
.selector { /property: value; }
.selector { `property: value; }
.selector { ]property: value; }
.selector { #property: value; }
.selector { ~property: value; }
.selector { ?property: value; }
.selector { :property: value; }
.selector { |property: value; }
- Internet Explorer/Edge ≤ 7
Acts as an !important; string after ! can be anything
.selector { property: value !ie; }
- Internet Explorer/Edge ≤ 7
.selector { property: value9円; }
.selector { property/*\**/: value9円; }
- Internet Explorer/Edge 6-8
Media Query Hacks
Selector Hacks
Media Query Hacks
@media screen and (-ms-high-contrast: active), (-ms-high-contrast: none) {}
- Internet Explorer/Edge ≥ 10
Everything but Internet Explorer and Safari ≤6
@media screen { @media (min-width: 0px) {} }
- Internet Explorer/Edge *
- Safari ≤ 6
JavaScript Hacks
var isIE = document.all && window.XMLHttpRequest && !document.querySelector;
- Internet Explorer/Edge 7
var isIE = document.all && document.querySelector && !document.addEventListener;
- Internet Explorer/Edge 8
Check for Internet Explorer version
var ieVersion = /*@cc_on (function() {switch(@_jscript_version) {case 1.0: return 3; case 3.0: return 4; case 5.0: return 5; case 5.1: return 5; case 5.5: return 5.5; case 5.6: return 6; case 5.7: return 7; case 5.8: return 8; case 9: return 9; case 10: return 10;}})() || @*/ 0;
- Internet Explorer/Edge 3-10
Check for Internet Explorer version
var ieVersion = (function() { if (new RegExp("MSIE ([0-9]{1,}[\.0-9]{0,})").exec(navigator.userAgent) != null) { return parseFloat( RegExp.1ドル ); } else { return false; } })();
- Internet Explorer/Edge ≤ 10
var isIE = 'behavior' in document.documentElement.style && '-ms-user-select' in document.documentElement.style;
- Internet Explorer/Edge 10
var isIE = '-ms-scroll-limit' in document.documentElement.style && '-ms-ime-align' in document.documentElement.style;
- Internet Explorer/Edge 11
Conditional comments
Everything but Internet Explorer ≤9
<!--[if !IE]><!--> Everything but Internet Explorer ≤9 <!--<![endif]-->
- Internet Explorer/Edge ≤ 9
<!--[if IE 6]> Internet Explorer 6 <![endif]-->
<!--[if IE 7]> Internet Explorer 7 <![endif]-->
<!--[if IE 8]> Internet Explorer 8 <![endif]-->
<!--[if IE 9]> Internet Explorer 9 <![endif]-->
- Internet Explorer/Edge 6-9
<!--[if lte IE 6]> Internet Explorer 6 or less <![endif]-->
<!--[if lte IE 7]> Internet Explorer 7 or less <![endif]-->
<!--[if lte IE 8]> Internet Explorer 8 or less <![endif]-->
<!--[if lte IE 9]> Internet Explorer 9 or less <![endif]-->
- Internet Explorer/Edge 6-9
<!--[if gte IE 6]> Internet Explorer 6 or greater <![endif]-->
<!--[if gte IE 7]> Internet Explorer 7 or greater <![endif]-->
<!--[if gte IE 8]> Internet Explorer 8 or greater <![endif]-->
<!--[if gte IE 9]> Internet Explorer 9 or greater <![endif]-->
- Internet Explorer/Edge 6-9
Opera
Selector Hacks
Supports Hacks
@supports (-webkit-appearance:none) {}
- Chrome ≥ 28
- Safari ≥ 9
- Internet Explorer/Edge >= 12
- Opera ≥ 14
Property/Value Hacks
.selector { (;property: value;); }
.selector { [;property: value;]; }
- Chrome ≤ 28
- Safari ≤ 7
- Opera ≥ 14
JavaScript Hacks
Webkit
var isWebkit = 'WebkitAppearance' in document.documentElement.style;
- Chrome *
- Safari ≥ 3
- Opera ≥ 14
Selector Hacks
JavaScript Hacks
Selector Hacks
@media all and (-webkit-min-device-pixel-ratio:10000), not all and (-webkit-min-device-pixel-ratio:0) {}
- Opera ≤ 11
JavaScript Hacks
Media Query Hacks
JavaScript Hacks
Selector Hacks
Media Query Hacks
@media all and (-webkit-min-device-pixel-ratio:0) and (min-resolution: .001dpcm) { .selector {} }
- Chrome ≥ 29
- Opera ≥ 16
Opera mini
JavaScript Hacks
Safari
Selector Hacks
Supports Hacks
@supports (-webkit-appearance:none) {}
- Chrome ≥ 28
- Safari ≥ 9
- Internet Explorer/Edge >= 12
- Opera ≥ 14
Property/Value Hacks
.selector { (;property: value;); }
.selector { [;property: value;]; }
- Chrome ≤ 28
- Safari ≤ 7
- Opera ≥ 14
JavaScript Hacks
Webkit
var isWebkit = 'WebkitAppearance' in document.documentElement.style;
- Chrome *
- Safari ≥ 3
- Opera ≥ 14
Media Query Hacks
Everything but Internet Explorer and Safari ≤6
@media screen { @media (min-width: 0px) {} }
- Internet Explorer/Edge *
- Safari ≤ 6
Selector Hacks
JavaScript Hacks
var isSafari = !!navigator.userAgent.match(/safari/i) && !navigator.userAgent.match(/chrome/i) && typeof document.body.style.webkitFilter !== "undefined" && !window.chrome;
- Safari 6