[css] 부트 스트랩 열을 모두 같은 높이로 만들려면 어떻게합니까?

부트 스트랩을 사용하고 있습니다. 세 개의 기둥을 모두 같은 높이로 만들려면 어떻게해야합니까?

다음은 문제의 스크린 샷입니다. 파란색과 빨간색 열이 노란색 열과 같은 높이가 되길 원합니다.

중앙 열이 다른 두 열보다 긴 3 개의 부트 스트랩 열

코드는 다음과 같습니다.

<link href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css" rel="stylesheet"/>
<div class="container-fluid">
<div class="row">
    <div class="col-xs-4 panel" style="background-color: red">
        some content
    </div>
    <div class="col-xs-4 panel" style="background-color: yellow">
        catz
        <img width="100" height="100" src="https://lorempixel.com/100/100/cats/">
    </div>
    <div class="col-xs-4 panel" style="background-color: blue">
        some more content
    </div>
</div>
</div>



답변

부트 스트랩 4를 사용하는 솔루션 4

Bootstrap 4는 Flexbox를 사용하므로 추가 CSS가 필요 없습니다.

데모

<div class="container">
    <div class="row ">
        <div class="col-md-4" style="background-color: red">
          some content
        </div>
        <div class="col-md-4" style="background-color: yellow">
          catz
          <img width="100" height="100" src="https://placekitten.com/100/100/">
        </div>
        <div class="col-md-4" style="background-color: green">
          some more content
        </div>
    </div>
</div>

음수 여백을 사용하는 솔루션 1 (응답 성이 깨지지 않음)

데모

.row{
    overflow: hidden;
}

[class*="col-"]{
    margin-bottom: -99999px;
    padding-bottom: 99999px;
}

테이블을 사용하는 솔루션 2

데모

.row {
    display: table;
}

[class*="col-"] {
    float: none;
    display: table-cell;
    vertical-align: top;
}

flex를 사용한 솔루션 3 은 2015 년 8 월에 추가되었습니다.이 솔루션 전에는 의견이 게시되지 않았습니다.

데모

.row {
  display: -webkit-box;
  display: -webkit-flex;
  display: -ms-flexbox;
  display:         flex;
  flex-wrap: wrap;
}
.row > [class*='col-'] {
  display: flex;
  flex-direction: column;
}


답변

2020 업데이트

CSS flexbox를 사용 하는 Bootstap 3.x에 대한 최선의 접근 방식 (최소 CSS 필요)

.equal {
  display: flex;
  display: -webkit-flex;
  flex-wrap: wrap;
}

동일한 높이 flexbox 예제 부트 스트랩

특정 중단 점에 동일한 높이의 플렉스 박스 만 적용하려면 (반응 형) 미디어 쿼리를 사용하십시오. 예를 들어 다음은 sm(768px) 이상입니다.

@media (min-width: 768px) {
  .row.equal {
    display: flex;
    flex-wrap: wrap;
  }
}

이 솔루션은 여러 행 (열 줄 바꿈)에도 잘 작동합니다.
https://www.bootply.com/gCEXzPMehZ

다른 해결 방법

이러한 옵션은 다른 사람들이 권장하지만 반응 형 디자인 에는 적합하지 않습니다 . 이들은 열 줄 바꿈이없는 간단한 단일 행 레이아웃에만 작동합니다.

1) 큰 음수 여백 및 패딩 사용

2) display : table-cell 사용 (이 솔루션은 반응 형 그리드에도 영향을 미치므로 @media 쿼리는 table열이 세로로 쌓이기 전에 더 넓은 화면 에만 표시하는 데 사용할 수 있음 )


부트 스트랩 4

Flexbox는 이제 Bootstrap 4에서 기본적으로 사용되므로 추가 CSS가 동일한 높이 열을 만들 필요가 없습니다 : http://www.codeply.com/go/IJYRI4LPwU

예:

<div class="container">
    <div class="row">
        <div class="col-md-6"></div>
        <div class="col-md-6"></div>
    </div>
</div>


답변

자바 스크립트가 필요하지 않습니다. 다음 과 같이 .row-eq-height기존 클래스 를 추가하십시오 .row.

<div class="row row-eq-height">
  <div class="col-xs-12 col-sm-4 panel" style="background-color: red">
    some content
  </div>
  <div class="col-xs-6 col-sm-4 panel" style="background-color: yellow">
    kittenz
  <img src="http://placekitten.com/100/100">
  </div>
  <div class="col-xs-6 col-sm-4 panel" style="background-color: blue">
    some more content
  </div>
</div>

팁 : 행에 열이 12 개를 초과하면 부트 스트랩 그리드가 줄 바꿈에 실패합니다. 따라서 div.row.row-eq-height12 열마다 새로운 것을 추가하십시오 .

팁 : 추가해야 할 수도 있습니다

<link rel="stylesheet" href="http://getbootstrap.com.vn/examples/equal-height-columns/equal-height-columns.css" />

당신의 HTML에


답변

귀하의 질문에 대답하기 위해 접두사 CSS있는 전체 응답 데모를 볼 수 있습니다 .

/* Using col-xs media query breakpoint but you can change 481 to 768 to only apply to col-sm and above if you'd like*/

@media only screen and (min-width : 481px) {
    .flex-row {
        display: flex;
        flex-wrap: wrap;
    }
    .flex-row > [class*='col-'] {
        display: flex;
        flex-direction: column;
    }
    .flex-row.row:after,
    .flex-row.row:before {
        display: flex;
    }
}

