【CSS】布局之选项卡与图片库
前面对简单的选项卡和简单的图片库进行了实现,现在把两者结合起来,实现下面这样的效果。

现在附上代码:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html;charset=UTF-8">
<script type="text/javascript" src="http://211.100.27.11/resource/js/jquery-1.7.2.min.js"></script>
<title>选项卡</title>
<style type="text/css">
* {
margin: 0;
padding: 0;
}
#main {
width: 245px;
height: 25px;
margin: 100px auto 0 auto;
}
.title {
line-height: 35px; //垂直居中
margin-right: 10px;
text-Align: center; //水平居中
}
.title:after { //清除title的浮动
content: ".";
display: block;
clear: both;
height: 0;
visibility: hidden;
}
.top {
font-size: 25px;
margin-left: 10px;
float: left;
}
span {
float: right;
width: 40px;
}
.content {
width: 240px;
border: 1px solid #ccc; //图片字样下面的灰线,没有清除浮动,content框体高度为0,使content的边框成为了灰线
}
.img {
float: left;
width: 100px;
height: 120px;
padding: 10px;
}
.img>a>img {
border: none; //这个是为了清除IE显示中默认显示的边框线,其余浏览器默认不显示
}
.img:hover {
box-shadow: 5px 5px 2px #888; //鼠标悬停时添加阴影
}
.img>a>img:hover {
border: 1px solid red; //鼠标悬停时给图片加上边框
}
.img>.desc {
font-size: 10px;
line-height: 20px;
text-Align: center;
}
div[name] { //通过属性选择器选取图片父元素框
width: 245px;
height: 264px;
margin: 10px 0 0 0px;
float: left;
display: none;
}
.parent:after {
content: ".";
display: block;
clear: both;
height: 0;
visibility: hidden;
}
.content>.show {
display: block;
}
.title>.click { //标签边框上方左右两边角的圆弧形状处理
background: #ccc;
border-top-left-radius: 5px;
border-top-right-radius: 5px;
} </style> <script type="text/javascript">
window.onload = function() {
var oTab = document.getElementById("main"); //通过ID获取元素
var aSpan = oTab.getElementsByTagName("span"); //通过标签名获取元素,结果为一个数组
var aDiv = oTab.getElementsByTagName("div");
var cDiv = new Array();
var key = 0;
for (var i = 0; i < aDiv.length; i++) {
if (aDiv[i].getAttribute("name") == "showBox") {
cDiv[key] = aDiv[i];
key++;
}
}
for (var i = 0; i < aSpan.length; i++) {
aSpan[i].index = i;
aSpan[i].onclick = function() { //为span标签附加点击效果
for (var i = 0; i < aSpan.length; i++) {
aSpan[i].className = "";
cDiv[i].className = "";
cDiv[i].style.display = "none";
}
this.className = "click";
cDiv[this.index].className = "show";
cDiv[this.index].style.display = "block";
};
}
};
</script>
</head> <body>
<div id="main">
<div class="title">
<div class="top">图片</div>
<span class="click">1</span>
<span>2</span>
<span>3</span>
</div>
<div class="content">
<div name="showBox" class="show">
<div class="img">
<a target="_blank" href="image/tupian/1.jpg">
<img src="data:image/tupian/1.jpg" alt="图片1" width="100" height="100">
</a>
<div class="desc">图片1的描述</div>
</div>
<div class="img">
<a target="_blank" href="image/tupian/1.jpg">
<img src="data:image/tupian/1.jpg" alt="图片2" width="100" height="100">
</a>
<div class="desc">图片2的描述</div>
</div>
<div class="img">
<a target="_blank" href="image/tupian/1.jpg">
<img src="data:image/tupian/1.jpg" alt="图片3" width="100" height="100">
</a>
<div class="desc">图片3的描述</div>
</div>
<div class="img">
<a target="_blank" href="image/tupian/1.jpg">
<img src="data:image/tupian/1.jpg" alt="图片4" width="100" height="100">
</a>
<div class="desc">图片4的描述</div>
</div>
</div> <div name="showBox">
<div class="img">
<a target="_blank" href="image/tupian/2.jpg">
<img src="data:image/tupian/2.jpg" alt="图片1" width="100" height="100">
</a>
<div class="desc">图片1的描述</div>
</div>
<div class="img">
<a target="_blank" href="image/tupian/2.jpg">
<img src="data:image/tupian/2.jpg" alt="图片2" width="100" height="100">
</a>
<div class="desc">图片2的描述</div>
</div>
<div class="img">
<a target="_blank" href="image/tupian/2.jpg">
<img src="data:image/tupian/2.jpg" alt="图片3" width="100" height="100">
</a>
<div class="desc">图片3的描述</div>
</div>
<div class="img">
<a target="_blank" href="image/tupian/2.jpg">
<img src="data:image/tupian/2.jpg" alt="图片4" width="100" height="100">
</a>
<div class="desc">图片4的描述</div>
</div>
</div> <div name="showBox">
<div class="img">
<a target="_blank" href="image/tupian/3.jpg">
<img src="data:image/tupian/3.jpg" alt="图片1" width="100" height="100">
</a>
<div class="desc">图片1的描述</div>
</div>
<div class="img">
<a target="_blank" href="image/tupian/3.jpg">
<img src="data:image/tupian/3.jpg" alt="图片2" width="100" height="100">
</a>
<div class="desc">图片2的描述</div>
</div>
<div class="img">
<a target="_blank" href="image/tupian/3.jpg">
<img src="data:image/tupian/3.jpg" alt="图片3" width="100" height="100">
</a>
<div class="desc">图片3的描述</div>
</div>
<div class="img">
<a target="_blank" href="image/tupian/3.jpg">
<img src="data:image/tupian/3.jpg" alt="图片4" width="100" height="100">
</a>
<div class="desc">图片4的描述</div>
</div>
</div>
</div>
</div>
</body>
</html>
这种布局在网页中很常见,这里就不一步步实现了,除了对代码一些简单的注释,再把里面的几个关键知识点记录一下。
1、关于"border:none"与"border:0":
在我们有清除边框线的需求下,选择"border:none"或者是"border: 0"很容易引起疑惑,应为一般这两者都能得到想要的结果,那么该如何判断选择呢?
性能差异:
border:0
把border设为“0”像素虽然在页面上看不见,但按border默认值理解,浏览器依然对border-width/border-color进行了渲染,即已经占用了内存值。
border:none
把border设为“none”即没有,浏览器解析“none”时将不作出渲染动作,即不会消耗内存值。
兼容性差异:
border:none
当border为“none”时对IE6/7无效,边框依然存在。
border:0
几乎所有浏览器都不显示边框。
就以上的差异性看来,似乎选择"border:0"更合适,不过就性能来说,"border:none"的性能要更胜一筹,至于对于IE6/7的无效,则可以用"background:none"来弥补,所以一般使用中,更多应该选择使用"border:none"。
2、getElementBy系列
getElementBy系列总共有三个成员:getElementById()、getElementsByName()和getElementsByTagName()
getElementById()
通过标签的ID属性来获取元素节点;
getElementsByName()
通过标签的name属性来获取元素节点的集合;
getElementsByTagName()
通过标签名来获取元素节点的集合;
了解了以上三者的区别,我们发现,在上例中我们通过JS的循环对div的class="show"标记的赋值与取消来控制该框的显示或者隐藏。我们需要对各图片库父元素节点进行选取。
不过由于ID值的单一性,我们肯定不能对3个标签页分别赋值ID值,而class属性又起到了标记的作用,当然,我们可以给被标记的元素框赋予多个类名,不过我们在这里使用了另一种方法,给所有的图片库的父框体赋值了name属性,用来选取该div标签。
不过在js代码中,我们并没有用getElementsByName()方法来获取该标签。不过由于IE不支持getElementsByName(),所以就要避免使用getElementsByName()。那么如何选取这些标签呢?
这里我们用到一个检索节点属性值的方法:getAttribute()方法。
在我们用getElementById()或getElementsByTagName()方法获取元素节点的对象后,可以用getAttribute()方法把该节点的属性值查询出来,然后通过判断,这样就可以挑选出我们所需要的节点对象了。
getAttribute()方法是一个函数。它只有一个参数——你打算查询的属性的名字:
object.getAttribute(attribute)
getAttribute()方法无法通过document对象进行调用,只能只能通过一个元素节点对象调用它。
例如你可以把它与getElementsByTagName()方法结合起来,去查询每个<p>元素的title属性:
var text=document.getElementsByTagName("p")
for (var i=0;i<text.length;i++){
alert(text[i].getAttribute("title"));
}
总结:在具体实现一个布局的过程中,既熟悉了以前学到的各知识点的运用,也通过对一些问题的解决,学到了很多新的知识,获益匪浅。
【CSS】布局之选项卡与图片库的更多相关文章
- 用html+css+js实现选项卡切换效果
文章转载自:http://tongling.github.io/JSCards/ 用html+css+js实现选项卡切换效果 使用之前学过的综合知识,实现一个新闻门户网站上的常见选项卡效果: 文字素材 ...
- [前端] html+css+javascript 实现选项卡切换效果
用html+css+js实现选项卡切换效果使用之前学过的综合知识,实现一个新闻门户网站上的常见选项卡效果: 文字素材:房产: 275万购昌平邻铁三居 总价20万买一居 200万内购五环三居 140万安 ...
- 界面设计技法之css布局
css布局之于页面就如同ECMAScript之于JS一般,细想一番,html就如同语文,css就如同数学,js呢,就是物理,有些扯远,这里就先不展开了. 回到主题,从最开始的css到如今的sass(l ...
- CSS布局 - 三栏布局
CSS布局技术可谓是前端技术中最基础的技术,就是因为基础,所以我认为要更加熟练,深入的去掌握,去梳理. 一. 传统 ---> 浮动实现的三栏布局 采用浮动实现的三栏布局有以下特点及注意事项: · ...
- DIV+CSS布局中主要CSS属性介绍
Float: Float属性是DIV+CSS布局中最基本也是最常用的属性,用于实现多列功能,我们知道<div>标签默认一行只能显示一个,而使用Float属性可以实现一行显示多个div的功能 ...
- CSS 布局
近日开发中,总感觉页面布局方面力不从心.以前也曾学过这方面的内容,但是不够系统,因此我打算整理一下. 在web 页面中一般有 table 和 css+div 两种布局方式. 其中css+div 又分为 ...
- CSS布局经典—圣杯布局与双飞翼布局
在我之前的博客网页整体布局完全剖析-剖完你不进来看一下么?中总结单列.两列.三列固宽与变宽布局,我还以为已经囊括了所有经典的网页布局方法了呢,当然除了CSS3的弹性盒模型没有涉及到,现在看来确实是自己 ...
- html学习第三天—— 第12章——css布局模型
清楚了CSS 盒模型的基本概念. 盒模型类型, 我们就可以深入探讨网页布局的基本模型了.布局模型与盒模型一样都是 CSS 最基本. 最核心的概念. 但布局模型是建立在盒模型基础之上,又不同于我们常说的 ...
- CSS篇之DIV+CSS布局
<div></div> div与其他标签一样,也是一个XHTML所支持的标签. div是XHTML中指定的,远门用于布局设计的容器标记. 简单的CSS布局 头部 内容 页脚 & ...
随机推荐
- 自制Java中的Mutex类
同步问题中,一个很重要的问题是同步的域,什么是同步的域呢?简单以 synchronized 这个关键字来说,就是它所同步的范围.并发编程中很多时候出现的问题没有选好同步范围所导致的.但现有的同步关键字 ...
- 洛谷P2173 [ZJOI2012]网络(10棵lct与瞎jb暴力)
有一个无向图G,每个点有个权值,每条边有一个颜色.这个无向图满足以下两个条件: 对于任意节点连出去的边中,相同颜色的边不超过两条. 图中不存在同色的环,同色的环指相同颜色的边构成的环. 在这个图上,你 ...
- CF869C The Intriguing Obsession(组合数学瞎搞,O(n)莫名过)
— This is not playing but duty as allies of justice, Nii-chan! — Not allies but justice itself, Onii ...
- 玩转车联网1---初识OBD和行车助手
题目取得有点大,不免有博取眼球之嫌.车联网作为物联网的一个分支,预计在2015年市场会达到1500亿,特斯拉股票balabala,谷歌无人驾驶, 当然,我们是技术类博客,得找个能够快速上手,快速落地的 ...
- MAVEN 编译打包时报“找不到符号”cannot find symbol 的处理方法总结
http://www.cnblogs.com/Starshot/p/7441075.html
- django 快捷代码提示
1.右键项目,Mark Directory As Source Root 2.settings配置 3.import包时可忽略app名了
- RabbitMQ与.net core(四) 消息的优先级 与 死信队列
1.消息的优先级 假如现在有个需求,我们需要让一些优先级最高的通知推送到客户端,我们可以使用redis的sortedset,也可以使用我们今天要说的rabbit的消息优先级属性 Producer代码 ...
- 陌上花开(三维偏序)(cdq分治)
题目链接:https://www.lydsy.com/JudgeOnline/problem.php?id=3262 其实就是三位偏序的模板,cdq分治入门题. 学习cdq分治请看__stdcall大 ...
- Mayor's posters 线段树区间覆盖
题目链接 http://poj.org/problem?id=2528 Description The citizens of Bytetown, AB, could not stand that t ...
- 201621123012《Java程序设计》第12次学习总结
作业12-流与文件 1. 本周学习总结 1.1 以你喜欢的方式(思维导图或其他)归纳总结多流与文件相关内容. 2. 面向系统综合设计-图书馆管理系统或购物车 使用流与文件改造你的图书馆管理系统或购物车 ...