最q在蓝色理想转?zhn)Q发现很多朋友提出有关DIV+CSS排版问题Q以及IE与FF的兼定w题。怎么问的都有Q结果就是一个——显C很奇怪,很难调整。我们浏览的大多数网站,或者用Dreamweaver创徏一个新的网|档时Q源码的剙都会有DocType声明Q但是很多h没有注意它,甚至在创作时候直接将它删掉,其实q往往是噩梦的开始。在遵@标准的Q何Web文档中,DOCTYPE都是一必需的元素。它会媄响代码验证,q决定了览器最l如何显CZ的web文档。ؓ了避免DOCTYPE的问题重复出玎ͼ我根据手头的资料整理了这文档,以备自己及有兴趣的朋友参考?/p>
在默认情况下QFF和IE的解释标准是不一LQ也是_如果一个网|有声明DOCTYPEQ它?yu)׃以默认的DOCTYPE解释下面的HTML。在同一U标准下Q不同浏览器的解释模型都有所差异Q如果声明标准不同,不用我说Q?zhn)自己惛_可以了。学习网|准,览器兼容,从哪里开始?zhn)自己军_Q但是,误识DOCTYPEQ?br />
一、什么是DOCTYPE
DOCTYPE是Document TypeQ文档类型)的简写,在页面中Q用来指定页面所使用的XHTMLQ或者HTMLQ的版本。要惛_作符合标准的面Q一个必不可的关键l成部分是DOCTYPE声明。只有确定了一个正的DOCTYPEQXHTML里的标识和CSS才能正常生效?br />
二、DOCTYPE的规?/strong>
DOCTYPE声明的写法遵循一定的规则Q它指出阅读E序应该用什么规则集来解释文档中的标记。在Web文档的情况下Q?#8220;阅读E序”通常是浏览器或者校验器q样的一个程序,“规则”则是w3c所发布的一个文档类型定义(dtdQ中包含的规则?br /> 每个dtd都包括标记、attributes、properties{内容,它们用于标记web文档的内容;此外q包括一些规则,它们规定了哪些标记能出现在其他哪些标C。每个web标准Q比如html 4 frameset和xhtml 1.0 transitionalQ都有自qdtd?/p>
以下是从手册上摘抄的规则Q?/p>
语法Q?/p>
HTML 元素 可用?"注册//l织//cd 标签//定义 语言""URL"
可能|
- 元素Q指?DTD 中声明的元素cd。这与声明的 SGML 文档cd相对应?HTML 默认。HTML?
- 可用性:指定正式公开标识W?FPI)是可公开讉K的对象还是系l资源?PUBLIC 默认。可公开讉K的对象。SYSTEM pȝ资源Q如本地文g?URL?
- 注册Q指定组l是否由国际标准化组l?ISO)注册?+ 默认。组l名U已注册?
- l织名称未注册。Internet 工程dl?IETF)和万l网协会(W3C)q注册?ISO l织?
l织Q指定表明负责由 !DOCTYPE 声明引用?DTD 的创建和l护的团体或l织的名Uͼ?OwnderID?IETF IETF?W3C W3C?
- cdQ指定公开文本c,x引用的对象类型?DTD 默认。DTD?
- 标签Q指定公开文本描述Q即Ҏ(gu)引用的公开文本的唯一描述性名U。后面可附带版本受?HTML 默认。HTML?
- 定义Q指定文档类型定义?
Frameset 框架集文档?
Strict 排除所?W3C 专家希望逐步淘汰的代表性属性和元素Q因为样式表已经很完善了?
Transitional 包含?frameSet 元素的全部内宏V?
- 语言Q指定公开文本语言Q即用于创徏所引用对象的自然语a~码pȝ。该语言定义已编写ؓ ISO 639 语言代码(大写两个字母)?EN 默认。英语?
- URLQ指定所引用对象的位|?/span>
Z获得正确的DOCTYPE声明Q关键就是让dtd与文档所遵@的标准对应。例如,假定文档遵@的是xhtml 1.0 strict标准Q文档的doctype声明应该引用相应的dtd。另一斚wQ如果doctype声明指定的是xhtml dtdQ但文档包含的是旧式风格的html标记Q就是不恰当的;cM圎ͼ如果doctype声明指定的是html dtdQ但文档包含的是xhtml 1.0 strict标记Q同h不恰当的?br />
三、选择什么样的DOCTYPE
如上例所C,XHTML 1.0中有3UDTDQ文档类型定义)声明可以选择Q过渡的QTransitionalQ、严格的QStrictQ和框架的(FramesetQ。这里分别介l如下?/p>
1Q过渡的
一U要求不很严格的DTDQ允许在面中用HTML4.01的标识(W合xhtml语法标准Q。过渡的DTD的写法如下:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"
没有它的话有些CSS效果不能体现
2Q严格的
一U要求严格的DTDQ不允许使用M表现层的标识和属性,例如<br/>{。严格的DTD的写法如下:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
"
3Q框架的
一U专门针Ҏ(gu)枉面所使用的DTDQ当面中含有框架元素时Q就要采用这UDTD。框架的DTD的写法如下:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"
使用严格的DTD来制作页面,当然是最理想的方式。但是,对于没有深入了解Web标准的网设计者,比较合适的是用过渡的DTD。因UDTDq允怋用表现层的标识、元素和属性,比较适合大多数网制作h员?/p>
四、需要注意的问题
没什么特别的Q就是一定要DOCTYPE声明攑֜XHTML文档的顶部,上面哪怕多个HTML注释标记都不行?/p>
最好示例代码也加上DOCTYPEQ否则效果会有差异?/p>
l典论坛讨论Q?br /> http://bbs.blueidea.com/thread-2792311-1-1.html
性能
首先,FCKEDITOR的性能是非常好?用户只需很少的时间就可以载入FCKEDITOR所需文g.对于其他在线~辑器来?q几乎是个很难解决的N,因ؓ在开启编辑器旉要装载太多的文g.比如CUTEEDITOR,虽然功能比FCKEDITORq要强大,可是,它本w也够庞大了,至于FREETEXTBOX{?其易用性与FCKEDITOR相比,有差距,可以?FCKEDITOR是一个别具匠心的在线~辑?它里面融入了作者高q面向对象的JAVASCRIPT功力,集易用性与强大的功能与一?
.与编辑器相关的所有图?脚本以及调用?br />
.语言文g
.~辑器的皮肤文g
.工具L贴图{?br />
q些导致在服务器和客户端间产生相当的流?如果有许多文件被调用,那么即便每个文g很小.也会让用L得不耐烦.
?.0版中,开发h员有两种Ҏ(gu)来解册个问?
那就是指定装载顺序和脚本压羃
装蝲序
?.0版开?~辑器按以下步骤装蝲资源:
.基本?是~辑器所在页)以及装入~辑器的JS脚本
.用来建立~辑器的脚本
.~辑器的语言和皮?
.建立~辑?
.载入预置的编辑文档内?
.从现在开?用户可以阅读和编辑文档了,不过,拖拽支持以及工具栏都是不可用?br />
.载入~辑器引擎脚?br />
.建立工具?q且可用
.从现在开?~辑器的所有功能都已经完整
.载入工具栏图?br />
脚本压羃
在打包Q何新版本?~辑器的JS脚本会q行预处?预处理步骤如?
.U除所有代码注?br />
.U除所有无用的I白字符.
.脚本合q成几个文g
使用上面的方?我们可以脚本文件的大小压羃到原来的50%.
压羃?原始的代码仍然存在于一个名为_Source的文件夹?br />
如何打包?
~辑器已l自带了打包E序,它位于FCKEDITOR的根文g夹中_PACKAGER文g夹中,名ؓFckeditor.Packager.exe,其复制到FCKEDITORҎ(gu)件夹中ƈq行,卛_自动JS脚本打包q压~?br />
需要注意的是该E序是一?NETE序,必须安装.NET FRAMEWORK才能使用
惌获取支持?
如果你捐?5000Ƨ元,你就可以获得1q的免费技术支?比较늚?相当于h民币15?不过西欧的费用相当惊?
如何安装?
1.下蝲最新版的FCKEDITOR
2.解压~到你的站点Ҏ(gu)件夹中名为FCKEDITOR的文件夹?名称必须为FCKEDITOR,因ؓ配置文g中已l用此名称来标C出FCKEDITOR的位|?
3.现在,~辑器就可以使用?如果惌查看演示,可以按下面方法访?
http://<your-site>/FCKeditor/_samples/default.html
注意:你可以将FCKEDITOR攄CQ何文件夹,默认情况?其攑օ到FCKEDITOR文gҎ(gu)最为简单的Ҏ(gu).如果你放入的文g夹用别的名U?请修攚w|文件夹中编辑器BasePath参数,如下所C?
oFckeditor.BasePath="/Components/fckeditor/";
另外,FCKEDITOR文g夹中所有以下划U开头的文g夹及文g,都是可选的,可以安全的从你的发布中删?它们q不是编辑器q行时必需?br />
如何FCKEDITOR整合q我的页?
׃目前的版本提供的FCKEDITOR仅提供了JAVASCRIPT式的整合,因此,q里仅讲q如何应用JAVASCRIPT来整合FCKEDITOR到站点中,当然,其他各种语言的整?你可以参考_samples文g夹中的例子来完成
1,假如~辑器已l安装在你的站点?FCKEDITOR/文g夹下.那么,W一步我们需要做的就是在面的HEADD中攑օSCRIPT标记以引入JAVASCRIPT整合模块.例如:
<script type="text/javascript" src="/fckeditor/fckeditor.js"></script>
其中路径是可更改?br />
2,现在,FCKEDITORcdl可以用了.有两个方法在面中徏立一个FCKEDITOR~辑?
Ҏ(gu)1:内联方式(使用):在页面的FORM标记内需要插入编辑器的地方置入以下代?
script type="text/javascript">
var oFCKeditor = new FCKeditor( 'FCKeditor1' ) ;
oFCKeditor.Create() ;
</script>
Ҏ(gu)2:TEXTAREA标记替换?不徏议?:在页面的ONLOAD事g?d以下代码以替换一个已l存在的TEXTAREA标记
<html>
<head>
<script type="text/javascript">
window.onload = function()
{
var oFCKeditor = new FCKeditor( 'MyTextarea' ) ;
oFCKeditor.ReplaceTextarea() ;
}
</script>
</head>
<body>
<textarea id="MyTextarea" name="MyTextarea">This is <b>the</b> initial value.</textarea>
</body>
</html>
3.现在,~辑器可以用了
FCKEDITORcd?
下面是用来在面中徏立编辑器的FCKEDITORcȝ说明
构造器:
FCKeditor( instanceName[, width, height, toolbarSet, value] )
instanceName:~辑器的唯一名称(相当于ID)
WIDTH:宽度
HEIGHT:高度
toolbarSet:工具条集合的名称
value:~辑器初始化内容
属?
instanceName:~辑器实例名
width:宽度,默认gؓ100%
height:高度,默认值是200
ToolbarSet:工具集名U?参考FCKCONFIG.JS,默认值是Default
value:初始化编辑器的HTML代码,默认gؓI?br />
BasePath:~辑器的\?默认?Fckeditor/文g?注意,量不要使用相对路径.最好能用相对于站点根\径的表示Ҏ(gu),要以/l尾
CheckBrowser:是否在显C编辑器前检查浏览器兼容?默认为true
DisplayErrors:是否昄提示错误,默ؓtrue;
集合:
Config[Key]=value;
q个集合用于更改配置中某一的??br />
oFckeditor.Config["DefaultLanguage"]="pt-br";
Ҏ(gu):
Create()
建立q输出编辑器
RepaceTextArea(TextAreaName)
用编辑器来替换对应的文本?br />
如何配置FCKEDITOR?
FCKEDITOR提供了一套用于定制其外观,Ҏ(gu)及行ؓ的设|集.主配|文件名为Fckconfig.js
你既可以~辑主配|文?也可以自己定义单独的配置文g.配置文g使用JAVASCRIPT语法.
修改?在徏立编辑器?可以使用以下语法:
var oFCKeditor = new FCKeditor( 'FCKeditor1' ) ;
oFCKeditor.Config['CustomConfigurationsPath'] = '/myconfig.js' ;
oFCKeditor.Create() ;
提醒:当你修改配置?hI浏览器~存以查看效?br />
配置选项:
AutoDetectLanguage=true/false 自动语a
BaseHref="" 相对链接的基地址
ContentLangDirection="ltr/rtl" 默认文字方向
ContextMenu=字符串数l?右键菜单的内?br />
CustomConfigurationsPath="" 自定义配|文件\径和名称
Debug=true/false 是否开启调试功?q样,当调用FCKDebug.Output()?会在调试H中输出内容
DefaultLanguage="" ~省语言
EditorAreaCss="" ~辑区的样式表文?br />
EnableSourceXHTML=true/false 为TRUE?当由可视化界面切换到代码|,把HTML处理成XHTML
EnableXHTML=true/false 是否允许使用XHTML取代HTML
FillEmptyBlocks=true/false 使用q个功能,可以空的块U元素用I格来替?br />
FontColors="" 讄昄颜色拑֏器时文字颜色列表
FontFormats="" 讄昄在文字格式列表中的命?br />
FontNames="" 字体列表中的字体?br />
FontSizes="" 字体大小中的字号列表
ForcePasteAsPlainText=true/false 强制_脓(chung)为纯文本
ForceSimpleAmpersand=true/false 是否不把&W号转换为XML实体
FormatIndentator="" 当在源码格式下羃q代码用的字符
FormatOutput=true/false 当输出内Ҏ(gu)是否自动格式化代?br />
FormatSource=true/false 在切换到代码视图时是否自动格式化代码
FullPage=true/false 是否允许~辑整个HTML文g,q是仅允许编辑B(ti)ODY间的内容
GeckoUseSPAN=true/false 是否允许SPAN标记代替B,I,U标记
IeSpellDownloadUrl=""下蝲拼写查器的网址
ImageBrowser=true/false 是否允许览服务器功?br />
ImageBrowserURL="" 览服务器时q行的URL
ImageBrowserWindowHeight="" 囑փ览器窗口高?br />
ImageBrowserWindowWidth="" 囑փ览器窗口宽?br />
LinkBrowser=true/false 是否允许在插入链接时览服务?br />
LinkBrowserURL="" 插入链接时浏览服务器的URL
LinkBrowserWindowHeight=""链接目标览器窗口高?br />
LinkBrowserWindowWidth=""链接目标览器窗口宽?br />
Plugins=object 注册插g
PluginsPath="" 插g文g?br />
ShowBorders=true/false 合ƈҎ(gu)
SkinPath="" 皮肤文g夹位|?br />
SmileyColumns=12 囄H列?br />
SmileyImages=字符数组 囄H中囄文g名数l?br />
SmileyPath="" 囄文g夹\?br />
SmileyWindowHeight 囄H口高度
SmileyWindowWidth 囄H口宽度
SpellChecker="ieSpell/Spellerpages" 讄拼写查器
StartupFocus=true/false 开启时FOCUS到编辑器
StylesXmlPath="" 讄定义CSS样式列表的XML文g的位|?br />
TabSpaces=4 TAB键生的I格字符?br />
ToolBarCanCollapse=true/false 是否允许展开/折叠工具?br />
ToolbarSets=object 允许使用TOOLBAR集合
ToolbarStartExpanded=true/false 开启是TOOLBAR是否展开
UseBROnCarriageReturn=true/false 当回车时是生BR标记q是P或者DIV标记
如何自定义样式列表呢?
FCKEDITOR的样式工h中提供了预定义的样式,样式是通过XML文g定义?默认的XML样式文g存在于FCkEditorҎ(gu)件夹下的FckStyls.xml文g?br />
q个XML文g的结构分析如?
<?xml version="1.0" encoding="utf-8" ?>
<Styles >
<Style name="My Image" element="img">
<Attribute name="style" value="padding: 5px" />
<Attribute name="border" value="2" />
</Style >
<Style name="Italic" element="em" />
<Style name="Title" element="span">
<Attribute name="class" value="Title" />
</Style >
<Style name="Title H3" element="h3" />
</Styles>
每一个STYLE标记定义一U样?NAME是显C在下拉列表中的样式?ELEMENT属性指定此样式所适用的对?因ؓFCKEDITOR中的样式是上下文敏感?也就是说,选择不同的对?仅会昄针对q类对象定义的样?br />
拼写?br />
FCKEDITOR带了两种拼写查工?一U是ieSpell,默认情况下用这U?使用q种方式的拼写检?要求客户下蝲q安装iespellq个Y?另外,也提供SpellPager的方式来q行拼写?不过,׃SPELLPAGER是由PHP~写的服务器端脚?因此,要求你的WEB服务器必L持PHP脚本语言方可
更改拼写查器的方式请参见有关配置文g的详l说?br />
压羃脚本
Z提供脚本载入的效?FCKEDITOR采用以下Ҏ(gu)对脚本尽量压~以减少脚本寸:
1,U除掉脚本中的注?br />
2.U除掉脚本中所有无意义的空?br />
另外,FCKEDITORq提供了一个专门用于压~脚本的工具以便 你在发布时能减小文g寸,
你可以将_Packager文g夹中的Fckeditor.Packager.exe复制到FCKEDITORҎ(gu)件夹来运行ƈ压羃脚本
本地化FCKEDITOR
如果FCKEDITOR没有提供(zhn)所需要的语言(实际上全有了),你也可以自行制作新的语言
,你只需要复制出EN.JS,然后在其基础上进行翻?另外,语言名称与对应的脚本文g名必遵循RFC 3066标准,但是,需要小?例如:Portuguess Language对应的脚本文件名必须为pt.js
如果需要针Ҏ(gu)个国家的某种语系,则可以在语系~写后加上横U及国家~写卛_
在用时,pȝ会自动侦客L语系及国别而运用适当的界面语a.
当徏立一U新的语a?你必d"Edit/lang/fcklanguagemanager.js"中ؓ其徏立一个条?如下所C?
FCKLanguageManager.AvailableLanguages =
{
en : 'English',
pt : 'Portuguese'
}
需要提醒的?文g必须保存为UTF-8格式
如何与服务器端脚本进行交?
h看例子以得到相关内容
另外,在ASP.NET中以以下步骤使用
1.把FCKEDITORM到工L
2.托拽FCKEDITOR控g到页?br />
3.为其指定名称
4.FCKEDITORcȝ所有属性不光可以在代码中?而且可以作ؓFCKEDITOR控g的属性直接?例如,要改变皮?可以在UI面中指定SkinPath="/fckeditor/editor/skins/office2003"卛_,其实FCKEDITOR的ASP.NET版本可以做得更好,你可以找到FCKEDITOR ASP.NET 2.1的源文g,然后修改该控件的设计,为其暴露更多有用的属?重新~译卛_
5,POSTBACK后的数据,使用FCKEDITOR控g的value属性获?br />
6.׃默认状态下,ASP.NET不允许提交含有HTML及JAVASCRIPT的内?因此,你必d使用FCKEDITOR的页面的ValidateRequest设ؓfalse.(<%@page validteRequest="false" %>卛_)
--------------------------------------------------------
附:
一、如何设|上传文件语a
把FCKeditor根目录下面的fckconfig.js文g?br />
var _FileBrowserLanguage = 'asp' ; // asp | aspx | cfm | lasso | perl | php | py
var _QuickUploadLanguage = 'asp' ; // asp | aspx | cfm | lasso | php
q两行中Ҏ(gu)(zhn)所需要调用的~辑器语aQ如用asp.net则改为aspxQ?br />
二、解决中文的问题:
在web.config中加?
<globalization requestEncoding="GB2312" responseEncoding="GB2312"/>
q样讄后可以显CZ文的文gQ但URL地址也是中文的;
如果服务器对中文地址的解析不好,可能D囄无法览Q?br />
所以修改:editor\filemanager\browser\default\frmresourceslist.html
中的OpenFile函数Q把
window.top.opener.SetUrl( fileUrl ) ;
修改?
window.top.opener.SetUrl( escape(fileUrl) ) ;
?讄上传的目录:
1:在web.config中设|?
<appSettings>
<add key="FCKeditor:UserFilesPath" value="/fck/UpLoad/" />
</appSettings>
2:在Session中设|?
在editor\filemanager\browser\default\connectors\aspx\connector.aspx中加入以下代?
<script runat="server" language="C#">
protected override void OnInit(EventArgs e)
{
Session["FCKeditor:UserFilesPath"] = "/fck/UpLoad1/";
}
</script>
附:如何在asp.net中动态设|上传图片的路径Q?/p>
1.在javascript中修改FCKConfig.ImageBrowserURL的|修改方式如下Q?br />
FCKConfig.ImageBrowserURL += "?Path=要上传的文g路径";
?要把文g上传到站Ҏ(gu)目录的UploadFile文g夹中Q则讄为:
FCKConfig.ImageBrowserURL += "?Path=/UploadFile";
2.?editor\filemanager\browser\default\connectors\aspx\connector.aspx"文g最后中增加以下E序Q?br />
<script runat="server" language="C#">
protected override void OnInit(EventArgs e)
{
if( Request.QueryString["Path"]==null ){
Session["FCKeditor:UserFilesPath"] = "/UpLoadFiles/"; //讄默认?br />
}else{
Session["FCKeditor:UserFilesPath"] = Request.QueryString["Path"];
}
}
</script>