Profil de 国强平行空间PhotosBlogListesPlus Outils Aide

Blog


04/09/2007

制作 可滚动 可关闭 的flash对联广告

需要在页面里加的一段脚本:==============================

<SCRIPT  language=JavaScript event=FSCommand() for=happydiet>
duilian2.style.visibility='hidden';
duilian3.style.visibility='hidden';
</SCRIPT>
<SCRIPT language=JavaScript src="调用.js">
</SCRIPT>

这是调用的代码:=======================================

function initEcAd() {
document.all.duilian2.style.posTop = -200;
document.all.duilian2.style.visibility = 'visible'
document.all.duilian3.style.posTop = -200;
document.all.duilian3.style.visibility = 'visible'
MoveLeftLayer('duilian2');
MoveRightLayer('duilian3');
}
function MoveLeftLayer(layerName) {
var x = 5;
var y = 80;
var diff = (document.body.scrollTop + y - document.all.duilian2.style.posTop)*.40;
var y = document.body.scrollTop + y - diff;
eval("document.all." + layerName + ".style.posTop = y");
eval("document.all." + layerName + ".style.posLeft = x");
setTimeout("MoveLeftLayer('duilian2');", 20);
}
function MoveRightLayer(layerName) {
var x = 5;
var y = 80;
var diff = (document.body.scrollTop + y - document.all.duilian3.style.posTop)*.40;
var y = document.body.scrollTop + y - diff;
eval("document.all." + layerName + ".style.posTop = y");
eval("document.all." + layerName + ".style.posRight = x");
setTimeout("MoveRightLayer('duilian3');", 20);
}
document.write("<div id=duilian2 style='position: absolute;visibility:hidden;z-index:1'><EMBED src='动画.swf' quality=high WIDTH=100 HEIGHT=300 TYPE='application/x-shockwave-flash' id=happydiet></EMBED></div>"
+"<div id=duilian3 style='position: absolute;visibility:hidden;z-index:1'><EMBED src='动画.swf' quality=high WIDTH=100 HEIGHT=300 TYPE='application/x-shockwave-flash' id=happydiet></EMBED></div>");
initEcAd()

flash中加入的代码:=====================================

on (release)
 { 
getURL("FSCommand:", "");
 } 

 

我们网页设计师应掌握些什么?

做了这个行业有几个年头了,而对这个行业也分了很多方面的工作,但是做为页面制作人员应该了解的知识

如果说美工只负责出效果图,程序员只负责数据处理的话。那么网页制作人员需要负责的东西无疑是最多的。
1.XHTML(这是最根本的,也是最重要的。)
2.CSS(不学会这个,你根本没有办法去实现美工所画出来的效果图。)
3.Javascript(虽然说要注重结构、表现、行为的脱离,但很多时候我们也需要如何用javascript和css配合作战。)
4.Dom(文档对象模型,配合javascript使用。)
以下内容为个人体会,最重要的是上边四点。
5.SEO(搜索引擎优化,虽然现在有专门的做SEO的公司,但不是每个网站都会去请那些人来做这种事情的,如果你会了你就会知道其实很多优化是页面代码上的优化。)
6.网站的可用性(比如在NoScript环境下的正常显示等。)
7.网站的易用性(美工画出来的图是没有行为的,而用户是可以在网页上做事的,所以如何让页面的易用性,这是你应该考虑的,除非你们还有专门的UE人员。)
8.了解后台程序开发(对后台开发的了解有利于和开发人员进行沟通,不然会很麻烦。)

工具软件列表
1.Editplus 用来编写html代码和javascript代码。
2.TopStyle 用来编写css代码。
3.Dreamweaver 这个相信不用我介绍了吧。
4.Firefox 浏览器,强大的插件功能。
5.Opera 浏览器,多装几个,看一下你的作品在多种浏览器中是不是一样。

推荐资源列表
网站
http://www.w3.org
http://www.blueidea.com
http://www.w3cn.org
http://www.csszengarden.com/
http://yuntian.cnblogs.com/
http://sheneyan.com/
http://andy.andymao.com/
http://www.forest53.com/

教程
样式表中文手册 -苏昱
样式表滤镜中文手册 -苏昱
文档对象模型中文手册 -苏昱
在30天内打造更具亲和力的网站
网站重构
《CSS网站布局实录》
javascript宝典(第四版)
 
13/08/2007

网站优化 VS SEO

网站优化 VS SEO
一、网站优化包括了SEO。SEO只是一种网站优化的方法。
二、除SEO以外,网站优化还包括以下方面:
1、网站美工:针对不同的客户,不同的网站,美工的重要性也不一样,美观大方的页面布局,能够提高企业形象,加强访客感受,甚至可以提高转化率,提高网站粘度。
2、功能优化:即通过人性化的设计,提高客户的访问体验,尽可能减少客户到达每一个页面所需要点击的次数。
3、速度优化:电信、网通等。。。
4、合理引导:如何引导客户成为最终的消费者?采取什么引导方式?特别是对于销售类网站来说,引导是很重要的提高转化率的方法。
5、诚信展示:通过展示企业的联系方式(地址、电话、邮箱、邮编、传真),荣誉,网站相关的证件等,提高信任度。
6、易于维护:易于维护的网站,会很大程度上降低企业的维护成本。
7、易于更新:大部分企业网站,都应该是一个具有一定活性的、易于更新的网站。
8、内容优化:网站内容的优化,也是SEO的重要部分,对大部分网站来说,内容准确,语义清楚,表述合理即可,但很多网站却达不到这一基本要求,甚至错字连篇。
 

不同的企业,有着不同的营销方式,所以对一个网站的优化也要具体问题具体分析,有时候为了美工,可以牺牲部分的SEO,合理组合基本的优化方法才好。

交互设计之路经典语录

1.我们让精神病人管理精神病院了。
2.解决问题的关键是在编程之前进行交互设计。
3.奇怪的不是熊跳的好不好,而是它竟然在跳。
4.和我在一起工作的大多数产品经理宁愿按时交付不成熟的产品,也不愿意承担拖延工期的恶名。
5.唯一比编写软件更昂贵的事情是编写坏软件。
6.如果这一次出现在明天怎么办?
8.是过程让产品失去人性,而不是技术。
9.只为一个人设计。
10.让软件有礼貌。
11.概念的完整性是一种核心的竞争力。
12.知道砍掉那些功能。
13.为设计编写文档,让它变成产品。 
08/08/2007

div css布局结构语义与兼容相关影响

div + css 不等于xhtm+css,这种说法有一定的误解。这里涉及到一个标签语义的问题。
div + css这种说法最大的不合理就是,容易使初学者忽略了其他标签。
也容易忽略了标签所包含的意义。许多新手写div + css,满页只有div标签而没有其他。
div + css布局不仅仅是单纯的div标签,不是div替换table就可以了事。

新的网页标准不但要求规范化标签,而且建议使用更加适合的标签。有其他新标签提出,同时也有一些旧的被剔除。
比如  <b>加粗</b>  推荐用  <strong>加粗表示强调</strong> 代替。
<ul><li>无序列表A</li><li>无序列表B</li></ul>
<ol><li>有序列表A</li><li>有序列表B</li></ol> , 而不是一路地div下去
还有 <h1>主标题</h1>,以前用来控制字体大小。
<p>段落</p>
<th>表头</th>
<blockquote>一大段引用</blockquote>

布局交给标签,样式交给CSS,从而使结构与表现分离,这样的效果才是网站重构的目的。

另外不要觉得网页标准化不关SEO事:
第一、当满世界都xhtm+css了,你还会继续使用table吗?
最理想的结果就是,如果大家的页面标签有意义,蜘蛛根据标签就知道哪些主要哪些次要,少花很多分析时间。
第二、xhtml + css 能使页面代码大大减小,并且提高代码的重用率,
一大堆无用的不断重复的font等代码被清出去,网页不但清爽而且小巧,载入速度快执行效率高。蜘蛛解析这种页面也比较有效率。
而CSS甚至只需要一个定义文件就能控制整个网站的样式。避免了无用代码对SE分析的干扰。
另外,当访问量巨大的时候,比如新浪网易,这种结构节约了多少带宽?
第三、网站有需要改版的时候,你可能只需要轻松修改CSS文件就可以了。其他东西可以不变动避免改版的给SE带来巨大影响

还有其他的,一时没想到。以后想到了再补上。

----------补充------------------

24#
何必花大量时间和资源去苛求每一个标签都通过严格的w3c验证呢?

回24楼的, 干嘛人家要提出W3C标准呢?
将来我们的手机可以上网,电视可以上网,大大小小的随身听笔记本都可以上网...
仅是PC显示器的分辨率,常用的就有四五种了。不可能为每个情况都准备一套应付方案。
各种设备显示都不相同,怎么办?

百度没有声明doctype,这种页面用wap浏览恐怕会令人不太happy。
将来的浏览器也会确定不了百度用的到底是什么年代的文档类型,可能会有多少小偏差。
花大量时间趋向w3c标准,最终还是为了降低更多的维护成本。如果CSS真的能解决这些兼容问题的话。
减少带宽只是其中一个好处...

----------------------

当初Netscape和IE的浏览器大战,最受伤的就是那些网页设计人士
现在Firefox和IE再来打一场的话,起码中间还能有个W3C标准规范
虽然FF和IE还是有一些兼容问题,但是比起以前的Netscape大战已经好太多了
我们已经在这些标准里面受益了
如果FireFox和IE完全不兼容,那又要针对FireFox写多几套分辨率方案....

------------------------------------------------------------

兼容问题还不只是浏览器.屏幕分辨率问题也是很严重
从前做一个网站, 第一件事就是选分辨率. 是用800x600还是1024*768好?
虽然2007年1024*768已经占了主流,但是随着19寸显示器、宽屏的出现,这个分辨率威胁会越来越大
table布局其中一个缺点就是伸缩性太差.
而采用xhtml+css,可以通过相对大小的控制,谋求适应大部分用户的浏览。
网易重构以后,不仅从800x600过渡到1024x768,
而且大部分网民都能正常浏览,也能方便的改版以应付将来主流分辨率的改变。
如果继续采用table布局,每过两三年就要重新设计一次那是很恐怖的工作量。
网易现在的首页还是800x600就能说明这个分辨率兼容的问题。
如果没有w3c标准的出现,相信就算是垃圾站,也会被卷入这些兼容问题里面

25/07/2007

推荐一个网站吧!

前几天发现了一个网站,比较不错:木耳网----http://www.mmear.com/
 
   基于web2.0的新式听小说、资讯网站!!!!!懒人比较喜欢!
 
    在如今这个资讯发达、崇尚知识的时代,我们需要读书、看书,却只有太少的时间可以认真地阅读。每天我们的眼睛总是忙碌着,不得不阅读的大量信息使它不堪重负,但我们的耳朵,却空闲着。因此,木耳网决定提供以最新最畅销的有声图书为主,同时涉及杂志、广播节目和其他,让繁忙得没有时间的你,可以藉由我们提供的服务,下载至计算机、MP3播放器、以及手机中。可以使大家充分利用等候、坐车、旅行、做饭、吃饭、睡前等时间,感受听觉所带来的魅力,并且随时随地充实新知,从深情悠扬的声音中把握管理之道的玄机,领悟励志信念的精髓。同时我们的内容每天都在增加,不断制作、推出精彩作品。

  作为有声读物网站,木耳网不仅可以为您提供一流有声读物作品的在线试听、下载、产品销售为一体的综合性服务平台,而且,作为我们的会员,您还将享受到更为专业的个性化订做服务以及灵活快捷的付费下载。

  木耳网有声书内容涉及财经管理、中外文学、儿童读物、科幻悬疑、外语学习等篇目,辅之以广播节目、电影录音剪辑、讲座培训等内容。我们力图用我们提供的内容,把你的耳朵“叫醒”,共同开启一个“用耳朵聆听书籍”的世界。  

21/07/2007

用javascript动态调整iframe高度

当你在页面上使用了iframe之后,一般来说会不希望iframe显示难看的滚动条,以使iframe里面的内容和主页面的内容浑然一体。这时候你会设置 scrolling="no" 属性。但是这样一来如果iframe里面的内容是变化的,高度会随之内容的变化而变化的时候,你的iframe就会显得太长导致底下一大片空白,或者正好相反,由于iframe的高度太小导致一部分内容会被挡住。这里我提供一个兼容IE/NS/Firefox的javascript脚本实现动态调整iframe的高度。如果需要调整宽度的话,原理是一样的,本文不加详述。

首先,在你的主页面上必须包含以下这段javascript代码:

<script language="Javascript">
var getFFVersion=navigator.userAgent.substring(navigator.userAgent.indexOf("Firefox")).split("/")[1]
//extra height in px to add to iframe in FireFox 1.0+ browsers
var FFextraHeight=getFFVersion>=0.1? 16 : 0