Codepen의 스크린 샷

위의 스크린 샷과 같이 플렉스 열 내에서 썸네일 컨텐츠 플렉스에 대한 지원을 추가하려면 다음을 추가하십시오 … 패널을 사용 하여이 작업을 수행 할 수 있습니다.

.flex-row .thumbnail,
.flex-row .caption {
    display: flex;
    flex: 1 0 auto;
    flex-direction: column;
}
.flex-text {
    flex-grow: 1;
}
.flex-row img {
    width: 100%;
}

flexbox는 IE9 이하에서 작동하지 않지만 Javascript 그리드 와 같은 조건부 태그를 폴리 필로 사용하여 대체를 사용하여 데모를 사용할 수 있습니다 .

<!--[if lte IE 9]>

<![endif]-->

허용 된 답변의 다른 두 가지 예는 … 테이블 데모는 괜찮은 아이디어이지만 잘못 구현되고 있습니다. 부트 스트랩 열 클래스에 CSS를 적용하면 그리드 프레임 워크가 완전히 손상됩니다. [class*='col-']너비가 정의 된 테이블 스타일은 1과 2에 대해 사용자 정의 선택기를 사용해야합니다 . 높이와 너비가 같은 열을 원할 경우에만이 방법을 사용해야합니다. 다른 레이아웃 용이 아니며 반응이 없습니다. 그러나 모바일 디스플레이에서 대체 할 수 있습니다 …

<div class="table-row-equal">
<div class="thumbnail">
    Content...
</div>
<div class="thumbnail">
    Content...
</div>
</div>
@media only screen and (min-width : 480px){
    .table-row-equal {
        display: table;
        width: 100%;
        table-layout: fixed;
        border-spacing: 30px 0px;
        word-wrap: break-word;
    }
    .table-row-equal .thumbnail {
        float: none;
        display: table-cell;
        vertical-align: top;
        width: 1%;
    }
}

마지막으로, 하나의 실제 레이아웃 버전을 구현하는 승인 된 답변의 첫 번째 데모는 일부 상황에서는 적합하지만 부트 스트랩 열에는 적합하지 않습니다. 그 이유는 모든 열이 컨테이너 높이로 확장되기 때문입니다. 따라서 열이 옆의 요소가 아닌 전체 컨테이너로 확장되므로 응답 성이 손상됩니다. 이 방법을 사용하면 더 이상 행에 아래쪽 여백을 적용 할 수 없으며 앵커 태그로 스크롤하는 등 다른 문제가 발생할 수 있습니다.

전체 코드는 flexbox 코드를 자동으로 접두어로 추가 한 Codepen을 참조하십시오.


답변

하나의 행만 표시하므로 유스 케이스가 해당 행으로 제한 될 수 있습니다. 여러 행이있는 경우이 플러그인 -github Javascript-grids- 가 완벽하게 작동합니다! 각 패널을 가장 높은 패널로 확장하여 해당 행에서 가장 높은 패널을 기준으로 각 행에 다른 높이를 지정할 수 있습니다. jquery 솔루션 대 CSS이지만 대안 접근법으로 권장하고 싶었습니다.


답변

모든 브라우저에서이 작업을 수행하려면 javascript를 사용하십시오.

$( document ).ready(function() {
    var heights = $(".panel").map(function() {
        return $(this).height();
    }).get(),

    maxHeight = Math.max.apply(null, heights);

    $(".panel").height(maxHeight);
});


답변

이 스레드와 다른 페이지에서 제안한 것들을 많이 시도했지만 모든 브라우저에서 100 % 작동하지는 않았습니다.

그래서 나는 꽤 많은 시간을 실험하고 이것을 생각해 냈습니다.
1 개의 클래스 만 있는 flexbox 사용하여 Bootstrap Equal Height 열위한 완벽한 솔루션 . 이것은 모든 주요 브라우저 IE10 +에서 작동합니다.

CSS :

.row.equal-cols {
  display: -webkit-flex;
  display: -ms-flexbox;
  display: flex;
  -webkit-flex-wrap: wrap;
  -ms-flex-wrap: wrap;
  flex-wrap: wrap;
}

.row.equal-cols:before,
.row.equal-cols:after {
  display: block;
}

.row.equal-cols > [class*='col-'] {
  display: -webkit-flex;
  display: -ms-flexbox;
  display: flex;
  -webkit-flex-direction: column;
  -ms-flex-direction: column;
  flex-direction: column;
}

.row.equal-cols > [class*='col-'] > * {
  -webkit-flex: 1 1 auto;
  -ms-flex: 1 1 auto;
  flex: 1 1 auto;
}

HTML :

<div class="container">
  <div class="row equal-cols">
    <div class="col-sm-4">
      <div class="content"></div>
    </div>
    <div class="col-sm-4">
      <div class="content"></div>
    </div>
    <div class="col-sm-4">
      <div class="content"></div>
    </div>
  </div>
</div>

더 많은 버전의 IE를 지원하려면 예를 들어 https://github.com/liabru/jquery-match-height를 사용 하고의 모든 하위 열을 타겟팅 할 수 있습니다 .equal-cols. 이처럼 :

// Create a check for IE9 (or any other specific browser).
if(IE9) {
  $(".row.equal-cols > [class*='col-']").matchHeight();
}

이 폴리 필이 없으면 열은 일반적인 부트 스트랩 열처럼 작동하므로 대체로 좋습니다.