一个通用的网页布局,模仿Lodash 中文文档样式

10 篇文章 0 订阅

不知道怎么突然看到这个网站就觉得它的布局很神奇,因为自己之前想要做一个这样的布局,废了九牛二虎之力才实现并且代码比较繁琐,所以好好学习借鉴了一下

现在来介绍一下整个布局好的效果

首先看到的效果是这样的,分为头部和中间,中间的部分随着窗口大小而自适应高度。
左侧的菜单可以滚动,右边是文章,可以滚动浏览
在这里插入图片描述

文章滚动到底部时可以看到footer
在这里插入图片描述
在这里插入图片描述
第一步:
上中下布局通过flex实现
改变主轴方向,设置中间部分 flex:1 0 auto;
给头部添加粘性布局,并设置一个高度60px
第二部:
中间部分使用flex形成左右布局
第三部:important
左侧的导航栏套三层div

<div>
	<div>
		<div></div>
	</div>
</div>

中间一层设置高度100%
最大高度100vh
粘性布局 top:0;
设置padding-top:60px; (也就是头部div的高度)
box-size:border-box; 让盒子设置padding时不改变设置好的盒子大小
设置 dispaly:flex 并改变主轴方向

最里面一层设置 flex-grow:1; overflow-x:hidden;(这里我也不太清楚为什么,反正就是神奇般的产生了纵向的滚动条)

最外面一层的div设置margin-top:-60px;(也就是头部div的高度)

不要忘记

  • {
    padding: 0;
    margin: 0;
    }

    body,
    html {
    height: 100%;
    }

附上代码

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

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

        body,
        html {
            height: 100%;
        }

       
        #__docusaurus {
            display: flex;
            flex-direction: column;
            min-height: 100%;
        }

        .navbar--fixed-top {
            position: sticky;
            top: 0;
            z-index: 2;
            height: 60px;
        }

        .navbar {
            background-color: #d8d8d8;
        }

        .main-wrapper {
            flex: 1 0 auto;
            color: aliceblue;
            display: flex;
        }

        .docs-wrapper {
            background: #000;
        }

        .footer {
            background-color: blue;
            height: 200px;
        }


        .docPage_31aa {
            display: flex;
            width: 100%;
        }

        .docSidebarContainer_3Kbt {
            border-right: 1px solid #DADDE1;
            margin-top: -60px;
            clip-path: inset(0);
        }

        .sidebar_15mo {
            padding-top: 60px;
            background-color: rgb(42 29 57);
            display: flex;
            flex-direction: column;
            height: 100%;
            max-height: 100vh;
            width: 200px;
            position: sticky;
            top: 0;
            transition: opacity 50ms;
            box-sizing: border-box;
        }

        .menu_Bmed {
            flex-grow: 1;
            padding: .5rem;
        }

        .menu {
            overflow-x: hidden;
        }
    </style>
</head>

