首页 > 其他分享 >js和CSS3媒体查询制作简单的响应式导航菜单

js和CSS3媒体查询制作简单的响应式导航菜单

时间:2024-11-29 16:22:04浏览次数:7  
标签:CSS3 box none 菜单 color menu js width

这是一款使用纯js和css3媒体查询制作的简单的响应式导航菜单效果。该导航菜单类似bootstrap导航菜单,它通过media query制作760像素断点,当视口小于760像素时,菜单会收缩为隐藏的汉堡包菜单。

在线演示  下载

 使用方法

 HTML结构

该导航菜单使用<nav>元素最为包裹容器,div.menu_button_wrapper是汉堡包图标,无序列表.menu_list是菜单项。

<nav>
    <div id="menu_button_wrapper">
        <div id="menu_button">
            Menu  
            <div id="hamburger">
                <span></span>
                <span></span>
                <span></span>
            </div>
        </div>
        <div class="clearfix"></div>
    </div>
    
    <ul id="menu_list">
        <li class="current_page"><a href="#">Home</a></li>
        <li><a href="#">Audio</a></li>
        <li><a href="#">Video</a></li>
        <li><a href="#">About Us</a></li>
        <li><a href="#">Contacts</a></li>
    </ul>
</nav>
                
 CSS样式

为导航菜单添加一些必要的CSS样式。

nav {
  font-family: Helvetica;
  text-align: right;
  text-transform: uppercase;
  background-color: #222;
}

nav ul {
  width: 90%;
  max-width: 1024px;
  margin: 0 auto;
  list-style-type: none;
}

nav ul li { display: inline-block; }

nav ul li a {
  color: #9d9d9d;
  font-weight: bold;
  text-decoration: none;
  display: inline-block;
  padding: 1em;
  box-sizing: border-box;
}

nav ul li a:hover { color: white; }

.current_page { background-color: black; }

.current_page a { color: white; }

#menu_button_wrapper { display: none; }

.hidden { display: none; }                  
                

然后通过media query媒体查询制作760像素时的断点。

@media (max-width: 760px) {

  #menu_button_wrapper {
    display: block;
    padding: 1em;
    color: #9d9d9d;
    border-bottom: 1px solid #101010;
    -webkit-box-shadow: 0 1px 0 rgba(255,255,255,.1);
    box-shadow: 0 1px 0 rgba(255,255,255,.1);
    margin-bottom: .5em;
  }

  #menu_button {
    box-sizing: border-box;
    float: right;
    padding: .5em 1em;
    border: 1px solid #333;
    border-radius: 5px;
    color: white;
    -webkit-touch-callout: none;
    -webkit-user-select: none;
    -khtml-user-select: none;
    -moz-user-select: none;
    -ms-user-select: none;
    user-select: none;
  }

  #menu_button:hover {
    cursor: pointer;
    background-color: #333;
  }

  #hamburger {
    float: right;
    padding-top: .15em;
  }

  #menu_button span {
    display: block;
    background-color: #fff;
    width: 1.2em;
    height: .15em;
    border-radius: 1px;
    margin-bottom: .2em;
  }

  nav ul {
    width: 100%;
    margin: 0 auto;
    padding: 0;
    box-sizing: border-box;
  }

  nav ul li { display: block; }

  nav ul li a { width: 100%; }
  
}                  
                
 JavaScript

该导航菜单通过JavaScript代码来监听浏览器窗口的尺寸变化,为相应的菜单元素添加和移除相应的class类。

function addListener(element, type, callback) {
    if (element.addEventListener) {
        element.addEventListener(type, callback);
    } else if (element.attachEvent) {
        element.attachEvent('on' + type, callback);
    }
}

addListener(document, 'DOMContentLoaded', function () {
    
    var mq = window.matchMedia("(max-width: 760px)");
    if (mq.matches) {
        document.getElementById("menu_list").classList.add("hidden");
    }

    addListener(document.getElementById("menu_button"), 'click', function () {
        document.getElementById("menu_list").classList.toggle("hidden");
    });
    
    addListener(window, 'resize', function () {
        var width = window.innerWidth ||
                    document.documentElement.clientWidth ||
                    document.body.clientWidth;
        
        if (width > 760) {
            document.getElementById("menu_list").classList.remove("hidden");
        } else {
            document.getElementById("menu_list").classList.add("hidden");
        }
    });
    
});  

