博客园装饰——(一)置顶菜单栏

博客园装饰——(一)置顶菜单栏

功能描述:当页面向下滚动到菜单栏上边沿触碰到浏览器窗口上边沿时,菜单栏会固定地显示在浏览器窗口上方(贴紧),即达到了置顶菜单栏的效果。而当页面向上滚动到原来的位置时,菜单栏又会自动返回文档流,即回到初始的位置。

博客园装饰——(一)置顶菜单栏

一、功能描述

1.1 文字描述

  • 当页面向下滚动到 菜单栏上边沿触碰到浏览器窗口上边沿时,菜单栏会 固定地显示在浏览器窗口上方(贴紧),即达到了 置顶菜单栏的效果。而当页面向上滚动到原来的位置时,菜单栏又会自动返回文档流,即 回到初始的位置

1.2 图片效果展示

1.2.1 例程(demo)效果展示

博客园装饰——(一)置顶菜单栏

1.2.2 本人博客园效果展示

博客园装饰——(一)置顶菜单栏

有现成的效果哟~你确定不试一哈?

二、 代码展示

2.1 html 部分


            菜单栏

        (div.text+br*10)*10

我们的菜单栏(id=”navigator”)的div盒子,是在(id=”header”)的盒子内部

2.2 CSS 部分


    body{
        padding: 0px;
        margin:0px;
    }

    #header{
        width:100%;
        /*background-color: lightblue;*/
    }

    #navigator, #navigator1{
        width:100%;
        background-color:gold;
        text-align: center;
        height:150px;
        font:bold 75px/150px 'Microsoft Yahei';
        /*opacity: 0.5;*/
    }
    /*用于当navigator脱离文档流时,navigator1来进行填充原来的空位*/
    #navigator1{
        /*由于刚开始,navigator(即菜单栏)没有脱离文档流,所以先不展示navigator1*/
        display:none;
    }

    .else{
        width:100%;
        height:200px;
        background-color: green;
    }

    .text{
        text-align: center;
        font:bold 25px/25px 'Microsoft Yahei';
    }

由于 “navigator1”博客园自带的html标签没有使用这个ID选择器(因为这是我们自己新增的一个选择器,为了当 “navigator”脱离文档流时对原位置进行填充),所以我们需要下面的js代码来写入一个div标签,并且应用该ID选择器。具体原因,请看下面的 重难点详解

2.3 JS 部分


    $(function(){
        // 获取header这个标签元素
        var $header = $('#header');
        $header.html( $header.html() + '<div id="navigator1"></div>' );

        var $navigator = $('#navigator');
        var $navigator1 = $('#navigator1');

        $(window).scroll(function(){
            var $iNum = $(document).scrollTop();
            //监控页面滚动距离,并显示在标签页上
            // document.title = $iNum;  // 200 触发事件

            // 200 非固定值,根据自己的需要修改,最好就是滚动到菜单栏上边沿时触发
            if ( $iNum >= 200){
                /*
                    当页面滚动200px时,为navigator写入样式,使其固定定位到浏览器窗口上边沿
                    此时会发生脱离文档流现象
                */
                $navigator.css({
                    'position':'fixed',
                    'top':0
                })
                // 相当于将navigator1的display的"none"改成"block"
                $navigator1.show();

            }
            else{
                /*设置为未定位,返回文档流*/
                $navigator.css({
                    'position':'static'
                })
                // 设置回"none",即隐藏
                $navigator1.hide();
            }
        })

    })

由于博客园原文档流当中没有””这一句,所以需要通过js写入

三、重难点详解

3.1 页面内容跳变现象(脱离文档流)

3.1.1 动图演示

博客园装饰——(一)置顶菜单栏

你会发现~♪菜单栏下面的”文档内容”这一行字会 突然跳到 菜单栏三个大字 中间,这就是我所说的所谓的 跳变现象,那这是为什么呢?

3.1.2 原因

如果你能看到这,答案相信已经很明了了,就是因为菜单栏应用了 固定定位以后,发生了 脱离文档流现象,导致外面的盒子 header的高度变小了,从而使得下面的内容自动往上排版,从而出现 页面内容跳变的现象。

3.1.3 解决方法

① 利用 js 获取 header 元素,通过 xxx.html( ) 方法写入 ” “

② 在CSS部分中,让”navigator1″应用 相同的样式(保证占据与菜单栏相同的高度),并且先不展示 (display:none;)

当”navigator”脱离文档流以后,让”navigator1″展示出来, 占据(填充)原来”navigator”的位置,从而达到克服页面跳变现象。

博客园装饰——(一)置顶菜单栏

四、总结与后言

整体设计思路也并不复杂,主要注意脱离文档流以后导致的跳变现象。由于可能每个博客的样式与具体html文档内容不同,所以博主我在这里只提供了一个demo,大致的原理已经提及了。大家可以先通过demo自己研究一遍,再进行设计, 毕竟自己设计的才是最符合自己心意的,并且能从中学到新知识。

博主还有其他几篇关于博客园装饰的文章,可供观看哟~
博客园装饰——(二)滚动到页面顶部或底部
博客园装饰——(三)博客园导航目录

