是的,有不同的方法可以做到这一点。这是一种方式的演示:http://jsfiddle.net/ezanker/VE9XM/2/
我修改了您的标记,使其具有一个 jQM 页面 div,然后是一个容器 div,该容器 div 将根据设备调整大小:
<div data-role="page" id="page1">
<div id="contDiv">
<canvas id="header"></canvas>
<div id="listDiv">
<ul id="list" data-role="listview">
<li>...</li>
<li>...</li>
</ul>
<div>
</div>
</div>
然后我设置 CSS,使标题画布绝对位于顶部,列表容器填充页面的其余部分,如果列表长于可用高度,则允许滚动:
html, body, #page1, #contDiv {
margin: 0;
padding : 0;
}
#header {
position: absolute;
top: 0px;
left: 0px;
width: 100%;
height: 48px;
background-Color: #555;
}
#listDiv {
position: absolute;
top: 0px;
left:0px;
right: 0px;
bottom: 0px;
margin-top: 48px;
overflow: auto;
-webkit-overflow-scrolling: touch;
}
最后,我有一些 javascript 将容器 div 的大小调整为显示大小,并捕获调整大小和方向更改事件以使 div 保持正确的大小。
function ScaleContentToDevice() {
scroll(0, 0);
var viewportHeight = $(window).height();
var content = $("#contDiv");
var contentMargins = content.outerHeight() - content.height();
var contentheight = viewportHeight - contentMargins;
content.height(contentheight);
};
$(document).on("pageshow", function () {
ScaleContentToDevice();
});
$(window).on('resize orientationchange', function () {
ScaleContentToDevice()
});
附:不要忘记视口的元标记:
<meta name="viewport" content="width=device-width,initial-scale=1,maximum-scale=1.0 ,user-scalable=no">