标签:CSS3,box,none,菜单,color,menu,js,width
From: https://www.cnblogs.com/mybook000/p/18577007

相关文章

  • 揭秘JSONP原理:跨域数据传输的魔法钥匙!
    JSONP(JSONwithPadding)是一种通过动态创建<script>标签来实现跨域请求的技术。它利用了浏览器允许从不同源加载JavaScript文件的特性,从而绕过同源策略的限制。JSONP原理客户端发起请求:客户端创建一个 <script> 标签,并将其 src 属性设置为包含回调函数名的URL。服......
  • 基于数据可视化+SSM+JSP的校园心理健康网站系统的设计与实现(供毕业设计、课程设计参考
    文章目录1.内容见下图2.详细视频演示3.系统运行效果介绍4.技术框架4.1前后端分离架构介绍4.3程序操作流程5.项目推荐6.成品项目7.系统测试7.1系统测试的目的7.2系统功能测试8.代码参考9.为什么选择我?10.获取源码1.内容见下图2.详细视频演示文章......
  • node.js毕设家庭财务管理系统程序+论文
    本系统(程序+源码+数据库+调试部署+开发环境)带文档lw万字以上,文末可获取源码系统程序文件列表开题报告内容一、选题背景关于家庭财务管理系统的研究,现有研究主要以企业或大型机构的财务管理为主,专门针对家庭财务管理系统的研究较少。在国内外,虽然财务管理相关理论与系统开......
  • node.js毕设基于人脸识别的药物交易平台程序+论文
    本系统(程序+源码+数据库+调试部署+开发环境)带文档lw万字以上,文末可获取源码系统程序文件列表开题报告内容一、选题背景关于药物交易平台的研究,现有研究主要以传统交易模式为主,专门针对基于人脸识别技术的药物交易平台的研究较少。在当今数字化时代,人脸识别技术在众多领域......
  • js垃圾回收的方式有哪些?
    JS的垃圾回收主要有两种方式:标记清除(Mark-and-Sweep):这是最常用的垃圾回收方式。它分为两个阶段:标记阶段:垃圾回收器从根对象(例如全局对象)开始遍历,标记所有可访问的对象。可访问的对象指的是那些仍然被引用的对象。清除阶段:垃圾回收器遍历堆内存,清除所有未被标记的对象,也......
  • 举例说明js创建数组有哪些方法?
    JS创建数组有多种方法,以下列举几种常见的方式并举例说明:数组字面量(ArrayLiteral):这是最常用且最简洁的方法。使用方括号[]包含数组元素,元素之间用逗号分隔。constarr1=[1,2,3,"hello",true,{name:"John"}];//包含不同数据类型的数组constemptyArr=......
  • 用js封装一个对cookie操作的方法
    /***Cookie操作工具类*/constCookieUtil={/***设置cookie*@param{string}namecookie名称*@param{string}valuecookie值*@param{Object}options可选参数*-{number}expires过期时间(单位:天)*-{string}path......
  • 用js实现最大化和最小化窗口
    //最大化窗口functionmaximizeWindow(){if(window.innerWidth<screen.availWidth||window.innerHeight<screen.availHeight){if(document.documentElement.requestFullscreen){document.documentElement.requestFullscreen();}elseif(d......
  • 个人js相关方法实现
    js判断类型的方法实现//设置为全局方法,返回方法的小写类型(function(){window.getTypeLowerCase=function(param){//consttoString=Object.create({}).toString;consttoString={}.toString;returntypeofparam==='object'?......
  • node.js毕设基于微信小程序的图书推荐系统程序+论文
    本系统(程序+源码+数据库+调试部署+开发环境)带文档lw万字以上,文末可获取源码系统程序文件列表开题报告内容一、选题背景关于图书推荐系统的研究,现有研究主要集中在网页端或者独立APP的开发上,专门针对微信小程序这一平台开发图书推荐系统的研究较少。在国内外,图书推荐系统多......