다른 div 안에 3 개의 div (왼쪽 / 가운데 / 오른쪽)를 정렬하는 방법은 무엇입니까?


392

컨테이너 div 안에 3 개의 div를 정렬하고 싶습니다.

[[LEFT]       [CENTER]        [RIGHT]]

컨테이너 div의 너비는 100 % (설정 너비 없음)이며 컨테이너의 크기를 조정 한 후 가운데 div가 가운데에 유지되어야합니다.

그래서 나는 설정했다 :

#container{width:100%;}
#left{float:left;width:100px;}
#right{float:right;width:100px;}
#center{margin:0 auto;width:100px;}

그러나 그것은 다음과 같습니다 :

[[LEFT]       [CENTER]              ]
                              [RIGHT]

팁이 있습니까?


1
컨테이너가 너비가 300px보다 좁아지면 overflow 속성을 설정하지 않으면 발생합니다.
inkedmn

Flexbox 및 그리드 : jsfiddle.net/w0s4xmc0/12963
Manoj Kumar

그냥 메모 - 각 열의 콘텐츠의 무리와 함께 inkedmn의 코멘트 @ 당으로서, 나는 그들 모두가없이 컨테이너 폭에 제대로 정렬 할 수 없었다 overflow: hidden;center열입니다. 그런 다음 페이지 상단에 3 열이 모두있을 때 작은 장치에 대한 미디어 쿼리 overflow: hidden;에서 중간 열 (대형 장치의 오른쪽 열)이 필요했습니다. 그렇지 않으면 높이가 없었고 세로로 중앙에 있지 않았습니다. 상단과 하단 행 사이.
Chris L

답변:


364

해당 CSS로 div를 다음과 같이 넣으십시오 (floats first) :

<div id="container">
  <div id="left"></div>
  <div id="right"></div>
  <div id="center"></div>
</div>

추신 당신은 또한 떠 다니고 나서 떠 다닐 수 있습니다. 중요한 것은 플로트가 "메인"중앙 섹션 앞에옵니다.

PPS#container 이 스 니펫 내부에서 마지막으로 원할 경우가 있습니다. 이 스 니펫 은 높이를 가져 가지 않고 측면이 바닥에서 튀어 나오는 대신 양쪽 측면 플로트를 포함 <div style="clear:both;"></div>하도록 #container세로로 확장 됩니다 #center.


컨테이너가 100 %가 아니라면 어떻게 하시겠습니까? 여기에 이와 같은 것을 시도하고 있다면, div가 컨테이너의 오른쪽에 머무르기를 원하지만 페이지의 오른쪽에 떠 있습니다.
Tiago

@Tiago : 수레가 div 안에 있으면 div에 제약을 유지해야합니다. 컨테이너 너비를로 설정하여 너비를 확인하십시오 border:solid. 100 % 인 경우 다른 div로 묶어 페이지 안에 배치하십시오.
James P.

또한-크기 조정 가능한 컨테이너 안에 넣을 경우 오른쪽 부동 div가 아래로 밀리지 않도록 컨테이너의 최소 너비를 설정하십시오.
Tapefreak

6
이 답변은 6 세 이상입니다. 2016 년에는 정답이 flexbox입니다.

1
@ torazaburo, 아마도 둘 이상의 정답이있을 수 있습니다. 동일한 지점에 도달하는 많은 방법이 있습니다.이 경우, 내가 사용하는 프레임 워크가 이미 요소에 float로 왼쪽과 오른쪽을 설정하기 때문에이 솔루션을 사용해야합니다. 끝에 중심 요소를 추가하는 것은 나에게 완벽합니다.
닌자 코딩

128

HTML 구조를 변경하지 않으려면 text-align: center;랩퍼 요소와 display: inline-block;중심 요소 에 추가 하여 수행 할 수도 있습니다 .

#container {
    width:100%;
    text-align:center;
}

#left {
    float:left;
    width:100px;
}

#center {
    display: inline-block;
    margin:0 auto;
    width:100px;
}

#right {
    float:right;
    width:100px;
}

라이브 데모 : http://jsfiddle.net/CH9K8/


1
이것은 너무 빨리 접지 않고 창 너비에 따라 올바르게 크기를 조정하는 유일한 솔루션입니다.
Jared Sealey

2
왼쪽과 오른쪽 크기가 같을 때 적합합니다. 그렇지 않으면 센터가 중앙에 있지 않습니다.
mortalis

126

Flexbox를 사용하여 3 개의 Div를 가로로 정렬

다음은 다른 div 내부에서 div를 가로로 정렬하는 CSS3 메서드입니다.

