括号之后加所有参数属单章页模板参数列表不条排

[转]你必须懂的 T4 模板:深入浅出 - 推酷
[转]你必须懂的 T4 模板:深入浅出
示例代码:
(一)什么是T4模板?
T4,即4个T开头的英文字母组合:Text Template Transformation Toolkit。
T4文本模板,即一种自定义规则的代码生成器。根据业务模型可生成任何形式的文本文件或供程序调用的字符串。(模型以适合于应用程序域的形式包含信息,并且可以在应用程序的生存期更改)
VS本身只提供一套基于T4引擎的代码生成的执行环境,由下面程序集构成:
Microsoft.VisualStudio.TextTemplating.10.0.dll
Microsoft.VisualStudio.TextTemplating.Interfaces.10.0.dll
Microsoft.VisualStudio.TextTemplating.Modeling.10.0.dll
Microsoft.VisualStudio.TextTemplating.VSHost.10.0.dll
便利工具:
a)&&&&&&&& 提供一些可以直接使用的代码生成器,比如Enum SQL View、AzMan wrapper、LINQ to SQL classes、LINQ to SQL schema和Entity Framework DAL等。
b)&&&&&&&& 提供一些基于T4方面的VS的扩展:当你安装之后,在“Add New Item”对话框中就会多出一个命名为“Code Generation”的类别,其中包括若干文件模板。
2、& T4 模板编辑器(eg:支持代码着色、智能提示)
a)&&&&&&&&
b)&&&&&&&&
&&& 当然我们也可以通过VS2010中新增的扩展管理器(Extension Manager)来添加Vs扩展插件。扩展管理器(Extension Manager),这和Eclipse/Netbeans有些相似,用户可以直接在IDE中从
找到并下载扩展。
通过VS的菜单Tools-&Extension Manager
,这里你可以添加,删除已经安装的VS的扩展插件。打开界面如下:
笔者在学习 T4 的时候使用过上面两个 T4 模板编辑器。稍作几点对比:
a)&&&&&&&& tangible T4 Editor可选择安装内嵌的 UML 模板模型
b)&&&&&&&& 对于不是常用的dll( eg:EnvDTE.dll ),tangible T4 Editor免费版和 Visual T4 都不支持导航,并且所报的提示页不一样
tangible T4 Editor免费版中提示如下:
Visual T4中则直接提示:
但是在 Visual T4 中,我们可以通过在程序集中引入 EnvDTE.dll 解决此错误的提示(完成开发后可移除程序集引用),并且还能完美的获得该程序集的智能提示功能,如下图所示:
&&&&&&&& 同时我们也可以看到 Visual T4 中代码着色也更加贴近 VS (蓝色字体标注对象)。
就“代码着色”和“智能提示”方面Visual T4 工具表现更完美(前提是必须主动在项目中引入对应程序集),但目前最新版本存在缩进问题实在可惜,悲愤中等更新。.
可能你还想要tangible T4 Editor提供的 UML 模板模型,呵呵……现在我本机同时装了这两款 T4编辑器,暂时还没发现冲突。
(二)T4基本结构
T4模板可以分为:指令块、文本块、控制块。
指令块 - 向文本模板化引擎提供关于如何生成转换代码和输出文件的一般指令。
文本块 - 直接复制到输出的内容。
控制块 - 向文本插入可变值并控制文本的条件或重复部件的程序代码,不能在控制块中嵌套控制块。
6个指令&#@ template #&、&#@ parameter#&、&#@ assembly #&、&#@ import #&、&#@ include #&、&#@ output #&、
其中, output 和 assembly 只能用在设计时模板。
1)&&&&&&&& T4 模板指令
&#@ template [language=&C#&] [hostspecific=&true&] [debug=&true&] [culture=&code&] [inherits=&templateBaseClass&]
这里只说明下 inherits 属性,其余属性在本文更合适的地方有进行说明。
inherits&&&&&&&&&&&&&
指定模板的程序代码继承自另一个类,该基类可以是由其他模板生成。
1)&&&&&&&& 运行时(预处理过的)文本模板中的继承
如果不指定 inherits 特性,则会从您的文本模板生成基类和派生类。指定 inherits 特性时,仅生成派生类。
2)&&&&&&&& 设计时文本模板中的继承
设计时模板会生成任何类型的“文本文件”,此文件将组成 Visual Studio 项目的一部分。T4 模板引擎首先要将模板转换为中间程序代码文件,中间代码文件将写入您的 %TEMP% (环境变量) 目录。默认该生成的中间代码继承自 Microsoft.VisualStudio.TextTemplating.TextTransformation 类,但你也可根据需求使用 inherits 特性指定派生于 TextTransformation 类的任何基类。
&&&&&&&&&&&&&&&&&& 模板引擎生成转换类更详细的请参考本文后面的
2)&&&&&&&& T4 参数指令
&#@ parameter type=&Full.TypeName& name=&ParameterName& #&
在 Visual Studio 文本模板中,parameter 指令声明模板代码中从自外部上下文传入的值初始化的属性。可以声明任何远程类型的参数。也就是说,类型必须使用SerializableAttribute进行声明,或者必须从MarshalByRefObject派生。这样可以将参数值传递到在其中处理模板的AppDomain中。
如何使用及内部运作机制请查看我的另一篇文章
3)&&&&&&&& T4 导入指令
&#@ import namespace=&namespace& #&
4)&&&&&&&& T4 包含指令
&#@ include file=&filePath& #&
a)&&&&&&&& 为了增加代码的可维护性,将公用函数做为类功能块(&#+ 类功能控制块 #&)存放在单独的文件中,该文件可以被 &#@include#& 到一个或多个模板文件中。
b)&&&&&&&& 对于包含文件,文件扩展名使用 .ttinclude可读性更好。(以区分后缀为 .tt的运行时或设计时文本模板)
5)&&&&&&&& T4 输出指令
&#@ output extension=&.fileNameExtension& [encoding=&encoding&] #&
运行时(预处理)文本模板中不需要 output 指令。应用程序通过调用TextTransform() 来获取已生成的字符串。
6)&&&&&&&& T4 程序集指令
&#@ assembly name=&[assembly strong name|assembly file name]& #&
在预处理文本模板中,assembly 指令无效。改为在 Visual Studio 项目中直接“添加引用”。
程序集名称应为以下各项之一:
GAC 中程序集的强名称,例如 System.Xml.dll。还可以使用长名称,例如 name=&System.Xml, Version=4.0.0.0, Culture=neutral,PublicKeyToken=b77……&。
程序集的绝对路径
可以使用 $(variableName) 语法引用 Visual Studio 或MSBuild变量(如 $(SolutionDir)),以及使用 %VariableName% 来引用环境变量。
&&&&&&&&&&&&&&&&&& 另,给出一些常用的
$(ConfigurationName)
当前项目配置的名称(如“Debug”)。
$(PlatformName)
当前项目平台的名称(如“Win32”)。
$(ProjectName)
项目的基本名称。
$(TargetDir)
生成的主输出文件的目录(定义为驱动器 + 路径);包括尾部的反斜杠“\”。
$(TargetName)
生成的主输出文件的基本名称。
$(FrameworkDir)
安装 .NET Framework 的目录。
$(FrameworkVersion)
Visual Studio 使用的 .NET Framework 版本。
$(WebDeployPath)
从 Web 部署根到项目输出所属于的位置的相对路径。返回与RelativePath相同的值。
$(WebDeployRoot)
指向&localhost&位置的绝对路径。例如,c:\inetpub\wwwroot。
有三种类型的控制块,根据其左括号对它们进行区分:
1.&&&&& &# 标准控制块 #&&&&&&&&&&&&&&&&&&&&&&&&&&&& 可以包含语句。
2.&&&&& &#= 表达式控制块 #&&&&&&&&&&&& 将一个可以计算为字符串的表达式括起来,用于提供要写入“输出”文件的字符串的代码。
3.&&&&& &#+ 类功能控制块 #&&&&&&&&&&&& 可以使用类功能控制块向文本模板添加方法、属性、字段甚至是嵌套类。必须作为文件中的最后一个块显示,或者用&#@ include #&引入外部文件。
1)&&&&&&&& 始终使用 {...}花括号来包含内嵌的嵌套语句,否则会报错。(哪怕花括号中只有一句代码)
2)&&&&&&&& 控制块不能互相嵌套。必须先终止之前的控制块,然后才能打开另一个。
(三)设计时模板和运行时模板
T4文本模板分为:设计时模板和运行时模板
n& 添加模板
设计时模板(文本模板)
优势:当需求变化时,可以根据业务需求调整模型(输入),按照指定规则将“模型”生成任何类型的“文本文件”,例如:网页、资源文件或任何语言的程序源代码。(模型:是描述应用程序特定方面的数据源。它可以是任何形式、任何类型的文件或数据库。如:数据库、配置文件、UML 模型、DSL 模型或其他源)
a)&&&&&&&& VS中新建文件——常规——文本模板。(如图)
该模板文件中已包含下列指令:
&#@ template debug=&false& hostspecific=&false& language=&C#& #&
&#@ output extension=&.txt& #&
b)&&&&&&&& 或则,添加“纯文本文件”并设置下图属性,加入相关指令。(后缀推荐改为标准的 *.tt)
设计时模板: TextTemplatingFileGenerator
运行时模板(已预处理的文本模板)&&&
优势:当需求变化时,可以根据业务需求调整模型(输入),在运行时按照指定规则将“模型”生成为“文本字符串”。
VS中新建文件——常规——已预处理的文本模板。
该模板文件包含指令:&#@ template language=&C#& #&
或则,添加“纯文本文件”并设置相应属性,加入相关指令。
运行时模板:TextTemplatingFilePreprocessor
n& 何时编译,编译过程
在下列任何一种情况下,将执行模板,同时生成附属文件,生成的文件将作为项目的一部分编译。(属性框----生成操作:编译)
1)&&&&&&&& 编辑模板(模板有异动且没有被保存),当前编辑模板失去焦点。
2)&&&&&&&& 保存模板。
3)&&&&&&&& 在“解决方案资源管理器”工具栏中单击“转换所有模板”。转换解决方案中的所有模板。
4)&&&&&&&& 右击“解决方案资源管理器”中的一个或多个模板文件,然后选择“运行自定义工具”。
设计时模板
1)&&&&&&&& 文本模板转换引擎将“文本模板”转换为可执行的cs代码——“转换类”。转换类(*.cs)存于临时目录下。(临时目录在“环境变量”中设置:右键“我的电脑”—“属性”—“高级系统设置”—“高级”选项卡中“环境变量”—TEMP变量)
命名空间:Microsoft.VisualStudio.TextTemplating + 随机码
基类:Microsoft.VisualStudio.TextTemplating.TextTransformation
类名:GeneratedTextTransformation
2)&&&&&&&& 引擎编译生成的“转换类”生成dll,dll存于临时目录下。具体是哪个dll可以在模板的“调试环境”下使用System.Reflection.Assembly.GetExecutingAssembly();获取。
3)&&&&&&&& 执行已编译的转换类,生成“文件”。新文件会在“解决方案资源管理器”中出现在文本模板文件下。
运行时模板
1)&&&&&&&& 运行时模板没有&#@ output #&指令,文本模板引擎将“运行时模板”直接编译为cs文件,作为项目的一部分编译。新文件会在“解决方案资源管理器”中出现在文本模板文件下。
命名空间:默认为所属程序集的命名空间
基类:模板文件名 + Base&
类名:模板文件名(PreTextTemplateTest.tt)——注意是“分部类”
2)&&&&&&&& 生成的代码文件随着项目一起编译,并可在应用程序中通过调用生成类中的TransformText() 方法输出“文本字符串”。
另外,若要在特定命名空间中放置模板转换生成的类,需设置模板文件的“自定义工具命名空间”属性。
1)&&&&&&&& 控制块使用陷进
TransformText() 方法是由模板引擎将模板中的所有“控制块”代码(包括“包含的模板”)组合生成。所以在使用控制块时应注意以下几点:
a)&&&&&&&& 语言:只能使用一种语言。
b)&&&&&&&& 局部变量:确保局部变量的名称不会冲突。
2)&&&&&&&& 文本模板在单独的AppDomain中运行
请注意,文本模板在与主应用程序分开的AppDomain中运行。在大多数情况下这并不重要,但在某些复杂的情况下您可能会发现一些限制。例如,如果要从单独的服务将数据传入模板或从中传出数据,则该服务必须提供可序列化的 API。
l& 快速编写模板
以生成文件为原型,然后逐步插入用于改变结果的控制块。
l& T4文本模板的断点调试
注册表:设置DbgJITDebugLaunchSetting值为 2。
(x86系统): HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\.NETFramework
(x64 系统): HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\.NETFramework
为template指令添加debug=&true&特性:&#@ template debug=&true&#&
&# System.Diagnostics.Debugger.Launch();#&&&&&&&&& &&&&&&&& 在模板执行到特定点启动调试器。如果用Debugger.Break()启动调试器在调试完后会导致 VS 奔溃。
&#System.Diagnostics.Debugger.Break();#&&&&&&&&&&&&&&&&&&&&& 启动调试器后,使用此命令在后续特定点处再次进入调试模式,相当于断点。
使用方法:必须使用“Debugger.Launch()”命令启动调试器(如下图,启动新实例或使用已存在的VS附加。注意,若此处点击取消则将关闭当前IDE),调试完后可以不用中断调试,不影响模板编辑,当再次编译模板时如果存在“Debugger.Break()”命令则自动进入调试模式。
l& 向模板传递参数的两种方法
使用 &#@ parameter#& 指令引入参数,由模板引擎生成属性访问代码。详细请看
在构造函数中传递参数。只适用于运行时模板,此种模板生成的代码以分部类的形式编写。可以在项目的另一个文件中创建同一个类的其他部分,该文件可以包含一个带参数的构造函数、若干属性和函数,在调用 TransformText() 实例方法前进行初始化。
l& 使用模板继承共享内容
可以通过编写基类模板(可以是抽象模板)在文本模板之间共享内容。使用&@#template#& 指令的 inherits 特性指定基类。
l& 运行时调用设计时模板返回字符串
调用 Microsoft.VisualStudio.TextTemplating.Engine 的 ProcessTemplate 方法。
publicstring ProcessTemplate(
&&&& string content,
&&&& ITextTemplatingEngineHost host
&&& &&& content&&& 参数指定文本模板的内容,eg: 使用System.IO.File.ReadAllText(Path) 进行读取
host&&&&&&& 参数指定的宿主,必须是实现 ITextTemplatingEngineHost 的类。这是由模板引擎回调的。宿主必须能记录错误、解析对程序集和包含文件的引用、提供可在其中执行模板的应用程序域并为每条指令调用相应的处理器。
(五)常用方法
n& 模板基类提供的方法
设计时模板继承TextTransformation抽象类
运行时模板默认继承自动生成的基类
Write() 和WriteLine() 方法
写入目的输出文本的三种方式:
a)&&&&&&&& 文本块
b)&&&&&&&& 表达式控制块:&&&&& &#= 变量 #&
c)&&&&&&&& 标准控制块:&&&&&&&&&& &# Write() | WriteLine() #&,因为控制块不能嵌套,所以此种方式比&#= 变量 #&书写更优雅。
输出文本缩进设置
可以使用缩进方法设置文本模板输出的格式。
a)&&&&&&&& PushIndent(string indent)&&&&&&&& 添加指定格式,内部会将字符长度加入到缓存变量indentLengths列表(List&int&)。
b)&&&&&&&& PopIndent()&&&&&&&&&&&&&&&& 以“堆栈(先进后出)”形式移除格式,内部按indentLengths列表中存的字符长度进行移除。
c)&&&&&&&& ClearIndent()&&&&&&&&&&&&& 删除所有缩进。
注意:格式用完后要注意清除,否则可能出现模板中的空行会生成 Write(“\r\n”) 中间代码,最终造成将缩进的格式错误输出到了目的文件。
若要在 Visual Studio 错误窗口中放置错误消息和警告消息,可以使用以下方法:
&# this.Error(&An error message&); #&
&# Warning(&A warning message&); #&
n& 使用执行模板的主机(例如 Visual Studio)公开的方法和属性。这适用于常规文本模板,而不是预处理过的文本模板。
首先,给 template 指令添加hostspecific=&true& 特性,以便使用this.Host对象。
(Microsoft.VisualStudio.TextTemplating.ITextTemplatingEngineHost)接口提供方法
使用this.Host.ResolvePath()从相对路径名打开文件
使用LogErrors() 显示错误消息,如下图:
使用 Visual Studio 中提供的服务(加载EnvDTE.dll )
EnvDTE是組件包裝 COM 程式庫,其中包含了 Visual Studio 核心 Automation 的物件及成員。
引入 EnvDTE.dll 组件后应按下图“属性”进行设置:
&#@ assembly name=&EnvDTE& #&
IServiceProvider serviceProvider = (IServiceProvider)this.H
EnvDTE.DTEdte = (EnvDTE.DTE) serviceProvider.GetService(typeof(EnvDTE.DTE));
dte.Solution.SaveAs(&C:\\backup_Solution&);
&&&&&&&&& 好了,有了上面的理论后,我知道你懂了。
是的,我们还缺少一篇应用。接下去我会整一篇应用T4打造的底层数据库操作:(1)根据表生成 CRUD sql语句并且生成到类。(2)根据自定义的sql配置文件生成到类&& (3)还有……(看到之前有园友写过,不过我还是想整整,看有没有新收获)& ---- 示例如果你有更好的建议请告知我
已发表评论数()
&&登&&&陆&&
已收藏到推刊!
请填写推刊名
描述不能大于100个字符!
权限设置: 公开
仅自己可见当前位置: &
第13章 级联样式单[二]
0:02:42 来源: 本站整理
XML&2CSS2W3C1998CSS1XMLHTMLCSS1CSS2HTMLXMLCSS2PageMakerQuark XPressWebMozilla* CSS2* * * * * * 13.1 CSS2CSS2WebCSS1CSS2Webhttp://www.w3.org/TR/REC-CSS2specs/CSS2W3CCSS2Internet Explorer 5.0MozillaCSS2page breakCSS2CSS113.1.1 :hoverCSS2* :first-child:first-child* :focus:focus* :hover:hover* :1ang:1angxml:lang* :first:first* :left:left* :right:right13.1.2 XMLCSS1CSS2:first-line:first-letterCSS2:after:before:after:before13.1.3 CSS2CSS21200dpi13.1.4 CSS213.1.5 InternetCSS2Unicode13.1.6 CSS2""13.1.7 displayXML13.1.8 13.1.9 CSS213.1.10 CSS2CSS113.1.10.1 :link:visited:active13.1.10.2 CSS1CSS2inheritinherit13.1.10.3 CSS1!importantCSS2!important!important!important13.1.10.4 displayinlineblock13.1.10.5 CSS1margin-leftwidthmargin-rightCSS213.2 CSS2Internet ExplorerMozillaCSS213.2.1 CSS213-1XML13-1 CSS2*universal selectorXXXYYXSONNETVERSEX&YXYSTANZAVERSEX:first-childXSONNETSTANZAX:linkXX:visitedXX:activeXX:hoverXX:focusXX:lang(i)xml:langiXX+YXYREFRAINSTANZAX[attr]attrXNAMEAUTHORX[attr="string"]attr"string"XDATAAUTHORX[attr~="string"]Xattr"string"X[lang|="langcode"]lang"langcode"XX#mynameid"myname"X13.2.2 *New York*{ font-face: "New York" }**:before { content: ". " counter(pgraph) ". ";counter-increment: /*pgraph1*/*[onmouseover] { text-decoration: blink }*before { content: ". " counter(pgraph) ". ";counter-increment: para }[onmouseover] { text-decoration: blink }13.2.3 childdescendantchildrendescendentSONNETVERSESTANZAVERSE13-1XMLShakespeare2113-1 Shakespeare21&?xml version="1.0"?&&?xml stylesheet type="text/css" href="shakespeare.css"?&&SONNET&&AUTHOR&William Shakespeare&/AUTHOR&&TITLE&Sonnet 21&/TITLE&&STANZA id="st1"&&VERSE&SO is it not with me as with that Muse&/VERSE&&VERSE&Stirr'd by a painted beauty to his verse,&/VERSE&&VERSE&Who heaven itself for ornament doth use&/VERSE&&VERSE&And every fair with his fair doth rehearse:&/VERSE&&/STANZA&&STANZA id="st2"&&VERSE&Making a couplement of proud compare&/VERSE&&VERSE&With sun and moon, with earth and sea's richgems,&/VERSE&&VERSE&With April's first born flowers, and all thingsrare&/VERSE&&VERSE&That heavens air in this huge rondure hems.&/VERSE&&/STANZA&&STANZA id="st3"&&VERSE&O, let me, true in love, but truly write,&/VERSE&&VERSE&And then believe me, my love is as fair&/VERSE&&VERSE&As any mother's child, though not so bright&/VERSE&&VERSE&As those gold candles fix'd in heaven's air.&/VERSE&&/STANZA&&REFRAIN&&VERSE&Let them say more that like of hearsay well,&/VERSE&&VERSE&L will not praise that purpose not to sell.&/VERSE&&/REFRAIN&&/SONNET&VERSESONNETimmediate childrenVERSESTANZAREFRAINSONNET VERSEVERSESONNETSONNET*VERSEVERSESONNETSTANZA&VERSESTANZAVERSEREFRAINVERSEREFRAINVERSEREFRAINSONNETSONNET REFRAIN&VERSE:first { padding: "2cm" }13-1"Let them say more that like of hearsay well,"13.2.4 +STANZASTANZAREFRAINSTANZA+REFRAIN { color: red }13.2.5 /NUMBERSTANZASTANZA[NUMBER] { color:red }NUMBERSTANZADTDNUMBERNUMBERSTANZANUMBER3STANZASTANZA [NUMBER="3"] { color:red }&13.2.6 @规则@规则用来完成某项任务,而不是选择元素,并把一些样式应用于这一元素。@规则有五种:1.@page:把样式应用于页面(而不是此页上的元素)2.@import:在当前样式单中嵌入一外部样式单3.@media:把只能用于某种媒体的特性组合起来成为样式规则4.@font-face:描述样式单中用于其他地方的字体5.@charset:定义样式单使用的字符集13.2.6.1 @page@page规则选择页面框。在其内部,设计者可指定各页面的大小、版面布局、取向和页边距。页面框是矩形区域,大约为打印页的大小,它包含页面区域和页边距。页面区域包括要显示的内容,框边缘作为一种容器,页面版面就处于分页符之间。与其他框不同,页面框没有边界线或贴边,只有页边距。@page规则选择文档中的每一页面。可使用下面的页面伪类属性之一:first、:left或:right来为各页面类指定不同属性。由于@page规则不知道含有字体的页面内容,所以无法理解以em和ex为单位的尺寸。所有的其他度量单位(包括百分数)都是可以接受的。用于设置页边距的百分数也是总页面框的百分数。页边距可为负值,表示把内容放在通常应用程序或打印机可访问的区域之外。在大多数情况下,只保留可见或可打印区域内的信息。13.2.6.2 @import@import规则把指定的外部样式单嵌入到现有的样式单中。这样可以根据多个较小、较容易理解的片断生成大样式单。导入的样式单使用.css扩展名。例如,下面的规则导入poetry.css文件。@import url(poetry.css);@import规则可在样式单后面指定媒体类型。如果没有指定媒体类型,@import规则就没有限制,并且可用于所有媒体类型。例如,下列规则导入printmedia.css文件。在这个样式单中的声明只适用于印刷媒体(print media)。@import url(printmedia.css)下面的这条规则导入continuous.css文件,可用于计算机显示器或电视机显示器。@import url(continuous.css) tv,导入到其他样式单中的样式单,在级联中的等级要比导入它的样式单低。例如,假设shakespeare.css为VERSE指定New York字体,而shakeprint.css为VERSE指定Times字体。如果将Shakespeare.css导入到shakeprint.css中,那么,诗句将以Times字体显示。13.2.6.3 @media可使用多种媒体把信息传递给读者,每种媒体都有其自己的习惯样式和格式。现在还不能使语音合成器较好地以单音调来阅读Shakespeare的诗句,如今可以吗?斜体字对于等宽终端也没有什么意义。CSS2可为显示在不同媒体中的相同元素指定不同的样式。例如,如果正文使用的是非衬线字体,则在屏幕上就更容易阅读,而如果正文是以衬线字体编写在纸上时,通常最容易阅读。可以将只准备用于一种媒体的多个样式规则放入一条指明媒体名的@media规则中。在一篇文档中,@media规则的数量与指定的媒体类型一样多。例如,下面的这些规则将根据是在纸上打印还是在显示器上显示把SONNET元素格式化成不同的样式。@media print {SONNET { font-size: font family: Times, serif }}@media screen {SONNET { font-size: 12font-family: New York, Times New Roman, serif }}@media screen, print {VERSE { line-height: 1.2 }前两条规则明确定义了为打印机和屏幕媒体类型所使用的样式。由于现在的计算机显示器的分辨率比现在的打印机低得多,所有显示在屏幕上的字体比打印输出要大,并且选择适用于屏幕的字体,这是很重要的。第三条规则提供适用于这两种媒体类型的样式。要为多个媒体类型同时指定样式指令,可简单地将媒体名列在@media规则指定符之后,并以逗号分开。支持CSS2的浏览器允许文档的作者提供决定特定类型媒体如何显示文档的规则。例如,当在屏幕上显示一文档时,与把它发送到打印机相比,很可能应用不同的规则。CSS2识别如下十种媒体类型:1.all:所有的设备2.aural(连续、有听):语音合成器3.braille(连续、可触知):用于有视觉障碍的盲文触觉反馈设备4.embossed(分页、可触摸):分页盲文打印机5.handheld(可视):PDA(手持机)和其他手持式设备如Windows CE掌上型电脑、Newton和Palm Pilot6.print(分页、可视):所有的打印、不透明材料7.projection(分页、可视):展示和幻灯片放映,可将它们直接从计算机上投影或打印在幻灯片上8.screen(连续、可视):点位图彩色计算机显示器9.tty(连续、可视):使用位置固定的、单色字符栅格的哑终端和旧的PC显示器10.tv(可听/可视):电视类设备,如低分辩率、模拟显示器、彩色设备浏览器软件不一定支持所有的这些类型。实际上,我知道没有任何一个设备支持所有的这些类型。但是,样式单设计者应该假设读者可能使用任何一类或所有类型的设备来浏览自己的内容。当然,各个媒体的特性也会随着时间的流逝而改变。我的第一个打印机是144dpi,可是,在21世纪,如此低分辨率的打印机就会很少见。另一方面,显示器最终也将达到300dpi或更高;而彩色打印机也迅速地为越来越多的用户所使用。有些属性只有特定的媒体类型才可用到。例如,pitch属性只用于有声媒体类型。尽管CSS2的确为@media规则提供一组当前值,但它未指定所有可包括的媒体类型。给出的媒体名与大小写无关。13.2.6.4 @font-face@font-faceURL@font-face* Identical Font Matching* Intelligent Font Matching* Font SynthesisWeb* Font DownloadURL* Font Rendering""CSS2ǖǎ┭≡@font-faceURL* * URL* @font-face@font-face@font-face { font-family: "Comic Sans";src: url(http://metalab.unc.edu/XML/fonts/comicsans))@font-face { font-family: "Jester"; font-weight:font-style: italic)TITLF { font-family: "Comic Sans")AUTHOR { font-family: "Jester", serif }TITLEComic SansAUTHORJesterCSS1WebComic SansJesterComicserifJester@font-faceCSS1CSS2@font-faceComic SansJesterURLComic SansComic SansJesterWeb@font-faceCSS1CSS213.2.6.5 @charset1Content-TypeHTTP"charset"2@charset3LINKHTMLcharset@charset@charset@charset@charset "character set name"character set nameIANA77-7Latin-1@charset "ISO 8859-1"7 “”13.2.7 XMLCSS2:after:before:after:beforecontent����STANZA\ASTANZA: after { content: "\A����\A" }content1open-quote2close-quote3no-open-quote4no-close-quoteopen-quoteclose-quote"
no-open-quoteno-close-quoteattr(X)Xcounter()counters()counter(name)counter(name,style)style13.2.8 13.2.8.1 :first-child:first-child13-1VERSE"So is it not with me as with that Muse"STANZASTANZA: first-child { font-style: bold }13.2.8.2 :link:visited:activeCSS1:link:visited:activeCSS2:link:visited:activeAUTHORAUTHOR: link { color: "red" }AUTHOR: visited { color: "gray" }AUTHOR: active { color: "lime" }13.2.8.3 :hover:hoverAUTHORAUTHOR: hover { color: "red" }AUTHOR13.2.8.4 :focus:focus:focus { text-style: "bold" }13.2.8.5 :lang():lang()XMLXMLxml:lang/encodingVERSEVERSE: lang(he) { direction: "rtl" }13.2.8.6 :right:left:first:right:left:first@page@page: right { margin-top: 5margin-bottom: 5margin-left: 7margin-right: 5cm }@page: left { margin-top: 5margin-bottom: 5margin-left: 5margin-right: 7cm }@page: first { margin top: 10margin-bottom: 10margin-left: 10margin-right: 10cm }13.3 @pageXMLCSS2CSS113.3.1 @pagesizesize12autoportraitlandscapeinherit@page { size: 8.5in 11in }autolandscapeportrait13.3.2 marginmargin-topmargin-bottommargin-rightmargin-leftCSS1118.51@page { size: 8.5in 11 margin: l.0in }13.3.3 CSS2markmark@page8.5×11marginpaddingmarkcropcrossinheritnone@pagecropcrossnonecropcross@page { mark: crop cross }13.3.4 @pagepage@page@pagepageSONNET@page rotated { size: landscape }SONNET { page: rotated }pageSONNET@page narrow { size: 9cm 18cm }@page rotated { size: landscaper }STANZA { page: narrow }SONNET { page: rotated }13.3.5 page-break-afterpage-break-beforepage-break-insideautoalwaysavoidleftrightSONNETSONNETSONNET { page-break-before:page-break-after:page break-inside: avoid }13.4 CSS2XMLdisplayCSS1cursorCSS213.4.1 CSS2displayCSS217Inlinetable-header-groupBlocktable-footer-grouplist-itemtable-rowrun-intable-column-groupCompacttable-columnMarkertable-cellTabletable-captioninline-tablenonetable-row-groupblockinlinetable13.4.1.1 inline objectCSS1blockCSS2inline13.4.1.2 block objectVERSESTANZAREFRAIN13-113-1AUTHORTITLEVERSE, STANZA, REFRAIN { display: block }13-1 Shakespeare13.4.1.3 nonenonedisplaydisplaynone13.4.1.4 compactrun-indisplaycompactrun-incompactcompactcompactrun-inrun-in13.4.1.5 displaymarkerXML:before:after13.4.1.6 CSS2HTMLXML10displayCSS21table6table-row2inline-table7table-column-group3table-row-group8table-column4table-header-group9table-cell5table-footer-group10table-captiondisplaytableinline-tabletable-captiontable-row-grouptable-header-grouptable-footer-grouptable-rowtable-column-grouptable-columnXMLtable-celldisplaySTANZAREFRAINVERSESTANZA { display: table }REFRAIN { display: table }VERSE { display: table-row }13.4.2 1min-width2max-width3min-height4max-height5height6widthmin-heightmin-widthWebheightwidthSTANZA { width: 100Height: 100px }13.4.3 overflowwidthheightoverflow1auto2hidden3scroll4visibleoverflowautooverflowhiddenoverflowscrolloverflowvisible13-2STANZAoverflowscrollSTANZA { overflow: scroll }13-2 Shakespeare13.4.4 clipclipoverflowvisibleCSS2cliprect(top, bottom, left, right)topbottomleftrightclipSTANZASTANZA { clip: rect(5px, 5px, 5px, 5px);overflow: auto }13.4.5 visibilityvisibility1visible2hidden3collapse4inheritvisibilityvisiblevisibilityhiddenvisibilityhiddendisplaynonevisibilitycollapsehiddendisplay:none13.4.6 cursor///cursorCSS2161auto2crosshair3default4hand5move6e-resize7ne-resize8nw-resize9n-resize10se-resize11sw-resize12s-resize13w-resize14textI-15wait16helpcursorVERSEVERSE { cursor: hand }URLVERSE { cursor: url("poetry.cur"), url("poetry.gif"), text }13.4.7 CSS2InternetsRGBRGBWebCSS2GammaGamma CorrectionsRGBGamma2.2CSS2Gamma2.2CSS213.4.7.1 colorredRGB#CC0000aquablackbluefuchsiagraygreenlimemaroonnavyolivepurpleredsilvertealwhiteyellowAUTHORRGB#FF0000TITLEVERSErgb( 255, 0, 0)AUTHOR { color: #FF0000 }TITLE { color: red }VERSE { color: rgb(255,0,0) }GammaGammaGammaGamma2.52.5xx2.501"Gamma"GammaGammaWebGammaUNIXGammaMacintoshPCPCMacMacPCInternetWebGamma13.4.7.2 CSS2GUI1213-2CSS2VERSEVERSE { color: WindowT background-color: Window }13-2 ActiveBorderActiveCaptionAppworkspaceBackgroundBottonFace13.5 CSSCSS2outline13.5.1 CSS2CSS13.5.1.1 outline-styleCSS1border-style111none2hidden3dotted4dashed5solid6double7grooved8ridge9inset10outset11inheritTITLEAUTHORREFRAINTITLE { outline-style: solid }AUTHOR { outline-style: outset }REFRAIN {outline-style: dashed }13.5.1.2 outline-width12margin-widthborder-width1thin0.50. 752medium13thick1.52STANZAVERSESTANZA { outline: thick }VERSE { outline: thin }13.5.1.3 outline-colorredRGB#FF0000invertTITLE { outline color: #FFCCCC;outline-style:outline width: thick }AUTHOR { outline color: #FF33CC }VERSE { outline-color: invert }13.5.1.4 outlineSTANZA { outline: thin dashed red }VERSE { outline: inset }13.5.2 CSS2position1static2relative3absolute4fixed13.5.2.1 relative positioningflowpositionrelativeleftrighttopbottomJavaScriptTITLE5065TITLE { position: top: 50 left: 65px }13.5.2.2 Absolute PositioningAUTHOR { position: top: 60 left: 140px }13.5.2.3 Fixed PositioningREFRAIN300140REFRAIN { position: top: 300 left: 140px }13.5.2.4 z-indexz-indexz-indexz-index2z-indexz-index13-2z-indexShakespeare13-313-3 z-index13-2Shakespearez-index#stl { position:top: 160left:200height: 100width:200overflow: auto,z-index: 2 }#st2 { position:top: 210left:50height: 100width:200overflow:z-index: 3 }#st3 { position:top: 210left:250height: 100width:200overflow:z-index: 4 }REFRAIN { position:top: 300left:200height: 100width:200overflow:z-index: 5 }&13.6 计数器和自动编号CSS2能自动地产生某些内容。例如,可使用样式单来创建这样的一个大纲:使用不同的编号系统对大纲的每个层次进行适当的缩进。counter-increment属性使计数器(counter)加1。content属性使用counter(id)或counter(id, list-style-type)函数作为值,插入指定计数器的当前值。最后,counter-reset属性将计数器设置归0。例如,假定从1开始要对诗中的每个VERSE进行计数,但在每个新的STANZA和REFRAIN中重新计数。可使用下面的规则达到此目的:VERSE { counter-increment: verse-num }STANZA { counter-reset: verse-num }REFRAIN { counter-reset: verse-num }VERSE:before { content: counter(verse-num) }可在counter-reset中的计数器名后,指定重设的整数,就可以重新将计数器设回到非0的数。例如,下面的规则将计数器设回到-10:VERSE { counter-reset: verse-num -10 }在counter-increment中的计数器名后,指定非1的整数作为递增量。例如,VERSE { counter-increment: verse-num -1 }最后,content属性可有不止一个计数器以及附加内容及其计数器。例如,下面的这些规则以1.1,1.2,1.3,...,2.1,2.2,2.3,...的形式对诗进行编号,第一编号表示节,第二个编号为诗句:VERSE {counter-increment: verse-num }STANZA {counter-reset: verse-num }STANZA {counter-increment: stanza-num }REFRAIN {counter-reset: verse-num }REFRAIN {counter-reset: stanza-num 0 }VERSE:before {content:counter(stanza-num) "." counter(verse-num)还可以使用非欧洲数字。counter()函数的第二个参数可用来指定不同的数字格式。现有的格式有disc、circle、square、decimal、decimal-leading-zero、lower-roman、upper-roman、lower-greek、lower-alpha、lower-latin、upper-alpha、upper-latin、hebrew、armenian、georgian、cjk-ideographic、hiragana、katakana、hiragana-iroha和katakana-iroha。例如,使用平假名的日文数字来对诗进行编号,可以这样编写:VERSE:before {content: counter(stanza-num, hiragana)"." counter(verse-num, hiragana) }13.7 有声样式单视觉缺陷的用户已经使用特殊的软件来阅读Web网页。将来,使用这种方法可能会扩大到视觉完好的人,他们一边浏览Web,同时一边使用电话进行交谈、一边驾驶汽车、一边洗涮盘子以及进行其他活动,而在这些过程中,眼睛和手用于不同的目的。CSS2支持一些新的特性,以便描述如何大声地读出元素,以及如何打印或在屏幕上显示。这些新特性将在下面的章节中讨论。清单13-3为一有声样式单,它使用指定方法,来讲出在普通与剧本有关的XML元素中找到的信息。清单13-3:用于剧本或十四行诗的有声样式单TITLE, AUTHOR, ACT, SCENE {voice-family:stress: 20;richness: 90;cue-before: url("ping.au")}.narrator { pause: 20cue-before: url("pop.au");cue-after: url("pop.au");azimuth: 30elevation: above }ACT { pause: 30ms 40ms } /* pause-before: 30pause-after: 40ms */SCENE { pause-after: l0ms } /* pause-after: l0ms */SCENE { cue-before: url("bell.aiff");cue-after: url("dong.wav") }MOOD.sad { play-during: url("violins.aiff") }MOOD.funereal { play-during: url("harp.wav") mix }MOOD.quiet { play-during: none }LINE.narrator { azimuth: behind } /* 180deg */LINE.part.romeo { voice-family: romeo, male }LINE.part.juliet { voice-family: juliet, female }LINE.part.hercules { azimuth: center-left }LINE.part.richard { azimuth: right }LINE.part.carmen { volume: x-soft }LINE.part.musel { elevation: 60deg }LINE.part.muse2 { elevation: 30deg }LINE.part.muse3 { elevation: level }13.7.1 说话属性speak(说话)属性确定是否用声音说出文本。如果是,应如何说。如果speak为normal值,则使用最佳的语音合成来说出此段文本。如果speak值为spell-out,则一个字母一个字母地拼出文本,这对于不常用或语音合成器可能无法处理的外来语来说,或许是很有用的。缺省值是none(例如,只是视觉上显示内容,而不管语言合成)。13.7.2 volume507501001silent2x-soft03soft25%4medium50%5loud75%6x-loud100%13.7.3 PauseCSS2pausepause-beforepause-afterpause-beforepause-afterpausepause-beforepause-afterpause-beforepause-afterSCENE { pause-after: 10ms }/* pause-before: 20ms: pause after: 20ms */.narrator { pause: 20ms }/* pause-before: 30 pause-after: 40ms */ACT { pause: 30ms 40ms }13.7.4 cueURLcue-beforecue-aftercuecue-beforecue-aftercue-beforecue-afterACT, SCENE { cue-before: url("ping.au") }.narrator { cue: url("pop.au") }SCFNF { cue before: url("bell.aiff");cue after: url("dong.wav") }13.7.5 play-duringURLmixrepeatmixplay-duringrepeatnone13.7.6 spatial310013.7.6.1 azimuthazimuthazimuthazimuth-360° 360° 0deg-360deg360deg180degCSSdeg ° 1center0deg2center-right20deg3right40deg4far-right60deg5right-side90deg6left-side270deg7far-left300deg8left320deg9center-left340degbehind180degleft behindl80deg - 320deg = -140deg220degleftwards20""rightwards2013.7.6.2 elevation-90° 90° 1below -90deg2level 0deg3above 90deg4higher 10deg5lower 10deg13.7.7 pitch13.7.7.1 speech-rate1x-slow802slow1203medium1802004fast3005x-fast500faster40slower4013.7.7.2 voice-family12malefemalechildAgnesBruceGood NewsHystericalVictoriaWhisperLINE.part.romeo { voice-family: Bruce, "Good News", male }13.7.7.3 pitchhertz120Hz200Hz1x-low2low3medium4high5x-highУ≡-lowlowmedium13.7.7.4 pitch-range01000505013.7.7.5 stress5013.7.7.6 richness""11005013.7.8 speak-punctuationspeak-numeral13.7.8.1 “The cat, Charm, ate all of his food.""The cat comma Charm comma ate all of his food period"speak-punctuationnone"The cat &pause& Charm &pause& ate all of his food &silence&”13.7.8.2 102"one hundred and two"speak-numeraldigitsone zero twospeak-numeralcontinuousspeak-numeralnone13.8 CSS2* CSS2CSS1inlineblock* Internet Explorer 5MozillaCSS2CSS2* CSS2* @rules@charset@page@font-face* CSS2:first-child:hover* CSS2:after:before* CSS2nonecompactrun-in* XML* CSS2CSS1CSS2WebXSLXMLXSL&
相关 第13章 级联样式单[二] 的文章:
您还没登陆呢,点这里共有 & 位网友发表了看法&&}

我要回帖

更多关于 ppt模板下载 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信