부트 스트랩 3과 수직 정렬


889

Twitter Bootstrap 3을 사용하고 있는데 JSFiddle 링크div 와 같이 세로로 두 개를 정렬하려고 할 때 문제가 있습니다 .

<!-- Latest compiled and minified CSS -->
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.4/css/bootstrap.min.css">

<!-- Optional theme -->
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.4/css/bootstrap-theme.min.css">

<!-- Latest compiled and minified JavaScript -->
<script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.4/js/bootstrap.min.js"></script>
<div class="row">
  <div class="col-xs-5">
    <div style="height:5em;border:1px solid #000">Big</div>
  </div>
  <div class="col-xs-5">
    <div style="height:3em;border:1px solid #F00">Small</div>
  </div>
</div>

Bootstrap의 그리드 시스템은 float: left이 아닌을 사용 display:inline-block하므로 속성 vertical-align이 작동하지 않습니다. 나는 margin-top그것을 고치기 위해 사용하려고 시도했지만 이것이 반응 형 디자인에 좋은 해결책이 아니라고 생각합니다.


1
아니오, 나는 수직으로 2 정렬 할 div, 아니 텍스트 내부의이 같은 jsfiddle.net/corinem/Aj9H9 하지만이 예에서는 내가 사용하지 않을 부트 스트랩
— corinem


6
중요 : 두 열 모두 "vcenter"클래스가 필요합니다. 그렇지 않으면 작동하지 않습니다. 시간당 1 시간을 보냈어요.
— Cymro

5
— col-

Bootstrap 4에서 수직 중심 정렬은 매우 다릅니다. stackoverflow.com/a/41464397/171456
— Zim

답변:


938

이 답변은 해킹을 제시하지만 flexBox ( @Haschem answer에 명시된 바와 같이)를 사용하는 것이 좋습니다 . 이제 모든 곳에서 지원되기 때문입니다.

데모 링크 :
- 부트 스트랩 3
- 부트 스트랩 4 알파 (6)

필요할 때 여전히 커스텀 클래스를 사용할 수 있습니다.

.vcenter {
    display: inline-block;
    vertical-align: middle;
    float: none;
}
<div class="row">
    <div class="col-xs-5 col-md-3 col-lg-1 vcenter">
        <div style="height:10em;border:1px solid #000">Big</div>
    </div><!--
    --><div class="col-xs-5 col-md-7 col-lg-9 vcenter">
        <div style="height:3em;border:1px solid #F00">Small</div>
    </div>
</div>

전리품

를 사용하면 inline-block코드에서 실제 공간 (예 :)을 허용하면 블록 사이에 공간이 추가 ...</div> </div>...됩니다. 열 크기가 12에 추가되면이 추가 공간으로 인해 그리드가 끊어집니다.

<div class="row">
    <div class="col-xs-6 col-md-4 col-lg-2 vcenter">
        <div style="height:10em;border:1px solid #000">Big</div>
    </div>
    <div class="col-xs-6 col-md-8 col-lg-10 vcenter">
        <div style="height:3em;border:1px solid #F00">Small</div>
    </div>
</div>

여기 <div class="[...] col-lg-2">와 사이에 여분의 공백이 있습니다 <div class="[...] col-lg-10">(캐리지 리턴 및 2 개의 탭 / 8 공백). 그리고 ...

여기에 이미지 설명을 입력하십시오

이 여분의 공간을 걷어차 자!

<div class="row">
    <div class="col-xs-6 col-md-4 col-lg-2 vcenter">
        <div style="height:10em;border:1px solid #000">Big</div>
    </div><!--
    --><div class="col-xs-6 col-md-8 col-lg-10 vcenter">
        <div style="height:3em;border:1px solid #F00">Small</div>
    </div>
</div>

여기에 이미지 설명을 입력하십시오

통지 겉보기에 쓸모없는 의견을 <!-- ... -->? 그들은있는 중요한 - 그들없이, 사이의 공백 <div>요소는 그리드 시스템을 파괴, 레이아웃에 공간을 차지합니다.

참고 : Bootply가 업데이트되었습니다


18
최대 12까지 추가하는 열 그리드를 지정하면 (예 : col-lg-2및 col-lg-10) 중단됩니다 . 흥미롭게도, 다음 JS 코드를 추가하면 (jQuery 가정) 자체적으로 수정됩니다.$('.row').html($('.vcenter'));
— Jake Z

