Получение высоты элемента встроенного блока для заполнения родительского элемента


у меня есть контейнер с двумя элементами. Один из этих пунктов является select элемент, поэтому мне нужно установить size атрибут через HTML. Я хочу, чтобы другой элемент в контейнере растягивал свою высоту, чтобы соответствовать контейнеру. Я не могу этого понять. Я не хочу, чтобы явно задать высоту контейнера, потому что я не знаю размер этого выбора.

.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>
4 54
css

4 ответа:

Если table-cell вариант, вот способ сделать это:

.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>

Если я понимаю, что вы говорите, вы стоите перед 100% высота столбцов

никакие ответы здесь не дали мне утешения, поэтому я пошел и искал правду. Я добавил немного больше css, чтобы сделать точку на расстоянии между двумя полями.

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>

Проверьте codepen: https://codepen.io/anon/pen/XRNMMp

пример, где мне также нужен псевдо-элемент:

.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>