CSS3 media queries结合jQuery实现响应式导航


Posted in Javascript onSeptember 30, 2016

目的:

实现一个响应式导航,当屏幕宽度大于700px时,效果如下:

CSS3 media queries结合jQuery实现响应式导航

当屏幕宽度小于700px时,导航变成一个小按钮,点击之后有一个菜单慢慢拉下来:

 CSS3 media queries结合jQuery实现响应式导航

思路:

1.为了之后在菜单上绑定事件,并且不向DOM中添加多余的节点,在大屏幕中出现的导航和小屏幕中的下拉导航必须是一个。

   所以我选择了将导航绝对定位。

2.默认导航列表是出现的,当屏幕宽度小于700px时它隐藏,并且设置position,当屏幕宽度大于700px时,它出现。或者,默认导航列表是隐藏的,当屏幕宽度大于700px时它出现在右侧,小于时隐藏。

问题:

开始的时候,我选择了默认他出现,然后出现了一个问题——只要按过了按钮,屏幕放大之后导航列表就再也不会出现了。

代码如下:

<div class="nav-box">
    <ul class="nav">
     <li><a href="javascript:void(0);" class="toHome active">Home</a></li>
     <li><a href="javascript:void(0);" class="toPort">Portfolio</a></li>
     <li><a href="javascript:void(0);" class="toCont">Contact</a></li>
    </ul>
    <a href="javascript:void(0);" class="nav-btn">...</a>
</div>
.nav-box {
  position: relative;
}
.nav-btn {
  display: none;
  color: #DE6B73;
  float: right;
  line-height: 20px;
  margin: 35px 0;
}
.nav {
  display: block ;
  border-top: none;
  position: absolute;
  right: 0;
}
@media(max-width:700px){
  .nav-btn{
    display: inline-block;
  }
}
@media(max-width:700px){
 .nav {
  display: none;
  top: 80px;
  background-color: #F79C9C;
  border-top: 1px solid #FFF;
  line-height: 60px;
 }  
}
window.onload=function(){
  $(".nav-btn").click(function(){
    $(".nav").slideToggle(500);
  });
}

于是我以为是我的思路出现了问题,我换成了默认他隐藏的方式。结果还是一样,只要按过了按钮,他就再也不会出现了。于是我开始怀疑jQuery。

解决:

然后我在F12中发现,我按过按钮之后,他会出现这样一个样式:

CSS3 media queries结合jQuery实现响应式导航

原来这一切都是slideToggle搞的鬼,他是通过设置元素的内联样式让元素隐藏,这种方法设置的样式的优先级是三种方式中最高的,所以在CSS中设置的block根本没有用了。

要解决这个问题,可以使用js,也可以用一个优先级更高的方式:!important.

如果选择用!important的话,就需要设置导航列表是默认隐藏的,不然他永远都无法隐藏了。

最后的CSS代码如下:

.nav {
  display: none;
  position: absolute;
  right: 10%;
  top: 80px;
  background-color: #F79C9C;
  border-top: 1px solid #FFF;
  line-height: 60px;
}
.nav-btn {
  display: none;
  color: #DE6B73;
  float: right;
  line-height: 20px;
  margin: 35px 0;
}
@media(max-width:700px){
  .nav-btn{
    display: inline-block;
  }
}
@media(min-width:700px){
  .nav {
    display: block !important;
    border-top: none;
    top: 15px;
    right: 0;
  }
}

总结:

不真正理解一个框架的原理就去用,是很危险的。

我之后试了一个jQuery的.css()方法,他同样是用内联的方式改变的元素的样式。

看样子需要研究一个jQuery是如何工作的了,这样应用的时候才能理解他的行为。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
js中数组Array的一些常用方法总结
Aug 12 Javascript
js实现连个数字相加而不是拼接的方法
Feb 23 Javascript
jquery获取radio值实例
Oct 16 Javascript
使用JQuery中的trim()方法去掉前后空格
Sep 16 Javascript
基于JavaScript实现的快速排序算法分析
Apr 14 Javascript
67 个节约开发时间的前端开发者的工具、库和资源
Sep 12 Javascript
Node.js 使用递归实现遍历文件夹中所有文件
Sep 18 Javascript
node vue项目开发之前后端分离实战记录
Dec 13 Javascript
从零开始封装自己的自定义Vue组件
Oct 09 Javascript
Vue实现回到顶部和底部动画效果
Jul 31 Javascript
JS实现多选框的操作
Jun 24 Javascript
vue npm install 安装某个指定的版本操作
Aug 11 Javascript
微信小程序 LOL 英雄介绍开发实例
Sep 30 #Javascript
javascript的几种写法总结
Sep 30 #Javascript
Vue.js实现拖放效果的实例
Sep 30 #Javascript
PHP抓取HTTPS内容和错误处理的方法
Sep 30 #Javascript
Vue.js动态添加、删除选题的实例代码
Sep 30 #Javascript
关于List.ToArray()方法的效率测试
Sep 30 #Javascript
微信小程序 window_x64环境搭建
Sep 30 #Javascript
You might like
PHP中实现图片的锐化
2006/10/09 PHP
我的论坛源代码(九)
2006/10/09 PHP
wiki-shan写的php在线加密的解密程序
2008/09/07 PHP
php5 apache 2.2 webservice 创建与配置(java)
2011/01/27 PHP
PHP+apc+ajax实现的ajax_upload上传进度条代码
2016/01/25 PHP
Google Map Api和GOOGLE Search Api整合实现代码
2009/07/18 Javascript
精通JavaScript 纠正 cleanWhitespace函数
2010/03/11 Javascript
jquery 跨域访问问题解决方法(笔记)
2011/06/08 Javascript
js正则表达exec与match的区别说明
2014/01/29 Javascript
js通过八个点 拖动改变div大小的实现方法
2014/03/05 Javascript
Javascript玩转继承(二)
2014/05/08 Javascript
JQuery用户名校验的具体实现
2016/03/18 Javascript
jquery实现图片列表鼠标移入微动
2016/12/01 Javascript
JavaScript实现左右下拉框动态增删示例
2017/03/09 Javascript
Javascript 严格模式use strict详解
2017/09/16 Javascript
用jQuery将JavaScript对象转换为querystring查询字符串的方法
2018/11/12 jQuery
详解如何用typescript开发koa2的二三事
2018/11/13 Javascript
Node.js 实现抢票小工具 &amp; 短信通知提醒功能
2019/10/22 Javascript
js 实现碰撞检测的示例
2020/10/28 Javascript
python类定义的讲解
2013/11/01 Python
一个简单的python程序实例(通讯录)
2013/11/29 Python
Python利用flask sqlalchemy实现分页效果
2020/08/02 Python
python简单验证码识别的实现方法
2019/05/10 Python
PyQt5显示GIF图片的方法
2019/06/17 Python
python 基于dlib库的人脸检测的实现
2019/11/08 Python
Python连接SQLite数据库并进行增册改查操作方法详解
2020/02/18 Python
Python Request类源码实现方法及原理解析
2020/08/17 Python
Casadei卡萨蒂官网:意大利奢侈鞋履品牌
2017/10/28 全球购物
Etam艾格英国官网:法国著名女装品牌
2019/04/15 全球购物
信息总监管理职责范本
2014/03/08 职场文书
党的群众路线对照检查材料
2014/09/22 职场文书
法院四风对照检查材料思想汇报
2014/10/06 职场文书
教师三严三实心得体会
2014/10/11 职场文书
党员个人党性分析材料
2014/12/18 职场文书
爱心捐款感谢信
2015/01/20 职场文书
Flink 侧流输出源码示例解析
2022/09/23 Servers