Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

xHTML/CSS: How to make inner div get 100% width minus another div width

I have 2 nested divs inside outer one, which has width:100%. Both nested divs should be in one line and first should get it size from it's contents:

<div id="#outer" style="width:100%; border:1px">   <div id="#inner1" style="border:1px; display:inline">     inner div 1. Some text...   </div>   <div id="#inner2" style="width:100%????; border:1px; display:inline">     inner div 2...   </div> </div> 

Question is how to make #inner2 div to get rest of the horizontal space if width of the #inner1 div is not specified and depends on what it is inside?

P.S. All styles are in separate classes in my case, here I putted CSS into style attributes just for simplification.

I want result to work in IE7+ and FF 3.6

In more details for me it looks like this:

 <style type="text/css"> .captionText {  float:left; }   .captionLine {  height: 1px;  background-color:black;  margin: 0px;  margin-left: 5px;  margin-top: 5px;  border: 0px;  padding: 0px;  padding-top: 1px; }  </style> <table style="width:300px;"> <caption width="100%">      <div class="captionText">Some text</div>      <div class="captionLine"> </div> </caption>      <tr>            <td>something</td>      </tr> </table> 

Here is the image of what I want: Image of what I want

like image 947
Artem Avatar asked Feb 04 '10 07:02

Artem


People also ask

What does width 100% means in CSS?

if you specify width:100%, the element's total width will be 100% of its containing block plus any horizontal margin, padding and border. So, next time you find yourself setting the width of a block level element to 100% to make it occupy all available width, consider if what you really want is setting it to auto.

Does width 100% include padding?

The width and height properties include the content, but does not include the padding, border, or margin.

How do you make a div 100 width?

What you could do is set your div to be position: absolute so your div is independent of the rest of the layout. Then say width: 100% to have it fill the screen width. Now just use margin-left: 30px (or whatever px you need) and you should be done.

How do I change the width to 100% in CSS?

It seems like this should be one of the easiest things to understand in CSS. If you want a block-level element to fill any remaining space inside of its parent, then it's simple — just add width: 100% in your CSS declaration for that element, and your problem is solved.


2 Answers

The mysterious overflow: hidden; is your friend here. It stops elements adjacent to floats from extending behind the float — I think that’s the layout you’re looking for.

Here’s some slightly edited HTML: I don’t think you can have # characters in your ids:

<div id="outer">     <div id="inner1">         inner div 1. Some text...     </div>     <div id="inner2">         inner div 2...     </div> </div> 

And here’s the CSS to achieve the layout you want.

(I put in additional CSS for IE 6 with HTML conditional comments. I just noticed you didn’t actually need it to work in IE 6 too, but if you fancy being nice to the IE 6 users out there...)

<style type="text/css"> #outer {     overflow: hidden;/* Makes #outer contain its floated children */     width: 100%;      /* Colours and borders for illustration purposes */     border: solid 3px #666;     background: #ddd; }  #inner1 {     float: left;/* Make this div as wide as its contents */      /* Colours and borders for illustration purposes */     border: solid 3px #c00;     background: #fdd; }  #inner2 {     overflow: hidden;/* Make this div take up the rest of the horizontal space, and no more */      /* Colours and borders for illustration purposes */     border: solid 3px #00c;     background: #ddf; } </style>  <!--[if lte IE 6]> <style type="text/css"> #inner2 {     zoom: 1;/* Make this div take up the rest of the horizontal space, and no more, in IE 6 */ }  #inner1 {     margin-right: -3px;/* Fix the 3-pixel gap that the previous rule introduces. (Shit like this is why web developers hate IE 6.) */ } </style> <![endif]--> 

Tested and working in IE 6, 7, and 8; Firefox 3.5; and Chrome 4.

like image 127
Paul D. Waite Avatar answered Sep 20 '22 02:09

Paul D. Waite


If you're reading this now you can probably use calc, so be thankful.

HTML

<div class="universe">   <div class="somewidth">   </div>   <div class="everythingelse">   </div> </div> 

CSS

.universe {   width: 100%;   height: 100%; }  .somewidth {   width: 200px;   height: 100%; }  .everythingelse {   width: 800px; /* fallback for emergencies */   width: calc(100% - 200px);   width: -moz-calc(100% - 200px);   width: -webkit-calc(100% - 200px);   height: 100%; } 

See the working example on JSFiddle.

like image 25
fiatjaf Avatar answered Sep 24 '22 02:09

fiatjaf