|  | Posted by Froefel on 07/27/07 09:23 
Thanks to Ben C I jumped a huge step forward. Knowing that tables needa width=100% in order to take up the entire width of a container
 whereas DIV's do that without specifying a width fixed all my problems
 (well, at least the ones described in my post).
 
 Armed with this knowledge, I can now go back and get rid of the
 container table as well and use floating DIV's. Thanks to everyone for
 your input.
 
 -- Hans
 
 
 
 On Jul 26, 11:06 pm, Ben C <spams...@spam.eggs> wrote:
 > On 2007-07-26, Froefel <hansdeschry...@gmail.com> wrote:
 >
 > > I'm trying to do something very basic, using CSS instead of tables.
 > > Doing it the table-way I would have been done in 5 minutes... trying
 > > to accomplish it in CSS it's taken me over 2 hours already. I'm sure
 > > someone with CSS knowledge has a 5-minute solution to my problem...
 > > Anyway, just venting a little bit.. here goes:
 >
 > > I'm trying to create a box with a header, using DIVs. The box should
 > > look like this:
 >
 > > ----------------------------------------------
 > >| Panel Header                        |
 > >|--------------------------------------------|
 > >| Panel Content                       |
 > >|                                            |
 > >|                                            |
 > >|--------------------------------------------|
 >
 > > The Panel Header should have a left and rigfht margin of 5px and a top
 > > and bottom margin of 2px. The Header has a gradient background image
 > > and should not have a border.
 > > The Panel Content should have an all-round margin of 5px and a 1px
 > > border.
 >
 > > The CSS I have so far is:
 > > .PanelHeader {
 > >    width:100%;
 >
 >     ^^^^^^^^^^
 >
 > Leave this out
 >
 > >    height:15px;
 > >    padding:2px 5px 2px 5px;
 > >    cursor: pointer;
 > >    vertical-align: middle;
 > >    background-image: url(images/bg-collapsepanel_green.png);
 > >    background-repeat:repeat-x;
 > >    color:#FFF;
 > >    font-weight:bold;
 > > }
 > > .PanelContent {
 > >    border:1px solid #334444;
 > >    width:100%;
 >
 >     ^^^^^^^^^^^
 >
 > And this
 >
 > >    padding:5px;
 > > }
 >
 > > The markup is something like this:
 > ><table cellspacing="0" cellpadding="0" style="width:100%">
 > >  <tr>
 > >     <td style="width:50%">Some content on the left</td>
 > >     <td style="width:50%">
 > >       <div class="PanelHeader">Header text</div>
 > >       <div class="PanelContent">Content text</div>
 > >     </td>
 > >  </tr>
 > ></table>
 >
 > I thought you were trying to do without a table?
 >
 > > I'm having 2 problems:
 > > 1. The Content portion stick out by 2px to the right instead of being
 > > aligned with the Header portion
 >
 > Don't use width: 100% and that will go away. Width sets the width of the
 > content area, borders padding and margin are extra.
 >
 > > 2. The Header and Content are wider than the TD in which they are
 > > contained. Because the TD is part of a table that has a width=100%,
 > > the Header and Content DIVs actually extend beyond the browser window.
 >
 > You almost never need width: 100% on normal flow block boxes (things
 > like divs). They're not like tables (whose auto width is
 > "shrink-to-fit"). Instead their auto width is "greedy".
 >
 > > Now I have read up on how both margin and padding add pixels to the
 > > element's basic dimensions. but if that's the case, how on earth can
 > > one create the effect of INNER margins or padding, like how it works
 > > for tables??
 >
 > You can't although there are some proposed CSS3 properties (things like
 > box-sizing: border-box) but most of the time you don't need to. Just
 > don't set widths on divs at all and they will slot into their containers
 > perfectly.
 [Back to original message] |