function dyniframesize(iframename) {
  var pTar = null;
  if (document.getElementById){
    pTar
= document.getElementById(iframename);
  }

  else{
    eval('pTar
= ' + iframename + ';');
  }

  if (pTar && !window.opera){
    //begin resizing iframe
    pTar.style.display="block"
    
    if (pTar.contentDocument && pTar.contentDocument.body.offsetHeight){
      //ns6 syntax
      pTar.height = pTar.contentDocument.body.offsetHeight+FFextraHeight;
    }

    else if (pTar.Document && pTar.Document.body.scrollHeight){
      //ie5+ syntax
      pTar.height = pTar.Document.body.scrollHeight;
    }
  }
}

</script>

然后对于主页面用到iframe的地方添加代码:

<iframe id="myTestFrameID"
onload
="javascript:{dyniframesize('myTestFrameID');}"
marginwidth
=0 marginheight=0 frameborder=0
scrolling=no src="/myiframesrc.php"
width
=200 height=100></iframe> 

17/07/2007

网页播放器代码全集

1.avi格式
代码片断如下:
<object id="video" width="400" height="200" border="0" classid="clsid:CFCDAA03-8BE4-11cf-B84B-0020AFBBCCFA">
<param name="ShowDisplay" value="0">
<param name="ShowControls" value="1">
<param name="AutoStart" value="1">
<param name="AutoRewind" value="0">
<param name="PlayCount" value="0">
<param name="Appearance value="0 value=""">
<param name="BorderStyle value="0 value=""">
<param name="MovieWindowHeight" value="240">
<param name="MovieWindowWidth" value="320">
<param name="FileName" value="/Mbar.avi">
<embed width="400" height="200" border="0" showdisplay="0" showcontrols="1" autostart="1" autorewind="0" playcount="0" moviewindowheight="240" moviewindowwidth="320" filename="/Mbar.avi" src="Mbar.avi">
</embed>
</object>

2.mpg格式
代码片断如下:
<object classid="clsid:05589FA1-C356-11CE-BF01-00AA0055595A" id="ActiveMovie1" width="239" height="250">
<param name="Appearance" value="0">
<param name="AutoStart" value="-1">
<param name="AllowChangeDisplayMode" value="-1">
<param name="AllowHideDisplay" value="0">
<param name="AllowHideControls" value="-1">
<param name="AutoRewind" value="-1">
<param name="Balance" value="0">
<param name="CurrentPosition" value="0">
<param name="DisplayBackColor" value="0">
<param name="DisplayForeColor" value="16777215">
<param name="DisplayMode" value="0">
<param name="Enabled" value="-1">
<param name="EnableContextMenu" value="-1">
<param name="EnablePositionControls" value="-1">
<param name="EnableSelectionControls" value="0">
<param name="EnableTracker" value="-1">
<param name="Filename" value="/mpeg/halali.mpg" valuetype="ref">
<param name="FullScreenMode" value="0">
<param name="MovieWindowSize" value="0">
<param name="PlayCount" value="1">
<param name="Rate" value="1">
<param name="SelectionStart" value="-1">
<param name="SelectionEnd" value="-1">
<param name="ShowControls" value="-1">
<param name="ShowDisplay" value="-1">
<param name="ShowPositionControls" value="0">
<param name="ShowTracker" value="-1">
<param name="Volume" value="-480">
</object>

3.smi格式
代码片断如下:
<OBJECT id=RVOCX classid=clsid:CFCDAA03-8BE4-11cf-B84B-0020AFBBCCFA width=240 height=180>
<param name="_ExtentX" value="6350">
<param name="_ExtentY" value="4763">
<param name="AUTOSTART" value="-1">
<param name="SHUFFLE" value="0">
<param name="PREFETCH" value="0">
<param name="NOLABELS" value="-1">
<param name="SRC" value="rm.rm">
<param name="CONTROLS" value="ImageWindow">
<param name="CONSOLE" value="console1">
<param name="LOOP" value="0">
<param name="NUMLOOP" value="0">
<param name="CENTER" value="0">
<param name="MAINTAINASPECT" value="0">
<param name="BACKGROUNDCOLOR" value="#000000"><embed src="real.smi" type="audio/x-pn-realaudio-plugin" console="Console1" controls="ImageWindow" height="180" width="240" autostart="true"></OBJECT>

4.rm格式
代码片断如下:
<OBJECT ID=video1 CLASSID="clsid:CFCDAA03-8BE4-11cf-B84B-0020AFBBCCFA" HEIGHT=288 WIDTH=352>
<param name="_ExtentX" value="9313">
<param name="_ExtentY" value="7620">
<param name="AUTOSTART" value="0">
<param name="SHUFFLE" value="0">
<param name="PREFETCH" value="0">
<param name="NOLABELS" value="0">
<param name="SRC" value="rtsp://203.*.*.35/vod/dawan-a.rm">
<param name="CONTROLS" value="ImageWindow">
<param name="CONSOLE" value="Clip1">
<param name="LOOP" value="0">
<param name="NUMLOOP" value="0">
<param name="CENTER" value="0">
<param name="MAINTAINASPECT" value="0">
<param name="BACKGROUNDCOLOR" value="#000000"><embed SRC type="audio/x-pn-realaudio-plugin" CONSOLE="Clip1" CONTROLS="ImageWindow" HEIGHT="288" WIDTH="352" AUTOSTART="false">
</OBJECT>

5.wmv格式
代码片断如下:
<object id="NSPlay" width=200 height=180 classid="CLSID:22d6f312-b0f6-11d0-94ab-0080c74c7e95" codebase="http://activex.microsoft.com/activex/controls/mplayer/en/nsmp2inf.cab#Version=6,4,5,715" standby="Loading Microsoft Windows Media Player components..." type="application/x-oleobject" align="right" hspace="5">
<param name="AutoRewind" value=1>
<param name="FileName" value="/blog/******.wmv">
<param name="ShowControls" value="1">
<param name="ShowPositionControls" value="0">
<param name="ShowAudioControls" value="1">
<param name="ShowTracker" value="0">
<param name="ShowDisplay" value="0">
<param name="ShowStatusBar" value="0">
<param name="ShowGotoBar" value="0">
<param name="ShowCaptioning" value="0">
<param name="AutoStart" value=1>
<param name="Volume" value="-2500">
<param name="AnimationAtStart" value="0">
<param name="TransparentAtStart" value="0">
<param name="AllowChangeDisplaySize" value="0">
<param name="AllowScan" value="0">
<param name="EnableContextMenu" value="0">
<param name="ClickToPlay" value="0">
</object>

6.wma格式
放在 <body> 里面。下面是部分解释:
<object classid="clsid:22D6F312-B0F6-11D0-94AB-0080C74C7E95" id="MediaPlayer1" >
<param name="Filename" value="/blog/1.Wma"> <!--你文件的位置-->
<param name="PlayCount" value="1"><!--控制重复次数: “x”为几重复播放几次; x=0,无限循环。-->
<param name="AutoStart" value="0"><!--控制播放方式: x=1,打开网页自动播放; x=0,按播放键播放。-->
<param name="ClickToPlay" value="1"><!--控制播放开关: x=1,可鼠标点击控制播放或暂停状态; x=0,禁用此功能。-->
<param name="DisplaySize" value="0"><!--控制播放画面: x=0,原始大小; x=1,一半大小; x=2,2倍大小。-->
<param name="EnableFullScreen Controls" value="1"><!--控制切换全屏: x=1,允许切换为全屏; x=0,禁用此功能。-->
<param name="ShowAudio Controls" value="1"><!--控制音量: x=1,允许调节音量; x=0,禁止音量调节。-->
<param name="EnableContext Menu" value="1"><!--控制快捷菜单: x=1,允许使用右键菜单; x=0,禁用右键菜单。-->
<param name="ShowDisplay" value="1"><!--控制版权信息: x=1,显示电影及作者信息;x=0,不显示相关信息-->
</object>

7.Windows Media Player 系列(不同面板样式)
综合型:
<object classid=clsid:22D6F312-B0F6-11D0-94AB-0080C74C7E95 codebase="http://activex.microsoft.com/activex/controls/mplayer/en/nsmp2inf.cab#Version=6,1,5,217"
id=MediaPlayer type=application/x-oleobject width=210 height=340 standby="Loading Microsoft Windows Media Player components..." VIEWASTEXT align=MIDDLE>
<param name=AudioStream value=-1>
<param name=AutoSize value=0>
<param name=AutoStart value=1>
<param name=AnimationAtStart value=0>
<param name=AllowScan value=-1>
<param name=AllowChangeDisplaySize value=0>
<param name=AutoRewind value=0>
<param name=Balance value=0>
<param name=BaseURL value="">
<param name=BufferingTime value=5>
<param name=CaptioningID value="">
<param name=ClickToPlay value=0>
<param name=CursorType value=32512>
<param name=CurrentPosition value=-1>
<param name=CurrentMarker value=0>
<param name=DefaultFrame value=1>
<param name=DisplayBackColor value=0>
<param name=DisplayForeColor value=16777215>
<param name=DisplayMode value=0>
<param name=DisplaySize value=0>
<param name=Enabled value=-1>
<param name=EnableContextMenu value=-1>
<param name=EnablePositionControls value=0>
<param name=EnableFullScreenControls value=0>
<param name=EnableTracker value=1>
<param name=Filename value="http://202.102.*.*/flash/2/fff.swf">
<param name=InvokeURLs value=-1>
<param name=Language value=-1>
<param name=Mute value=0>
<param name=PlayCount value=1>
<param name=PreviewMode value=0>
<param name=Rate value=1>
<param name=SAMILang value="">
<param name=SAMIStyle value="">
<param name=SAMIFileName value="">
<param name=SelectionStart value=0>
<param name=SelectionEnd value=true>
<param name=SendOpenStateChangeEvents value=-1>
<param name=SendWarningEvents value=-1>
<param name=SendErrorEvents value=-1>
<param name=SendKeyboardEvents value=0>
<param name=SendMouseClickEvents value=0>
<param name=SendMouseMoveEvents value=0>
<param name=SendPlayStateChangeEvents value=-1>
<param name=ShowCaptioning value=0>
<param name=ShowControls value=1>
<param name=ShowAudioControls value=1>
<param name=ShowDisplay value=1>
<param name=ShowGotoBar value=1>
<param name=ShowPositionControls value=1>
<param name=ShowStatusBar value=1>
<param name=ShowTracker value=1>
<param name=TransparentAtStart value=0>
<param name=VideoBorderWidth value=0>
<param name=VideoBorderColor value=0>
<param name=VideoBorder3D value=0>
<param name=Volume value=-1070>
<param name=WindowlessVideo value=1>
</object>

简易型:
<EMBED src=http://www.*.com/mediadate/lxlhbcn.asf style="HEIGHT: 45px; WIDTH: 190px" type=audio/mpeg AUTOSTART="1" loop="0">
</EMBED>

标签型:
<embed width=240 height=140 transparentatstart=true animationatstart=false autostart=true autosize=false volume=100 displaysize=0 showdisplay=true showstatusbar=true showcontrols=true showaudiocontrols=true showtracker=true showpositioncontrols=true balance=true src="http://www.*.com/mediadate/lxlhbcn.asf">
</embed>

多功能型:
不仅可以放曲子,还能放Flash和其它视频文件。
<object align=middle classid="CLSID:22d6f312-b0f6-11d0-94ab-0080c74c7e95" class=OBJECT id=MediaPlayer width=196 height=196>
<param name=ShowStatusBar value=0>
<param name=Filename value="http://202.116.*.*/video/story/chinese/hynh/b.wmv">
<embed type=application/x-oleobject codebase="http://activex.microsoft.com/activex/controls/mplayer/en/nsmp2inf.cab#Version=5,1,52,701" >
</embed>
</object>

网页播放器的参数含义 Windows Media Player 网页播放器 参数含义

(默认0为否,-1或1为是)
<object classid="clsid:22D6F312-B0F6-11D0-94AB-0080C74C7E95" id="MediaPlayer1" width="286" height="225">
<param name="AudioStream" value="-1">
<param name="AutoSize" value="-1">
<!--是否自动调整播放大小-->
<param name="AutoStart" value="-1">
<!--是否自动播放-->
<param name="AnimationAtStart" value="-1">
<param name="AllowScan" value="-1">
<param name="AllowChangeDisplaySize" value="-1">
<param name="AutoRewind" value="0">
<param name="Balance" value="0">
<!--左右声道平衡,最左-9640,最右9640-->
<param name="BaseURL" value>
<param name="BufferingTime" value="15">
<!--缓冲时间-->
<param name="CaptioningID" value>
<param name="ClickToPlay" value="-1">
<param name="CursorType" value="0">
<param name="CurrentPosition" value="0">
<!--当前播放进度 -1 表示不变,0表示开头 单位是秒,比如10表示从第10秒处开始播放,值必须是-1.0或大于等于0-->
<param name="CurrentMarker" value="0">
<param name="DefaultFrame" value>
<param name="DisplayBackColor" value="0">
<param name="DisplayForeColor" value="16777215">
<param name="DisplayMode" value="0">
<param name="DisplaySize" value="0">
<!--视频1-50%, 0-100%, 2-200%,3-全屏 其它的值作0处理,小数则采用四舍五入然后按前的处理-->
<param name="Enabled" value="-1">
<param name="EnableContextMenu" value="-1">
<!-是否用右键弹出菜单控制-->
<param name="EnablePositionControls" value="-1">
<param name="EnableFullScreenControls" value="-1">
<param name="EnableTracker" value="-1">
<!--是否允许拉动播放进度条到任意地方播放-->
<param name="Filename" value="/blog/01.wma" valuetype="ref">
<!--播放的文件地址-->
<param name="InvokeURLs" value="-1">
<param name="Language" value="-1">
<param name="Mute" value="0">
<!--是否静音-->
<param name="PlayCount" value="10">
<!--重复播放次数,0为始终重复-->
<param name="PreviewMode" value="-1">
<param name="Rate" value="1">
<!--播放速率控制,1为正常,允许小数-->
<param name="SAMIStyle" value>
<!--SAMI样式-->
<param name="SAMILang" value>
<!--SAMI语言-->
<param name="SAMIFilename" value>
<!--字幕ID-->
<param name="SelectionStart" value="-1">
<param name="SelectionEnd" value="-1">
<param name="SendOpenStateChangeEvents" value="-1">
<param name="SendWarningEvents" value="-1">
<param name="SendErrorEvents" value="-1">
<param name="SendKeyboardEvents" value="0">
<param name="SendMouseClickEvents" value="0">
<param name="SendMouseMoveEvents" value="0">
<param name="SendPlayStateChangeEvents" value="-1">
<param name="ShowCaptioning" value="0">
<!--是否显示字幕,为一块黑色,下面会有一大块黑色,一般不显示-->
<param name="ShowControls" value="-1">
<!--是否显示控制,比如播放,停止,暂停-->
<param name="ShowAudioControls" value="-1">
<!--是否显示音量控制-->
<param name="ShowDisplay" value="0">
<!--显示节目信息,比如版权等-->
<param name="ShowGotoBar" value="0">
<!--是否启用上下文菜单-->
<param name="ShowPositionControls" value="-1">
<!--是否显示往前往后及列表,如果显示一般也都是灰色不可控制-->
<param name="ShowStatusBar" value="-1">
<!--当前播放信息,显示是否正在播放,及总播放时间和当前播放到的时间-->
<param name="ShowTracker" value="-1">
<!--是否显示当前播放跟踪条,即当前的播放进度条-->
<param name="TransparentAtStart" value="-1">
<param name="VideoBorderWidth" value="0">
<!--显示部的宽部,如果小于视频宽,则最小为视频宽,或者加大到指定值,并自动加大高度.此改变只改变四周的黑框大小,不改变视频大小-->
<param name="VideoBorderColor" value="0">
<!--显示黑色框的颜色, 为RGB值,比如ffff00为黄色-->
<param name="VideoBorder3D" value="0">
<param name="Volume" value="0">
<!--音量大小,负值表示是当前音量的减值,值自动会取绝对值,最大为0,最小为-9640-->
<param name="WindowlessVideo" value="0">
<!--如果是0可以允许全屏,否则只能在窗口中查看-->
</object>

上面的这个播放器是老式的那种,6.4版本!新式播放器是在MediaPlayer9.0以后出现的,也就是说只有装了9.0或9.0以上的播放器才能正常使用的。

-------------------------------------------------------------------------------

下面是新式播放器代码,相对以前的来说要简单很多:
<object id="player" height="64" width="260" classid="CLSID:6BF52A52-394A-11d3-B153-00C04F79FAA6">
<param NAME="AutoStart" VALUE="-1">
<!--是否自动播放-->
<param NAME="Balance" VALUE="0">
<!--调整左右声道平衡,同上面旧播放器代码-->
<param name="enabled" value="-1">
<!--播放器是否可人为控制-->
<param NAME="EnableContextMenu" VALUE="-1">
<!--是否启用上下文菜单-->
<param NAME="url" value="/blog/1.wma">
<!--播放的文件地址-->
<param NAME="PlayCount" VALUE="1">
<!--播放次数控制,为整数-->
<param name="rate" value="1">
<!--播放速率控制,1为正常,允许小数,1.0-2.0-->
<param name="currentPosition" value="0">
<!--控件设置:当前位置-->
<param name="currentMarker" value="0">
<!--控件设置:当前标记-->
<param name="defaultFrame" value="">
<!--显示默认框架-->
<param name="invokeURLs" value="0">
<!--脚本命令设置:是否调用URL-->
<param name="baseURL" value="">
<!--脚本命令设置:被调用的URL-->
<param name="stretchToFit" value="0">
<!--是否按比例伸展-->
<param name="volume" value="50">
<!--默认声音大小0%-100%,50则为50%-->
<param name="mute" value="0">
<!--是否静音-->
<param name="uiMode" value="mini">
<!--播放器显示模式:Full显示全部;mini最简化;None不显示播放控制,只显示视频窗口;invisible全部不显示-->
<param name="windowlessVideo" value="0">
<!--如果是0可以允许全屏,否则只能在窗口中查看-->
<param name="fullScreen" value="0">
<!--开始播放是否自动全屏-->
<param name="enableErrorDialogs" value="-1">
<!--是否启用错误提示报告-->
<param name="SAMIStyle" value>
<!--SAMI样式-->
<param name="SAMILang" value>
<!--SAMI语言-->
<param name="SAMIFilename" value>
<!--字幕ID-->
</object>

Real Player 网页播放器 参数含义

参数:autostart 属性:True或是False 作用:指定是否自动播放指定的源文件
参数:backgroundcolor 属性:任何用符号“#”开头的16进制数值或是任何预定义的颜色作用:指定图像窗口的背景颜色
参数:center 属性:True或是False 作用:指定片断使用初始编码大小播放,并且在图像窗口的中央。
参数:classid 属性:"clsid:CFCDAA03-8BE4-1lcf-B84B0020AFBBCCFA:** 作用:用于指定ActiveX控件的唯一的字符串标示,可以认出嵌入的RealPalyer播放器。
参数:console 属性:任何字符串作用:可以将各种不同的RealPlayer控制聚集在网页上,这样它们可以交互使用或是保持独立,而且互相不影响
参 数:controls 属性:ImageWindow,All,ControlPanel,PlavButton,PlayOnlyButton, PauseButton,StopButton,FFCtrl,RWCtrl,MuteCtrl,MuteVolume,VolumeSlider, PositionSlider,TACCtrl,HomeCtrl,InfoVolumePanel,InfoPanel,StatusBar, StatusField,PositionField 作用:可以让你指定那些控制是可见的。
参数:height 属性:任何整数值作用:指定RealPlayer元素的高度,单位:像素
参数:id 属性:任何字符串作用:为标签中的RealPlayer元素指定名字。
参数:imagestatus 属性:True或是False 作用:指定是否在图像窗口中显示状态信息,默认值是true
参数:loop 属性:True或是False 作用:可以让你指定片断是否无限循环
参数:maintainaspect 属性:True或是False 作用:默认RealPlayer拉伸所有的片断来充满整个图像窗口。
参数:name 属性:任何字符串作用:为标签中的RealPlayer元素指定名字(在标签中使用id)
参数:nojava 属性:True或是False 作用:避免启动Java虚拟机
参数:nolabels 属性:True或是False 作用:可以禁止显示标题或是版权信息(realplayer5.0以上时,它是垃圾...)
参数:nologo 属性:True或是False 作用:避免RealPlayer启动时在图像窗口中显示
参数:numloop 属性:任何整数值作用:让你能够指定文件片循环的次数,不需要参数loop
参数:prefetch 属性:True或是False 作用:指定在播放前,RealPlayer是否可以获得流描述信息,默认值是False
参数:region 属性:任何字符串作用:同SMIL一起使用。允许你指定使用HTML代替SMIL
参数:scriptcallbacks 属性:用逗号分割的列表作用:指定浏览器的回调监控(好高级的东东!)
参数:shuffle 属性:True或是False 作用:同多文件片的ram文件或是SMIL文件一起使用。可以让RealPlayer随机播放列表中的文件
参数:src 属性:任何合法的相对或是完整的URL 作用:指定播放的文件或是源文件的地址
参数:type 属性:字符串作用:为嵌入插件指定MIME类型
参数:width 属性:任何整数值作用:指定RealPlayer元素的宽度

RealPlayer的一些函数、方法和过程

这是 Real Player ActiveX Control Library (Version 1.0) 的所有函数与方法,有兴趣可以研究一下。

function GetSource: WideString;
procedure SetSource(const lpszNewValue: WideString);
function GetConsole: WideString;
procedure SetConsole(const lpszNewValue: WideString);
function GetControls: WideString;
procedure SetControls(const lpszNewValue: WideString);
function GetNoLabels: WordBool;
procedure SetNoLabels(bNewValue: WordBool);
function GetAutoStart: WordBool;
procedure SetAutoStart(bNewValue: WordBool);
function GetAutoGotoURL: WordBool;
procedure SetAutoGotoURL(bNewValue: WordBool);
function GetVolume: Smallint;
procedure SetVolume(nVol: Smallint);
function GetMute: WordBool;
procedure SetMute(bMute: WordBool);
function GetLoop: WordBool;
procedure SetLoop(bVal: WordBool);
function GetImageStatus: WordBool;
procedure SetImageStatus(bEnable: WordBool);
function GetPacketsTotal: Integer;
function GetPacketsReceived: Integer;
function GetPacketsOutOfOrder: Integer;
function GetPacketsMissing: Integer;
function GetPacketsEarly: Integer;
function GetPacketsLate: Integer;
function GetBandwidthAverage: Integer;
function GetBandwidthCurrent: Integer;
procedure DoPlayPause;
procedure DoStop;
procedure DoNextItem;
procedure DoPrevItem;
function CanPlayPause: WordBool;
function CanStop: WordBool;
function HasNextItem: WordBool;
function HasPrevItem: WordBool;
function HasNextEntry: WordBool;
function HasPrevEntry: WordBool;
procedure DoNextEntry;
procedure DoPrevEntry;
procedure AboutBox;
procedure EditPreferences;
procedure HideShowStatistics;
function IsStatisticsVisible: WordBool;
procedure DoGotoURL(const url: WideString; const target: WideString);
procedure DoPlay;
procedure DoPause;
function GetPosition: Integer;
function GetPlayState: Integer;
function GetLength: Integer;
function GetTitle: WideString;
function GetAuthor: WideString;
function GetCopyright: WideString;
function GetClipWidth: Integer;
function GetClipHeight: Integer;
function CanPlay: WordBool;
function CanPause: WordBool;
procedure SetPosition(lPosition: Integer);
function GetNumLoop: Integer;
procedure SetNumLoop(lVal: Integer);
function GetCenter: WordBool;
procedure SetCenter(bVal: WordBool);
function GetNoLog WordBool;
procedure SetNoLogo(bVal: WordBool);
function GetMaintainAspect: WordBool;
procedure SetMaintainAspect(bVal: WordBool);
function GetBackgroundColor: WideString;
procedure SetBackgroundColor(const pVal: WideString);
function GetStereoState: WordBool;
function GetLiveState: WordBool;
function GetShowStatistics: WordBool;
procedure SetShowStatistics(bVal: WordBool);
function GetShowPreferences: WordBool;
procedure SetShowPreferences(bVal: WordBool);
function GetShowAbout: WordBool;
procedure SetShowAbout(bVal: WordBool);
function GetOriginalSize: WordBool;
procedure SetOriginalSize;
function GetDoubleSize: WordBool;
procedure SetDoubleSize;
function GetFullScreen: WordBool;
procedure SetFullScreen;
function GetEnableContextMenu: WordBool;
procedure SetEnableContextMenu(bVal: WordBool);
function GetEnableOriginalSize: WordBool;
procedure SetEnableOriginalSize(bVal: WordBool);
function GetEnableDoubleSize: WordBool;
procedure SetEnableDoubleSize(bVal: WordBool);
function GetEnableFullScreen: WordBool;
procedure SetEnableFullScreen(bVal: WordBool);
function GetEnableMessageBox: WordBool;
procedure SetEnableMessageBox(bVal: WordBool);
procedure SetTitle(const pVal: WideString);
procedure SetAuthor(const pVal: WideString);
procedure SetCopyright(const pVal: WideString);
function GetWantKeyboardEvents: WordBool;
procedure SetWantKeyboardEvents(bWantsEvents: WordBool);
function GetWantMouseEvents: WordBool;
procedure SetWantMouseEvents(bWantsEvents: WordBool);
function GetNumEntries: Smallint;
function GetCurrentEntry: Smallint;
function GetEntryTitle(uEntryIndex: Smallint): WideString;
function GetEntryAuthor(uEntryIndex: Smallint): WideString;
function GetEntryCopyright(uEntryIndex: Smallint): WideString;
function GetEntryAbstract(uEntryIndex: Smallint): WideString;
procedure SetCanSeek(bCanSeek: WordBool);
function GetCanSeek: WordBool;
function GetBufferingTimeElapsed: Integer;
function GetBufferingTimeRemaining: Integer;
function GetConnectionBandwidth: Integer;
function GetPreferedLanguageString: WideString;
function GetPreferedLanguageID: Integer;
function GetUserCountryID: Integer;
function GetNumSources: Smallint;
function GetSourceTransport(nSourceNum: Smallint): WideString;
function GetWantErrors: WordBool;
procedure SetWantErrors(bVal: WordBool);
function GetShuffle: WordBool;
procedure SetShuffle(bVal: WordBool);
function GetVersionInf WideString;
function GetLastMessage: WideString;
function GetLastErrorSeverity: Integer;
function GetLastErrorRMACode: Integer;
function GetLastErrorUserCode: Integer;
function GetLastErrorUserString: WideString;
function GetLastErrorMoreInfoURL: WideString;
procedure SetPreFetch(bVal: WordBool);
function GetPreFetch: WordBool;
procedure SetRegion(const pVal: WideString);
function GetRegion: WideString;
function GetIsPlus: WordBool;
function GetConsoleEvents: WordBool;
procedure SetConsoleEvents(bVal: WordBool);
function GetDRMInfo(const pVal: WideString): WideString;
property ControlInterface: IRealAudio read GetControlInterface;
property DefaultInterface: IRealAudio read GetControlInterface;

网页中WMP视频控制之使用指南

□播放方法和属性
除播放、暂停、停止外,媒体播放器还可用下面的属性:
扫描(Scanning)——与录像机的快进快倒功能类似;
搜索(Seeking)——直接移到剪辑中标记的特定上演时间;

□播放
媒体播放器提供了两种技术来指定要播放的媒体名称(剪辑),你可以设置 FileName 属性,或调用 Open 方法。 如果 AutoStart 属性的值是 true 的话,当 FileName 属性被设置成该电影剪辑的 URL 后,该电影剪辑将开始播放;否则电影剪辑不会开始播放, 除非你调用 Play 方法。 Open 方法开始播放是异步的,它不象 Play 方法要等到其他的进程结束后才开始播放。
媒体播放器提供了下面的类似录像机的属性和方法来控制流媒体的播放:
Play、Stop、Pause 方法,来开始、停止、暂停流媒体。
PlayCount 属性,设置文件播放的次数。
AutoRewind 属性,确定当停止播放时是否返回到电影剪辑的开始部分。

□音频控制
媒体播放器提供了下面的属性来管理音频:
Balance 属性,确定左右音箱的声音平衡;
Volume 属性,用来加大或降低音量;
Mute 属性,用来关闭或打开声音;
※你可以将 ShowAudioControls 属性设为 true 来在控制栏添加处理声音的控件。

□扫描
媒体播放器提供了下面的属性用以扫描:
FastForward 方法,快进;
FastReverse 方法,快倒;
Rate属性,改变播放速率;
※要想使电影剪辑能被扫描,必须将 CanScan 和 AllowScan 属性设为 true。

□搜索
用于搜索的属性有:
MarkerCount 属性,指剪辑中标记的总数量;
CurrentMaker、GetMarkerName、GetMarkerTime 方法,用于返回标记信息;
MarkerHit 事件,当遇到标记时触发;
CurrentPosition 属性,当前位置(用秒度量),可用来将播放头移到剪辑中指定的点;
PositionChange 事件,当设置 CurrentPosition 属性时触发;
※要想搜索到任意的时间,必须将 CanSeek 属性设为 true,要想搜索到标记点,必须将 CanSeekToMarkers 属性设为 true。

□媒体播放器的外观界面
在网页中,你可以通过相关属性来控制媒体播放器的哪些部分出现,哪些部分不出现。
媒体播放器包括如下元素:
Video Display Panel:视频显示面板;
Video Border:视频边框;
Closed Captioning Display Panel;字幕显示面板;
Track Bar;搜索栏;
Control Bar with Audio and Position Controls:带有声音和位置控制的控制栏;
Go To Bar:转到栏;
Display Panel:显示面板;
Status Bar:状态栏;
下面的属性用来决定显示哪一个元素:
ShowControls 属性:是否显示控制栏(包括播放控件及可选的声音和位置控件);
ShowAudioControls 属性:是否在控制栏显示声音控件(静音按钮和音量滑块);
ShowPositionControls 属性:是否在控制栏显示位置控件(包括向后跳进、快退、快进、向前跳进、预览播放列表中的每个剪辑);
ShowTracker 属性:是否显示搜索栏;
ShowDisplay 属性:是否显示显示面板(用来提供节目与剪辑的信息);
ShowCaptioning 属性:是否显示字幕显示面板;
ShowGotoBar 属性:是否显示转到栏;
ShowStatusBar 属性:是否显示状态栏;

□播放列表
媒体播放器提供下面的方法来访问播放列表中的剪辑:
Next 方法,跳到节目(播放列表)中的下一个剪辑;
Previous 方法,跳回到节目中的上一个剪辑;
媒体播放器的一个特性是能够预览节目中的每一个剪辑,使用如下属性:
PreviewMode 属性,决定媒体播放器当前是否处于预览模式;
CanPreview 属性,决定媒体播放器能否处于预览模式;
在windows 媒体元文件中,可以为每一个剪辑指定预览时间——PREVIEWDURATION,如果没有指定,那么默认的预览时间是10秒钟。
你也可以用Windows 媒体元文件来添加 watermarks 与 banners,元文件也支持插入广告时的无间隙流切换。

□节目信息
使用 GetMediaInfoString 方法可以返回相关剪辑或节目的如下信息:
文件名:File name
标题:Title
描述:Description
作者:Author
版权:Copyright
级别:Rating
URLs:logo icon、watermark、banner的地址
剪辑信息可以放在媒体文件中,也可以放在Windows 媒体元文件中,或者两者都放。如果在元文件中指定了剪辑信息,那么用 GetMediaInfoString 方法返回的就是元文件中的信息,而不会返回剪辑中包含的信息。
在元文件中,附加信息可以放置在每一个剪辑或节目的 PARAM标签中。你可以为每个剪辑添加任意多个 PARAM 标签,用来存储自定义的信息或链接到相关站点。在 PARAM 标签中的信息可以通过 GetMediaParameter 方法来访问。
下面的属性返回有关大小和时间的信息:
ImageSourceHeight、ImageSourceWidth:返回图像窗口的显示尺寸;
Duration 属性,返回剪辑的长度(秒), 要检测这个属性是否包含有效的数值,请检查IsDurationValid 属性。(对于广播的视频,其长度是不可预知的)。

□字幕
你可以用 .smi 文件来为你的节目添加字幕。媒体播放器支持下面的属性来处理字幕:
SAMIFileName 属性,指定 .smi 文件的名字;
SAMILang 属性,指定字幕的语言(如果没有指定则使用第一种语言);
SAMIStyle 属性,指定字幕的文字大小和样式;
ShowCaptioning 属性,决定是否显示字幕显示面板;

□脚本命令
伴随音频、视频流,你可以在流媒体文件中加入脚本命令。脚本命令是多媒体流中与特定时间同步的多对Unicode串。第一个串标识待发命令的类型,第二个串指定要执行的命令。
当流播放到与脚本相关的时间时,控件会向网页发送一个 ScriptCommand事件,然后由事件处理进程来响应这个事件。脚本命令字符串会作为脚本命令事件的参数传递给事件处理器。
媒体播放器会自动处理下面类型的内嵌脚本命令:
1) URL型命令:当媒体播放器控件收到一个URL型的命令时,指定的URL会被装载到用户的默认浏览器。如果媒体播放器嵌在一个分帧的HTML文件中, URL页可以装载到由脚本命令指定的帧内。如果脚本命令没有指定一个帧,将由 DefaultFrame 属性决定将 URL 页装入哪一帧。
你可以通过设置 InvokeURLs 属性来决定是否自动处理 URL 型的脚本命令。如果这个属性的值为 false ,媒体播放器控件将忽视 URL型命令。但是脚本命令事件仍会触发,这就允许你有选择地处理 URL 型命令。
URL 型命令指定的是 URL 的相对地址。基地址是由 BaseURL属性指定的。媒体播放器控件传送的脚本命令事件的命令参数是链接好的地址。
2) FILENAME型命令:当媒体播放器控件收到一个FILENAME型的命令时,它将 FileName属性设置为脚本命令提供的文件,之后媒体播放器会打开这个文件开始播放。 媒体播放器控件总是自动处理 FILENAME 型命令,不象 URL 型命令,它们不能被禁止。
3)TEXT型命令:当媒体播放器控件收到一个 TEXT型的命令时,它会将命令的内容显示在控件的字幕窗口。内容可以是纯文本的,也可以是 HTML。
4)EVENT型命令:当媒体播放器控件收到一个 EVENT型的命令时,它会在媒体元文件中搜索 EVENT 元素的 NAME 属性。如果 NAME 属性与脚本命令中的第二个字符串匹配,媒体播放器控件就执行包含在 EVENT 元素中的条目。
5)OPENEVENT型命令:当媒体播放器控件收到一个 OPENEVENT型的命令时,它会在媒体元文件中检查 EVENT 元素,并打开匹配的标题,但不播放,直到收到来自 EVENT型命令的同名真实事件。

