c5- Making a 3 column joomla theme for your website PDF Print E-mail

Tutorial 5: Making a 3 column joomla theme for your website

Reprinted with permission from Compass Design: Valid W3C joomla template designs for your website

In this joomla tutorial, we will look at a 3 column theme for your joomla website. Most joomla websites use 3 columns and having the theme start with that is a good foundation. Then later we can hide side columns if there is no content in them for that page.

Let's face it, making a joomla theme with tables is easy. That's why we all did it (may we hang our heads in shame). Achieving the same using CSS is much harder. The learning curve is steep and there are lots of issues with how browsers interpret the CSS. We mentioned this some in our joomla tutorial: Joomla, doctype and the blank joomla template.

I am going to move quickly on to the actual layout possibilities, but I recommend reading at least one "beginners guide to CSS" if new to it. Here are a few suggestions:

Kevin Hale's - An Overview of Current CSS Layout Techniques
htmldog's CSS Beginner's Guide
Mulder's Stylesheets Tutorial
yourhtmlsource.com

Ok, so now we have done some bedtime reading, or knew some of CSS to start, its time to look at our layout choices. Here is a decent list of all the CSS template /CSS themes I have come across:

Although its worth taking a while to look some of these over. This list is more of a resource you can bookmark and come back to later. You could use any of them to make a joomla website.

A Three Column Joomla Theme through CSS

After reading through any of these CSS guides above, or know a little youself, you will know that there are a number of ways to layout a page. Now, for those with a little CSS background already, you might want to wander over to csscreator.com; http://www.csscreator.com/version2/pagelayout.php. Its a great tool where you can make an assortment of layouts and it will generate the CSS for you, don't leave home without it!

However, for the purposes of this joomla tutorial, we are going to be using a different layout technique (csscreator uses floats), that being absolute positioning. I think that using this CSS is perhaps the easiest model to understand for beginners. Quite simply you specifiy exactly where the "box" of content will be on the page. So for example:

#leftcontent {
position:absolute;
top:20px;
left:50px;
width:200px;
}

will make a box that is 200px wide, and starts 20px from the top and 50px from the left. Now, 50 pixels from what I hear you ask. Well, there is a trick here, normally it will be 50 pixels from the top of the viewport (browser window). However, if the parent selector (the box the leftcontent box is in) is also positioned, then the leftcontent style will be relative to THAT. OK, you can go grab another beer/chai/sherbet, that made no sense to me either! Let's add another style and draw a couple of pictures...

This will be the parent box:

#wrapper {
position:relative;
width:560px;
margin: 50px auto;
}

If curious, we have changed the type of positioning from absolute to relative (there is also fixed). We are getting into what is called "document" flow and how elements effect other elements. Read any of the layouts above and you will find discussions on this. OK, let's use this html as out first example:

<div id="wrapper">
Text in wrapper, blah, ipsum stuff
</div>

<div id="leftcontent">
Leftcontent text, blah and domini and what is the url to generate that random latin?
</div>

Based on our two CSS rules above, this would look like:

click to enlarge
click to enlarge

OK, not much use. Now let's put the leftcolumn div inside the wrapper (hey, why do you think we called it "wrapper"?)

<div id="wrapper">
wrapper text, blah, blah and ipsum stuff
<div id="leftcontent">
Text in leftcontent, blah, blah and ipsum domini and what is the url to generate that random latin
</div>
</div> <!-- End of the wrapper div-->

Now it should look like this:

click to enlarge
click to enlarge

Much better. Now the text is all ontop of itself, but we don't need to worry about that at the moment. We can now look at the CSS we will use for our page. Note this gets put in a seperate CSS file called layout.css, which is then imported into template_css.css. I tend to seperate layout from typography in design, then put together for production. One reason is to try and reduce browser errors. Many of these errors are when you try and combine positioning with padding and/or size. Try to avoid applying padding/borders and a fixed width to an element. By putting all my positioning in this sheet and all my padding and borders in another, it forces me to do this (I combine the sheets later). Steps like this make validating your joomla website much easier.

So, with that bit of explanation, here is our 3 column joomla theme:

