首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >CSS & Javascript问题与汉堡包菜单和图片库

CSS & Javascript问题与汉堡包菜单和图片库
EN

Stack Overflow用户
提问于 2022-08-04 18:48:41
回答 1查看 55关注 0票数 2

当我在一个网站上工作的时候,我正在关注youtube上的2篇教程。一个教程是关于建立一个完整的网站,这是响应,第二个是关于创建一个图像画廊与网格布局。最终的结果,当我完成我的网站工作时,看上去不错,但我注意到了两个问题。

当你缩小网站的大小,让它占据你屏幕的一半时,肚脐会缩小,你会得到一个汉堡包菜单。但点击汉堡并不能像它应该的那样打开它。有一个eventListener应该添加和删除一个名为active的类,但是什么都没有发生。

这是html代码,其中包含了navbar和汉堡包图标。

代码语言:javascript
复制
<header>
    <a href="#" class="logo">Glitta Art Studio</a>
    <div class="bx bx-menu" id="menu-icon"></div>

    <ul class="navbar">
        <li><a href="#home">Home</a></li>
        <li><a href="#about">About</a></li>
        <li><a href="#gallery">Gallery</a></li>
        <li><a href="#contact">Contact</a></li>
    </ul>
</header>

这是媒体查询的CSS。

代码语言:javascript
复制
@media(max-width: 1140px) {
    section {
        padding: 50px 8%;
    }
    #menu-icon {
        display: initial;
        color: var(--text-color);
    }
    header .navbar {
        position: absolute;
        top: -400px;
        left: 0;
        right: 0;
        display: flex;
        flex-direction: column;
        text-align: center;
        background: #2b2640;
        transition: .3s;
    }
        header .navbar .active {
            top: 70px;
        }
        .navbar a {
            padding: 1.5rem;
            display: block;
        }
        .col {
            width: 50%;
            margin-bottom: 10px;
        }
}

这是JavaScript

代码语言:javascript
复制
let menu = document.querySelector("#menu-icon");
let navbar = document.querySelector(".navbar");

menu.addEventListener("click", function () {
    navbar.classList.toggle("active")
});

window.onscroll = () => {
    navbar.classList.remove("active");
};

第二个问题在技术上不像导航那样重要,但到目前为止,这对我来说更烦人。当您将鼠标移动到图库部分中的一个图像上时,图像上方会出现一个白色的框,其中包含图像的标题和有关它的一些信息。但出于某种原因,教程中的人在这些方框中的文本中添加了一个标签,而我则盲目地将它添加到我的项目中。点击这个框会把你带回到主页,所以我想要完全摆脱它,而不是让它链接到任何东西。我不知道CSS有什么问题,但是如果您尝试删除html中的a标记并用常规的p标记替换它们,那么它会完全破坏图像的网格,它们都会卡在屏幕的一侧。

这里是图库的HTML代码(有10个div与相同的填充文本和临时图像完全一样)

代码语言:javascript
复制
<div class="image-gallery">
            <div class="image-box">
                <img src="img/paintbrush.jpeg" alt="paintbrush">
                <div class="overlay">
                    <div class="details">
                        <h3 class="title">
                            <a href="">Painting Title</a>
                        </h3>
                        <span class="category">
                            <a href="">text about piece here</a>
                        </span>
                    </div>
                </div>
            </div>
            <div class="image-box">
                <img src="img/paintbrush.jpeg" alt="paintbrush">
                <div class="overlay">
                    <div class="details">
                        <h3 class="title">
                            <a href="#">Painting Title</a>
                        </h3>
                        <span class="category">
                            <a href="#">text about piece here</a>
                        </span>
                    </div>
                </div>
            </div>

这是CSS

代码语言:javascript
复制
.gallery {
    margin: 0;
    padding: 0;
    position: relative;
}

.image-gallery {
    width: 100%;
    max-width: 950px;
    margin: 0 auto;
    padding: 50px 20px;
    display: grid;
    grid-template-columns: repeat(auto-fit, minmax(250px,1fr));
    grid-auto-rows: 250px;
    grid-auto-flow: dense;
    grid-gap: 20px;
}

.image-gallery .image-box {
    position: relative;
    background-color: #d7d7d8;
    overflow: hidden;
}

.image-gallery .image-box:nth-child(7n + 1){
    grid-column: span 2;
    grid-row: span 2;
}

.image-gallery .image-box img {
    width: 100%;
    height: 100%;
    object-fit: cover;
    transition: all 0.5s ease;
}

.image-gallery .image-box:hover img {
    transform: scale(1.1);
}

.image-gallery .image-box .overlay {
    position: absolute;
    top: 0;
    right: 0;
    bottom: 0;
    left: 0;
    background-color: #fafaf2;
    display: flex;
    align-items: center;
    justify-content: center;
    opacity: 0;
    transition: all 0.5s ease;
    z-index: 1;
}

.image-gallery .image-box:hover .overlay {
    top: 20px;
    right: 20px;
    bottom: 20px;
    left: 20px;
    opacity: 1;
}

.image-gallery .image-box .details {
    text-align: center;
}

.image-gallery .image-box .details .title {
    margin-bottom: 8px;
    font-size: 24px;
    font-weight: 600;
    position: relative;
    top: -5px;
    opacity: 0;
    visibility: hidden;
    transition: all 0.3s ease;
}

.image-gallery .image-box .details .category {
    font-size: 18px;
    font-weight: 400;
    position: relative;
    bottom: -5px;
    opacity: 0;
    visibility: hidden;
    transition: all 0.3s ease;
}

.image-gallery .image-box:hover .details .title {
    top: 0px;
    opacity: 1;
    visibility: visible;
    transition: all 0.3s 0.2s ease;
}

.image-gallery .image-box:hover .details .category {
    bottom: 0;
    opacity: 1;
    visibility: visible;
    transition: all 0.3s 0.2s ease;
}

.image-gallery .image-box .details .title a,
.image-gallery .image-box .details .category a {
    color: #222222;
    text-decoration: none;
}

很抱歉问了这些基本问题。我已经很久没有练习编码了,所以我忘记了很多东西。

编辑:我解决了画廊的问题。现在我要处理的只是汉堡问题

EN

回答 1

Stack Overflow用户

发布于 2022-08-04 19:23:16

您可以尝试在HTML元素本身中插入如下函数:

<div class="bx bx-menu" id="menu-icon" onclick="ToggleClassActive()"></div>

而您需要删除事件侦听器函数并使用它

代码语言:javascript
复制
    function ToggleClassActive(){
        let menu = document.querySelector("#menu-icon");
        let navbar = document.querySelector(".navbar");
        navbar.classList.toggle("active");
    }

您还需要确保脚本在元素之后(放置脚本的最佳位置就在

请显示控制台中发生的错误。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/73240940

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档