#container {
  display: flex;                  /* establish flex container */
  flex-direction: row;            /* default value; can be omitted */
  flex-wrap: nowrap;              /* default value; can be omitted */
  justify-content: space-between; /* switched from default (flex-start, see below) */
  background-color: lightyellow;
}
#container > div {
  width: 100px;
  height: 100px;
  border: 2px dashed red;
}
<div id="container">
  <div></div>
  <div></div>
  <div></div>
</div>

jsFiddle

justify-content속성에는 5 가지 값이 있습니다.

  • flex-start (기본)
  • flex-end
  • center
  • space-between
  • space-around

모든 경우에 3 개의 div는 같은 줄에 있습니다. 각 값에 대한 설명은 https://stackoverflow.com/a/33856609/3597276을 참조하십시오.


flexbox의 장점 :

  1. 최소한의 코드; 매우 효율적
  2. 수직 및 수평 센터링은 간단하고 쉽습니다.
  3. 동일한 높이의 열은 간단하고 쉽습니다.
  4. 플렉스 요소 정렬을위한 여러 옵션
  5. 반응이 좋다
  6. 레이아웃을 빌드하기위한 것이 아니기 때문에 제한된 레이아웃 용량을 제공하는 플로트 및 테이블과 달리 flexbox는 광범위한 옵션을 갖춘 최신 (CSS3) 기술입니다.

flexbox 방문에 대해 자세히 알아 보려면


브라우저 지원 : Flexbox는 IE <10을 제외한 모든 주요 브라우저에서 지원됩니다 . Safari 8 및 IE10과 같은 일부 최신 브라우저 버전에는 공급 업체 접두사가 필요합니다 . 접두사를 빠르게 추가하려면 Autoprefixer를 사용 하십시오 . 이 답변에 대한 자세한 내용 .


7
플렉스는 플로트를 사용하는 것보다 훨씬 낫습니다.
Faizan Akram Dar

1
여기와 링크 된 게시물에 대한 훌륭한 설명! 참고 사항 : 컨테이너 div 내부의 플렉스 항목으로 "span"요소를 사용하면 firefox에서 작동했지만 javafx 기반 브라우저 (webview)에서는 작동하지 않았습니다. "스팬"을 "divs"로 변경하면 둘 다 작동했습니다.
Ashok

Internet Explorer 10 및 이전 버전은 justify-content 속성을 지원하지 않습니다
D.Snap

1
불행히도 이것은 같은 너비의 항목에서만 작동합니다. stackoverflow.com/questions/32551291/…
처리

훌륭합니다. 여기에서 모든 솔루션을 사용해 보았으며 이것이 가장 좋습니다!
Nico Müller

22

부동 속성은 실제로 텍스트를 정렬하는 데 사용되지 않습니다.

이 속성은 요소를 오른쪽이나 왼쪽 또는 가운데에 추가하는 데 사용됩니다.

div > div { border: 1px solid black;}
<html>
     <div>
         <div style="float:left">First</div>
         <div style="float:left">Second</div>
         <div style="float:left">Third</div>

         <div style="float:right">First</div>
         <div style="float:right">Second</div>
         <div style="float:right">Third</div>
     </div>
</html>

위한 float:left출력 것[First][second][Third]

위한 float:right출력 것[Third][Second][First]

즉 float => left 속성은 다음 요소를 이전 요소의 왼쪽에 추가합니다.

또한 부모 요소의 너비를 고려해야합니다. 자식 요소의 너비 합계가 부모 요소의 너비를 초과하면 다음 요소가 다음 줄에 추가됩니다

 <html>
     <div style="width:100%">
       <div style="float:left;width:50%">First</div>
       <div style="float:left;width:50%">Second</div>
       <div style="float:left;width:50%">Third</div>
     </div>
</html>

[첫번째 두번째]

[제삼]

완벽한 결과를 얻으려면 이러한 모든 측면을 고려해야합니다.


13

