CSS Div宽度百分比和填充而不破坏布局

时间:2010-08-21 20:35:18

标签: css padding fluid-layout

可能有一个简单的解决办法,但它现在困扰我多年......

让我解释一下情况。我有一个ID为'容器'的div,它包含页面中的所有内容(包括页眉和页脚),这些内容将保持所有内联,我只能做一个简单的'margin:0 auto;'而不是倍数。所以我要说#container的宽度设置为80%。现在,如果我将另一个div放入相同的宽度(80%)并给它带有'10'的填充的'标题'的ID,布局将“破坏”(可以这么说)因为页面添加了填充量宽度。那么,如何在不使用#header div的较低百分比等方法的情况下使其保持入境?基本上,我想让它变得流畅。

以下是一些示例代码,可以让您了解我所说的内容......

CSS

#container {
    position:relative;
    width:80%;
    height:auto;
}
#header {
    position:relative;
    width:80%;
    height:50px;
    padding:10px;
}

HTML

<div id="container">
    <div id="header">Header contents</div>
</div>

任何人都可以帮助我解决这个一直困扰着我的问题吗?

3 个答案:

答案 0 :(得分:90)

如果希望#header与容器的宽度相同,使用10px的填充,则可以省略其宽度声明。这将导致它隐式占用其整个父级的宽度(因为div默认为块级元素)。

然后,由于你没有在它上面定义宽度,10px的填充将在元素内正确应用,而不是添加到它的宽度:

#container {
    position: relative;
    width: 80%;
}

#header {
    position: relative;
    height: 50px;
    padding: 10px;
}

你可以看到它in action here

使用百分比宽度和像素填充/边距时,

不是在同一元素上定义它们(如果要精确控制大小)。将百分比宽度应用于父级,然后将像素填充/边距应用于未设置宽度的display: block子级。


<强>更新

处理此问题的另一个选择是使用box-sizing CSS规则:

#container { 
    -webkit-box-sizing: border-box; /* Safari/Chrome, other WebKit */
    -moz-box-sizing: border-box;    /* Firefox, other Gecko */
    box-sizing: border-box;         /* Opera/IE 8+ */

    /* Since this element now uses border-box sizing, the 10px of horizontal
       padding will be drawn inside the 80% width */
    width: 80%;
    padding: 0 10px;
}

这是一篇关于如何box-sizing works的帖子。

答案 1 :(得分:4)

您还可以使用CSS calc()功能从容器宽度的百分比中减去填充的宽度。

一个例子:

width: calc((100%) - (32px))

确保减去的宽度等于总填充,而不仅仅是一半。如果用16px填充内部div的两侧,那么你应该从最终宽度减去32px,假设下面的例子是你想要达到的。

&#13;
&#13;
.outer {
  width: 200px;
  height: 120px;
  background-color: black;
}

.inner {
  height: 40px;
  top: 30px;
  position: relative;
  padding: 16px;
  background-color: teal;
}

#inner-1 {
  width: 100%;
}

#inner-2 {
  width: calc((100%) - (32px));
}
&#13;
<div class="outer" id="outer-1">
  <div class="inner" id="inner-1"> width of 100% </div>
</div>

<br>
<br>

<div class="outer" id="outer-2">
  <div class="inner" id="inner-2"> width of 100% - 16px </div>
</div>
&#13;
&#13;
&#13;

答案 2 :(得分:2)

尝试从position移除header并将overflow添加到container

#container {
    position:relative;
    width:80%;
    height:auto;
    overflow:auto;
}
#header {
    width:80%;
    height:50px;
    padding:10px;
}