这个问题在这里已有答案:
为什么 height
的百分比值不起作用,但 width
的百分比值呢?
<div id="working"></div>
<div id="not-working"></div>
#working{
width:80%;
height:140px;
background:orange;
}
#not-working{
width:80%;
height:30%;
background:green;
}
#working
的宽度最终为视口的80%,但 #not-working
的高度最终为0 .
6 回答
我认为你只需要给它一个父容器......即使容器的高度是以百分比定义的 . 接缝工作得很好: JSFiddle
你需要给它一个高度的容器 . width使用视口作为默认宽度
另一种选择是为div添加样式
这意味着元素相对于最近的定位祖先定位 .
块元素的高度默认为块内容的高度 . 所以,给出这样的东西:
#inner
将变得足够高以包含段落,并且#outer
将变得足够高以包含#inner
.当您将高度或宽度指定为百分比时,'s a percentage with respect to the element'的父级 . 在宽度的情况下,除非另有说明,否则所有块元素都与其父元素一样宽,直到
<html>
;因此,块元素的宽度与其内容无关,并且width: 50%
产生明确定义的像素数 .但是,除非指定特定高度,否则块元素 depends on its content 的高度 . 所以父母和孩子之间有关于身高的反馈,并说
height: 50%
不会产生一个明确定义的值,除非你通过给父元素一个特定的高度打破反馈循环 .height
属性中的百分比值有一点复杂性,width
和height
属性实际上彼此表现不同 . Let me take you on a tour through the specs.height属性:
我们来看看what CSS Snapshot 2010 spec says about height:
好吧,让我们一步一步地分开:
什么是containing block?它有点复杂,但对于默认
static
位置的普通元素,它是:或英文,其父框 . (非常值得知道
fixed
和absolute
位置会是什么,但我忽略了这一点,以保持这个答案的简短 . )所以请看这两个例子:
在此示例中,
#aa
的包含块是#a
,依此类推#b
和#bb
. 到现在为止还挺好 .height
规范的下一句是我在这个答案的引言中提到的复杂性:啊哈!是否明确指定了包含块的高度!
在
#aa
的情况下,_179859_的50%是100px
但
height:auto
的50%是auto
,在#bb
的情况下是0px,因为没有auto
的内容扩展到正如规范所说,包含块是否已经绝对定位也很重要,但让我们继续
width
.width属性:
那么
width
的工作方式是否相同?我们来看看the spec:看一下这些熟悉的例子,从前面的调整来改变
width
而不是height
:在
#cc
的情况下,_179872_的_179874_的50%是
width:auto
最终的50%,与height
不同,没有特殊的规则可以区别对待这种情况 .现在,这里是棘手的一点:
auto
意味着不同的东西,部分取决于它是否被指定为width
或height
!对于height
,它只是意味着适合内容*所需的高度,但对于width
,auto
实际上更复杂 . 您可以从代码片段中看到,在这种情况下,它最终成为视口的宽度 .the spec say about the auto value for width是什么?
Wahey,'s not helpful. To save you the trouble, I'已经找到了我们用例的相关部分, Headers 为"calculating widths and margins",副 Headers 为"block-level, non-replaced elements in normal flow":
好的,所以
width
加上相关的边距,边框和填充边框都必须加起来包含块的宽度(而不是后半部分height
的工作方式) . 再说一句规则:啊哈!所以在这种情况下,
width:auto
的50%是视口的50% . 希望现在一切都有意义!脚注
*至少,在这种情况下,重要的是 . 规范好吧,现在一切都有道理 .
没有内容,高度没有值来计算百分比 . 但是,如果未指定父级,宽度将占用DOM的百分比 . (使用你的例子)将第二个div放在第一个div中,会产生一个结果......下面的例子......
第二个div将是第一个div高度的30% .