页面制作人员的修炼之道(一):前言

一月 17th, 2007

[写本文的目的]:与您分享如何学习基于web标准的网页制作。
[本文适合人群]:网页制作初学者。有一定的页面制作基础,并想学或正在学习web标准的朋友们。
[文章内容摘要]:
1、前言-新形势下的网页制作以及职业定位。
2、基于web标准的网页有哪些基本特征。
3、如何理解结构层、表现层、行为层代码的脱离。
4、编写符合标准的(x)html代码的一般方法。
5、用CSS美化页面。
6、正确认识Javascript。
7、网页制作人员需要了解哪些知识。
8、我常用的工具软件介绍。
9、推荐的网站列表。
[备注]:
本文只是从理解以及概念上去分享网页制作的学习方法和步骤。力求通俗易懂,所以没有任何具体的代码、规范等内容,比如Xhtml的代码规范、CSS样式手册等具体内容我将会在文章的最后“推荐的资源列表”中将我所看到过或学习过的教程一一列出。

新形势下的网页制作以及职业定位。

随着网络的发展,前几年还只是国外网站以及国内少数个人网站才会去实施的web标准,现在已经是大行其道了。上至新浪、163等门户网站,下至刚从学校毕业的大学生们的个人网站。到处都是它的踪影。
网站建设的分工也从原来的一人承包(从效果到页面到程序代码)的模式也逐步转变成Web Designer + Page Builder + Programer 的项目组合作开发模式。正是由于web标准的兴起,“页面工程师”这个称谓也慢慢走上了舞台并担任起了相当重要的角色。
曾在蓝色经典上看到Aether帖出来的土豆网(tudou.com)的招聘信息,感觉这个招聘信息非常的有代表性,原文如下:[quote]
页面工程师,1人
技能要求:
1、对W3C网页标准(Web Standards)有较深理解;
·精通结构层代码(XHTML)和样式层代码(CSS)。
·对语义、结构与内容分离等有深刻理解;
·熟悉Javascript,并对行为层编程机理有一定理解,并了解后台程序制作流程。
2、有成熟作品,目前将主要从事代码方向工作;
3、精通Javascript优先。
工作内容:
配合页面架构(Web Architect,负责总体规划),完成页面制作(Page Builder)。
其上游是页面设计(Web Designer),下游是网站程序员(Programer)。
[/quote]
我非常的认同这种职业定位,所以转了过来。或许这将是未来比较流行的网站制作过程中的项目组分工合作的模式吧。

深圳归来

一月 16th, 2007

这几天一直没有上过网,非常纯粹地在玩!发几张照片纪念一下。

世界之窗门口

偷拍了几个洋MM

欢乐谷与同事合影

欢乐谷

当我回来打开我的博客时,我发现署名为“小小”的网友来这里留了很多话,非常抱歉没能及时地回复你的评论。现在也不想去一一回复了,想知道原因吗?因为我发现我的文字功底比你薄多了。不知道给你回什么了。感谢你对我的支持和关注,非常愿意与你成为朋友!

深圳旅游

一月 11th, 2007

这个周末我会去这里:

应该说算是公司福利吧,年底都会派部分员工去外边玩。所以这几天我会不上网,不沾电脑的边。下周回来!

实现div可编辑的常见方法

一月 11th, 2007

功能:实现网页内容的即时编辑,增加页面的可用性、交互性。
方法1:直接通过textarea标签实现,请运行这个Demo

思路:将textarea通过CSS样式设计成让用户感觉不像是textarea的样子,通过onblur、oumouseout等属性进行ajax保存用户数据。

方法二:通过document.createElement的方法向页面增加input来实现。请运行这个Demo

思路:
1、当用户鼠标经过可编辑区域时,用背景色等方式提醒用户该区域可编辑。
2、当用户鼠标点击该区域时,也就是onclick事件时,先将原来的内容清掉,将临时创建出来一个输入框和一个输入按扭。
3、用户修改完后,点击“保存”按扭时通过ajax向数据库中写入新的数据。

PS:第二个方法的代码还有点问题,有空再来调试一下。

代替marquee的滚动字幕效果代码

一月 8th, 2007

由于marquee标签现在用得是越来越少了,所以滚动效果的做法大多也都改用javascript来实现了,至于不明白为什么不直接用marquee标签的朋友,不妨先阅读一下这篇文章
第一种方法:用javascript模拟marquee的做法。
出处:网易游戏