8
@pasemes 이것은 (잘 알려진) inline-block 추가 공간으로 인해 발생 합니다 . 편집 할 때 솔루션을 제공합니다.
— zessx

92
빈칸이있는 부분은 깊고 어둡고 사악한 마술처럼 느껴집니다. 그리고 그건. 그러나 누군가 어딘가에 작동하기로 결정했습니다.
— cfstras

5
아직 아무도 언급하지 않았지만 주석 대신에 "font-size : 0;"을 설정할 수 있습니다. "수수께끼 공간"을 제거하기 위해 인라인 블록 div의 부모에
— Poff

4
여분의 공간 문제를 해결하기 위해 HTML 주석 <!--> 또는 자바 스크립트 코드를 사용할 필요가 없습니다. 간단하고 효과적인 CSS 트릭이 있습니다. 음수 여백. 오른쪽 여백을 추가하십시오 : -4px; .vcenter 클래스에. 모든 브라우저에서 테스트 및 작업 (이전 IE6 및 IE7은 제외하지만 선사 시대를 걱정하는 사람 제외)
— Frank

897

유연한 박스 레이아웃

CSS Flexible Box 가 등장하면서 많은 웹 디자이너들의 악몽 1 이 해결되었습니다. 가장 해킹 된 것 중 하나 인 수직 정렬. 이제는 알려지지 않은 높이 에서도 가능합니다 .

"수십 년의 레이아웃 해킹이 끝날 것입니다. 내일은 아니지만 곧 내일 남은 시간 동안 계속 될 것입니다."

- CSS 전설 에릭 마이어 의 W3Conf 2013

Flexible Box (또는 Flexbox)는 레이아웃 목적으로 특별히 설계된 새로운 레이아웃 시스템입니다. 사양 상태 :

플렉스 레이아웃은 표면적으로 블록 레이아웃과 유사합니다. 플로트 및 열과 같이 블록 레이아웃에 사용할 수있는 더 복잡한 텍스트 또는 문서 중심 속성이 많이 없습니다. 그 대가로 웹앱과 복잡한 웹 페이지가 자주 필요로하는 방식으로 공간을 분산하고 컨텐츠를 정렬 할 수있는 간단하고 강력한 도구를 얻게됩니다.

이 경우 어떻게 도울 수 있습니까? 음 .. 어디 한번 보자.


수직 정렬 열

Twitter 부트 스트랩을 사용하면 .row몇 가지 .col-*가 있습니다. 원하는 .row2 를 플렉스 컨테이너 상자 로 표시 한 다음 모든 플렉스 항목 (열)을 align-items속성 별로 세로 로 정렬하면 됩니다.

예를 들면 여기 (주의해서 주석을 읽으 십시오 )

<div class="container">
    <div class="row vertical-align"> <!--
                    ^--  Additional class -->
        <div class="col-xs-6"> ... </div>
        <div class="col-xs-6"> ... </div>
    </div>
</div>
.vertical-align {
    display: flex;
    align-items: center;
}

출력

Twitter 부트 스트랩의 세로 정렬 열

컬러 영역은 열의 패딩 상자를 표시합니다.

에 대한 설명 align-items: center

8.3 축 정렬 : align-items속성

플렉스 아이템 은 플렉스 컨테이너의 현재 라인의 횡축 에 유사 justify-content하지만 수직 방향으로 정렬 될 수있다 . align-items익명의 flex items를 포함하여 모든 flex 컨테이너의 항목에 대한 기본 정렬을 설정합니다 .

align-items: center; 중심 값을 기준으로 플렉스 항목 의 여백 상자는 선 내 교차 축의 중심에 있습니다.


큰 경고

중요 사항 # 1 : Twitter Bootstrap은 width열에 .col-xs-#클래스 중 하나를 제공하지 않으면 매우 작은 장치에서 열 수를 지정하지 않습니다 .

따라서이 특정 데모에서는 열을 명시 적으로 .col-xs-*지정하기 때문에 모바일 모드에서 열을 올바르게 표시하기 위해 클래스를 사용 했습니다 width.

그러나 다른 방법 당신은 할 수 오프 스위치 인 flexbox가 변경하여 단순히 레이아웃 display: flex;에 display: block;특정 화면 크기에. 예를 들어 :

/* Extra small devices (767px and down) */
@media (max-width: 767px) {
    .row.vertical-align {
        display: block; /* Turn off the flexible box layout */
    }
}

또는 다음 과 같이 특정 화면 크기 에서만 지정할.vertical-align 수 있습니다.

