离上次写博客整整两月了。
工作,忙,累,懒散,分裂。理由,也是借口。

我还活着。从明天起,要做一个勤劳的人。抽时间学习,抽时间分享文章。
HTML5,架构,用研,JS。碎碎的。

不进,即退。

利用label标签和CSS美化文件上传表单(不兼容IE6)

最近着实很忙,匆忙间有一个月没更新博客了。
文件上传类型表单<input type=”file” />是一个让很多前端开发者纠结过的表单类型,因为它是一个无法单纯用CSS给它定义兼容的样式。上周的工作中有个批量上传图片的页面,又遇到了这个问题,于是,今天把我的解决方案奉献给大家:利用label标签与CSS共同打造一个样式可控的并兼容IE6之外主流浏览器的上传表单。
实现思路通俗易懂:点此查看样例
利用LABEL与CSS美化文件上传表单
首先,我们要新增一个与file相册大小的button按钮,然后利用label为初始的file类型表单定义标注(关于label的解释与用法,此处不详解,不了解的请自行查阅HTML手册)。如此一来,一个可以触发选择文件表单的按钮就出来了。接下来,相信很多人都知道怎么做了。
有了一个可以触发file表单的按钮,只要通过绝对定位将file表单从文档流中拖出,然后用z-index属性将它的层级提升到比button按钮高,同时将file表单的透明度置为0,这样一来,file表单就正好覆盖在button按钮上了,并且可触发选择文件表单。此处有一点需要说明,FireFox中是无法通过width来设定宽度值的,所以需要用input的size值来设定file表单宽度值。
最后,附上样例中的成型代码:
HTML代码:

CSS代码:

.btns{position:relative}
.btns input{width:120px;height:30px}
.btns .btn_file_molding{position:absolute;left:0;top:0;z-index:1;border:0 none;filter:alpha(opacity=0);opacity:0}/*file的z-index要大于button*/

几个注意的细节:
1.file表单与button按钮的高宽一定要相同;
2.因各浏览器对file表单的表现不一致,其边框一定要隐藏掉,以免出现各浏览器不兼容问题;
3.firefox中直接通过样式定义width是无效的,需要用size设置file宽度;
4.IE6可用JS为button绑定file表单的点击事件,此处不详述。

另,本文提供的是一种主体思路,你可以在此思路上做进一步的美化扩展,比如加背景图片文字样式等等。

HTML 5的革新:结构之美

前言
HTML 5如同一场革命,正在Web2.0后时代轰轰烈烈的进行着。
HTML 5是什么,无须我在这里赘述了。对于HTML 5的革新,按我的理解,可以总结为语义明确的标签体系、化繁为简的富媒体支持、神奇的本地数据存储技术、不需要插件的富动画(canvas)、强大的API支持。总之,HTML 5让人机交互,人网交互变得更加舒适,贴合用户。以往对富媒体应用与本存储的支持乏力也不再是浏览器的切肤之痛。将Web从内容平台推向标准化的应用平台,并一统各在平台阵营的标准,才是HTML 5革命的初衷。
本文,我就抛砖引玉,阐述HTML 5的革新之一:语义更明确简洁的结构。
从”头”说起
一个标准的XHTML头部代码应该是这样:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312" />
</head>

你能记住吗?你会去死记硬背吗?当然不会!我们只需要机械的复制粘贴即可。
再看看一个标准的HTML 5头部是如何的:

<!doctype html>
<meta charset=gb2312>

孰繁孰简,就不用我说了。是的,HTML 5的头部可以如此简单,可以轻易的记住!并且,可以忽略大小写,引号以及最后一个尖括号前的反斜线。
为什么可以如此松散?其实,如果把XHTML当成text/html发送,浏览器一样可以很好的解析,浏览器并不在乎代码的语法。所以,HTML 5是形而上的,它可能会破坏原有的一些标准,但仍可在浏览器中很好的表现。
当然,为了团队协助与后续维护的方便,我们还是应该统一一种你喜欢的风格的写法,比如:

<!doctype html>
<html>
<head>
<meta charset="gb2312" />
...
</head>
<body>
...
</body>
</html>

