div를 나란히 배치하는 방법


241

100 % 너비로 설정된 기본 래퍼 div가 있습니다. 그 안에는 두 개의 div가 있습니다. 하나는 고정 너비이고 다른 하나는 나머지 공간을 채 웁니다. 나머지 공간을 채우기 위해 두 번째 div를 플로팅하는 방법 도움을 주셔서 감사합니다.


2
다음 번에도 예제 코드를 작성하여 개발자에게 질문이 명확 해 지도록하십시오.
Rob

1
position : absolute는 옵션입니까? 컨테이너의 측면에 위치를 설정할 수 있으며 div는 새로운 크기를 갖습니다.
AlexanderMP

답변:


363

원하는 것을 수행하는 방법에는 여러 가지가 있습니다.

  1. CSS float속성 사용 :

    <div style="width: 100%; overflow: hidden;">
        <div style="width: 600px; float: left;"> Left </div>
        <div style="margin-left: 620px;"> Right </div>
    </div>
    
  2. CSS display속성 사용 - 다음 div과 같이 작동하도록하는 데 사용할 수 있습니다 table.

    <div style="width: 100%; display: table;">
        <div style="display: table-row">
            <div style="width: 600px; display: table-cell;"> Left </div>
            <div style="display: table-cell;"> Right </div>
        </div>
    </div>
    

더 많은 방법이 있지만 그 두 가지가 가장 많이 사용됩니다.


17
HTML 5 @filoxo에서 솔루션을 사용하는 대신
TheMcMurder

1
이전 주석가의 말 : filoxo 당 HTML5 솔루션을 # 3으로 추가하는 것을 고려하십시오.
Ahmed Fasih

2
@TheMcMurder : 오래된 브라우저 (예 : IE <11)를 지원해야하는 우리에게는 이것이 옵션이 아닙니다.
Oyvind

@Oyvind, 당신 말이 맞아요. 사용 사례에 따라 다릅니다. IE 8, 9 또는 10을 지원하는 경우 polyfill 지원이 필요합니다. polyfill.io cdn.polyfill.io/v2/docs 또는 github.com/10up/flexibility 와 같은 서비스를 권장 하지만 실제로는 엄격 할 수 있습니다 폴리 필 사용을 금지하는 요구 사항.
TheMcMurder 2016 년

1
오버플로는 무엇입니까? 높이가 지정된 요소의 경우 그렇지 않습니까?
마이클

177

CSS3는 이 동작을 달성 할 수 있는 유연한 상자 (일명 flex 상자)를 도입했습니다 .

간단히 제 DIV의 폭을 정의하고 두 번째 경우 → 수득 flex-grow1이 부모의 나머지 폭을 기입 할 수있는있다.

.container{
    display: flex;
}
.fixed{
    width: 200px;
}
.flex-item{
    flex-grow: 1;
}
<div class="container">
  <div class="fixed"></div>
  <div class="flex-item"></div>
</div>

jsFiddle 데모

플렉스 박스는 이전 브라우저와 호환되지 않지만 최신 브라우저를 대상으로하는 훌륭한 옵션입니다 ( 캐니 우스MDN 참조 ). 플렉스 박스 사용법에 대한 포괄적 인 가이드는 CSS Tricks에서 구할 수 있습니다 .


5
해결책을 찾는 데 하루 종일 걸렸 으며이 답변으로 해결되었습니다! 나는 3 패널과 4 패널이 나란히 있으며 때로는 3 패널과 4 패널이 아무것도 없습니다. 그들은 모두 테두리가있는 포함 된 div에 산다. 첫 번째 div 상황에서 전체 float : left는 생성 된 레이블이 동적이기 때문에 div가 아래쪽의 테두리를 통과하게했습니다. ASP는 레이블을 렌더링하는 방식으로 레이블을 구성합니다. float : left가 없으면 같은 행에 div 중 3 개만 만들었습니다. 그리고 테이블을 사용하는 것은 의문의 여지가 없습니다. 감사합니다!
Luminous

이와 같은 것을 사용할 수있는 이전 버전과 호환되는 방법이 있습니까? 예를 들어 IE 8-10을 지원해야하는 빈약 한 수액
Ben A. Hilleli

사용자의 요구 사항에 따라 수있는 그 BenA.Hilleli @ (예. 점진적 개선 또는 우아한 저하 )하지만 빠른 검색 (아웃 날짜가 조금)이 나왔고 가이드를 "어떻게 현실 세계에서 인 flexbox를 사용하는" 뿐만 아니라 Flexie.js 하는 IE6-9를 지원합니다. 또는이 질문에 대한 다른 답변을 시도해보십시오. 동일한 결과를 얻습니다.
filoxo

20