<!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" />
<title>热点新闻</title>
<style type="text/css">
<!--
body {
    margin: 0px;
    font-size: 12px;
    color: #938C43;
    line-height: 150%;
    text-align:center;
}
a:link{color: #9D943A;font-size:12px;}
a:hover{color: #FF3300;font-size:12px;}
a:visited{color: #9D943A;font-size:12px;}
a.red:link{color: #ff0000;font-size:12px;}
a.red:hover{color: #ff0000;font-size:12px;}
a.red:visited{color: #ff0000;font-size:12px;}
#marqueeBox{background:#f7f7f7;border:1px solid silver;padding:1px;text-align:center;margin:0 auto;}
-->
</style>
</head>

<body>
<h4>滚动新闻</h4>
<script language="JavaScript" type="text/javascript">
var marqueeContent=new Array();
marqueeContent[0]="<a href=http://xyq.163.com/news/2006/11/2-2-20061102170913.html target=_blank>用“梦幻密保”快速取回帐号密码</a>";
marqueeContent[1]="<a href=http://ekey.163.com/ target=_blank>网易将军令官方网站</a>";
marqueeContent[2]="<a href=http://xyq.163.com/download/wallpaper.htm target=_blank>最新壁纸下载</a>";
marqueeContent[3]="<a href=http://xyq.163.com/download/around.htm target=_blank>最新屏保下载</a>";
var marqueeInterval=new Array();
var marqueeId=0;
var marqueeDelay=2000;
var marqueeHeight=20;
function initMarquee() {
    var str=marqueeContent[0];
    document.write('<div id="marqueeBox" style="overflow:hidden;width:250px;height:'+marqueeHeight+'px" onmouseover="clearInterval(marqueeInterval[0])" onmouseout="marqueeInterval[0]=setInterval(\'startMarquee()\',marqueeDelay)"><div>'+str+'</div></div>');
    marqueeId++;
    marqueeInterval[0]=setInterval("startMarquee()",marqueeDelay);
}
function startMarquee() {
    var str=marqueeContent[marqueeId];
    marqueeId++;
    if(marqueeId>=marqueeContent.length) marqueeId=0;
    if(document.getElementById("marqueeBox").childNodes.length==1) {
    var nextLine=document.createElement('DIV');
    nextLine.innerHTML=str;
    document.getElementById("marqueeBox").appendChild(nextLine);
    }
    else {
        document.getElementById("marqueeBox").childNodes[0].innerHTML=str;
        document.getElementById("marqueeBox").appendChild(document.getElementById("marqueeBox").childNodes[0]);
        document.getElementById("marqueeBox").scrollTop=0;
    }
    clearInterval(marqueeInterval[1]);
    marqueeInterval[1]=setInterval("scrollMarquee()",20);
}
function scrollMarquee() {
    document.getElementById("marqueeBox").scrollTop++;
    if(document.getElementById("marqueeBox").scrollTop%marqueeHeight==(marqueeHeight-1)){
    clearInterval(marqueeInterval[1]);
    }
}
initMarquee();
</script>

</body>
</html>

个人观点:从web可用性角度上讲,我们在采用这段代码的同时要考虑到noscript环境下的可用性,建议将内容还是以下边代码的形式出现在页面中。如:

<div id="newslist">
<ul>
<li><a href=http://xyq.163.com/news/2006/11/2-2-20061102170913.html target=_blank>用“梦幻密保”快速取回帐号密码</a></li>
<li><a href=http://ekey.163.com/ target=_blank>网易将军令官方网站</a></li>
<li><a href=http://xyq.163.com/download/wallpaper.htm target=_blank>最新壁纸下载</a></li>
<li><a href=http://xyq.163.com/download/around.htm target=_blank>最新屏保下载</a></li>
</ul>
</div>

然后用脚本去设置隐藏,将列表项读进javascript中定义的数组中。即可达到在noscript环境下也能正常看到内容列表。

第二种方法:这个更强,能自动根据内容自动进行左右滚动,解决了宽度太小造成的截取问题。
原文作者:风动人

<html>
<head>
<title> SCROLL </title>
<style type="text/css">
#infozone{font-size:12px;color:#aa6;overflow:hidden;width:100px;height:20px;}
#infozone div{height:20px;line-height:20px;white-space:nowrap;overflow:hidden;}
</style>
<script type="text/javascript">
var tc;
window.onload=function(){
    var o=document.getElementById('infozone');hscroll(o);
    window.setInterval(function(){window.clearTimeout(tc);o.firstChild.style.marginLeft='0px';scrollup(o,20,0);},10000);
}
function scrollup(o,d,c){
    if(d==c){
        var t=o.firstChild.cloneNode(true);
        o.removeChild(o.firstChild);o.appendChild(t);
        t.style.marginTop=o.firstChild.style.marginTop='0px';
        hscroll(o);
    }
    else{
        ch=false;var s=3,c=c+s,l=(c>=d?c-d:0);
        o.firstChild.style.marginTop=-c+l+'px';
        window.setTimeout(function(){scrollup(o,d,c-l)},50);
    }
}

function hscroll(o){
    var w1=o.firstChild.offsetWidth,w2=o.offsetWidth;
    if(w1<=w2)return;
    tc=window.setTimeout(function(){hs(o,w1-w2,0,w1-w2)},3500);
}

function hs(o,d,c,p){
    c++;var t=(c>0?-c:c);o.firstChild.style.marginLeft=t+'px';
    if(c==d){if(d==0){tc=window.setTimeout(function(){hs(o,p,0,p)},2500);}else tc=window.setTimeout(function(){hs(o,0,-p,p)},3500);}
    else tc=window.setTimeout(function(){hs(o,d,c,p)},5);
}
</script>
</head>

<body>
<div id="infozone"><div>温岚 - 屋顶(周杰伦 对唱版)</div><div>范玮琪 - 那些花儿</div><div>张韶涵 - 娃娃</div><div>孙楠&韩红 - 美丽的神话</div></div>
</body>
</html>

个人观点:从xhtml的语义化的角度看,页面内容中滥用div标签现象比较严重,可改成ul/li形式。

第三种是最精简的,代码非常少。
原文作者:cityvoice

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<HTML>
<HEAD>
  <TITLE> New Document </TITLE>
  <META NAME="Generator" CONTENT="EditPlus">
  <META NAME="Author" CONTENT="">
  <META NAME="Keywords" CONTENT="">
  <META NAME="Description" CONTENT="">
  <style type="text/css">
    #newslist{
        background:#f7f7f7;border:1px solid silver;padding:1px;height:20px;line-height:20px;width:300px;
    }
    #contain{
        font-size:12px;overflow:hidden;list-style:none;width:300px;height:20px;margin:0px;padding:0;
    }
    #contain li{
        height:20px;line-height:20px;white-space:nowrap;overflow:hidden;
    }
</style>
</HEAD>

<BODY>
    <div id="newslist">
        <ul id="contain">
            <li><a href="http:/www.iwcn.net">温岚 - 屋顶(左右摆动)</a></li>
            <li><a href="http:/www.iwcn.net">范玮琪 - 那些花儿</a></li>
            <li><a href="http:/www.iwcn.net">张韶涵 - 娃娃</a></li>
            <li><a href="http:/www.iwcn.net">孙楠&韩红 - 美丽的神话</a></li>
            <li><a href="http:/www.iwcn.net">张信哲 - 白月光</a></li>
        </ul>
    </div>
<SCRIPT LANGUAGE="JavaScript">
function xx(){
var container=document.getElementById("contain");
container.appendChild(container.firstChild);
}
setInterval("xx()",3000);
</SCRIPT>
</BODY>
</HTML>

个人观点:太短小精干了,如果你喜欢简单的话,这个也可以考虑的。

一个用户登录,犯得着全都模仿吗?

十二月 29th, 2006


最先看到的应该是163的。

后来雅虎改成这样了。

百度也是这样的。

还有很多小网站更是照搬过来改个名字就用了。。。

Google的一个小错误

十二月 29th, 2006

电子邮件:
密码:
哈哈。一个半角一个全角。

2006圣诞网站Logo大阅兵

十二月 26th, 2006












































以下是Flash版
网易
attachments/month_0612/f2006122602227.swf
雅虎
attachments/month_0612/r2006122602235.swf
泡泡网
attachments/month_0612/x2006122602245.swf
雅虎
attachments/month_0612/z2006122602252.swf
Dangdang换得最快,一转眼就换成元旦的了。

Merry Christmas

十二月 25th, 2006

Merry Christmas

 
今天下班,你一定要吃蛋炒饭,但只能吃饭不能吃蛋,如果你能达到蛋饭分离的境界,必能“剩蛋快乐”!如果你能把炒饭中的蛋再变回原来完整的蛋,“圆蛋快乐”!!
 
图片来源:蓝色经典
图片作者:lain2k

[分享]CSS页码效果

十二月 24th, 2006


不知道网上有没有做成这样的,纯粹是不小心做出来的。
最终效果说明:
页面结构是这样的

<li><a href="#">1</a></li>

最终看到的彩色下划线是根据li的背景色显示出来的

li{background:#f60;}

而鼠标移上去的色彩变化是根据

a:hover{background:#f93}

当然关键的地方在于

li{width:20px;height:20px}

定义li的高度时由于没有定义line-height:20px,所以会造成a标签在显示时下方会留空几个像素。正在由于这个错误,无意中产生了这个效果

请运行下段代码看效果。

<!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" lang="gb2312">
	<head>
		<title>代码基地博客站</title>
		<meta http-equiv="Content-Type" content="text/html; charset=gb2312" />
		<meta name="Keywords" content="CSS页码链接" />
		<meta name="Description" content="CSS制作的页码链接效果" />
		<meta name="Author" content="jxdawei,[email protected]" />
		<style type="text/css">
			body{
				font-size:62.5%;
			}
			h1{
				font-size:1.4em;
			}
			h2{
				clear:both;
				font-size:1.2em;
			}
			#pageClass{
				clear:both;
				font-size:1.2em;
			}
			#pageClass ul{
				list-style:none;
			}
			#pageClass li{
				float:left;
				width:20px;
				height:20px;
				line-height:20px;
				border:1px solid silver;
				margin:0 3px;
			}
			#pageClass a{
				display:block;
				text-align:center;
			}
			#pageClass a:link,#pageClass a:visited{
				background:white;
				text-decoration: none;
				color:gray;
			}
			#pageClass a:hover,#pageClass a:active{
				text-decoration: none;
				background:gray;
				color:white;
			}

		/*第二个效果*/
			#pageClass2{
				clear:both;
				font-size:1.2em;
			}
			#pageClass2 ul{
				list-style:none;
			}
			#pageClass2 li{
				float:left;
				width:20px;
				height:20px;
				border:1px solid silver;
				margin:0 3px;
			}
			#pageClass2 a{
				display:block;
				text-align:center;
			}
			#pageClass2 a:link,#pageClass2 a:visited{
				background:white;
				text-decoration: none;
				color:gray;
			}
			#pageClass2 a:hover,#pageClass2 a:active{
				text-decoration: none;
				background:gray;
				color:white;
				line-height:14px;
			}
		/*第三个效果*/
			#pageClass3{
				clear:both;
				font-size:1.2em;
			}
			#pageClass3 ul{
				list-style:none;
			}
			#pageClass3 li{
				float:left;
				width:20px;
				height:20px;
				border:1px solid silver;
				background:#f60;
				margin:0 3px;
			}
			#pageClass3 a{
				display:block;
				text-align:center;
				line-height:16px;
			}
			#pageClass3 a:link,#pageClass3 a:visited{
				background:white;
				text-decoration: none;
				color:gray;
			}
			#pageClass3 a:hover,#pageClass3 a:active{
				text-decoration: none;
				background:#f93;
				color:white;
				line-height:16px;
				}
		</style>
	</head>

	<body>
		<h1>页码效果</h1>
		<h2>这是我原本想要去做的效果</h2>
		<div id="pageClass">
			<ul>
				<li><a href="http://www.iwcn.net/default.asp?cateID=3">1</a></li>
				<li><a href="http://www.iwcn.net/default.asp?cateID=4">2</a></li>
				<li><a href="http://www.iwcn.net/default.asp?cateID=5">3</a></li>
				<li><a href="http://www.iwcn.net/default.asp?cateID=6">4</a></li>
				<li><a href="http://www.iwcn.net/default.asp?cateID=8">5</a></li>
				<li><a href="http://www.iwcn.net/default.asp?cateID=9">6</a></li>
				<li><a href="http://www.iwcn.net/default.asp">7</a></li>
			</ul>
		</div>
		<h2>做完之后成这样了</h2>
		<div id="pageClass2">
			<ul>
				<li><a href="http://www.iwcn.net/default.asp?cateID=3">1</a></li>
				<li><a href="http://www.iwcn.net/default.asp?cateID=4">2</a></li>
				<li><a href="http://www.iwcn.net/default.asp?cateID=5">3</a></li>
				<li><a href="http://www.iwcn.net/default.asp?cateID=6">4</a></li>
				<li><a href="http://www.iwcn.net/default.asp?cateID=8">5</a></li>
				<li><a href="http://www.iwcn.net/default.asp?cateID=9">6</a></li>
				<li><a href="http://www.iwcn.net/default.asp">7</a></li>
			</ul>
		</div>
		<h2>改了改成这样了</h2>
		<div id="pageClass3">
			<ul>
				<li><a href="http://www.iwcn.net/default.asp?cateID=3">1</a></li>
				<li><a href="http://www.iwcn.net/default.asp?cateID=4">2</a></li>
				<li><a href="http://www.iwcn.net/default.asp?cateID=5">3</a></li>
				<li><a href="http://www.iwcn.net/default.asp?cateID=6">4</a></li>
				<li><a href="http://www.iwcn.net/default.asp?cateID=8">5</a></li>
				<li><a href="http://www.iwcn.net/default.asp?cateID=9">6</a></li>
				<li><a href="http://www.iwcn.net/default.asp">7</a></li>
			</ul>
		</div>
	</body>
</HTML>