/* Small devices (tablets, 768px and up) */
@media (min-width: 768px) {
    .row.vertical-align {
        display: flex;
        align-items: center;
    }
}

이 경우 @KevinNelson 의 접근 방식을 사용 합니다.

중요 사항 # 2 : 공급 업체 접두사는 간결성을 위해 생략되었습니다. Flexbox 구문이 시간 동안 변경되었습니다. 새로운 서면 구문은 이전 버전의 웹 브라우저에서는 작동하지 않습니다 (그러나 Internet Explorer 9 이전 버전은 아닙니다! Flexbox는 Internet Explorer 10 이상에서 지원됩니다).

즉 display: -webkit-box, 프로덕션 모드 에서도 공급 업체 접두사 속성을 사용해야 합니다.

Demo 에서 "Toggle Compiled View" 를 클릭 하면 접두사가 붙은 CSS 선언 ( Autoprefixer 덕분에 )이 표시됩니다.


세로로 정렬 된 내용의 전체 높이 열

이전 데모 에서 볼 수 있듯이 열 (플렉스 항목)은 더 이상 컨테이너 (플렉스 컨테이너 상자, 즉 .row요소) 만큼 높지 않습니다 .

속성 center값을 사용하기 때문입니다 align-items. 기본값 stretch은 항목이 상위 요소의 전체 높이를 채울 수 있도록하는 것입니다.

이를 해결하기 위해 display: flex;열에도 추가 할 수 있습니다 .

예를 들어 (다시 의견을 명심)

.vertical-align {
  display: flex;
  flex-direction: row;
}

.vertical-align > [class^="col-"],
.vertical-align > [class*=" col-"] {
  display: flex;
  align-items: center;     /* Align the flex-items vertically */
  justify-content: center; /* Optional, to align inner flex-items
                              horizontally within the column  */
}

출력

Twitter Bootstrap에 세로로 정렬 된 내용이있는 전체 높이 열

컬러 영역은 열의 패딩 상자를 표시합니다.

마지막으로 여기서 데모 및 코드 스 니펫은 목표를 달성하기위한 현대적인 접근 방식을 제공하기 위해 다른 아이디어를 제공하기위한 것입니다. 실제 웹 사이트 나 응용 프로그램에서이 방법을 사용 하려면 " 큰 경고 "섹션을 염두에 두십시오 .


브라우저 지원을 포함한 추가 자료를 보려면 다음 자료가 유용합니다.


1. 반응 형 높이로 div 내부의 이미지를 세로로 정렬합니다 . 2. Twitter Bootstrap의 기본값을 변경하지 않기 위해 추가 클래스를 사용하는 것이 좋습니다 .row.


9
약간의 연구 끝에 실제로 HTML5Please.com은 그것을 사용할 수있는 충분한 지원이 있다고 말합니다. 그래서 그것은 굉장합니다! html5please.com/#flexbox
— Alec Moore

6
이것은 실제로 최상의 솔루션이며 더 많은 지원이 필요합니다. 물론 개발자는이를 전파하기 위해 최대한 많이 사용해야합니다.
— Mateus Neves

12
당신의 바이올린을 편집하고 이것이 완전히 쓸모없고 시간 낭비라는 것을 깨달을 때까지 나는 이것을 시도했고 나에게 예상대로 작동하지 않았습니다. 이렇게하면 열이 화면에 맞지 않을 때 열이 더 이상 쌓이지 않기 때문에 부트 스트랩이 전혀 필요없고 사이트가 응답하지 않게되므로 반응 형 디자인의 요점을 완전히 놓치게됩니다. 의미하는 바를 확인하려면 각 예제에서 col-xs- *를 col-xs-12로 변경하고 브라우저 화면을 매우 작게 (모바일 장치처럼) 만들고 결과를 확인하십시오. 더 이상 반응하지 않습니다.
— Pere

8
@HashemQolami라는 클래스를 사용하고 있지만 col-*바이올린 / 코드 펜이 부트 스트랩을 사용하지 않으므로 오도의 소지가 있습니다. 부트 스트랩에서는 예제가 작동하지 않습니다. 그리드 시스템은에 기반하지 않으므로 flex호환되지 않습니다. 부트 스트랩 기반 페이지에서 예제를 시도하면 작동하지 않는다는 것을 알게 될 것입니다.
— Pere

