如何将两个div放在一起?

Mis*_*hko 340 html css

请考虑以下代码:

#wrapper {
    width: 500px;
    border: 1px solid black;
}
#first {
    width: 300px;
    border: 1px solid red;
}
#second {
    border: 1px solid green;
}
Run Code Online (Sandbox Code Playgroud)
<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>
Run Code Online (Sandbox Code Playgroud)

我希望这两个div在包装器div中彼此相邻.在这种情况下,绿色div的高度应确定包装纸的高度.

我怎么能通过CSS实现这一目标?

cla*_*uzy 419

浮动一个或两个内部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 */
}
Run Code Online (Sandbox Code Playgroud)

或者如果你漂浮两者,你需要鼓励包装div包含浮动的孩子,或者它会认为它是空的而不是把它们放在它们周围

浮动两个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 */
}
Run Code Online (Sandbox Code Playgroud)

  • `overflow`属性将清除垂直和水平浮点数,这就是为什么在我的第一个例子中,`#second`不需要左边距,溢出属性可以工作,只要它的值不是"可见"..我更喜欢隐藏到自动为那些只是在案件场景,所以滚动条不是偶然生成(自动将做)..无论哪种方式将没有内容隐藏这样的场景,因为它只会隐藏,如果它超出你的500px宽度,但只要没有高度内容将在正常宽度内包裹..没有隐藏;) (4认同)
  • 究竟!我不想计算保证金.`overflow:hidden`在这里做得很棒!然而,它对我来说仍然是一种魔力.我认为`overflow:hidden`应该**隐藏**内容,如果它不适合它的容器.但是,这里的行为有点不同.你能详细说明吗? (3认同)
  • 你可以在#wrapper上设置`overflow:auto`所以大小仍然适应内容大小.(不需要明确:两个元素) (2认同)

jim*_*rin 114

有两个div,

<div id="div1">The two divs are</div>
<div id="div2">next to each other.</div>
Run Code Online (Sandbox Code Playgroud)

你也可以使用这个display属性:

#div1 {
    display: inline-block;
}

#div2 {
    display: inline-block;
}
Run Code Online (Sandbox Code Playgroud)

这里是 jsFiddle的例子.

如果div1超过一定高度,div2将放在旁边div1的底部.为了解决这个问题,使用vertical-align:top;div2.

这里是 jsFiddle的例子.

  • 这个解决方案有一个恼人的问题:因为`div`是`inline`,你必须在HTML中保留空格,新行等.否则,浏览器将在它们之间渲染空格.看到这个[**小提琴**](https://jsfiddle.net/AlexandrAbakumov/1n2a05ob/):你不能设法将两个`div'保持在同一条线上,除非你把它们的标签放在两者之间. (4认同)

Jam*_*mes 29

您可以使用CSS float属性将元素彼此相邻:

#first {
float: left;
}
#second {
float: left;
}
Run Code Online (Sandbox Code Playgroud)

您需要确保包装器div允许浮动宽度,并且边距等设置正确.


meo*_*meo 16

这是解决方案:

#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*/
}
Run Code Online (Sandbox Code Playgroud)

你的演示更新了;

http://jsfiddle.net/dqC8t/1/


Md.*_*fee 15

尝试使用flexbox模型.写作简单易行.

Jsfiddle

CSS:

#wrapper {
  display: flex;
  border: 1px solid black;
}
#first {
    border: 1px solid red;
}
#second {
    border: 1px solid green;
}
Run Code Online (Sandbox Code Playgroud)

默认方向是行.因此,它在#wrapper中彼此相邻排列.但它不支持IE9或低于该版本


Jak*_*son 14

选项1

float:left在两个div元素上使用,并为两个div元素设置%width,总宽度为100%.

用于box-sizing: border-box;浮动div元素.值border-box强制填充和边框进入宽度和高度,而不是展开它.

使用clearfix <div id="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%;
}
Run Code Online (Sandbox Code Playgroud)

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;
}
Run Code Online (Sandbox Code Playgroud)

http://jsfiddle.net/dqC8t/3382/

选项3

display:inline-block在两个div元素上使用,并为两个div元素设置%width,总宽度为100%.

再次(与float:left示例相同)box-sizing: border-box;在div元素上使用.值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;
}
Run Code Online (Sandbox Code Playgroud)

http://jsfiddle.net/dqC8t/3383/

最后一个选项是使用名为flex的新显示选项,但请注意可能会出现浏览器兼容性:

http://caniuse.com/#feat=flexbox

http://www.sketchingwithcss.com/samplechapter/cheatsheet.html


小智 7

尝试使用下面的代码更改将两个div放在彼此的前面

#wrapper {
  width: 500px;
  border: 1px solid black;
  display:flex;
}
Run Code Online (Sandbox Code Playgroud)

JSFiddle链接


小智 7

  1. 在两个 div 中添加float:left;属性。

  2. 添加display:inline-block;属性。

  3. 在父 div 中添加display:flex;属性。


Mar*_*vič 7

这是正确的 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;
}
Run Code Online (Sandbox Code Playgroud)
<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>
Run Code Online (Sandbox Code Playgroud)


小智 5

这很容易-您可以用困难的方式做到

.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%;
}
Run Code Online (Sandbox Code Playgroud)
<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>
Run Code Online (Sandbox Code Playgroud)

还是简单的方法

#wrapper {
  display: flex;
  border: 1px solid black;
}
#first {
    border: 1px solid red;
}
#second {
    border: 1px solid green;
}
Run Code Online (Sandbox Code Playgroud)
<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>
Run Code Online (Sandbox Code Playgroud)

还有大约一百万种其他方式。
但是我只是简单的方法。我还想告诉你,这里的很多答案都是错误的,但是我所展示的两种方式至少都适用于HTML 5。


sNI*_*sss 5

我的做法:

<div class="left">Left</div>
<div class="right">Right</div>
Run Code Online (Sandbox Code Playgroud)

CSS:

.left {
    float: left;
    width: calc(100% - 200px);
    background: green;
}

.right {
    float: right;
    width: 200px;
    background: yellow;
}
Run Code Online (Sandbox Code Playgroud)