2016-04-08 2 views
2

私は3つの列を持ち、それぞれの内部にクラスtext-containerの要素があります。 JavaScriptを使わずに、それらのすべてを高さと同じ高さにしたい。どのように3つの要素をjavascriptなしで同じ高さにするのですか?

これはコードです:

<div class="column"> 
    <!--more elements--> 

    <div class="text-container"> 
     <!--some text--> 
    </div> 
</div> 

<div class="column"> 
    <!--more elements--> 

    <div class="text-container"> 
     <!--some longer text--> 
    </div> 
</div> 

<div class="column"> 
    <!--more elements--> 

    <div class="text-container"> 
     <!--some shorter text--> 
    </div> 
</div> 

はJavaScriptを使用しなくてもtext-container同じ高さを作るための方法はありますか?フレックスボックスはこのトリックを行うことができますが、それはすべての要素がflexbox要素内にある場合です。

+0

あなたは現在どのようなCSSを持っていますか? Divsはデフォルトでブロック要素なので、私たちに示したものは単一の列ではありません。 – j08691

+1

フレックスボックスでは、フレックスコンテナ内の兄弟として存在できるため、 '.column' divの高さを等しくすることができます。しかし、 '.text-container' divは、兄弟ではなく、いとこであるため、同じ高さにすることはできません。列方向のコンテナの '.text-container' divに' flex:1'を適用すると、親の高さを追跡できます。しかし、それはおそらくあなたが望むものではありません。結論:純粋なCSSでは不可能です。 –

+0

あなたの投稿に実行可能な例があるべきですが、非兄弟の高さの一致を理解することは難しいと私は同意します。あなたはHTMLを再加工できるはずです。 –

答えて

0

Flexboxesを試してみてください。

最初に、カラムを格納するコンテナクラスを追加します。次に、display: flex;(および必要なベンダープレフィックス)を追加してフレックスボックスにします。さらにご希望の場合は、height: 100%overflow: hiddenを追加してください。

列クラスでは、display: flex;を追加してFlexboxにします。次に、flex-directioncolumnに設定して、それを成長させるためにflex: 1;を追加して縦型レイアウトを与えます。

最後に、テキストコンテナクラスにflex: 1;を追加します。

.container { 
 
    display: -webkit-flex; /* chrome, safari */ 
 
    display: -ms-flexbox; /* internet explorer */ 
 
    display: flex; 
 
    overflow: hidden; /* optional */ 
 
    height: 100%; 
 
} 
 

 
.column { 
 
    display: -webkit-flex; /* chrome, safari */ 
 
    display: -ms-flexbox; /* internet explorer*/ 
 
    display: flex; 
 
    flex-direction: column; 
 
    flex: 1; 
 
    border: 1px solid red; 
 
} 
 

 
.column .text-container { 
 
    flex: 1; 
 
    border: 1px solid blue; 
 
}
<div class="container"> 
 
    <div class="column"> 
 
     hello! 
 

 
     <div class="text-container"> 
 
      hello world! <br /> 
 
      hello world! <br /> 
 
      hello world! 
 
     </div> 
 
    </div> 
 

 
    <div class="column"> 
 
     hello! 
 

 
     <div class="text-container"> 
 
      hello world! <br /> 
 
      hello world! 
 
     </div> 
 
    </div> 
 

 
    <div class="column"> 
 
     hello! <br /> 
 
     hello! <br /> 
 
     hello! <br /> 
 
     hello! 
 

 
     <div class="text-container"> 
 
      hello world! 
 
     </div> 
 
    </div> 
 
</div>

による互換性の理由またはその他の理由(それはすでに2016年だが)、あなたはFlexboxes以外のものを好むだろうに、this articleまたはthis answerを見てみましょう、場合。

+0

'.column' divの他の子要素の高さが異なる場合はどうなりますか? –

+0

私が追加したスニペットを見てください。それは、列の子供が異なる高さを持っている場合、それは細かく伸びているようです。 – Lemmmy

+0

しかし、私は 'text-container' divsがカラムではなく同じ高さになることを願っています。 –

1

私はずっとバニラJSを行うが、ここでjQueryのソリューションですません。

$(document).ready(function() { 
 
    var maxHeight = -1; 
 
    var col = $('.text-container'); 
 
    
 
    col.each(function() { 
 
    maxHeight = Math.max(maxHeight, $(this).height()); 
 
    }); 
 

 
    col.height(maxHeight); 
 
});
.container { 
 

 
    overflow: hidden; /* optional */ 
 

 
} 
 

 
.column { 
 
    margin:2px; 
 
    float:left; 
 
    border: 1px solid red; 
 
    height:200px; 
 
    
 
} 
 

 
.column .text-container { 
 
    margin:2px; 
 
    border: 1px solid blue; 
 
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 
<div class="container"> 
 
    <div class="column"> 
 
     <div class="text-container"> 
 
      hello world! 
 
     </div> 
 
    </div> 
 

 
    <div class="column"> 
 
     <div class="text-container"> 
 
      hello world! <br /> 
 
      hello world! 
 
     </div> 
 
    </div> 
 

 
    <div class="column"> 
 
     <div class="text-container"> 
 
      hello world! <br /> 
 
      hello world! <br /> 
 
      hello world! 
 
     </div> 
 
    </div> 
 
</div>

関連する問題