5
@Hashem Qolami는 여전히 귀하의 제안에 대한 유스 케이스를 찾을 수 없습니다. Bootstrap의 핵심적이고 독창적 인 기능 중 하나는 열이 수평에 맞지 않으면 열이 서로 겹쳐 쌓이는 것입니다. 더 이상 솔루션에서 발생하지 않습니다. 이 바이올린에서 볼 수 있듯이 스타일 만로드하더라도 그리드 시스템이 작동합니다 . js가 없습니다. 그냥 CSS. 렌더링 영역의 크기를 변경하면 응답합니다. 그것은 당신의 예에서 일어나지 않습니다. "모바일 우선"접근 방식이 손실되어 부트 스트랩이 필요하지 않습니다. 따라서이 답변은 잘못되었거나 오도하거나 불완전합니다.
— Pere

48

아래 코드는 저에게 효과적이었습니다.

.vertical-align {
    display: flex;
    align-items: center;
}

4
가장 간단한 솔루션 IMHO
— saiyancoder

3
누구나 단일 컬럼으로 작동하는 솔루션을 가지고 있습니까? 나는 행을 가지고 있었고, 그 안에 col-md-6 만 있습니다. 이 솔루션과 나머지 flexbox 솔루션은 2 개의 열이있는 경우에만 작동합니다.
— Ka Mok

36

2020 업데이트

원래 질문은 Bootstrap 3에 대한 것이지만 Bootstrap 4가 릴리스되었으므로 수직 중심에 대한 업데이트 된 지침이 있습니다.

중대한! 수직 중심은 부모 의 높이 를 기준으로합니다.

당신이 센터에 시도하는 요소의 부모가 더 정의한 경우 높이를 , 아무도 수직 중심 솔루션은 작동하지 않습니다!

부트 스트랩 4

Bootstrap 4는 기본적으로 flexbox이므로 세로 정렬에는 auto-margins , flexbox utils 또는 display utils 와 vertical align utils를 사용하는 여러 가지 방법이 있습니다. 처음에는 "수직 정렬 유틸리티"가 명백해 보이지만 인라인 및 테이블 표시 요소 에서만 작동합니다. 다음은 부트 스트랩 4 수직 센터링 옵션입니다.


1-자동 여백을 사용한 수직 중심 :

수직으로 가운데에 놓는 또 다른 방법은을 사용하는 것 my-auto입니다. 컨테이너 내에서 요소를 중앙에 배치합니다. 예를 들어 h-100행을 전체 높이로 만들고 열 my-auto을 세로로 가운데에 col-sm-12맞 춥니 다.

<div class="row h-100">
    <div class="col-sm-12 my-auto">
        <div class="card card-block w-25">Card</div>
    </div>
</div>

부트 스트랩 4-자동 여백 데모를 사용한 수직 센터

my-auto 세로 y 축의 여백을 나타내며 다음과 같습니다.

margin-top: auto;
margin-bottom: auto;

2-Flexbox가있는 수직 중심 :

수직 중심 그리드 열

Bootstrap 4 .row가 이제 열에 수직으로 가운데에 display:flex놓기 만하면 align-self-center됩니다 ...

       <div class="row">
           <div class="col-6 align-self-center">
                <div class="card card-block">
                 Center
                </div>
           </div>
           <div class="col-6">
                <div class="card card-inverse card-danger">
                    Taller
                </div>
          </div>
    </div>

또는 align-items-center전체 .row를 사용 col-*하여 행의 모든 것을 세로로 가운데 정렬하십시오 ...

       <div class="row align-items-center">
           <div class="col-6">
                <div class="card card-block">
                 Center
                </div>
           </div>
           <div class="col-6">
                <div class="card card-inverse card-danger">
                    Taller
                </div>
          </div>
    </div>

부트 스트랩 4-수직 중심이 다른 높이 열 데모


3-디스플레이 유틸리티를 사용한 수직 중심 :

부트 스트랩 4 갖는 디스플레이 유틸 사용될 수 display:table, display:table-cell, display:inline, 등이이 함께 사용될 수있는 수직 배향 유틸 정렬 인라인으로, 인라인 블록 또는 테이블 셀 소자.

<div class="row h-50">
    <div class="col-sm-12 h-100 d-table">
        <div class="card card-block d-table-cell align-middle">
            I am centered vertically
        </div>
    </div>
</div>

부트 스트랩 4-디스플레이 유틸리티를 사용한 수직 센터 데모

참조 : 부트 스트랩의 수직 정렬 센터 4


부트 스트랩 3

아이템의 컨테이너에 대한 Flexbox 방법 :