/* Basic 3 column joomla theme*/
body {
margin:10px 10px 0px 10px;
padding:0px;
}
#leftcontent {
position: absolute;
left:10px;
top:100px;
width:200px;
background-color:#fff;
border:1px solid #000;
}
#centercontent {
background-color:#fff;
margin-left: 211px; /*1 more than 210 because we have to count the border*/
margin-right:211px;
margin-top:7px; /* Margin here to line up center content with side columns */
border:1px solid #000;
}
#rightcontent {
position: absolute;
right:10px;
top:100px;
width:200px;
background-color:#fff;
border:1px solid #000;
}

An adpatation of a layout used a few places round the web, you can read more about it at http://glish.com/css/7.asp. Note we have dropped a large amount of the CSS to make it simpler and because we are not going to be supporting IE5.X with this site.

Its not *quite* simple absolute positioning (you didn't think it would be that easy did you?). The leftcontent and rightcontent is positioned as we just saw. But the center content seems to have no positioning at all. What gives? Well, absolutely positioned elements are taken "out of the document flow". This means other content will just get placed as though these absolute elements were not there. We saw this in our example above when our text overlapped. We are doing the same thing here, but have been crafty by using left and right margins for the centercontent the same width as the left and right columns. This means that the center column content will squeeze in between the two side columns even though it doesn't know they are there.

Right, so its live site design time (drum roll). Remember, our index.php file currently looks like this:

<body>
<?php echo $mosConfig_sitename; ?>
<?php mospathway() ?>
<?php mosLoadModules('top');?>
<?php mosLoadModules('left');?>
<?php mosMainBody(); ?>
<?php mosLoadModules('right');?>
<?php mosLoadModules('bottom');?>
<?php include_once('includes/footer.php'); ?>
</body>
</html>

Now we will put in some positioning with our new CSS:

<body>
<?php echo $mosConfig_sitename; ?>
<?php mospathway() ?>
<?php mosLoadModules('top');?>

<div id="leftcontent">
<?php mosLoadModules('left');?>
</div>

<div id="centercontent">
<?php mosMainBody(); ?>
</div>

<div id="rightcontent">
<?php mosLoadModules('right');?>
</div>

<?php mosLoadModules('bottom');?>
<?php include_once('includes/footer.php'); ?>
</body>

OK, so now we have a 3 column joomla theme, not bad. Let's take a quick look; livesite.compassdesigns.net . Well, our columns are there, and the right places.Resizing your browser you will see that the size of the middle column adjusts. Commonly called a fluid CSS layout. Taking a quick look in Internet Explorer 6 we see some weirdness going on with the bottom of the left column, but hey, weird and IE often occur together in a sentence!

Does it validate?

Yes, we still have a W3C Standards Compliant CSS Joomla Website . OK, I grant you it doesn't look that amazing right now, but hey, that's what next week's installment is for!


Add as favourites (0)

  Be first to comment this article
RSS comments

Write Comment
  • Please keep the topic of messages relevant to the subject of the article.
  • Personal verbal attacks will be deleted.
  • Please don't use comments to plug your web site. Such material will be removed.
  • Just ensure to *Refresh* your browser for a new security code to be displayed prior to clicking on the 'Send' button.
  • Keep in mind that the above process only applies if you simply entered the wrong security code.
Name:
E-mail
Homepage
Title:
Comment:

:) :grin ;) 8) :p
:roll :eek :upset :zzz :sigh
:? :cry :( :x
Code:* Code

Powered by AkoComment Tweaked Special Edition v.1.4.2

 
Tag it:
Delicious
Furl it!
Spurl
Blinkbits
BlinkList
digg
Fark
Reddit
YahooMyWeb
Joomla ezine magazine component extension

Login Form






Lost Password?
No account yet? Register

Top SE queries for this URL

joomla

joomla thmem

joomla theme

joomla hide column right

make a joomla theme

joomla theme builder

hiding right column with wrapper - joomla

joomla theme for software

BUILDING A JOOMLA WEBSITE WITH DIVS

<?php mospathway() ?>

joomla tutorial floating world

div id leftcontent css

blue 3 column joomla theme

enlarge mosMainBody

joomla theme tutorials

Joomla books

Are you secure?

Try BitDefender antivirus scan online for free!

Satisfied?Click below to buy world's best anti virus

Buy Antivirus software
© 2008 TeachMeJoomla
Joomla! is Free Software released under the GNU/GPL License.