html - 单击汉堡菜单后,试图显示我的菜单。汉堡菜单显示在一定宽度上

标签 html css responsive

当屏幕达到一定大小时,导航列表就会隐藏起来,并显示一个菜单。

当您单击汉堡包时,它应该会显示菜单,而当您单击 X 时,它应该会关闭菜单。

除了下拉列表中显示的菜单外,我得到了所有效果。

codepen 查看代码

https://codepen.io/mattmatt33/project/editor/DQpvPP#0

HTML 和 CSS:

/* Hamburger Menu Start */

.menu-wrap {
    position: fixed;
    top: 0;
    right: 0;
    z-index: 1;
    visibility: hidden;
}

.menu-wrap .toggler {
    position: absolute;
    top: 0;
    right: 0;
    z-index: 2;
    cursor: pointer;
    width: 50px;
    height: 50px;
    opacity: 0;
}

.menu-wrap .hamburger {
    position: absolute;
    top: 0;
    right: 0;
    z-index: 1;
    width: 60px;
    height: 60px;
    padding: 1rem;
    background: #fff; 
    display: flex;
    align-items: center;
    justify-content: center;
    opacity: 0.75;
}

/* hamburger lines */
.menu-wrap .hamburger > div {
    position: relative;
    width: 100%;
    height: 2px;
    background-color: var(--mainColor);
    display: flex;
    align-items: center;
    justify-content: center;
    transition: all 0.4s ease;
}

/* top and bottom lines */
.menu-wrap .hamburger > div:before,
.menu-wrap .hamburger > div:after {
    content: '';
    position: absolute;
    z-index: 1;
    top: -10px;
    width: 100%;
    height: 2px;
    background: inherit;
}

.menu-wrap .hamburger > div:after {
    top: 10px;
}

/* Turn lines into an X */
.menu-wrap .toggler:checked + .hamburger > div:before,
.menu-wrap .toggler:checked + .hamburger > div:after {
    top: 0;
    transform: rotate(90deg);
}


.menu-wrap .toggler:checked + .hamburger > div {
    transform: rotate(135deg);
}

/* Hamburger Menu End */

@media (max-width: 1024px ) {
    .nav-list {
        display: flex;
        align-items: center;
        justify-content: center;
    }
}


@media (max-width: 900px) {
    .nav-list {
        display: block; 
        margin-top: 70px;
        margin-left: 63%;
        visibility: hidden;
    }

    .menu-wrap {
        visibility: visible;
    }

    .menu-wrap .toggler:checked ~ .nav-list {
        visibility: visible;
    }

    
     .main-logo {
        max-width: 100%;
    } 
}

@media (max-width: 500px) {
   
    .main-logo {
        display: block;
        max-width: 100%;
        width: 100%;
    }
    
}
<header>
            
        <a href="home.html"> <img src="../imgs/logo.jpg" alt="Kreative Kage Logo" class="main-logo"> </a>
            
        <div class="menu-wrap">
                    <input type="checkbox" class="toggler">
                        <div class="hamburger">
                            <div></div>
                        </div>
                    </div>

                <ul class="nav-list"> 
                    <a href="home.html"><li>Home</li></a>
                    <a href="gallery.html"><li>Gallery

                        <ul class="sub-menu">
                            <a href="weddings.html"><li>Weddings</li></a>
                            <a href="maternity.html"><li>Maternity</li></a>
                            <a href="seniors.html"><li>Graduates</li></a>
                            <a href="babies.html"><li>New Borns</li></a>
                            <a href="family.html"><li>Family</li></a>
                        </ul>
                    </li></a>
                    <a href="photographers.html"><li>Photographers
                            <ul class="sub-menu">
                                    <a href="omar.html"><li>Jordan Kage</li></a>
                                    <a href="dave.html"><li>Dave Kage</li></a>
                                    <a href="jas.html"><li>Jas</li></a>
                            </ul>
                    </li></a>
                    <a href="rates.html"><li>Rates</li></a>
                    <a href="contact.html"><li>Contact Us</li></a>
                </ul>
            
        </header>

最佳答案

这行代码没有正确选择 .nav-list 元素

.menu-wrap .toggler:checked ~ .nav-list {
        visibility: visible;
    }

The element1~element2 selector matches occurrences of element2 that are preceded by element1.

Both elements must have the same parent, but element2 does not have to be immediately preceded by element1.

.nav-list 元素是 .menu-wrap 的兄弟元素,而不是子元素。

.nav-list 的 CSS 无法知道 .toggler 的状态。最简单的解决方案是使用 JavaScript 将 .checked 类应用于 .menu-wrap 并添加此 CSS 以使菜单在单击汉堡包时可见:

.menu-wrap.checked > .nav-list {
        visibility: visible;
    }

关于html - 单击汉堡菜单后,试图显示我的菜单。汉堡菜单显示在一定宽度上,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58943759/

相关文章:

php - 从可能的 Y 中随机显示 X 个 div

javascript - 子菜单 JS 中的响应箭头

css - 我应该从代码中删除什么以禁用移动响应

html - 进度条在较小的显示器上重叠(响应式设计问题)

html - 分区中的分区 : layout question

javascript - 比较两个字符串并显示字符串中不匹配单词的数量

javascript - 无法触发 drop 事件(是的,我在拖拽中阻止了 Default() )

html - 从 xml 创建可打印 pdf 的一般过程

html - 如何为自动高度元素水平而不是垂直排列 CSS 列?

javascript - SlidesJS - 一页上有多个 "product"示例 slider ?