如何使CSS宽度来填充父级?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (31)

我相信这个问题以前有人问过,但我似乎找不到答案。

我有以下标记:

<div id="foo">
    <div id="bar">
        here be dragons
    </div>
</div>

我的愿望是让Foo有宽度600px(width: 600px;)并使酒吧具有下列行为:

padding-left: 2px;
padding-right: 2px;
margin-left: 2px;
margin-right: 2px;
outerWidth: 100%;

换句话说,不是将条形图的宽度设置为592px我想将条形图的外部宽度设置为100%所以它被计算成592px。重要的是我可以把foo的宽度改为800px当呈现时,BAR会计算,而不是我必须手工计算所有这些实例。

这在纯CSS中是可能的吗?

更有趣的是:

  • 如果#bar是桌子吗?
  • 如果#bar是文字区吗?
  • 如果#bar是输入?
  • 如果#foo是一个表单元格(td那是吗?(这是否改变了问题,还是问题相同?)
提问于
用户回答回答于

table#bar需要将宽度设置为100%,否则它将仅限于它确定需要的宽度。但是,如果表行的总宽度大于bar它将扩展到所需的宽度。如果我记得你可以通过设置display: block !important;虽然我已经有一段时间没有解决这个问题了。(如果我错了,肯定有人会纠正我的)。

textarea#bar我认为是块级元素,因此它将遵循与div相同的规则。这里唯一的警告是textarea的属性colsrows在字符列中测量。如果这是在元素上指定的,它将覆盖CSS指定的宽度。

input#bar是内联元素,因此在默认情况下不能指定宽度。然而,类似于textareacols属性,它有一个size属性中可以确定宽度的元素。也就是说,可以通过使用display: block;在你的CSS里。然后它将遵循与div相同的呈现规则。

td#foo将呈现为table-cell有点疯狂。这里的底线是,就你的目的而言,它的表现就像div#foo限制其内容的宽度。这里唯一的问题是列中潜在的可解包装文本,这会使它忽略你的宽度设置。而且,列中的所有单元格都将得到最宽单元格的宽度。


这是块级元素的默认行为--也就是说,如果宽度为auto(默认值)那么它将是包含元素的内部宽度的100%。所以本质上:

#foo {width: 800px;}
#bar {padding-left: 2px; padding-right: 2px; margin-left: 2px; margin-right: 2px;}

会给你你想要的。

用户回答回答于

快到了,只要改变outerWidth: 100%;width: auto;(outerWidth不是CSS属性)

或者,将下列样式应用于栏:

width: auto;
display: block;

扫码关注云+社区

领取腾讯云代金券