Search code examples
cssinline

How do I get my DIV elements to wrap only if there is not enough screen real estate to display them?


I would like to keep the following elements on the same line (horizontal plane), provided there is enough horizontal real estate to do so …

#profileContainer {
    border-radius: 25px;
    background: #ffffff;
    padding: 10px;
    display: inline-block;
    position: fixed;
    top: 50%;
    left: 50%;
    -webkit-transform: translate(-50%, -50%);
    transform: translate(-50%, -50%);
}

.profileField {
        padding: 10px;
        font-family: 'Oxygen', sans-serif;
        font-weight: 300;
        font-size: 20px;
        display: inline-block;
        white-space: nowrap;
}
<div id=“profileContainer”>
<div class="profileField">
    Birthday<br> 
    <div class="select"><div class="select-styled">Select Month</div><ul class="select-options"><li rel="">Select Month</li><li rel="1">January</li><li rel="2">February</li>…<li rel="12">December</li></ul></div>
<div class="select"><div class="select-styled">Select Day</div><ul class="select-options"><li rel="">Select Day</li><li rel="1">1</li><li rel="2">2</li><li rel="3">3</li><li rel="4">4</li>…<li rel="28">28</li><li rel="29">29</li><li rel="30">30</li><li rel="31">31</li></ul></div>
<div class="select"><div class="select-styled">Select Year</div><ul class="select-options"><li rel="">Select Year</li><li rel="1900">1900</li><li rel="1901">1901</li><li rel="1902">1902</li><li rel="1903">1903</li><li rel="1904">1904</li>…<li rel="2019">2019</li><li rel="2020">2020</li><li rel="2021">2021</li></ul></div>
  </div>
</div>

The problem is, if you look at my JSFiddle — https://jsfiddle.net/3nwpv8ch/, you’ll notice that even when you compress the screen horizontally so that there’s not enough room for the elements, they do not start to wrap, and instead you simply cannot see them. How can I get the elements to wrap only if there is not enough horizontal screen real estate available? If there is enough, I would want the elements to continue to remain on the same line.


