如何在没有jQuery或Bootstrap的情况下为切换的导航栏设置动画?

时间:2020-10-06 04:34:27

标签: javascript html css navigation css-animations

我已经获得了一个功能切换的导航栏,但是完全不知道如何动画化,就像Bootstrap一样。我已经设置好了,以便JS在导航栏中添加和删除“ display-menu”类,而且我不确定如何使菜单项滑入。我不确定这是否是CSS-基于解决方案,基于JS的解决方案,或两者兼而有之。关于如何解决这个问题的任何想法或指示?这就是我已经要做的(请原谅Django标签):

HTML:

<navbar>
    <ul id="navbar" class="nav-list">
        <li class="nav-item">
            <a href="#">
                <img src="{% static 'dblfree/img/logo-circle.png' %}" alt="Logo">
            </a>
        </li>
        <li class="nav-item toggle">
            <button class="btn-primary" onclick="toggleNavbar()">&#x2630;</button>
        </li>
        <li class="nav-item">
            <a href="#">Blog</a>
        </li>
        <li class="nav-item">
            <a href="#">About</a>
        </li>
        <li class="nav-item">
            <a href="#">Portfolio</a>
        </li>
        <li class="nav-item">
            <button class="btn-primary">Contact</button>
        </li>
    </ul>
</navbar>

CSS:

:root {
  --clr-primary: #047c84;
  --clr-shadow: #cfd8dc;
  --radius: 0.5rem;
}

body {
    background-color: #f0f7f8; /* TEMP */
    font-family: 'Montserrat', sans-serif;
    padding: 1rem;
}

.nav-list {
    background: white;
    box-shadow: 0px 0px 10px var(--clr-shadow);
    padding: 1rem 0;
    border-radius: var(--radius);
    display: flex;
    justify-content: flex-end;
    align-items: center;
}

.nav-item {
    list-style: none;
    margin-right: 2rem;
}

.nav-item a {
    text-decoration: none;
    color: black;
    transition: all 200ms ease-in;
}

.nav-item a:hover {
    color: var(--clr-primary);
}

.nav-item:first-child {
    margin-right: auto;
    margin-left: 2rem;
}

.nav-item img {
    width: 50px;
}

.btn-primary {
    font-family: 'Montserrat', sans-serif;
    font-size: 1rem;
    background: none;
    border: 2px solid var(--clr-primary);
    outline: none;
    border-radius: var(--radius);
    padding: 0.5rem 1rem;
    transition: all 200ms ease-in;
}

.btn-primary:hover {
    color: white;
    background: var(--clr-primary);
}

.toggle {
    display: none;
}

@media screen and (max-width: 600px) {
    body {
        padding: 0;
    }

    .toggle {
        display: block;
    }

    .nav-list {
        border-radius: 0;
        flex-wrap: wrap;
    }

    .nav-list li:nth-child(n+3) {
        width: 100%;
        text-align: right;
        margin-top: 2rem;
        display: none;
    }

    .nav-list.display-menu .nav-item {
        display: block;
        transition: all 800ms;
    }
}

JavaScript:

function toggleNavbar() {
    let navbar = document.getElementById("navbar");
    if (navbar.className === "nav-list") {
        navbar.className += " display-menu";
    }
    else {
        navbar.className = "nav-list";
    }
}

1 个答案:

答案 0 :(得分:1)

将链接标签添加到关闭和打开按钮。并将onclick =“ opennav()”添加到打开链接,并将onclick =“ closenav()”添加到关闭链接。

function openNav() {
    document.getElementById("mySidenav").style.width = "250px";
}

function closeNav() {
    document.getElementById("mySidenav").style.width = "0";
}