响应式导航菜单水平下拉

时间:2015-08-18 17:58:34

标签: html css drop-down-menu

我想设计一个导航菜单,通过将水平菜单更改为单个按钮,在单击时按下菜单,从而响应页面的宽度。

我见过的所有示例似乎都使用Javascript或JQuery。是否只有CSS这样做?

我的想法是创建两个不同的<ul></ul>元素。一个用于水平,一个用于垂直下拉菜单。并根据屏幕大小使用媒体查询隐藏一个。可以使用单个<ul></ul>元素来完成吗?

1 个答案:

答案 0 :(得分:0)

这是使用CSS实现Bootstrapish功能的一种方法。也可以使用CSS添加一些流畅的动画,我会留给你工作,并在必要时优化代码。 (调整预览窗口的大小以查看效果)。

小提琴:http://jsfiddle.net/875v00ge/

HTML:

<nav>
    <span tabindex = "1"></span>
    <span></span>
    <div class = "menuWrapper">
        <ul>
            <li><a href = "">About</a></li>
            <li><a href = "">Company</a></li>
            <li><a href = "">FAQ</a></li>
            <li><a href = "">Contact</a></li>
            <li><a href = "">Help</a></li>
        </ul>
    </div>
</nav>

CSS:

* {
    margin: 0;
    padding: 0;
}

ul {
    list-style-type: none;
}

a {
    color: rgb(50, 50, 50);
    text-decoration: none;
}

nav {
    background-color: rgb(240, 240, 240);
    border: 1px solid rgb(200, 200, 200);
    border-radius: 5px;
    display: table;
    height: calc(14px * 3);
    width: 95%;
    margin: 25px auto;
    position: relative;
}

nav span {
    width: calc(14px * 1.5);
    height: 14px;
    display: none;
    position: absolute;
    right: 14px;
    top: 50%;
    transform: translateY(-50%);
    outline: 0;
    cursor: pointer;
}

nav span:first-of-type {
    border: solid rgb(100, 100, 100);
    border-width: 2px 0;
    padding: 4px 0;
    height: 2px;
    background-color: rgb(100, 100, 100);
    background-clip: content-box;
    z-index: 2;
}

nav span:nth-of-type(2) {
    z-index: 1;
    background-color: transparent;
}

nav li {
    float: left;
    font: normal 14px/3 Sans-Serif;
}

nav li:first-of-type {
    margin-left: 10px;
}

nav li a {
    display: inline-block;
    padding: 0 10px;
}

nav li a:hover {
    background-color: rgb(220, 220, 220);
}

@media screen and (max-width: 360px) {
    nav .menuWrapper {
        position: absolute;
        top: 100%;
        width: 100%;
        left: -1px;
        overflow: hidden;
        border: 0px solid rgb(200, 200, 200);
    }

    nav ul {
        transform: translateY(-100%);
        background-color: rgb(235, 235, 235);
    }

    nav {
        border-radius: 0;
    }

    nav li {
        float: none;
    }

    nav li:first-of-type {
        margin-left: 0;
    }

    nav li a {
        display: block;
    }

    nav span {
        display: block;
    }

    nav span:first-of-type:focus {
        border-color: green;
        background-color: green;
        z-index: 0;
    }

    nav span:first-of-type:focus ~ .menuWrapper {
        border-width: 1px;
    }

    nav span:first-of-type:focus ~ .menuWrapper > ul,
    nav span:first-of-type:not(:focus) ~ .menuWrapper > ul:hover {
        transform: translateY(0%);
    }
}