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 DOM删除节点操作指南
Mar 03 Javascript
js操作DOM--添加、删除节点的简单实例
Jul 08 Javascript
JS搜狐面试题分析
Dec 16 Javascript
简单实现js无缝滚动效果
Feb 05 Javascript
JS实现课堂随机点名和顺序点名
Mar 09 Javascript
AngularJS实现与后台服务器进行交互的示例讲解
Aug 13 Javascript
解决JavaScript layui 下拉框不显示的问题
Aug 14 Javascript
JavaScript 中 JSON.parse 函数 和 JSON.stringify 函数
Dec 05 Javascript
小程序数据通信方法大全(推荐)
Apr 15 Javascript
JS实现可切换图片的幻灯切换效果示例
May 24 Javascript
生产制造追溯系统之再说条码打印
Jun 03 Javascript
JavaScript代码压缩工具UglifyJS和Google Closure Compiler的基本用法
Apr 13 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 strip_tags()去除HTML、XML以及PHP的标签介绍
2014/02/18 PHP
php解析http获取的json字符串变量总是空白null
2015/03/02 PHP
php三种实现多线程类似的方法
2015/10/30 PHP
PHP调用存储过程返回值不一致问题的解决方法分析
2016/04/26 PHP
利用php-cli和任务计划实现订单同步功能的方法
2017/05/03 PHP
php实现的pdo公共类定义与用法示例
2017/07/19 PHP
PHP中register_shutdown_function函数的基础介绍与用法详解
2017/11/28 PHP
在Laravel中使用GuzzleHttp调用第三方服务的API接口代码
2019/10/15 PHP
Alliance vs AM BO3 第二场2.13
2021/03/10 DOTA
可输入的下拉框
2006/06/19 Javascript
Javascript的构造函数和constructor属性
2010/01/09 Javascript
JavaScript 语言的递归编程
2010/05/18 Javascript
Jquery + Ajax调用webService实例代码(asp.net)
2010/08/27 Javascript
javascript实现div浮动在网页最顶上并带关闭按钮效果实例
2013/08/13 Javascript
NodeJS学习笔记之网络编程
2014/08/03 NodeJs
bootstrap css样式之表单
2017/01/19 Javascript
EasyUI框架 使用Ajax提交注册信息的实现代码
2017/09/27 Javascript
Parcel.js + Vue 2.x 极速零配置打包体验教程
2017/12/24 Javascript
利用js-cookie实现前端设置缓存数据定时失效
2019/06/18 Javascript
[03:17]2014DOTA2 国际邀请赛中国区预选赛 四强专访
2014/05/23 DOTA
python中lambda函数 list comprehension 和 zip函数使用指南
2014/09/28 Python
python结合shell查询google关键词排名的实现代码
2016/02/27 Python
详解Python nose单元测试框架的安装与使用
2017/12/20 Python
python 内置模块详解
2019/01/01 Python
python中with语句结合上下文管理器操作详解
2019/12/19 Python
Windows下Pycharm远程连接虚拟机中Centos下的Python环境(图文教程详解)
2020/03/19 Python
Python识别验证码的实现示例
2020/09/30 Python
德国汉莎航空中国官网: Lufthansa中国
2017/03/30 全球购物
巾帼文明岗申报材料
2014/05/01 职场文书
大学团日活动新闻稿
2014/09/10 职场文书
公司授权委托书范文
2014/09/21 职场文书
早读课迟到检讨书
2014/09/25 职场文书
2015年个人实习工作总结
2014/12/12 职场文书
2015年党风廉政建设工作总结
2015/04/09 职场文书
2015年社区流动人口工作总结
2015/05/12 职场文书
POST提交数据常见的四种方式
2022/01/18 HTML / CSS