利用a标签的锚点实现目录结构

平时我们看到一些官方文档都会发现一些类似的结构,左边是一个固定侧边栏目录,右边是内容展示区,点击目录的每一项,右边都会跳转到对应的位置,其实这就是锚点实现的。

图片以elementUI为例子,就是这样一种目录结构。

学过vue的我,一开始以为是用路由来实现的,虽然也可以实现,但着实有些鸡肋。

其实原理十分简单,就是用到一个a标签的锚点来实现的。

<a href="#title1">第一章</a>
<a name="title1">
    <div class="item">内容1</div>
</a>

下面是我个人写的一个小demo,点击不同的章节跳转到不同的内容区域。


<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <style>
        * {
            margin: 0;
            padding: 0;
        }

        .container {
            display: flex;
        }

        .left {
            flex: 1;
            background-color: rgb(10, 219, 219);
            display: flex;
            flex-direction: column;
            position: fixed;
            width: 200px;
            height: 100%;

        }

        .right {
            flex: 5;
            margin-left: 200px;
            background-color: aquamarine;
        }
        .right a {
            display: block;
        }
        .item {
            height: 500px;
        }
    </style>
</head>

<body>
    <div class="container">
        <div class="left">
            <a href="#title1">第一章</a>
            <a href="#title2">第二章</a>
            <a href="#title3">第三章</a>
            <a href="#title4">第四章</a>
            <a href="#title5">第五章</a>
            <a href="#title6">第六章</a>
            <a href="#title7">第七章</a>
            <a href="#title8">第八章</a>
            <a href="#title9">第九章</a>
        </div>
        <div class="right">
            <a name="title1">
                <div class="item">内容1</div>
            </a>
            
            <a name="title2">
                <div class="item">内容2</div>
            </a>
            <a name="title3">
                <div class="item">内容3</div>
            </a>
            <a name="title4">
                <div class="item">内容4</div>
            </a>

            <a name="title5">
                <div class="item">内容5</div>
            </a>
            <a name="title6">
                <div class="item">内容6</div>
            </a>
            <a name="title7">
                <div class="item">内容7</div>
            </a>
            <a name="title8">
                <div class="item">内容8</div>
            </a>
            <a name="title9">
                <div class="item">内容9</div>
            </a>
        </div>
    </div>
</body>
</html>

模板二:推荐

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<style>
    *{
        margin: 0;
        padding: 0;
    }
    .container{
        display: flex;
    }
    .siderBar{
        position: fixed;
        top: 0;
        left: 0;
        background-color: darkcyan;
        min-width: 200px;
    }
    .siderBar a{
        display: block;
    }
    .main {
        margin-left: 200px;
        flex: 1;
    }
    .main div{
        height: 500px;
    }
    #a1:nth-of-type(1){
        background: #000;
    }
    #a2:nth-of-type(2){
        background: rgb(196, 71, 71);
    }
    #a3:nth-of-type(3){
        background: rgb(18, 184, 59);
    }
    #a4:nth-of-type(4){
        background: rgb(212, 200, 21);
    }
</style>
<body>
    <div class="container">
        <div class="siderBar">
            <a href="#a1">第一章</a>
            <a href="#a2">第二章</a>
            <a href="#a3">第三章</a>
            <a href="#a4">第四章</a>
        </div>
        <div class="main">
            <div id="a1">内容1</div>
            <div id="a2">内容2</div>
            <div id="a3">内容3</div>
            <div id="a4">内容4</div>
        </div>
    </div>
</body>
</html>

附带小知识:

a的target="_blank"会新开一个页面。

<a href="http://" target="_blank" rel="noopener noreferrer"></a>

获取网页的url地址

console.log(location.href)

哈希地址就是#号后面的一段,获取哈希地址方式:

console.log(location.hash)
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容