you may not have noticed, but even in firefox, on a 1024x768 res monitor display, if i view any sidebar such as bookmarks or history the page with columns display goes to he(ck)ll. . .
every browser has their quirks (see quirksmode. org) -
i've seen so much commentary on IE//Firefox it makes me laugh - things like with blog php comments such as:
"we use tables because IE does not render div's properly"
and in another different blog:
"we use div's because IE does not render tables properly"
chances are although you
think your page looks and acts the way you want it to in firefox (consider what i mentioned 'bout viewing sidebars), it is firefox that is rendering it wrong - this is usually the case - according to standards of how CSS and HTML should be displayed, firefox falls short of the mark time and time again, much moreso than any other major browser (i kid you not) - when you hear otherwise it basically means that someone's CSS and/or HTML are not up to standards. . .
AND believe me - i am not bias - the above statement comes from many years of objective observation and testing - hey, if it was the other way around, i'd tell you so. . . . .
-------------------------
first of all, in the site-hidecols. css, you're using the CSS property "visibility" to control the side column "toggle" when what you really want to be using is the "display" property. . .
visibility - preserves area of element even when 'hidden'
display - does NOT preserve area of element when NOT displayed
so instead of:
#left {
visibility: hidden;
width: 0px;
height: 1px; /* Hack for IE, otherwise it stretches the page vertically :( */
overflow: hidden;
}
it should be:
#left {
display: none;
overflow: hidden;
}
----- BUT. . . - because you want to toggle AND below i supply an easier method to toggle - within the HTML 'dispay' should be an inline style (style="display: none;"):
<div id="left" style="display: none;">
or leave out the inline style if you want the page to load initially with columns showing. . .
same applies for #right of course.
while on the topic of this toggle - it can be accomplished better and more effieciently. . . .
your toggle link calls the function toggleStyleSheet( ) from siteFunctions. js that in turn calls getActiveStyleSheet( ) and setActiveStyleSheet( ) - each (EACH!) of those functions then calls getElementsByTagName( ) getAttribute( ) and indexOf( ) - etc. etc. - and a bunch of other stuff in there. . .
consider on top of that you are juggling two extra seperate CSS' < this is why on slower connections the columns appear first, because the page waits till the all CSS gets loaded to make them dissappear - so when the page first loads the effect is >there they are--FLASH--now they're gone< not so good.
bottom line - this is what you really should (or could) be doing. . . .
--- instead of calling the function toggleStyleSheet( ) create a new function to call, let's name it toggleColumns( ), and pass the elements to act on via its parameters - so on your HTML page it should look like this:
<a href="#" onclick="toggleColumns(left,right);">Toggle side columns</a>
--- the function toggleColumns( ) in your js file should look like this:
function toggleColumns(lefty,righty) {
//display the columns if not displayed or hide if displayed
if (lefty.style.display=="none" && righty.style.display=="none") {
lefty.style.display="";
righty.style.display="";
else{
lefty.style.display="none";
righty.style.display="none";
}
}
--- so then you can delete the following from your HTML's head:
<!-- Default stylesheet - Show left and right columns -->
<link title="Show side columns" rel="alternate stylesheet" href="http://www.daniel15.com/site-showcols.css" type="text/css" />
<!-- Default stylesheet - Hide left and right columns -->
<link title="Hide side columns" rel="stylesheet" href="http://www.daniel15.com/site-hidecols.css" type="text/css" />
and you're all done making toggle easy. . . .
another note: technically - in your generated HTML you have a double slash where i THINK there should only be one one (unless you have a no-named folder):
<link rel="stylesheet" href="hxxp: //www. daniel15. com
//site-style. css" type="text/css" />
and
<script language="JavaScript" type="text/javascript" src="hxxp: //www. daniel15. com
//siteFunctions. js"></script>
-------------------------
now on to your question (sorry for getting sidetracked)
remember many years ago when i said how some designers comment "we use tables because IE does not render div's properly"
and others comment "we use div's because IE does not render tables properly"? well, done properly IE displays both correctly (of course) - the main thing is to know what situation calls for what format - since you want more of a grid effect what you really want is a table instead of div's - you problem really is that you're trying to get the effect of a table out of div's.
so within the gererated HTML you can get rid of 4 divs (bodyContainer, left, right, body) and place the following table:
<table id="bodyContainer" cellpadding="0" cellspacing="0" border="0">
<tr valign="top">
<td id="left" width="145" style="display: none;">
[ left column content ]
</td>
<td id="body">
[ main content - including the toggle call as above ]
<td id="right" width="139" style="display: none;">
[ right column content ]
</td>
</tr>
</table>
now you're almost done - only thing left is to get rid of what looks like some CSS hacks (oh and unfortunately then one more thing). . .
get this area of site-style. css to look like this:
/* Left column */
#left {
padding: 5px;
width: 145px;
font-size: 8pt;
}
/* Right column */
#right {
padding: 5px;
width: 139px;
font-size: 8pt;
}
/* Main body text */
#body {
padding: 5px 20px 5px 20px;
background-color: rgb(255, 255, 255);
border-left: 1px solid rgb(180, 180, 180);
border-right: 1px solid rgb(180, 180, 180);
border-bottom: 1px solid rgb(180, 180, 180);
}
beyond a few deleted properties, i was not sure padding: 5px 20px; was correct, so i did what i know is correct - also the width property might be optional for such attributes are now in my table example.
now. . .
unfortunately then one more thing
i noticed the left column had a url that in length was/is longer than a width of 145 and pushing the table cell too wide - i tried (just a little bit) to get overflow: hidden; to work on that table cell with no luck - i suppose either you could turn it into a text link (which by default would then wrap) or, hate to say it, within the left table cell contain all in a div with the overflow: hidden; property --- ug. . . .
-------------------------
conclusion
much easier to design for IE or another browser that displays HTML and CSS as standards say such is to be displayed, then hack for firefox, than it is to design for firefox and then hack for IE and such. . .
know when div's are called for and know when a table is called for (side note: i could see right away this called for a table but for your benefit first started in on trying to get it to work properly with the divs > ug - i gave up).
other notes (IMHO):
looking at your design i would just use the left column and get rid of displaying redundant info - in the left column you can combine Latest Blog Posts and Most Popular Topics - everything else seems redundant.
finally - as i said, every browser has its quirks - and this might be just in IE - but the 'popups' (sort'ta "snap" things) were slipping under the form fields - some years back at DevGuru (devguru. com - sorry i can't be more specific), i saw an article on how to get 'popups' to properly cover form input fields - i just looked at devguru and could not find it there easily - so i googled and without looking much further i found what seems to be some infior solutions but solutions non-the-less > hxxp://tanny. ica. com/ICA/TKO/tkoblog. nsf/archive?openview&title=Web+Development&type=cat&cat=Web+Development < (i guess you'll have to fix the url) perhaps you can google some better solutions. . .