CSS Help with Superfish Nav-bar Menu

Here is the menu I am working on:
http://linford.us/common/header.php, (based on the Superfish, Examples / nav-bar style).

If you hover over Web Solutions / Dropdown Test, You will see that the vertical dropdown CSS is currently screwed up.

I would like the dropdown to look like is this (Hover over Dropdown):
Hosting Square

There are two issues:
1 - How do I get rid of the pipes on the vertical dropdown without messing with the pipes on the horizontal dropline?

2 - How to create the border around the vertical dropdown, but not on the horizontal dropline?

Any help would be greatly appreciated

Here are the file locations:
http://linford.us/common/header.php
http://linford.us/common/stylesheets/template.css
http://linford.us/common/stylesheets/superfish.css
http://linford.us/common/stylesheets/superfish-navbar.css

Hi,

I’m not quite sure what you are trying to do as you seem to be using the horizontal dropline code.

So I assume that you want a dropline first and then a vertical menu hanging off the dropline?

The first thing to do is to create another nested list at that point.

e.g.


<li id="email"><a href="/email/index.php">Email</a>
    <ul>
        <li id="deluxe"><a href="/email/deluxe.php">Deluxe Email</a></li>
        <li id="business"><a href="/email/business.php">Business Email</a></li>
        <li id="mobile"><a class="last" href="/email/mobile.php">Mobile Email</a></li>
    </ul>
</li>
<li><a id="nav-solutions" href="/5/index.php">Web Solutions</a>
    <ul>
       [B] <li><a class="subsub" href="../2/domains2.php">Dropdown Test</a>
            <ul>
                <li><a href="#">Test vertical menu</a></li>
                <li><a href="#">Test vertical menu</a></li>
                <li><a href="#">Test vertical menu</a></li>
                <li><a href="#">Test vertical menu</a></li>
                <li><a href="#">Test vertical menu</a></li>
            </ul>
        </li>[/B]
        <li><a href="design/ecommerce.php">eCommerce Websites</a></li>
        <li class="lastli"><a class="last" href="security/index.php">SSL Certificates</a></li>
    </ul>
</li>



You can now target that by going one level deeper with your styles.



.sf-menu li li:hover a.subsub{
    position:relative;
    z-index:999;
    border:1px solid #f06e00;
    border-top:none;
    border-bottom:1px solid #eee;
    padding-left:6px;
    background:#eee;
}
.sf-menu li:hover ul li li a {
    border-right:none;
    z-index:1;
}
.sf-navbar li li{
    position:relative;
}
.sf-navbar ul li li{
    float: none;
    display:block;
    margin:0;
    background:#eee;
}
.sf-navbar ul li li a {
    float:none;
    display:block;
    position:relative;
    border-bottom:1px solid #ccc;
    text-align:left!important;
}
.sf-navbar li ul ul {
    border:1px solid #f06e00;
    width:12em;
    background:#eee;
    padding:5px;
    -webkit-border-top-right-radius: 5px;
    -webkit-border-bottom-right-radius: 5px;
    -webkit-border-bottom-left-radius: 5px;
    -moz-border-radius-topright: 5px;
    -moz-border-radius-bottomright: 5px;
    -moz-border-radius-bottomleft: 5px;
    border-top-right-radius: 5px;
    border-bottom-right-radius: 5px;
    border-bottom-left-radius: 5px;
    z-index:99!important;
    top:1.95em!important;
}


That’s just tough but gives you the general look of what I think you wanted.

Usually I build my menus before adding the superfish code to them to make sure they are working properly and then layer superfish on top afterwards.

That worked GREAT!!
Any idea how I would change the width of the dropdown? I was hoping to either narrow it a bit, or make it the same width as the element it is dropping down from.

One more question:
The CSS below is used to adds arrows to indicate a dropline or dropdown menu, and it applies to all levels of the menu. I would like to be able to use different arrows for different levels (white arrows with the top line, grey arrows with the second line because the background is white, etc).
How can I add different arrows to each menu level?


/*** arrows **/
.sf-menu a.sf-with-ul {
    padding-right:     2.25em;
    min-width:        1px; /* trigger IE7 hasLayout so spans position accurately */
    
}
.sf-sub-indicator {
    position:        absolute;
    display:        block;
    right:            .75em;
    top:            1.05em; /* IE6 only */
    width:            10px;
    height:            10px;
    text-indent:     -999em;
    overflow:        hidden;
    background:        url('/images/arrows-838383.png') no-repeat -10px -100px; /* 8-bit indexed alpha png. IE6 gets solid image only */
}
a > .sf-sub-indicator {  /* give all except IE6 the correct values */
    top:            .8em;
    background-position: 0 -100px; /* use translucent arrow for modern browsers*/
}
/* apply hovers to modern browsers */
a:focus > .sf-sub-indicator,
a:hover > .sf-sub-indicator,
a:active > .sf-sub-indicator,
li:hover > a > .sf-sub-indicator,
li.sfHover > a > .sf-sub-indicator {
    background-position: -10px -100px; /* arrow hovers for modern browsers*/
}