나는 바가 빡빡하고 역동적입니다. CSS 3 및 HTML 5 용입니다.

  1. 먼저 너비를 100px로 설정하는 것이 제한적입니다. 하지마

  2. 둘째, 컨테이너 너비를 100 %로 설정하면 내비게이션 또는 크레딧 / 저작권 표시 줄과 같은 전체 앱의 머리글 / 바닥 글 표시 줄에 대해 이야기 할 때까지 정상적으로 작동합니다. right: 0;해당 시나리오에 대신 사용하십시오 .

  3. 당신은 ID를 사용하고 있습니다 (해시 #container , #left대신 클래스 (의 등) .container, .left코드에서 다른 스타일의 패턴을 반복하지 않으려면, 괜찮습니다, 등). 대신 클래스를 사용하는 것이 좋습니다.

  4. HTML의 경우 왼쪽, 가운데 및 오른쪽 순서를 바꿀 필요가 없습니다. display: inline-block;이 문제를 해결하여 코드를 더 깨끗하고 논리적으로 다시 반환하십시오.

  5. 마지막으로 float을 모두 지워서 future와 엉망이되지 않도록하십시오 <div>. 당신은 이것을 가지고clear: both;

요약:

HTML :

<div class="container">
  <div class="left"></div>
  <div class="center"></div>
  <div class="right"></div>
  <div class="clear"></div>
</div>

CSS :

.container {right: 0; text-align: center;}

.container .left, .container .center, .container .right { display: inline-block; }

.container .left { float: left; }
.container .center { margin: 0 auto; }
.container .right { float: right; }
.clear { clear: both; }

HAML 및 SASS를 사용하는 경우 보너스 포인트;)

HAML :

.container
  .left
  .center
  .right
  .clear

SASS :

.container {
  right: 0;
  text-align: center;

  .left, .center, .right { display: inline-block; }

  .left { float: left; }
  .center { margin: 0 auto; }
  .right { float: right; }
  .clear { clear: both; }
}

12

요소를 정렬하는 데 사용할 수있는 몇 가지 트릭이 있습니다.

01. 테이블 트릭 사용

02. Flex Trick 사용

03. Float Trick 사용


11

이것은 <IE9거의 모든 브라우저 에서 미래에 ( 완전히 죽었을 때 ) 사용될 기능인 CSS3 Flexbox를 사용하여 쉽게 수행 할 수 있습니다 .

브라우저 호환성 표 확인

HTML

<div class="container">
  <div class="left">
    Left
  </div>
  <div class="center">
    Center
  </div>
  <div class="right">
    Right
  </div>
</div>

CSS

.container {
  display: flex;
  flex-flow: row nowrap; /* Align on the same line */
  justify-content: space-between; /* Equal margin between the child elements */
}

산출:


4

트위터 부트 스트랩으로 :

<p class="pull-left">Left aligned text.</p>
<p class="pull-right">Right aligned text.</p>
<p class="text-center">Center aligned text.</p>

3

html의 순서를 유지하고 flex를 사용하지 않으려면 가능한 대답.

HTML

<div class="a">
  <div class="c">
    the 
  </div>
  <div class="c e">
    jai ho 
  </div>
  <div class="c d">
    watsup
  </div>
</div>

CSS

.a {
  width: 500px;
  margin: 0 auto;
  border: 1px solid red;
  position: relative;
  display: table;
}

.c {
  display: table-cell;
  width:33%;
}

.d {
  text-align: right;
}

.e {
  position: absolute;
  left: 50%;
  display: inline;
  width: auto;
  transform: translateX(-50%);
}

코드 펜 링크


2

HTML :

<div id="container" class="blog-pager">
   <div id="left">Left</div>
   <div id="right">Right</div>
   <div id="center">Center</div>    
</div>

CSS :

 #container{width:98%; }
 #left{float:left;}
 #center{text-align:center;}
 #right{float:right;}

text-align:center; 완벽한 중심 정렬을 제공합니다.

JSFiddle 데모


텍스트 요소의 크기가 거의 같고 하나의 텍스트를 더 길게 만들고 #center div가 더 이상 가운데에 있지 않기 때문에 예제에서 div를 가운데에 배치합니다. jsfiddle.net/3a4Lx239
Kai Noack

1

컨테이너를 필요로하지 않고 이것을 단순화하고 달성하려는 또 다른 시도를했습니다.

HTML

.box1 {
  background-color: #ff0000;
  width: 200px;
  float: left;
}

.box2 {
  background-color: #00ff00;
  width: 200px;
  float: right;
}

.box3 {
  background-color: #0fffff;
  width: 200px;
  margin: 0 auto;
}

CSS

  .box1 {
  background-color: #ff0000;
  width: 200px;
  float: left;
}

.box2 {
  background-color: #00ff00;
  width: 200px;
  float: right;
}

.box3 {
  background-color: #0fffff;
  width: 200px;
  margin: 0 auto;
}

JSFiddle 에서 라이브로 볼 수 있습니다


1

Bootstrap 3 사용 동일한 너비의 3 div를 만듭니다 (12 열 레이아웃에서 각 div에 대해 4 열). 이렇게하면 왼쪽 / 오른쪽 섹션의 너비가 다른 경우에도 열 영역이 오버플로되지 않는 경우 중앙 영역을 중앙에 유지할 수 있습니다.

