Getting inline-block element's height to fill the parent

前端 未结 4 2047
庸人自扰
庸人自扰 2020-12-29 02:20

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

相关标签:
4条回答
  • 2020-12-29 02:25

    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>

    0 讨论(0)
  • 2020-12-29 02:43

    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.

    0 讨论(0)
  • 2020-12-29 02:44

    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

    0 讨论(0)
  • 2020-12-29 02:48

    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>

    0 讨论(0)
提交回复
热议问题