/* point right for anchors in subs */
.sf-menu ul .sf-sub-indicator { background-position:  -10px 0; }
.sf-menu ul a > .sf-sub-indicator { background-position:  0 0; }
/* apply hovers to modern browsers */
.sf-menu ul a:focus > .sf-sub-indicator,
.sf-menu ul a:hover > .sf-sub-indicator,
.sf-menu ul a:active > .sf-sub-indicator,
.sf-menu ul li:hover > a > .sf-sub-indicator,
.sf-menu ul li.sfHover > a > .sf-sub-indicator {
    background-position: -10px 0; /* arrow hovers for modern browsers*/
}

Ok, I got it working, http://linford.us/common/header.php

3 Questions:
1 - How can I control the width of the dropdown (hover over Web Solutions / Dropdown Test)?
Line 50 lets me fix the width (right now at 134px to match the menu item it is dropping from), but is there any way to set it so that the dropdown will match up with the menu item it is dropping from, even if there are dropdown from items that have different widths?

2 - the border bottom is overrunning the length of the box. I can turn the border off by removing line 208, but how do I make the bottom border match the box size?

3 - The CSS below is used to adds arrows to indicate a dropline or dropdown menu, and it applies to all levels of the menu. I would like to be able to use different arrows for different levels (white arrows with the top line, grey arrows with the second line because the background is white, etc).
How can I add different arrows to each menu level?


/*** ESSENTIAL STYLES 
a:visited,a{
color: #fff;
}
***/

.sf-menu, .sf-menu * {
    margin:            0;
    padding:        0;
    list-style:        none;
}
.sf-menu {
    line-height:    1.0;
}
.sf-menu ul {
    position:        absolute;
    top:            -999em;
    width:            10em; /* left offset of submenus need to match (see below) */
}
.sf-menu ul li {
    width:            100%;
}
.sf-menu li:hover {
    visibility:        inherit; /* fixes IE7 'sticky bug' */
}
.sf-menu li {
    float:            left;
    position:        relative;
}

.sf-menu a {
    display:        block;
    position:        relative;
    color:            #fff;
}
.sf-menu li:hover ul,
.sf-menu li.sfHover ul {
    left:            0;
    top:            2.5em; /* match top ul list item height */
    z-index:        99;
}
ul.sf-menu li:hover li ul,
ul.sf-menu li.sfHover li ul {
    top:            -999em;
}
ul.sf-menu li li:hover ul,
ul.sf-menu li li.sfHover ul {
    left:            10em; /* match ul width */
    top:            0;
}
ul.sf-menu li li:hover li ul,
ul.sf-menu li li.sfHover li ul {
    top:            -999em;
}
ul.sf-menu li li li:hover ul,
ul.sf-menu li li li.sfHover ul {
    left:            10em; /* match ul width */
    top:            0;
}

/*** DEMO SKIN ***/
.sf-menu {
    float:            left;
    margin-bottom:    1.1em;
}
.sf-menu a {
    border-left:    1px solid #fff;
    border-top:        1px solid #CFDEFF;
    padding:         1em .5em 1em 1em;
    text-decoration:none;
    text-align:center;
}
.sf-menu li a, .sf-menu li a:visited  { /* visited pseudo selector so IE6 applies text colour*/
    
}

.sf-menu li ul li a{
    color: #000;
    font-weight: bold;
    padding: 7px;
    border-right: 1px solid #e60;
    text-align:center;
}

.sf-menu li ul li a:hover{
    color: #e60;
    }

.ddmenu li ul li a:hover{
    color: #fff;
        background-color: #fff;
    }
.ddmenu li ul {
    color: #fff;
        background-color: #fff;
    }
.ddmenu li {
    color: #fff;
        background-color: #fff;
    }
.sf-menu li {
    width:140px;
    text-align:center;
    
}
.sf-menu li li {
    background:        #AABDE6;
}
.sf-menu li li li {
    background:        #9AAEDB;
}

.sf-menu li:hover{
    background:    url(button.png);
    }
    
.sf-menu li:hover, .sf-menu li.sfHover,
.sf-menu a:focus, .sf-menu a:hover, .sf-menu a:active {
    background:        #CFDEFF;
    outline:        0;
    text-align:center;
}