□捕捉键盘和鼠标事件
EnableContextMenu 与 ClickToPlay 属性为用户提供了在图像窗口进行操作的方法。
如果 EnableContextMenu 属性为 true ,在图像窗口右击鼠标可以打开关联菜单,如果将ClickToPlay 属性设为 true ,用户可以单击图像窗口进行播放与暂停的切换。
要接收鼠标移动和单击事件,请将 SendMouseMoveEvents 和 SendMouseClickEvents 属性设为 true 。鼠标事件有:
MouseDown,当用户按下鼠标时产生;
MouseUp,当用户释放鼠标时产生;
MouseMove,当用户移动鼠标时产生;
Click,当用户在媒体播放器上单击鼠标按钮时产生;
DbClick,当用户在媒体播放器上双击鼠标按钮时产生;
要接收键盘事件,请将 SendKeyboardEvents 属性设为 true 。键盘事件有:
KeyDown,当用户按下一个键时产生;
KeyUp,当用户释放一个键时产生;
KeyPress,当用户按下并释放一个键时产生;

□监测流状态与网络链接
流状态属性包括:
PlayState:播放状态;
OpenState:打开状态;
Bandwidth:带宽;
支持的事件有:
OpenStateChange:打开状态改变(仅当SendOpenStateChangeEvents属性为true时触发)
PlayStateChange:播放状态改变(仅当SendPlayStateChangeEvents属性为true时触发)
EndOfStream:流结束时触发;
NewStream:打开新流时触发;
网络接收属性包括:
ReceptionQuality:接收质量;
ReceivedPackets:已经收到的包;
LostPackets:丢失的包;
监测缓冲的属性有:
BufferingTime:缓冲时间;
BufferingCount:缓冲次数;
BufferingProgress:缓冲进程;
Buffering:缓冲事件;