Solution

  • You can do like this, where you simply remove display: inline-block and white-space: nowrap from the profileField rule

    Note: I also temporary removed the translate so one easily can see how it behaves

    Updated fiddle

    body {
      text-align: center;
    }
    
    #profileContainer {
      border-radius: 25px;
      background: #000000;
      padding: 10px;
      display: inline-block;
      position: relative;
    }
    
    .profileField {
      padding: 10px;
      font-family: 'Oxygen', sans-serif;
      font-weight: 300;
      font-size: 20px;
    }
    
    .selectMenu {
      font-family: 'Oxygen', sans-serif;
      font-size: 20px;
      height: 50px;
      -webkit-appearance: menulist-button;
    }
    
    .select-hidden {
      display: none;
      visibility: hidden;
      padding-right: 10px;
    }
    
    .select {
      cursor: pointer;
      display: inline-block;
      position: relative;
      font-size: 16px;
      color: #fff;
      width: 220px;
      height: 42px;
    }
    
    .select-styled.active {
      background-color: #737373;
    }
    
    .select-styled {
      position: absolute;
      top: 0;
      right: 0;
      bottom: 0;
      left: 0;
      background-color: gray;
      padding: 11px 12px;
      -webkit-transition: all 0.2s ease-in;
      transition: all 0.2s ease-in;
    }
    
    .select-options {
      display: none;
      position: absolute;
      top: 100%;
      right: 0;
      left: 0;
      z-index: 999;
      margin: 0;
      padding: 0;
      list-style: none;
      background-color: darken(gray, 5);
    }
    <div id="profileContainer">
    
      <div class="profileField">
        Birthday
        <br>
        <div class="select">
          <div class="select-styled">Select Month</div>
          <ul class="select-options">
            <li rel="">Select Month</li>
            <li rel="1">January</li>
            <li rel="2">February</li>
            <li rel="3">March</li>
            <li rel="4">April</li>
            <li rel="5">May</li>
            <li rel="6">June</li>
            <li rel="7">July</li>
            <li rel="8">August</li>
            <li rel="9">September</li>
            <li rel="10">October</li>
            <li rel="11">November</li>
            <li rel="12">December</li>
          </ul>
        </div>
        <div class="select">
          <div class="select-styled">Select Day</div>
          <ul class="select-options">
            <li rel="">Select Day</li>
            <li rel="1">1</li>
            <li rel="2">2</li>
            <li rel="3">3</li>
            <li rel="4">4</li>
            <li rel="5">5</li>
            <li rel="6">6</li>
            <li rel="7">7</li>
            <li rel="8">8</li>
            <li rel="9">9</li>
            <li rel="10">10</li>
            <li rel="11">11</li>
            <li rel="12">12</li>
            <li rel="13">13</li>
            <li rel="14">14</li>
            <li rel="15">15</li>
            <li rel="16">16</li>
            <li rel="17">17</li>
            <li rel="18">18</li>
            <li rel="19">19</li>
            <li rel="20">20</li>
            <li rel="21">21</li>
            <li rel="22">22</li>
            <li rel="23">23</li>
            <li rel="24">24</li>
            <li rel="25">25</li>
            <li rel="26">26</li>
            <li rel="27">27</li>
            <li rel="28">28</li>
            <li rel="29">29</li>
            <li rel="30">30</li>
            <li rel="31">31</li>
          </ul>
        </div>
        <div class="select">
          <div class="select-styled">Select Year</div>
          <ul class="select-options">
            <li rel="">Select Year</li>
            <li rel="1900">1900</li>
            <li rel="1901">1901</li>
            <li rel="1902">1902</li>
            <li rel="1903">1903</li>
            <li rel="1904">1904</li>
            <li rel="1905">1905</li>
            <li rel="1906">1906</li>
            <li rel="1907">1907</li>
            <li rel="1908">1908</li>
            <li rel="1909">1909</li>
            <li rel="1910">1910</li>
            <li rel="1911">1911</li>
            <li rel="1912">1912</li>
            <li rel="1913">1913</li>
            <li rel="1914">1914</li>
            <li rel="1915">1915</li>
            <li rel="1916">1916</li>
            <li rel="1917">1917</li>
            <li rel="1918">1918</li>
            <li rel="1919">1919</li>
            <li rel="1920">1920</li>
            <li rel="1921">1921</li>
            <li rel="1922">1922</li>
            <li rel="1923">1923</li>
            <li rel="1924">1924</li>
            <li rel="1925">1925</li>
            <li rel="1926">1926</li>
            <li rel="1927">1927</li>
            <li rel="1928">1928</li>
            <li rel="1929">1929</li>
            <li rel="1930">1930</li>
            <li rel="1931">1931</li>
            <li rel="1932">1932</li>
            <li rel="1933">1933</li>
            <li rel="1934">1934</li>
            <li rel="1935">1935</li>
            <li rel="1936">1936</li>
            <li rel="1937">1937</li>
            <li rel="1938">1938</li>
            <li rel="1939">1939</li>
            <li rel="1940">1940</li>
            <li rel="1941">1941</li>
            <li rel="1942">1942</li>
            <li rel="1943">1943</li>
            <li rel="1944">1944</li>
            <li rel="1945">1945</li>
            <li rel="1946">1946</li>
            <li rel="1947">1947</li>
            <li rel="1948">1948</li>
            <li rel="1949">1949</li>
            <li rel="1950">1950</li>
            <li rel="1951">1951</li>
            <li rel="1952">1952</li>
            <li rel="1953">1953</li>
            <li rel="1954">1954</li>
            <li rel="1955">1955</li>
            <li rel="1956">1956</li>
            <li rel="1957">1957</li>
            <li rel="1958">1958</li>
            <li rel="1959">1959</li>
            <li rel="1960">1960</li>
            <li rel="1961">1961</li>
            <li rel="1962">1962</li>
            <li rel="1963">1963</li>
            <li rel="1964">1964</li>
            <li rel="1965">1965</li>
            <li rel="1966">1966</li>
            <li rel="1967">1967</li>
            <li rel="1968">1968</li>
            <li rel="1969">1969</li>
            <li rel="1970">1970</li>
            <li rel="1971">1971</li>
            <li rel="1972">1972</li>
            <li rel="1973">1973</li>
            <li rel="1974">1974</li>
            <li rel="1975">1975</li>
            <li rel="1976">1976</li>
            <li rel="1977">1977</li>
            <li rel="1978">1978</li>
            <li rel="1979">1979</li>
            <li rel="1980">1980</li>
            <li rel="1981">1981</li>
            <li rel="1982">1982</li>
            <li rel="1983">1983</li>
            <li rel="1984">1984</li>
            <li rel="1985">1985</li>
            <li rel="1986">1986</li>
            <li rel="1987">1987</li>
            <li rel="1988">1988</li>
            <li rel="1989">1989</li>
            <li rel="1990">1990</li>
            <li rel="1991">1991</li>
            <li rel="1992">1992</li>
            <li rel="1993">1993</li>
            <li rel="1994">1994</li>
            <li rel="1995">1995</li>
            <li rel="1996">1996</li>
            <li rel="1997">1997</li>
            <li rel="1998">1998</li>
            <li rel="1999">1999</li>
            <li rel="2000">2000</li>
            <li rel="2001">2001</li>
            <li rel="2002">2002</li>
            <li rel="2003">2003</li>
            <li rel="2004">2004</li>
            <li rel="2005">2005</li>
            <li rel="2006">2006</li>
            <li rel="2007">2007</li>
            <li rel="2008">2008</li>
            <li rel="2009">2009</li>
            <li rel="2010">2010</li>
            <li rel="2011">2011</li>
            <li rel="2012">2012</li>
            <li rel="2013">2013</li>
            <li rel="2014">2014</li>
            <li rel="2015">2015</li>
            <li rel="2016">2016</li>
            <li rel="2017">2017</li>
            <li rel="2018">2018</li>
            <li rel="2019">2019</li>
            <li rel="2020">2020</li>
            <li rel="2021">2021</li>
          </ul>
        </div>
    
      </div>
      
      <div class="profileField" style="background-color:green;">
        Line 2 - should be on a new line
      </div>
    </div>


    Update based on comment

    If you want the container to grow when there is space, you could do like this, where you set width: 100% and a max-width: 720px (the sum of the select items) on the #profileContainer

    Updated fiddle