Web developers are generally accustomed to use pipes (|) as separators between the items of a navigation menu. Generally speaking, this approach is due to the fact that using CSS borders doesn't allow for a complete control over these vertical bars, because there's no CSS property that controls the vertical height of a border. More specifically, a CSS border will be always as tall as the overall height of its box. Further, in order to make some room for the inner contents of a box, the only property you can use is actually the padding
property.
For that reasons, most developers use a pipe as a separator. However, the major drawback to this approach is that you have to manually insert additional markup to control these newly inserted separator, something like:
<span class="separator">|</span>
This kind of markup is non-semantical so it's better to avoid it. Instead, let's use jQuery to accomplish this task. To start with, here's a basic navigation menu:
<ul id="navigation"> <li><a href="#">Home</a></li> <li><a href="#">Articles</a></li> <li><a href="#">About</a></li> <li><a href="#">Contact</a></li> </ul>
with some styles attached to it:
#navigation { margin: 0; padding: 0 0 0 0.5em; list-style: none; height: 2em; font-size: 1.3em; background: #777; color: #fff; } #navigation li { margin-right: 0.5em; height: 100%; float: left; } #navigation a { float: left; height: 100%; line-height: 2; padding: 0 0.5em; color: #fff; font-weight: bold; text-decoration: none; } #navigation a:hover { background: #aaa; } #navigation span.separator { float: left; height: 100%; padding-left: 4px; line-height: 2em; }
As you can see, we've already provided the required styles for our separator. Now it's time to insert them:
$(document).ready(function() { $('#navigation li').not('#navigation li:last-child').each(function() { var separator = $('<span class="separator"></span>').text('|'); separator.appendTo($(this)); }); });
All our menu items will have a separator, except the last one. You can see the result below.