2013-05-06 21 views
52

Mam pojemnik z dwoma przedmiotami. Jednym z tych elementów jest element select, więc muszę ustawić atrybut size poprzez HTML. Chcę, aby inny przedmiot w pojemniku rozciągnął swoją wysokość, aby pasował do pojemnika. Nie mogę tego rozgryźć. Nie chcę jawnie ustawiać wysokości kontenera, ponieważ nie znam rozmiaru tego pola wyboru.Uzyskiwanie wysokości elementu blokowego w celu wypełnienia elementu nadrzędnego

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

+1

Ten scenariusz jest wyzwaniem. Spójrz na pytania dotyczące SO z ustalonymi układami nagłówka/stopki, aby zobaczyć, jak zostały rozwiązane. – isherwood

+0

Czy mógłbyś użyć 'table-cell'? – Antony

+0

'table-cell' nie wydaje się zwracać uwagi na moje ustawienie' width'. –

Odpowiedz

47

Jeśli table-cell jest opcją, oto sposobem, aby to zrobić:

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

19

Jeśli dobrze rozumiem, co mówisz, jesteś w obliczu problemu 100% height columns. Przykro mi mówić, że nie ma rzeczywistego rozwiązania, ale "hacki".

Here można znaleźć kilka z tych obejść. Lubię używać jednej prawdziwej metody układania.

Przy okazji, to jest myślenie, że nie chcesz używać eksperymentalnych właściwości kolumn css3.

+0

To jest świetne źródło! – Ziggy

+0

Jedna metoda True Layout zadziałała dla mnie! 'margin-bottom: -50em; padding-bottom: 50em; 'gdzie' 50em' to jakaś konkretna liczba magiczna dla danego projektu. – lkraav

-2

Przykładem gdzie potrzebne element pseudo także:

.cf:before, 
 
.cf:after { 
 
\t content: " "; /* 1 */ 
 
\t display: table; /* 2 */ 
 
} 
 

 
.cf:after { 
 
\t clear: both; 
 
} 
 

 

 
*, *:before, *:after { 
 
\t -moz-box-sizing: border-box; -webkit-box-sizing: border-box; box-sizing: border-box; 
 
} 
 

 
.faux-columns { 
 
\t width: 80%; 
 
\t margin:3em auto; 
 
\t background-image: -webkit-linear-gradient(left, #f2f7fa 25%, #fff 75%); 
 
\t background-image: -moz-linear-gradient(left, #f2f7fa 25%, #fff 75%); 
 
\t background-image: -o-linear-gradient(left, #f2f7fa 25%, #fff 75%); 
 
\t background-image: linear-gradient(left, #f2f7fa 25%, #fff 75%); 
 
\t background: -webkit-gradient(linear, left top, right top, color-stop(0%,#f2f7fa), color-stop(25%, #f2f7fa), color-stop(25%,#ffffff), color-stop(100%,#ffffff)); 
 
\t background: -moz-linear-gradient(left, #f2f7fa 0%, #f2f7fa 25%, #ffffff 25%, #ffffff 100%); 
 
\t background: -webkit-gradient(linear, left top, right top, color-stop(0%,#f2f7fa), color-stop(25%,#f2f7fa), color-stop(25%,#ffffff), color-stop(100%,#ffffff)); 
 
\t background: -o-linear-gradient(left, #f2f7fa 0%,#f2f7fa 25%,#ffffff 25%,#ffffff 100%); 
 
\t background: -ms-linear-gradient(left, #f2f7fa 0%,#f2f7fa 25%,#ffffff 25%,#ffffff 100%); 
 
\t background: linear-gradient(left, #f2f7fa 0%,#f2f7fa 25%,#ffffff 25%,#ffffff 100%); 
 
\t border:1px solid #c1c1c2; 
 
} 
 

 
.col-1, .col-2 { 
 
\t float:left; 
 
\t vertical-align:top; 
 
\t padding:2em 3em; 
 
} 
 

 
.col-1 { 
 
\t position:relative; 
 
\t width:25%; 
 
\t background:#F2F7FC; 
 
\t border-right:1px solid #c1c1c2; 
 
} 
 

 
.col-2 { 
 
\t width:75%; 
 
\t border-left:1px solid #c1c1c2; 
 
\t 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>

2

Żadne odpowiedzi tutaj nie dawały mi otuchy, więc poszedłem szukać prawdy. Dodałem nieco więcej css, aby wskazać na odległość między dwoma polami.

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> 

Sprawdź codepen: https://codepen.io/anon/pen/XRNMMp

+0

Briliant, działało to zgodnie z oczekiwaniami, ale nie wtedy, gdy ekran był zgodny z rozmiarem telefonu komórkowego ... Oczekiwałem, że div przemieści się pod lewym divem, co tak naprawdę się nie stało –

Powiązane problemy