<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>days of linnchord &#187; CSS</title>
	<atom:link href="http://linnchord.net/archives/tag/css/feed" rel="self" type="application/rss+xml" />
	<link>http://linnchord.net</link>
	<description>南台静坐 : : :</description>
	<lastBuildDate>Thu, 03 Nov 2011 02:22:39 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.2.1</generator>
		<item>
		<title>CSS World Awards Winners 2006</title>
		<link>http://linnchord.net/archives/64.html</link>
		<comments>http://linnchord.net/archives/64.html#comments</comments>
		<pubDate>Mon, 17 Jul 2006 17:49:28 +0000</pubDate>
		<dc:creator>linnchord</dc:creator>
				<category><![CDATA[优美的]]></category>
		<category><![CDATA[软件开发]]></category>
		<category><![CDATA[CSS]]></category>

		<guid isPermaLink="false">http://linnchord.net/2006/07/css-world-awards-winners-2006/</guid>
		<description><![CDATA[cssmania.com搞了一个CSS World Awards，选出了几些采用css构建的web网站精品，很不错的网站。 Site Of Year UX Magazine Veerle&#8217;s Blog 2.0 Vitamin 更多内容可见http://awards.cssmania.com/2006/07/07/css-world-awards-winners-2006.php]]></description>
			<content:encoded><![CDATA[<p>cssmania.com搞了一个CSS World Awards，选出了几些采用css构建的web网站精品，很不错的网站。</p>
<p><strong>Site Of Year</strong></p>
<p><a href="http://www.uxmag.com/" target="_blank" class="en">UX Magazine</a></p>
<p><a href="http://www.uxmag.com/" target="_blank"><img src="http://linnchord.net/Upload/200607/uxmagcom.jpg"/></a></p>
<p><a href="http://veerle.duoh.com/" target="_blank" class="en">Veerle&#8217;s Blog 2.0</a></p>
<p><a href="http://veerle.duoh.com/" target="_blank"><img src="http://linnchord.net/Upload/200607/veerle_duohcom.jpg" /></a></p>
<p><a href="http://www.thinkvitamin.com/" target="_blank" class="en">Vitamin</a></p>
<p><a href="http://www.thinkvitamin.com/" target="_blank"><img src="http://linnchord.net/Upload/200607/thinkvitamincom.jpg" /></a></p>
<p>更多内容可见<a href="http://awards.cssmania.com/2006/07/07/css-world-awards-winners-2006.php" class="en" target="_blank">http://awards.cssmania.com/2006/07/07/css-world-awards-winners-2006.php</a></p>
]]></content:encoded>
			<wfw:commentRss>http://linnchord.net/archives/64.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>CSS设计器代码参考.3</title>
		<link>http://linnchord.net/archives/124.html</link>
		<comments>http://linnchord.net/archives/124.html#comments</comments>
		<pubDate>Mon, 17 May 2004 21:36:00 +0000</pubDate>
		<dc:creator>linnchord</dc:creator>
				<category><![CDATA[.net]]></category>
		<category><![CDATA[ASP.NET]]></category>
		<category><![CDATA[CSS]]></category>
		<category><![CDATA[javascript]]></category>
		<category><![CDATA[netsoft]]></category>

		<guid isPermaLink="false">http://linnchord.net/2004/05/css%e8%ae%be%e8%ae%a1%e5%99%a8%e4%bb%a3%e7%a0%81%e5%8f%82%e8%80%833/</guid>
		<description><![CDATA[界面交互 在XML中一共定义了 select/ input_ColorSelect / input_SizeSelect / input_BorderSelect（后3种为颜色/大小/边框输入模式）共4种输入模式，除select为直接选择外，其他在对应控件初始化的时候作为class属性赋值到控件中，类似class代码如下 /* 颜色输入模式input框的样式类 */ .input_ColorSelect { width:100px; font-family:Tahoma; behavior:url(htc/effColorSelect.htc); } 通过behavior属性，把该输入控件和相应的组件相关联，该组件effColorSelect.htc代码如下 &#60;public:ATTACH EVENT="onfocus" ONEVENT="getShow()"/&#62; &#60;public:METHOD NAME="getChange"/&#62; &#60;script LANGUAGE="JScript"&#62; function getShow() { element.blur(); //记录当前交互控件的ID effElement=element.id; //在页面中加载输入控件 ShowControl ("SelectColor"); } function getChange() { //当值发生变化时，对可视化样式元素赋值 SetAttribute(element.id,element.value); } &#60;/script&#62; 其他 设计器中的值输入模式框只是页面中的几个层，通过上面的htc组件触发显示出来，输入后再把值传入到样式属性控件中，同时也会设置可视化样式元素。 另外还需要注意的是，XML文档是可以自行扩展或缩减的，但是在实际应用中，不能完全依据CSS标准来定义，因为可视化元素的style属性会自动格式化。例如如果你在XML中定义border-bottom-width属性，在将值取出时会自动格式化为border-bottom，这样会造成设计器中控件不能匹配。我在MSDN没有查到相关文档，所以只有经过实际测试来验证。 OK,比较关键的代码已经差不多了……希望能对大家有所帮助。 参考 另外再列出部分技术参考，如果大家对其中的技术细节如HTC和XmlDom等有所疑问，可以再详细研究一下，也欢迎大家来和我交流。 MSDN关于JS操作XmlDom的文档 这是英文文档,网上没有看到比较详细的中文文档,好在不复杂,大家将就一下吧 (最近MSDN不知道什么毛病，经常访问有问题，如果无法访问，请先登录msdn，再输入地址浏览) 蓝色理想的HTC教程 网上也没看见比较全面的讲述，这个简单易学,基本概念清楚了。]]></description>
			<content:encoded><![CDATA[<p><strong>界面交互</strong></p>
<p>在XML中一共定义了 select/ input_ColorSelect / input_SizeSelect / input_BorderSelect（后3种为颜色/大小/边框输入模式）共4种输入模式，除select为直接选择外，其他在对应控件初始化的时候作为class属性赋值到控件中，类似class代码如下</p>
<pre>/* 颜色输入模式input框的样式类 */
.input_ColorSelect
{
	width:100px;
	font-family:Tahoma;
	behavior:url(htc/effColorSelect.htc);
}</pre>
<p>通过behavior属性，把该输入控件和相应的组件相关联，该组件effColorSelect.htc代码如下</p>
<pre>&lt;public:ATTACH EVENT=<span style="color: #0000ff;">"onfocus"</span> ONEVENT=<span style="color: #0000ff;">"getShow()"</span>/&gt;
&lt;public:METHOD NAME=<span style="color: #0000ff;">"getChange"</span>/&gt;

&lt;script LANGUAGE=<span style="color: #0000ff;">"JScript"</span>&gt;
<span style="color: #000080; font-weight: bold;">function</span> getShow()
{
element.blur();

<span style="color: #008800; font-style: italic;">//记录当前交互控件的ID </span>
effElement=element.id;

<span style="color: #008800; font-style: italic;">//在页面中加载输入控件</span>
ShowControl (<span style="color: #0000ff;">"SelectColor"</span>);
}

<span style="color: #000080; font-weight: bold;">function</span> getChange()
{
<span style="color: #008800; font-style: italic;">//当值发生变化时，对可视化样式元素赋值</span>
SetAttribute(element.id,element.value);
}
&lt;/script&gt;</pre>
<p><strong>其他</strong></p>
<p>设计器中的值输入模式框只是页面中的几个层，通过上面的htc组件触发显示出来，输入后再把值传入到样式属性控件中，同时也会设置可视化样式元素。</p>
<p>另外还需要注意的是，XML文档是可以自行扩展或缩减的，但是在实际应用中，不能完全依据CSS标准来定义，因为可视化元素的style属性会自动格式化。例如如果你在XML中定义border-bottom-width属性，在将值取出时会自动格式化为border-bottom，这样会造成设计器中控件不能匹配。我在MSDN没有查到相关文档，所以只有经过实际测试来验证。</p>
<p>OK,比较关键的代码已经差不多了……希望能对大家有所帮助。<br />
<strong>参考</strong></p>
<p>另外再列出部分技术参考，如果大家对其中的技术细节如HTC和XmlDom等有所疑问，可以再详细研究一下，也欢迎大家来和我交流。</p>
<p><a href="http://msdn.microsoft.com/library/default.asp?url=/library/en-us/xmlsdk/html/DOM_HDI_JS.asp" target="_blank">MSDN关于JS操作XmlDom的文档</a></p>
<p>这是英文文档,网上没有看到比较详细的中文文档,好在不复杂,大家将就一下吧 <img src='http://linnchord.net/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p>(最近MSDN不知道什么毛病，经常访问有问题，如果无法访问，请先登录msdn，再输入地址浏览)</p>
<p><a href="http://www.blueidea.com/tech/web/2003/1227.asp" target="_blank">蓝色理想的HTC教程 </a></p>
<p>网上也没看见比较全面的讲述，这个简单易学,基本概念清楚了。</p>
]]></content:encoded>
			<wfw:commentRss>http://linnchord.net/archives/124.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>CSS设计器代码参考.2</title>
		<link>http://linnchord.net/archives/125.html</link>
		<comments>http://linnchord.net/archives/125.html#comments</comments>
		<pubDate>Wed, 12 May 2004 11:31:00 +0000</pubDate>
		<dc:creator>linnchord</dc:creator>
				<category><![CDATA[.net]]></category>
		<category><![CDATA[ASP.NET]]></category>
		<category><![CDATA[CSS]]></category>
		<category><![CDATA[javascript]]></category>
		<category><![CDATA[netsoft]]></category>

		<guid isPermaLink="false">http://linnchord.net/2004/05/css%e8%ae%be%e8%ae%a1%e5%99%a8%e4%bb%a3%e7%a0%81%e5%8f%82%e8%80%832/</guid>
		<description><![CDATA[设计器初始化 Js脚本读取解析样式元素的style属性值，然后为设计器中构建的控件赋值 //设计器初始化 function Init() { //获得由服务器端赋值的样式属性值 var txt=document.all("DemoShow").style.cssText; if (txt.length>0) { var strClassName; //解析字符串 var aryClass = txt.split(/[:;]/); for( i in aryClass) { var str = aryClass[i].replace(/(^s*)&#124;(s*$)/g, ""); if(!(i%2==1)) { //当i为奇数时，解析的字符串应该为样式属性名称 strClassName=str; } else { //当i为偶数时，获得属性值 //属性名称即控件ID //判断该属性对应的控件是输入框还是选择列表 if(document.all(strClassName).type=="select-one") { //如果是选择列表通过setIndexOfValue函数设定选择项 setIndexOfValue(strClassName,str); } else { document.all(strClassName).value=str; } } i++; } } }]]></description>
			<content:encoded><![CDATA[<p><strong>设计器初始化</strong></p>
<p>Js脚本读取解析样式元素的style属性值，然后为设计器中构建的控件赋值 </p>
<p></p>
<pre>
//设计器初始化
function Init()
{
   //获得由服务器端赋值的样式属性值
   var txt=document.all("DemoShow").style.cssText;

   if (txt.length>0)
   {
      var strClassName;

      //解析字符串
      var aryClass = txt.split(/[:;]/);

      for( i in aryClass)
      {
         var str = aryClass[i].replace(/(^s*)|(s*$)/g, "");
         if(!(i%2==1))
         {
            //当i为奇数时，解析的字符串应该为样式属性名称
            strClassName=str;
         }
         else
         {
            //当i为偶数时，获得属性值

              //属性名称即控件ID
            //判断该属性对应的控件是输入框还是选择列表
            if(document.all(strClassName).type=="select-one")
            {

               //如果是选择列表通过setIndexOfValue函数设定选择项
               setIndexOfValue(strClassName,str);

            }
            else
            {
               document.all(strClassName).value=str;
            }
         }
         i++;
      }
   }
}
</pre>
]]></content:encoded>
			<wfw:commentRss>http://linnchord.net/archives/125.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>CSS设计器代码参考.1</title>
		<link>http://linnchord.net/archives/126.html</link>
		<comments>http://linnchord.net/archives/126.html#comments</comments>
		<pubDate>Mon, 10 May 2004 20:11:00 +0000</pubDate>
		<dc:creator>linnchord</dc:creator>
				<category><![CDATA[.net]]></category>
		<category><![CDATA[ASP.NET]]></category>
		<category><![CDATA[CSS]]></category>
		<category><![CDATA[javascript]]></category>
		<category><![CDATA[netsoft]]></category>

		<guid isPermaLink="false">http://linnchord.net/2004/05/css%e8%ae%be%e8%ae%a1%e5%99%a8%e4%bb%a3%e7%a0%81%e5%8f%82%e8%80%831/</guid>
		<description><![CDATA[这里对前面讲的CSS设计器系统关键代码作一些小结，如果没有看过前面文章请先参看前文 解析CSS样式文件 这段代码主要作用是把CSS文件分解为多个样式类，并按名称/文本属性生产ClassItem对象，并保存在一个ArrayList(cssList)中(C#代码) //读取文件 FileInfo theSource= new FileInfo (@m_filePath); StreamReader reader = theSource.OpenText(); //将文件流转化为文本 m_cssText = reader.ReadToEnd(); reader.Close(); //定义CSS文本分割符 char[] delimiters = new char[] { '{','}'}; int iCheck = 1;string className = null; //将文本转化为ArrayList foreach ( string substring in m_cssText.Split(delimiters)) { if (iCheck%2==0) //当iCHeck为偶数时,字符串为样式属性内容 //将解析的样式名和属性作为ClassItem对象存入cssList cssList.Add( new ClassItem ( className, substring.Trim() ) ); else //当iCHeck为奇数时,字符串为样式名,暂存 [...]]]></description>
			<content:encoded><![CDATA[<p>这里对前面讲的CSS设计器系统关键代码作一些小结，如果没有看过前面文章请先参看前文<br />
<strong>解析CSS样式文件</strong></p>
<p>这段代码主要作用是把CSS文件分解为多个样式类，并按名称/文本属性生产ClassItem对象，并保存在一个ArrayList(cssList)中(C#代码)</p>
<pre>
<span style="color: #008800; font-style: italic;">//读取文件</span>
 FileInfo theSource= <span style="color: #000080; font-weight: bold;">new</span> FileInfo (@m_filePath);
 StreamReader reader = theSource.OpenText();

 <span style="color: #008800; font-style: italic;">//将文件流转化为文本</span>
 m_cssText = reader.ReadToEnd();
 reader.Close();

 <span style="color: #008800; font-style: italic;">//定义CSS文本分割符</span>
 <span style="color: #000080; font-weight: bold;">char</span>[] delimiters = <span style="color: #000080; font-weight: bold;">new</span> <span style="color: #000080; font-weight: bold;">char</span>[] <span style="color: #000080; font-weight: bold;">{</span> <span style="color: #800080;">'{'</span>,<span style="color: #800080;">'}'</span><span style="color: #000080; font-weight: bold;">}</span>;
 <span style="color: #000080; font-weight: bold;">int</span> iCheck = <span style="color: #0000ff;">1</span>;<span style="color: #000080; font-weight: bold;">string</span> className = <span style="color: #000080; font-weight: bold;">null</span>;

 <span style="color: #008800; font-style: italic;">//将文本转化为ArrayList</span>
 <span style="color: #000080; font-weight: bold;">foreach</span> ( <span style="color: #000080; font-weight: bold;">string</span> substring <span style="color: #000080; font-weight: bold;">in</span> m_cssText.Split(delimiters))
 <span style="color: #000080; font-weight: bold;">{</span>
     <span style="color: #000080; font-weight: bold;">if</span> (iCheck%<span style="color: #0000ff;">2</span>==<span style="color: #0000ff;">0</span>)
         <span style="color: #008800; font-style: italic;">//当iCHeck为偶数时,字符串为样式属性内容 </span>
         <span style="color: #008800; font-style: italic;">//将解析的样式名和属性作为ClassItem对象存入cssList        </span>
         cssList.Add( <span style="color: #000080; font-weight: bold;">new</span> ClassItem ( className, substring.Trim() ) );

     <span style="color: #000080; font-weight: bold;">else</span>
         <span style="color: #008800; font-style: italic;">//当iCHeck为奇数时,字符串为样式名,暂存 </span>
         className = substring.Trim(); iCheck++;
 <span style="color: #000080; font-weight: bold;">}</span>
 </pre>
<p><strong>交互界面构建</strong></p>
<p>交互界面由Javascript通过XmlDocument读取Xml文件动态生成。</p>
<p>首先要读取XML文件，然后遍历整个XML文件，先遍历样式分类，再对每个分类遍历其下的所有样式属性。比较关键的代码是对XML的遍历，下面是对样式分类的遍历代码。</p>
<pre>
<span style="color: #008800; font-style: italic;">//LoadXML是XML文件读取函数</span>
<span style="color: #000080; font-weight: bold;">var</span> dom = LoadXML(<span style="color: #0000ff;">"css.xml"</span>);

<span style="color: #008800; font-style: italic;">//通过XPath和selectNodes方法返回一个XMLDOMNodeList对象</span>
<span style="color: #000080; font-weight: bold;">var</span> oNode = dom.selectNodes(<span style="color: #0000ff;">"//Category/Name"</span>);

<span style="color: #008800; font-style: italic;">//获取该对象长度，即XML文档中该路径节点的数量</span>
<span style="color: #000080; font-weight: bold;">var</span> intCategory = oNodes.length;
<span style="color: #000080; font-weight: bold;">for</span> (i=<span style="color: #0000ff;">0</span>; i&amp;lt;intCategory; i++)
{
<span style="color: #008800; font-style: italic;">//获取集合中的节点</span>
oNode = oNodes.nextNode;

<span style="color: #000080; font-weight: bold;">if</span> (oNode != <span style="color: #000080; font-weight: bold;">null</span>)
{
<span style="color: #008800; font-style: italic;">//样式分类界面构建代码-略 ……</span>
}
}
</pre>
<p>样式输入控件构建函数，该函数作用是根据XPath路径查询XML定义，生成交互控件</p>
<pre>
<span style="color: #000080; font-weight: bold;">function</span> BuildInput ( path )
{
<span style="color: #000080; font-weight: bold;">var</span> str=<span style="color: #0000ff;">""</span>;
<span style="color: #000080; font-weight: bold;">var</span> aNode=<span style="color: #000080; font-weight: bold;">null</span>;
<span style="color: #000080; font-weight: bold;">var</span> attValue=<span style="color: #000080; font-weight: bold;">null</span>;

<span style="color: #008800; font-style: italic;">//通过selectSingleNode返回符合条件的第一个节点 </span>
<span style="color: #000080; font-weight: bold;">var</span> actNode = dom.selectSingleNode(path+<span style="color: #0000ff;">"ActionType"</span>);
<span style="color: #000080; font-weight: bold;">var</span> nameNode = dom.selectSingleNode(path+<span style="color: #0000ff;">"CssName"</span>);

<span style="color: #008800; font-style: italic;">//如果属性为选择输入，则读取SelectItems，并构建select控件 </span>
<span style="color: #000080; font-weight: bold;">if</span> (actNode.text==<span style="color: #0000ff;">"select"</span>)
{
str += <span style="color: #0000ff;">"&lt;select id='"</span>+nameNode.text+<span style="color: #0000ff;">"' name='"</span>+nameNode.text+<span style="color: #0000ff;">"'class='eSelect'&gt;"</span>;

<span style="color: #008800; font-style: italic;">//查询该项的所有选择列表项 </span>
<span style="color: #000080; font-weight: bold;">var</span> itemsNodes = dom.selectNodes (path+<span style="color: #0000ff;">"SelectItems/Item"</span>);
str += <span style="color: #0000ff;">"&lt;option value='-1'&gt;未设置&lt;/option&gt;"</span>;
<span style="color: #000080; font-weight: bold;">for</span> (ii=<span style="color: #0000ff;">0</span>;ii&lt;itemsNodes.length;ii++){
aNode = dom.selectSingleNode (path+<span style="color: #0000ff;">"SelectItems/Item["</span>+ii+<span style="color: #0000ff;">"]"</span>);

<span style="color: #008800; font-style: italic;">//如果该项含有Name属性则在列表中显示Name属性值</span>
attValue = aNode.getAttribute(<span style="color: #0000ff;">"Name"</span>)
<span style="color: #000080; font-weight: bold;">var</span> txtNode = dom.selectSingleNode (path+<span style="color: #0000ff;">"SelectItems/Item["</span>+ii+<span style="color: #0000ff;">"]"</span>);
<span style="color: #000080; font-weight: bold;">if</span> (attValue==<span style="color: #000080; font-weight: bold;">null</span>)
str += <span style="color: #0000ff;">"&lt;option value='"</span>+txtNode.text+<span style="color: #0000ff;">"'&gt;"</span>+txtNode.text+<span style="color: #0000ff;">"&lt;/option&gt;"</span>;
<span style="color: #000080; font-weight: bold;">else</span>
str += <span style="color: #0000ff;">"&lt;option value='"</span>+txtNode.text+<span style="color: #0000ff;">"'&gt;"</span>+attValue+<span style="color: #0000ff;">"&lt;/option&gt;"</span>;
}
str += <span style="color: #0000ff;">"&lt;/select&gt;"</span>;
}
<span style="color: #000080; font-weight: bold;">else</span>
<span style="color: #008800; font-style: italic;">//如果属性为其他模式，则构建input输入，设置class属性为ActionType</span>
{
str = <span style="color: #0000ff;">"&lt;input name='"</span>+nameNode.text+<span style="color: #0000ff;">"' id='"</span>+nameNode.text+<span style="color: #0000ff;">"' class='"</span>+actNode.text+<span style="color: #0000ff;">"'&gt;"</span>;
}

<span style="color: #000080; font-weight: bold;">return</span>(str);
}
</pre>
]]></content:encoded>
			<wfw:commentRss>http://linnchord.net/archives/126.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>CSS设计器之XML样式属性定义</title>
		<link>http://linnchord.net/archives/130.html</link>
		<comments>http://linnchord.net/archives/130.html#comments</comments>
		<pubDate>Tue, 27 Apr 2004 19:52:00 +0000</pubDate>
		<dc:creator>linnchord</dc:creator>
				<category><![CDATA[设计]]></category>
		<category><![CDATA[软件开发]]></category>
		<category><![CDATA[CSS]]></category>
		<category><![CDATA[netsoft]]></category>
		<category><![CDATA[xml]]></category>

		<guid isPermaLink="false">http://linnchord.net/2004/04/css%e8%ae%be%e8%ae%a1%e5%99%a8%e4%b9%8bxml%e6%a0%b7%e5%bc%8f%e5%b1%9e%e6%80%a7%e5%ae%9a%e4%b9%89/</guid>
		<description><![CDATA[CSS样式中包含很多属性，设计器中当然要包含相应的属性类型；那么这些属性信息从哪里来呢？ 采用XML定义是一种很自然就会想到的方式。 经常使用DW和VS.NET，所以在交互设计上采用了类似的模式；先将样式属性分类，再设置详细属性。 CSS属性是比较复杂的，如果要完全按照DW或VS.NET的模式，实现会比较复杂。为了简化，我把值的输入简化为两种形式，选择和文本输入。对于选择，直接在XML文件中定义；对于文本输入，抽象几种输入类型，在设计器生成时根据类型设定不同的HTC组件操作。这样就将一些复杂的属性输入封装到 HTC组件中，整个构架就简洁起来。 XML文件描述 首先是属性分类 &#60;cssdesign&#62; &#60;category&#62; &#60;name&#62;文字&#60;/name&#62; &#60;style&#62; &#60;name&#62;字体&#60;/name&#62; ...... &#60;/style&#62; &#60;style&#62; &#60;name&#62;样式&#60;/name&#62; ...... &#60;/style&#62; ...... &#60;/category&#62; &#60;category&#62; &#60;name&#62;背景&#60;/name&#62; &#60;style&#62; &#60;name&#62;颜色&#60;/name&#62; ...... &#60;/style&#62; ...... &#60;/category&#62; &#60;/cssdesign&#62; 系统分为文字、背景、文本、位置、布局、方框、边框和其他，每种类型有一个Name子元素和若干Style子元素。 每个Style子元素表示一个Style属性，结构如下 &#60;style&#62; &#60;name&#62;字体&#60;/name&#62; &#60;cssName&#62;font-family&#60;/cssName&#62; &#60;actionType&#62;select&#60;/actionType&#62; &#60;selectItems&#62; &#60;item&#62;verdana,arial&#60;/item&#62; &#60;item Name="宋体"&#62;SimSun&#60;/item&#62; &#60;item Name="黑体"&#62;SimHei&#60;/item&#62; &#60;/selectItems&#62; &#60;/style&#62; &#60;style&#62; &#60;name&#62;大小&#60;/name&#62; &#60;cssName&#62;font-size&#60;/cssName&#62; &#60;actionType&#62;select&#60;/actionType&#62; &#60;selectItems&#62; &#60;item&#62;12px&#60;/item&#62; &#60;item&#62;14px&#60;/item&#62; &#60;item&#62;9px&#60;/item&#62; &#60;/selectItems&#62; &#60;/style&#62; &#60;style&#62; &#60;name&#62;颜色&#60;/name&#62; [...]]]></description>
			<content:encoded><![CDATA[<p>CSS样式中包含很多属性，设计器中当然要包含相应的属性类型；那么这些属性信息从哪里来呢？</p>
<p>采用XML定义是一种很自然就会想到的方式。</p>
<p>经常使用DW和VS.NET，所以在交互设计上采用了类似的模式；先将样式属性分类，再设置详细属性。</p>
<p>CSS属性是比较复杂的，如果要完全按照DW或VS.NET的模式，实现会比较复杂。为了简化，我把值的输入简化为两种形式，选择和文本输入。对于选择，直接在XML文件中定义；对于文本输入，抽象几种输入类型，在设计器生成时根据类型设定不同的HTC组件操作。这样就将一些复杂的属性输入封装到 HTC组件中，整个构架就简洁起来。</p>
<p>XML文件描述</p>
<p>首先是属性分类</p>
<pre>
<span style="color: #000080; font-weight: bold;">&lt;cssdesign&gt;</span>
<span style="color: #000080; font-weight: bold;">&lt;category&gt;</span>
<span style="color: #000080; font-weight: bold;">&lt;name&gt;</span>文字<span style="color: #000080; font-weight: bold;">&lt;/name&gt;</span>
<span style="color: #000080; font-weight: bold;">&lt;style&gt;</span>
<span style="color: #000080; font-weight: bold;">&lt;name&gt;</span>字体<span style="color: #000080; font-weight: bold;">&lt;/name&gt;</span>
......
<span style="color: #000080; font-weight: bold;">&lt;/style&gt;</span>
<span style="color: #000080; font-weight: bold;">&lt;style&gt;</span>
<span style="color: #000080; font-weight: bold;">&lt;name&gt;</span>样式<span style="color: #000080; font-weight: bold;">&lt;/name&gt;</span>
......
<span style="color: #000080; font-weight: bold;">&lt;/style&gt;</span>
......
<span style="color: #000080; font-weight: bold;">&lt;/category&gt;</span>
<span style="color: #000080; font-weight: bold;">&lt;category&gt;</span>
<span style="color: #000080; font-weight: bold;">&lt;name&gt;</span>背景<span style="color: #000080; font-weight: bold;">&lt;/name&gt;</span>
<span style="color: #000080; font-weight: bold;">&lt;style&gt;</span>
<span style="color: #000080; font-weight: bold;">&lt;name&gt;</span>颜色<span style="color: #000080; font-weight: bold;">&lt;/name&gt;</span>
......
<span style="color: #000080; font-weight: bold;">&lt;/style&gt;</span>
......
<span style="color: #000080; font-weight: bold;">&lt;/category&gt;</span>
<span style="color: #000080; font-weight: bold;">&lt;/cssdesign&gt;</span>
</pre>
<p>系统分为文字、背景、文本、位置、布局、方框、边框和其他，每种类型有一个Name子元素和若干Style子元素。</p>
<p>每个Style子元素表示一个Style属性，结构如下</p>
<pre>
<span style="color: #000080; font-weight: bold;">&lt;style&gt;</span>
<span style="color: #000080; font-weight: bold;">&lt;name&gt;</span>字体<span style="color: #000080; font-weight: bold;">&lt;/name&gt;</span>
<span style="color: #000080; font-weight: bold;">&lt;cssName&gt;</span>font-family<span style="color: #000080; font-weight: bold;">&lt;/cssName&gt;</span>
<span style="color: #000080; font-weight: bold;">&lt;actionType&gt;</span>select<span style="color: #000080; font-weight: bold;">&lt;/actionType&gt;</span>
<span style="color: #000080; font-weight: bold;">&lt;selectItems&gt;</span>
<span style="color: #000080; font-weight: bold;">&lt;item&gt;</span>verdana,arial<span style="color: #000080; font-weight: bold;">&lt;/item&gt;</span>
<span style="color: #000080; font-weight: bold;">&lt;item</span> <span style="color: #ff0000;">Name=</span><span style="color: #0000ff;">"宋体"</span><span style="color: #000080; font-weight: bold;">&gt;</span>SimSun<span style="color: #000080; font-weight: bold;">&lt;/item&gt;</span>
<span style="color: #000080; font-weight: bold;">&lt;item</span> <span style="color: #ff0000;">Name=</span><span style="color: #0000ff;">"黑体"</span><span style="color: #000080; font-weight: bold;">&gt;</span>SimHei<span style="color: #000080; font-weight: bold;">&lt;/item&gt;</span>
<span style="color: #000080; font-weight: bold;">&lt;/selectItems&gt;</span>
<span style="color: #000080; font-weight: bold;">&lt;/style&gt;</span>
<span style="color: #000080; font-weight: bold;">&lt;style&gt;</span>
<span style="color: #000080; font-weight: bold;">&lt;name&gt;</span>大小<span style="color: #000080; font-weight: bold;">&lt;/name&gt;</span>
<span style="color: #000080; font-weight: bold;">&lt;cssName&gt;</span>font-size<span style="color: #000080; font-weight: bold;">&lt;/cssName&gt;</span>
<span style="color: #000080; font-weight: bold;">&lt;actionType&gt;</span>select<span style="color: #000080; font-weight: bold;">&lt;/actionType&gt;</span>
<span style="color: #000080; font-weight: bold;">&lt;selectItems&gt;</span>
<span style="color: #000080; font-weight: bold;">&lt;item&gt;</span>12px<span style="color: #000080; font-weight: bold;">&lt;/item&gt;</span>
<span style="color: #000080; font-weight: bold;">&lt;item&gt;</span>14px<span style="color: #000080; font-weight: bold;">&lt;/item&gt;</span>
<span style="color: #000080; font-weight: bold;">&lt;item&gt;</span>9px<span style="color: #000080; font-weight: bold;">&lt;/item&gt;</span>
<span style="color: #000080; font-weight: bold;">&lt;/selectItems&gt;</span>
<span style="color: #000080; font-weight: bold;">&lt;/style&gt;</span>
<span style="color: #000080; font-weight: bold;">&lt;style&gt;</span>
<span style="color: #000080; font-weight: bold;">&lt;name&gt;</span>颜色<span style="color: #000080; font-weight: bold;">&lt;/name&gt;</span>
<span style="color: #000080; font-weight: bold;">&lt;cssName&gt;</span>background<span style="color: #000080; font-weight: bold;">&lt;/cssName&gt;</span>
<span style="color: #000080; font-weight: bold;">&lt;actionType&gt;</span>input_ColorSelect<span style="color: #000080; font-weight: bold;">&lt;/actionType&gt;</span>
<span style="color: #000080; font-weight: bold;">&lt;/style&gt;</span>
</pre>
<p><strong>Name</strong>为该属性的描述名称，在设计器中为文本描述；</p>
<p><strong>CssName</strong>为属性名，在设计器中即输入字段的ID；</p>
<p><strong>ActionType</strong>为属性设置方法，在设计器中为输入字段的样式类名，该样式中含有Behavior属性，制定HTC组件；</p>
<p><strong>SelectItems</strong>为选择项，如果ActionType为Select，将会在此列出选择项；其子元素Item如果含有Name属性，将显示在设计器中，否则直接显示该元素的文本内容</p>
<p><strong>框架图</strong></p>
<p><a href="http://linnchord.net/upload/x2blog/img/cssxml.gif" target="_blank"><img src="http://linnchord.net/upload/x2blog/img/cssxml_s.gif" border="0" alt="" /></a></p>
<p><a href="http://linnchord.net/upload/x2blog/code/css.rar">XML源文件</a></p>
]]></content:encoded>
			<wfw:commentRss>http://linnchord.net/archives/130.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>CSS设计器之样式表操作类</title>
		<link>http://linnchord.net/archives/131.html</link>
		<comments>http://linnchord.net/archives/131.html#comments</comments>
		<pubDate>Mon, 26 Apr 2004 16:20:00 +0000</pubDate>
		<dc:creator>linnchord</dc:creator>
				<category><![CDATA[.net]]></category>
		<category><![CDATA[CShap]]></category>
		<category><![CDATA[CSS]]></category>
		<category><![CDATA[netsoft]]></category>

		<guid isPermaLink="false">http://linnchord.net/2004/04/css%e8%ae%be%e8%ae%a1%e5%99%a8%e4%b9%8b%e6%a0%b7%e5%bc%8f%e8%a1%a8%e6%93%8d%e4%bd%9c%e7%b1%bb/</guid>
		<description><![CDATA[为了操作样式表，设计了一个简单的样式表操作类。功能主要是解析操作指定样式表文件，实现对样式类的添加、修改、删除、保存。 机制：读取Web服务器上某样式表文件,将文本转化为一个ArrayList，数组元素为自定义的ClassItem对象,包含Name和Text属性（Name即样式名称，Text即样式的内容）；然后通过对ArrayList操作，控制样式，最后保存。 由于在服务器段我们不作具体样式定义，因此该类只操作到样式类级别，不涉及样式属性和值。 下面提供该类的UML图 ClassItem 是一个结构体，仅包含两个属性；]]></description>
			<content:encoded><![CDATA[<p>为了操作样式表，设计了一个简单的样式表操作类。功能主要是解析操作指定样式表文件，实现对样式类的添加、修改、删除、保存。 </p>
<p>机制：读取Web服务器上某样式表文件,将文本转化为一个ArrayList，数组元素为自定义的ClassItem对象,包含Name和Text属性（Name即样式名称，Text即样式的内容）；然后通过对ArrayList操作，控制样式，最后保存。 </p>
<p>由于在服务器段我们不作具体样式定义，因此该类只操作到样式类级别，不涉及样式属性和值。 </p>
<p>下面提供该类的UML图 ClassItem 是一个结构体，仅包含两个属性； </p>
<p><img src="http://linnchord.net/upload/x2blog/img/CssControlClass.gif" alt="" /></p>
]]></content:encoded>
			<wfw:commentRss>http://linnchord.net/archives/131.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