<body>
    <div id="__docusaurus">
        <div class="navbar navbar--fixed-top">
            <h1>网页布局</h1>
        </div>
        <div class="main-wrapper docs-wrapper doc-page">
            <div class="docPage_31aa">
                <div class="docSidebarContainer_3Kbt">
                    <div class="sidebar_15mo">
                        <div class="menu_Bmed menu">
                            <ul>
                                <li>1</li>
                                <li>2</li>
                                <li>3</li>
                                <li>4</li>
                                <li>5</li>
                                <li>6</li>
                                <li>7</li>
                                <li>8</li>
                                <li>9</li>
                                <li>10</li>
                                <li>11</li>
                                <li>12</li>
                                <li>13</li>
                                <li>14</li>
                                <li>15</li>
                                <li>16</li>
                                <li>17</li>
                                <li>18</li>
                                <li>19</li>
                                <li>20</li>
                                <li>21</li>
                                <li>22</li>
                                <li>23</li>
                                <li>24</li>
                                <li>25</li>
                                <li>26</li>
                                <li>27</li>
                                <li>28</li>
                                <li>29</li>
                                <li>30</li>
                                <li>31</li>
                                <li>32</li>
                                <li>33</li>
                                <li>34</li>
                                <li>35</li>
                                <li>36</li>
                                <li>37</li>
                                <li>38</li>
                                <li>39</li>
                                <li>40</li>
                                <li>41</li>
                                <li>42</li>
                                <li>43</li>
                                <li>44</li>
                                <li>45</li>
                                <li>46</li>
                                <li>47</li>
                                <li>48</li>
                                <li>49</li>
                                <li>50</li>
                                <li>51</li>
                                <li>52</li>
                                <li>53</li>
                                <li>54</li>
                                <li>55</li>
                                <li>56</li>
                                <li>57</li>
                                <li>58</li>
                                <li>59</li>
                                <li>60</li>
                                <li>61</li>
                                <li>62</li>
                                <li>63</li>
                                <li>64</li>
                                <li>65</li>
                                <li>66</li>
                                <li>67</li>
                                <li>68</li>
                                <li>69</li>
                                <li>70</li>
                            </ul>
                        </div>

                    </div>
                </div>
                <div class="docMainContainer_3ufF">
                    <p>
                        默认为0,即 即使存在剩余空间,也不会放大;
                        所有项目的flex-grow为1:等分剩余空间(自动放大占位);
                        flex-grow为n的项目,占据的空间(放大的比例)是flex-grow为1的n倍。
                        默认为0,即 即使存在剩余空间,也不会放大;
                        所有项目的flex-grow为1:等分剩余空间(自动放大占位);
                        flex-grow为n的项目,占据的空间(放大的比例)是flex-grow为1的n倍。
                        默认为0,即 即使存在剩余空间,也不会放大;
                        所有项目的flex-grow为1:等分剩余空间(自动放大占位);
                        flex-grow为n的项目,占据的空间(放大的比例)是flex-grow为1的n倍。
                        默认为0,即 即使存在剩余空间,也不会放大;
                        所有项目的flex-grow为1:等分剩余空间(自动放大占位);
                        flex-grow为n的项目,占据的空间(放大的比例)是flex-grow为1的n倍。
                    </p>
                    <p>
                        默认为0,即 即使存在剩余空间,也不会放大;
                        所有项目的flex-grow为1:等分剩余空间(自动放大占位);
                        flex-grow为n的项目,占据的空间(放大的比例)是flex-grow为1的n倍。
                        默认为0,即 即使存在剩余空间,也不会放大;
                        所有项目的flex-grow为1:等分剩余空间(自动放大占位);
                        flex-grow为n的项目,占据的空间(放大的比例)是flex-grow为1的n倍。
                        默认为0,即 即使存在剩余空间,也不会放大;
                        所有项目的flex-grow为1:等分剩余空间(自动放大占位);
                        flex-grow为n的项目,占据的空间(放大的比例)是flex-grow为1的n倍。
                        默认为0,即 即使存在剩余空间,也不会放大;
                        所有项目的flex-grow为1:等分剩余空间(自动放大占位);
                        flex-grow为n的项目,占据的空间(放大的比例)是flex-grow为1的n倍。
                    </p>
                    <p>
                        默认为0,即 即使存在剩余空间,也不会放大;
                        所有项目的flex-grow为1:等分剩余空间(自动放大占位);
                        flex-grow为n的项目,占据的空间(放大的比例)是flex-grow为1的n倍。
                        默认为0,即 即使存在剩余空间,也不会放大;
                        所有项目的flex-grow为1:等分剩余空间(自动放大占位);
                        flex-grow为n的项目,占据的空间(放大的比例)是flex-grow为1的n倍。
                        默认为0,即 即使存在剩余空间,也不会放大;
                        所有项目的flex-grow为1:等分剩余空间(自动放大占位);
                        flex-grow为n的项目,占据的空间(放大的比例)是flex-grow为1的n倍。
                        默认为0,即 即使存在剩余空间,也不会放大;
                        所有项目的flex-grow为1:等分剩余空间(自动放大占位);
                        flex-grow为n的项目,占据的空间(放大的比例)是flex-grow为1的n倍。
                    </p>
                    <p>
                        默认为0,即 即使存在剩余空间,也不会放大;
                        所有项目的flex-grow为1:等分剩余空间(自动放大占位);
                        flex-grow为n的项目,占据的空间(放大的比例)是flex-grow为1的n倍。
                        默认为0,即 即使存在剩余空间,也不会放大;
                        所有项目的flex-grow为1:等分剩余空间(自动放大占位);
                        flex-grow为n的项目,占据的空间(放大的比例)是flex-grow为1的n倍。
                        默认为0,即 即使存在剩余空间,也不会放大;
                        所有项目的flex-grow为1:等分剩余空间(自动放大占位);
                        flex-grow为n的项目,占据的空间(放大的比例)是flex-grow为1的n倍。
                        默认为0,即 即使存在剩余空间,也不会放大;
                        所有项目的flex-grow为1:等分剩余空间(自动放大占位);
                        flex-grow为n的项目,占据的空间(放大的比例)是flex-grow为1的n倍。
                    </p>
                    <p>
                        默认为0,即 即使存在剩余空间,也不会放大;
                        所有项目的flex-grow为1:等分剩余空间(自动放大占位);
                        flex-grow为n的项目,占据的空间(放大的比例)是flex-grow为1的n倍。
                        默认为0,即 即使存在剩余空间,也不会放大;
                        所有项目的flex-grow为1:等分剩余空间(自动放大占位);
                        flex-grow为n的项目,占据的空间(放大的比例)是flex-grow为1的n倍。
                        默认为0,即 即使存在剩余空间,也不会放大;
                        所有项目的flex-grow为1:等分剩余空间(自动放大占位);
                        flex-grow为n的项目,占据的空间(放大的比例)是flex-grow为1的n倍。
                        默认为0,即 即使存在剩余空间,也不会放大;
                        所有项目的flex-grow为1:等分剩余空间(自动放大占位);
                        flex-grow为n的项目,占据的空间(放大的比例)是flex-grow为1的n倍。
                    </p>

                    <p>
                        默认为0,即 即使存在剩余空间,也不会放大;
                        所有项目的flex-grow为1:等分剩余空间(自动放大占位);
                        flex-grow为n的项目,占据的空间(放大的比例)是flex-grow为1的n倍。
                        默认为0,即 即使存在剩余空间,也不会放大;
                        所有项目的flex-grow为1:等分剩余空间(自动放大占位);
                        flex-grow为n的项目,占据的空间(放大的比例)是flex-grow为1的n倍。
                        默认为0,即 即使存在剩余空间,也不会放大;
                        所有项目的flex-grow为1:等分剩余空间(自动放大占位);
                        flex-grow为n的项目,占据的空间(放大的比例)是flex-grow为1的n倍。
                        默认为0,即 即使存在剩余空间,也不会放大;
                        所有项目的flex-grow为1:等分剩余空间(自动放大占位);
                        flex-grow为n的项目,占据的空间(放大的比例)是flex-grow为1的n倍。
                    </p>

                    <p>
                        默认为0,即 即使存在剩余空间,也不会放大;
                        所有项目的flex-grow为1:等分剩余空间(自动放大占位);
                        flex-grow为n的项目,占据的空间(放大的比例)是flex-grow为1的n倍。
                        默认为0,即 即使存在剩余空间,也不会放大;
                        所有项目的flex-grow为1:等分剩余空间(自动放大占位);
                        flex-grow为n的项目,占据的空间(放大的比例)是flex-grow为1的n倍。
                        默认为0,即 即使存在剩余空间,也不会放大;
                        所有项目的flex-grow为1:等分剩余空间(自动放大占位);
                        flex-grow为n的项目,占据的空间(放大的比例)是flex-grow为1的n倍。
                        默认为0,即 即使存在剩余空间,也不会放大;
                        所有项目的flex-grow为1:等分剩余空间(自动放大占位);
                        flex-grow为n的项目,占据的空间(放大的比例)是flex-grow为1的n倍。
                    </p>
                </div>
            </div>

        </div>
        <footer class="footer footer--dark">
            @zpp
        </footer>
    </div>
</body>

</html>
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值