绝对 div 的填充在 Internet Explorer 7 中有不同的解释
Padding of absolute div interpreted differently in Internet Explorer 7
在 Internet Explorer 8 及更高版本以及所有其他浏览器中,当存在负边距时,绝对 div 元素的填充不会将内容推到页面下方。
但在 Internet Explorer 7 中,填充无论如何都会将内容下推。
此代码不使用 JavaScript。
这是它在 Internet Explorer 8、Firefox 和 Chrome(没有垂直溢出)中运行的屏幕截图:
这是 Internet Explorer 7 中相同代码 运行 的 gif:
这是我的代码:
p {
margin-top: 0;
margin-bottom: 0;
}
* {
-webkit-box-sizing: border-box;
-moz-box-sizing: border-box;
box-sizing: border-box;
}
html,
body {
margin: 0;
padding: 0;
height: 100%;
}
#container {
min-height: 100%;
position: relative;
}
#header {
background: yellow;
height:50px;
}
#body {
padding-bottom: 50px; /* Height of the footer */
}
#footer {
position: absolute;
bottom: 0;
width: 100%;
height: 50px; /* Height of the footer */
background: green;
}
#body {
height: 100%;
width: 100%;
position: absolute;
margin-top: -50px;
padding-top: 50px;
}
#main-content-container {
height: 100%;
}
.inset-boxshadow-and-background {
background-color: red;
height: 100%;
width: 100%;
}
</style>
<!--[if lt IE 7]>
<style media="screen" type="text/css">
#container {
height: 100%;
}
</style>
<![endif]-->
<body>
<div id="container">
<div id="header">
</div>
<div class="body-parent">
<div id="body">
<div id="main-content-container">
<div class="inset-boxshadow-and-background">
<!-- Body start -->
<p>In this demo the footer is pushed to the bottom of the screen in all standards compliant web browsers even when there is only a small amount of content on the page. This with work with IE 6 and IE 5.5 too. Non-standards compliant browsers degrade gracefully by positioning the footer under the content as per normal. Read the <a href="https://matthewjamestaylor.com/bottom-footer">full article</a> for all the details.</p>
<!-- Body end -->
</div>
</div>
</div>
</div>
<div id="footer">
</div>
</div>
</body>
请不要 "Internet Explorer 7 is useless" 因为我知道它很臭!
我用 IE 7 测试过,可以出问题。
当静态元素在 top/left 上被赋予负边距时,它会将元素拉向指定的方向。
但是如果将它应用于 bottom/right,它不会像您想象的那样移动元素 down/right。相反,它将任何后续元素拉到主元素中,使其重叠。
因此,由于这个原因,我认为您的页脚在顶部方向被拉了 50 像素。这可能是 IE 7 处理负边距的方式。
您可以尝试将其移除,或许能帮助您解决此问题。
参考:
尝试使用以下代码:
<style type="text/css">
p {
margin-top: 0;
margin-bottom: 0;
}
* {
-webkit-box-sizing: border-box;
-moz-box-sizing: border-box;
box-sizing: border-box;
}
html,
body {
margin: 0;
padding: 0;
height: 100%;
}
/* Core styles */
.header {
position: absolute; /* needed for stacking */
height: 50px;
width: 100%;
background-color: yellow;
}
.content {
position: absolute;/* needed for stacking */
top:50px;
width: 100%;
height: 100%;
background-color:red;
}
.footer {
position: absolute;/* needed for stacking */
width: 100%;
height: 50px;
bottom:-50px;
background-color:aqua;
}
#main-content-container {
height: 100%;
}
.inset-boxshadow-and-background {
background-color: red;
height: 100%;
width: 100%;
}
</style>
<div class="header">
<div class="header-inner"></div>
</div>
<div class="content">
<div class="content-inner">
<div id="body">
<div id="main-content-container">
<div class="inset-boxshadow-and-background">
<!-- Body start -->
<p>In this demo the footer is pushed to the bottom of the screen in all standards compliant web browsers even when there is only a small amount of content on the page. This with work with IE 6 and IE 5.5 too. Non-standards compliant browsers degrade gracefully by positioning the footer under the content as per normal. Read the <a href="https://matthewjamestaylor.com/bottom-footer">full article</a> for all the details.</p>
<!-- Body end -->
</div>
</div>
</div>
</div>
</div>
<div class="footer">
<div class="footer-inner"></div>
</div>
更新:以下代码在我这边运行良好,请参考。
<style type="text/css">
p {
margin-top: 0;
margin-bottom: 0;
}
* {
-webkit-box-sizing: border-box;
-moz-box-sizing: border-box;
box-sizing: border-box;
}
html,
body {
margin: 0;
padding: 0;
height: 100%;
}
#container {
height: 100%;
position: relative;
background-color:red;
}
#header {
position: absolute;
top:0;
width:100%;
background-color: yellow;
height: 50px;
}
.body-parent {
margin-top: 50px;
position: absolute;
}
#footer {
position: absolute;
bottom: 0;
width: 100%;
height: 50px; /* Height of the footer */
background-color: green;
}
#body {
height: 100%;
width: 100%;
padding-bottom: 50px;
}
#main-content-container {
height: 100%;
}
.inset-boxshadow-and-background {
background-color: red;
height: 100%;
width: 100%;
}
</style>
<div id="container">
<div id="header">
</div>
<div class="body-parent">
<div id="body">
<div id="main-content-container">
<div class="inset-boxshadow-and-background">
<!-- Body start -->
<p>In this demo the footer is pushed to the bottom of the screen in all standards compliant web browsers even when there is only a small amount of content on the page. This with work with IE 6 and IE 5.5 too. Non-standards compliant browsers degrade gracefully by positioning the footer under the content as per normal. Read the <a href="https://matthewjamestaylor.com/bottom-footer">full article</a> for all the details.</p>
<!-- Body end -->
</div>
</div>
</div>
</div>
<div id="footer">
</div>
</div>
结果如下:
这个奇怪的 IE7-only(IE6 和 IE8+ 显示正常)可以通过直接改变任何绝对定位的 div 来修复,负边距和相同数字的正填充。
这是JS:
window.onload = function(){
$('body').height( $(window).height() - 100 );
};
p {
margin-top: 0;
margin-bottom: 0;
}
* {
-webkit-box-sizing: border-box;
-moz-box-sizing: border-box;
box-sizing: border-box;
}
html,
body {
margin: 0;
padding: 0;
height: 100%;
}
#container {
min-height: 100%;
position: relative;
}
#header {
background: yellow;
height:50px;
}
#body {
padding-bottom: 50px; /* Height of the footer */
}
#footer {
position: absolute;
bottom: 0;
width: 100%;
height: 50px; /* Height of the footer */
background: green;
}
#body {
height: 100%;
width: 100%;
position: absolute;
margin-top: -50px;
padding-top: 50px;
}
#main-content-container {
height: 100%;
}
.inset-boxshadow-and-background {
background-color: red;
height: 100%;
width: 100%;
}
</style>
<!--[if lt IE 7]>
<style media="screen" type="text/css">
#container {
height: 100%;
}
</style>
<![endif]-->
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
<body>
<div id="container">
<div id="header">
</div>
<div class="body-parent">
<div id="body">
<div id="main-content-container">
<div class="inset-boxshadow-and-background">
<!-- Body start -->
<p>In this demo the footer is pushed to the bottom of the screen in all standards compliant web browsers even when there is only a small amount of content on the page. This with work with IE 6 and IE 5.5 too. Just remove the javascript to make it work in every browser except ie7, and keep the javascript to only run successfully it in IE7.</p>
<!-- Body end -->
</div>
</div>
</div>
</div>
<div id="footer">
</div>
</div>
</body>
在 Internet Explorer 8 及更高版本以及所有其他浏览器中,当存在负边距时,绝对 div 元素的填充不会将内容推到页面下方。
但在 Internet Explorer 7 中,填充无论如何都会将内容下推。
此代码不使用 JavaScript。
这是它在 Internet Explorer 8、Firefox 和 Chrome(没有垂直溢出)中运行的屏幕截图:
这是 Internet Explorer 7 中相同代码 运行 的 gif:
这是我的代码:
p {
margin-top: 0;
margin-bottom: 0;
}
* {
-webkit-box-sizing: border-box;
-moz-box-sizing: border-box;
box-sizing: border-box;
}
html,
body {
margin: 0;
padding: 0;
height: 100%;
}
#container {
min-height: 100%;
position: relative;
}
#header {
background: yellow;
height:50px;
}
#body {
padding-bottom: 50px; /* Height of the footer */
}
#footer {
position: absolute;
bottom: 0;
width: 100%;
height: 50px; /* Height of the footer */
background: green;
}
#body {
height: 100%;
width: 100%;
position: absolute;
margin-top: -50px;
padding-top: 50px;
}
#main-content-container {
height: 100%;
}
.inset-boxshadow-and-background {
background-color: red;
height: 100%;
width: 100%;
}
</style>
<!--[if lt IE 7]>
<style media="screen" type="text/css">
#container {
height: 100%;
}
</style>
<![endif]-->
<body>
<div id="container">
<div id="header">
</div>
<div class="body-parent">
<div id="body">
<div id="main-content-container">
<div class="inset-boxshadow-and-background">
<!-- Body start -->
<p>In this demo the footer is pushed to the bottom of the screen in all standards compliant web browsers even when there is only a small amount of content on the page. This with work with IE 6 and IE 5.5 too. Non-standards compliant browsers degrade gracefully by positioning the footer under the content as per normal. Read the <a href="https://matthewjamestaylor.com/bottom-footer">full article</a> for all the details.</p>
<!-- Body end -->
</div>
</div>
</div>
</div>
<div id="footer">
</div>
</div>
</body>
请不要 "Internet Explorer 7 is useless" 因为我知道它很臭!
我用 IE 7 测试过,可以出问题。
当静态元素在 top/left 上被赋予负边距时,它会将元素拉向指定的方向。
但是如果将它应用于 bottom/right,它不会像您想象的那样移动元素 down/right。相反,它将任何后续元素拉到主元素中,使其重叠。
因此,由于这个原因,我认为您的页脚在顶部方向被拉了 50 像素。这可能是 IE 7 处理负边距的方式。
您可以尝试将其移除,或许能帮助您解决此问题。
参考:
尝试使用以下代码:
<style type="text/css">
p {
margin-top: 0;
margin-bottom: 0;
}
* {
-webkit-box-sizing: border-box;
-moz-box-sizing: border-box;
box-sizing: border-box;
}
html,
body {
margin: 0;
padding: 0;
height: 100%;
}
/* Core styles */
.header {
position: absolute; /* needed for stacking */
height: 50px;
width: 100%;
background-color: yellow;
}
.content {
position: absolute;/* needed for stacking */
top:50px;
width: 100%;
height: 100%;
background-color:red;
}
.footer {
position: absolute;/* needed for stacking */
width: 100%;
height: 50px;
bottom:-50px;
background-color:aqua;
}
#main-content-container {
height: 100%;
}
.inset-boxshadow-and-background {
background-color: red;
height: 100%;
width: 100%;
}
</style>
<div class="header">
<div class="header-inner"></div>
</div>
<div class="content">
<div class="content-inner">
<div id="body">
<div id="main-content-container">
<div class="inset-boxshadow-and-background">
<!-- Body start -->
<p>In this demo the footer is pushed to the bottom of the screen in all standards compliant web browsers even when there is only a small amount of content on the page. This with work with IE 6 and IE 5.5 too. Non-standards compliant browsers degrade gracefully by positioning the footer under the content as per normal. Read the <a href="https://matthewjamestaylor.com/bottom-footer">full article</a> for all the details.</p>
<!-- Body end -->
</div>
</div>
</div>
</div>
</div>
<div class="footer">
<div class="footer-inner"></div>
</div>
更新:以下代码在我这边运行良好,请参考。
<style type="text/css">
p {
margin-top: 0;
margin-bottom: 0;
}
* {
-webkit-box-sizing: border-box;
-moz-box-sizing: border-box;
box-sizing: border-box;
}
html,
body {
margin: 0;
padding: 0;
height: 100%;
}
#container {
height: 100%;
position: relative;
background-color:red;
}
#header {
position: absolute;
top:0;
width:100%;
background-color: yellow;
height: 50px;
}
.body-parent {
margin-top: 50px;
position: absolute;
}
#footer {
position: absolute;
bottom: 0;
width: 100%;
height: 50px; /* Height of the footer */
background-color: green;
}
#body {
height: 100%;
width: 100%;
padding-bottom: 50px;
}
#main-content-container {
height: 100%;
}
.inset-boxshadow-and-background {
background-color: red;
height: 100%;
width: 100%;
}
</style>
<div id="container">
<div id="header">
</div>
<div class="body-parent">
<div id="body">
<div id="main-content-container">
<div class="inset-boxshadow-and-background">
<!-- Body start -->
<p>In this demo the footer is pushed to the bottom of the screen in all standards compliant web browsers even when there is only a small amount of content on the page. This with work with IE 6 and IE 5.5 too. Non-standards compliant browsers degrade gracefully by positioning the footer under the content as per normal. Read the <a href="https://matthewjamestaylor.com/bottom-footer">full article</a> for all the details.</p>
<!-- Body end -->
</div>
</div>
</div>
</div>
<div id="footer">
</div>
</div>
结果如下:
这个奇怪的 IE7-only(IE6 和 IE8+ 显示正常)可以通过直接改变任何绝对定位的 div 来修复,负边距和相同数字的正填充。
这是JS:
window.onload = function(){
$('body').height( $(window).height() - 100 );
};
p {
margin-top: 0;
margin-bottom: 0;
}
* {
-webkit-box-sizing: border-box;
-moz-box-sizing: border-box;
box-sizing: border-box;
}
html,
body {
margin: 0;
padding: 0;
height: 100%;
}
#container {
min-height: 100%;
position: relative;
}
#header {
background: yellow;
height:50px;
}
#body {
padding-bottom: 50px; /* Height of the footer */
}
#footer {
position: absolute;
bottom: 0;
width: 100%;
height: 50px; /* Height of the footer */
background: green;
}
#body {
height: 100%;
width: 100%;
position: absolute;
margin-top: -50px;
padding-top: 50px;
}
#main-content-container {
height: 100%;
}
.inset-boxshadow-and-background {
background-color: red;
height: 100%;
width: 100%;
}
</style>
<!--[if lt IE 7]>
<style media="screen" type="text/css">
#container {
height: 100%;
}
</style>
<![endif]-->
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
<body>
<div id="container">
<div id="header">
</div>
<div class="body-parent">
<div id="body">
<div id="main-content-container">
<div class="inset-boxshadow-and-background">
<!-- Body start -->
<p>In this demo the footer is pushed to the bottom of the screen in all standards compliant web browsers even when there is only a small amount of content on the page. This with work with IE 6 and IE 5.5 too. Just remove the javascript to make it work in every browser except ie7, and keep the javascript to only run successfully it in IE7.</p>
<!-- Body end -->
</div>
</div>
</div>
</div>
<div id="footer">
</div>
</div>
</body>