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 相关文章推荐
Document 对象的常用方法
Jul 31 Javascript
javascript的propertyIsEnumerable()方法使用介绍
Apr 09 Javascript
Jquery图片延迟加载插件jquery.lazyload.js的使用方法
May 21 Javascript
javascript获取重复次数最多的字符
Jul 08 Javascript
IE9+已经不对document.createElement向下兼容的解决方法
Sep 14 Javascript
js实现内容显示并使用json传输数据
Mar 16 Javascript
canvas实现图像放大镜
Feb 06 Javascript
Vue.js devtool插件安装后无法使用的解决办法
Nov 27 Javascript
JS字典Dictionary类定义与用法示例
Feb 01 Javascript
jQuery设置下拉框显示与隐藏效果的方法分析
Sep 15 jQuery
nodemon实现Typescript项目热更新的示例代码
Nov 19 Javascript
JavaScript动态生成表格的示例
Nov 02 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
上海无线电三厂简史修改版
2021/03/01 无线电
中国收音机工业发展史
2021/03/02 无线电
COM in PHP (winows only)
2006/10/09 PHP
php whois查询API制作方法
2011/06/23 PHP
深入mysql_fetch_row()与mysql_fetch_array()的区别详解
2013/06/05 PHP
PHP将二维数组某一个字段相同的数组合并起来的方法
2016/02/26 PHP
php 流程控制switch的简单实例
2016/06/07 PHP
Yii框架模拟组件调用注入示例
2019/11/11 PHP
In Javascript Class, how to call the prototype method.(three method)
2007/01/09 Javascript
将两个div左右并列显示并实现点击标题切换内容
2013/10/22 Javascript
JS替换文本域内的回车示例
2014/02/18 Javascript
JavaScript自定义数组排序方法
2015/02/12 Javascript
JS+CSS实现带关闭按钮DIV弹出窗口的方法
2015/02/27 Javascript
CSS中position属性之fixed实现div居中
2015/12/14 Javascript
浅谈js多维数组和hash数组定义和使用
2016/07/27 Javascript
Sortable.js拖拽排序使用方法解析
2016/11/04 Javascript
inner join 内联与left join 左联的实例代码
2017/09/18 Javascript
Babel 入门教程学习笔记
2018/06/13 Javascript
利用JavaScript将Excel转换为JSON示例代码
2019/06/14 Javascript
使用easyui从servlet传递json数据到前端页面的两种方法
2019/09/05 Javascript
vue中input的v-model清空操作
2019/09/06 Javascript
[02:10]DOTA2亚洲邀请赛 EG战队出场宣传片
2015/02/07 DOTA
python字典操作实例详解
2017/11/16 Python
基于Python的OCR实现示例
2020/04/03 Python
我想声明一个指针并为它分配一些空间, 但却不行。这些代码有什么 问题?char *p; *p = malloc(10);
2016/10/06 面试题
简述Linux文件系统通过i节点把文件的逻辑结构和物理结构转换的工作过程
2016/01/06 面试题
统计学专业毕业生的自我评价分享
2013/11/28 职场文书
财务部出纳岗位职责
2013/12/22 职场文书
最新的咖啡店创业计划书
2013/12/30 职场文书
演讲比赛获奖感言
2014/02/02 职场文书
反邪教警示教育方案
2014/05/13 职场文书
简单租房协议书范本
2014/08/20 职场文书
2015社区健康教育工作总结
2015/05/20 职场文书
《我要的是葫芦》教学反思
2016/02/18 职场文书
alibaba seata服务端具体实现
2022/02/24 Java/Android
springboot创建的web项目整合Quartz框架的项目实践
2022/06/21 Java/Android