各位小伙伴们,在上一篇《从0开始写“脉脉”(一)·首页布局分析》中“老邮局”把脉脉的页面布局,从header、main到footer都给大家了相对比较详尽的分析。
那么今天咱们书接上回,和“老邮局”一起来分析下,脉脉的“底部导航栏”都有哪些特性?以及这些特性是如何实现的?
说正题前,我们先整理一下思路,看看写导航栏可以分为哪些步骤?
1.分析底部导航栏所具有的特性;
2.思考这些特性如何实现。
导航栏的特征:
1.首先底部导航栏有一个灰色的背景图片;
2.四组按钮都由两部分(图标和文字)组成,点选不同按钮会打开不同的“窗口组”;
3.按钮未被选中为灰色,选中后换为蓝色图标、文字颜色加深;
4.四组按钮水平均匀分布。
导航栏特性实现方式:
1.背景图片直接用css设置就可以了;
2.每组按钮都由一个图标和文字组成,我们把这两个看成一个整体,用a标签包裹住分别显示图标和文字的标签,当a标签被选中后,触发onclick事件函数处理;
3.此步可以和2合并,用js替换图片。脉脉用的是单选按钮和css的配合来实现,它将a标签和单选按钮绑在了一块,当a标签被选中,同时单选按钮被选中。也就是说每个a标签都对应一个单选按钮,a标签和单选按钮各司其职,a标签打开"窗口组",单选按钮更新图片;
4.使用css3的水平盒子模型,占用比例为1:1:1:1。
脉脉底部导航栏(请收起你们的口水,忽略那两张妹子照片)
先看下如何布局:
index.html
1. <div id="footer">
2. <form name="Menu"> //四个按钮的父类,这里为底部导航背景图片
3. <input type='radio' name='footers' id='ifooter_home' checked='true' /> // 第一组按钮
4. <a tapmode="homeActive" onclick="jumpFrame('home');"> // 用a标签包裹住里面的图标和文字标签
5. <p class="home"></p> // 图标
6. <center id='hic'>首页</center> // 文字
7. </a>
8. <input type='radio' name='footers' id='ifooter_jobs' /> // 第二组按钮
9. <a tapmode="jobsActive" onclick="jumpFrame('jobs');">
10. <p class="jobs"></p>
11. <center>工作</center>
12. </a>
13. <input type='radio' name='footers' id='ifooter_contacts' /> // 第三组按钮
14. <a tapmode="contactsActive" onclick="jumpFrame('contacts');">
15. <p class="contacts"></p>
16. <center>人脉</center>
17. </a>
18. <input type='radio' name='footers' id='ifooter_myself' /> // 第四组按钮
19. <a tapmode="myselfActive" onclick="jumpFrame('myself');">
20. <p class="myself"></p>
21. <center>个人</center>
22. </a>
23. </form>
24. </div>
复制代码
【行3】 每组按钮旁边配上个单选按钮,当按钮(a标签)被选中,同时触发该单选按钮,而单选按钮被选中则通过css中的设置更换一张蓝色图片;
【行4】 按钮(a标签)被选中,触发onclick事件,执行jumpFrame(‘home’);
【行5】 导航按钮图片,默认p标签是没有宽高的,在css中我们给他设置宽高,这样图片才能显示出来;
【行6】 按钮对应文字。
依次实现上面的4个步骤:
1.加载背景图片
#footer form{ // 这里是给底部导航加背景图片
padding-top:0.5625em; // 内部子元素距父元素顶部距离(上边距)
height:2.5625em; // 背景图片高度
background:url(../image/footer_menu.png) repeat-x; // 背景图片素材延x轴平铺
-webkit-background-size:auto 3.125em;
font-weight:bold;
}
复制代码
2.显示图片和文字
a、span等标签默认是无宽度和高度的,在使用前需要先给display:block属性,然后定义的宽和高才能生效。
footer,header,section,dialog,menu,a,label,strong,var,em,del,time,figcaption,figure,pre,img,small,mark,cite,code,fieldset,button{ //都给他设置了,后面还得用到
display:block;
}
复制代码
①加载图片:
#footer input[type="radio"] + a p{ // 加载按钮图片,给p标签设置宽高,前面提过其默认是无宽高的
height:1.4375em;
background-repeat:no-repeat; // 无需重复
background-position:center top;
-webkit-background-size:auto 1.55em;
-webkit-transition-duration:200ms;
}
.home{ // 给第一个导航按钮加载图片
background-image:url('../image/tab_feeds_normal.png');
}
.jobs{ // 给第二个导航按钮加载图片
background-image:url('../image/tab_jobs_normal.png');
}
.contacts{ // 给第三个导航按钮加载图片
background-image:url('../image/tab_contacts_normal.png');
}
.myself{ // 给第四个导航按钮加载图片
background-image:url('../image/tab_myself_normal.png');
}
复制代码
②加载文字:
#footer input[type="radio"] + a center{ // 默认情况下,图标下文字样式
font-size:0.75em; // 给p一个高度
color:#000;
opacity:0.3; // 默认情况下透明度
-webkit-transition-duration:200ms;
}
#footer input[type="radio"]:checked + a center{ // 被选中后的透明度
opacity:1;
}
复制代码
3.按钮选中后更换图片
这里的“+”表示同级,在html中可以看出,单选按钮和a标签是同级的。
意思是当单选按钮被选中后,其同级的a标签下的拥有类名为home的p标签更换图标。
#footer input[type="radio"]:checked + a p.home{ // 按钮被选中后,更换蓝色图片
background-image:url('../image/tab_feeds_selected.png');
}
#footer input[type="radio"]:checked + a p.jobs{ // 同上
background-image:url('../image/tab_jobs_selected.png');
}
#footer input[type="radio"]:checked + a p.contacts{
background-image:url('../image/tab_contacts_selected.png');
}
#footer input[type="radio"]:checked + a p.myself{
background-image:url('../image/tab_myself_selected.png');
}
复制代码
4.水平均匀分布
水平盒子模型
#main,#header menu,form,#main > footer,#main > footer > div{ //这里干脆将后面将会用到的一块设置了吧,包括header
display:-webkit-box !important; // 开启盒子模型
display: box !important;
-webkit-box-orient: horizontal; //默认为水平方式,所以这句可以省略
}
#content,form a,#shops ol,#main > footer div,#shop_item,#shop_item li{
box-flex:1;
-webkit-box-flex:1; //比例,#footer > form 下面四个a标签,比例就是1:1:1:1
}
复制代码
上面提到的四步我们都做到了,但看了效果之后发现,单选按钮的小圆圈不太和谐,我们需要把它去掉:
input[type="radio"]{ //底部导航单选按钮小圆圈不显示,只是隐藏并不影响触发它
display:none!important;
}
复制代码
---------------------------------------------------------------------------------------------------
最后我们还剩下一个问题,如何实现第三步描述?
a标签和单选按钮绑在了一块,当a标签被选中,同时单选按钮被选中。我们看一下index.html的第四行:
<a tapmode="homeActive" onclick="jumpFrame('home');">
复制代码
再看下jumpFram()的实现:
function jumpFrame(url){
radioSelect('ifooter_' + url); // 打开底部导航对应的顶部标题导航
radioSelect('iheader_' + url);
if (url == 'home') {
openHomeFrameGroup(0); // 打开home窗口组的0号窗口
} else if (url == 'jobs') {
openJobsFrameGroup(0);
} else if (url == 'myself') {
openMyselfFrameGroup(0);
} else if (url == 'contacts') {
openContactsFrame();
}
}
function radioSelect(id) { // 触发单选按钮
var ret = 0;
var e = $api.byId(id);
if (e && !e.checked) {
e.checked = true;
ret = 1;
}
return ret;
}
复制代码
今天的内容就到这了,下一篇我们搞定header ,follow me......
分享到:
相关推荐
第二是算法定义和调参,就是你该选择什么样的算法,用什么样的参数进行调节。第三是数据采集和清洗,接下来是实现这个算法并进行优化。‘I’代表和业务生产系统集成,所以我们就会简称为FaDAI这五大步骤。特征工程是...
从零开始成为内容运营者是一项系统性的学习过程,需要掌握多个领域的知识和技能。以下是一些核心要点: 一、了解内容运营基础 内容运营的目标是通过高质量的内容建立品牌形象,增加用户粘性,最终推动销售或达成...
1入门直播话术干货教程.zip直播剧本文案资料下载1入门直播话术干货教程.zip直播剧本文案资料下载1入门直播话术干货教程.zip直播剧本文案资料下载1入门直播话术干货教程.zip直播剧本文案资料下载 1.合个人学习技术做...
从一开始的Google搜索,到现在的聊天机器人、大数据风控、证券投资、智能医疗、自适应教育、推荐系统,无一不跟知识图谱相关。它在技术领域的热度也在逐年上升。本文以通俗易懂的方式来讲解知识图谱相关的知识、尤其...
本资源包括ReactJS中文干货视频教程!欢迎下载学习!!!
这里涵盖了从基础的UISearchBar、UISearchController到swift语言、OS X开发、App Store发布等多方面的知识点。 知识点1:UISearchBar的基本使用 UISearchBar是iOS开发中常用的搜索栏控件,通过它我们可以实现搜索...
干货|车外门把手设计指导_new.pdf
其次,关注点二强调空间利用与布局。合理的布局能减少物流浪费,提高生产效率。当物料搬运频繁、路线复杂时,说明布局可能存在不合理,影响生产流程的顺畅性。高效的工厂应优化布局,减少不必要的搬运距离。 关注点...
以下是C#语言学习的一些关键干货教程内容: 基础语法 变量:用于存储数据,需要先声明变量的类型,再赋值。 运算符:包括算术运算符(如加、减、乘、除)、关系运算符(用于比较两个值的大小关系)、逻辑运算符...
"干货|接地设计指导.pdf" 本文档对应的知识点包括: 1. EMC设计指导:文档中涉及到EMC的设计指导,包括EMC的基本概念、EMC设计的重要性、EMC设计的步骤、EMC设计的工具和方法等。 2. 接地设计:文档中讨论了接地...
淘宝运营干货,资料大全,从小白到大神淘宝运营干货,资料大全,从小白到大神淘宝运营干货,资料大全,从小白到大神淘宝运营干货,资料大全,从小白到大神淘宝运营干货,资料大全,从小白到大神淘宝运营干货,资料...
干货是食品市场中常见的一类商品,主要包括各种坚果、果实、菌菇、豆制品、调味料等,它们在保存和销售时需要遵循一定的标准以确保品质。以下是对这些干货产品的一些详细描述和优质劣质的区分标准: 1. 南瓜子:...
从零开始实现神经网络是理解机器学习和深度学习模型背后的数学原理和算法流程的一种有效方式。本篇文章将介绍如何使用Python语言从基础实现一个简单的三层神经网络。虽然文章不会详细推导所有的数学公式,但作者会...
精品 干货 数据挖掘数据分析配套纯英文版教程课件 chap1_intro 精品 干货 数据挖掘数据分析配套纯英文版教程课件 chap2_data 精品 干货 数据挖掘数据分析配套纯英文版教程课件 chap3_data_exploration 精品 干货 ...
本文来自作者罗志恒,文章重点讲解了用户画像在数据分析中的应用;如何构建用户画像。在日常商业活动中,有各种各样的职能划分:增长、内容、活动、产品,虽然具体工作和最终目标不一样,但其实都是围绕着“用户”去...
3d教程3d教程3d教程3d教程3d教程3d教程3d教程3d教程3d教程3d教程3d教程关于3dmax的初级教程,适合初学者。3d教程3d教程3d教程3d教程3d教程3d教程3d教程3d教程3d教程3d教程3d教程关于3dmax的初级教程,适合初学者。3d...
如何提高网站安全性,预防网站被攻击(干货教程)!ddos攻击网站被抓.doc
【Python教程全程干货无废话】是一份针对2022年的全新《零基础入门学习Python》教程,旨在为初学者提供高效、实用的学习路径。Python作为一种广泛应用的编程语言,其简洁明了的语法和强大的功能使其成为入门编程的...