html+css+javascript编程实战项目及心得
来源:互联网 发布:vs 变量已被优化掉 编辑:程序博客网 时间:2024/05/23 19:23
部分图片和代码来自imooc
实战目的:用html+css+js实现上面的选项卡功能。
分析:
该选项卡大体上分成两部分:
- 一部分是ul,它的border-bottom是褐色的,ul里面有三个li,他们是inline-block的,才能水平排列,或者使用float:left属性也行。每个li有边框,字体居中排列,被选中的li的css发生变化,border-top变色加粗,同时用白色的border-bottom遮挡住ul的border-bottom,形成缺口的样子。
- 第二部分是下面的三个内容div,div的宽度与上面的ul相同。但这里注意div的宽度是width+左右border的宽度,所以在计算时要多加留神。css中,设置一个.show{display:block},再设置一个.hide{display:none},根据上面的ul中的li被选中的情况,相应的控制其中一个的className是show,其他两个div的className都是hide,就能形成好似选中li,就能相应的显示不同div的样子。
js的控制策略:
- 当页面加载时,向ul的三个li中,分别绑定onclick方法,方法体中进行如下控制
- 对ul中的li,添加index属性,作为编号,每个li都有自己唯一的编号。
- 获得三个div,可以通过得到父节点的子节点数组的方式得到这三个div,那么他们在数组中的位置,就可以用上一条提到的编号与之相对应。
- 利用循环,将对应编号的div的className设置成show,其他的设置成hide即可。
具体代码:
<!DOCTYPE html><html><head lang="en"> <meta charset="UTF-8"> <title>实践题 - 选项卡</title> <style type="text/css"> /* CSS样式制作 */ *{ /*清除所有默认的内外边距,设置字体格式*/ margin:0; padding:0; font-size:15px; font-family:"微软雅黑"; } ul{ list-style-type:none;/* 所有的list选项都没有前面的点 */ } a{ text-decoration:none;/* 所有的连接都没有下划线 */ color:black; } .main{/*这是选项卡最外层包裹的div*/ width:310px;/*定义大小*/ height:200px; margin:0 auto;/*这样能够居中*/ margin-top:15px; } #titleCard{/*这是选项的ul*/ border-bottom:2px solid #8B4513;/*设置底边框*/ width:302px;/*宽度,注意这个宽度的设置要与下面content宽度的设置相对应*/ height:32px;/*高度,这个高度要考虑ul的border-bottom能够与它里面的li的border-bottom重合的问题*/ } #titleCard li{ display:inline-block;/*li本身是竖排的,这个属性能够让它们横着排列*/ border:1px solid black; border-bottom:none;/*无底边线,被选中的li才有底边线*/ width:70px; height:30px;/*这个高度与ul的高度相关,要能底边重合才行。*/ text-align:center;/*文字水平居中*/ line-height:30px;/*文字的行高与容器高度相同能够让文字垂直居中*/ margin-left:5px; } #titleCard li.liActive{/*当li被选中时,把className设置成这个类名。注意这个类名的定义方式,必须把#titleCard li.加上才能够生效,我估计是因为要比总体的格式定义更细,才能够对局部生效。*/ border-top:2px solid #8B4513;/*被选中的li上面的边框加粗,变色*/ border-bottom:2px solid white;/*下面的边框变白色,加粗,刚好能够覆盖住ul的底边,显得有缺口的样子*/ } #titleCard li:hover{ cursor:pointer; /*由于没有用<a>标签,所以这里用这个来让鼠标在移动到li上之后,能够变成点击手的样子*/ } #content div{/*下面三个具体内容的div*/ width:300px; /*注意这个宽度与上面ul的宽度是对应的*/ height:150px; border:1px solid green;/*左右边距的宽度要算到总宽度里面去*/ border-top:none; /*顶上无边框*/ } #content div ul li { line-height:2em; text-indent:8px;/*文本缩进*/ } .show{ display:block; /*显示*/ } .hide{/*隐藏,并不占地方*/ display:none; /*visibility:hidden 这种隐藏占地方*/} </style> <script type="text/javascript"> // JS实现选项卡切换 window.onload = function(){
//获得titleCard的子标签数组,该变量会一直存在,不会因为onload运行结束而消失,神奇! var titleCardChildren=document.getElementById("titleCard").children;
//获得content的子标签数组,该变量会一直存在,不会因为onload运行结束而消失,神奇! var contentChildren=document.getElementById("content").children; //alert(); for(var i=0;i<titleCardChildren.length;i++) {
//为每个titleCard的子标签添加index属性,记录该li的序号 titleCardChildren[i].index=i;
titleCardChildren[i].onclick=function(){//为每个li添加onclick方法,每当这个li被点击时,就会运行这个方法里面的内容 for(var j=0;j<contentChildren.length;j++)//遍历content的子标签 { contentChildren[j].className="hide";//将所有的content的子标签都隐藏 titleCardChildren[j].className="";//将所有titleCard的子标签的className值都去掉 } contentChildren[this.index].className="show";//显示被点击的这个content子标签 titleCardChildren[this.index].className="liActive";//改变被点击的titleCard的子标签的css } } } </script> </head> <body><!-- HTML页面布局 --> <div class="main"> <ul id="titleCard"> <li class="liActive">房产</li><li>家居</li><li>二手房</li> </ul><!--titleCard end--> <div id="content"> <div class="show"> <ul> <li><a href="#">275万购昌平邻铁三居 总价20万买一居</a></li> <li><a href="#">200万内购五环三居 140万安家东三环</a></li> <li><a href="#">北京首现零首付楼盘 53万购东5环50平</a></li> <li><a href="#">京楼盘直降5000 中信府 公园楼王现房</a></li> </ul> </div><!--show end--> <div class="hide"> <ul> <li><a href="#">40平出租屋大改造 美少女的混搭小窝</a></li> <li><a href="#">经典清新简欧爱家 90平老房焕发新生</a></li> <li><a href="#">新中式的酷色温情 66平撞色活泼家居</a></li> <li><a href="#">瓷砖就像选好老婆 卫生间烟道的设计</a></li> </ul> </div><!--hide end--> <div class="hide"> <ul> <li><a href="#">通州豪华3居260万 二环稀缺2居250w甩</a></li> <li><a href="#">西3环通透2居290万 130万2居限量抢购</a></li> <li><a href="#">黄城根小学学区仅260万 121平70万抛!</a></li> <li><a href="#">独家别墅280万 苏州桥2居优惠价248万</a></li> </ul> </div><!--hide end--> </div><!--content end--> </div><!-- main end --> </body> </html>
1 0
- html+css+javascript编程实战项目及心得
- Html+Css+Javascript项目实战
- JavaWeb基础知识:Html,Css和Javascript项目实战
- Html和JavaScript编程实战!
- Html和JavaScript编程实战!
- Html+Css+Javascript项目实战——模拟手机上的7881网页
- HTML和CSS及JavaScript之HTML
- 十九.HTML、css、javascript、DOM编程
- HTML、CSS、JavaScript及AJAX是什么
- HTML、CSS、JavaScript简介及简单分工
- html css 布局心得
- html、css心得
- 实战项目心得
- html+css+javascript代码编程规范之CSS
- html+css+javascript代码编程规范之HTML
- HTML+CSS+JS 开发 Firefox OS 应用编程实战
- HTML+CSS+JS 开发 Firefox OS 应用编程实战
- html+css+javascript代码编程规范之JavaScript
- Let's Encrypt: 为CentOS/RHEL 7下的nginx安装https支持-具体案例
- 小结下11招转数据库设计
- iOS-Lottie源码解析
- android Studio ddms中emulator control不能用的问题
- 快速排序
- html+css+javascript编程实战项目及心得
- 剑指offer算法 java实现 替换字符串空格
- AndroidStudio:Error running app: Default Activity Not Found
- Linux中的进程通信(二)--信号量
- 机器学习实战
- cocos 3.14 eclpise 环境配置 打包
- ASP.Net学习笔记013--ViewState初探2
- 分库分表的几种常见形式以及可能遇到的难题
- html