두 div를 서로 옆에 배치하는 방법은 무엇입니까?


370

다음 코드를 고려하십시오 .

#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를 통해 어떻게 이것을 달성 할 수 있습니까?



14
#wrapper { display: flex; }
— icl7126

답변:


447

하나 또는 두 개의 내부 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가 플로팅 된 자식을 모두 포함하도록 권장하거나 비어 있다고 생각하고 테두리를 두지 않습니다.

두 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
overflow:auto#wrapper에서 설정할 수 있으므로 크기는 여전히 내용 크기에 맞게 조정됩니다. (clear : both 요소가 필요 없음)
— meo

예 1에서 #first가 더 길면 확실히 수 있습니다-floats 101 eh;) ..를 포함 할 수 있습니다. #second에 숨겨진 overflow는 해결책이 기본적으로 동일하지만 왼쪽 마진을 계산할 필요가 없습니다
— clairesuzy

3
바로 그거죠! 여백을 계산하고 싶지 않습니다. overflow: hidden여기서 훌륭한 일을합니다! 그러나 그것은 여전히 ​​나에게 마술입니다. 나는 생각 overflow: hidden한다 숨길 가 컨테이너에 맞지 않으면 내용을. 그러나 여기서는 동작이 약간 다릅니다. 그것에 대해 자세히 설명해 주시겠습니까?
— Misha Moroshko

4
overflow웁니다 속성이 모두 수직 및 내 첫 번째 예에서, 왜하는 수평 수레 #second왼쪽 마진을 필요로하지 않는다, 오버 플로우 속성이 값만큼 작동하지 않습니다 visible.. 난 그냥 케이스 시나리오 그래서에서 사람들을 위해 자동으로 숨겨 선호 스크롤 막대는 우연히 생성되지 않습니다 (자동으로 수행됨). 어떤 식 으로든 시나리오와 같은 시나리오가 숨겨지지 않습니다. 500px 너비를 벗어나는 경우에만 숨겨 지지만 높이 내용이 없으면 평소와 같이 폭 내에서 랩 .. 숨기지 않음;)
— clairesuzy

1
overflow : hidden #wrapper는 부동되지 않은 #second div보다 길면 #first float을 수직으로 포함합니다. #second의 두 번째 오버플로는 첫 번째 float 옆에 내용을 포함시키는 역할을합니다. 그렇지 않으면 가로로 첫 번째 float 아래로 이동합니다. overflow 속성의 확장 된 동작은 CSS2.1 어딘가에 단계적으로 적용되었으며, 사양 자체는 clearing element 또는 clearfix hack없이 float을 포함하는 방식에 따라 변경되었습니다. 기술 용어는 이와 같이 사용될 때 새로운 것을 생성한다는 것입니다 블록 포맷 컨텍스트
— clairesuzy

130

두 개의 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;on을 사용하십시오 div2.

여기에 jsFiddle 예제가 있습니다 .


@BSeven에서 받아 들여진 대답은 float 속성을 사용합니다.이 속성은 주요 브라우저에서 display 속성보다 먼저 지원되었습니다. Chrome은 v1.0에서 부동을 지원하고 v4.0에서 표시를 지원합니다. 아마도 받아 들인 대답은 작성 당시보다 이전 버전과 호환되었습니다.
— jim_kastrin

5
이 솔루션에는 하나의 성가신 문제가 있습니다 .s div가 만들어 지기 때문에 inlineHTML에서 공백, 줄 바꿈 등을 유지하지 않아도됩니다. 그렇지 않으면 브라우저가 그들 사이에 공백을 렌더링합니다. 이 바이올린을보십시오 : div사이에 아무 것도없이 태그를 넣지 않으면 두 줄을 모두 같은 줄에 유지할 수 없습니다 .
— Alexander Abakumov

30

CSS float 속성을 사용하여 서로 옆에 요소를 배치 할 수 있습니다.

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

래퍼 div가 너비 측면에서 부동을 허용하고 여백 등이 올바르게 설정되어 있는지 확인해야합니다.


17

flexbox 모델을 사용해보십시오. 쓰기 쉽고 빠릅니다.

라이브 Jsfiddle

CSS :

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

기본 방향은 행입니다. 따라서 #wrapper 내부에서 나란히 정렬됩니다. 그러나 IE9 이하는 지원되지 않습니다.


1
사용이 얼마나 쉬운 지 믿을 수 없습니다 flex. 감사합니다!
— Sam

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*/
}

데모가 업데이트되었습니다.

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


감사. 생략 overflow: auto;해도 여전히 작동합니다. 필요한 곳에서 예를 들어 주시겠습니까?
— Misha Moroshko

예, 오버플로 자동을 제거하고 첫 번째의 내용을 두 번째의 내용보다 길게 설정하십시오. 오버플로 자동을 설정하거나 지우기 요소를 사용하는 경우 컨테이너 크기 만 조정됩니다 : jsfiddle. 순 / dqC8t / 3
— MEO

알았어, 고마워 그러나에 margin: 0 0 0 302px;의존하기 때문에 마음에 들지 않았습니다 width: 300px;. 그러나 어쨌든 감사합니다 !!
— Misha Moroshko

당신은 내가 두 번째 사업부에 대한 폭 지정하는 경우, 당신은 그것을 필요 없어요
— MEO

15

옵션 1

float:left두 div요소 모두에 사용 하고 총 너비가 100 % 인 두 div 요소 모두에 % 너비를 설정하십시오.

box-sizing: border-box;부동 div 요소에 사용하십시오 . border-box 값은 패딩과 테두리를 확장하는 대신 너비와 높이로 만듭니다.

<div id="wrapper">래퍼 div 크기를 올바른 높이로 조정하는 부동 하위 요소를 지우 려면에 clearfix를 사용하십시오 .

.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">자식 요소를 요소에 절대적으로 배치하려면 요소에 position : relative를 추가하십시오 <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요소 모두에 사용 하고 총 너비가 100 % 인 두 div 요소 모두에 % 너비를 설정하십시오.

그리고 다시 ( 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;
}

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

마지막 옵션은 flex라는 새로운 디스플레이 옵션을 사용하는 것이지만 브라우저 호환성은 다음과 같습니다.

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

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


1
합의 float내 보트를 띄우지 마십시오. inline-block바위. (죄송합니다.)
— SteveCinq

7

아래 코드 변경 사항을 사용하여 두 div를 서로 앞에 배치하십시오.

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

JSFiddle 링크


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에서 적어도 작동하는 두 가지 방법이 있습니다.


5

이것이 올바른 CSS3 답변입니다. 이 지금은 어떻게 든 도움이되기를 바랍니다 : D 정말 책을 읽어보실 것을 추천은 : https://www.amazon.com/Book-CSS3-Developers-Future-Design/dp/1593272863 사실은 내가 지금이 책을 읽고에서이 솔루션을 만들었습니다 . :디

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


3
  1. float:left;두 div 모두에 속성을 추가하십시오 .

  2. display:inline-block;속성을 추가하십시오 .

  3. display:flex;부모 div에 속성을 추가하십시오 .


2

내 접근 방식 :

<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;
}

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>


0

재질 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>
당사 사이트를 사용함과 동시에 당사의 쿠키 정책과 개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.