□错误处理
媒体播放器提供了内建的错误处理功能——在对话框或状态栏显示错误信息。 另外,你可以自己添加错误处理程序。如果 SendErrorEvents 属性设置为 true,将不会显示错误框,而是发送错误事件;如果 SendErrorEvents 属性设置为 false,将显示错误框,而是发送错误事件。
媒体播放器支持下面的错误处理事件:
Error 事件,指有危险性错误发生;
Warning 事件,指发生了非危险性的错误;
当你的应用程序接收到一个错误事件,你可以检测下面的属性来确定具体的错误信息:
HasError:检测目前的媒体播放器是否有错误;
ErrorCode:提供与该类型错误相关的代码值;
ErrorDescription:提供错误的描述信息;
ErrorCorrection:指定媒体播放器对该类型的错误进行校正;

□播放CD
媒体播放器将 CD 看作(在每个音轨的开头具有标记的)单一音频流。 要在网页中使用CD,你需要将 FileName 属性设为 CDAUDI,必须带有冒号,如下所示:
<HTML>
<HEAD><TITLE>CD Audio Playback Example</TITLE></HEAD>
<BODY>
<OBJECT ID="MediaPlayer"
CLASSID="CLSID:22d6f312-b0f6-11d0-94ab-0080c74c7e95"
WIDTH="320"
HEIGHT="508"
STYLE="position:absolute; left:0px; top:70px;" >
<PARAM NAME="FileName" VALUE="cdaudi">
<PARAM NAME="AutoStart" VALUE="0">
<PARAM NAME="ShowControls" VALUE="1">
<PARAM NAME="ShowStatusBar" VALUE="1">
<PARAM NAME="ShowDisplay" VALUE="1">
</OBJECT>
</BODY>
</HTML>
之后你可以用 Play 方法播放 CD 了。
你可以在 windows 媒体元文件中指定播放顺序以及每个音轨的信息。示例如下:

<ASX VERSION="3.0">
<TITLE>CD Audio with the Media Player</TITLE>
<AUTHOR>Windows Media Technologies</AUTHOR>
<COPYRIGHT>(c) 1999, Microsoft, Inc.</COPYRIGHT>

<ENTRY>
<TITLE>Track 1: Title 1</TITLE>
<REF href="/blog/cdaudi" />
<STARTMARKER NUMBER="1"/>
<ENDMARKER NUMBER="2"/>
</ENTRY>

<ENTRY>
<TITLE>Track 2: Title 2</TITLE>
<REF href="/blog/cdaudi" />
<STARTMARKER NUMBER="2"/>
<ENDMARKER NUMBER="3"/>
</ENTRY>

<ENTRY>
<TITLE>Track 3: Title 3</TITLE>
<REF href="/blog/cdaudi" />
<STARTMARKER NUMBER="3"/>
<ENDMARKER NUMBER="4"/>
</ENTRY>

<ENTRY>
<TITLE>Track 4: Title 4</TITLE>
<REF href="/blog/cdaudi" />
<STARTMARKER NUMBER="4"/>
</ENTRY>
</ASX>

 

 

1. 如何贴rm,ra,ram类型的音乐,代码如下:
<embed width="0" height="0" type="audio/x-pn-realaudio-plugin" autostart="true" controls="ControlPanel" src="http://guest.anyp.cn/uploads/01.rm";>

  2. 如何贴midi,asf,wma,asx类型的音乐,代码如下:
<embed autostart="true" loop="-1" controls="ControlPanel" width="0" height="0" src="http://guest.anyp.cn/uploads/01.mid";>

3.<bgsound src="你的歌曲地址" loop="-1">

  只需要把整段代码copy到文章中去(编辑文章的时请用HTML代码模式,否则这段代码会以文本形式显示出来,不能被执行),用你喜欢的音乐文 件的URL代替上面的音乐地址代码就可以了。注意,音乐如果太大影响浏览速度,严重的可能导致浏览器停止响应,所以如果要放背景音乐请不要使用大文件。

音乐文件的URL指:音乐文件的网址。
取得网址的方法是,把鼠标移到有链接的音乐名点击右键->复制快捷方式,然后把需要加入音乐文件的URL地方按CTRL+C(把之前复制的地址粘贴出来)。

加了背景音乐后不能正常收听音乐这种情况的错误有两个:
1、音乐地址错误,误把html结尾的网址当成是音乐的地址。
2、音乐文件太大,需要很长时间才能播放。

 

<embed height=26 src=http://song.5music.org/5musicreall/2003_ydzh/emhj/1-14.rm type=audio/x-pn-realaudio-plugin width=120 controls="StatusField" autostart="true"
加音乐的代码。此代码为加入RM格式的音乐。建议使用此代码,速度比较快。
<bgsound src='???' loop=true>此代码为加入MIDI格式的音乐,速度在所有音乐中,是最快的。建议最先考虑用此代码/用时,将问号部分换成音乐地址。TRUE可以换成阿拉伯数字。用来控制音乐播放的次数。
<embed src=?? width=240 hight=180>此代码为插入FLASH画面。数字部分可调节画面大小
<script language="JavaScript" src="http://danlovesary.y365.com/music/music.js"></script>
零距离播放器,里面有很多好听的歌曲。效果见http://www.wokankan.com/comm/club.asp?xh=441听到了吗?音乐。
<script language="JavaScript" src="http://www.00ooo.com/flash/js/1.js"></script>连续播放音乐代码!
效果见本论坛音乐/。

25/05/2007

UI设计与UI标准

这几天公司对网站有了新的动作,要维持现在的网站开发,全面开发新版的网站,主要架构、开发语言都采用最新的技术。而对网站的UI方面也要求了更好,这几天我一直忙于找些关于网站UI方面的资料。
   网站UI,网些一些大鸟把它叫做WUI。UI的理解----User Interface也就是用户与界面的关系。他包括交互设计,用户研究,与界
面设计三个部分,而WUI,可能是针对网站开发设计的吧。
 
  标准只有被使用才有价值
这最后的悼词揭示了为何标准虽然受欢迎但却难以容易的被采用。正如经常呈现的那样,标准定义了一个更好的世界,但却没能让它更容易被实现。因此,为了让标准能够有价值,它们需要:

   1. 描述可用的界面;
   2.
以一种可以理解的方式描述界面;
   3.
提供在线工具,尽可能减少对应用标准的抵制。

通过增加第三点条件,我们能够从拥有一套有价值的标准过渡到拥有一套可采用的标准。一套便于使用的标准必须是有用的。

 

12/05/2007

搜索引擎如何索引收录网页

SEO(搜索引擎优化)而言,让网站内的页面能够及时、全面地被搜索引擎索引、收录应该说是首要的任务,这是实施其他SEO策略的最基本保证。——不过,这也是往往易被高估的一个环节,比如说我们时常可以看到某些人宣称自己的网站被Google收录了多少页面如几K甚至几十K等以证明SEO工作的成功。但客观地说,网页仅仅被搜索引擎索引、收录是没有太大的实际意义,往往只能沦为浩如烟海的Internet世界中的殉葬品,更重要的是如何让网页出现在针对特定搜索项的SERP(搜索结果页面)前几页。——许多人相信,让网站内尽可能多的页面被收录进搜索引擎索引数据库终归不是一件坏事,网页越多,暴光的机会也便越大,虽然最终效果如何存在疑问。

Anyway,如果在对网站实施SEO时将重点放在网页被索引、收录的速度与效率,当然也无可厚非,而要想实现这一点,需要我们对搜索引擎如何收录、索引网页的机制有所了解。下面我们以Google为例,介绍搜索引擎收录、索引网页的过程,希望能对朋友们有后助益。——对其他搜索引擎如Yahoo!、Live搜索及百度而言,尽管可能在具体细节上存在差别,不过,基本策略应该是类似的。

1、收集待索引网页的url

Internet上存在的网页数量绝对是个天文数字,每天新增的网页也不计其数,搜索引擎需要首先找到要索引收录的对象。

具体到Google而言,虽然对GoogleBot是否存在DeepBot与FreshBot的区别存在争议——至于是否叫这么两个名字更是众说纷耘,当然,名字本身并不重要——至少到目前为止,主流的看法是,在Google的robots中,的确存在着相当部分专门为真正的索引收录页页准备“素材”的robots——在这里我们姑且仍称之为FreshBot吧——它们的任务便是每天不停地扫描Internet,以发现并维护一个庞大的url列表供DeepBot使用,换言之,当其访问、读取其一个网页时,目的并不在于索引这个网页,而是找出这个网页中的所有链接。——当然,这样似乎在效率上存在矛盾,有点不太可信。不过,我们可以简单地通过以下方式判断:FreshBot在扫描网页时不具备“排它性”,也即是说,位于Google不同的数据中心的多个robots可能在某个很短的时间周期,比如说一天甚至一小时,访问同一个页面,而DeepBot在索引、缓存页面时则不会出现类似的情况,即Google会限制由某个数据中心的robots来完成这项工作的,而不会出现两个数据中心同时索引网页同一个版本的情况,如果这种说法没有破绽的话,则似乎可以从服务器访问日志中时常可以看到源自不同IP的GoogleBot在很短的时间内多次访问同一个网页证明FreshBot的存在。因此,有时候发现GoogleBot频繁访问网站也不要高兴得太早,也许其根本不是在索引网页而只是在扫描url。

FreshBot记录的信息包括网页的url、Time Stamp(网页创建或更新的时间戳),以及网页的Head信息(注:这一点存在争议,也有不少人相信FreshBot不会去读取目标网页信息的,而是将这部分工作交由DeepBot完成。不过,笔者倾向于前一种说法,因为在FreshBot向DeepBot提交的url列表中,会将网站设置禁止索引、收录的页面排除在外,以提高效率,而网站进行此类设置时除使用robots.txt外还有相当部分是通过mata标签中的“noindex”实现的,不读取目标网页的head似乎是无法实现这一点的),如果网页不可访问,比如说网络中断或服务器故障,FreshBot则会记下该url并择机重试,但在该url可访问之前,不会将其加入向DeepBot提交的url列表。

总的来说,FreshBot对服务器带宽、资源的占用还是比较小的。最后,FreshBot对记录信息按不同的优先级进行分类,向DeepBot提交,根据优先级不同,主要有以下几种:

A:新建网页;
B:旧网页/新的Time Stamp,即存在更新的网页;
C:使用301/302重定向的网页;
D:复杂的动态url,如使用多个参数的动态url,Google可能需要附加的工作才能正确分析其内容。——随着Google对动态网页支持能力的提高,这一分类可能已经取消;
E:其他类型的文件,如指向PDF、DOC文件的链接,对这些文件的索引,也可能需要附加的工作;
F:旧网页/旧的Time Stamp,即未更新的网页,注意,这里的时间戳不是以Google搜索结果中显示的日期为准,而是与Google索引数据库中的日期比对;
G:错误的url,即访问时返回404回应的页面;

