Using Class Suffixes

From Joomla! Documentation

Copyedit.png
This Article Needs Your Help

This article is tagged because it NEEDS UPDATING. You can help the Joomla! Documentation Wiki by contributing to it.
More pages that need help similar to this one are here. NOTE-If you feel the need is satistified, please remove this notice.

Reason: updating to J4


Split-icon.png
Split Page into Specific Joomla! Versions - J2.5 and 3.x

It has been suggested that this article or section be split into specific version Namespaces. (Discuss). If version split is not obvious, please allow split request to remain for 1 week pending discussions. Proposed since 2 years ago.

Joomla 1.5Joomla 2.5This tutorial was written for Joomla 1.5, however the differences to Joomla 2.5 are minor.

Stop hand nuvola.svg.png
Warning!

This article is inappropriate for Joomla! 4. See this alternative article: Module and Menu Styles

This tutorial will show you how to use Page, Module, and Menu Class Suffixes in Joomla! to fine-tune the appearance of your site. For the tutorial, we will assume you have a Joomla! Sample site available.

Background[edit]

Joomla! creates HTML pages that use Cascading Style Sheets to control the appearance of the page. This includes things like fonts, colors, margins, and background. The CSS files are part of your template.

When Joomla! creates a page, it creates different CSS classes that are then referenced in the CSS file to specify which style will apply to which parts of the HTML page. These class names are pre-programmed into Joomla!. But Joomla! allows you to modify or add CSS classes by way of the Class Suffix parameters. This lets you fine-tune the appearance of specific pages with no programming and little work. The best way to understand this is to see specific examples.

When Would You Use a Class Suffix?[edit]

Say, for example, that your website contains a number of Section Blog layouts, each for a different Section. If you are happy to have all of these pages styled the same way, then you wouldn't need to use a Page Class Suffix. However, say you want each of these sections styled differently than the others. For example, maybe you want a different background color or image for each different section.

Or say that you want the heading on your home page to look different than the heading on other pages.

In both of these cases, if you modify the styling in your template.css file for the standard CSS classes, it will affect all Menu Items that use these CSS classes. For example, if you change the style for the CSS class componentheading, it will affect all of the Menu Items that use this class.

However, if you add a unique Page Class Suffix to a Menu Item, then Joomla! will create new CSS classes for each individual Menu Item so you can style each one differently.

Page Class Suffix[edit]

Before you start, make sure you have the Joomla! sample website available. Also, make sure the default template is set to rhuk_milkyway (in the Extensions  Template Manager).

How It Works Without a Page Class Suffix[edit]

Before we add a Page Class Suffix, let's see how this pages works without one. In the Frontend, navigate to Example Pages  Section Blog. In your browser, select the option to view the page source code. For example, in Firefox, press Ctrl+U. In Internet Explorer, select View  Source. In Safari, select View  View Source.

Using the Find command, find the first occurrence of the word componentheading. It should look like the following:

<div class="componentheading">

Browse down the file and find the following tags:

<table class="blog" cellpadding="0" cellspacing="0"> 
<table class="contentpaneopen">
<td class="contentheading" width="100%">
<table class="contentpaneopen">

Note: The following screenshots were made using the free Firefox add-in called Firebug. Firebug allows you to quickly see the relationship between the HTML elements in your source and the text and graphics shown on the page. It is a handy tool, and you can get it here. For more information, please watch the free video tutorial on using Firebug with Joomla.

The screenshot below shows you the componentheading class. It is the page title area above the blog article.

Componentheading class firebug.png

This screenshot shows you the entire blog class. This is the outer table into which all of the articles will fit.

Blog class firebug.png

The next screenshot shows you the contentpaneopen class for an article heading. This includes the article title and the PDF, Print, and Email icons to the right.

Contentpaneopen class title firebug.png

This screenshot shows you the contentpaneopen class for the body of the article. This includes the author and date information as well as the actual article text.

Contentpaneopen class article firebug.png

This gives us a good understanding of how Joomla! allows us to style the elements on a Section Blog layout. Joomla! writes out these classes as part of the HTML. And the template contains CSS that provides the styling information for these various elements and classes.

Page Class Suffix (No Space)[edit]

Now that we see how this works without a Page Class Suffix, let's try it with one. In the Backend, navigate to Menus  Example Pages and click on Section Blog. This should display the Menu Item: [Edit] screen for the Section Blog Layout. Click Parameters (System) to show the System Parameters. In the Page Class Suffix field enter the value _myBlogSuffix and click the Save button.

Now, go back to the Frontend and again navigate to Example Pages  Section Blog. Notice right away that we lost the styling for the page and article titles. Let's look closer to see why.

Using the browser Find command, find the first occurrence of _myBlogSuffix. It is in a div tag and looks like this:

