выпадающее меню с верхним треугольником

Я хочу создать раскрывающееся меню, как это:

http://www.howdyjeff.com/

но я не могу горизонтально центрировать верхний треугольник и раскрывающееся меню (на основе li a) Я :hover проблема, потому что в выпадающем списке ul исчезает.

как я могу это сделать?

JSFiddle:

https://jsfiddle.net/zw5rqzut/

html {
    text-align: center;
}
nav {
    width: 100%;
    height: auto;
    background-color: #000;
}
ul li {
    display: inline-block;
    position: relative;
    margin: 1em
}
ul ul {
    display: none;
    position: absolute;
    background-color: #000;
    top: 50px;
}
ul ul:after {
    position: absolute;
    left: 50%;
    top: -8px;
    width: 0;
    height: 0;
    content: '';
    border-left: 20px solid transparent;
    border-right: 20px solid transparent;
    border-bottom: 20px solid #000000;
}
a {
    color: #fff;
    text-decoration: none;
}
li:hover ul {
	display:block;
}
<nav>
    <ul>
        <li>
            <a href="#">Dropdown1</a>
            <ul>
                <li><a href="#">Option1</a></li>
                <li><a href="#">Option2</a></li>
                <li><a href="#">Option3</a></li>
            </ul>
        </li>
        <li>
            <a href="#">Dropdown2</a>
            <ul>
                <li><a href="#">Option1</a></li>
                <li><a href="#">Option2</a></li>
                <li><a href="#">Option3</a></li>
            </ul>
        </li>
        <li>
            <a href="#">Dropdown3</a>
            <ul>
                <li><a href="#">Option1</a></li>
                <li><a href="#">Option2</a></li>
                <li><a href="#">Option3</a></li>
            </ul>
        </li>
    </ul>
</nav>

1 ответов


для центрирования стрелки вы можете добавить следующее:

ul ul:after {
    margin-left: -20px;
}

чтобы исправить выпадающий список не остается, дайте достаточно нижней прокладки, как это:

nav > ul > li > a {
    padding-bottom: 50px;
}

обновление: центрирование выпадающего списка и стрелки:

демо http://jsfiddle.net/esjrhg5n/

$(document).ready(function() {
    $("nav > ul > li").mouseover(function() {
        var the_width = $(this).find("a").width();
        var child_width = $(this).find("ul").width();
        var width = parseInt((child_width - the_width)/2);
        $(this).find("ul").css('left', -width);
    });
});