具有外边距的 100% 可扩展容器 div

Posted

技术标签:

【中文标题】具有外边距的 100% 可扩展容器 div【英文标题】:100% expandable container div with outside margin 【发布时间】:2011-10-15 01:51:53 【问题描述】:

我有一个令人费解的问题。

我需要一个 100% 宽、100% 高的容器,其边距为 20 像素,可随内容扩展。这是可能吗?我得到的最接近的是这种方法:

#container 
    position:absolute;
    top:0;
    bottom:0px;
    left:0;
    right:0;
    margin:20px;

但它不会随着内容的增加而扩大高度。

有人知道这方面的神术吗?

【问题讨论】:

我无法完全想象您的要求。你能解释更多吗? 是的。我需要一个 div,它的高度为 100%,宽度为 100%,但周围的空间宽度为 20px。像这样:manual.businesstool.dk/screen.jpg 让我知道,如果这没有帮助? :P 【参考方案1】:

我很确定不可能使用单个元素,但如果您不介意使用 3 个分隔符 div 元素,此解决方案适用于所有浏览器:

<html>
<head>
<style type="text/css">
* 
    margin: 0;

html, body 
    height: 100%; padding: 0; /* padding 0 is for jsfiddle */

#wrapper 
    min-height: 100%;
    height: auto !important;
    height: 100%;
    margin-left: 20px;
    margin-right: 20px;
    margin-bottom: -20px; /* the bottom margin is the negative value of the spacer height */
    background-color: #ccc;

.spacer.edge 
    background-color: white; /* same as body background */ 

.spacer 
    height: 20px;
 

</style>
</head>
<body>
    <div id="wrapper">
        <div class="spacer edge"></div>
        <!-- content here -->
        <div class="spacer"></div>
    </div>
    <div class="spacer edge"></div>
</body>
</html>

这是一个可以玩的小提琴:http://jsfiddle.net/dTyTW/

【讨论】:

您的原始解决方案 (jsfiddle.net/dTyTW) 甚至可以在 IE6 中使用,但是当内容很少时,您更新的解决方案在所有浏览器中都会失败。你应该恢复到原来的解决方案,我认为这正是 OP 正在寻找的。​​span> @thirydot heh 我只测试了 chrome 中的更新版本。恢复到以前。感谢您的提醒! 这就像一个魅力!非常有创意的工作 ;) 为没有 js 竖起大拇指,它适用于所有浏览器。谢谢!【参考方案2】:

如果你想用内容扩展 div,那么你需要设置 position : relative 并且为了坚持底部 padding-bottom 也需要设置。

#container 
position:relative;
top:20px;
bottom:20px;
left:20px;
right:20px;
padding-bottom: 80%;
border:1px solid red;

可以根据需要调整值。 试试here

【讨论】:

这也不起作用,它会扩展到窗口之外,即使它是空的。这不是意图:)【参考方案3】:

删除margin 并给每个位置一个20px

同时删除bottom

添加padding-bottom:20px;

#container 
    position:absolute;
    top:20px;
    left:20px;
    right:20px;
    padding-bottom:20px; 

http://jsfiddle.net/jasongennaro/w7dQP/3/

编辑

如果你不反对使用一些 jQuery,你也可以这样做

var h = $(document).height();
var h2 = $('#container').height();

if(h2 < h)
    $('#container').height(h);

这样可以确保如果div 小于浏览器视口,它将扩展以适应它。

一旦文本变大或变大,样式就会处理它。

http://jsfiddle.net/jasongennaro/w7dQP/8/

【讨论】:

你是对的,@Esben。这仅在内容已经是屏幕高度的 100% 或更多时才有效。 如果内容小于屏幕高度的 100%,请参见上面的编辑。 嘿,我确实用 jQuery 临时修复了它,但它让我很吃惊,我不能在纯 css 中做到这一点,这就是我开始这个线程的原因。【参考方案4】:
<html>
<style>
body

  margin:0px;

div

  position: absolute;
  padding: 20px;

img

  position: relative;
  width: 100%;

</style>
<body>
  <div>
    <img src="http://manual.businesstool.dk/screen.jpg" />
  </div>
</body>
</html>

使用 padding 属性...查找盒子模型。

【讨论】:

以上是关于具有外边距的 100% 可扩展容器 div的主要内容,如果未能解决你的问题,请参考以下文章

如何让可满足的 html 元素在其容器内向下扩展

将子级扩展到父级可滚动内容的 100% 高度

解决垂直外边距合并的几种办法

让DIV中的内容水平和垂直居中

css内边距问题,关于使用padding后容器被撑开

为啥 100% 不等于 100% 高度?