.display-flex-center {
    display: flex;
    align-items: center;
}

TranslateY 방법 변환 :

.transform-center-parent {
    position: relative;
    transform-style: preserve-3d;
}

.transform-center {
    position: relative;
    top: 50%;
    transform: translateY(-50%);
}

인라인 방법 표시 :

.display-inline-block {
    display: inline;
}
.display-inline-block > div {
    display: inline-block;
    float: none;
    vertical-align: middle;
}

Bootstrap 3 중심화 방법 데모


1
여기 에 mx-auto(수평 센터링)에 대한 부트 스트랩 문서가 있으므로 my-auto수직으로 (y 축) 중심에있는 것이 좋습니다 .
— xinthose

26

div의 CSS에서 이것을 시도하십시오 :

display: table-cell;
vertical-align: middle;

4
부모 요소를 표시해야합니다 : table
— Az. Youness

21

@media 쿼리에 익숙하지 않은 다른 사람에게 도움이 될 수 있도록 "솔루션"을 공유한다고 생각했습니다.

@HashemQolami의 답변 덕분에 col- * 클래스와 같이 모바일에서 작동하는 미디어 쿼리를 작성하여 col- *를 모바일에 쌓을 수 있지만 더 큰 화면의 경우 가운데에 세로로 정렬하여 표시 할 수 있습니다.

<div class='row row-sm-flex-center'>
    <div class='col-xs-12 col-sm-6'></div>
    <div class='col-xs-12 col-sm-6'></div>
</div>

.

.row-xs-flex-center {
    display:flex;
    align-items:center;
}
@media ( min-width:768px ) {
    .row-sm-flex-center {
        display:flex;
        align-items:center;
    }
}
@media ( min-width: 992px ) {
    .row-md-flex-center {
        display:flex;
        align-items:center;
    }
}
@media ( min-width: 1200px ) {
    .row-lg-flex-center {
        display:flex;
        align-items:center;
    }
}

화면 해상도 당 다른 열 수를 요구하는보다 복잡한 레이아웃 (예 : -xs의 경우 2 행, -sm의 경우 3, -md의 경우 4 등)은 좀 더 고급 파이널 링이 필요하지만 -xs가있는 간단한 페이지의 경우 쌓여 있고 -sm이며 행이 더 크면 잘 작동합니다.


내 경우에는 clear: both;이 작업을 수행하기 위해 미디어 쿼리 내부의 클래스 에 a를 추가 해야했습니다.
— motaa

1
@motaa, 혼란에 대해 죄송합니다 ... BS3 방식으로 HTML 예제에서 볼 수 있듯이 .row수정 자로 사용합니다 . 그래야합니다 class="row row-sm-flex-center". BS3 .row정의는clear:both;
— Kevin Nelson

귀하의 HTML 코드를보다 철저히 분석해야합니다. :) .row 수정자를 사용하지만 제 경우에는 (wordpress) 부모 테마에서 변경되어 궁극적으로 clear: both;다시 추가하게 되었습니다.
— motaa

21

승인 된 답변에 따라 마크 업을 사용자 정의하지 않으려는 경우, 우려를 분리하거나 단순히 CMS를 사용하기 때문에 다음 솔루션이 제대로 작동합니다.

.valign {
  font-size: 0;
}

.valign > [class*="col"] {
  display: inline-block;
  float: none;
  font-size: 14px;
  font-size: 1rem;
  vertical-align: middle;
}
<link href="//maxcdn.bootstrapcdn.com/bootstrap/3.3.2/css/bootstrap.min.css" rel="stylesheet"/>
<div class="row valign">
   <div class="col-xs-5">
      <div style="height:5em;border:1px solid #000">Big</div>
   </div>
   <div class="col-xs-5">
       <div style="height:3em;border:1px solid #F00">Small</div>
   </div>
 </div>

여기서 공백은 공백을 제거하기 위해 행이 글꼴 크기를 0으로 설정하기 때문에 부모 요소에서 글꼴 크기를 상속 할 수 없다는 제한이 있습니다.



17

이것이 나의 해결책이다. 이 클래스를 CSS 컨텐츠에 추가하십시오.

.align-middle {
  display: flex;
  justify-content: center;
  align-items: center;
}

그런 다음 HTML은 다음과 같습니다.

<div class="col-xs-12 align-middle">
  <div class="col-xs-6" style="background-color:blue;">
    <h3>Item</h3>
    <h3>Item</h3>
  </div>
  <div class="col-xs-6" style="background-color:red;">
    <h3>Item</h3>
  </div>
