css对象化研究

一,概述:   CSS的对象化:(OO-CSS)OO的特点是继承,封装,多态,面向抽象编程。所谓OO的CSS,就是按照OO的一些思想来写CSS样式表。只有这种OO形式的CSS,才能够最大限度的发挥CSS的作用,让真正的CSS复用成为可能。   OO-CSS以下的一些特性,可以看作是面向对象的方式:

  • CSS的一个类(class)的属性,按照继承的方式来书写;

  • 将每一个独立的class,封装到不同的css文件;

  • 为某种经常出现的样式建模,抽象出一个相对通用的接口(如SimpleTable);

  • 在HTML中,让不同的组件,实现同一个样式接口,这就是多态的一种。

二,TABLE的对象化实践:v0.13   Table的参考实现。其格式完全符合XHTML1.1标准。如果需要使用类似的Table,可以制作同样的标准Table,制作一个接口(参见TableInterface.css)相同的CSS-Table,然后指定table的class即可。如果需要更改样式或换肤,只需要修改一处。

TableInterface.css
/************************************
  Name: OO-CSS Template: TABLE
  Version:0.12
  Date: 2004.05.25
  Author: icecloud
  Blog: http://www.nona.name
 ********************************** */
/* <table class="tableName">*/
.Table {
}
/***********************************************************/
/* <col class="colbegin"> <col class="colend">*/
.Table .colid {
}
.Table .colmain {
}
.Table .colothers {
}
.Table .colspecial {
}
/***********************************************************/
/* <caption> */
.Table caption {
}
/***********************************************************/
/* <thead> */
.Table thead {
}
/***********************************************************/
/* <tr><th><a class="text"></a></th> */
.Table thead th {
}
.Table thead th .text {
}
.Table thead th  .text:hover {
}
/* <tbody> */
.Table tbody {
}
/***********************************************************/
/* <tr><td><span class="text"></span></td></tr> */
.Table tbody tr {
}
.Table tbody td {	
}
.Table tbody td .text {
}
.Table tbody td .text:link {
}
.Table tbody td .text:visited {
}
.Table tbody td .text:hover {
}
.Table tbody td .cuttail {
}
.Table tbody td .description {
}
.Table tbody td .identify {
}
.Table tbody td .highlight {
}
.Table tbody td .operation {
}
.Table tbody td .operation:hover {
}
.Table tbody td .important { 
}
.Table tbody td .icon { 
}
/***********************************************************/
/* <tfoot><tr><td><span lass="text"></span></td></tr></tfoot> */
.Table tfoot {
}
.Table tfoot tr {
}
.Table tfoot tr td {
}
.Table tfoot td  .text {
}
.Table tfoot td  .text:link {
}
.Table tfoot td  .text:visited {
}
.Table tfoot td  .text:hover {
}</caption></table>
根据上面的模板制作的
  花哨表格风格[garishTable.css]
  简单表格风格[simpleTable.css]

btn.htc
/***********************************************************/
<PUBLIC:COMPONENT>
<PUBLIC:ATTACH EVENT="onmouseover" ONEVENT="_On_Over()" />
<PUBLIC:ATTACH EVENT="onmouseout" ONEVENT="_On_Out()" />
<SCRIPT language="jscript">
var _color=element.currentStyle.color;
var _bgcolor=element.currentStyle.backgroundColor;
function _On_Over()
{
	runtimeStyle.color="black";
	runtimeStyle.backgroundColor="#F8C2D9";
}
function _On_Out()
{
	runtimeStyle.color=_color;
	runtimeStyle.backgroundColor=_bgcolor;
}
</SCRIPT>
</PUBLIC:COMPONENT>

chagestyle.js
/***********************************************************/
function changeStyle(id,cls) {
	var obj = document.getElementById(id);
	obj.setAttribute("className",cls);
}

更新记录
    * 2004-05-11 v0.10 基本构想及实现
    * 2004-05-11 v0.11 修正错误,改用HTC实现动态背景
    * 2004-05-25 v0.12 缩减代码,增加项目界面
    * 2004-05-25 v0.13 增加修改样式,修改DTD为xhtml1.1
已知BUG
    * 更换样式后再次换回,因为expression,无法正确返回背景色
    * 更换样式后HTC失效

三,LIST的对象化实践:v0.10   用CSS定义LIST,用于代替TABLE进行数据的列表显示。如果不对列有要求的时候可以用LIST代替TABLE。

  • 2004-05-24 v0.10 基本构想及实现

pageLayout.css
************************************
  Name: OO-CSS Template: PageLayout
  Version:0.12
  Date: 2004.05.25
  Author: icecloud
  Blog: http://www.nona.name
 ********************************** */
body {
	font-size: medium;
	margin: 0;
} 
#container {
	background: #F0F8FF;
	padding: 1em;
} 
 #container div.object {
 	border:1px solid #005095;
 }
 #container div.name {
 	color: white;
	padding-left:1em;
	background: #005095;
	font-weight: bolder;
 }
 #container div.description {
	padding: 0.5em 0.5em 0.5em 1em;
	text-indent: 2em;
 }
   #container div.preface {
	padding: 0.5em 0.5em 0.5em 1em;
	text-align: left;
 }
  #container div.example {
	padding: 0.5em 0.5em 0.5em 1em;
	border-top: 1px dotted #005095;
	text-align: center;
 }
   #container div.update {
	padding: 0.5em 0.5em 0.5em 1em;
	border-top: 1px dotted #005095;
	text-align: left;
 }
   #container div.operation {
	padding: 0.5em 0.5em 0.5em 1em;
	border-top: 1px dotted #005095;
	text-align: center;
 } 
 .linebreak {
	clear: both;
	width: 100%;
	height: 0px;
	margin: 1px 0 1px 0;
 }

参考资料: OO的CSS尝试 http://soft.eesky.com/info/43090.htm