另外,HTML 5虽然目前并不为所有浏览器所支持,但这个能省去100多字节(对于日PV百万级以上的站点,能省下不少的流量哦)的头部已可以完美的兼容了。如果你对浏览器解析模式有研究的话,你应该知道,页面在没有定义doctype的情况下会触发怪异模式,而只要定义了<!doctype html>浏览器就可以在标准模式下解析页面,而不需要指定某个类型的DTD。
新的语义化标签体系
语义化编码是一个合格前端Developer必备的技能,但随着网页的日渐丰富化,仅仅用原有的xhtml标签去语义化显然已经力不从心。上帝说:”要有光!”便有了光。于是,HTML 5提供了一系列新的标签及相应属性,以反应现代网站典型语义。实践出真理。还是写一个例子吧:

<div id="header">
	<div class="hgroup">
		<h1>网站标题</h1>
		<h1>网站副标题</h1>
	</div>
	<div id="nav">
		<ul>
			<li>HTML 5</li>
			<li>CSS</li>
			<li>JavaScript</li>
		</ul>
	</div>
</div>
<!--//header end-->
<div id="left">
	<div class="article">
		<p>这是一篇讲述HTML 5新结构标签的文章。</p>
	</div>
	<div class="article">
		<p>这还是一篇讲述HTML 5新结构标签的文章。</p>
	</div>
</div>
<!--//left end-->
<div id="aside">
	<h1>作者简介</h1>
	<p>Mr.Think,专注Web前端技术的凡夫俗子。</p>
</div>
<!--//side end-->
<div id="footer">
页面的底部
</div>
<!--//footer end-->

上面是一个简单的博客页面部分HTML,由头部、文章展示区、右侧栏、底部组成。编码整洁,也符合XHTML的语义化,即便是在HTML 5中也可以很好的表现。但是对浏览器来说,这就是一段没有区分开权重的代码,而不是一个让机器也能读懂语义的标签来定义相应的区块。比如,标准浏览器(比如Firefox、Chroome甚至新版的IE)都有一个快捷键可以带引客户直接跳转到页面的导航,但问题是所有的区块都是用DIV定义,并且DIV的ID值是同开发者定的,所以,浏览器并不知道哪个应该是导航链接所在区块。HTML 5新标签的出现,正好弥补了这一缺憾。那么,上面的代码,换成HTML 5就可以这样写:

<header>
	<hgroup>
		<h1>网站标题</h1>
		<h1>网站副标题</h1>
	</hgroup>
	<nav>
		<ul>
			<li>HTML 5</li>
			<li>CSS</li>
			<li>JavaScript</li>
		</ul>
	</nav>
</header>
<div id="left">
	<article>
		<p>这是一篇讲述HTML 5新结构标签的文章。</p>
	</article>
	<article>
		<p>这还是一篇讲述HTML 5新结构标签的文章。</p>
	</article>
</div>
<aside>
	<h1>作者简介</h1>
	<p>Mr.Think,专注Web前端技术的凡夫俗子。</p>
</aside>
<footer>
	网页底部
</footer>

原来,HTML的页面结构可以如此之美,不用注释也能一目了然。对于浏览器,找到对应的区块也不再会茫然无措。
如何用HTML 5新标签结构化元素
通过上面的示例,我们了解到HTML 5的新标签对结构化的革新,但切换到实际使用中,该如何恰当的使用它们呢?我想这也是很多HTML 5学习者想问一个问题。如同XHTML语义化一样,HTML 5语义化标签的使用也应该遵循:每个标签都有它特定的意义,而语义化,就是让我们在适当的位置用适当的标签,以更好的让人和机器(机器可理解为浏览器可理解为搜索引擎)都一目了然。比如header标签一般是页面的第一个区块元素(header标签也可用于类型的头部元素中,比如文章区块的标题),包含的了页面的主题信息;nav标签一般用于包裹导航信息;footer一般用来包裹页面底部信息;等等。
下面是我参考HTML 5手册列出的结构类常用新标签的语义解释及使用指引:
<header>标签
手册释义:定义 section 或 document 的页眉。
使用指引:一般用来包含页面头部,也可用于其他区域头部,比如article头部:

<header>
	<hgroup>
		<h1>网站标题</h1>
		<h1>网站副标题</h1>
	</hgroup>
</header>

<hgroup>标签
手册释义:用于对网页或区段(section)的标题进行组合。
使用指引:用于标题类的组合,比如文章的标题与副标题:

