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 miscellanea -display data real time, using window.status
Jan 09 Javascript
function, new function, new Function之间的区别
Mar 08 Javascript
番茄的表单验证类代码修改版
Jul 18 Javascript
用js遍历 table的脚本
Jul 23 Javascript
40个有创意的jQuery图片和内容滑动及弹出插件收藏集之三
Jan 03 Javascript
JS数学函数Exp使用说明
Aug 09 Javascript
修改或扩展jQuery原生方法的代码实例
Jan 13 Javascript
JS设置下拉列表框当前所选值的方法
Dec 22 Javascript
AngularJS入门教程之AngularJS 模板
Aug 18 Javascript
ReactNative列表ListView的用法
Aug 02 Javascript
vue使用v-if v-show页面闪烁,div闪现的解决方法
Oct 12 Javascript
详解基于node.js的脚手架工具开发经历
Jan 28 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
excellent!――ASCII Art(由目标图象生成ascii)
2007/02/20 PHP
file_get_contents(&quot;php://input&quot;, &quot;r&quot;)实例介绍
2013/07/01 PHP
如何使用PHP批量去除文件UTF8 BOM信息
2013/08/05 PHP
php生成唯一的订单函数分享
2015/02/02 PHP
js定义对象或数组直接量时各浏览器对多余逗号的处理(json)
2011/03/05 Javascript
javascript学习笔记(五) Array 数组类型介绍
2012/06/19 Javascript
jquery如何通过name名称获取当前name的value值
2013/12/20 Javascript
Javascript中call和apply函数的比较和使用实例
2015/02/03 Javascript
JavaScript实现数组在指定位置插入若干元素的方法
2015/04/06 Javascript
JavaScript DOM基础
2015/04/13 Javascript
jquery小火箭返回顶部代码分享
2015/08/19 Javascript
jQuery实现网页顶部固定导航效果代码
2015/12/24 Javascript
javascript获取select标签选中的值
2016/06/04 Javascript
Bootstrap4如何定制自己的颜色和风格
2018/02/26 Javascript
详解使用 Node.js 开发简单的脚手架工具
2018/06/08 Javascript
AngularJS与后端php的数据交互方法
2018/08/13 Javascript
vue-router路由懒加载的实现(解决vue项目首次加载慢)
2018/08/28 Javascript
JS使用数组实现的队列功能示例
2019/03/04 Javascript
vue-week-picker实现支持按周切换的日历
2019/06/26 Javascript
在vscode 中设置 vue模板内容的方法
2020/09/02 Javascript
python服务器与android客户端socket通信实例
2014/11/12 Python
Python中转换角度为弧度的radians()方法
2015/05/18 Python
python开发利器之ulipad的使用实践
2017/03/16 Python
Django后台获取前端post上传的文件方法
2018/05/28 Python
天美时手表加拿大官网:Timex加拿大
2016/09/01 全球购物
官方授权图形T恤和服装:Fifth Sun
2019/06/12 全球购物
泰国国际航空公司官网:Thai Airways International
2019/12/04 全球购物
民生工程实施方案
2014/03/22 职场文书
机械专业求职信
2014/05/25 职场文书
社区志愿者培训方案
2014/06/10 职场文书
学校师德师风自我剖析材料
2014/09/29 职场文书
离婚协议书标准格式
2014/10/04 职场文书
《岳阳楼记》原文、译文赏析
2019/09/10 职场文书
基于Python的EasyGUI学习实践
2021/05/07 Python
python 解决微分方程的操作(数值解法)
2021/05/26 Python
pytorch分类模型绘制混淆矩阵以及可视化详解
2022/04/07 Python