Original: https://www.cnblogs.com/fry-hell/p/13338205.html
Author: 油炸地狱
Title: 博客园装饰——(一)置顶菜单栏

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/612520/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

  • OSI模型 TCP/IP协议

    系统中每打开一个程序,系统会自动分配一个端口号(0~65535) 端口号:来区分应用程序 网络层:传给哪台主机 加入ip地址(源发出去的地址 目:目的地址)选路 数据链路层:mac…

    Linux 2023年6月6日
    0134
  • sql server的简单分页

    — 显示前条数据 select top(4) * from students; –pageSize: 每页显示的条数 –pageNow: 当前页…

    Linux 2023年6月7日
    0151
  • redis之SDS

    SDS:的优点1.获取长度复杂度为O(1)2.避免strcat内存重分配(可能涉及系统调用), 通过[预分配策略]和[惰性空间释放]实现 3.以二进制存储,主要是安全设计,若存储的…

    Linux 2023年5月28日
    0116
  • ESXI系列问题整理以及记录——使用SSH为设备打VIB驱动包,同时提供一种对于ESXI不兼容螃蟹网卡(Realtek 瑞昱)的问题解决思路

    对于ESXI不兼容螃蟹网卡的问题,这里建议购买一张博通的低端单口千兆网卡,先使用博通网卡完成系统部署,再按照下文方法添加螃蟹网卡的VIB驱动,最后拆除博通网卡。 螃蟹网卡VIB驱动…

    Linux 2023年6月13日
    0129
  • 你有想过在同一台服务器中,同时多开几个tomcat吗

    tomcat作为许多java项目的运行的环境,常用来跑java项目。而一台服务器只跑一个tomcat服务又太浪费资源了,so,我们可以在同一台服务器上,同时跑多个tomcat服务进…

    Linux 2023年6月8日
    0124
  • 生成符合chrome要求的自签名HTTPS证书

    按照文章给Nginx配置一个自签名的SSL证书中给出的代码生成自签名证书后,发现使用chrome浏览器访问会报 Invalid self signed SSL cert &#821…

    Linux 2023年6月6日
    0113
  • docker save与docker export实现docker镜像与容器的备份

    本来想写一篇关于docker save/export/commit/load/import之间的关系的文章,后来看了看,已经有很多人写过了,我就不做重复工作了。 参见: docke…

    Linux 2023年6月6日
    0150
  • RAID磁盘阵列

    RAID磁盘阵列 *本章重点:了解各RAID级别的原理优缺点及常用级别实现,企业中厂商大多提供了硬RAID方案。 1、什么是RAID? “RAID”一词是由…

    Linux 2023年6月7日
    0135
  • Golang 实现 Redis(5): 使用跳表实现 SortedSet

    本文是使用 golang 实现 redis 系列的第五篇, 将介绍如何使用跳表实现有序集合(SortedSet)的相关功能。 跳表(skiplist) 是 Redis 中 Sort…

    Linux 2023年5月28日
    0123
  • 七、软件包管理

    Linux软件管理分类: 1、rpm包管理 —– yum工具2、源码包管理RedhatCentosDebianUbuntu包名.rpm如何获取rpm包?互联…

    Linux 2023年6月7日
    0156
  • [转帖]shell 学习之正则、别名以及管道重定向

    404. 抱歉,您访问的资源不存在。 可能是网址有误,或者对应的内容被删除,或者处于私有状态。 代码改变世界,联系邮箱 contact@cnblogs.com 园子的商业化努力-困…

    Linux 2023年5月28日
    0135
  • Java刷题笔记7.25

    一个类构造方法的作用是什么? &#x4E3B;&#x8981;&#x662F;&#x5B8C;&#x6210;&#x5BF9;&am…

    Linux 2023年6月7日
    0153
  • 关于熵,条件熵,交叉熵等的介绍

    参考:《数学之美》一文搞懂交叉熵在机器学习中的使用,透彻理解交叉熵背后的直觉详解机器学习中的熵、条件熵、相对熵和交叉熵常用的分类问题中的损失函数 1.信息量与信息熵 香农在他著名的…

    Linux 2023年6月13日
    0130
  • 基于CentOS系统安装OceanBase数据库

    一、OceanBase介绍 OceanBase是由蚂蚁集团完全自主研发的金融级分布式关系数据库,始创于2010年。OceanBase具有数据强一致、高可用、高性能、在线扩展、高度兼…

    Linux 2023年5月27日
    0118
  • MySQL备份与恢复

    MySQL备份与恢复 备份是数据安全的最后一道防线,对于任何数据丢失的场景,备份虽然不一定能恢复百分之百的数据(取决于备份周期),但至少能将损失降到最低。 数据丢失的场景举例: 人…

    Linux 2023年6月7日
    0225
  • Linux NTP服务配置

    bash;gutter:true; 外部ntp服务器地址:0.cn.pool.ntp.org 内部ntp服务器地址1:192.168.57.200 内部ntp服务器地址2:192….

    Linux 2023年6月13日
    090
亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球