#wrapper {
width: 500px;
border: 1px solid black;
}
#first {
width: 300px;
border: 1px solid red;
}
#second {
border: 1px solid green;
}
<div id="wrapper">
<div id="first">Stack Overflow is for professional and enthusiast programmers, people who write code because they love it.</div>
<div id="second">When you post a new question, other users will almost immediately see it and try to provide good answers. This often happens in a matter of minutes, so be sure to check back frequently when your question is still new for the best response.</div>
</div>
我希望两个div在包装div中彼此相邻。在这种情况下,绿色div的高度应确定包装纸的高度。
如何通过CSS实现此目标?
#1 楼
浮动一个或两个内部div。浮动一个div:
#wrapper {
width: 500px;
border: 1px solid black;
overflow: hidden; /* will contain if #first is longer than #second */
}
#first {
width: 300px;
float:left; /* add this */
border: 1px solid red;
}
#second {
border: 1px solid green;
overflow: hidden; /* if you don't want #second to wrap below #first */
}
,或者如果两个都浮动,则需要鼓励包装器div包含两个浮动的子元素,否则会认为它是空的而不在其周围放置边框
#wrapper {
width: 500px;
border: 1px solid black;
overflow: hidden; /* add this to contain floated children */
}
#first {
width: 300px;
float:left; /* add this */
border: 1px solid red;
}
#second {
border: 1px solid green;
float: left; /* add this */
}
评论
您可以在#wrapper上设置overflow:auto,这样大小仍将适合内容大小。 (不需要clear:both元素)
– meo
11年4月27日在11:09
是的,在示例一中,如果#first较长,则肯定可以-包含浮点数101 eh;)..隐藏在#second上的溢出避免了计算左裕度的需要,尽管否则解决方案基本上是相同的
– clairesuzy
11年4月27日在11:28
究竟!我不想计算保证金。溢出:隐藏在这里做得很好!但是,这对我来说仍然是一种魔力。我认为溢出:如果内容不适合其容器,则应该隐藏内容。但是,这里的行为有些不同。您能详细说明一下吗?
– Misha Moroshko
11年4月27日在11:37
overflow属性将清除水平和垂直方向的浮动,这就是为什么在我的第一个示例中,#second不需要左页边距,只要它的值不可见,overflow属性就可以工作。在这种情况下,滚动条不是偶然生成的(自动会这样做)..两种方式都不会隐藏任何内容,因为只有当它超出您的500px宽度时,它才会被隐藏,但只要有没有高度的内容将正常包裹在宽度内。.没有隐藏;)
– clairesuzy
2011-4-27 11:43
溢出:隐藏在#wrapper中的功能是,如果它变得比非浮动的#second div长,则可以垂直包含#first的浮动。 #second上的第二次溢出用于将内容包含在第一个浮点数的旁边,否则将水平放置在第一个浮点数的下面。溢出属性的扩展行为在CSS2.1中的某个阶段中逐步执行,规范本身也进行了更改,以响应不包含清除元素或clearfix hack的包含浮点的方式,它的技术术语是当这样使用时,它会创建一个新的块格式化上下文
– clairesuzy
11年4月27日在12:35
#2 楼
具有两个div,<div id="div1">The two divs are</div>
<div id="div2">next to each other.</div>
还可以使用
display
属性:#div1 {
display: inline-block;
}
#div2 {
display: inline-block;
}
jsFiddle示例。
如果
div1
超过一定高度,则div2
将被放置在底部div1
的旁边。要解决此问题,请在vertical-align:top;
上使用div2
。评论
@BS即使接受的答案也使用float属性,该属性比主要浏览器的display属性更早支持。 Chrome支持从v1.0浮动和从v4.0显示。也许在撰写本文时,可接受的答案更加向后兼容。
– Jim_kastrin
16年5月27日在9:16
这个解决方案有一个烦人的问题:由于div是内联的,因此您必须在HTML中保持它们之间没有空格,新行等。否则,浏览器将在它们之间呈现一个空格。看这个小提琴:您无法设法将两个div保持在同一行,除非您将它们的标签放在中间。
–亚历山大·阿巴库莫夫(Alexander Abakumov)
16年5月31日在16:31
#3 楼
您可以使用CSS float属性将元素彼此相邻放置:#first {
float: left;
}
#second {
float: left;
}
您需要确保wrapper div在以下方面允许浮动:宽度和边距等设置正确。
#4 楼
尝试使用flexbox模型。编写起来很容易而且简短。实时Jsfiddle
CSS:
#wrapper {
display: flex;
border: 1px solid black;
}
#first {
border: 1px solid red;
}
#second {
border: 1px solid green;
}
默认方向是行。因此,它在#wrapper中彼此对齐。
但不支持IE9或更低版本的IE9。
#5 楼
解决方法如下:#wrapper {
width: 500px;
border: 1px solid black;
overflow: auto; /* so the size of the wrapper is alway the size of the longest content */
}
#first {
float: left;
width: 300px;
border: 1px solid red;
}
#second {
border: 1px solid green;
margin: 0 0 0 302px; /* considering the border you need to use a margin so the content does not float under the first div*/
}
您的演示已更新;
http://jsfiddle.net/dqC8t/1/
评论
谢谢。如果我忽略溢出:自动;它仍然有效。您可以举一个需要它的例子吗?
– Misha Moroshko
2011年4月27日在11:19
是的,可以肯定的是:删除overflow auto,将第一个的内容加长,然后再设置seconds的内容,您会很好地看到容器的大小仅在您对其设置了overflow auto或使用清除元素:jsfiddle时才适应。净/ dqC8t / 3
– meo
2011-4-27 11:21
好,我明白了,谢谢!但是,我不喜欢保证金:0 0 0 302px;因为它取决于宽度:300px;。但是,还是谢谢!!
– Misha Moroshko
2011年4月27日在11:33
如果您为第二个div指定i宽度,则不需要
– meo
2011年4月27日在12:57
#6 楼
选项1在两个
float:left
元素上都使用div
,并为两个div元素设置一个%宽度,总宽度为100%。在浮动div元素上使用
box-sizing: border-box;
。值border-box会强制填充和边框达到宽度和高度,而不是扩展它。在
<div id="wrapper">
上使用clearfix清除浮动子元素,这将使wrapper div缩放到正确的高度。.clearfix:after {
content: " ";
visibility: hidden;
display: block;
height: 0;
clear: both;
}
#first, #second{
box-sizing: border-box;
-moz-box-sizing: border-box;
-webkit-box-sizing: border-box;
}
#wrapper {
width: 500px;
border: 1px solid black;
}
#first {
border: 1px solid red;
float:left;
width:50%;
}
#second {
border: 1px solid green;
float:left;
width:50%;
}
http://jsfiddle.net/dqC8t/3381/
选项2
使用
position:absolute
添加位置:相对于
<div id="wrapper">
元素,使子元素绝对定位到<div id="wrapper">
元素。#wrapper {
width: 500px;
border: 1px solid black;
position:relative;
}
#first {
border: 1px solid red;
width:100px;
}
#second {
border: 1px solid green;
position:absolute;
top:0;
left:100px;
right:0;
}
http://jsfiddle.net/dqC8t/3382/
选项3
在两个
display:inline-block
元素上使用div
并为两个div元素设置%宽度总宽度为100%。再一次(与
float:left
示例相同)在div元素上使用box-sizing: border-box;
。值border-box会强制填充和边框达到宽度和高度,而不是扩展它。注意:内联块元素可能会出现间距问题,因为它受HTML标记中的空格影响。此处提供更多信息:https://css-tricks.com/fighting-the-space-between-inline-block-elements/
#first, #second{
box-sizing: border-box;
-moz-box-sizing: border-box;
-webkit-box-sizing: border-box;
}
#wrapper {
width: 500px;
border: 1px solid black;
position:relative;
}
#first {
width:50%;
border: 1px solid red;
display:inline-block;
}
#second {
width:50%;
border: 1px solid green;
display:inline-block;
}
http:// jsfiddle .net / dqC8t / 3383 /
最后一个选择是使用名为flex的新显示选项,但请注意,浏览器兼容性可能会发挥作用:
http: //caniuse.com/#feat=flexbox
http://www.sketchingwithcss.com/samplechapter/cheatsheet.html
评论
同意;浮不浮我的船。直列块状岩石。 (抱歉。)
– SteveCinq
17 Mar 16 '17 2:41
#7 楼
非常简单-您可以用困难的方式做到
.clearfix:after {
content: " ";
visibility: hidden;
display: block;
height: 0;
clear: both;
}
#first, #second{
box-sizing: border-box;
-moz-box-sizing: border-box;
-webkit-box-sizing: border-box;
}
#wrapper {
width: 500px;
border: 1px solid black;
}
#first {
border: 1px solid red;
float:left;
width:50%;
}
#second {
border: 1px solid green;
float:left;
width:50%;
}
<div id="first">Stack Overflow is for professional and enthusiast programmers, people who write code because they love it.</div>
<div id="second">When you post a new question, other users will almost immediately see it and try to provide good answers. This often happens in a matter of minutes, so be sure to check back frequently when your question is still new for the best response.</div>
</div>
或简单的方法
#wrapper {
display: flex;
border: 1px solid black;
}
#first {
border: 1px solid red;
}
#second {
border: 1px solid green;
}
<div id="wrapper">
<div id="first">Stack Overflow is for professional and enthusiast programmers, people who write code because they love it.</div>
<div id="second">When you post a new question, other users will almost immediately see it and try to provide good answers. This often happens in a matter of minutes, so be sure to check back frequently when your question is still new for the best response.</div>
</div>
还有一百万种其他方式。
但是我只想用简单的方式。
我也想告诉你,很多这里的答案不正确
,但是我所展示的两种方法至少都可以在HTML 5中使用。
#8 楼
尝试使用以下代码更改将两个div放在彼此前面#wrapper {
width: 500px;
border: 1px solid black;
display:flex;
}
JSFiddle链接
#9 楼
这是正确的CSS3答案。希望这对您现在有所帮助:D我真的建议您阅读本书:https://www.amazon.com/Book-CSS3-Developers-Future-Design/dp/1593272863实际上,我已经提出了此解决方案从现在读这本书开始。 :D
#wrapper{
display: flex;
flex-direction: row;
border: 1px solid black;
}
#first{
width: 300px;
border: 1px solid red;
}
#second{
border: 1px solid green;
}
<div id="wrapper">
<div id="first">Stack Overflow is for professional and enthusiast programmers, people who write code because they love it.</div>
<div id="second">When you post a new question, other users will almost immediately see it and try to provide good answers. This often happens in a matter of minutes, so be sure to check back frequently when your question is still new for the best response.</div>
</div>
#10 楼
在两个div中添加
float:left;
属性。添加
display:inline-block;
属性。 在父级中添加
display:flex;
属性。#11 楼
我的方法:<div class="left">Left</div>
<div class="right">Right</div>
CSS:
.left {
float: left;
width: calc(100% - 200px);
background: green;
}
.right {
float: right;
width: 200px;
background: yellow;
}
评论
干净简单。
–海滩屋
10月14日13:29
#12 楼
在材料UI和react.js中,您可以使用网格<Grid
container
direction="row"
justify="center"
alignItems="center"
>
<Grid item xs>
<Paper className={classes.paper}>xs</Paper>
</Grid>
<Grid item xs>
<Paper className={classes.paper}>xs</Paper>
</Grid>
<Grid item xs>
<Paper className={classes.paper}>xs</Paper>
</Grid>
</Grid>
#13 楼
#wrapper {
width: 1200;
border: 1px solid black;
position: relative;
float: left;
}
#first {
width: 300px;
border: 1px solid red;
position: relative;
float: left;
}
#second {
border: 1px solid green;
position: relative;
float: left;
width: 500px;
}
<div id="wrapper">
<div id="first">Stack Overflow is for professional and enthusiast programmers, people who write code because they love it.</div>
<div id="second">When you post a new question, other users will almost immediately see it and try to provide good answers. This often happens in a matter of minutes, so be sure to check back frequently when your question is still new for the best response.</div>
</div>
评论
另外:stackoverflow.com/questions/446060/…#wrapper {display:flex; }
CSS两个div可能彼此相邻的重复副本