优先级按由A至G的顺序排列,依次降低。需要强调的是,这里所言之优先级是相对的,比如说同样是新建网页,根据指向其的链接质量、数量的不同,优先级也有着很大的区别,具有源自相关的权威网站链接的网页具有较高的优先级。此外,这里所指的优先级仅针对同一网站内部的页面,事实上,不同网站也有有着不同的优先级,换言之,对权威网站中的网页而言,即使其最低优先级的404 url,也可能比许多其他网站优先级最高的新建网页更具优势。

2、网页的索引与收录

接下来才进入真正的索引与收录网页过程。从上面的介绍可以看出,FreshBot提交的url列表是相当庞大的,根据语言、网站位置等不同,对特定网站的索引工作将分配至不同的数据中心完成。整个索引过程,由于庞大的数据量,可能需要几周甚至更长时间才能完成。

正如上文所言,DeepBot会首先索引优先级较高的网站/网页,优先级越高,出现在Google索引数据库及至最终出现在Google搜索结果页面中的速度便越快。对新建网页而言,只要进入到这个阶段,即使整个索引过程没有完成,相应的网页便已具备出现在Google索引库中的可能,相信许多朋友在Google中使用“site:somedomain.com”搜索时常常看到标注为补充结果只显示网页url或只显示网页标题与url但没有描述的页面,此即是处于这一阶段网页的正常结果。当Google真正读取、分析、缓存了这个页面后,其便会从补充结果中逃出而显示正常的信息。——当然,前提是该网页具有足够的链接,特别是来自权威网站的链接,并且,索引库中没有与该网页内容相同或近似的记录(Duplicate Content过滤)。

对动态url而言,虽然如今Google宣称在对其处理方面已不存在障碍,不过,可以观察到的事实仍然显示动态url出现在补充结果中的几率远大于使用静态url的网页,往往需要更多、更有价值的链接才能从补充结果中逸出。

而对于上文中之“F”类,即未更新的网页,DeepBot会将其时间戳与Google索引数据库中的日期比对,确认尽管可能搜索结果中相应页面信息未来得及更新但只要索引了最新版本即可——考虑网页多次更新、修改的情况——;至于“G”类即404 url,则会查找索引库中是否存在相应的记录,如果有,将其删除。

3、数据中心间的同步

前文我们提到过,DeepBot索引某个网页时会由特定的数据中心完成,而不会出现多个数据中心同时读取该网页,分别获得网页最近版本的情况,这样,在索引过程完成后,便需要一个数据同步过程,将网页的最新版本在多个数据中心得到更新。

这就是之前著名的Google Dance。不过,在BigDaddy更新后,数据中心间的同步不再象那样集中在特定的时间段,而是以一种连续的、时效性更强的方式进行。尽管不同数据中心间仍存在一定的差异,但差异已经不大,而且,维持的时间也很短。

提高搜索引擎索引收录网页的效率,根据上面的介绍,可以看出,要想让您的网页尽可能快、尽可能多地被搜索引擎收录,至少应从如下几方面进行优化:

提高网站反相链接的数量与质量,源自权威网站的链接可以让您的网站/网页在第一时间内被搜索引擎“看到”。当然,这也是老生常谈了。从上面的介绍可以看出,要提高网页被搜索引擎收录的效率,首先要让搜索引擎找到您的网页,链接是搜索引擎找到网页的唯一途径——“唯一”一词存在些许争议,见下面的SiteMaps部分——从这个角度看,向搜索引擎提交网站之类的作法没有必要且没有意义,相对而言,要想让您的网站被收录,获得外部网站的链接才是根本,同时,高质量的链接也是让网页步出补充结果的关键因素。

网页设计要秉持“搜索引擎友好”的原则,从搜索引擎spider的视角设计与优化网页,确保网站的内部链接对搜索引擎“可见”,相对于获得外部网站链接的难度,合理规划的内部链接是提高搜索引擎索引与收录效率更经济、有效的途径——除非网站根本未被搜索引擎收录。

如果您的网站使用动态url,或者导航菜单使用JavaScript,那么,当在网页收录方面遇到障碍时,应首先从这里着手。

使用SiteMaps。事实上,许多人认为Google取消了FreshBot的一个主要原因便是SiteMaps(xml)协议的广泛应用,认为这样只需读取网站提供的SiteMaps便可得到网页更新信息,而不需FreshBot耗时费力地扫描。这种说法还是有一定道理的,虽然目前不能确定Google究竟直接使用SiteMaps作为DeepBot的索引列表还是用做FreshBot的扫描路标,但SiteMaps能够提高网站索引收录的效率则是不争的事实。比如说,SEO探索曾做过如下的测试:

两个网页,获得的链接情况相同,一个加入SiteMaps而另一未加入,出现在SiteMaps中的网页很快被收录,而另一个页面则在过了很长时间后才被收录;

某个孤岛页面,没有任何指向其的链接,但将其加入SiteMaps一段时间后,同样被Google索引,只不过,出现在补充结果中。

当然,从尽管网页未出现在SiteMaps中但仍能被Google索引也可以看出,Google仍然使用FreshBot或类似FreshBot的机制,当然这也容易理解,毕竟仍然有那么多未使用SiteMaps的网站,Google不可能将其拒之门外。

有关SiteMaps的详细介绍,请参考Google SiteMaps:Google的“后门”。需要指出的是,如今Sitemaps协议已成为行业标准,不独对Google有效,其他主流搜索引擎包括Yahoo!、Live搜索及Ask均已提供支持。

声明:本文中的信息部分来自公开文献,部分纯属个人揣测,可能有谬误之处,请您姑妄听之。

09/05/2007

服务器的稳定性对网站排名的影响

务器的稳定性会直接影响网站排名情况,是seo重要的一环,应该得到从事seo人们的重视,以前也了解过服务器稳定性对排名有着较为严重的影响,不过那都是别人说的,自己却一直没机会经历。这次,webdn服务器出现了问题,隔三差五就不能访问,结果百度给网站降低权,几天后访问量迅速走低。

经历了这次后,总结了搜索引擎的一些算法规则:当你的网站连续或者间断出现不稳定情况时,搜索引擎会暂时对你的网站进行降权处理,直至你的网站服务器恢复正常后的3-7天,甚至更长时间后再恢复网站的权重。有个做灌装机的客户,服务器也是不稳定,结果严重影响排名,直到换了一个服务商.如果服务器陆续的不稳定,还要视乎不稳定时间的长短,两次故障时间间隔,最后再对降权时间进行调整,如果连续一个星期,甚至更长时间不能访问,则有可能被删除。

为什么会这样?如果你的网站不能访问,而访问者通过搜索引擎链接时就会链接不上,这就会严重影响搜索引擎的用户体验。

对于服务器对排名的影响在百度上反应更为迅速, Google则显示的有些迟钝。根据我们公司出现的情况来说,百度一般是在服务器不能正常访问的两天内就会作出相应的降权处理。当然,百度还会每天不定时的来访问你的服务器,查看是否恢复正常。假如在百度的下一次访问时,服务器可以正常访问了,那么它还会连续几天测试,以确保你的服务器稳定了,再对权重进行相应的处理。

16/11/2006

Java Web项目开发到底需要掌握哪些技术?

    目前, 国内外信息化建设已经进入基于Web应用为核心的阶段, Java作为应用于网络的最好语言,前景无限看好。然而,就算用Java建造一个不是很烦琐的web应用,也不是件轻松的事情。概括一下,实施Java的WEB项目需要掌握的技术如下:

 
lJava语言
l面向对象分析设计思想
l设计模式和框架结构
lXML语言
l网页脚本语言
l数据库
l应用服务器
l集成开发环境
 
下面我们具体地看每个技术.
1、Java语言

Java
语言体系比较庞大,包括多个模块。从WEB项目应用角度讲有JSP、Servlet、JDBC、JavaBean(Application)四部分技术。
 
(1)、Java Database Connectivity (JDBC)技术
Java Web应用开发中,数据库管理系统(RDBMS)的使用是不可缺少的。JDBC(Java Database Connectivity) 是一种用于执行 SQL 语句的 Java API。它由一组用 Java 编程语言编写的类和接口组成。JDBC 为工具/数据库开发人员提供了一个标准的API,使他们能够用纯Java API 来编写数据库应用程序。
简单地说,JDBC 可做三件事:
l与数据库建立连接,
l发送 SQL 语句,
l处理结果。
 
 (2)、Servlet技术
Servlet是运行在服务器端的程序,可以被认为是服务器端的applet。servlet被Web服务器(例如Tomcat)加载和执行,就如同applet被浏览器加载和执行一样。servlet从客户端(通过Web服务器)接收请求,执行某种操作,然后返回结果。
 
Servlet的主要优点包括
lServlet是持久的。servlet只需Web服务器加载一次,而且可以在不同请求之间保持服务(例如一次数据库连接)。
lServlet是与平台无关的。如前所述,servlet是用Java编写的,它自然也继承了Java的平台无关性。
lServlet是可扩展的。由于servlet是用Java编写的,它就具备了Java所能带来的所有优点。Java是健壮的、面向对象的编程语言,它很容易扩展以适应你的需求。servlet自然也具备了这些特征。
lServlet是安全的。从外界调用一个servlet的惟一方法就是通过Web服务器。这提供了高水平的安全性保障,尤其是在你的Web服务器有防火墙保护的时候。
lServlet可以在多种多样的客户机上使用。由于servlet是用Java编写的,所以你可以很方便地在HTML中使用它们。
 
(3)、JavaServer Pages(JSP) 技术
JSP是从Servlet上分离出来的一小部分,简化了开发,加强了界面设计。JSP定位在交互网页的开发。运用Java语法,但功能较Servlet弱了很多,并且高级开发中只充当用户界面部分。JSP容器收到客户端发出的请求时,首先执行其中的程序片段,然后将执行结果以HTML格式响应给客户端。其中程序片段可以是:操作数据库、重新定向网页以及发送 E-Mail 等等,这些都是建立动态网站所需要的功能。所有程序操作都在服务器端执行,网络上传送给客户端的仅是得到的结果,与客户端的浏览器无关,因此,JSP 称为Server-Side Language。
 
JavaServer Pages的主要优点包括
●一次编写,各处执行(Write o­nce, Run Anywhere)特性
作为Java 平台的一部分,JavaServer Pages 技术拥有Java语言“一次编写,各处执行”的特点。随着越来越多的供货商将JavaServer Pages 技术添加到他们的产品中,您可以针对自己公司的需求,做出审慎评估后,选择符合公司成本及规模的服务器,假若未来的需求有所变更时,更换服务器平台并不影响之前所投下的成本、人力所开发的应用程序。
● 搭配可重复使用的组件
JavaServer Pages技术可依赖于重复使用跨平台的组件(如:JavaBean或Enterprise JavaBean组件)来执行更复杂的运算、数据处理。开发人员能够共享开发完成的组件,或者能够加强这些组件的功能,让更多用户或是客户团体使用。基于善加利用组件的方法,可以加快整体开发过程,也大大降低公司的开发成本和人力。
● 采用标签化页面开发
Web 网页开发人员不一定都是熟悉Java 语言的程序员。因此,JSP 技术能够将许多功能封装起来,成为一个自定义的标签,这些功能是完全根据XML 的标准来制订的,即JSP 技术中的标签库(Tag Library)。因此,Web 页面开发人员可以运用自定义好的标签来达成工作需求,而无须再写复杂的Java 语法,让Web 页面开发人员亦能快速开发出一动态内容网页。
今后,第三方开发人员和其他人员可以为常用功能建立自己的标签库,让Web 网页开发人员能够使用熟悉的开发工具,如同HTML 一样的标签语法来执行特定功能的工作。
N-tier 企业应用架构的支持
有鉴于网际网络的发展,为因应未来服务越来越繁杂的要求,且不再受地域的限制,因此,
必须放弃以往Client-Server的Two-tier 架构,进而转向更具威力、弹性的分散性对象系统。由于JavaServer Page 技术是Java 2 Platform Enterprise Edition (J2EE)集成中的一部分,它主要是负责前端显示经过复杂运算后之结果内容,而分散性的对象系统则是主要依赖EJB ( Enterprise JavaBean )和JNDI ( Java Naming and Directory Interface )构建而成。

(4)、JavaBean(Application)
应用组件技术
Application
是Java应用程序,在WEB项目和一些开发中主要应用JavaBean。它就是Application的一部分,逻辑运算能力很强,能极大的发挥Java语言的优点。JavaBean 被称为是Java 组件技术的核心。JavaBean 的结构必须满足一定的命名约定。JavaBean能提供常用功能并且可以重复使用,这使得开发人员可以把某些关键功能和核心算法提取出来封装成为一个组件对象,这样就增加了代码的重用率和系统的安全性。

高级的WEB项目会应用到以上所有技术,它们之间联合使用和协作开发会提高开发的效率和系统的性能。 

2、面向对象分析设计思想

Java
语言是完全面向对象的语言,所以在项目设计时会有很大的帮助,在设计时应尽量舍弃以往的面向过程的设计方式。

在分析项目业务关系的时候,应用一些UML(Unified Modeling Language)图,例如常用的用例图(use case diagram),类图(class diagram),时序图(sequence diagram)等等,会有很大的帮助,这样能尽快找出业务逻辑主要面对的对象,然后对每个对象进行行为划分,最后再实现对象之间的集成和通信。

3、设计模式和框架结构
Java从语言角度来讲不是很难,但是从整体设计角度来讲我们还需要了解一些高级应用框架。如果要设计一个良好的框架结构,单单只掌握Java语言远远不够。这就涉及到一个设计模式,还有和设计模式相关的一些知识。

设计模式在Java项目实施过程更是重中之重。主要在与两层的设计模式、三层的设计模式和N层的设计模式。它直接决定着项目的应用、部署和实际开发设计。

在普通的WEB项目中很多采用两层的开发结构。JSP+Servlet或JSP+JavaBean。当对开发要求高的项目中使用很多的还是MVC的三层开发结构,也就是JSP+Servlet+JavaBean。它能分有效的分离逻辑开发,使开发人员能专注于各自的开发。同时也能时整个开发结构流程更清晰,但是需要比较高的开发配合度。
在项目中,我们经常使用著名的Model-View-Controller(MVC)架构。
MVC架构是随着smalltalk language语言的发展提出的,它是一个著名的用户界面设计架构。经典的MVC架构把一个组件(可认为是整个应用程序的一个模块)划分成三部分组 Model管理这个模块中所用到的数据和业务逻辑。而View 管理模块如何显示给用户,Controller 决定如何处理用户和该模块交互式时候产生的事件 如用户点击一个按钮等。

4、XML
语言

在服务器和设计模式结构中会应用到自定义文件,而且在应用高级设计时也会定义自用的标签,现在流行的是用XML去定义配置,所以XML语言应该有一定掌握。
当前,Java 2平台企业版(J2EE)架构在厂商市场和开发者社区中倍受推崇。作为一种工具,可扩展标记语言(XML)简化了数据交换、进程间消息交换这一类的事情,因而对开发者逐渐变得有吸引力,并开始流行起来。自然,在J2EE架构中访问或集成XML解决方案的想法也很诱人。因为这将是强大系统架构同高度灵活的数据管理方案的结合。

