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图片延迟技术一般的思路与示例
Mar 20 Javascript
jquery复选框checkbox实现删除前判断
Apr 20 Javascript
jQuery 获取/设置/删除DOM元素的属性以a元素为例
May 23 Javascript
javascript函数式编程实例分析
Apr 25 Javascript
jQuery Validation Plugin验证插件手动验证
Jan 26 Javascript
vue 请求后台数据的实例代码
Jun 22 Javascript
Underscore之Array_动力节点Java学院整理
Jul 10 Javascript
对于Javascript 执行上下文的全面了解
Sep 05 Javascript
解决html-jquery/js引用外部图片时遇到看不了或出现403的问题
Sep 22 jQuery
详解使用webpack打包编写一个vue-toast插件
Nov 08 Javascript
vue基本使用--refs获取组件或元素的实例
Nov 07 Javascript
小程序新版订阅消息模板消息
Dec 31 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
WindowsXP中快速配置Apache+PHP5+Mysql
2008/06/05 PHP
PHP curl_setopt()函数实例代码与参数分析
2011/06/02 PHP
windows系统下简单nodejs安装及环境配置
2013/01/08 NodeJs
JS动态添加与删除select中的Option对象(示例代码)
2013/12/25 Javascript
改变隐藏的input中value的值代码
2013/12/30 Javascript
禁止iframe脚本弹出的窗口覆盖了父窗口的方法
2014/09/06 Javascript
node.js中的buffer.length方法使用说明
2014/12/14 Javascript
详解maxlength属性在textarea里奇怪的表现
2015/12/27 Javascript
JS生成不重复的随机数组的简单实例
2016/07/10 Javascript
AngularJS实现按钮提示与点击变色效果
2016/09/07 Javascript
用自定义图片代替原生checkbox实现全选,删除以及提交的方法
2016/10/18 Javascript
微信小程序 合法域名校验出错详解及解决办法
2017/03/09 Javascript
vue计算属性和监听器实例解析
2018/05/10 Javascript
vuejs 切换导航条高亮(路由菜单高亮)的方法示例
2018/05/29 Javascript
jQuery+Datatables实现表格批量删除功能【推荐】
2018/10/24 jQuery
在weex中愉快的使用scss的方法步骤
2020/01/02 Javascript
JS代码检查工具ESLint介绍与使用方法
2020/02/04 Javascript
Vue 中获取当前时间并实时刷新的实现代码
2020/05/12 Javascript
jQuery 隐藏/显示效果函数用法实例分析
2020/05/20 jQuery
[36:05]DOTA2亚洲邀请赛 3.31 小组赛 A组 Liquid vs Optic
2018/04/01 DOTA
[01:46]新英雄登场
2019/09/10 DOTA
Python中使用PDB库调试程序
2015/04/05 Python
python通过定义一个类实例作为ftp回调方法
2015/05/04 Python
python实现word 2007文档转换为pdf文件
2018/03/15 Python
python中yaml配置文件模块的使用详解
2018/04/27 Python
Python3.6 中的pyinstaller安装和使用教程
2020/03/16 Python
德国家具购物网站:Möbel Höffner
2019/08/26 全球购物
小米俄罗斯授权商店:Xiaomi俄罗斯
2019/12/08 全球购物
文秘自荐信
2013/10/20 职场文书
优秀管理者事迹材料
2014/05/22 职场文书
2014年入党积极分子学习三中全会思想汇报
2014/09/13 职场文书
环境卫生工作汇报材料
2014/10/28 职场文书
基层党员群众路线整改措施及努力方向
2014/10/28 职场文书
2016年教师政治思想表现评语
2015/12/02 职场文书
Python爬虫入门案例之爬取二手房源数据
2021/10/16 Python
MyBatis配置文件解析与MyBatis实例演示
2022/04/07 Java/Android