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 相关文章推荐
可缩放Reloaded-一个针对可缩放元素的复用组件
Mar 10 Javascript
Mootools 1.2 手风琴(Accordion)教程
Sep 15 Javascript
jquery中ajax学习笔记一
Oct 16 Javascript
让元素在网页中可拖动示例代码
Aug 13 Javascript
巧用数组制作图片切换js代码
Nov 29 Javascript
JS中如何实现复选框全选功能
Dec 19 Javascript
jQuery实现滚动条滚动到子元素位置(方便定位)
Jan 08 Javascript
详解js的异步编程技术的方法
Feb 09 Javascript
微信小程序选择图片和放大预览图片功能
Nov 02 Javascript
Javascript实现运算符重载详解
Apr 07 Javascript
解决vue js IOS H5focus无法自动弹出键盘的问题
Aug 30 Javascript
vue中的 $slot 获取插槽的节点实例
Nov 12 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实现两表合并成新表并且有序排列的方法
2014/12/05 PHP
Yii2.0中的COOKIE和SESSION用法
2016/08/12 PHP
CI框架常用函数封装实例
2016/11/21 PHP
jquery select选中的一个小问题
2009/10/11 Javascript
Jquery升级新版本后选择器的语法问题
2010/06/02 Javascript
JS获得URL超链接的参数值实例代码
2013/06/21 Javascript
JQuery 获取json数据$.getJSON方法的实例代码
2013/08/02 Javascript
javascript函数作用域学习示例(js作用域)
2014/01/13 Javascript
jQuery瀑布流插件Wookmark使用实例
2014/04/02 Javascript
JS实现的生成随机数的4个函数分享
2015/02/11 Javascript
js通过iframe加载外部网页的实现代码
2015/04/05 Javascript
js获取数组的最后一个元素
2015/04/14 Javascript
使用Angular.js开发的注意事项
2016/10/19 Javascript
js制作支付倒计时页面
2016/10/21 Javascript
js实现hashtable的赋值、取值、遍历操作实例详解
2016/12/25 Javascript
JS实现复制功能
2017/03/01 Javascript
vue2.0 实现导航守卫(路由守卫)
2018/05/21 Javascript
微信小程序实现星级评分和展示
2018/07/05 Javascript
使用jquery模拟a标签的click事件无法实现跳转的解决
2018/12/04 jQuery
[16:19]教你分分钟做大人——风暴之灵
2015/03/11 DOTA
[03:20]2015国际邀请赛全明星表演赛
2015/08/08 DOTA
[01:14]TI珍贵瞬间系列(六):冠军
2020/08/30 DOTA
Python牛刀小试密码爆破
2011/02/03 Python
python实现批量转换文件编码(批转换编码示例)
2014/01/23 Python
深入浅析Python传值与传址
2018/07/10 Python
Python控制键盘鼠标pynput的详细用法
2019/01/28 Python
python浪漫表白源码
2019/04/05 Python
在Python中os.fork()产生子进程的例子
2019/08/08 Python
django项目用higcharts统计最近七天文章点击量
2019/08/17 Python
如何基于python实现归一化处理
2020/01/20 Python
德国运动鞋网上商店:Afew Store
2018/01/05 全球购物
班组长安全生产职责
2013/12/16 职场文书
心理健康课教学反思
2014/02/13 职场文书
室内设计专业自荐信
2014/05/31 职场文书
幼儿园食品安全责任书
2015/05/08 职场文书
CentOS7环境下MySQL8常用命令小结
2022/06/10 Servers