XML的应用似乎是无穷无尽的,但它们大致上可以分为三大类:
1、简单数据的表示和交换(针对XML的简单API(SAX)和文档对象模型(DOM)语法解析,不同的文档类型定义(DTDs)和概要(schemas))
2、用户界面相关、表示相关的上下文(可扩展样式表语言(XSL),可扩展样式表语言转换(XSLT))
3、面向消息的计算(XML-RPC(远程过程调用),基于SOAP协议的Web 服务(Web Services),电子化业务XML(ebXML))

5、网页脚本语言
 
为了提高WEB项目的整体性能,提高人机交互的友好界面,网页的脚本语言是很有用处的,有的时候可以解决很大的难题或提高程序的性能和应用性。

网页脚本语言的执行都是在客户端执行的,速度很很快,并且大多的操作与服务器没有交互运算,所以在一些应用中非常理想。在设计WEB项目的应用中,网页的脚本语言起着不能忽视的作用,所以如果设计WEB项目的应用中,对JavaScript应有一定的了解。
 
JavaScript是一种基于对象(Object Based)和事件驱动(Event Driven)并具有安全性能(Secure)的脚本语言。使用它的目的是与HTML超文本标记语言、Java 脚本语言(Java小程序)一起实现在一个Web页面中链接多个对象,与Web客户交互作用。从而可以开发客户端的应用程序等。它是通过嵌入或调入在标准的HTML语言中实现的。它具有以下几个基本特点:
1.它是一种脚本编写语言
JavaScript是一种脚本语言,它采用小程序段的方式实现编程。像其它脚本语言一样,JavaScript同样已是一种解释性语言,它提供了一个易的开发过程。
它的基本结构形式与C、C++、VB十分类似。但它不像这些语言一样,需要先编译,而是在程序运行过程中被逐行地解释。它与HTML标识结合在一起,从而方便用户的使用操作。
2. 基于对象的语言。
 JavaScript是一种基于对象的语言,同时以可以看作一种面向对象的。这意味着它能运用自己已经创建的对象。因此,许多功能可以来自于脚本环境中对象的方法与脚本的相互作用。
3.简单性
 JavaScript的简单性主要体现在:首先它是一种基于Java基本语句和控制流之上的简单而紧凑的设计, 从而对于学习Java是一种非常好的过渡。其次它的变量类型是采用弱类型,并未使用严格的数据类型。
4.安全性
 JavaScript是一种安全性语言,它不允许访问本地的硬盘,并不能将数据存入到服务器上,不允许对网络文档进行修改和删除,只能通过浏览器实现信息浏览或动态交互。从而有效地防止数据的丢失。
5. 动态性
 JavaScript是动态的,它可以直接对用户或客户输入做出响应,无须经过Web服务程序。它对用户的响应,是采用以事件驱动的方式进行的。所谓事件驱动,就是指在主页(Home Page)中执行了某种操作所产生的动作,就称为“事件”(Event)。比如按下鼠标、移动窗口、选择菜单等都可以视为事件。当事件发生后,可能会引起相应的事件响应。

6、开发工具
(1)、数据库
在主要的应用中,数据库相关的环节应用很多,所以对数据库应该有一定了解。不能单单只了解一种数据库,因为在很多实际开发中会提出很多数据库解决方案,所以只有在了解多种数据库的情况下才能有一个比较方案。
对于数据库应该了解他的性能和一些基本的操作常识,还有该数据库的特点。而针对与Java语言WEB项目的数据库开发则主要是对JDBC的应用,还有数据库事务处理和连接池等高级概念的应用。

(2)、Web服务器
 
同数据库一样,应该了解该服务器的性能,特点和一些常识。
在应用方面,Web服务器主要是针对于配置和部署,对目录的配置,调试;对配置文件属性的修改;对访问权限和并发性的控制;Java类的部署等。

(3)、集成开发环境(IDE):
公欲善其事, 必先利其器”. 对于Web应用开发人员来讲,好的集成开发环境(IDE:Integrated Development Enviroment)是非常重要的。目前在市场上占主导位置的一个集成开发工具就是Eclipse.
 (转载文章请保留出处:Java家(www.javajia.com))
07/07/2006

值得收藏的一些代码

1. oncontextmenu="window.event.returnvalue=false" 将彻底屏蔽鼠标右键 
<table border oncontextmenu=return(false)><td>no</table> 可用于Table 
2. <body onselectstart="return false"> 取消选取、防止复制 

3. onpaste="return false" 不准粘贴 

4. oncopy="return false;" oncut="return false;" 防止复制 

5. <link rel="Shortcut Icon" href="favicon.ico"> IE地址栏前换成自己的图标 

6. <link rel="Bookmark" href="favicon.ico"> 可以在收藏夹中显示出你的图标 

7. <input style="ime-mode:disabled"> 关闭输入法 

8. 永远都会带着框架 
<script language="javascript"><!-- 
if (window == top)top.location.href = "frames.htm"; //frames.htm为框架网页 
// --></script> 

9. 防止被人frame 
<script LANGUAGE=javascript><!-- 
if (top.location != self.location)top.location=self.location; 
// --></script> 

10. <noscript><iframe src=*.html></iframe></noscript> 网页将不能被另存为 

11. <input type=button value=查看网页源代码 
onclick="window.location = ’view-source:’+ ’http://www.csdn.net/’"> 

