【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布局 头部 内容 页脚 & ...
随机推荐
- 第几天——第九届蓝桥杯C语言B组(省赛)第一题
原创 标题:第几天 2000年的1月1日,是那一年的第1天. 那么,2000年的5月4日,是那一年的第几天? 注意:需要提交的是一个整数,不要填写任何多余内容. 这题是送分题,只需要注意一下2000年 ...
- DRBD 数据镜像软件
1>DRBD介绍 1>数据镜像软件DRBD介绍 分布式块设备复制(Distributed Relicated Block Deivce,DRBD),是一种基于软件.基于网络的块复制存储解 ...
- oracle所有的乱码解决方案
oracle所有的乱码解决方案 是不是经常看见各式各样的乱码,看见头就大了,大家别怕,所有的问题都会有一个甚至不止一个的解决方案,有句名言说的好:万法不离其踪.网上大部分把工具的乱码和代码操作的乱码混 ...
- 2015-9-13 NOIP模拟赛解题报告(by hzwer)
小奇挖矿 「题目背景」 小奇要开采一些矿物,它驾驶着一台带有钻头(初始能力值w)的飞船,按既定路线依次飞过喵星系的n个星球. 「问题描述」 星球分为2类:资源型和维修型. 1.资源型:含矿物质量a[i ...
- 牛客网提高组模拟赛第七场 T3 洞穴(附bitset介绍)
就是DP. 我们可以很简单的想到要枚举中间点,进行边数的转移. 但是因为边长数据范围很大,所以我们考虑log的倍增. 状态设计为\(dp[i][j][k]\),为从节点\(i\)走\(2^k\)步能否 ...
- 201621123023《Java程序设计》第2周学习总结
一. 本周学习总结 引用类型变量存放指向对象的引用(类似于地址): == 与 equals 区别在于:==比较的是引用是否相等, 而equals则比较指向对象的内容是否相等: 因为String的不可变 ...
- easyui里面的加载tree的两种方式
第一种: 使用EasyUI中Tree 符合EasyUI中Tree的Json格式,我们先看一下,格式是如何的 [{ "id":1, "text":"My ...
- Hibernate 初识
第一步: 导包:(这是我根据其他网站的介绍导入的包,可能不完善,但开发没什么问题,遇到问题再说) 当然还有mysql的jar包 第二步:进行hibernate环境配置 在classpath目录下建立h ...
- 关于JAVA泛型中的通配符类型
之前对JAVA一知半解时就拿起weiss的数据结构开始看,大部分数据结构实现都是采取通配符的思想,好处不言而喻. 首先建立两个类employee和manager,继承关系如下.其次Pair类是一个简单 ...
- 高阶篇:1)竞品(标杆产品)的拆解和分析benchmarking
本章目的:从标杆产品(竞品)逆向推出装配.制造.设计流程及难点. 1.竞品分析的目的 ①为企业制定市场准确的产品开发目标: ②为企止提供产品开发全流程性能结构对标参考数据指标: ③最优性价比务件下,为 ...