推荐阅读

PS制作与玻璃撞击的动感岩石文字效果
碎块字制作思路并不复杂,分为两个大的步骤。首先是文字部分的处理,用选区及移动工具把文字分成多个碎块;然后用图层样式及纹理素材增加质感和纹理即可。最终效果 一、新建一个960 * 560像素的文件,背景填充黑色。 二、选择文字工具输入所需的文字,文字颜色为白色。 三、在文字缩略图上右键选择栅格化文字。

20个“标准的”配色方案
20个“标准的”配色方案<html> <head> <title>Colors</title> <style type="text/css"> body{ margin:20px; font-family: Verdana, Geneva, Arial, Helvetica, sans-serif; font-size:12px; } .style1{ width: 800px; height: 100px; margin: 0px auto; margin-bottom:20px; border:1px solid #96C2F1; background-color: #EFF7FF } .style1 h5{ margin: 1px; background-color: #B2D3F5; height: 24px; } .style2{ width: 800px; height: 100px; margin: 0px auto; margin-bottom:20px; border:1px solid #9BDF70; background-color: #F0FBEB } .style2 h5{ margin: 1px; background-color: #C2ECA7; height: 24px; } .style3{ width: 800px; height: 100px; margin: 0px auto; margin-bottom:20px; border:1px solid #BBE1F1; background-color: #EEFAFF } .style4{ width: 800px; height: 100px; margin: 0px auto; margin-bottom:20px; border:1px solid #CCEFF5; background-color: #FAFCFD } .style5{ width: 800px; height: 100px; margin: 0px auto; margin-bottom:20px; border:1px solid #FFCC00; background-color: #FFFFF7 } .style6{ width: 800px; height: 100px; margin: 0px auto; margin-bottom:20px; border:1px solid #92B0DD; background-color: #FFFFFf } .style6 h5{ margin: 1px; background-color: #E2EAF8; height: 24px; } .style7{ width: 800px; height: 100px; margin: 0px auto; margin-bottom:20px; border:1px solid #A9C9E2; background-color: #E8F5FE } .style8{ width: 800px; height: 100px; margin: 0px auto; margin-bottom:20px; border:1px solid #E3E197; background-color: #FFFFDD } .style9{ width: 800px; height: 100px; margin: 0px auto; margin-bottom:20px; border:1px solid #ADCD3C; background-color: #F2FDDB } .style10{ width: 800px; height: 100px; margin: 0px auto; margin-bottom:20px; border:1px solid #F8B3D0; background-color: #FFF5FA } .style11{ width: 800px; height: 100px; margin: 0px auto; margin-bottom:20px; border:1px solid #D3D3D3; background-color: #F7F7F7 } .style12{ width: 800px; height: 100px; margin: 0px auto; margin-bottom:20px; border:1px solid #BFD1EB; background-color: #F3FAFF } .style13{ width: 800px; height: 100px; margin: 0px auto; margin-bottom:20px; border:1px solid #FFDD99; background-color: #FFF9ED } .style14{ width: 800px; height: 100px; margin: 0px auto; margin-bottom:20px; border:1px solid #CACAFF; background-color: #F7F7FF } .style15{ width: 800px; height: 100px; margin: 0px auto; margin-bottom:20px; border:1px solid #A5B6C8; background-color: #EEF3F7 } .style16{ width: 800px; height: 100px; margin: 0px auto; margin-bottom:20px; border:1px solid #CEE3E9; background-color: #F1F7F9 } .style17{ width: 800px; height: 100px; margin: 0px auto; margin-bottom:20px; border:1px solid #CAE3FF; background-color: #F4F9FF } .style18{ width: 800px; height: 100px; margin: 0px auto; margin-bottom:20px; border:1px solid #C9D9EE; background-color: #ECF8FF } .style19{ width: 800px; height: 100px; margin: 0px auto; margin-bottom:20px; border:1px solid #5C9CC0; background-color: #F2FAFF } h5{color:#CCCCCC;margin-left:680px} a{color:#CCCCCC;text-decoration:none} a:hover{color:#666666;text-decoration:underline} </style> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /></head> <body> <div class="style1"><h5>Title</h5></div> <div class="style2"><h5>Title</h5></div> <div class="style6"><h5>Title</h5></div> <div class="style3"></div> <div class="style4"></div> <div class="style5"></div> <div class="style7"></div> <div class="style8"></div> <div class="style9"></div> <div class="style10"></div> <div class="style11"></div> <div class="style12"></div> <div class="style13"></div> <div class="style14"></div> <div class="style15"></div> <div class="style16"></div> <div class="style17"></div> <div class="style18"></div> <div class="style19"></div> </body> </html> [Ctrl+A 全部选择 提示:你可先修改部分代码,再按运行]

Flash CS5实例教程:漂亮的气泡动画
function ball(r:int):MovieClip {//自定义函数 ball,参数为 r,整数型,返回值为 MovieClipvar col:uint=0xffffff*Math.random();//声明一个无符号整数型变量 col,获取任意颜色var sh:MovieClip=new MovieClip();//声明一个影片剪辑类实例 shsh.graphics.beginGradientFill(GradientType.RADIAL,[0xffffff,col,col],[0.5,1,1],[0,200,255]);//在 sh 中设置渐变填充样式(放射状渐变,颜色,透明度,色块位置)sh.graphics.drawCircle(0,0,r);//在 sh 中画圆(圆心坐标(0,0),半径为参数r)sh.graphics.endFill();//结束填充return sh;//返回 sh}var ballArr:Array=[];//声明一个空数组 ballArrfor (var i:int=0; i<10; i++) {//创建一个 for 循环,循环 10次var balls:MovieClip=ball(Math.random()*20+20);//声明一个影片剪辑类实例balls,调用函数 ball(参数r 半径的值为 20-40 之间的随机值)addChild(balls);//把 balls添加到显示列表balls.x=Math.random()*(stage.stageWidth-balls.width)+balls.width/2;//balls 的 X 坐标balls.y=Math.random()*(stage.stageHeight-balls.height)+balls.height/2;//balls 的 Y坐标,使它出现在舞台的任意位置balls.vx=Math.random()*2-1;//为 balls 设置自定义属性 vx,数值为-1-1 之间的随机数,表示 X 方向的速度balls.vy=Math.random()*2-1;//为 balls 设置自定义属性 vy,数值为-1-1 之间的随机数,表示 Y 方向的速度ballArr.push(balls);//把 balls 添加到数组 ballArr 中}addEventListener(Event.ENTER_FRAME,frame);//添加帧频事件侦听,调用函数 framefunction frame(e) {//定义帧频事件函数 framefor (var i:int=0; i<ballArr.length; i++) {//创建一个 for循环,循环次数为数组 ballArr 的元素数var balls:MovieClip=ballArr;//声明一个影片剪辑类实例 balls,获取数组 ballArr 的元素balls.x+=balls.vx;//balls的 X 坐标每帧增加balls.vxballs.y+=balls.vy;//balls的 Y 坐标每帧增加balls.vyif (balls.x<balls.width/2) {//如果balls 出了舞台左边缘balls.x=balls.width/2;//balls 的 X坐标获取balls 宽度的一半balls.vx*=-1;//balls.vx 获取它的相反数}if (balls.x>stage.stageWidth-balls.width/2) {//如果 alls 出了舞台右边缘balls.x=stage.stageWidth-balls.width/2;//balls 的 X 坐标获取场景宽度与 balls 宽度一半的差balls.vx*=-1;//balls.vx 获取它的相反数}if (balls.y<balls.height/2) {//如果 balls出了舞台上边缘balls.y=balls.height/2;//balls 的 Y坐标获取 balls 高度的一半balls.vy*=-1;//balls.vy 获取它的相反数}if (balls.y>stage.stageHeight-balls.height/2) {//如果 balls 出了舞台下边缘balls.y=stage.stageHeight-balls.height/2;//balls 的 Y 坐标获取舞台高度与 balls 高度一半的差balls.vy*=-1;//balls.vy 获取它的相反数}}for (var j:int=0; j<ballArr.length-1; j++) {//创建一个 for 循环,循环次数比数组 ballArr 元素数少 1var ball0:MovieClip=ballArr[j];//声明一个影片剪辑类实例 ball0,获取数组 ballArr 的元素for (var m:int=j+1; m<ballArr.length; m++) {//创建一个 for 循环,var ball1:MovieClip=ballArr[m];//声明一个影片剪辑类实例 ball1,获取数组 ballArr 的元素var dx:Number=ball1.x-ball0.x;//声明一个数值型变量 dx,获取var dy:Number=ball1.y-ball0.y;//声明一个数值型变量 dy,获取var jl:Number=Math.sqrt(dx*dx+dy*dy);//声明一个数值型变量 jl,获取小球的距离var qj:Number=ball0.width/2+ball1.width/2;//声明一个数值型变量获取小球半径之和if (jl<=qj) {//如果 jl 小于等于 qjvar angle:Number=Math.atan2(dy,dx);//声明一个数值型变量angle,获取ball1 相对于 ball0 的角度var tx:Number=ball0.x+Math.cos(angle)*qj*1.01;//声明一个数值型变量 tx,获取目标点的 X坐标var ty:Number=ball0.y+Math.sin(angle)*qj*1.01;//声明一个数值型变量 ty,获取目标点的 Y坐标ball0.vx=- (tx-ball1.x);//ball0 在X 方向的速度ball0.vy=- (ty-ball1.y);//ball0 在Y 方向的速度ball1.vx=(tx-ball1.x);//ball1 在 X方向的速度ball1.vy=(ty-ball1.y);//ball1 在 Y方向的速度}}}}

生态摄影奥秘
说到CCD的尺寸,其实是说感光器件的面积大小,这里就包括了CCD和CMOS。感光器件的面积越大,也即CCD/CMOS面积越大,捕获的光子越多,感光性能越好,信噪比越低。CCD/CMOS是数码相机用来感光成像的部件,相当于光学传统相机中的胶卷。 CCD上感光组件的表面具有储存电荷的能力,并以矩阵的方式排列。当其表面感受到光线时,会将电荷反应在组件上,整个CCD上的所有感光组件所产生的信号,就构成了一个完整的画面。 如果分解CCD,你会发现CCD的结构为三层,第一层是“微型镜头”,第二层是“分色滤色片”以及第三层“感光层”。 第一层“微型镜头” 我们知道,数码相机成像的关键是在于其感光层,为了扩展CCD的采光率,必须扩展单一像素的受光面积。但是提高采光率的办法也容易使画质下降。这一层“微型镜头”就等于在感光层前面加上一副眼镜。因此感光面积不再因为传感器的开口面积而决定,而改由微型镜片的表面积来决定。 第二层是“分色滤色片” CCD的第二层是“分色滤色片”,目前有两种分色方式,一是RGB原色分色法,另一个则是CMYK补色分色法这两种方法各有优缺点。首先,我们先了解一下两种分色法的概念,RGB即三原色分色法,几乎所有人类眼镜可以识别的颜色,都可以通过红、绿和蓝来组成,而RGB三个字母分别就是Red, Green和Blue,这说明RGB分色法是通过这三个通道的颜色调节而成。再说CMYK,这是由四个通道的颜色配合而成,他们分别是青(C)、洋红 (M)、黄(Y)、黑(K)。在印刷业中,CMYK更为适用,但其调节出来的颜色不及RGB的多。 原色CCD的优势在于画质锐利,色彩真实,但缺点则是噪声问题。因此,大家可以注意,一般采用原色CCD的数码相机,在ISO感光度上多半不会超过400。相对的,补色CCD多了一个Y黄色滤色器,在色彩的分辨上比较仔细,但却牺牲了部分影像的分辨率,而在ISO值上,补色CCD可以容忍较高的感光度,一般都可设定在800以上 第三层:感光层 CCD的第三层是“感光片”,这层主要是负责将穿过滤色层的光源转换成电子信号,并将信号传送到影像处理芯片,将影像还原。
最新发布

用CSS设计高用户体验的web文字大小
在设计网络应用时,您必须决定如何编辑字体。使用CSS时存在大量选项,每个开发者都有自己的喜好。本文主要讨论字体大小和网络应用内的操作。 字体大小 CSS2规范根据长度――水平和垂直尺寸――来定义字体。这个长度为一个数值,前面可能带一个可选的加(+)或减(-)标记符。另外,该数值后可能有一个可选的单位标识符。 另外,CSS2规范定义了两个单位类型:绝对单位和相对单位。绝对值指定单位,而相对单位指定一个与另一个值成比例的值。下面的列表列出了相对单位标识符: 下面是有效的绝对单位标识符: 测量绝对大小的另一种方法是使用衡量一个值的比例因数,应用以下关键字:最小、较小、小、中、大、较大和最小。中为基值,变小就减去一个因数,变大就增加一个因数,等等。CSS2规范定义的比例因数为1.2,这个值也可能依浏览器而变化。 还可以应用百分比值来格式化文本。百分比值是一个可选的标记符,即数字后带有一个百分比符号(%)。百分比值总是与另一个值成比例。就字体而言,它与网页的基本字体大小成一定比例。 如您所见,有许多方法可完成呈现文本这个看似简单的任务。下面的HTML格式文本(在段落元素中)应用了各种单位标识符。其中所有的值都相等,并假定以72dpi进行显示。 您可以在这个列表中增加像素值,但它的值要依环境而定。例如,我的分辨率为1280X1024的手提电脑将显示与在上表中使用50像素值一致的文本。

对css滑动门技术的一些总结和归纳
其中有个人说"如果你是高手,那你就详细介绍一下css滑动门技术",这句话把我刺激了,于是我连夜从网上搜罗了一些关于css滑动门技术的东西,并且自己做了一个滑动门,事实上在学习css滑动门技术之前,我发现我已经做过很多类似的菜单效果,最有代表性的就是搜狗网址导航的搜索框,后来这个效果被广泛运用到搜狗的搜索引擎当中,我在这里总结一下一些css滑动门的知识,希望能给大家对css的学习起到一个帮助作用,另外结合javascript,css可以制作出更多炫目的效果. 背景: 从我的理解来讲,css滑动门是被刺激出来的,因为很多人认为css并不能做出漂亮的网页,但是事实上恰恰相反,css不仅能做出相当漂亮的网页,还可以很好得把内容和表现分开,给设计师和开发人员更大的空间去发挥; 定义: 滑动门技术就是:当点击页面上的导航按钮后这个导航按钮的CSS特性发生变化,从而区别于该组的其他导航按钮,提示给操作者,当前浏览的内容就是这个CSS特性发生变化的按钮所指向的内容。这种效果的一大好处在于,在多导航的页面上能够清晰地反映当前浏览内容隶属于哪个栏目或者哪个类,同时给人以美观、清晰、明了的视觉感受。滑动门技术的主角是被操作的对象,也就是这里被点击的对象,其CSS特性主要是指该导航按钮包括其中的其它元素的属性发生变化,当然,这个按钮的形式可以是BUTTON、A、TD甚至可以是P或者DIV这样的闭合元素,它们的属性主要是指这个元素的边框、背景、字体的颜色、大小、粗细以及外间距和内间距等等,总之,其一切可以把自身的“地位”区别于其它属主的属性都可以被应用起来使用在滑动门技术上。 应用范围: 网站导航菜单 技术要点: 1.用无序列表ul和li组成菜单结构 2.给li设置背景(如果有圆角,则设置为右置或左置,背景图片远远超过该子菜单的长度)

网站重构 CSS样式表的优化与技巧
使用缩写可以帮助减少你CSS文件的大小,更加容易阅读。css缩写的主要规则请参看《常用css缩写语法总结》,这里就不展开描述。 二.明确定义单位,除非值为0 忘记定义尺寸的单位是CSS新手普遍的错误。在HTML中你可以只写width=100,但是在CSS中,你必须给一个准确的单位,比如:width:100px width:100em。只有两个例外情况可以不定义单位:行高和0值。除此以外,其他值都必须紧跟单位,注意,不要在数值和单位之间加空格。 三.区分大小写 当在XHTML中使用CSS,CSS里定义的元素名称是区分大小写的。为了避免这种错误,我建议所有的定义名称都采用小写。 class和id的值在HTML和XHTML中也是区分大小写的,如果你一定要大小写混合写,请仔细确认你在CSS的定义和XHTML里的标签是一致的。 四.取消class和id前的元素限定 当你写给一个元素定义class或者id,你可以省略前面的元素限定,因为ID在一个页面里是唯一的,clas s可以在页面中多次使用。你限定某个元素毫无意义。例如:

使用图片和CSS结合制作动画按钮
很多时候大家可以看到FLASH里面的按钮可以是动画的,而大部分HTML作出来的按钮都是单帧切换的.其实做成动画也是可行的.先看看下面的预览图片鼠标移动上去,鼠标点击,鼠标移开下面是实际效果,亲自体验一下 .temp1 a{display:block;height:31px;width:88px;background-image:url(http://www.syku.net/web/UploadFiles_5065/200612/20061209091641612.gif)} .temp1 a:hover{background-image:url(http://www.syku.net/web/UploadFiles_5065/200612/20061209091641694.gif)} .temp1 a:active{background-image:url(http://www.syku.net/web/UploadFiles_5065/200612/20061209091642451.gif)} .temp2 a{display:block;height:31px;width:88px;background-image:url(/design/UploadFiles_design/200806/2008062023300288.gif)} .temp2 a:hover{background-image:url(/design/UploadFiles_design/200806/2008062023300299.gif)} .temp2 a:active{background-image:url(/design/UploadFiles_design/200806/2008062023300241.gif)} a{display:block;height:31px;width:88px;background-image:url(图1)}a:hover{background-image:url(图2)}a:active{background-image:url(图3)}其实最重要的是在动画图片本身首先看看这个图片,似曾相识把.原理是一样的

导航上用CSS标志当前页效果的实现
当前页面--比如说现在的页面是首页,那么在导航栏上首页的色彩等和其他栏目有所不 同,用以给浏览者一个明显的指示。下面来说下具体的做法,菜单的基本实现和一般的CSS菜单没多大区别,着重说下如何 实现当前页。设菜单有5个栏目:home、about、products、services、contact,分别给每个栏目一 个ID,m1-m5,CSS可写成如下: #home #nav li#m1 a, #about #nav li#m2 a, #products #nav li#m3 a, #services #nav li#m4 a, #contact #nav li#m5 a{ color: #FFF; background: #DC4E1B url(navbg.gif) no-repeat; } xhtml:<ul id="nav"> <li id="m1"><a href="index.html">Home</a></li> <li id="m2"><a href="about.html">About</a></li> <li id="m3"><a href="products.html">Products</a></li> <li id="m4"><a href="services.html">Services</a></li> <li id="m5"><a href="contact.html">Contact</a></li> </ul> 然后分别给每个页面的bady标签一个独立的ID,例如给首页的ID是home,其余的类推 。 这样做法的好处是每个页面的菜单都是一样的,方便修改,动态页包含也容易。

通过Dreamweaver设计网页时组织CSS的建议
代码式(Inline):写入到代码中的一次性的样式。 内嵌式(Embedded):可控制一个页面中所有元素的样式表 外联式(External):可控制许多页面中的元素的样式表 事实上,许多站点都根据需要把这三种方式结合起来使用。 在使用CSS时一个需要重点考虑的事实是不同的浏览器以及同一浏览器的不同版本以不同的方式来解析CSS。除了网络浏览器的差异之外,你还要意识到还有很多其他的浏览器,比如听力浏览器,基于电视的浏览器以及Palm pilot和TTY(teletypewriter,远程打字机)一类的手持设备。 最佳习惯是指什么? 大多数技术都有自己约定俗成的标准。CSS也不例外。虽然并非网络上存在的所有CSS都很规范,但按照现有标准来使用CSS却还是不无裨益的。一般来说,开发人员应尽可能将内容与报告分离开来。这样做的好处在于: 1:增加站点的寿命 不规范的样式表可能在当时觉得很方便,但新版本的浏览器出来以后,很可能就会出现兼容性问题。到时逐页修改站点就是一项非常费时的工作同时也使使用CSS失去了意义。 2:让你的站点对所有的用户以及浏览器都适用。 有些地方的*已经立法要求网站必须让残障人士也同样可以浏览。为残障认识设计的浏览设备,比如听力浏览器,对CSS规范性要求极其严格。 3:让站点更新和维护更加轻松。

引入样式表(css)的四种方式
一、使用STYLE属性: 将STYLE属性直接加在个别的元件标签里。 <元件(标签) STYLE="性质(属性)1: 设定值1; 性质(属性)2: 设定值2; ...}例如: <TD STYLE="COLOR:BLUE; font-size:9pt; font-family:"标楷体"; line-height:150%>这种用法的优点 是可灵巧应用样式於各标签中,但是缺点则是没有整篇文件的『统一性』。二、使用STYLE标签: 将样式规则写在<STYLE>...</STYLE>标签之中。 <STYLE TYPE="text/css"><!--样式规则表--> </STYLE>例如: <STYLE TYPE="text/css"><!--BODY { color: BLUE; background: #FFFFCC; font-size: 9pt}TD, P { COLOR: GREEN; font-size: 9pt}--></STYLE>通常是将整个的 <STYLE>...</STYLE>结构写在网页的<HEAD> </HEAD>部份之中。这种用法的优点就是在於整篇文件的统一性,只要是有声明的的元件即会套用该样式规则。缺点就是在个别元件的灵活度不足。三、使用 LINK标签: 将样式规则写在.css的样式档案中,再以<LINK>标签引入。 假设我们把样式规则存成一个example.css的档案,我们只要在网页中加入<LINK REL=STYLESHEET TYPE="text/css" HREF="example.css">即可套用该样式档案中所制定好的样式了。 通常是将LINK标签写在网页的<head></head>部份之中。这种用法的优点就是在於可以把要套用相同样式规则的数篇文件都指定到同一个样式档案即可。缺点也是在个别文件或元件的灵活度不足。 四、使用@import引入: 跟LINK用法很像,但必 放在<STYLE>...</STYLE> 中。 <STYLE TYPE="text/css"><!-- @import url(引入的样式表的位址、路径与档名);--></STYLE> 例如: <STYLE TYPE="text/css"><!-- @import url(http://yourweb/ example.css);--></STYLE>要注意的是,行末的分号是绝对不可少的!

修饰之美:CSS在表格边框上的美学应用
具体内容包括:上边框宽度、右边框宽度、下边框宽度、左边框宽度、边框宽度、边框颜色、边框样式、上边框、下边框、左边框、右边框、边框、宽度、高度、有关标签等。 1.上边框宽度 语法: border-top-width: <值> 允许值: thin | medium | thick | <长度> 初始值: medium 适用于: 所有对象 向下兼容: 否 上边框宽度属性用于指定一个元素上边框的宽度。值可以是三个关键字其中的一个,都不受字体大小或长度的影响,可以用于实现成比例的宽度。不允许使用负值。也可以用在上边框、边框的宽度或边框的属性略写。 2.右边框宽度 语法: border-right-width: <值>

20 个优秀 CSS 网站
从这些 CSS Gallery 网站中精选了 20 个比较漂亮的 XHTML+CSS 布局网站。推荐给喜欢网页设计的人,无论是做博客模板还是做网站设计,在设计理念、色调、导航条、按钮、排版布局方面,都有一些值得借鉴的地方。1、www.apple.comminmax_bound="true">刚刚改版的苹果官网,配合即将上市的 Leopard 风格。2、www.youtilize.comminmax_bound="true">这种布局和色彩搭配很适合我的口味。3、www.pingdom.comminmax_bound="true">一个测试网站连接和内容 (包括 HTML, CSS, JS 和图片) 加载时间的服务。4、www.workhabit.orgminmax_bound="true">5、www.web2themes.comminmax_bound="true">这是一个 WordPress 主题,特别之处就是加入一些人的剪影作为网页元素。6、www.zik.frminmax_bound="true">7、www.ashwebmedia.comminmax_bound="true">8、maczone.skminmax_bound="true">9、www.joshuadunaway.netminmax_bound="true">

CSS:标准的 语义的 非侵入的页签切换
自从Yahoo!的首页引进页签(tab, 见下图)之后,这种可用性极佳的方式越来越受欢迎,用户也逐步习惯和喜欢上它,因为它可以在原有的空间上增加更多的可用信息,而且只需切换,不需刷新整个页面,浏览更舒畅。很多网站接受并使用,如新浪等。 页签的标记结构 那么,让我们来看看这些页签后的代码。 新浪完全不考虑什么标准,就是表格嵌套,我们略过不提。Yahoo!的XHTML形式是这样的:<div> <ul> <li>页签1</li> <li>页签2</li> ... </ul> </div> <div> <div>内容1</div><!--它们可能由Ajax载入--> <div>内容1</div> ... </div> ... 符合标准,但却没有语义。页签和相应内容没有任何关联。也就是说,在没有CSS展现的情况下,用户并不晓得页签究竟对应哪一块内容。而且就JavaScript实现来说,必须对元素定义更多的id或者class作为调用钩子(hook),容易造成代码冗余。有人对此作出改良,使用连接元素的hash(即#号后的字段)跟内容进行关联,即下面这种形式:<div> <ul> <li><a href="#content1">页签1</a></li> <li><a href="#content2">页签2</a></li> ... </ul> </div> <div> <div id="content1">内容1</div><!--它们可能由Ajax载入--> <div id="content2">内容1</div> ... </div> ... 这种方式对于机器来说,确实找到了关联点,而且用户点击的时候,也能在hash的作用下(传统说法中的“锚点”)调到相应的内容区块。有进步,但还是不够语义。 语义,语义,语义!