tags:

views:

113

answers:

6

I have a page design with a menu as follows:

Cat1    |     Cat2    |    Cat 3    |    Cat 4

When I hover the word Cat2, The bgcolor of the whole box of Cat2 changes to blue color. Also, whole cell needs to be clickable and linked to other page.

I can do that without having the symbol "|" by changing the bgcolor of the table cell and making width of the "a tag" to 100% and height of "a tag" to 30px. But I can't figure the way to add the delimiter symbol "|" in it.

Does anyone have any ideas about that?

+2  A: 

Put a border-left in CSS? Or does it need to be a literal bar character?

Chuck
A: 

You don't need to use tables, CSS is your friend for this kind of thing!

Bare with me I am not a web designer and my html/css skills are a little rusty, but is something like this what you want?

<html>

<head>

<style type="text/css">
#menu {
text-align: center;
}
#menu a {
text-decoration: none;
padding: 5px 40px;
}
#menu a:hover {
background-color: blue;
color: white;
}
</style>

</head>

<body>

<div id="menu">
<a href="#">Cat 1</a> |
<a href="#">Cat 2</a> |
<a href="#">Cat 3</a> |
<a href="#">Cat 4</a>
</div>

</body>


</html>
John T
+1  A: 

You can use adjacent sibling selectors in CSS, by applying styles to elements based on the elements which immediately precede them you can create the menu dividers.

.menu a {
    text-decoration: none;
    padding: 10px;
}
.menu a + a {
    border-left:solid 1px black;
}

By using this approach you can easily apply this styling to any of your menus by assigning class="menu".

<div class="menu">
    <a href="#">Questions</a>  
    <a href="#">Tags</a> 
    <a href="#">Users</a> 
    <a href="#">Badges</a>
    <a href="#">Unanswered</a>
</div>
Phaedrus
A: 

Let me clarify something.

Chuck

Put a border-left in CSS? Or does it need to be a literal bar character?

It needs to be a literal bar character "|" or a shorter border. The border created by CSS is too long.

John T

I need the blue bgcolor to take up the whole box. When I hover the "Cat2", the left and right "bar" delimiter should disappear. This is what I want to do.

Billy
A: 

Navigation menus should be semantically marked up as lists. Using an unordered list is a very common practice for a menu such as this. See this example on Listamatic for a foundation to biuld from. To get the background color to be larger than the text you will simply need to add padding around the <a> tag.

cowgod
+1  A: 

This meets all the requirements sans one; That the vertical bar must be shorter than the height of the link.

It may be easiest to achieve this with a background image on the < a > rather than using borders or pipes (|).

I did try something with spans inside the links, which would be shorter than the full height of the A, but I couldnt get it rendering cleanly.

You could also add pipes into the HTML itself, inside a span, and hide them on hover.

I know this wont work properly in all browsers, but hacks and workarounds are extra. :P

EDIT:: I added @Fistandantilus' adjacent selectors to this. makes for cleaner HTML.

       <html>
    <head>
        <title>Menu Test</title>


    <style type="text/css" media="screen">
        ul.menu { 
            display:block;
            margin:0; 
            padding:0;
            height:30px;
        }
        ul.menu li {
            display:block;
            width:100px;
            height:30px;
            float:left;

        }        

        ul.menu li a{
            width:100%;
            height:30px;
            line-height:30px;
            display:block;
            text-align:center;
            border-left:1px solid transparent;
        }
        ul.menu li + li a { 
            border-left:1px solid #000;
        }

        ul.menu li a:hover {
            background-color:#0f0;
            border-left:1px solid transparent;
        }
        ul.menu li:hover + li>a  {
            border-left:1px solid transparent;

        }



    </style>
    </head>


    <body>
        <ul class="menu">
            <li><a href ="#">item</a></li>
            <li><a href ="#">item</a></li>
            <li><a href ="#">item</a></li>
            <li><a href ="#">item</a></li>
            <li><a href ="#">item</a></li>
            <li><a href ="#">item</a></li>
            <li><a href ="#">item</a></li>

        </ul>
    </body>
</html>
garrow