【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布局 头部 内容 页脚 & ...
随机推荐
- 前端技术俗语js
注:原文是英文,本文是我翻译的.有人把我翻译的内容原文照抄,放到他自己的专栏,搞得有人问我是不是我抄袭了……请支持我的劳动成果,花了两个小时翻译的,谢谢.转载请注明译者为方应杭. 嘿,我最近接到一个 ...
- 怎么用谷歌浏览器查看请求或响应HTTP头?
要使用谷歌浏览器查看请求或响应HTTP标头,可以采取以下步骤: 在Chrome浏览器,访问一个网址,点击右键,选择检查,打开开发人员工具(或直接按F12). 选择 Network 选项卡. 重新加载页 ...
- js学习日记-对象字面量
一.对象字面量语法 var person={ name:'小王', age:18, _pri:233 } 成员名称的单引号不是必须的 最后一个成员结尾不要用逗号,不然在某些浏览器中会抛出错误 成员名相 ...
- Replication--将LSN转换成16进制
在复制中经常会使用到16进制的LSN,但在日志fn_dblog中的LSN是数字形式,于是从网上找到以下转换函数CREATE FUNCTION dbo.fn_convertnumericlsntobin ...
- stderr和stdout(printf、fprintf、sprintf)(转)
本文转自:http://www.cnblogs.com/zhangyabin---acm/p/3203745.html 先区分一下:printf,sprintf,fprintf. 1,printf就是 ...
- javaweb报错:java.lang.NumberFormatException: null
报错环境: JSP向Severlet页面传值,当Serverlet页执行以下语句时,后台日志报错 int softType = Integer.parseInt(request.getParamete ...
- Linux--多用户登录服务器端口抓包
以root身份登录1.新建用户组用命令groupadd test2.添加用户useradd -d /home/test/bei_1 -s /bin/sh -g test -m bei_1此命令新建了一 ...
- C# Winform下一个热插拔的MIS/MRP/ERP框架13(窗体基类)
作为一个ERP数据处理框架,大部分的开发场景都差不多. 理想中,对于通用数据处理,我的步骤如下: 1.为窗体指定数据来源(数据表/查询等): 2.拖入编辑控件,指定绑定字段: 3.结束. 为此,我设计 ...
- 十,PHP下载文件
1,文件类型 (1)文本文件,如xx.txt. (2)二进制文件,如图片.视频.音频. 2,文件下载流程如下图所示,首先浏览器向服务器发送下载请求,服务器将下载资源读入内存,再通过http将资源返回到 ...
- 淘宝内部分享:MySQL & MariaDB性能优化 【转】
MySQL· 5.7优化·Metadata Lock子系统的优化 背景 引入MDL锁的目的,最初是为了解决著名的bug#989,在MySQL 5.1及之前的版本,事务执行过程中并不维护涉及到的所有表的 ...