html5学习之侧边栏实现

打算学习一些html5的知识,暂时不使用jquery.js,计划做一个侧边栏,侧边栏可以隐藏,点击侧边栏中的菜单改变content中的内容。

---------------------------------
    header
---------------------------------
|           |
|sidebar    |content
|           |
|           |

为适应移动设备,要进行响应式网站设计,主要两个点:
+ 在head中添加meta viewport
+ 在css中使用媒体查询,@media

1. 设置布局

<div class="top"></div>
<div class="sidebar"></div>
<div class="content"></div>

使用absolute方式进行布局

.top {
    position: absolute;
    left: 0; right: 0;
    height: 72px;
}
.sidebar {
    position: absolute;
    left: 0; top: 72px; bottom: 0;
    width: 178px;
}
.content {
    position: absolute;
    left:178px; top: 72px; right: 0; bottom: 0;
}

2. 隐藏/显示侧边栏

设置display为none或block可以控制元素的隐藏或显示。不使用js控制display只使用css实现的话可以使用label+input(checkbox)。

<div class="top">
    <label id="sideBarControl" for="sideToggle">显示/隐藏菜单</label>
</div>
<input type="checkbox" id="sideToggle">
<div class="sidebar">
    <p>菜单内容</p>
</div>
<div class="content">
</div>

点击#sideBarControl相当于点击#sideToggle,可以根据#sideToggle:checked控制display。

#sideToggle {
    display: none;
}
.sidebar {
    display: none;
}
.content {
    position: absolute;
    left:0; top: 72px; right: 0; bottom: 0;
}
#sideToggle:checked + .sidebar{display: block}
#sideToggle:checked ~ .content{left: 178px}

3. 添加菜单内容

使用ul li列表显示菜单内容。

<div class="sidebar">
    <p>菜单内容</p>
    <ul class="nav">
        <li><a id="_1" href="#">Menu1</a> </li>
        <li><a id="_2" href="#">Menu2</a> </li>
        <li><a id="_3" href="#">Menu3</a> </li>
    </ul>
</div>

取消li前的点,为li添加边框,取消标签a的下划线,防止相邻的边框重叠使用:last-child进行设置

