这就是我的做法......我并不是说这是最好的解决方案。我觉得 CSS 媒体查询的支持还不够好,所以我整理了一小段 jQuery 来帮助我... http://jsfiddle.net/ZdR8P/
顺便说一句,我不是最好的 jQuery 程序员,所以可能有更好的方法来实现相同的结果(总是欢迎来自更好的 jQuery 程序员的反馈!)
这是HTML
<body>
<div id="one">Content in here</div>
<div id="two">Content in here</div>
<div id="three">Content in here</div>
</body>
jQuery
$(document).ready(function(){
var reportWidth = true;
if (reportWidth){
$('body').append('<div id="reportWidth">');
$('#reportWidth').css({
position:'fixed',
bottom:0,
left:0,
right:0,
backgroundColor:'#666666',
color:'#ffffff'
})
}
var breakpoint=new Array();
breakpoint.push(320); // iPhone 4 & 5 in portrait
breakpoint.push(480); // iPhone 4 in landscape
breakpoint.push(568); // iPhone 5 in landscape
breakpoint.push(768); // iPad in portrait
detectViewportWidth(breakpoint,reportWidth);
$(window).resize(function(){
detectViewportWidth(breakpoint,reportWidth)
});
});
function detectViewportWidth(breakpoint,reportWidth){
var htmlClassPrefix='pageWidth-';
var currentWidth=$(window).width();
var noBreakpoints=breakpoint.length;
var widthClass=noBreakpoints+'-'+(noBreakpoints+1);
$('html').removeClass(htmlClassPrefix+widthClass);
var previousArrayVal=0;
$.each(breakpoint,function(arrayKey,arrayVal){
$('html').removeClass(htmlClassPrefix+arrayKey+'-'+(arrayKey+1));
if (currentWidth<=arrayVal && currentWidth>previousArrayVal){
widthClass=arrayKey+'-'+(arrayKey+1);
}
previousArrayVal=arrayVal;
});
$('html').addClass(htmlClassPrefix+widthClass);
if (reportWidth){
$('#reportWidth').text(htmlClassPrefix+widthClass);
}
}
和CSS:
div {
border:1px solid #999999;
display:inline-block;
width: 29%;
margin: 0 1%;
}
.pageWidth-0-1 div,
.pageWidth-1-2 div
{
display:block;
width:98%;
}
基本上它的作用是检测视口的宽度,并沿着 .pageWidth-2-3 的行将一个类应用于 body 标签。如果您更改窗格的大小,您将看到底部的小状态栏相应地发生变化。.pageWidth-0-1 是最窄的,而 .pageWidt-4-5 是最宽的(但理论上你可以在 jQuery 中设置多少个分区——或“断点”)。
然后,在您的 CSS 中设置默认布局 - 您可能希望默认布局是正常的三列布局,如我在小提琴中所示 - 这假设您的大部分访问者将在普通监视器上查看.. 。 例如。
然后,您可以为视口变小时定义特定的样式行为。希望您可以看到,在我的 CSS 中,我设置了一个基本的三列布局,当 div 变为全宽并阻塞时,pageWidth 为 .pageWidth-0-1 或 .pageWidth-1-2 时会覆盖。
尝试更改小提琴中窗格的宽度,当它变得足够窄时,您应该会看到 div 落入垂直列中。
希望这可以给你一个起点?