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 相关文章推荐
javascript控制swfObject应用介绍
Nov 29 Javascript
Jquery跳到页面指定位置的方法
May 12 Javascript
jQuery实现预加载图片的方法
Mar 17 Javascript
jQuery页面刷新(局部、全部)问题分析
Jan 09 Javascript
Javascript生成全局唯一标识符(GUID,UUID)的方法
Feb 27 Javascript
JavaScript设计模式之单体模式全面解析
Sep 09 Javascript
js addDqmForPP给标签内属性值加上双引号的函数
Dec 24 Javascript
javascript将url解析为json格式的两种方法
Aug 18 Javascript
微信小程序实现日期格式化和倒计时
Nov 01 Javascript
微信小程序仿通讯录功能
Apr 09 Javascript
JavaScript cookie原理及使用实例
May 08 Javascript
使用javascript解析二维码的三种方式
Nov 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在XP下IIS和Apache2服务器上的安装
2006/09/05 PHP
获得Google PR值的PHP代码
2007/01/28 PHP
php empty函数判断mysql表单是否为空
2010/04/12 PHP
PHP测试程序运行时间的类
2012/02/05 PHP
PHP利用func_get_args和func_num_args函数实现函数重载实例
2014/11/12 PHP
php结合curl实现多线程抓取
2015/07/09 PHP
twig里使用js变量的方法
2016/02/05 PHP
实例说明js脚本语言和php脚本语言的区别
2019/04/04 PHP
JavaScript类和继承 this属性使用说明
2010/09/03 Javascript
js常用自定义公共函数汇总
2014/01/15 Javascript
JavaScript立即执行函数的三种不同写法
2014/09/05 Javascript
JavaScript学习笔记之基础语法
2015/01/22 Javascript
javascript常用的方法整理
2015/08/20 Javascript
iscroll碰到Select无法选择下拉刷新的解决办法
2016/05/21 Javascript
JSON键值对序列化和反序列化解析
2017/01/24 Javascript
实例讲解DataTables固定表格宽度(设置横向滚动条)
2017/07/11 Javascript
在Mac下彻底卸载node和npm的方法
2018/05/16 Javascript
微信小程序基于canvas渐变实现的彩虹效果示例
2019/05/03 Javascript
Vue axios 跨域请求无法带上cookie的解决
2020/09/08 Javascript
[37:02]OG vs INfamous 2019国际邀请赛小组赛 BO2 第二场 8.15
2019/08/17 DOTA
linux环境下安装pyramid和新建项目的步骤
2013/11/27 Python
Python实现通过文件路径获取文件hash值的方法
2017/04/29 Python
python实现浪漫的烟花秀
2019/01/30 Python
Python for i in range ()用法详解
2020/09/18 Python
python 字典访问的三种方法小结
2019/12/05 Python
Python模块/包/库安装的六种方法及区别
2020/02/24 Python
Python threading.local代码实例及原理解析
2020/03/16 Python
浅析python 动态库m.so.1.0错误问题
2020/05/09 Python
pandas之分组groupby()的使用整理与总结
2020/06/18 Python
表达自我的市场:Society6
2018/08/01 全球购物
Under Armour西班牙官网:美国知名的高端功能性运动品牌
2018/12/12 全球购物
社会实践自我鉴定
2013/11/07 职场文书
七年级地理教学计划
2015/01/22 职场文书
创建文明城市倡议书
2015/04/28 职场文书
Nginx设置日志打印post请求参数的方法
2021/03/31 Servers
分享五个Node.js开发的优秀实践 
2022/04/07 NodeJs