【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布局 头部 内容 页脚 & ...
随机推荐
- Json字符串转对象和转List集合操作
对象POJO和JSON互转 public class JsonUtil { /** * JSON 转 POJO */ public static <T> T getObject(Strin ...
- DLL的概念、dll导出类(转贴)
1. DLL的概念DLL(Dynamic Linkable Library),动态链接库,可以向程序提供一些函数.变量或类.这些可以直接拿来使用.静态链接库与动态链接库的区别:(1)静态链接库与动态链 ...
- 基于Struts2开发快递收发系统 毕业设计 源码
基于Struts2开发快递收发系统 开发环境: Windows操作系统 开发工具:Eclipse/MyEclipse+Jdk+Tomcat6+MySql数据库 运行效果图: 此源码经过详细测试 保证 ...
- 求帮忙解决封装jquery图片滚动问题
今天用jquery封装了点击图片滚动,但是发现在屏幕自适应时,图片停在的位置会随着屏幕大小而错位(我引入了pocketgrid.css响应式文件,但没办法去那边修改onsize事件...),求大神.. ...
- nowcoder(牛客网)普及组模拟赛第一场 解题报告
蒟蒻我可能考了一场假试 T1 绩点 这题没什么好说的,应该是只要会语言的就会做. T2 巨大的棋盘 一个模拟题吧qwq,但是要注意取模的时候先加上n或者m再取模,要不然会错的. #include< ...
- [Flex] 动态获取组件宽度和高度
flex中我们有时并不想一开始就设置某个组件的宽度和高度,而想动态获取某个组件经填充后的width和height,但是会发现width和height均为0,这时我们可以注册一下两个事件之一来解决. i ...
- [AIR] 读写数据
新建两个Flash AIR文档read.fla,write.fla:write.fla作为写入数据,read.fla作为读取数据,仅作为测试的例子. 在write.fla关键帧第一帧写一下代码: im ...
- 常用博客 API地址
新浪博客 http://upload.move.blog.sina.com.cn/blog_rebuild/blog/xmlrpc.php 网易博客 http://os.blog.163.com/ap ...
- 模块time, datetime的用法
一. time time库提供了各种操作时间的方法 1. time.asctime([tuple]):将一个时间元组转换成一个可读的24个时间字符串. >>> time.asc ...
- JSON与XML比较
1. 定义介绍 1.1 XML定义 扩展标记语言 (Extensible Markup Language, XML) ,用于标记电子文件使其具有结构性的标记语言,可以用来标记数据.定义数据类型,是一种 ...