HTML 및 CSS 디자인 전략에 대해 많이 알지 못하지만 간단한 것을 찾고 화면에 자동으로 맞는 (있는 그대로) 가장 직접적인 해결책은 div가 단어로 작동하도록하는 것입니다 단락. 지정해보십시오display: inline-block

<div style="display: inline-block">
   Content in column A
</div>
<div style="display: inline-block">
   Content in column B
</div>

DIV의 너비를 지정하거나 지정하지 않아도됩니다.


5
아마도 display:flex가장 좋은 솔루션 일 것 inline-block입니다. 하지만 더 많은 브라우저에서 작동하기 때문에 우수 하다고 생각 합니다. 그건 그렇고, 당신은 <div style="white-space:nowrap">크기 조정에 대한 이별을 방지하기 위해 두 div를 모두 감싸 야 할 수도 있습니다 .
존 헨켈

템플릿 작업에 적합한 솔루션입니다. 유일한 문제는 콘텐츠가 적은 div를 맨 아래로 푸시한다는 것입니다. 상단으로 밀어 넣는 방법?
거의 초보자 초보자

1
nvm, 검색해야 할 해결책은 다음과 같습니다. vertical-align : top;
거의 초보자 초보자

@JohnHenckel은 모든 브라우저에서 사용 가능한 것은 아니며 모든 브라우저에서 동일한 방식으로 작동하지 않을 수 있습니까? inline-block암호.
Kavindu Gayantha '

@guillermo 그것은 잘 작동하지 않습니다. 모든 div가 나란히 배치되지 않습니다. 왜 그런 겁니까. 명확하지 않습니다.
Kavindu Gayantha

14

CSS 그리드를 사용하여이를 달성 할 수 있습니다. 이것은 설명을위한 긴 버전입니다.

div.container {
    display: grid;
    grid-template-columns: 220px 20px auto;
    grid-template-rows: auto;
}

div.left {
    grid-column-start: 1;
    grid-column-end: 2;
    grid-row-start: row1-start
    grid-row-end: 3;
    background-color: Aqua;
}

div.right {
    grid-column-start: 3;
    grid-column-end: 4;
    grid-row-start: 1;
    grid-row-end; 1;
    background-color: Silver;
}

div.below {
    grid-column-start: 1;
    grid-column-end: 4;
    grid-row-start: 2;
    grid-row-end; 2;
}
<div class="container">
    <div class="left">Left</div>
    <div class="right">Right</div>
    <div class="below">Below</div>
</div>

또는 float 및 margin을 사용하는보다 전통적인 방법입니다.

이 예제에서 배경색을 포함하여 사물이 어디에 있는지-또한 부동 영역 아래의 내용으로 수행 할 작업을 보여줍니다.

실생활에 스타일을 인라인으로 넣지 말고 스타일 시트에 추출하십시오.

div.left {
    width: 200px;
    float: left;
    background-color: Aqua;
}

div.right {
    margin-left: 220px;
    background-color: Silver;
}

div.clear {
    clear: both;
}
    <div class="left"> Left </div>
    <div class="right"> Right </div>
    <div class="clear">Below</div>

<div style="width: 200px; float: left; background-color: Aqua;"> Left </div>
<div style="margin-left: 220px; background-color: Silver;"> Right </div>
<div style="clear: both;">Below</div>

2

첫 번째 div에 부동 소수점을 제공하고 두 번째 div에 100 % 너비를 부동 왼쪽으로 고정하십시오. 그 트릭을해야합니다. 아래에 품목을 배치하려면 아래에 배치 할 품목에 대한 명확한 정보가 필요합니다.


2
<div class="container" style="width: 100%;">
    <div class="sidebar" style="width: 200px; float: left;">
        Sidebar
    </div>
    <div class="content" style="margin-left: 202px;">
        content 
    </div>
</div>

이것은 크로스 브라우저와 호환됩니다. 왼쪽 여백이 없으면 콘텐츠가 사이드 바보다 길면 왼쪽 끝까지 콘텐츠가 실행되는 문제가 발생합니다.


1

IE6을 태깅하지 않는 경우 두 번째를 플로팅 <div>하고 첫 번째 <div>고정 너비 와 같거나 약간 큰 여백을 제공하십시오 .

HTML :

<div id="main-wrapper">
    <div id="fixed-width"> lorem ipsum </div>
    <div id="rest-of-space"> dolor sit amet </div>
</div>

CSS :

#main-wrapper {
    100%;
    background:red;
}
#fixed-width {
    width:100px;
    float:left
}
#rest-of-space {
    margin-left:101px;
        /* May have to increase depending on borders and margin of the fixd width div*/
    background:blue;
}

여백은 '휴식 공간' <div>이 'fixed-width'보다 많은 콘텐츠를 포함 할 가능성을 설명합니다 <div>.

고정 너비를 배경으로 지정하지 마십시오. 이것을 다른 '열'로 보이게하려면 가짜 열 트릭 을 사용하십시오 .

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