<div class="componentheading_myBlogSuffix">

If you look through the source, you should also see the following classes: blog_myBlogSuffix, contentpaneopen_myBlogSuffix, and contentheading_myBlogSuffix.

By adding the Page Class Suffix, we changed all of these class names. That means that special styling in the CSS file that refers to the base class names (like componentheading, blog, and so on) will not be applied, since those classes no longer exist on the page.

Now, you can fix this problem by editing your templates CSS file to add the same styling for the new classes (for example, componentheading_myBlogSuffix). But there is a much easier way to do this -- simply by adding a leading space to the parameter.

Page Class Suffix (With a Leading Space)[edit]

Again in the back end, go back to Menus  Example Pages  Section Blog. We're going to change the value of the Page Class Suffix. This time we're going to enter in a leading space and call it <space> + "myBlogClass", as shown below.

Page class suffix space.png

Now, go back to the Frontend and re-display the Example Pages  Section Blog. Notice that our styling is back! Let's look at the HTML source to see what is going on. Open the source and find the first occurrence of myBlogClass. It should like this:

<div class="componentheading myBlogClass">

Because we put a leading space in the Page Class Suffix, we created a second class instead of changing the name of the first class (which is allowed and supported by all modern browsers). We didn't break any of the existing CSS styling for this page. (One warning: make sure the new class name is different than any of the other class names used on the page. Otherwise, we might get styling we don't want.)

Add CSS Styling to New Class[edit]

At this point, we've created a new CSS class in the HTML to allow for some new styling. Now we need to use this new class to actually change the look of our page. The first thing we need to do is find the applicable CSS file. In this case, it is <joomla_root>/templates/rhuk_milkyway/css/template.css.

Let's say we want to add a background color, but only to this specific Section Blog. (Remember, if we wanted to just change all of the Section Blog pages in our site, we could just change the CSS styling for the base classes, such as componentheading or blog.) We need to do is figure out which area (componentheading, blog, or contentpaneopen) we want to style. Say we just wanted to style the componentheading area.

First, let's use the CSS selector div.myBlogClass and add the following code to the end of our CSS file:

/* Custom Styling */
div.myBlogClass {
	background-color: #FFE4E1; /* mistyrose */
}

The result is that the page heading now has the background color, as shown below.

Div styling example.png

Now this works fine in our example, because the other classes are defined for table tags and not div tags. But it is normally better to be more specific in our style selector by styling only those elements that have both the desired base class and the new class. For example, let's replace the code above with the following code:

/* Custom Styling */
.blog.myBlogClass {
	background-color: #FAFAD2; /* lightgoldenrod */
}

This specifies that the new style will only be applied to elements that have both the blog and the myBlogClass styles. This gives us the background color over the entire blog area, as shown below.

Blog styling example.png

The great thing about creating a new class (with the leading space trick) is that we don't need to copy all of the existing styling for the base classes. We can just focus on the new styling that we want.

Now in this example, we focused on the Section Blog layout. The class names for different components might be different, but the process will be the same. The table below shows some common Joomla! layouts and a list of class names that can have Page Class Suffixes added.

Layout CSS Class Names Used
Article Layout componentheading, contentpaneopen, contentheading, contentpagetitle
Category Blog, Frontpage Blog, Section Blog componentheading, contentpagetitle, blog, contentpaneopen, contentheading, readon, blog_more
Category List, Section List componentheading, contentpane, contentdescription
Contact Category componentheading, contentpane, contentdescription, sectiontablefooter, sectiontableheader, category
Contact Layout componentheading, contentpaneopen, contentheading

To sum up what we have learned about using the Page Class Suffix parameter:

  1. Use a leading space to create a new CSS class. This way you don't have to worry about re-doing or breaking existing CSS styles.
  2. Look in the HTML source code to find the locations of the base and new classes.
  3. If desired, use Firebug to see which HTML elements correspond to which areas on the page.
  4. Add custom styling to the end of the template.css file, specifying both the name of the desired base class and the custom class in the form .baseclass.customclass as in the example above.

Module Class Suffix[edit]

The Module Class Suffix parameter works in the same way as the Page Class Suffix. Let's go through an example using the Latest News module.

In the Backend, navigate to Extensions  Module Manager and find the Latest News module. Click on it to open it for editing, and enter <space> + "customLatestClass" in the Module Class Suffix parameter field, as shown below:

Module class suffix space.png

Now, navigate to the home page in the Frontend and view the page source code. The screenshot below was made using the Firebug add-in tool. It shows the home page and the HTML and styling for the customised Latest News module.

Latest news custom class.png

In the upper part of the screen, outlined in light blue, is the div element for the module. Below, in the HTML window, we see the HTML as follows:

