Getting inline-block element's height to fill the parent
CssCss Problem Overview
I have a container with two items. One of those items is a select
element, so I need to set the size
attribute via HTML. I want the other item in the container to stretch its height to fit the container. I can't figure it out. I don't want to explicitly set the height of the container because I don't know the size of that select box.
.container {
padding: 5px;
border: 1px solid black;
}
.container .column {
display: inline-block;
width: 40%;
background-color: #AAA;
padding: 5px;
margin: 5px;
vertical-align: top;
height: 100%;
}
select {
width: 100%;
}
<div class="container">
<div class="column">Stretch to fill?</div>
<div class="column">
<select size="15">
<option>Option 1</option>
<option>Option 2</option>
</select>
</div>
<div>
Css Solutions
Solution 1 - Css
If table-cell
is an option, here's a way to do it:
.container {
display: table;
width: 100%;
padding: 5px;
border: 1px solid black;
}
.container .column {
display: table-cell;
width: 40%;
background-color: #AAA;
padding: 5px;
border: 5px solid white;
vertical-align: top;
height: 100%;
}
select {
width: 100%;
}
<div class="container">
<div class="column">Stretch to fill?</div>
<div class="column">
<select size="15">
<option>Option 1</option>
<option>Option 2</option>
</select>
</div>
<div>
Solution 2 - Css
If I understand what you are saying, you are facing the 100% height columns problem. I'm sorry to tell you there is no actual solution but "hacks".
Here you can find several of those workarounds. I like to use the one true layout method.
By the way, this is thinking you don't want to use the experimental css3 columns properties.
Solution 3 - Css
No answers here gave me comfort so I went and search for the truth. I added a bit more css to make a point on the spacing between two boxes.
CSS:
.wrapper {
background-color:gray;
}
.container {
margin: 25px auto;
display: inline-flex;
}
.leftbox {
height: inherit;
display: inline-block;
border: 1px solid #D7D2CB;
background-color: #FFFFFF;
border-radius: 5px;
max-width: 550px;
margin-right: 18px;
align-items: stretch;
padding: 15px;
width: 100%;
}
.rightbox {
height: 100%;
display: inline-block;
border: 1px solid #D7D2CB;
background-color: #FFFFFF;
border-radius: 5px;
align-items: stretch;
max-width: 300px;
width: 100%;
padding: 20px 15px;
}
HTML:
<div class="wrapper">
<div class="container">
<div class="leftbox">
There is something here, I am not avoiding it.
</div>
<div class="rightbox">
Probably something else here but much much much much much much much much much much much much much much much much much much much much much much much much much much much much much bigger.
</div>
</div>
</div>
Check the codepen: https://codepen.io/anon/pen/XRNMMp
Solution 4 - Css
An example where I needed a pseudo element also:
.cf:before,
.cf:after {
content: " "; /* 1 */
display: table; /* 2 */
}
.cf:after {
clear: both;
}
*, *:before, *:after {
-moz-box-sizing: border-box; -webkit-box-sizing: border-box; box-sizing: border-box;
}
.faux-columns {
width: 80%;
margin:3em auto;
background-image: -webkit-linear-gradient(left, #f2f7fa 25%, #fff 75%);
background-image: -moz-linear-gradient(left, #f2f7fa 25%, #fff 75%);
background-image: -o-linear-gradient(left, #f2f7fa 25%, #fff 75%);
background-image: linear-gradient(left, #f2f7fa 25%, #fff 75%);
background: -webkit-gradient(linear, left top, right top, color-stop(0%,#f2f7fa), color-stop(25%, #f2f7fa), color-stop(25%,#ffffff), color-stop(100%,#ffffff));
background: -moz-linear-gradient(left, #f2f7fa 0%, #f2f7fa 25%, #ffffff 25%, #ffffff 100%);
background: -webkit-gradient(linear, left top, right top, color-stop(0%,#f2f7fa), color-stop(25%,#f2f7fa), color-stop(25%,#ffffff), color-stop(100%,#ffffff));
background: -o-linear-gradient(left, #f2f7fa 0%,#f2f7fa 25%,#ffffff 25%,#ffffff 100%);
background: -ms-linear-gradient(left, #f2f7fa 0%,#f2f7fa 25%,#ffffff 25%,#ffffff 100%);
background: linear-gradient(left, #f2f7fa 0%,#f2f7fa 25%,#ffffff 25%,#ffffff 100%);
border:1px solid #c1c1c2;
}
.col-1, .col-2 {
float:left;
vertical-align:top;
padding:2em 3em;
}
.col-1 {
position:relative;
width:25%;
background:#F2F7FC;
border-right:1px solid #c1c1c2;
}
.col-2 {
width:75%;
border-left:1px solid #c1c1c2;
margin-left: -1px;
}
.col-1:after,
.col-1:before {
top:100%;
border:solid transparent;content:"";
height:0;
width:0;
position:absolute;
pointer-events:none;
display:block;
}
.col-1:after {
border-color: rgba(255, 255, 255, 0) rgba(255, 255, 255, 0) rgba(255, 255, 255, 0) #f2f7fa;
border-style: solid;
border-width: 21px 0 21px 22px;
left:100%;
top: 47px;
}
.col-1:before {
border-color: rgba(0, 0, 0, 0) rgba(0, 0, 0, 0) rgba(0, 0, 0, 0) #c1c1c2;
border-style: solid;
border-width: 22px 0 22px 23px;
left: 100%;
top: 46px;
}
<div class="faux-columns cf">
<div class="col-1">
<h4>First column with bordered triangle pseudo element attached to it. The background needs to be the full height of .faux-columns</h4>
</div>
<div class="col-2">
<h4> Second column which in some cases will be much taller than column</h4>
There are many variations of passages of Lorem Ipsum available, but the majority have suffered alteration in some form, by injected humour, or randomised words which don't look even slightly believable. If you are going to use a passage of Lorem Ipsum, you need to be sure there isn't anything embarrassing hidden in the middle of text. All the Lorem Ipsum generators on the Internet tend to repeat predefined chunks as necessary, making this the first true generator on the Internet. It uses a dictionary of over 200 Latin words, combined with a handful of model sentence structures, to generate Lorem Ipsum which looks reasonable. The generated Lorem Ipsum is therefore always free from repetition, injected humour, or non-characteristic words etc.
There are many variations of passages of Lorem Ipsum available, but the majority have suffered alteration in some form, by injected humour, or randomised words which don't look even slightly believable. If you are going to use a passage of Lorem Ipsum, you need to be sure there isn't anything embarrassing hidden in the middle of text. All the Lorem Ipsum generators on the Internet tend to repeat predefined chunks as necessary, making this the first true generator on the Internet. It uses a dictionary of over 200 Latin words, combined with a handful of model sentence structures, to generate Lorem Ipsum which looks reasonable. The generated Lorem Ipsum is therefore always free from repetition, injected humour, or non-characteristic words etc.
</div>
</div>