我有这样的HTML:
<div class="outer">
<div class="inner"></div>
</div>
这样的CSS:
.outer {
background-color: red;
}
.inner {
width: 1300px;
margin: 0 auto;
height: 300px;
border: 3px solid black;
}
问题是外部div被视口剪切的背景。 有谁知道它为什么这样工作?
我找到了解决方案:设置 display:table;和宽度:100%; 到外部div。但它看起来像一个黑客。我的布局出了什么问题?
答案 0 :(得分:2)
.outer
的宽度计算方式与此[source]:
以下约束必须包含在另一个的使用值中 属性:
margin-left + border-left-width + padding-left + width + padding-right + border-right-width + margin-right = width of containing block
如果
width
设置为auto
,则任何其他auto
值都会变为0
并且width
遵循由此产生的平等。
然后,.outer
的宽度将是containing block的宽度。
.inner
的宽度为1300px
,可能会超过.outer
的宽度,从而溢出。但是,.outer
的背景仅适用于.outer
,而不适用于其后代。
有不同的方法可以解决这个问题:
将背景添加到.inner
.inner {
background-color: inherit;
}
.outer {
background-color: red;
}
.inner {
width: 1300px;
margin: 0 auto;
height: 300px;
border: 3px solid black;
background-color: inherit;
}
<div class="outer">
<div class="inner"></div>
</div>
使用.outer
display: table
包围其内容
.outer {
display: table;
}
.outer {
background-color: red;
display: table;
}
.inner {
width: 1300px;
margin: 0 auto;
height: 300px;
border: 3px solid black;
}
<div class="outer">
<div class="inner"></div>
</div>
使用.outer
(或display: inline-block
)
inline-table
包围其内容
.outer {
display: inline-block;
}
但是,请注意.outer
将是内联级别的。如果它被其他内联元素包围,则可能会出现问题。
.outer {
background-color: red;
display: inline-block;
}
.inner {
width: 1300px;
margin: 0 auto;
height: 300px;
border: 3px solid black;
}
<div class="outer">
<div class="inner"></div>
</div>
使用.outer
float: left
包围其内容
.outer {
float: left;
}
记得要清除漂浮物。
.outer {
background-color: red;
float: left;
}
.inner {
width: 1300px;
margin: 0 auto;
height: 300px;
border: 3px solid black;
}
<div class="outer">
<div class="inner"></div>
</div>
<span>a</span>
<span>a</span>
防止将overflow-x
溢出设置为visible
以外的任何内容:
.outer {
overflow: auto;
}
.outer {
background-color: red;
overflow: auto;
}
.inner {
width: 1300px;
margin: 0 auto;
height: 300px;
border: 3px solid black;
}
<div class="outer">
<div class="inner"></div>
</div>
答案 1 :(得分:0)
如果您正在尝试完成我的想法,请尝试将样式添加到父元素“.outer”,如下所示:http://jsfiddle.net/jimcamut/0pdrbkcp/
.outer {
background-color: red;
width: 1300px;
margin: 0 auto;
height: 300px;
border: 3px solid black;
}
.inner {
/* You can add additional style to the child element */
}
答案 2 :(得分:0)
.inner {
width: auto;
margin: 0 auto;
height: 300px;
border: 3px solid black;
}
答案 3 :(得分:0)
.outer { width: fit-content; }
,模数供应商前缀。或者,您也可以在:root
选择器上设置相同的效果。