<div class="moduletable customLatestClass">

and then

<ul class="latestnews customLatestClass">

The moduletable and latestnews classes are created automatically. The new class, customLatestNews was created because we started the Module Class Suffix parameter with a leading space.

Now let's use our new class to add some custom styling. Again, go to the end of the templates/rhuk_milkyway/css/template.css file and add the following code:

div.customLatestClass {
	background-color: #FFFFD2;
}

div.customLatestClass h3, ul.customLatestClass, ul.customLatestClass a {
	color: #8B4513;
}

Save the file and re-display the home page. It should look like the screenshot below:

Latest news styled.png

The CSS selector div.customLatestClass sets the background color for the entire area. The three selectors div.customLatestClass h3, ul.customLatestClass, ul.customLatestClass a select the font color for the h3 heading, the bullets (ul tag), and the a tag, respectively. Note that, if we only wanted to style the ul element, we wouldn't need a Module Class Suffix unless we had more than one Latest News module. Instead, we could just have defined the CSS using the standard latestnews class.

Be Careful Not to Break Existing CSS Styling[edit]

In menus, we need to be careful not to break existing CSS styling.

Let's look at how this works. In the Backend, navigate to Extensions  Module Manager and open the Main Menu for editing. Click on the Advanced Parameters. Notice that the Module Class Suffix is set to _menu, without a leading space.

Now go to the Home page in the Frontend and view the source code (or use Firebug). The screenshot below shows the HTML for the Main Menu.

Main menu div.png

Notice that the class is called module_menu because of the Module Class Suffix. Also, notice that there is special styling in the template.css and blue.css files for the module_menu class. For example, there is a background image that provides part of the blue border around the menu.

We can confirm this by returning to the Backend and changing the Module Class Suffix to blank. Return to the Home page and refresh. Now the Main Menu will show without the special module_menu styling, as shown below:

Main menu no suffix.png

This shows an important point. Existing modules, especially menus, may already have CSS styling that depends on Module Class Suffixes. We need to be careful when making changes.

What if we still wanted to add some special styling just to the Main Menu? One way is to get tricky and add a second CSS class to the existing suffix. To see this, return to the Module Manager in the Backend and open the Main Menu for editing. This time, in the Module Class suffix, enter _menu, a space, and then myMenuClass, as shown below:

Module class suffix tricky.png

Now, add the following code to the end of the templates/rhuk_milkyway/css/template.css file:

div.myNewClass {
	font-size: 1.2em;
	}

Go back to the Home page and notice that now the font in the Main Menu is larger, as shown below.

Main menu custom style.png

If we open Firebug, we can see what the HTML and CSS looks like, as shown below:

Firebug custom menu class.png

By putting a space between the _menu and myNewClass, we added the new class into the HTML. Then, by selecting the new class in the CSS file, we changed the font size.

Menu Class Suffix and Menu Tag ID[edit]

All core modules allow you to enter a Module Class Suffix, as discussed above. Menu modules have two additional parameters: Menu Class Suffix and Menu Tag ID. Let's look at what these parameters do.

Menu Class Suffix[edit]

The Menu Class Suffix inserts an extra suffix in the class for the unordered list that builds up the menu. If unedited, the class is menu. If adding _myMenuClass under Advanced Parameters  Menu Class Suffix, the new tag will be menu_myMenuClass.

(This behaviour is only for the Menu Style List. If choosing Legacy - Vertical or Legacy - Horizontal, the class suffix will be added to the links in the table; this suffix will then be mainlevel_myMenuClass. When choosing the Legacy Flat List, the suffix will be added to the links (as on the two other Legacy lists), but it will also be added to the ul tag, but as an id rather than a class; the id will be mainlevel_myMenuClass.)

Menu Tag ID Parameter[edit]

Now, lets look at the Menu Tag ID parameter. Navigate to the Backend, open the Main Menu module for editing, and enter myTagID in the Menu Tag ID parameter.

Add the following code to the end of the templates/rhuk_milkyway/css/template.css file:

#myTagID {
	list-style-type: square;
}

Now, re-display the Home page to see the change. The bullets for the Main Menu should now appear as squares, as shown below:

Main menu square bullets.png

Finally, we can look at the HTML and CSS in Firebug, as shown below.

Menu tag id code.png

Joomla! has added the attribute id="myTagID" to the ul tag for the Main Menu. This allowed us to change the style for this ID. Note that, since this is an id attribute, we use the CSS selector #myTagID (with a # instead of a .).

Conclusion[edit]

The Class Suffix and Menu Tag ID parameters allow you to fine-tune the CSS styling of your web site. By using a leading space in the suffix name, we can create a new class. This is normally the preferred method, since, as long as the new class name does not conflict with an existing class, no existing styling will be broken.