这是我想出的……我的方法是将类应用于特定于每个支持的布局宽度的 body 元素。如果存在媒体查询,我只想应用这些类,所以首先我检查浏览器是否支持它们。这是讨论该问题的线程:
我需要一种简单的方法来使用 jquery 检测 CSS3 媒体查询支持
不幸的是,在这个解决方案中,我需要对我支持的宽度进行硬编码。如果有更好的方法可以做到这一点,请随时发布。目前,这是为了快速获得结果而做出的一个小小的权衡。
这是CSS:
/* Add to your main CSS file - used to test for media query support */
@media all and (min-width:1px) {
.mediatest {position:absolute}
}
这是JavaScript:
var $globals = {
mediaQuerySupport: false
};
function initMediaQueries () {
// tests for media query support and if it exists, it applies classes to the body element on window resize
$globals.mediaQuerySupport = false;
/*
test if the browser knows about media queries
create a div, apply the test class, test to see if the computed style is absolute... then delete the div
*/
var d = document.createElement('div');
d.className = "mediatest"; // found in main css file
document.body.appendChild(d);
if( window.getComputedStyle && window.getComputedStyle(d).position == "absolute") {
$globals.mediaQuerySupport = true;
}
document.body.removeChild(d);
if ($globals.mediaQuerySupport) {
// apply a class to the body element now and when window resizes
setBodyLayout ();
$(window).resize(function () {
setBodyLayout();
});
}
} // initMediaQueries ()
function mediaQueriesEnabled () {
return ($globals.mediaQuerySupport);
}
function setBodyLayout () {
// hard-coded widths for the supported media query layouts - change to your needs
var width = $(window).width();
if (width >= 1237) {
$('body').removeClass('layout-normal').removeClass('layout-ipad').addClass('layout-wide');
}
else if (width >= 980) {
$('body').removeClass('layout-wide').removeClass('layout-ipad').addClass('layout-normal');
}
else { // if narrower than 980, its the most narrow width
$('body').removeClass('layout-wide').removeClass('layout-normal').addClass('layout-ipad');
}
}