</div>

.align-middle {
  display: flex;
  justify-content: center;
  align-items: center;
}
<html>
  <head>
    <meta charset="utf-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1">
    <link href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css" rel="stylesheet"/>
<!DOCTYPE html>
    <title>Title</title>
  </head>
  <body>
    <div class="container">
      <div class="row">
        <div class="col-xs-12 align-middle">
          <div class="col-xs-6" style="background-color:blue;">
            <h3>Item</h3>
            <h3>Item</h3>
          </div>
          <div class="col-xs-6" style="background-color:red;">
            <h3>Item</h3>
          </div>
        </div>
      </div>
    </div>
    <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
    <script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.2.0/js/bootstrap.min.js"></script>
  </body>
</html>


1
이것은 col-md-6
— Lucas Bustamante

15

방금이 작업을 수행했으며 원하는 작업을 수행합니다.

.align-middle {
  margin-top: 25%;
  margin-bottom: 25%;
}

이제 내 페이지는

<div class='container-fluid align-middle'>
    content

 +--------------------------------+
 |                                |
 |  +--------------------------+  |
 |  |                          |  |
 |  |                          |  |
 |  |                          |  |
 |  |                          |  |
 |  |                          |  |
 |  +--------------------------+  |
 |                                |
 +--------------------------------+

이 접근법의 문제점은 DIV의 높이가 지정된 경우 작동하지 않는 것입니다. jsfiddle.net/4bpxen25/1 권장합니다 : stackoverflow.com/a/28519318/1477388
— user1477388

10

다음 코드는 현재 선택된 답변 이외의 다른 브라우저가 아닌 Chrome을 사용하여 작동합니다.

.v-center {
    display:table!important; height:125px;
}

.v-center div[class*='col-'] {
   display: table-cell!important;
   vertical-align:middle;
   float:none;
}
.v-center img {
   max-height:125px;
}

Bootply 링크

필요에 따라 높이를 수정하고 (구체적으로 .v-center) div를 제거 / 변경 div[class*='col-']해야 할 수도 있습니다.


8

나는이 같은 문제에 부딪쳤다. 필자의 경우 외부 컨테이너의 높이를 알지 못했지만 이것이 고정 된 방법입니다.

먼저 요소 html와 body요소 의 높이를 100 %로 설정하십시오. 이것은 중요합니다! 이것이 없으면 htmland body요소는 단순히 자녀의 키를 상속받습니다.

html, body {
   height: 100%;
}

그런 다음 외부 컨테이너 클래스를 사용했습니다.

.container {
  display: table;
  width: 100%;
  height: 100%; /* For at least Firefox */
  min-height: 100%;
}

마지막으로 클래스가있는 내부 컨테이너 :

.inner-container {
  display: table-cell;
  vertical-align: middle;
}

HTML은 다음과 같이 간단합니다.

<body>
   <div class="container">
     <div class="inner-container">
        <p>Vertically Aligned</p>
     </div>
   </div>
</body>

이것이 내용을 수직으로 정렬하는 데 필요한 전부입니다. 바이올린으로 확인하십시오.

JS 피들


8

테이블 및 테이블 셀이 필요하지 않습니다. 변환을 사용하여 쉽게 달성 할 수 있습니다.

예 : http://codepen.io/arvind/pen/QNbwyM

암호:

.child {
  height: 10em;
  border: 1px solid green;
  position: relative;
}
.child-content {
  position: absolute;
  top: 50%;
  left: 50%;
  -webkit-transform: translate(-50%, -50%);
  transform: translate(-50%, -50%);
}
<link href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.5/css/bootstrap.min.css" rel="stylesheet" />
<div class="row parent">
  <div class="col-xs-6 col-lg-6 child">
    <div class="child-content">
      <div style="height:4em;border:1px solid #000">Big</div>
    </div>
  </div>
  <div class="col-xs-6 col-lg-6 child">
    <div class="child-content">
      <div style="height:3em;border:1px solid #F00">Small</div>
    </div>
  </div>
</div>


7

Less 버전의 Bootstrap을 사용하고 CSS로 직접 컴파일하는 경우 일부 유틸리티 클래스를 사용하여 Bootstrap 클래스와 함께 사용할 수 있습니다.

