Justin Tadlock

How To Create Tabs Using jQuery

Using jQuery to create custom tabs for your sidebar

Tabbed sidebar elements are in. Why bother making users scroll down the page, when they can simply click a tab to quickly access various parts of your site? Another popular thing is jQuery, “The Write Less, Do More, JavaScript Library.”

I’ve gotten a lot of emails asking how I created tabs with jQuery in the last couple of days — since I released the Visionary theme. It’s actually not all that hard (I’m not a JavaScript programmer), and I’m going to run you through a tutorial.

This tutorial is primarily based off WordPress, but can easily be ported anywhere else.

First, you’ll need four files. You need “sidebar.php,” “header.php,” “style.css,” and “tabs.js” (you’ll have to create this file). Then, you need to download a copy of jQuery. This file will be named “jquery.js.” Add it to your theme directory along with each of these other files.

Pulling the jQuery into your blog:

Open “header.php” and add these lines between the tags:

<script type="text/javascript" src="<?php echo bloginfo(stylesheet_directory) .'/jquery.js'; ?>"></script>
<script type="text/javascript" src="<?php echo bloginfo(stylesheet_directory) .'/tabs.js'; ?>"></script>

Now, you can close that file. You won’t need it anymore. All this does is include jQuery and our custom script on every page of your site. You can now use them anywhere.

Creating the sidebar:

First, we need to open “sidebar.php” and input this code. This is the XHTML we’re using. I’m leaving the content inside the tabs open. Do what you want with it. You shouldn’t change the specific classes used because we’ll need them when using jQuery. If you change them here, you’ll have to change them in your “tabs.js” file.

<div class="tabbed">
    <!-- The tabs -->
    <ul class="tabs">
    <li class="t1"><a class="t1 tab" title="<?php _e('Tab 1'); ?>"><?php _e('Tab 1'); ?></a></li>
    <li class="t2"><a class="t2 tab" title="<?php _e('Tab 2'); ?>"><?php _e('Tab 2'); ?></a></li>
    <li class="t3"><a class="t3 tab" title="<?php _e('Tab 3'); ?>"><?php _e('Tab 3'); ?></a></li>
    <li class="t4"><a class="t4 tab" title="<?php _e('Tab 4'); ?>"><?php _e('Tab 4'); ?></a></li>
    </ul>

    <!-- tab 1 -->
    <div class="t1">
    <!-- Put what you want in here.  For the sake of this tutorial, we'll make a list.  -->
    <ul>
        <li>List item</li>
        <li>List item</li>
        <li>List item</li>
        <li>List item</li>
        <li>List item</li>
    </ul>
    </div>

    <!-- tab 2 -->
    <div class="t2">
    <!-- Or, we could put a paragraph -->
        <p>This is a paragraph about the jQuery tabs tutorial.</p>
    </div>

    <!-- tab 3 -->
    <div class="t3">
    <!-- Or, we could add a div -->
        <div>Something needs to go in here!</div>
    </div>

    <!-- tab 4 -->
    <div class="t4">
    <!-- Why not put a few images in here? -->
        <p>
            <img src="image.gif" alt="Sample" />
            <img src="image.gif" alt="Sample" />
            <img src="image.gif" alt="Sample" />
        </p>
    </div>

</div><!-- tabbed -->

Now, our sidebar is set up. You can close “sidebar.php.”

The backbone, jQuery:

Open, or create, the file “tabs.js” for this part of the tutorial. This is the heart of our script. I’m sure there’s a better way to do this, but since so many people have requested this, they’ll have to stick with my version I guess. Copy and paste this code into your file.

Updated: Thanks to Karl from Learning jQuery for providing better code for this.

$(document).ready(function() {
// setting the tabs in the sidebar hide and show, setting the current tab
    $('div.tabbed div').hide();
    $('div.t1').show();
    $('div.tabbed ul.tabs li.t1 a').addClass('tab-current');

// SIDEBAR TABS
$('div.tabbed ul li a').click(function(){
    var thisClass = this.className.slice(0,2);
    $('div.tabbed div').hide();
    $('div.' + thisClass).show();
    $('div.tabbed ul.tabs li a').removeClass('tab-current');
    $(this).addClass('tab-current');
    });
});

You can close this file once you’re finished pasting the above code in.

Styling the sidebar:

Since I can’t decide how to style your sidebar for you, I’ll just leave you with things styled enough to get your started. Of course, you can do anything you want with styling. The tabbed sidebar has a lot of different classes that you can make use of. Or, you can even add your own. Use this code in your “style.css” file. Make adjustments to suit your needs.

/* Contains the entire tabbed section */
.tabbed {
    }

/* List of tabs */.tabbed ul.tabs {
    float: left;
    display: inline;
    width: 100%;
    margin: 0;
    padding: 0;
    }
.tabbed ul.tabs li {
    list-style: none;
    float: left;
    margin: 0;
    padding: 0;
    }
.tabbed ul.tabs li a {
    overflow: hidden;
    display: block;
    margin: 0 2px 0 0;
    padding: 10px 12px;
    }
.tabbed ul.tabs li a:hover {
    }

/* The current selected tab */
.tabbed ul.tabs li a.tab-current {
    }

/* The content shown when a tab is selected */
.tabbed div {
    float: left;
    display: block;
    width: 100%;
    }

/* Set the CSS to make sure the other tabs' content isn't shown other than the first */
.tabbed div.t2, .tabbed div.t3, .tabbed div.t4 {
    display: none;
    }

/* Content for inside your tabs' divs */
.tabbed div ul {
    }
.tabbed div p {
    }
.tabbed div div {
    }

There you have it. It seems like a good bit of code, but it really isn’t too bad. Most of the stuff you won’t have to touch too often. Just get everything set up and style it.

I hope this helps, and if you find any bugs, make sure to report them.