두 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:leftdiv요소 모두에 사용 하고 총 너비가 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-blockdiv요소 모두에 사용 하고 총 너비가 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.