<hgroup>
	<h1>这是一篇介绍HTML 5结构标签的文章</h1>
	<h2>HTML 5的革新</h2>
</hgroup>

<nav>标签
手册释义:定义导航链接的部分。
使用指引:用于定义页面的导航部分:

<nav>
	<ul>
		<li>HTML 5</li>
		<li>CSS</li>
		<li>JavaScript</li>
	</ul>
</nav>

<aside>标签
定义 article 以外的内容。aside 的内容应该与 article 的内容相关。
使用指引:用于成节的内容,会在文档流中开始一个新的节,一般用于与文章内容相关的边栏:

<aside>
	<h1>作者简介</h1>
	<p>Mr.Think,专注Web前端技术的凡夫俗子。</p>
</aside>

<section>标签
手册释义:定义文档中的节(section)。比如章节、页眉、页脚或文档中的其他部分。
使用指引:用于成节的内容,会在文档流中开始一个新的节:

<section>
	<h1>section是什么?</h1>
	<h2>一个新的章节</h2>
	<article>
		<h2>关于section</h1>
		<p>section的介绍</p>
		...
	</article>
</section>

<footer>标签
手册释义:定义 section 或 document 的页脚。典型地,它会包含创作者的姓名、文档的创作日期以及/或者联系信息。
使用指引:一般用来包裹整个页面通用底部,也可用于其他区域底部,比如article底部:

<footer>
	COPYRIGHT@Mr.Think
</footer>

<article>标签
手册释义:定义外部的内容。比如来自一个外部的新闻提供者的一篇新的文章,或者来自 blog 的文本,或者是来自论坛的文
本。亦或是来自其他外部源内容。
使用指引:顾名思义,一般用于文章区块:

<article>
	<header>
		<hgroup>
			<h1>这是一篇介绍HTML 5结构标签的文章</h1>
			<h2>HTML 5的革新</h2>
		</hgroup>
		<time datetime="2011-03-20">2011.03.20</time>
	</header>
	<p>文章内容详情</p>
</article>

<figure>标签
手册释义:用于对元素进行组合。
使用指引:多用于图片与图片描述组合:

<figure>
	<img src="img.gif" alt="figure标签"  title="figure标签" />
	<figcaption>这儿是图片的描述信息</figcaption>
</figure>

<menu>标签
手册释义:定义菜单列表。当希望列出表单控件时使用该标签。
使用指引:使用于菜单类区块,用来定义菜单列表或菜单选项:

<menu>
	<li>HTML 5</li>
	<li>CSS</li>
	<li>JavaScript</li>
</menu>

HTML 5的其他新标签,就不此一一解释了,请自行查询一下手册。
其实,这些东西,如同XHTML的div、h1、inpu等标签一样,只要平时多加实践,运用自如也是轻而易举的。
关于兼容性
如果你是一个喜欢研究关注前端的人,你应该知道淘宝的页面结构中已大量用到了HTML 5新标签。所以,我想说的是只要敢于尝试,兼容性不是问题,兼容的方法,网上有很多(本文是讲结构的,哈~)。

后话
任何一门新技术,都需要一个适应的过程。如果你准备好了做一名优秀的Web前端开发人员,那你就得不断的尝试并接受最新的前端技术。
孙文曾说,欲经文明之幸福,不得不经文明之痛苦。人类的革命如此,HTML 5的革命亦是如此。IE的日渐没落,让各大浏览器厂商以一次进入了战国时代,群雄逐鹿。而对于开发者,我们只奢求各大浏览器厂商尽可能的遵循同一个标准,而不是群雄逐鹿后的四分五裂。因为,高效完美的呈现给各类用户同样的应用才是我们的终极目标。

如此,本文从页面的doctype说起,到用HTML 5新标签搭建语义化更明确的页面的结构,再解释了一番与页面结构相关的新标签。相信大家对HTML 5的结构性新标签有了一个新的认知,如果你有兴趣,那就打开你的IDE,写上一段由HTML 5新标签搭建的代码,然后用CSS去描绘你的宏伟蓝图吧!

基于jQuery的可用于选项卡及幻灯的切换插件

基于jQuery的可用于选项卡及幻灯的切换插件
最近公司项目页面中用到选项卡与幻灯比较多,特地写了个集选项卡、幻灯片与播放控制于一体的插件,同页面可多次使用。思路就不说了,记得以前写过一个自动切换的幻灯插件:http://mrthink.net/jq-plugin-ifadeslide/,思路有部分是类似的。当然,本文中插件源码中也有注释~
插件核心代码:点此查看样例