Bootstrap 그리드 시스템의 응답 성과 구성 가능성을 유지하려는 곳에서 환상적으로 잘 작동하는 것으로 나타났습니다 ( -md또는-sm ) 하지만 주어진 행의 모든 ​​열이 동일한 세로 높이를 갖기를 원합니다. 그런 다음 내용을 세로로 정렬하고 행의 모든 ​​열이 공통 중간을 공유하도록하십시오).

CSS /리스 :

.display-table {
    display: table;
    width: 100%;
}
.col-md-table-cell {
    @media (min-width: @screen-md-min) {
        display: table-cell;
        vertical-align: top;
        float: none;
    }
}
.col-sm-table-cell {
    @media (min-width: @screen-sm-min) {
        display: table-cell;
        vertical-align: top;
        float: none;
    }
}
.vertical-align-middle {
    vertical-align: middle;
}

HTML :

<div class="row display-table">
    <div class="col-sm-5 col-sm-table-cell vertical-align-middle">
        ...
    </div>
    <div class="col-sm-5 col-sm-table-cell vertical-align-middle">
        ...
    </div>
</div>

6

다른 화면 크기에서 다른 열 크기를 혼합 할 때 더 쉽게 사용할 수 있도록 zessx의 답변 에 대해 조금 자세히 설명했습니다 .

Sass 를 사용하는 경우 이를 scss 파일에 추가 할 수 있습니다.

@mixin v-col($prefix, $min-width) {
    @media (min-width: $min-width) {
        .col-#{$prefix}-v {
            display: inline-block;
            vertical-align: middle;
            float: none;
        }
    }
}

@include v-col(lg, $screen-lg);
@include v-col(md, $screen-md);
@include v-col(sm, $screen-sm);
@include v-col(xs, $screen-xs);

다음 CSS를 생성합니다 (Sass를 사용하지 않는 경우 스타일 시트에서 직접 사용할 수 있음).

@media (min-width: 1200px) {
    .col-lg-v {
        display: inline-block;
        vertical-align: middle;
        float: none;
    }
}

@media (min-width: 992px) {
    .col-md-v {
        display: inline-block;
        vertical-align: middle;
        float: none;
    }
}

@media (min-width: 768px) {
    .col-sm-v {
        display: inline-block;
        vertical-align: middle;
        float: none;
    }
}

@media (min-width: 480px) {
    .col-xs-v {
        display: inline-block;
        vertical-align: middle;
        float: none;
    }
}

이제 다음과 같이 반응 형 열에서 사용할 수 있습니다.

<div class="container">
    <div class="row">
        <div class="col-sm-7 col-sm-v col-xs-12">
            <p>
                This content is vertically aligned on tablets and larger. On mobile it will expand to screen width.
            </p>
        </div><div class="col-sm-5 col-sm-v col-xs-12">
            <p>
                This content is vertically aligned on tablets and larger. On mobile it will expand to screen width.
            </p>
        </div>
    </div>
    <div class="row">
        <div class="col-md-7 col-md-v col-sm-12">
            <p>
                This content is vertically aligned on desktops and larger. On tablets and smaller it will expand to screen width.
            </p>
        </div><div class="col-md-5 col-md-v col-sm-12">
            <p>
                This content is vertically aligned on desktops and larger. On tablets and smaller it will expand to screen width.
            </p>
        </div>
    </div>
</div>

정말 좋습니다!
— Pietro Coelho

짧은 구문과 LESS 변수 사용으로 인해 상향 조정되었습니다.
— Eduard Luca

5

플렉스 행동은 기본적으로 부트 스트랩 4. 추가부터 지원 d-flex align-items-center에서 rowDIV. 더 이상 CSS 내용을 수정할 필요가 없습니다.

간단한 예 : http://jsfiddle.net/vgks6L74/

<!-- language: html -->
<div class="row d-flex align-items-center">
  <div class="col-5 border border-dark" style="height:10em">  Big </div>
  <div class="col-2 border border-danger" style="height:3em"> Small </div>
</div>

귀하의 예 : http://jsfiddle.net/7zwtL702/

<!-- language: html -->
<div class="row d-flex align-items-center">
    <div class="col-5">
        <div class="border border-dark" style="height:10em">Big</div>
    </div>
    <div class="col-2">
        <div class="border border-danger" style="height:3em">Small</div>
   </div>
</div>

출처 : Flex · 부트 스트랩


4

자, 우연히 몇 가지 솔루션을 혼합했으며 마침내 레이아웃에 대해 작동하여 가장 작은 해상도에서 부트 스트랩 열이있는 3x3 테이블을 만들려고했습니다.

/* Required styles */

#grid a {
  display: table;
}

