Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Divide Width of Element Between Child Divs With CSS

Tags:

I have a varying number of inline-block divs that I want to collectively take up 100% of their parent. Can this be done without JavaScript? The only way I can think of is with a table but it's of course bad practice to use a table solely for layout purposes.

|----------------------| |{  div 1  }{  div 2  }|            or |{div 1}{div  2}{div 3}| |----------------------| 

I have also tried { display:block; float:left; } but it doesn't seem to make a difference.

like image 907
Gary Avatar asked Jul 08 '11 20:07

Gary


People also ask

How do you put a space between two divs side-by-side?

Also we can make space between the two divs by adding margin-right to the first div and/or margin-left to the second div. There are several ways to place HTML divs side-by-side. The simplest and most efficient way to do this is to make use of a handful of CSS properties (i.e., float, grid, and flex).

What is width inherit in CSS?

width:inherit inherits width that defined by parent. HTML: <div id="parent"> <div id="child"></div> </div>​ CSS: #parent { width:50%; height:30px; } #child { width:inherit; height:100%; background-color:red; }


2 Answers

You can use display:table-cell on your inner divs to do this. For the browser to make the inner divs behave like table cells, it also needs two layers of containing elements: one to acts as the table, and another to act as the table-row.

For a structure like this:

   <div class="outer">        <div class="middle">           <div class="inner">Item 1</div>            <div class="inner">Item 2</div>            <div class="inner">Item 3</div>            <div class="inner">Item 4</div>         </div>    </div> 

Use this CSS:

div.outer {display:table;} div.middle {display:table-row;} div.inner {display:table-cell;} 

A nice structure to use is a UL wrapped in a DIV: the DIV acts as a table, the UL as a row, and the LI's as table-cells.

This technique is not well supported in older browsers - for anything older than IE8, you're out of luck entirely.

Let me know if you need more sample code than that!

like image 165
Ben Hull Avatar answered Oct 22 '22 12:10

Ben Hull


You can utilize css3 benefits here. I was also facing this issue now i have fixed that using below example code

.parent-container {    padding: 0;    margin: 0;    list-style: none;    display: -webkit-box;    display: -moz-box;    display: -ms-flexbox;    display: -webkit-flex;    display: flex;    -webkit-flex-flow: row wrap;    justify-content: space-around;    -webkit-justify-content: space-around;    flex-wrap: nowrap;    -webkit-flex-wrap: nowrap;  }  .child-item {    margin: 5px;    text-align: center;    padding: 10px;    background-color: red;    color: #fff;  }
<ul class="parent-container">    <li class="child-item">1</li>    <li class="child-item">2</li>    <li class="child-item">3</li>    <li class="child-item">4</li>    <li class="child-item">5</li>    <li class="child-item">6</li>    <li class="child-item">7</li>  </ul>

Thanks & Regards, Lingeshram

like image 42
lingeshram Avatar answered Oct 22 '22 14:10

lingeshram