Search code examples
cssnavigationnavbarcentering

Centering Submenu


I've read all the questions concerning centering submenus. But I don't get my problem solved.

I have a simple navigation bar with 2 submenus. You can find it here: Fiddle.

ul#nav, ul#sub1, ul#sub2 {
	list-style-type: none;
}
ul#nav {
	position: relative;
}
ul#nav li {
	width: 125px;
	text-align: center;
	float: left;
	margin-right: 4px;
}
ul#nav a {
	text-decoration: none;
	display: block;
	width: 125px;
	height: 25px;
	line-height: 25px;
	background-color: #FFF;
	border: 1px solid #CCC;
	border-radius: 5px;
	color: #000;
}	
ul#sub1 a, ul#sub2 a { 
	margin-top: 4px;
}
ul#nav li:hover > a { 
	background-color: #6E6E6E;
	color: #FFF;
}
ul#nav li:hover a:hover {  
	background-color: #E2E2E2;
	color: #000;
}
ul#sub1, ul#sub2 {
	display: none;
	position: absolute;
	left: 0px;
}
ul#nav li:hover ul#sub1 {
	display: block;
}
ul#sub1 li:hover ul#sub2 {
	display: block;
}
<nav>
	<ul id="nav">
    	<li><a href="#">Reisen</a>
        	<ul id="sub1">
            	<li><a href="#">Europa</a></li>
                <li><a href="#">Amerika</a></li>
                <li><a href="#">Asien</a>
                	<ul id="sub2">
                    	<li><a href="#">Thailand</a></li>
                        <li><a href="#">Bhutan</a></li>
                        <li><a href="#">China</a></li>
                        <li><a href="#">Vietnam</a></li>
                        <li><a href="#">Japan</a></li>
                    </ul>
                </li>
                <li><a href="#">Afrika</a></li>
                <li><a href="#">Australien</a></li>
            </ul>
        </li>
        <li><a href="#">Magazin</a></li>
        <li><a href="#">Karriere</a>
            <ul id="sub1">
                <li><a href="#">Thema 1</a></li>
                <li><a href="#">Thema 2</a></li>
                <li><a href="#">Thema 3</a></li>
            </ul>
        </li>
        <li><a href="#">Kontakt</a></li>
     </ul>
</nav>

I want the submenu centered. When I hover over "Reisen" the submenu gets the same width like the main menu. When I hover over "Karriere", I want the submenu centered under "Karriere" and not positioned left under "Reisen".

I was thinking of a span-element to the button "Karriere" but I couldn't solve it.

Thanks for your help.


Solution

  • I don't really now if this is what you're looking for or not, but maybe something like this?

    Note: I made a few changes to your CSS and HTML, mainly changing everything to use classes instead of IDs

    JS Fiddle Example

    HTML

    <nav>
    <ul id="nav">
        <li><a href="#">Reisen</a>
            <ul class="sub">
                <li><a href="#">Europa</a></li>
                <li><a href="#">Amerika</a></li>
                <li><a href="#">Asien</a>
                    <ul class="sub-second">
                        <li><a href="#">Thailand</a></li>
                        <li><a href="#">Bhutan</a></li>
                        <li><a href="#">China</a></li>
                        <li><a href="#">Vietnam</a></li>
                        <li><a href="#">Japan</a></li>
                    </ul>
                </li>
                <li><a href="#">Afrika</a></li>
                <li><a href="#">Australien</a></li>
            </ul>
        </li>
        <li><a href="#">Magazin</a></li>
        <li><a href="#">Karriere</a>
            <ul class="sub">
                <li><a href="#">Thema 1</a></li>
                <li><a href="#">Thema 2</a></li>
                <li><a href="#">Thema 3</a></li>
            </ul>
        </li>
        <li><a href="#">Kontakt</a></li>
     </ul>
    

    CSS

    ul#nav, ul.sub {
        list-style-type: none;
    }
    ul#nav {
        position: relative;
    }
    ul#nav li {
        width: 125px;
        text-align: center;
        float: left;
        margin-right: 4px;
        position: relative;
    }
    ul#nav a {
        text-decoration: none;
        display: block;
        width: 125px;
        height: 25px;
        line-height: 25px;
        background-color: #FFF;
        border: 1px solid #CCC;
        border-radius: 5px;
        color: #000;
    }   
    ul.sub a { 
        margin-top: 4px;
    }
    ul#nav li:hover > a { 
        background-color: #6E6E6E;
        color: #FFF;
    }
    ul#nav li:hover a:hover {  
        background-color: #E2E2E2;
        color: #000;
    } 
    ul.sub {
        display: none;
        position: absolute;
        left: 0px;
        padding-left: 0;
    }
    
    ul.sub-second { 
        display: none;
        list-style: none;
        left:100px;
        top: 0;
        position: absolute;
    }
    
    ul#nav li:hover ul.sub {
        display: block;
    }
    
    ul#nav li:hover ul.sub li:hover ul.sub-second {
        display:block;
    }
    }