我有这个HTML代码:
<body>
<div id="div0" style="display:inline; background-color:green; width:100%">
<div id="div1" style="display:inline; background-color:aqua;width:33%"> </div>
<div id="div2" style="display:inline; background-color:red;width:33%"> </div>
<div id="div3" style="display:inline; background-color:yellow;width:33%"> </div>
</div>
</body>
我想用 div1 , div2 和 div3 填充页面,但它们不会填满整个宽度。
发生了什么事?
答案 0 :(得分:14)
display: inline
表示该元素 在内部显示内联 当前块在同一行。只要 当它在两个区块之间时 元素形成一个'匿名块', 然而,尽可能小 宽度。
您不能给出内联元素集的宽度或高度尺寸,它们将被忽略。元素必须具有block
的显示类型才能执行此操作。然而,设置display: block
将无法达到您想要的效果,因为每个元素都将填充整个宽度。 float: left
会导致它们向左堆叠并强制display: block
。
<head>
<style type="text/css">
#wrap {
width:100%;
}
#wrap:after {
/* Prevent wrapper from shrinking height,
see http://www.positioniseverything.net/easyclearing.html */
content: ".";
display: block;
height: 0;
clear: both;
visibility: hidden;
}
#wrap .container {
float: left;
width:33%;
}
</style>
</head>
<body>
<div id="wrap">
<div class="container"> </div>
<div class="container"> </div>
<div class="container"> </div>
</div>
</body>
嗯,语义
有关浮动的进一步评论,请参阅Phunky的回答。
答案 1 :(得分:4)
在外部<div>
上使用相对定位并浮动内部<div>
。请勿使用display: inline
。
<body>
<div id="div0" style="border: 1px solid red; background-color: green; width: 100%; position: relative;">
<div id="div1" style="background-color: aqua; width: 33.33%; float: left;">a</div>
<div id="div2" style="background-color: red; width: 33.33%; float: left;">b</div>
<div id="div3" style="background-color: yellow; width: 33.33%; float: left;">c</div>
</div>
</body>
答案 2 :(得分:3)
display:inline
收缩包装内容。您可能想尝试float:left
。
答案 3 :(得分:3)
Rory Fitzpatrick或多或少都有一个理想的答案,虽然没有必要设置pos:rel在#wrapper上,因为它已经是一个相对的块元素,并且默认会跨越整个宽度。
当你浮动一个块元素时,它模仿了display的对齐功能:inline,在理想的世界中,我们可以访问非常有用的显示:inline-block,它可以完全按照你期望的那样完成。 / p>
但有一件事你应该记住浮动元素是他们只占用他们需要的空间(包括边距和填充),除非你设置一个固定的宽度。
这就是为什么罗里使用宽度:33%;因为那是你将要得到的最好的东西:)
理想情况下,这可能是对Rorys帖子的评论,但我还没有足够高的帖子数。
答案 4 :(得分:1)
<body>
<div id="div0" style="float: left; background-color:green; width:100%">
<div id="div1" style="float: left; background-color:aqua;width:33%"> </div>
<div id="div2" style="float: left; background-color:red;width:33%"> </div>
<div id="div3" style="float: left; background-color:yellow;width:33%"> </div>
</div>
</body>
这对你有用。 IIRC的原因是显示:内联不占用%宽度。
答案 5 :(得分:0)
您可以使用flexbox进行更灵敏的调整,而不是使用浮动。这也迫使元素保持连续。
示例:
<head>
<style type="text/css">
#wrap {
width:100%;
display:inline-flex;
}
#wrap:after {
content: ".";
display: block;
height: 0;
clear: both;
visibility: hidden;
display: inline-flex;
flex-direction: row;
}
.container1 {
width:20%;
}
.container2{
width:80%;
}
</style>
</head>
<body>
<div id="wrap">
<div class="container1"> </div>
<div class="container2"> </div>
</div>
答案 6 :(得分:0)
与之前给出的所有答案相反,实现此目的的最佳方法可以参考这个问题的答案:
3 inline-block divs with exactly 33% width not fitting in parent
最快捷,最简单的方法不是最漂亮的(将你的div放在同一条线上以移除正常提供的自动单个空白区域),但会为你想要的东西工作。我所引用的答案列出了许多其他方式,在我看来,它比以前提供的更好,并解决了你遇到的真正问题。
以下是完全符合您需求的代码,以及指向小提琴的链接!
<body>
<div id="div0" style="float: left; background-color:green; width: 100%;">
<div id="div1" style="margin: 0px; display: inline-block; background-color:aqua;width:33.33%"> </div><div id="div2" style="margin: 0px; display: inline-block; background-color:red;width:33.33%"> </div><div id="div3" style="margin: 0px; display: inline-block; background-color:yellow;width:33.33%"> </div>
</div>