.nav {
    list-style: none;
    position: absolute;
    left: 0;right: 0;
    padding: 0;
}
.nav a:link{color: #000}
.nav a:visited {color: #000}
.nav a:hover {
    color: #aaaaaa;
}
.nav li {
    border: solid 1px;
    padding: 5px 0 5px 0;
    border-bottom-width: 0px;
}
/*选择最后一个元素*/
.nav li:last-child {border-bottom-width: 1px}
.nav a {
    text-decoration: none;
}

4. 为菜单列表添加事件

不使用jquery的话,可以使用document.querySelectorAll选择元素,使用addEventListener添加事件。

var items = document.querySelectorAll(".nav li");
//可以使用[].forEach.call进行遍历
[].forEach.call(items, function (item) {
    //添加click事件
    item.addEventListener("click", function() {
        var content = document.querySelector(".content");
        content.innerHTML = this.textContent;
    });
});

5. 设置active菜单

为被点击的菜单的class添加active项,使用this.parentNode.children可以获得所有兄弟元素。

var items = document.querySelectorAll(".nav li");
// 可以使用Array.prototype.forEach.call进行遍历
[].forEach.call(items, function (item) {
//  添加click事件
    item.addEventListener("click", function() {
//      遍历所有兄弟节点this.parentNode.children
        Array.prototype.forEach.call(this.parentNode.children, function (child) {
//          删除元素的某个class
            child.classList.remove("active");
        })
        this.classList.add("active");
        var content = document.querySelector(".content");
        content.innerHTML = this.textContent;
    });
});

修改active菜单的背景

li.active {
    background-color: #f8f8f8;
    border-right-width: 0px;
}

6. 设置默认选中菜单

可以通过模拟鼠标点击设置默认的选择菜单

document.querySelector("#_1").click(); // 模拟鼠标点击

7. 设置viewport

在head中添加如下代码:

<meta name="viewport" content="width=device-width,user-scalable=no" />

8. 使用媒体查询

@media only screen and (min-width: 992px) {
  .top {
    height: 72px; }

  .sidebar {
    top: 72px;
    width: 178px; }

  .content {
    top: 72px; }

  #sideToggle:checked ~ .content {
    left: 178px; } }
@media only screen and (max-width: 991px) {
  .top {
    height: 10%; }

  .sidebar {
    top: 10%;
    width: 30%; }

  .content {
    top: 10%; }

  #sideToggle:checked ~ .content {
    left: 30%; } }
  • 11
    点赞
  • 51
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
很好,这是一个很有挑战性的任务。下面是一个简单的例子,展示如何使用Bootstrap创建一个基本的网站,包括搜索框、侧边和网站介绍。你可以通过这个例子来学习如何使用Bootstrap制作网页,并且根据你的需求进行修改和扩展。 首先,我们需要创建一个基本的HTML文件,并且导入Bootstrap的CSS和JavaScript库。这里我们使用Bootstrap的CDN链接: ```html <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>My Website</title> <link rel="stylesheet" href="https://cdn.bootcss.com/bootstrap/4.3.1/css/bootstrap.min.css"> <script src="https://cdn.bootcss.com/jquery/3.4.1/jquery.min.js"></script> <script src="https://cdn.bootcss.com/popper.js/1.15.0/umd/popper.min.js"></script> <script src="https://cdn.bootcss.com/bootstrap/4.3.1/js/bootstrap.min.js"></script> </head> <body> </body> </html> ``` 接着,我们添加一个导航和一个搜索框。导航包括一个品牌logo和一些链接,搜索框位于导航的右侧。我们使用Bootstrap的`navbar`和`form-inline`类来实现这个效果。 ```html <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>My Website</title> <link rel="stylesheet" href="https://cdn.bootcss.com/bootstrap/4.3.1/css/bootstrap.min.css"> <script src="https://cdn.bootcss.com/jquery/3.4.1/jquery.min.js"></script> <script src="https://cdn.bootcss.com/popper.js/1.15.0/umd/popper.min.js"></script> <script src="https://cdn.bootcss.com/bootstrap/4.3.1/js/bootstrap.min.js"></script> </head> <body> <nav class="navbar navbar-expand-lg navbar-light bg-light"> <a class="navbar-brand" href="#">My Website</a> <button class="navbar-toggler" type="button" data-toggle="collapse" data-target="#navbarNavAltMarkup" aria-controls="navbarNavAltMarkup" aria-expanded="false" aria-label="Toggle navigation"> <span class="navbar-toggler-icon"></span> </button> <div class="collapse navbar-collapse" id="navbarNavAltMarkup"> <div class="navbar-nav"> <a class="nav-item nav-link active" href="#">Home <span class="sr-only">(current)</span></a> <a class="nav-item nav-link" href="#">About</a> <a class="nav-item nav-link" href="#">Contact</a> </div> <form class="form-inline ml-auto"> <input class="form-control mr-sm-2" type="search" placeholder="Search" aria-label="Search"> <button class="btn btn-outline-success my-2 my-sm-0" type="submit">Search</button> </form> </div> </nav> </body> </html> ``` 下一步,我们添加一个侧边和主要内容区域。侧边包括一些链接和一些简单的介绍,主要内容区域包括一些文章和图片。我们使用Bootstrap的`container-fluid`、`row`、`col-md-3`和`col-md-9`类来实现这个效果。 ```html <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>My Website</title> <link rel="stylesheet" href="https://cdn.bootcss.com/bootstrap/4.3.1/css/bootstrap.min.css"> <script src="https://cdn.bootcss.com/jquery/3.4.1/jquery.min.js"></script> <script src="https://cdn.bootcss.com/popper.js/1.15.0/umd/popper.min.js"></script> <script src="https://cdn.bootcss.com/bootstrap/4.3.1/js/bootstrap.min.js"></script> </head> <body> <nav class="navbar navbar-expand-lg navbar-light bg-light"> <a class="navbar-brand" href="#">My Website</a> <button class="navbar-toggler" type="button" data-toggle="collapse" data-target="#navbarNavAltMarkup" aria-controls="navbarNavAltMarkup" aria-expanded="false" aria-label="Toggle navigation"> <span class="navbar-toggler-icon"></span> </button> <div class="collapse navbar-collapse" id="navbarNavAltMarkup"> <div class="navbar-nav"> <a class="nav-item nav-link active" href="#">Home <span class="sr-only">(current)</span></a> <a class="nav-item nav-link" href="#">About</a> <a class="nav-item nav-link" href="#">Contact</a> </div> <form class="form-inline ml-auto"> <input class="form-control mr-sm-2" type="search" placeholder="Search" aria-label="Search"> <button class="btn btn-outline-success my-2 my-sm-0" type="submit">Search</button> </form> </div> </nav> <div class="container-fluid"> <div class="row"> <div class="col-md-3"> <h3>Categories</h3> <ul class="list-group"> <li class="list-group-item"><a href="#">Category 1</a></li> <li class="list-group-item"><a href="#">Category 2</a></li> <li class="list-group-item"><a href="#">Category 3</a></li> </ul> <h3>About</h3> <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nulla ultricies eros id ligula eleifend, id posuere ex ornare.</p> </div> <div class="col-md-9"> <h2>Article 1</h2> <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nulla ultricies eros id ligula eleifend, id posuere ex ornare. Nam vel elit eget enim bibendum aliquet. Sed vel semper nulla. Aenean sed urna eget massa feugiat finibus. Fusce varius, leo at elementum sagittis, sapien lectus blandit dolor, sit amet efficitur nibh velit id enim. Aliquam imperdiet ex in consectetur commodo. Maecenas euismod nunc a leo lacinia, sit amet sodales orci hendrerit. Sed suscipit felis ante, vel gravida risus dapibus a. Cras vitae magna metus. </p> <img src="https://via.placeholder.com/800x400" class="img-fluid" alt="Responsive image"> <h2>Article 2</h2> <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nulla ultricies eros id ligula eleifend, id posuere ex ornare. Nam vel elit eget enim bibendum aliquet. Sed vel semper nulla. Aenean sed urna eget massa feugiat finibus. Fusce varius, leo at elementum sagittis, sapien lectus blandit dolor, sit amet efficitur nibh velit id enim. Aliquam imperdiet ex in consectetur commodo. Maecenas euismod nunc a leo lacinia, sit amet sodales orci hendrerit. Sed suscipit felis ante, vel gravida risus dapibus a. Cras vitae magna metus. </p> <img src="https://via.placeholder.com/800x400" class="img-fluid" alt="Responsive image"> <h2>Article 3</h2> <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nulla ultricies eros id ligula eleifend, id posuere ex ornare. Nam vel elit eget enim bibendum aliquet. Sed vel semper nulla. Aenean sed urna eget massa feugiat finibus. Fusce varius, leo at elementum sagittis, sapien lectus blandit dolor, sit amet efficitur nibh velit id enim. Aliquam imperdiet ex in consectetur commodo. Maecenas euismod nunc a leo lacinia, sit amet sodales orci hendrerit. Sed suscipit felis ante, vel gravida risus dapibus a. Cras vitae magna metus. </p> <img src="https://via.placeholder.com/800x400" class="img-fluid" alt="Responsive image"> </div> </div> </div> </body> </html> ``` 最后,我们可以在不同的页面之间添加链接,以便用户可以轻松地浏览网站的不同部分。例如,我们可以在导航中添加一个链接到“About”页面,然后创建一个新的HTML文件来显示关于我们的信息。 这里是一个简单的例子,展示如何使用Bootstrap创建一个基本的网站。你可以根据你的需要进行修改和扩展,以创建一个更完整、更专业的网站。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值