You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在CSS Grid容器中实现JavaScript轮播图?排查显示异常

JavaScript轮播图在CSS Grid容器中无法显示的排查方案

我把W3Schools的轮播图示例放到CSS Grid容器里就显示不出来,但在Grid外面能正常运行。我是前端新手,想排查下原因,比如是不是CSS设置错了、嵌套结构有问题,或者轮播图在Grid容器里有特殊要求,还有哪些可能?

可能的问题原因排查

  • JS文件加载失败:HTML里引入JS的标签写错了,<script scr="../template.js">里的scr应该是src,这会导致轮播的核心JS代码完全没加载,直接失效。
  • 轮播结构不完整:W3Schools的原示例包含切换按钮(prev/next)和底部指示器dots,但你的HTML里没有这些元素,JS代码却在尝试操作dots元素,运行到dots[slideIndex - 1].className += " active"时会报错,中断整个轮播逻辑。
  • Grid布局空间问题:检查main区域的Grid分配是否正确,有没有被其他Grid项挤占空间,或者main没有设置overflow: auto或合适的高度,导致轮播容器被隐藏。
  • CSS样式冲突:你给所有main下的元素加了box-sizing: border-box,这本身没问题,但要确认slideshow-container的margin: auto是否在Grid布局里正常生效,或者有没有其他样式覆盖了轮播元素的显示设置。
  • 图片路径错误:如果图片文件的路径不对,即使轮播逻辑正常,也只会显示空白区域,要确认图片是否和HTML文件在正确的位置。

你的代码

HTML代码

<!DOCTYPE html>
<html>

<head>
    <script scr="../template.js"></script>
    <link rel="stylesheet" type="text/css" href="../template.css">
</head>

<body>

    <div class="grid">
        <nav>

            <ul>
                <li>
                    <!-- System  Assebmly -->
                    <div class="dropdown">
                        <button class="dropbtn">Assembly</button>
                        <div class="dropdown-content">
                            <!--Links here-->
                        </div>
                    </div>
                </li>
                <li>

                    <!-- Logging In-->
                    <div class="dropdown">
                        <button class="dropbtn">Loging In</button>
                        <div class="dropdown-content">
                            <a href="Logging_In/AtUSDAOffice/AtUSDAOffice.html">At USDA Office</a>
                            <a href="Logging_In/Remote/Remote.html">Remote</a>
                        </div>
                    </div>
                </li>
                <li>
                    <!-- Basic Applications -->
                    <div class="dropdown">
                        <button class="dropbtn">Basic Applications Setup</button>
                        <div class="dropdown-content">
                            <a href="Basic_Applications/Outlook/Outlook.html">Outlook</a>
                            <!-- Links here-->
                        </div>
                    </div>

                </li>
                <li>
                    <!-- Agency Appications -->
                    <div class="dropdown">
                        <button class="dropbtn">Agency Applications Setup</button>
                        <div class="dropdown-content">
                            <!--Links Here -->
                        </div>
                    </div>
                </li>
            </ul>
        </nav>
        <header>
            <h1>Welcome </h1>
        </header>
        <main>
            <div class="slideshow-container">


                <div class="mySlides fade">
                    <div class="numbertext">1 / 23</div>
                    <img src="1_Instructions.jpeg">
                    <div class="text">Instructions</div>
                </div>

                <div class="mySlides fade">
                    <div class="numbertext">2 / 23</div>
                    <img src="2_Computer.jpeg">
                    <div class="text">Inventory NRCS Computer</div>
                </div>

                <div class="mySlides fade">
                    <div class="3_numbertext">3 / 23</div>
                    <img src="DockTopDown.jpeg">
                    <div class="text">Inventory Dock</div>
                </div>

                <div class="mySlides fade">
                    <div class="numbertext">4 / 23</div>
                    <img src="4_Keyboard.jpeg">
                    <div class="text">Inventory Keyboard</div>
                </div>



            </div>
            <script>
                currentSlide(1);
            </script>

        </main>
        <div id="checkboxes">checkboxes</div>
        <footer>

            Copyright &copy
            <script type="text/javascript"> document.write(new Date().getFullYear());</script> reserved.

        </footer>

    </div>

</body>

</html>

CSS代码

.grid {
    display: grid;
    height: 100vh;
    grid-template-columns: 1fr 1fr 1fr 1fr;
    grid-template-rows: .25fr 1.75fr 1.75fr .25fr;
    grid-template-areas: "header header header header"
        "nav main main checkboxes"
        "nav main main checkboxes"
        "footer footer footer footer";
    /*grid-gap: 0.2em */
    ;
}

/* Navagation section */
/* nav section removed */

main {
    /*background: #BF3F7F; */
    grid-area: main;

}

main * {
    box-sizing: border-box;
}

main .slideshow-container {
    max-width: 1000px;
    position: relative;
    margin: auto;
}

main .mySlides {
    display: none;
}

main .prev,
main .next {
    cursor: pointer;
    position: absolute;
    top: 50%;
    width: auto;
    margin-top: -22px;
    padding: 16px;
    color: white;
    font-weight: bold;
    font-size: 18px;
    transition: 0.6s ease;
    border-radius: 0 3px 3px 0;
    user-select: none;
}

main .next {
    right: 0;
    border-radius: 3px 0 0 3px;
}

main .prev:hover,
main .next:hover {
    background-color: rgba(0, 0, 0, 0.8);
}

main .text {
    color: #f2f2f2;
    font-size: 15px;
    padding: 8px 12px;
    position: absolute;
    bottom: 8px;
    width: 100%;
    text-align: center;
}

main .numbertext {
    color: #f2f2f2;
    font-size: 12px;
    padding: 8px 12px;
    position: absolute;
    top: 0;
}

main .active {
    background-color: #717171;
}

main .fade {
    animation-name: fade;
    animation-duration: 1.5s;
}

@keyframes fade {
    from {
        opacity: .4;
    }

    to {
        opacity: 1;
    }
}

JavaScript代码

let slideIndex = 0;
showSlides(slideIndex);

// Next/previous controls
function plusSlides(n) {
    showSlides(slideIndex += n);
}

// Thumbnail image controls
function currentSlide(n) {
    showSlides(slideIndex = n);
}

function showSlides(n) {
    let i;
    let slides = document.getElementsByClassName("mySlides");
    let dots = document.getElementsByClassName("dot");
    if (n > slides.length) { slideIndex = 1 }
    if (n < 1) { slideIndex = slides.length }
    for (i = 0; i < slides.length; i++) {
        slides[i].style.display = "none";
    }
    for (i = 0; i < dots.length; i++) {
        dots[i].className = dots[i].className.replace(" active", "");
    }
    slides[slideIndex - 1].style.display = "block";
    dots[slideIndex - 1].className += " active";
}

内容的提问来源于stack exchange,提问作者drhunn

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.25 12:02:02