#grid a div {
  display: table-cell;
  vertical-align: middle;
  float: none;
}


/* Additional styles for demo: */

body {
  padding: 20px;
}

a {
  height: 40px;
  border: 1px solid #444;
}

a > div {
  width: 100%;
  text-align: center;
}
<link href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css" rel="stylesheet" />

<div id="grid" class="clearfix row">
  <a class="col-xs-4 align-center" href="#">
    <div>1</div>
  </a>
  <a class="col-xs-4 align-center" href="#">
    <div>2</div>
  </a>
  <a class="col-xs-4 align-center" href="#">
    <div>3</div>
  </a>
  <a class="col-xs-4 align-center" href="#">
    <div>4</div>
  </a>
  <a class="col-xs-4 align-center" href="#">
    <div>5</div>
  </a>
  <a class="col-xs-4 align-center" href="#">
    <div>6</div>
  </a>
  <a class="col-xs-4 align-center" href="#">
    <div>7</div>
  </a>
  <a class="col-xs-4 align-center" href="#">
    <div>8</div>
  </a>
  <a class="col-xs-4 align-center" href="#">
    <div>9</div>
  </a>
</div>


2

    div{
        border: 1px solid;
    }
    span{
        display: flex;
        align-items: center;
    }
    .col-5{
        width: 100px;
        height: 50px;
        float: left;
        background: red;
    }
    .col-7{
        width: 200px;
        height: 24px;

        float: left;
        background: green;
    }
    <span>
        <div class="col-5">
        </div>
        <div class="col-7"></div>
    </span>


1

이 시도,

.exe {
  font-size: 0;
}

.exe > [class*="col"] {
  display: inline-block;
  float: none;
  font-size: 14px;
  font-size: 1rem;
  vertical-align: middle;
}
<link href="//maxcdn.bootstrapcdn.com/bootstrap/3.3.2/css/bootstrap.min.css" rel="stylesheet"/>
<div class="row  exe">
   <div class="col-xs-5">
      <div style="height:5em;border:1px solid grey">Big</div>
   </div>
   <div class="col-xs-5">
       <div style="height:3em;border:1px solid red">Small</div>
   </div>
 </div>


1

이를 수행 할 수있는 몇 가지 방법이 있습니다.

  1. 사용하다 

    display: table-cell;
    vertical-align: middle;

    컨테이너의 CSS

    display: table;
  2. 화면 크기와 관련하여 여백을 변경하려면 미디어 화면과 함께 여백을 사용하십시오. 자세한 내용은 Google @ 미디어 화면을 참조하십시오.

  3. 상대 패딩 사용

    즉, %로 패딩을 지정하십시오.


0

Bootstrap 4 (현재 알파)를 사용하면 .align-items-center클래스를 사용할 수 있습니다 . 따라서 Bootstrap의 반응 형 특성을 유지할 수 있습니다. 나를 위해 곧바로 잘 작동합니다. 부트 스트랩 4 설명서를 참조하십시오 .


포함하는 요소가 표시 될 때 일부 항목에만 작동합니다.
— Zim

0

HTML

<div class="row">
    <div class="col-xs-2 pull-bottom"
         style="height:100px;background:blue">
    </div>
    <div class="col-xs-8 pull-bottom"
         style="height:50px;background:yellow">
    </div>
</div>

CSS

.pull-bottom {
    display: inline-block;
    vertical-align: bottom;
    float: none;
}

-4

나는 몇 가지 div 요소를 세로로 정렬하려는 동일한 상황에 부딪 쳤고 부트 스트랩 클래스 col-xx-xx가 float : left로 div에 스타일을 적용한다는 것을 알았습니다.

style = "Float : none"과 같은 div 요소에 스타일을 적용해야했고 모든 div 요소가 세로로 정렬되기 시작했습니다. 작업 예는 다음과 같습니다.

<div class="col-lg-4" style="float:none;">

JsFiddle 링크

누군가가 float 속성에 대한 자세한 내용을 읽으려는 경우를 대비하여 :

W3 학교-플로트


이것은 나를 위해 작동하지 않습니다. Firefox와 Chrome에서 테스트했습니다. 모든 패널은 세로로 쌓입니다.
— Alf

float : none은 세로로 쌓아 두지 않으므로 작동 방식입니다.
— ATHER

1
그렇다면 다른 질문에 대한 정답입니다. ;)
— Alf
당사 사이트를 사용함과 동시에 당사의 쿠키 정책과 개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.