/*** arrows **/
.sf-menu a.sf-with-ul {
    padding-right:     2.25em;
    min-width:        1px; /* trigger IE7 hasLayout so spans position accurately */
    
}
.sf-sub-indicator {
    position:        absolute;
    display:        block;
    right:            .75em;
    top:            1.05em; /* IE6 only */
    width:            10px;
    height:            10px;
    text-indent:     -999em;
    overflow:        hidden;
    background:        url('/images/arrows-838383.png') no-repeat -10px -100px; /* 8-bit indexed alpha png. IE6 gets solid image only */
}
a > .sf-sub-indicator {  /* give all except IE6 the correct values */
    top:            .8em;
    background-position: 0 -100px; /* use translucent arrow for modern browsers*/
}
/* apply hovers to modern browsers */
a:focus > .sf-sub-indicator,
a:hover > .sf-sub-indicator,
a:active > .sf-sub-indicator,
li:hover > a > .sf-sub-indicator,
li.sfHover > a > .sf-sub-indicator {
    background-position: -10px -100px; /* arrow hovers for modern browsers*/
}

/* point right for anchors in subs */
.sf-menu ul .sf-sub-indicator { background-position:  -10px 0; }
.sf-menu ul a > .sf-sub-indicator { background-position:  0 0; }
/* apply hovers to modern browsers */
.sf-menu ul a:focus > .sf-sub-indicator,
.sf-menu ul a:hover > .sf-sub-indicator,
.sf-menu ul a:active > .sf-sub-indicator,
.sf-menu ul li:hover > a > .sf-sub-indicator,
.sf-menu ul li.sfHover > a > .sf-sub-indicator {
    background-position: -10px 0; /* arrow hovers for modern browsers*/
}

/*** shadows for all but IE6 ***/
.sf-shadow ul {
    background:    url('list-back2.gif') no-repeat bottom right;
    padding: 0 8px 9px 0;
    -moz-border-radius-bottomleft: 17px;
/*    -moz-border-radius-topright: 17px; */
/*    -webkit-border-top-right-radius: 17px; */
    -webkit-border-bottom-left-radius: 17px;
}
.sf-shadow ul.sf-shadow-off {
    background: transparent;
}
.sf-menu li li:hover a.subsub{
    position:relative;
    z-index:999;
    border:1px solid #f06e00;
    border-top:none;
    border-bottom:none;
    padding-left:6px;
    background:#eee;
}
.sf-menu li:hover ul li li a {
    border-right:none;
    font-weight: bold;
    width:12em;    
    z-index:1;
}
.sf-navbar li li{
    position:relative;
}
.sf-navbar ul li li{
    float: none;
    display:block;
    margin:0;
    background:#eee;
}
.sf-navbar ul li li a {
    color: #fff;
    float:none;
    display:block;
    position:relative;
    border-bottom:1px solid #ccc;
    font-weight: normal;
    text-align:left!important;
}
.sf-navbar li ul ul {
    border: 1px solid #f06e00;
    border-top: none;
    width:12em;
    background:#61616a;
    padding:5px;
/*    -webkit-border-top-right-radius: 5px; */
    -webkit-border-bottom-right-radius: 5px;
    -webkit-border-bottom-left-radius: 5px;
/*     -moz-border-radius-topright: 5px; */
    -moz-border-radius-bottomright: 5px;
    -moz-border-radius-bottomleft: 5px;
/*    border-top-right-radius: 5px; */
    border-bottom-right-radius: 5px;
    border-bottom-left-radius: 5px;
    z-index:99!important;
    top:1.95em!important;
}

.last{
    border: 0 !important;
}
 

You should be able to just set the ul to auto:


.sf-navbar li ul ul {
    width:auto!important;
}

At least that works with the code I was using last night.

3 - The CSS below is used to adds arrows to indicate a dropline or dropdown menu, and it applies to all levels of the menu. I would like to be able to use different arrows for different levels (white arrows with the top line, grey arrows with the second line because the background is white, etc).

You just have to go down a level each time.


/*1st level */
li .sf-sub-indicator {
  background: url('/images/arrows1.png') no-repeat -10px -100px; /* 8-bit indexed alpha png. IE6 gets solid image only */
}

/*2nd level */
li li .sf-sub-indicator {
  background: url('/images/arrows2.png') no-repeat -10px -100px; /* 8-bit indexed alpha png. IE6 gets solid image only */
}

/* 3rd level */
li li li .sf-sub-indicator {
  background: url('/images/arrows3.png') no-repeat -10px -100px; /* 8-bit indexed alpha png. IE6 gets solid image only */
}


All of this worked great. Thanks.