关于此的很多主题......但没有说明如何做到这一点。
我有我的JQM页眉和页脚。我希望内容区域填充头部和脚部之间的100%高度。
这是我的代码,怎么可能?
<body>
<div data-role="page" id="entryPage" data-theme="d">
<div data-role="header" id="header" data-position="fixed" data-theme="d">
<h1>Page Title</h1>
</div><!-- /header -->
<div data-role="content" id="content" data-theme="d">
<div id="columnwrapper">
<div id="leftcolumn">
<div class="innertube">
Point 1
</div>
<div class="innertube">
Point 1
</div>
</div>
</div>
<div id="rightcolumn">
<div class="innertube">
<div id="switch1">
test
</div>
</div>
<div class="innertube">
test2
</div>
</div>
<div id="contentcolumn">
<div class="innertube">Content</div>
<div class="innertube">Content</div>
</div>
</div><!-- /content -->
<div data-role="footer" id="footer" data-position="fixed" data-theme="d">
<div id="switch2">
<a href="#foo" data-role="button" data-icon="arrow-u">Expand main menu</a>
</div>
</div><!-- /footer -->
</div><!-- /page -->
</body>
CSS:
#columnwrapper{
float: left;
width: 100%;
margin-left: -75%; /*Set left margin to -(contentcolumnWidth)*/
background-color: #C8FC98;
}
#leftcolumn{
margin: 0 40px 0 75%; /*Set margin to 0 (rightcolumnWidth) 0 (contentcolumnWidth)*/
background: #C8FC98;
}
#rightcolumn{
float: left;
width: 40px; /*Width of right column*/
margin-left: -40px; /*Set left margin to -(RightColumnWidth)*/
background: yellowgreen;
}
#contentcolumn{
float: left;
width: 75%; /*Width of content column*/
background-color: blue;
}
.innertube{
margin: 0px; /*Margins for inner DIV inside each column (to provide padding)*/
margin-top: 0;
}
实际上内部区域只根据内容填充高度...意味着2分2行,但不是100%..
由于
答案 0 :(得分:10)
CSS position: fixed
在移动浏览器中无法正常运行。我的经验是使用Android和iOS浏览器,并且没有一个正确地表达position: fixed
(例外是iOS 5浏览器,但它仍处于测试阶段)。
当用户在移动浏览器中滚动时,不会将元素固定到屏幕而不移动它,而是将其视为position: absolute
,并在页面滚动时移动。
同样使用CSS overflow
属性将不允许在大多数移动设备上滚动(iOS支持它,但用户必须知道在滚动div中滚动时使用两根手指)。
然而,您可以使用CSS但请注意,您需要使用position: absolute
,或者您可以使用JavaScript来设置元素的高度。
这是一个使用JavaScript设置伪页面元素高度的jQuery Mobile解决方案:
$(document).delegate('#page_name', 'pageshow', function () {
var the_height = ($(window).height() - $(this).find('[data-role="header"]').height() - $(this).find('[data-role="footer"]').height());
$(this).height($(window).height()).find('[data-role="content"]').height(the_height);
});
要获得完美无瑕的完成,您需要考虑目标设备的地址栏的行为,因为如果您想要一个全屏网页,那么您必须将地址栏的高度添加到页面的高度。
答案 1 :(得分:3)
谢谢,贾斯帕!这对我帮助很大。
我不得不乱用很多东西来使用多个页眉/页脚,并考虑到ios中的url栏。我想我会为其他任何有此问题的人分享我的解决方案。 到目前为止,这在ios模拟器中对我有用,但我很想听听它在其他设备上是如何工作的。
/* detect device */
var ua = navigator.userAgent,
iphone = ~ua.indexOf('iPhone') || ~ua.indexOf('iPod'),
ipad = ~ua.indexOf('iPad'),
ios = iphone || ipad,
android = ~ua.indexOf('Android');
$(document).delegate('#the_page', 'pageshow', function () {
var $page = $(this),
$target = $(this).find('.fullHeight'),
t_padding = parseInt($target.css('padding-top'))
+ parseInt($target.css('padding-bottom')),
w_height = (ios)? screen.height-65: $(window).height(); // "-65" is to compensate for url bar. Any better ideas?
headFootHeight = 0;
// Get total height for all headers and footers on page
$page.find('[data-role="footer"], [data-role="header"]').each(function() {
var myTotalHeight = $(this).height()
+ parseInt( $(this).css('padding-top') )
+ parseInt( $(this).css('padding-bottom') );
headFootHeight += myTotalHeight;
});
var the_height = (w_height - headFootHeight);
$page
.height(w_height)
.find('.fullHeight')
.height(the_height - t_padding);
});
此脚本在'.fullHeight'上设置100%高度,而不是[data-role = content]以提供更大的灵活性,但您只需将fullHeight类添加到[data-role = content]元素即可。
我仍然遇到的一个问题是补偿ios中的url栏,并找到适用于各种设备的窗口高度。有什么想法?
答案 2 :(得分:1)
CSS:
footer {
display: block;
position: fixed;
left: 0;
bottom: 0;
right: 0;
height: 50px;
background-color: #333;
overflow: hidden;
z-index:1000;
-webkit-transform: translateZ(0);
opacity:.9;
}
header{
display:block;
position: fixed;
left:0;
right:0;
top:0;
height:50px;
overflow: hidden;
}
section{
display:block;
position:fixed;
left:0;
top:50px;
bottom:50px;
right:0;
overflow-y: auto;
}
nav{
display:block;
height:100%;
-webkit-backface-visibility: hidden;
}
.body{
overflow-y: hidden;
}
.bar {
border: 1px solid #2A2A2A;
background: #111111;
color: #ffffff;
font-weight: bold;
text-shadow: 0 -1px 1px #000000;
background-image: -webkit-gradient(linear, left top, left bottom, from(#3c3c3c), to(#111)); /* Saf4+, Chrome */
background-image: -webkit-linear-gradient(top, #3c3c3c, #111); /* Chrome 10+, Saf5.1+ */
background-image: -moz-linear-gradient(top, #3c3c3c, #111); /* FF3.6 */
background-image: -ms-linear-gradient(top, #3c3c3c, #111); /* IE10 */
background-image: -o-linear-gradient(top, #3c3c3c, #111); /* Opera 11.10+ */
background-image: linear-gradient(top, #3c3c3c, #111);
}
唯一需要的HTML:
<header class="bar" id="AllHead"></header>
<div data-role="content" class="content" id="home"><section><nav></nav></section></div><!-- /content -->
<footer class="bar" id="allFoot"></footer>
</div><!-- /page -->
然后,您可以在页脚和底部导航栏中设置所需的任何项目 无论发生什么事情,这总是看起来是正确的,每当你碰到某些东西时,这也不会闪烁。希望它有所帮助