2011-04-27 114 views
259

考慮following code如何將兩個div放在一起?

#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實現這個?

+4

另外:http://stackoverflow.com/questions/446060/css-two-divs-next-to-each-other – radek 2011-06-27 16:58:13

+0

**'#包裝{顯示: 柔性; }'** – icl7126 2018-02-13 15:05:22

回答

330

浮動一個或兩個內部divs。

浮動一個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來同時包含浮動孩子,或者它會認爲它是空的,並沒有把邊界他們周圍

浮動兩個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 */ 
} 
+2

你可以在#wrapper上設置overflow:auto因此大小仍然適應內容大小。 (不需要明確:兩個元素) – meo 2011-04-27 11:09:28

+0

是在示例一中,如果#first更長,您當然可以 - 包含浮點數101 eh;).. #second隱藏的溢出避免了需要計算左邊距否則解決方案基本相同 – clairesuzy 2011-04-27 11:28:42

+3

準確!我不想計算保證金。 'overflow:hidden'在這裏做的很好!不過,它對我來說仍然有點神奇。我認爲'overflow:hidden'應該隱藏**內容,如果它不適合它的容器。但是,這裏的行爲有點不同。你能詳細說明一下嗎? – 2011-04-27 11:37:42

24

您可以通過使用CSS的float屬性坐在旁邊彼此元素:

#first { 
float: left; 
} 
#second { 
float: left; 
} 

你需要確保包裝DIV允許在寬度方面的浮動,以及利潤率等都是正確設置。

16

這裏是如此lution:

#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/

+0

謝謝。如果我省略「overflow:auto」,它仍然有效。你能舉出一個需要的例子嗎? – 2011-04-27 11:19:26

+0

是的確定:刪除溢出自動並使內容第一個更長,然後第二個內容,你很好地看到容器的大小隻適應,當你設置溢出自動,或者如果你使用清除元素:http ://jsfiddle.net/dqC8t/3/ – meo 2011-04-27 11:21:37

+0

好的,我明白了,謝謝!不過,我不喜歡'margin:0 0 0 302px;'因爲它取決於'width:300px;'。但是,無論如何,謝謝! – 2011-04-27 11:33:50

80

有兩個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例如here

如果div1超過一定的高度,div2將被放置在旁邊的div1底部。要解決此問題,請使用div2上的vertical-align:top;

jsFiddle example here

+0

@即使接受的答案使用的是浮動屬性,該屬性在主要瀏覽器的display屬性之前支持。 Chrome支持從v1.0開始浮動,並從v4.0開始顯示。也許接受的答案在寫作時更加向後兼容。 – 2016-05-27 09:16:00

+3

這個解決方案有一個令人討厭的問題:由於'div'是由'inline'製作的,所以你不得不在HTML中保留空格,換行符等。否則,瀏覽器將在它們之間呈現一個空格。看到這個[**小提琴**](https://jsfiddle.net/AlexandrAbakumov/1n2a05ob/):你不能設法保持'div's在同一行,除非你把他們的標籤之間沒有任何東西。 – 2016-05-31 16:31:30

14

選項1

在兩個div元件使用float:left並設置%的寬度爲100%的組合總寬度兩者div元素。

在浮動div元素上使用box-sizing: border-box;。值邊框強制填充和邊框的寬度和高度,而不是展開它。

<div id="wrapper">上使用clearfix來清除浮動子元素,這會使包裝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

在兩個div元件使用display:inline-block並設置%的寬度爲100%的組合總寬度兩者div元素。

再次(與float:left示例相同)在div元素上使用box-sizing: 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

+3

這是更好的答案! – tmuecksch 2015-09-10 17:24:35

+1

同意; 「浮動」不會讓我的船漂浮。 '嵌入塊'岩石。 (對不起) – SteveCinq 2017-03-16 02:41:27

+0

使用%效果最好 – Ajay 2017-11-13 14:51:18

5

嘗試使用下面的代碼更改來放置tw ○在彼此

#wrapper { 
    width: 500px; 
    border: 1px solid black; 
    display:flex; 
} 

JSFiddle link

9

嘗試的正面的div使用Flexbox的模型。寫起來容易而簡短。

直播Jsfiddle

CSS:

#wrapper { 
    display: flex; 
    border: 1px solid black; 
} 
#first { 
    border: 1px solid red; 
} 
#second { 
    border: 1px solid green; 
} 

默認方向是一行。所以,它在#wrapper裏面緊挨着。 但它不支持IE9或小於版本

3
  1. 兩個div的添加float:left;財產。

  2. 添加display:inline-block;財產。

  3. 在母公司div中添加display:flex;屬性。

0

#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>