当前位置:首页 > 问答 > 正文

用DIV实现左侧导航栏点击右侧显示内容:非iframe方案探讨

  • 问答
  • 2025-01-27 07:30:40
  • 72
  • 更新:2025-01-27 07:30:40

本文目录导读:

  1. HTML 结构
  2. CSS 样式
  3. JavaScript 逻辑
  4. 解释

的布局,而不使用 iframe,可以通过 HTML、CSS 和 JavaScript 来完成,以下是一个基本的实现方案:

HTML 结构

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>左侧导航栏点击右侧显示内容</title>
    <link rel="stylesheet" href="styles.css">
</head>
<body>
    <div class="container">
        <div class="sidebar">
            <ul>
                <li><a href="#" data-content="page1">页面 1</a></li>
                <li><a href="#" data-content="page2">页面 2</a></li>
                <li><a href="#" data-content="page3">页面 3</a></li>
            </ul>
        </div>
        <div class="content">
            <div id="page1" class="page">这是页面 1 的内容。</div>
            <div id="page2" class="page">这是页面 2 的内容。</div>
            <div id="page3" class="page">这是页面 3 的内容。</div>
        </div>
    </div>
    <script src="script.js"></script>
</body>
</html>

CSS 样式

/* styles.css */
body {
    font-family: Arial, sans-serif;
    margin: 0;
    padding: 0;
}
.container {
    display: flex;
    height: 100vh;
}
.sidebar {
    width: 200px;
    background-color: #333;
    color: white;
    padding: 20px;
}
.sidebar ul {
    list-style-type: none;
    padding: 0;
}
.sidebar li {
    margin-bottom: 10px;
}
.sidebar a {
    color: white;
    text-decoration: none;
}
.sidebar a:hover {
    text-decoration: underline;
}
.content {
    flex-grow: 1;
    padding: 20px;
    overflow-y: auto;
}
.page {
    display: none;
}
.page.active {
    display: block;
}

JavaScript 逻辑

// script.js
document.addEventListener('DOMContentLoaded', function() {
    const links = document.querySelectorAll('.sidebar a');
    const pages = document.querySelectorAll('.page');
    links.forEach(link => {
        link.addEventListener('click', function(event) {
            event.preventDefault();
            const contentId = this.getAttribute('data-content');
            pages.forEach(page => {
                page.classList.remove('active');
            });
            document.getElementById(contentId).classList.add('active');
        });
    });
    // 默认显示第一个页面内容
    if (pages.length > 0) {
        pages[0].classList.add('active');
    }
});

解释

1、HTML 结构

- 使用一个div 容器包含两个子div,一个作为导航栏(sidebar),另一个作为内容显示区(content)。

- 导航栏内有一个无序列表,每个列表项包含一个链接,链接的data-content 属性指向对应内容的id

用DIV实现左侧导航栏点击右侧显示内容:非iframe方案探讨

- 内容显示区包含多个div,每个div 代表一个页面内容,初始时都隐藏(通过 CSS 控制)。

2、CSS 样式

- 使用 Flexbox 布局将导航栏和内容显示区并排显示。

- 导航栏设置固定宽度和背景颜色,内容显示区占据剩余空间。

- 使用.page 类隐藏所有页面内容,使用.active 类显示当前页面内容。

3、JavaScript 逻辑

- 监听所有导航链接的点击事件,阻止默认行为(即页面跳转)。

- 根据点击的链接的data-content 属性找到对应的内容div,并显示它(添加.active 类)。

- 隐藏其他所有页面内容(移除.active 类)。

- 页面加载时默认显示第一个页面内容。

这样,你就可以实现一个左侧导航栏点击后右侧显示对应内容的布局,而无需使用 iframe。