12. 怎样通过asp的手段来检查来访者是否用了代理 
<% if Request.ServerVariables("HTTP_X_FORWARDED_FOR"<>"" then 
response.write "<font color=#FF0000>您通过了代理服务器,"& _ 
"真实的IP为"&Request.ServerVariables("HTTP_X_FORWARDED_FOR" 
end if 
%> 

13. 取得控件的绝对位置 

//javascript 
<script language="javascript"> 
function getIE(e){ 
var t=e.offsetTop; 
var l=e.offsetLeft; 
while(e=e.offsetParent){ 
t+=e.offsetTop; 
l+=e.offsetLeft; 

alert("top="+t+"\nleft="+l); 

</script> 

//VBscript 
<script language="VBscript"><!-- 
function getIE() 
dim t,l,a,b 
set a=document.all.img1 
t=document.all.img1.offsetTop 
l=document.all.img1.offsetLeft 
while a.tagName<>"BODY" 
set a = a.offsetParent 
t=t+a.offsetTop 
l=l+a.offsetLeft 
wend 
msgbox "top="&t&chr(13)&"left="&l,64,"得到控件的位置" 
end function 
--></script> 

14. 光标是停在文本框文字的最后 
<script language="javascript"> 
function cc() 

var e = event.srcElement; 
var r =e.createTextRange(); 
r.moveStart(’character’,e.value.length); 
r.collapse(true); 
r.select(); 

</script> 
<input type=text name=text1 value="123" onfocus="cc()"> 

15. 判断上一页的来源 
asp: 
request.servervariables("HTTP_REFERER" 

javascript: 
document.referrer 

16. 最小化、最大化、关闭窗口 
<object id=hh1 classid="clsid:ADB880A6-D8FF-11CF-9377-00AA003B7A11"> 
<param name="Command" value="Minimize"></object> 
<object id=hh2 classid="clsid:ADB880A6-D8FF-11CF-9377-00AA003B7A11"> 
<param name="Command" value="Maximize"></object> 
<OBJECT id=hh3 classid="clsid:adb880a6-d8ff-11cf-9377-00aa003b7a11"> 
<PARAM NAME="Command" value="Close"></OBJECT> 

<input type=button value=最小化 onclick=hh1.Click()> 
<input type=button value=最大化 onclick=hh2.Click()> 
<input type=button value=关闭 onclick=hh3.Click()> 
本例适用于IE 

17. 
<% 
’定义数据库连接的一些常量 
Const adOpenForwardOnly = 0 ’游标只向前浏览记录,不支持分页、Recordset、BookMark 
Const adOpenKeyset = 1 ’键集游标,其他用户对记录说做的修改将反映到记录集中,但其他用户增加或删除记录不会反映到记录集中。支持分页、Record set、BookMark 
Const adOpenDynamic = 2 ’动态游标功能最强,但耗资源也最多。用户对记录说做的修改,增加或删除记录都将反映到记录集中。支持全功能浏览(ACCESS 不支持)。 
Const adOpenStatic = 3 ’静态游标,只是数据的一个快照,用户对记录说做的修改,增加或删除记录都不会反映到记录集中。支持向前或向后移动 

Const adLockReadOnly = 1 ’锁定类型,默认的,只读,不能作任何修改 
Const adLockPessimistic = 2 ’当编辑时立即锁定记录,最安全的方式 
Const adLockOptimistic = 3 ’只有在调用Update方法时才锁定记录集,而在此前的其他操作仍可对当前记录进行更改、插入和删除等 
Const adLockBatchOptimistic = 4 ’当编辑时记录不会被锁定,而更改、插入和删除是在批处理方式下完成的 

Const adCmdText = &H0001 
Const adCmdTable = &H0002 
%> 

18. 网页不会被缓存 
HTM网页 
<META HTTP-EQUIV="pragma" CONTENT="no-cache"> 
<META HTTP-EQUIV="Cache-Control" CONTENT="no-cache, must-revalidate"> 
<META HTTP-EQUIV="expires" CONTENT="Wed, 26 Feb 1997 08:21:57 GMT"> 
或者<META HTTP-EQUIV="expires" CONTENT="0"> 
ASP网页 
Response.Expires = -1 
Response.ExpiresAbsolute = Now() - 1 
Response.cachecontrol = "no-cache" 
PHP网页 
header("Expires: Mon, 26 Jul 1997 05:00:00 GMT"; 
header("Cache-Control: no-cache, must-revalidate"; 
header("Pragma: no-cache"; 

19. 检查一段字符串是否全由数字组成 
<script language="javascript"><!-- 
function checkNum(str){return str.match(/\D/)==null} 
alert(checkNum("1232142141") 
alert(checkNum("123214214a1") 
// --></script> 

20. 获得一个窗口的大小 
document.body.clientWidth,document.body.clientHeight 

21. 怎么判断是否是字符 
if (/[^\x00-\xff]/g.test(s)) alert("含有汉字"; 
else alert("全是字符"; 

22.TEXTAREA自适应文字行数的多少 
<textarea rows=1 name=s1 cols=27 onpropertychange="this.style.posHeight=this.scrollHeight"> ; 
</textarea> 

23. 日期减去天数等于第二个日期 
<script language=javascript> 
function cc(dd,dadd) 

//可以加上错误处理 
var a = new Date(dd) 
a = a.valueOf() 
a = a - dadd * 24 * 60 * 60 * 1000 
a = new Date(a) 
alert(a.getFullYear() + "年" + (a.getMonth() + 1) + "月" + a.getDate() + "日" 

cc("12/23/2002",2) 
</script> 

24. 选择了哪一个Radio 
<HTML><script language="vbscript"> 
function checkme() 
for each ob in radio1 
if ob.checked then window.alert ob.value 
next 
end function 
</script><BODY> 
<INPUT name="radio1" type="radio" value="style" checked>style 
<INPUT name="radio1" type="radio" value="barcode">Barcode 
<INPUT type="button" value="check" onclick="checkme()"> 
</BODY></HTML> 

25.获得本页url的request.servervariables(""集合 
Response.Write "<TABLE border=1><!-- Table Header --><TR><TD><B>Variables</B></T D><TD><B>value</B></TD></TR> ;" 
for each ob in Request.ServerVariables 
Response.Write "<TR><TD>"&ob&"</TD><TD>"&am p;Request.ServerVariables(ob)&"</TD></TR>" 
next 
Response.Write "</TABLE>" 

26. 
本机ip<%=request.servervariables("remote_addr"%> 
服务器名<%=Request.ServerVariables("SERVER_NAME"%> 
服务器IP<%=Request.ServerVariables("LOCAL_ADDR"%> 
服务器端口<%=Request.ServerVariables("SERVER_PORT"%> 
服务器时间<%=now%> 
IIS版本<%=Request.ServerVariables"SERVER_SOFTWARE"%> 
脚本超时时间<%=Server.scriptTimeout%> 
本文件路径<%=server.mappath(Request.ServerVariables("script_NA ME")%> 
服务器CPU数量<%=Request.ServerVariables("NUMBER_OF_PROCESSORS" %> 
服务器解译引擎<%=scriptEngine & "/"& scriptEngineMajorVersion &"."&scriptEngineMinorVersion&"."& scriptEngineBuildVersion %> 
服务器操作系统<%=Request.ServerVariables("OS"%> 

27.ENTER键可以让光标移到下一个输入框 
<input onkeydown="if(event.keyCode==13)event.keyCode=9"> 

28. 检测某个网站的链接速度: 
把如下代码加入<body>区域中: 
<script language=javascript> 
tim=1 
setInterval("tim++",100) 
b=1 

var autourl=new Array() 
autourl[1]="www.njcatv.net" 
autourl[2]="javacool.3322.net" 
autourl[3]="www.sina.com.cn" 
autourl[4]="www.nuaa.edu.cn" 
autourl[5]="www.cctv.com" 

function butt(){ 
document.write("<form name=autof>" 
for(var i=1;i<autourl.length;i++) 
document.write("<input type=text name=txt"+i+" size=10 value=测试中……> =》<input type=text name=url"+i+" size=40> =》<input type=button value=GO onclick=window.open(this.form.url"+i+".value)><br/> " 
document.write("<input type=submit value=刷新></form>" 

butt() 
function auto(url){ 
document.forms[0]["url"+b].value=url 
if(tim>200) 
{document.forms[0]["txt"+b].value="链接超时"} 
else 
{document.forms[0]["txt"+b].value="时间"+tim/10+"秒"} 
b++ 

function run(){for(var i=1;i<autourl.length;i++)document.write("<img src=http://"+autourl+"/"+Math.random()+" width=1 height=1 onerror=auto(’http://";;+autourl+"’)>"} 
run()</script> 

29. 各种样式的光标 
auto :标准光标 
default :标准箭头 
hand :手形光标 
wait :等待光标 
text :I形光标 
vertical-text :水平I形光标 
no-drop :不可拖动光标 
not-allowed :无效光标 
help :?帮助光标 
all-scroll :三角方向标 
move :移动标 
crosshair :十字标 
e-resize 
n-resize 
nw-resize 
w-resize 
s-resize 
se-resize 
sw-resize 

书写高效的CSS

效率有什么用?

    CSS 被吹捧的好处之一就是它能减小页面大小,由此缩短下载时间,不仅仅是首页的载入,还包括样式表被缓存以后,后续页面的载入也被加快了的那部分时间。这没错,但首页载入时间的缩短几乎看不出来,这是因为 CSS 代码往往过于冗长了。

    好吧,现在一切都不同了。学点高效地进行 CSS 编码的技巧吧,让你把样式表马上裁减到最小为止。自然,你可能看不到什么惊人的改变,但对于大站来说,微小的字节减少也很重要。

    有很多地方可以减少代码的长度,包括 简记属性 (shorthand properties), 多重声明 (multiple declarations),默认值 (default values), 继承 (inheritance),和空白 (white space)。

简记属性

    Zeroing page margins 提到了一组这样的简记属性,但对于此还有更多的。

通常简记属性包括:


font (控制 "font-size", "font-weight", "line-height", 等等) 
background (控制元素的背景,放置位置,重复次数,等等) 
list-style (设置列表元素前边那个“原点”的属性) 
margin (定义 box 各侧的边缘空白 (margin) 宽度) 
border (定义 box 边界 (border) 的属性 —— 有很多和边界有关的简记属性) 
padding (定义 box 各侧的补白 (padding) 宽度) 
上述项目是链接至 W3C CSS 2 规范 的相关章节的。

    例如, font  属性 是用于同时设置 font-style, font-variant, font-weight, font-size, line-height, 和 font-family 的简记属性。当然,它们并非全都必须写在简记属性中。一旦在简记属性中忽略了其中某个,那些缺失的属性都将被设置为它们的 初始值,就像 W3C 规范 中  font property  一节提到的那样。若需要控制很多和字体相关的属性,使用这个简记属性就可以省下样式表中的大量字节了。

    background  和  list-style  属性也是如此。现在还剩下关于 CSS 盒 (box) 模型 四边的那些属性和一点没法归类的杂碎了。

盒侧边的简记属性

    任何块级 (block level) 元素 (像 div,表格,列表,段落等) 的四边都有 边白 (margin),边界 (border),和 补白 (padding),都可以分别设置不同的宽度。对于边界 (border) 来说,还能给每边分配不同的  border-style  和  border-color 。若要一条条地显式地指明所有这些属性,代码就会变得很冗长。使用简记规则的意义正在于此:彻底地减少这样负担。

“钟面”
    当需要指定这三类“盒侧”属性之一,而且各侧的情况又是一样的时候,使用简记属性最基本的功能就行了:


margin: 5px;
border-width: 5px;
padding: 5px; 

    注意:要让边界显示出来,还必须设置 border-style 属性,否则单有  border-width  边界是显示不出来的。既可以直接通过 border-style 来设置它,也可以通过  border 属性。

    然而很有可能某一侧需要一个不同的值,这时 CSS 的“钟面”特性就上台了。把此处的盒子想象为一个钟面,当指针指向 12 点时,表示盒子的正上方,这就是简记属性中第一个值的含义;下一个是 3 点,这是盒子的右侧;接下来是 6 点,表示盒子的下方;最后呢是 9 点,盒子的左侧。

    让我们看看这个例子吧。在页面中我们需要一个 10px 上边白,5px 右边白, 3px 下边白,无左边白的盒子。则  margin  简记属性应该这么写:


margin: 10px 5px 3px 0;

    在属性的声明中,几个值必须也只能用空格来分隔。而且只要那个值不是零,就必须给它指定单位。

    为什么零宽度的边白就不需要指定单位了呢?因为零个任何单位 (px, em, %, 等等) 的值也就等于任意其他单位的值。

改进的钟面

    当某些值重复时,这些“盒侧”属性还能压榨得更短。前面提到过,若各侧都一样,可以只指定一个,让它应用到全部。而一旦顶部和底部的样式是一致的,左侧和右侧却是另一种,margin 的代码可以这么写:


margin: 10px 5px;

    这行代码把顶部和底部的边白设置为 10px,两侧设为 5px。最后一个技巧是这样的:若顶部和底部的不同,两侧的却是一样的,比如上边白 10px,左右边白 5px,下边白 20px,我们可以这么写:

margin: 10px 5px 20px;

    这些缩写完全是根据给出值的数目和顺序决定的。总结起来,一个值 = 所有各侧;两个值 = 上下一种,两侧另一种;三个值 = 上侧一种,左右同一种,下侧一种;当然还有四个值 = 按照顺时针。好了,现在不那么难记住了吧?

边界 (border) 的一些区别

    同样的钟面简记模型也可以用于 border 简记属性 和 padding。 border-width ,  border-color ,  border-style , 与  padding  也采用和 margin 一样的方式工作。然而处理  border  属性时却有点不同。  border  属性是同时给盒子的各侧设置 border-width, border-style, 及 border-color 属性的。

    如果所有四侧的样式都一样,那当然不会有什么问题。可万一他们不同呢?我们还得回去用那些老式的 border-top, border-right 们?没错,是可以。但幸好我们还有更有效率一点的方法。

    考虑我们这个盒子的各个边界有同样的 style 和 color,但宽度不同的情况,最有效的方法是,先像往常一样用  border  简记法来定义好 border-width, border-style, 和 border-color;然后再设置一次  border-width  属性,覆盖上面设置的宽度:


border: 10px solid red;
border-width: 10px 5px 3px 0;

    如果所有的边界属性 (width、style 和 color) 都各侧不同,那上面的方法恐怕就没什么用了,但通常不会遇到这么怪异的情况。如果变化的属性仅仅是  border-style  或者  border-color  的话,上述的方法改改就可以像  border-width  的情况那样用了。

    下面我们看看在另一种情形下书写高效的 CSS 会带来什么改变。

多重声明

    考虑我们有 6 个采用绝对定位的 div (比如 Dreamweaver 里的层),且它们的其他属性都一样,只不过在页面中的位置不同。因为它们的位置不同,自然应该有不同的 ID 或者是 class,但剩下的属性还是一样的。

    一个 (所见即所得的) 布局编辑器恐怕给每个 ID 都各自写一套属性,包括字体的规则、文本的规则、位置的定义等等。可一遍遍地给这些 div 重复完全一样的规则未免笨了点,不是么?那这样就可以把这些规则减到最短了:


#first  {left: 0;}
#second {left: 100px;}
#third  {left: 200px;}
#fourth {left: 300px;}
#fifth  {left: 400px;}
#sixth  {left: 500px;}
#first, #second, #third, #fourth, #fifth, #sixth {
  position: absolute;
  top: 0;
  width: 75px;
  font-size: .9em;
  font-weight: bold;
  text-align: center;
  line-height: 1.4em;
  background-color: silver;
  color: navy;
  padding: 5px;
  border: 1px solid navy;
  }

    列出所有类似的这些 div 的 ID,用 , 和一个空格分隔,下面的规则块会被应用到所有这些 ID 上。显然这样的规则如果给每个 ID 都重复一遍,代码就膨胀得多了。这恐怕是最常用也最有效的缩短样式表方法了。

    注意:注意最后一个 ID 选择符 并没有 跟着一个逗号。(若多了逗号) 有些浏览器中可能还能看到那些 div,另一些就有可能把这样的样式表视为错误而不显示任何一个 div 了。

默认值

    许多 CSS 属性都有它们的默认值,如果这个属性没被定义取代,它们就将应用于 HTML 元素上。比如说每个补白属性中, padding-top ,  padding-right ,  padding-bottom , 和  padding-left  的初始值都是  0 。因此如果某个元素不需要任何的补白,自然就可以不设置补白的那些属性了。

    注意: 那些简记属性——比如我们先前讨论过的—— 里面,或者其本身都没有什么默认的值。毕竟简记属性其实只是独立属性的一种重现而已,所以如果硬说它们有默认值的话,采用的也是独立属性的那些默认值。尽管 CSS 规范的 Property Index 一节中规定的许多默认值都是  none  或  0 ,浏览器们却往往给不同的属性设置一些不同的默认值。

    例:Opera 浏览器给 body 元素设置了 8px 的补白。h1-h6 标题和段落,默认都有非零的边白。列表和列表子项中用到的默认边白和补白,每个浏览器都有所不同。

继承

    另一个避免写出冗余代码的方法是,了解哪些属于父元素的属性会由子元素继承下来。会被继承的属性只有很少一些,而且其中大部分是不常用的,比如  voice-family 。所以列个能继承的常用属性的表,其实是很短的,下面就是按字母顺序排出的:


color 
font (及其相关属性) 
letter-spacing 
line-height 
list-style (及其相关属性) 
text-align 
text-indent 
text-transform 
white-space 
word-spacing 

    在某些老式浏览器中,继承功能可能有些问题,然而大部分现代浏览器在这方面都处理得很正确。记住上面这个列表,可以让你少写点多余的代码。当然了,如果你想看看完整的列表,还是参考 CSS 2 Property Index。 

空白
    并非指的是 CSS 的  white-space  属性,这个属性早有确定的值了。我们说的是样式表本身含有的那些空白。空白常用于换行字符,和在一行里面用来改进可读性的空格。尽管把它们都删除可能会剩下个把字节,但好处毕竟有限。

    关键是,如果把它们都删除了,CSS 文件就会变得非常难读,更难修改。要是你真的打算这么做,不妨创建一个主 CSS 文件,再根据它生成一个删除了所有空白的副本,修改的时候只修改主文件,根据主文件重新生成一次副本就行了。

    请注意,CSS 编码中需要一些空白,删除那些必要的会导致你未曾预料的问题。如果 W3C 规范中用了 "space separated" 这样的语句,那么空格就不可省略。常见的像简记属性中分隔值的那些空格,还有 下降合并符 (descendant combinator),或者称为下降选择符,就是一个空格。所以说不到非用不可的时候,删除空白这样的方法还是少用。

完结

    你现在学会了好几种让你的样式表更高效的方法,益处是在这些技巧下,不仅下载时间被减少了,而且清晰、易于理解、更改的代码随之而来。就算你用排版工具来编辑样式表,也可以在最后用这些方法将其改定为高效的样子。

CSS布局入门

CSS布局与传统表格(table)布局最大的区别在于:原来的定位都是采用表格,通过表格的间距或者用无色透明的GIF图片来控制文布局版块的间距;而现在则采用层(div)来定位,通过层的margin,padding,border等属性来控制版块的间距。

1.定义DIV

分析一个典型的定义div例子:

#sample{ MARGIN: 10px 10px 10px 10px;
PADDING-LEFT: 20px;
PADDING-TOP: 20px;
PADDING-RIGHT: 10px;
PADDING-BOTTOM: 10px;
BORDER-RIGHT: #CCC 2px solid;
BORDER-BOTTOM: #CCC 2px solid;
BORDER-LEFT: #CCC 2px solid;
BORDER-TOP: #CCC 2px solid;
BACKGROUND: url(images/bg_poem.jpg) #FEFEFE no-repeat right bottom;
COLOR: #666;
TEXT-ALIGN: center;
LINE-HEIGHT: 150%; WIDTH:60%; }

说明如下:

  • 层的名称为sample,在页面中用<div id="sample">就可以调用这个样式。
  • MARGIN是指层的边框以外留的空白,用于页边距或者与其它层制造一个间距。"10px 10px 10px 10px"分别代表"上右下左"(顺时针方向)四个边距,如果都一样,可以缩写成"MARGIN: 10px;"。如果边距为零,要写成"MARGIN: 0px;"。注意:当值是零时,除了RGB颜色值0%必须跟百分号,其他情况后面可以不跟单位"px"。MARGIN是透明元素,不能定义颜色。
  • PADDING是指层的边框到层的内容之间的空白。"PADDING-LEFT"是指左边边框到内容的距离,以此类推。如果都一样,可以缩写成"PADDING:0px"。PADDING是透明元素,不能定义颜色。
  • BORDER是指层的边框,"BORDER-RIGHT: #CCC 2px solid;"是定义层的右边框颜色为"#CCC",宽度为"2px",样式为"solid"直线。如果要虚线样式可以用"dotted"。
  • BACKGROUND是定义层的背景。分2级定义,先定义图片背景,采用"url(../images/bg_logo.gif)"来指定背景图片路径;其次定义背景色"#FEFEFE"。"on-repeat"指背景图片不需要重复,如果需要横向重复用"repeat-x",纵向重复用"repeat-y",重复铺满整个背景用"repeat"。后面的"right bottom;"是指背景图片从右下角开始。如果没有背景图片可以只定义背景色BACKGROUND: #FEFEFE
  • COLOR用于定义字体颜色,上一节已经介绍过。
  • TEXT-ALIGN用来定义层中的内容排列方式,center居中,left居左,right居右。
  • LINE-HEIGHT定义行高,150%是指高度为标准高度的150%,也可以写作:LINE-HEIGHT:1.5或者LINE-HEIGHT:1.5em,都是一样的意思。
  • WIDTH是定义层的宽度,可以采用固定值,例如500px,也可以采用百分比,象这里的"60%"。要注意的是:这个宽度仅仅指你内容的宽度,不包含margin,border和padding。但在有些浏览器中不是这么定义的,需要你多试试。

下面是这个层的实际表现:

这里是演示内容,这里是演示内容,这里是演示内容,这里是演示内容,这里是演示内容,这里是演示内容,这里是演示内容,这里是演示内容,

这里是演示内容,这里是演示内容,

这里是演示内容,这里是演示内容,

这里是演示内容...

我们可以看到边框是2px的灰色,背景图片在右下没有重复,内容距离上和左边框20px,内容居中,一切和预想的一样。hoho,虽然不好看,但它是最基本的,掌握了它,你就已经学会一半的CSS布局技术了。就是这样,不算难吧!(另一半是什么?另一半是层与层之间的定位。我会在后面逐步讲解。)

2.CSS2盒模型

自从1996年CSS1的推出,W3C组织就建议把所有网页上的对像都放在一个盒(box)中,设计师可以通过创建定义来控制这个盒的属性,这些对像包括段落、列表、标题、图片以及层<div>。盒模型主要定义四个区域:内容(content)、边框距(padding)、边界(border)和边距(margin)。上面我们讲的sample层就是一个典型的盒。对于初学者,经常会搞不清楚margin,background-color,background-image,padding,content,border之间的层次、关系和相互影响。这里提供一张盒模型的3D示意图,希望便于你的理解和记忆。

3.辅助图片一律用背景处理

用XHTML+CSS布局,有一个技术一开始让你不习惯,应该说是一种思维方式与传统表格布局不一样,那就是:所有辅助图片都用背景来实现。类似这样:

BACKGROUND: url(images/bg_poem.jpg) #FEFEFE no-repeat right bottom;

尽管可以用<img>直接插在内容中,但这是不允许的。这里的"辅助图片"是指那些不是作为页面要表达的内容的一部分,而仅仅用于修饰、间隔、提醒的图片。例如:相册中的图片、图片新闻中的图片,上面的3d盒模型图片都属于内容的一部分,它们可以用<img>元素直接插在页面里,而其它的类似logo,标题图片,列表前缀图片都必须采用背景方式或者其他CSS方式显示。

这样做的原因有2点:

  • 将表现与结构彻底相分离,用CSS控制所有的外观表现,便于改版。
  • 使页面更具有易用性,更有亲和力。例如:盲人使用屏幕阅读机,用背景技术实现的图片就不会被朗读出来。

WEB标准

WEB标准不是某一个标准,而是一系列标准的集合。网页主要由三部分组成:结构(Structure)、表现(Presentation)和行为(Behavior)。对应的标准也分三方面:结构化标准语言主要包括XHTML和XML,表现标准语言主要包括CSS,行为标准主要包括对象模型(如W3C DOM)、ECMAScript等。这些标准大部分由W3C起草和发布,也有一些是其他标准组织制订的标准,比如ECMA(European Computer Manufacturers Association)的ECMAScript标准。我们来简单了解一下这些标准:

1.结构标准语言

(1)XML

XML是The Extensible Markup Language(可扩展标识语言)的简写。目前推荐遵循的是W3C于2000年10月6日发布的XML1.0,参考(www.w3.org/TR/2000/REC-XML-20001006)。和HTML一样,XML同样来源于SGML,但XML是一种能定义其他语言的语。XML最初设计的目的是弥补HTML的不足,以强大的扩展性满足网络信息发布的需要,后来逐渐用于网络数据的转换和描述。关于XML的好处和技术规范细节这里就不多说了,网上有很多资料,也有很多书籍可以参考。

(2)XHTML

XHTML是The Extensible HyperText Markup Language可扩展标识语言的缩写。目前推荐遵循的是W3C于2000年1月26日推荐XML1.0(参考http://www.w3.org/TR/xhtml1)。XML虽然数据转换能力强大,完全可以替代HTML,但面对成千上万已有的站点,直接采用XML还为时过早。因此,我们在HTML4.0的基础上,用XML的规则对其进行扩展,得到了XHTML。简单的说,建立XHTML的目的就是实现HTML向XML的过渡。

2. 表现标准语言

CSS是Cascading Style Sheets层叠样式表的缩写。目前推荐遵循的是W3C于1998年5月12日推荐CSS2(参考http://www.w3.org/TR/CSS2/)。W3C创建CSS标准的目的是以CSS取代HTML表格式布局、帧和其他表现的语言。纯CSS布局与结构式XHTML相结合能帮助设计师分离外观与结构,使站点的访问及维护更加容易。

3.行为标准

(1)DOM

DOM是Document Object Model文档对象模型的缩写。根据W3C DOM规范(http://www.w3.org/DOM/),DOM是一种与浏览器,平台,语言的接口,使得你可以访问页面其他的标准组件。简单理解,DOM解决了Netscaped的Javascript和Microsoft的Jscript之间的冲突,给予web设计师和开发者一个标准的方法,让他们来访问他们站点中的数据、脚本和表现层对像。

(2) ECMAScript

ECMAScript是ECMA(European Computer Manufacturers Association)制定的标准脚本语言(JAVAScript)。目前推荐遵循的是ECMAScript 262(http://www.ecma.ch/ecma1/STAND/ECMA-262.HTM)。

XHTML代码规范

在开始正式内容制作之前,我们必须先了解一下web标准有关代码的规范。了解这些规范可以帮助你少走弯路,尽快通过代码校验。

1.所有的标记都必须要有一个相应的结束标记

以前在HTML中,你可以打开许多标签,例如<p>和<li>而不一定写对应的</p>和</li>来关闭它们。但在XHTML中这是不合法的。XHTML要求有严谨的结构,所有标签必须关闭。如果是单独不成对的标签,在标签最后加一个"/"来关闭它。例如:

<br /><img height="80" alt="网页设计师" src="../images/logo_w3cn_200x80.gif" width="200" />

2.所有标签的元素和属性的名字都必须使用小写

与HTML不一样,XHTML对大小写是敏感的,<title>和<TITLE>是不同的标签。XHTML要求所有的标签和属性的名字都必须使用小写。例如:<BODY>必须写成<body> 。大小写夹杂也是不被认可的,通常dreamweaver自动生成的属性名字"onMouseOver"也必须修改成"onmouseover"。

3.所有的XML标记都必须合理嵌套

同样因为XHTML要求有严谨的结构,因此所有的嵌套都必须按顺序,以前我们这样写的代码:

<p><b></p>/b>

必须修改为:

<p><b></b>/p>

就是说,一层一层的嵌套必须是严格对称。

4.所有的属性必须用引号""括起来

在HTML中,你可以不需要给属性值加引号,但是在XHTML中,它们必须被加引号。例如:

<height=80>

必须修改为:

<height="80">

特殊情况,你需要在属性值里使用双引号,你可以用",单引号可以使用&apos;,例如:

<alt="say&apos;hello&apos;">

5.把所有<和&特殊符号用编码表示

  • 任何小于号(<),不是标签的一部分,都必须被编码为& l t ;
  • 任何大于号(>),不是标签的一部分,都必须被编码为& g t ;
  • 任何与号(&),不是实体的一部分的,都必须被编码为& a m p;

注:以上字符之间无空格。

6.给所有属性赋一个值

XHTML规定所有属性都必须有一个值,没有值的就重复本身。例如:

<td nowrap> <input type="checkbox" name="shirt" value="medium" checked>

必须修改为:

<td nowrap="nowrap"> <input type="checkbox" name="shirt" value="medium" checked="checked">

7.不要在注释内容中使“--”

“--”只能发生在XHTML注释的开头和结束,也就是说,在内容中它们不再有效。例如下面的代码是无效的:

<!--这里是注释-----------这里是注释-->

用等号或者空格替换内部的虚线。

<!--这里是注释============这里是注释-->

以上这些规范有的看上去比较奇怪,但这一切都是为了使我们的代码有一个统一、唯一的标准,便于以后的数据再利用。

弹性设计CSS

要从固定的、基于像素的设计方法转到弹性的、相对的设计方法并不容易。但是如果恰当利用,就可以成为增强亲和力和易用性的一个自然选择,同时又无须做出设计上的牺牲。  
    像素是计算机屏幕上的不可缩放的点,而一个 em 就是一个字大小的方块。由于字体大小的变化, em 代表用户喜欢的文字大小的相对单位。 

    采用印刷式的固定设计方案或许要容易些,因为如果尺寸不变,则考虑的东西就相对较少。可是如果采用弹性的设计方法,就可以充分利用电脑的显示器和浏览器。 

    也许你想你的网站以某种特定的方式显示,但是你的用户想看到的可能不一样。任何强加于用户的东西都不利于易用性,从而对网站的成功造成损害。 

    为了理解弹性设计,我们必须首先来看看一个似乎与此无关的问题 - 指定文字大小的几种方式。 

弹性文本
    显然文字是最容易实现的弹性设计的。能够设定喜欢的文字大小是用户最常见的要求,因此不可忽视。 

    亲和力指的并不只是关于盲人和屏幕阅读器。还有许多人虽然不是盲人,但是有视力障碍 - 你我变老时就会成为他们的一员。使网站变得更具亲和力的一个最简单的方法就是允许用户改变文字大小;拒绝提供这样的选择就剥夺了用户的主导权,很可能使用户无法舒适地阅读。 

    如果设计者使用像素为单位指定文字大小,大多数的用户将无法缩放文字,因为 Internet Explorer 改变文字大小的方式与别的浏览器不同。Mozilla 和 Opera 可以缩放已经设定像素大小的文字,而Windows 下的IE却不能。 

em 存在的问题
    Em 似乎是进行文字相对大小设定时的单位,浏览器默认的文字高度是16像素,对大多数设计者来说太大了,不合他们的口味。要使用 em,设计者一般将文字的初始大小设为小于 1em。 

例如:



body {
   font-size: 0.8em;
   } 
h1 {
   font-size: 2em;
   }

p {
   font-size: 1em;
   }



    看起来似乎可行,但有一个问题 - 如果你在 IE 中将“文字大小”设为“较小”或“最小”,文字就会小得难以阅读。由于 IE 如此普及, em 似乎不是可行的选择。  
    Jeffrey Zeldman过去曾经对此表示质疑,他认为尽管有其不利之处,以像素指定文字大小还是比用 em 好。这个结论是根据 Owen Briggs 所作的深入研究得出的。 Owen Briggs 测试了264种不同的文字缩放方法并演示了 em 之类的相对单位行不通。许多设计人员现在都用像素为单位指定文字大小,不是出于精确控制网页外观的需要,而是似乎没有更为合理的其他选择。 

    如此看来,要么是难看的大字体,要么无法缩放,好像无法两全。别着急,接着读下去。 

一种“大字体”后备样式
    在与无法缩放的像素所带来的亲和力问题的战斗中,许多作者在他们的网页上使用了一种后备样式表的技术,可通过网页上的一个链接进行切换。 

    这种方法固然不错,但是如果和相对文字大小的措施(比如Wired News所提到的)一起使用,效果会更好。不能指望用户熟悉你的特有界面,用户一般对浏览器的界面更为熟悉,如果他们想看大一点的字体,更倾向于用浏览器来达到而不是用你的界面。而且他们更期望这种方法在各个网站都管用,不想每访问一个网站都改变一次。,比如Wired News 

CSS 关键词
    Font-size 的关键词(xx-small, medium, x-large,等等)好像就是答案。在 IE 中,当用户选择“较大”或“最大”时文字会变大,选择“较小”或“最小”时文字会变小,一直到合适的大小。与其他的弹性设计方法不同,使用关键字的好处是当对文字进行缩放时,永远不会使文字实际像素大小低于某个值,所以无论用户如何选择文字大小,都应当有良好的可读性。 

    在 ALA 的其他地方对关键字有更详尽的解说,这种方法的最好的示例也许就是你正在阅读的这篇文章。(在最近一次的改版之前,ALA 使用了后备的“大字体”样式切换,一个样式表使用像素指定文字大小,另一个用的是基于关键字的相对大小方法。) 

百分比使得 em 可行
    Em 之所以可行是因为通过设定初始文字的百分比,可以很容易避免文字过小的问题。虽然其原理并非显而易见,但的确可行。当采用这种方案时,IE 文字大小各档设置之间的间隔就不会显得生硬,设计者可以精确设置初始文字大小,使得在“较小”和“最小”时仍然得到较好的可读性。这样有使 em 有了用武之地。(甚至于 Briggs 现在也更认同 em.) 

例如:



body {
   font-size: 80%;
   } 
h1 {
   font-size: 2em;
   }

p {
   font-size: 1em;
   }



    不用关键字而采用 em 的好处是你可以用 em 来指定全部布局的尺寸,它可以随着文字的大小按比例缩放。  
弹性布局
    对设计者来说,比弹性字体更困难的是彻底的相对布局 - 如果用 em 来设定布局的尺寸事情就容易了。 

    让布局具有弹性,使之随着用户改变文字大小时自动适应,这好像有些多余甚至毫无必要。但是既然你让文字可以伸缩,那么让包容文字的布局也随之伸缩也是顺理成章的事。 

    另外,如果用户选择了较大的字体,则周围的空间应当会随之按比例增加,保持了“设计者”选择的比例,使文章容易阅读。 

    这种方案的另一个好处是可以避免不希望的文字换行。如果一个窄的栏目宽度以像素来定义,当其中的文字变大时,可能会打乱整个布局。采用文字大小比例来指定栏目宽度就可避免这个问题。 

    关于该方案的一个例子请看 CSS Zen Garden 上的作品 Elastic Lawn。 

太宽了!
    将网页的初始文字大小指定为 100% 以后,在 IE 的“中等”字体下,36em 的宽度应该是 576 个像素(作为参考,ALA 的宽度为600个像素),在“最大”的字体下,36em 应当增加到 768 个像素(Windows 下 IE 6 的测试结果)。如果再大一点,在 800 像素宽的屏幕、“最大”号字体下就可能会显得太宽了。 

    CSS 对这个问题的解决方案是 max-width 属性,它可以指定某个元素的最大宽度。不幸的是 Internet Explorer 不支持(不知有谁想过没有?)。

    另一个解决方案就是采用流动式布局,也就是说根本不指定内容区域的宽度,让文字自然流动,充满屏幕宽度(HTML Dog采用了这种方案)。许多人不接受这种方案,因为在宽屏幕下的可读性不好,但对于移动设备这样的小屏幕非常合适。 

    如果你准备采用弹性布局方案,在指定边界或者位图之类的由像素构成的对象时,仍然要以像素为单位,这可能会和基于文字大小关系发生冲突;但这不应成为不采用弹性布局的理由。 

使图形弹性化
    用相对大小来设置位图的尺寸会导致灾难性的后果。对付这个问题可以这样做 - 维持图形原有的解析度不变,将它裁剪到合适的大小。 

    通过更换背景图片可以就可做到。这里是一个标题元素的例子,你也可以采用其他的图片替换技术:



h1 {
   font-size: 1em;
   width: 10em;
   height: 100px;
   text-indent: -1234em;
   background-image: url(whatever.jpg);
   }


    或者(正如hebig.org 和 v-2.org所做的那样),你可以将图片包含在一个容器,比如一个有下面样式的 DIV 中:


div {
   width: 10em;
   overflow: hidden;
   }


    本文中提到的许多弹性设计方法都可以在demonstration page中看到。  

网页文字颜色的搭配技巧

对于做网页的初学者可能更习惯于使用一些漂亮的图片作为自己网页的背景,但是,浏览一下大型的商业网站,你会发现他们更多运用的是白色、蓝色、黄色等,使得网页显得典雅,大方和温馨。更重要的是,这样可以大大加快浏览者打开网页的速度。

一般来说,网页的背景色应该柔和一些、素一些、淡一些,再配上深色的文字,使人看起来自然、舒畅。而为了追求醒目的视觉效果,可以为标题使用较深的颜色。下面是我做网页和浏览别人的网页时,对网页背景色和文字色彩搭配积累的经验,这些颜色可以做正文的底色,也可以做标题的底色,再搭配不同的字体,一定会有不错的效果,希望对大家在制作网页时有用。

 BgcolorΚ″#F1FAFA″———做正文的背景色好,淡雅

 BgcolorΚ″#E8FFE8″———做标题的背景色较好

 BgcolorΚ″#E8E8FF″———做正文的背景色较好,文字颜色配黑色

 BgcolorΚ″#8080C0″———上配黄色白色文字较好

 BgcolorΚ″#E8D098″———上配浅蓝色或蓝色文字较好

 BgcolorΚ″#EFEFDA″———上配浅蓝色或红色文字较好

 BgcolorΚ″#F2F1D7″———配黑色文字素雅,如果是红色则显得醒目

 BgcolorΚ″#336699″———配白色文字好看些

 BgcolorΚ″#6699CC″———配白色文字好看些,可以做标题

 BgcolorΚ″#66CCCC″———配白色文字好看些,可以做标题

 BgcolorΚ″#B45B3E″———配白色文字好看些,可以做标题

 BgcolorΚ″#479AC7″———配白色文字好看些,可以做标题

 BgcolorΚ″#00B271″———配白色文字好看些,可以做标题

 BgcolorΚ″#FBFBEA″———配黑色文字比较好看,一般作为正文

 BgcolorΚ″#D5F3F4″———配黑色文字比较好看,一般作为正文

 BgcolorΚ″#D7FFF0″———配黑色文字比较好看,一般作为正文

 BgcolorΚ″#F0DAD2″———配黑色文字比较好看,一般作为正文

 BgcolorΚ″#DDF3FF″———配黑色文字比较好看,一般作为正文

浅绿色底配黑色文字,或白色底配蓝色文字都很醒目,但前者突出背景,后者突出文字。红色底配白色文字,比较深的底色配黄色文字显得非常有效果。

此文只是起一个“抛砖引玉”的作用,大家可以发挥想象力,搭配出更有新意、更醒目的颜色,使网页更具有吸引力。