$.fn.WIT_SetTab=function(iSet){
	/*
	 * @Mr.Think
	 * Nav: 导航钩子;
	 * Field:切换区域
	 * K:初始化索引;
	 * CurCls:高亮样式;
	 * Auto:是否自动切换;
	 * AutoTime:自动切换时间;
	 * OutTime:淡入时间;
	 * InTime:淡出时间;
	 * CrossTime:鼠标无意识划过时间
	 * Ajax:是否开启ajax
	 * AjaxFun:开启ajax后执行的函数
	 */
	iSet=$.extend({Nav:null,Field:null,K:0,CurCls:'cur',Auto:false,AutoTime:4000,OutTime:100,InTime:150,CrossTime:60},iSet||{});
	var acrossFun=null,hasCls=false,autoSlide=null;
	//切换函数
	function changeFun(n){
		iSet.Field.filter(':visible').fadeOut(iSet.OutTime, function(){
			iSet.Field.eq(n).fadeIn(iSet.InTime).siblings().hide();
		});
		iSet.Nav.eq(n).addClass(iSet.CurCls).siblings().removeClass(iSet.CurCls);
	}
	//初始高亮第一个
	changeFun(iSet.K);
	//鼠标事件
	iSet.Nav.hover(function(){
		iSet.K=iSet.Nav.index(this);
		if(iSet.Auto){
			clearInterval(autoSlide);
		}
		hasCls = $(this).hasClass(iSet.CurCls);
		//避免无意识划过时触发
		acrossFun=setTimeout(function(){
			//避免当前高亮时划入再次触发
			if(!hasCls){
				changeFun(iSet.K);
			}
		},iSet.CrossTime);
	},function(){
		clearTimeout(acrossFun);
		//ajax调用
		if(iSet.Ajax){
			iSet.AjaxFun();
		}
		if(iSet.Auto){
			//自动切换
			autoSlide = setInterval(function(){
	            iSet.K++;
	            changeFun(iSet.K);
	            if (iSet.K == iSet.Field.size()) {
	                changeFun(0);
					iSet.K=0;
	            }
	        }, iSet.AutoTime)
		}
	}).eq(0).trigger('mouseleave');
}

【西安】求贤令:智讯互动渴求UI设计师一名

——听说你跳槽了?回西安了?
——恩。
——薪水很高吗?
——跟原来差不多。
——那你去那儿干啥?
——购买力增强三倍。
再次求贤,我们急需一名UI设计师!
基本要求:
·了解网站前端界面设计,对用户体验有深入理解;
·美术感好,有很强视觉表现力;
·对Flash、Photoshop、Illustrator等相关工具应用自如;
·美术、设计或相关专业
·痴迷于创意,热心于品牌视觉设计,善于把握潮流动向;
如有以下技能,狠狠加分!
·熟悉HTML语言,掌握Dreamweaver等制作工具;
·熟悉XHTML+CSS网页布局;
·熟悉Flash ActionScript 动画设计;
·有传统广告公司经验,或有成熟平面设计作品;
·有手绘功底。
薪资:
能力决定薪水!我们提供高于西安同行业的薪资。
公司介绍:
智讯互动,西安首家整合互动营销机构,已搞定西安最优质的客户,万事具备,只欠猛人。
我们提供与京广沪相同水平的薪水,在西安这座很有味道的城市,大家可以过上更体面的生活。
热切欢迎业内的西安游子回来。
我们的人才理念很简单:
·我们诚挚的邀请优秀的人才加盟,并为他们创造尽量宽松、愉快的工作环境。
·我们推崇专注而高效的工作,轻松开放的沟通,用创造性的想法解决问题。
·我们提供高于同城行业标准的薪水,能让你在这个城市里体面、有尊严的生活。
在我们的团队中,有艺术生、文科生、理科生、退学生;
有人热衷相声表演,有人钻研佛教文化,也有人喜欢泡淘宝和豆瓣;
有人是手持设备技术发烧友,有人是游戏狂人,霸占公司那台Wii;
我们鼓励背景各异的人在此互相分享,激荡创造力。
投递:
cnbluebird#gmail.com(非诚勿扰)