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 相关文章推荐
基于jquery 的一个progressbar widge
Oct 29 Javascript
js函数名与form表单元素同名冲突的问题
Mar 07 Javascript
javascript记录文本框内文字个数检测文字个数变化
Oct 14 Javascript
jQuery使用之设置元素样式用法实例
Jan 19 Javascript
怎么通过onclick事件获取js函数返回值(代码少)
Jul 28 Javascript
js HTML5多图片上传及预览实例解析(不含前端的文件分割)
Aug 26 Javascript
Vue.js 2.0 和 React、Augular等其他前端框架大比拼
Oct 08 Javascript
ES6概念 Symbol.keyFor()方法
Dec 25 Javascript
jQuery实现简单的计时器功能实例分析
Aug 29 jQuery
详解Vue template 如何支持多个根结点
Feb 10 Javascript
JavaScript offset实现鼠标坐标获取和窗口内模块拖动
May 30 Javascript
vue实现拖拽交换位置
Apr 07 Vue.js
微信小程序 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 事件机制(2)
2011/03/23 PHP
php面试实现反射注入的详细方法
2019/09/30 PHP
javascript json 新手入门文档
2009/12/03 Javascript
通过jquery还原含有rowspan、colspan的table的实现方法
2012/02/10 Javascript
Extjs4实现两个GridPanel之间数据拖拽功能具体方法
2013/11/21 Javascript
跟我学习javascript的arguments对象
2015/11/16 Javascript
Angular中$cacheFactory的作用和用法实例详解
2016/08/19 Javascript
JavaScript实现经纬度转换成地址功能
2017/03/28 Javascript
nodejs个人博客开发第七步 后台登陆
2017/04/12 NodeJs
详解vue-cli 脚手架项目-package.json
2017/07/04 Javascript
webpack下实现动态引入文件方法
2018/02/22 Javascript
浅谈webpack打包生成的bundle.js文件过大的问题
2018/02/22 Javascript
vue-router二级导航切换路由及高亮显示的实现方法
2019/07/10 Javascript
js实现转动骰子模型
2019/10/24 Javascript
解决Antd Table表头加Icon和气泡提示的坑
2020/11/17 Javascript
[02:32]DOTA2英雄基础教程 美杜莎
2014/01/07 DOTA
[00:57]英雄,你的补给到了!
2020/11/13 DOTA
python 2.6.6升级到python 2.7.x版本的方法
2016/10/09 Python
详解django三种文件下载方式
2018/04/06 Python
为什么str(float)在Python 3中比Python 2返回更多的数字
2018/10/16 Python
python 获取一个值在某个区间的指定倍数的值方法
2018/11/12 Python
Flask使用Pyecharts在单个页面展示多个图表的方法
2019/08/05 Python
Python 实现大整数乘法算法的示例代码
2019/09/17 Python
Anaconda之conda常用命令介绍(安装、更新、删除)
2019/10/06 Python
瑜伽国际:Yoga International
2018/04/18 全球购物
C++面试题:关于链表和指针
2013/06/05 面试题
优秀党员主要事迹
2014/01/19 职场文书
元旦晚会策划方案
2014/02/18 职场文书
2014高考励志标语
2014/06/05 职场文书
我的中国梦演讲稿300字
2014/08/19 职场文书
个人房屋买卖协议书(范本)
2014/10/04 职场文书
财务会计实训报告
2014/11/05 职场文书
四年级学生期末评语
2014/12/26 职场文书
母亲去世追悼词
2015/06/23 职场文书
2019朋友新婚祝福语精选
2019/10/10 职场文书
nginx实现多geoserver服务的负载均衡
2022/05/15 Servers