ASP 本身并不是一种脚本语言,它只是提供了一种使镶嵌在 HTML 页面中的脚本程序得以运行的环境,而在ASP中最常用的脚本语言就是VBScript了。虽然ASP的脚本语言很简单,但是要想让一个ASP程序能够最优化的运行也不是一件简单的事情。
现在国内的网络带宽很有限,网络十分拥挤,如何使得自己的ASP应用程序能够快速的运行就成为了每一个ASP程序员的梦想了。那就跟随我来一同加速你的ASP程序吧!
一. 有关操作数据库的优化方法
我们使用ASP最主要的用途就是对数据库进行操作了,如何更快速的完成这些动作呢?
1. 不要任意使用“Select * ……”
请尽量拾取你所需要的那些字段,比如,一个Table中有10个字段,但是你只会用到其中的一个字段(name),就要使用“select name from yourtable”,而不是用“select * from yourtable”。你或许会说,我是这么做的阿,但是,如果一个table中有50个字段,你需要用到其中的23个字段的时候,你会怎么做呢?为了节省打字以及查找对应字段名称的麻烦,你就不一定会老老实实的用“select name,sex,age… from yourtable”了吧!
实际证明,尽量拾取你所需要的那些字段来使用select语句将会是你的ASP程序至少加快5%左右。
2. 尽可能使用系统存储过程(针对MS SQL Server)
有的时候完成一个读取操作,使用SQL语句和存储过程同样可以完成,但是使用存储过程将会大大加快完成读取操作的速度,也就提高了你的ASP程序运行的速度。
3. 注意你的游标使用方法
如果你仅仅是对一个table进行读取操作,那么请你使用forward-only,read-only游标,因为这种游标读取数据库是最为快速的,尤其是你的读取数据量很大的情况下。
4. 不要打开无用的独立记录集
也许你在笑了,我会打开没有用的记录集吗?是的,你当然会,比如在生成一个树型记录集的时候,你不得不打开父记录集以及对应的子记录集,甚至还有孙记录集,其实你可以使用ADO提供的Data Shaping技术来替代打开多个独立的记录集,那样会加快程序的运行速度。(关于Data Shaping的用法可以参考ADO帮助)
5. 一定要记着关闭打开的记录集对象以及连接(Connection)对象
有些朋友总是奇怪为何自己的ASP程序刚开始的时候运行速度很快,可是多运行几遍就越来越慢了呢?甚至出现服务器死机的情况。发生这种情况,就很可能是你打开了太多的记录集对象以及连接(Connection)对象而最后却没有关闭他们引起的。使用如下方法进行关闭:
程序代码
YourRecordSet.close
Set YourRecordSet=Nothing
Set YourConnection=Nothing
6. 取得数据库数据的方法比较
你是如何得到记录集的数据的呢?是不是用YourRecordSet(字段编号),还是YourRecordSet(“字段名称”)?其实还有其他的使用方法,现在我们就比较一下吧(100条记录):
程序代码
Rs(“字段名称”)
Rs(“字段名”).Value
Rs(“字段编号”)
Set方法
数据库回应时间
2.967秒
2.936秒
1.650秒
0.586秒
2.824秒
2.914秒
1.611秒
0.602秒
2.893秒
2.943秒
1.613秒
0.594秒
平均回应时间
2.895秒
2.931秒
1.625秒
0.594秒
这下知道了吧,前三种方法大家都可以看的明白,我就说说第四种方法(Set方法)如何使用:
程序代码
Dim strSQL
StrSQL=”select name,sex,age from yourtable”
Dim rs
Set rs=server.createobject(“ADODB.RECORDSET”)
Rs.open strSQL,conn,1,1
Const fieldsOrder=2
Dim objOrder
Set objOrder=rs(fieldsOrder)
Response.write objOrder ’Set方法
二. 有关ASP内置对象使用方面的优化方法
1. 尽量减少Session对象和Application对象的使用
虽然ASP中提供的这两个对象对我们的编程提供了很大的帮助,但是,对这两个对象要合理的使用,不要滥用。因为大量的使用这两个对象将会极大的增大服务器的负担,严重消耗系统资源。也将使你的ASP程序运行慢如老牛。
2. 要及时的关闭不再使用的对象(尤其是Session和Application)
不及时的关闭你所使用的对象会导致系统运行速度变得缓慢。也许你会问,Session和Application不是可以自动消失的吗?完全正确,系统默认30分钟内用户如果没有任何操作就自动触发Session_OnEnd和Application_OnEnd事件,但是大量的用户频繁的读取服务器,服务器将在很长的一段时间保持那些已经没有用的Session,Application对象,如果不及时关闭使用完的Session和Application后果将不堪想象了。
关闭的方法是:
Set 对象=Nothing
三. 合理使用Include文件
我们这里说的是指用<!–#include file=”xxx”–>形式包含进来的文件,并且文件内容全是ASP程序,也就是说你将一些公共的函数放到一个文件中,并在其他有可能调用其中函数的页面包含进来。
建议你不要将所有的函数放到一个包含文件中,因为你在其他页面包含这个文件的时候,服务器端是要进行预编译的,很可能在一个包含文件里面有上百个函数,而你只是想要使用其中的一个函数,这样就得不偿失了。所以,尽可能的分割你的包含文件成为多个小的包含文件。这样也可以提高程序的运行速度哦。
四. 有关VBScript语言方面的优化方法
1.尽量使用系统函数代替自己编写的函数
比如要想分割一个有规律的字符串(”sss,ddd,fff,ggg”),就不必自己使用什么Mid(),Instr等等函数来分析了,其实VBScript就提供了一个函数 Split(),这样既省时间,又提高了速度,何乐而不为呢?
2.减少动态数组的使用
3.尽可能的养成提前声明变量的习惯
不要小看了这一条,提前声明变量会加快程序的解释执行时间。相反,从不声明变量,不但程序难以阅读,整个程序在服务器的执行效率也会大打折扣的。
五. 其他方面的优化方法
1. 在ASP文件中尽量使用<%%>嵌入到HTML标签中,而不要使用Response.write的方式,比如:
程序代码
<html>
<body>
<%If ok =1 then %>
Hello! World!
<%End If%>
</body>
</html>
就远远比:
程序代码
<%
Response.write ”<html>”
Response.write ” <body>”
If ok =1 then
Response.write ”Hello! World!”
End If
Response.write ” </body>”
Response.write ”</html>”
%>
的运行速度要快,尤其是你的ASP文件比较大的情况下。因为,第二种方式增加了服务器端的解释时间,因而也就降低了ASP程序的性能。
2. 尽量用一个ASP文件完成一个动作
很多人喜欢在一个ASP程序中同时完成诸如添加,删除,查找等等多个动作,不要认为这样是有效的利用了文件,相反,这样做的结果是使得应用程序的运行速度减慢很多。
应当将添加,删除,查找等分割成单个的独立的ASP文件来完成。这样使得文件不会过于庞大,降低服务器端解释执行的负担,并且阅读程序也很快捷。
好了,经过我们的全面优化,你的ASP应用程序是不是运行的更加稳定,更加快速了呢?
XP 有个最大的问题就是 IIS5.5 只支持一个站点,如果每次修改不同网站都要到 Internet 信息管理里面更改一下一下站点主目录无疑是太麻烦了。
IIsAdmin.NET 是一个专门可以在 XP 的 IIS 下面建立多个站点的小工具
提醒:这个小工具需要 .NET 2.0 运行环境。
汉化修改版:点击下载
作者:Loveyuki
截图:
SQL Server 2005 相对于 2000 的进步非常大,特别是有了免费的 SQL Server 2005 Express 版本以后,就可以免费使用了。但是 2005 有个比较麻烦的就是找不到跟 2000 一样的服务管理器了。停止运行服务显得有些麻烦,每次都要进配置管理器进行操作,很不方便。
不过不怕,有了这个小工具以后你就可以拥有跟 2000 一样的服务管理器了。启动和停止 SQL Server 服务方便很多。提醒:本程序需要 .NET 2.0 运行环境。
点击下载
前两天我们介绍了一种新的存储无限级分类方法,但是读出分类的时候怎么实现树形显示呢?方法很简单,我们自己定义一个树形的数据结构,然后根据数据库存储的节点的深度来插入到树里面,当然显示的时候需要用递归来显示一下,不过这里的递归只是在内存里面递归,效率是相当高的。
2008-11-17 更新为不使用树结构,使用排序和深度来做文章。
在数据库读出数据的时候直接按照 LID 来进行 ASC
排序就可以了,默认的排列顺序就是按照树走的,大家可以插入一些数据,并读取一下就可以很明了的看到顺序了,插入树循环的时候只需要对深度进行运算就可以了。
下面我只写出了一些关键地方的代码,具体的代码自己试着多写写在纸上多画画应该就明白了。
另外就是想说下,这种分类算法只适用于一般的树形分类,并不适用于插入数据比较频繁的树形结构,比如说无限次回复的评论,无限次回复的评论有另外一种更适合的算法。
新的方法:
Response.Write(”
“);
Response.Write(”
由于数据库存储的数据都是以平面方式存储,所以目前大部分论坛和其他程序都是用递归来展现层次数据的,如果分类的层次十分深的话那么使用的递归次数相当可观,对性能的影响也非常大。最近要做一个分类信息的平台就遇到这个问题了,那么如何实现快速的展现分层数据呢?MYSQL 的开发者帮我们想到了一个算法,这个算法目前唯一的问题就是尚未实现分类排序,我们可以通过右值的反向排序实现先入先出的排序。在这里我们需要了解的是如何用 SQL Server 来实现,我们就以省市县数据库为例来实现:
如图所示我们将一个树节点的左右各编上号码,就可以看出一些规律,山西的左右值为(8,17),那么所有左值大于8,右值小于17的节点都是属于山西的子节点。稷山先的左右值为(14,15),那么他的所有父节点就是左值小于14,右值大于15的节点,怎么样,用这个方法实现的无限级分类性能绝对是顶呱呱的。一次查询就可以查出属于某个节点的数据以及他子节点的数据。这个算是我见过性能最高的无限级分类算法。其他算法跟这个对比基本没有任何优势。
我们先建立一个数据表,结构如下图(LID 为左值,RID 为右值,Tree 为节点深度,Name 和 ID 就不多说了,节点的索引和名称)
我们可以使用下面的存储过程来获得一个节点和其子节点:
CREATE PROCEDURE CLSP_ZoneSelect
(
@Root INT,
@Tree INT
)
AS
SELECT Z.ID,Z.Tree,Z.Name
FROM CL_ZoneData AS Z,CL_ZoneData AS P
WHERE P.ID = @Root
AND Z.LID >= P.LID AND Z.RID <= P.RID
AND (@Tree = 0 OR Z.Tree <= P.Tree + @Tree)
ORDER BY Z.LID ASC
GO
我们可以用下面这个存储过程来在一个节点下插入新的子节点:
CREATE PROCEDURE CLSP_ZoneInsert
(
@Root INT,
@Name NVARCHAR(50)
)
AS
DECLARE @RID AS INT,@NID AS INT,@Tree AS INT
SET @RID = 1
SET @NID = 0
SET @Tree = 1
IF @Root = 0
BEGIN
SELECT TOP 1 @RID = RID + 1
FROM CL_CateData ORDER BY RID DESC
END
ELSE
BEGIN
SELECT @RID = RID, @Tree = Tree + 1
FROM CL_ZoneData WHERE ID = @Root
END
IF @Root = 0 OR @RID > 1
BEGIN
UPDATE CL_ZoneData SET RID = RID + 2 WHERE RID >= @RID
UPDATE CL_ZoneData SET LID = LID + 2 WHERE LID > @RID
INSERT INTO CL_ZoneData(LID,RID,Tree,Name)
VALUES (@RID,@RID + 1,@Tree,@Name)
SET @NID = SCOPE_IDENTITY()
END
SELECT @NID
GO
删除一个节点可以用下面的存储过程:
CREATE PROCEDURE CLSP_ZoneDelete
(
@ID INT
)
AS
DECLARE @LID AS INT, @RID AS INT, @WID AS INT, @DID AS INT
SET @DID = 0
SELECT @DID = ID, @LID = LID, @RID = RID, @WID = RID - LID + 1 FROM CL_ZoneData WHERE ID = @ID
IF @DID != 0
BEGIN
DELETE FROM CL_ZoneData WHERE LID BETWEEN @LID AND @RID
UPDATE CL_ZoneData SET RID = RID - @WID WHERE RID > @RID
UPDATE CL_ZoneData SET LID = LID - @WID WHERE LID > @RID
END
SELECT @DID
GO
SQLite 是一个轻量级的数据库引擎,相比一般我们用 JET 引擎访问 Aceess 优点很多,ASP.NET 可以使用 System.Data.SQLite 这个 .NET Wrapper,我在本机测试了一下 Bitrac 程序使用不同引擎的速度,目前数据量很小的情况下可以提高一倍的速度,数据库越大提高肯定越多的。就是不知道 System.Data.SQLite 能否在这个服务器上使用,毕竟我所使用的服务器的 .NET 权限是有所限制的。
今天把 Access 到 SQLite 的转换程序已经写完了。明天测试一下服务器是否支持,不管支持不支持,Bitrac 都会多一个 Database Provider。写 Database Provider 真麻烦。每种数据库的 SQL 语句都不太一样,数据类型也要考虑好,真头疼。
现有10W条数据,Access数据库保存
通过正常提取:
<%
Set conn= Server.CreateObject(“ADODB.Connection”)
connstr = “Provider=Microsoft.Jet.OLEDB.4.0;Data Source=”&Server.MapPath(“db2.mdb”)
conn.Open connstr
Set rs = Server.CreateObject (“ADODB.Recordset”)
sql = “Select * from people order by id desc”
rs.Open sql,conn,1,1
Do While Not rs.EOF
Response.write rs(“id”)&” | ”
rs.MoveNext
Loop
%>
地址:http://www.cnbruce.com/test/getrows/show1.asp耗时3,250.000毫秒,总测试平均值在3秒左右
使用存储过程提取:
<%
Set conn = Server.CreateObject(“ADODB.Connection”)
Set cmd = Server.CreateObject(“ADODB.Command”)
conn.Open “Provider=Microsoft.Jet.OLEDB.4.0; Data Source=” & Server.MapPath(“db2.mdb”)http://www.cnbruce.com/test/getrows/show2.asp以上两种均不能彻底解决执行时间漫长的问题,主要原因即是循环每次都须向数据库抽取记录(Command速度相对较快)
cmd.ActiveConnection = conn
cmd.CommandText = “Select * from people order by id desc”
Set rs = cmd.Execute
Do While Not rs.EOF
Response.write [...]
保护邮件地址的方法为数众多,随便一搜就能找出大把。若是刚好有使用 jQuery 框架,这里有个用 jQuery 保护邮件地址的方案。此方案的优点在于:邮件地址分段存储在 JS 之中,链接被点击以后,邮件地址才会从 JS 中调出并写入 HTML 页面,目前再厉害的机器人拿它都没办法,除非开着浏览器点击。缺点嘛,访客的浏览器不支持 JS 的话会被当作机器人对待XD。
另外需要说明的是,代码本来很简单,但是考虑到大众的审美需求,多数人都会喜欢稍稍华丽的过渡效果,
所以先提供一个所谓的”华丽版”(演示地址):
html:
<p>我的邮箱:<a href=”javascript:void(0)”>点击查看</a></p>
js:
$(document).ready(function(){
$(“.email”).click(function(){
var A=”admin”
var B=”domain.com”
var C=A+”@”+B;
$(this).parent().append(“<img src=’loading.gif’ />“);
$(this).hide();
setTimeout(function(){
var D=$(“.email”);
D.next().hide();
D.text(C);
D.attr(“href”,”mailto:”+C).unbind(“click”);
D.fadeIn(1000)
},3000)
})
})
使用时,红色字体是你需要修改的部分,然后将 JS 保存为一个文件在网页上引用。链接被点击后,浏览者需要等待三秒才会看见邮件地址,既然假装异步我们就假装到底。其中用到了一个 loading 图片,你可以换成你自己的。
最后再来个朴素版:
$(document).ready(function(){
$(“.email2″).click(function(){
var A=”admin”
var B=”domain.com”
var C=A+”@”+B;
$(this).text(C);
})
})
在网页的</body>标签前插入下面两条的任意一条:
<script type=’text/javascript’
src=’http://ajax.googleapis.com/ajax/libs/jquery/1.4.2/jquery.min.js’></script>
<script type=’text/javascript’
src=’http://ajax.microsoft.com/ajax/jquery/jquery-1.4.2.min.js’></script>
在网页的<body>…</body>之间插入<div
id=”status”>LOADING…</div>
CSS 文件可以这样写
#status{
background:none repeat scroll 0 0
#27BCEF;
border-bottom:1px solid #888888;
border-right:1px solid
#888888;
color:#FFFFFF;
float:right;
font-size:11px;
left:45%;
letter-spacing:2px;
padding:6px
12px;
position:fixed;
text-align:center;
top:20%;
z-index:999;
_position:absolute;
_bottom:auto;
_top:expression(eval(document.documentElement.scrollTop));
_margin-top:20%;
}
JavaScript 文件这样写(务必放在 jQuery 库后面):
<script
type=”text/javascript”>
$(‘#status’).fadeOut(800);
$(“a[rel!='nofollow']a[rel!='external'][target!='_blank']a[class!='load']“).click(function()
{
$(“#status”).fadeIn(400);
setTimeout(function()
{
$(“#status”).fadeOut(400)
},
4000)
});
$(“a[href*='#'],a[rel='external
nofollow'],a[href='javascript:void(0)'],a[href='javascript:reset_captcha('')']“).click(function()
{
$(“#status”).fadeOut(400)
});
</script>
err…代码我也不多解释了,如果不会的话可以直接复制、粘贴,原因是你不熟悉 JavaScript 跟正则表达式;如果你会自然也不用我多解释了。
说起xhtml在线编辑器,我们可能会想起大名鼎鼎的FCKeditor、TinyMCE……,不过它们都是老外开发的。今天要向大家推荐的是一款国产的优秀XHTML在线编辑器xhEditor。 xhEditor是一个基于jQuery开发的简单迷你并且高效的可视化XHTML编辑器,基于网络访问并且兼容IE 6.0+,Firefox 3.0+,Opera 9.6+,Chrome 1.0+,Safari 3.22+。
从最初的0.9.1版的发布,到现在的1.0.0 beta2版,经过9个多月的开发更新,xhEditor编辑器已经越来越完善,并得到了大量的用户认可和支持。xhEditor团队这种持续改进的态度,也是我对它认可的重要原因。
【xhEditor特色】
小巧:初始加载4个文件,包括:1个js(46k)+2个css(9k)+1个图片(5k),总共60k。若js和css文件进行gzip压缩,可以进一步缩减为21k左右。
快速:基于jQuery引擎开发,提供高效的代码执行效率
简单:简单的调用方式,加一个class属性就能将您的textarea立马变成一个功能丰富的可视化编辑器。
支持Word:实现Word代码自动检测并清理,提供高效完美的Word代码过滤方案,生成代码最优化精简,但是却不丢失任何细节效果。
支持UBB:提供完美的UBB可视化编辑解决方案,在您获得安全高效代码存储的同时,又能享受可视化编辑的便捷
【在线示例】
默认模式:http://xheditor.com/demos/demo01.html
自定义按钮:http://xheditor.com/demos/demo02.html
皮肤选择:http://xheditor.com/demos/demo03.html
其它选项:http://xheditor.com/demos/demo04.html
Javascript交互:http://xheditor.com/demos/demo05.html
非utf-8 编码网页调用:http://xheditor.com/demos/demo06.html
UBB可视化编辑:http://xheditor.com/demos/demo07.html
Ajax文件 上传:http://xheditor.com/demos/demo08.html
插件扩展:http://xheditor.com/demos/demo09.html
iframe 调用文件上传:http://xheditor.com/demos/demo10.html
异步加载:http://xheditor.com/demos/demo11.html
访问官方网站及下载:http://code.google.com/p/xheditor/
老外是很“无聊”D
这都弄个网站….我喜欢
http://www.cssstickyfooter.com
看这个网页的底部,为什么会跑到那儿去呢?即使内容很少的情况下,它也始终在页面的底部。
否则页面底部将留下大量空白。
下面是它实现的代码:
html, body, #wrap {height: 100%;}
body > #wrap {height: auto; min-height: 100%;}
#main {padding-bottom: 150px;} /* 必须使用和footer相同的高度 */
#footer {position: relative;
margin-top: -150px; /* footer高度的负值 */
height: 150px;
clear:both;}
兼容性Hack:
.clearfix:after {content: “.”;
display: block;
height: 0;
clear: both;
visibility: hidden;}
.clearfix {display: inline-block;}
/* Hides from IE-mac \*/
* html .clearfix { height: 1%;}
.clearfix {display: block;}
/* End hide from IE-mac */
还记得3年前的“激情岁月”,我是那样的激情澎湃,如今,我有时却需要在“平淡”中,挤出那点“激情”。
幸好的是,我会自欺欺人;
幸好的是,我会做梦;
幸好的是,我很傻;
幸好的是,…………….
这也算是对自己的在“平淡”岁月中的一种自己我安慰吧…
PS: `-` 变诗人了哟…………….
ADODB 是 Active Data Objects Data Base 的简称,它是一种 PHP 存取数据库的中间函式组件。
虽然 PHP 是建构 Web 系统强有力的工具,但是 PHP 存取数据库的功能,一直未能标准化,每一种数据库,都使用另一种不同且不兼容的应用程序接口(API)。为了填补这个缺憾,因此才有 ADODB 的出现。一旦存取数据库的接口予以标准化,就能隐藏各种数据库的差异,若欲转换至其它不同的数据库,将变得十分容易。
目前 ADODB最新版本是V4.62,支持的数据库种类非常地多,例如:MySQL, PostgreSQL, Interbase, Informix, Oracle, MS SQL 7, Foxpro, Access, ADO, Sybase, DB2 以及一般的 ODBC (其中 PostgreSQL、Informix、Sybase 的driver 是由自由软件社群发展之后贡献出来的)。
使用 ADODB 最大的优点之一是:不管后端数据库如何,存取数据库的方式都是一致的,开发设计人员不必为了某一套数据库,而必须再学习另一套不同的存取方法,这大大减轻开发人员的知识负担,过去的知识往后仍可继续使用,转移数据库平台时,程序代码也不必做太大的更动。
其实 ADODB 这样的发展理念,并不是首创的,DBI 比 ADODB 出现得更早,它提供 Perl 存取数据库时,使用一致的 API 呼叫接口。相信用过 Perl + DBI 的朋友,再来用 ADODB 时,会有一种似曾相识的感觉。
另外,ADODB 对用过 [...]
无论是PHP/.NET/ASP
不过,以上三种语言都有出名的产品….只有ASP的免费开源的!其他都收费不开源。
奇文小说系统 .net开发
杰奇小说系统和08CMS php开发,这个08CMS功能是很强大,但是总觉得它不是真正的小说系统,而且有点小复杂,要用点时间去理解里面词语的意思…….但免费开源。
终点小说系统 ASP开发
呵呵!好用的收费,一般好用的免费!网站开这个块的需求还是很高的哦!
不过都喜欢小说小偷类程序
如果你是网站产品经理、项目经理、网站策划、原型设计师、交互设计师,甚至急切想表达想法验证想法的Boss. 一起认识它…Axure下载与相关资源 Axure RP英文正式版下载如果你还在因为使用了Word、Visio、PowerPoint、Dreamweaver或Photoshop等工具,在表达想法和原型时感到制作缓慢、效果粗犷、不易理解、无交互体现、修改困难等问题而头痛不已……那么你肯定正在寻找一款可以快速实现、准确表达、带有交互效果且易于上手的原型设计利器。
如今 Axure RP 正在帮你实现这一心愿,将你在内心踌躇已久的种种想法带进可以准确传递、快速验证的原型呈现阶段。甚至你不需要了解一行程序代码即可轻松做到这一切。
从这儿开始…Axure RP 快速原型制作软件,由美国Axure Software Solutions, Inc.公司开发。 RP 是 Rapid Prototyping (快速原型缩写) 。Axure (ak shûr) 音标:(本页面即是由Axure RP输出的Html原型) Axure RP 能让操作它的人快速准确的创建基于Web的网站流程图、原型页面、交互体验设计、标注详细开发说明,并导出Html原型或规格的Word开发文档。
(通过扩展还会支持更多的输出格式)• 网站架构图 (Site Structure)
• 示意图 (Wireframe)
• 流程图 (Flowchart)
• 交互设计 (Interaction Design)
• 原型设计 (HTML Prototype)
• 规格文档 (Specification)
XHTML 的标签有许多:div、ul、li、dl、dt、dd、h1~h6、p、a、addressa、span、
strong……我们在运用这些标签搭建页面结构的时候,是可以将它们无限嵌套的,但是,嵌套也需要有一定规则,不能任由网站设计师的个人习惯胡乱嵌套——XHTML 必竟不是
XML。
在 XHTML 的语言里,我们都知道:ul 标签包含着 li、dl 标签包含着
dt 和 dd——这些固定标签的嵌套规则十分明确。但是,还有许多标签是独立的,它们没有被捆绑在一起,比如
h1、div、p……那么这些标签的嵌套规则到底是怎样的?今天就来说说这个话题。
提到 XHTML 标签的嵌套规则,我们先得知道有这么二类 XHTML 标签,一类叫做
块级元素(block),一类叫做
内嵌元素(inline,也有许多人叫它:内联、行内、线级等)。
块级元素 和 内嵌元素 的划分标准很简单,请把下面二行代码放进 body 标签里:
<div style=”border: 1px solid red;”>div1</div>
<div
style=”border: 1px solid red;”>div1</div>
浏览器的呈现效果:
div1
div1
页面呈现的这二个 div
占据了二行空间,除非让它们浮动(float)或是进行其他设置,否则谁都不挨着谁,它们都很霸道的占领属于自己的那一行空间——但凡看到某个标签有此现象,你就可以叫它:块级元素(block);
再把下面二行代码也放进 body 标签里:
<span style=”border: 1px solid red;”>span1</span>
<span
style=”border: 1px solid red;”>span2</span>
浏览器的呈现效果:
span1
span1
这一次,两个 span
并列在一行,它们之间睦邻友好、亲切和谐……像这样的标签行为,我们可以称它们为:内嵌元素(inline);
块级元素和内嵌元素的区别:
· 块级元素 一般用来搭建网站架构、布局、承载内容……像这些大体力活都属于块级元素的,它包括以下这些标签:
div、ul、li、dl、dt、dd、h1~h6、p、address……
· 内嵌元素
一般用在网站内容之中的某些细节或部位,用以“强调、区分样式、上标、下标、锚点”等等,下面这些标签都属于内嵌元素:
a、span、strong、sub、sup、img……
· 块元素 和 内嵌元素 是可以互相转换的,转换的代码如下:
display: block; /* 转成块元素 */
display: inline; /* 转成内嵌元素 */
· 块元素 和 内嵌元素 [...]
公司一个项目,加了班,一起去做一个东西还真是开心,虽然我不懂编程,但是我站在小赵旁边看着,我想这是一种鼓舞,能给伙伴动力!
修改客户的意见差不多后,我们去人工湖吃宵夜,谁知看到了喝醉酒的斧头帮成员追砍踢他车的醉大虾。。。
PS:做人,别那么冲动
理财是个好习惯,但市面上的记账软件要不就是太专业,要不就界面不简洁….所以自己弄了一个自己喜欢的类型。
但还是有些不如人意,不如分页那里,是否不要分页呢?直接按时间段查询是否还方便点呢?