HTML :

<div id="container">
  <div id="left" class="col col-xs-4 text-left">Left</div>
  <div id="center" class="col col-xs-4 text-center">Center</div>
  <div id="right" class="col col-xs-4 text-right">Right</div>
</div>

CSS :

#container {
  border: 1px solid #aaa;
  margin: 10px;
  padding: 10px;
  height: 100px;
}
.col {
  border: 1px solid #07f;
  padding: 0;
}

코드 펜

라이브러리없이 해당 구조를 만들려면 Bootstrap CSS에서 일부 규칙을 복사했습니다.

HTML :

<div id="container">
  <div id="left" class="col">Left</div>
  <div id="center" class="col">Center</div>
  <div id="right" class="col">Right</div>
</div>

CSS :

* {
  box-sizing: border-box;
}
#container {
  border: 1px solid #aaa;
  margin: 10px;
  padding: 10px;
  height: 100px;
}
.col {
  float: left;
  width: 33.33333333%;
  border: 1px solid #07f;
  padding: 0;
}
#left {
  text-align: left;
}
#center {
  text-align: center;
}
#right {
  text-align: right;
}

코펜


0

다음은 이미지 를 중심 요소로 사용하여 허용 된 답변에 대한 변경 사항입니다 .

  1. 이미지가 div 안에 포함되어 있는지 확인하십시오 ( #center이 경우). 그렇지 않은 경우 다음으로 설정 display해야합니다.block 하며 플로팅 된 요소 사이의 공간을 중심으로하는 것처럼 보입니다.
  2. 이미지 컨테이너 의 크기를 설정하십시오 .

    #center {
        margin: 0 auto;
    }
    
    #center, #center > img {
        width: 100px;
        height: auto;
    }

0

당신은 이것을 시도 할 수 있습니다 :

html 코드는 다음과 같습니다.

<div id="container">
  <div id="left"></div>
  <div id="right"></div>
  <div id="center"></div>
</div>

그리고 당신의 CSS 코드는 다음과 같습니다 :

#container{width:100%;}
#left{float:left;width:100px;}
#right{float:right;width:100px;}
#center{margin:0 auto;width:100px;}

따라서 출력은 다음과 같아야합니다.

[[LEFT]       [CENTER]        [RIGHT]]

-1
.processList
  text-align: center
  li
  .leftProcess
    float: left
  .centerProcess
    float: none
    display: inline-block
  .rightProcess
    float: right

html
ul.processList.clearfix
  li.leftProcess

li.centerProcess
li.rightProcess

2
스택 오버플로에 오신 것을 환영합니다! 이 코드가 OP에 도움이되는 이유에 대한 설명을 추가하십시오. 이는 향후 시청자가 배울 수있는 답변을 제공하는 데 도움이됩니다. 자세한 내용 은 답변 방법을 참조하십시오 .
Heretic Monkey

-3

당신은 그것을 올바르게했습니다, 당신은 당신의 수레를 지울 필요가 있습니다. 간단히 추가

overflow: auto; 

컨테이너 클래스에.


-6

가장 쉬운 해결책은 3 개의 열이있는 테이블을 상자에 놓고 그 테이블을 중앙에 배치하는 것입니다.

html :

 <div id="cont">
        <table class="aa">
            <tr>
                <td>
                    <div id="left">
                        <h3 class="hh">Content1</h3>
                        </div>
                    </td>
                <td>
                    <div id="center">
                        <h3 class="hh">Content2</h3>
                        </div>
                 </td>
                <td>
                    <div id="right"><h3 class="hh">Content3</h3>
                        </div>
                </td>
            </tr>
        </table>
    </div>

CSS :

#cont 
{
  margin: 0px auto;    
  padding: 10px 10px;
}

#left
{    
  width: 200px;
  height: 160px;
  border: 5px solid #fff;
}

#center
{
  width: 200px;
  height: 160px;
  border: 5px solid #fff;
}

#right
{
  width: 200px;
  height: 160px;
  border: 5px solid #fff;
}

-10
#warpcontainer  {width:800px; height:auto; border: 1px solid #000; float:left; }
#warpcontainer2 {width:260px; height:auto; border: 1px solid #000; float:left; clear:both; margin-top:10px }

2
코드 블록 만 게시하는 대신 이 코드로 인해 문제가 해결되는 이유 를 설명 하십시오 . 설명이 없으면 대답이 아닙니다.
Martijn Pieters
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.