2009年5月19日星期二

DIV+CSS网页布局常用的方法与技巧

DIV+CSS网页布局常用的方法与技巧


CSS布局常用的方法

  float:none|left|right
  取值:
  none:默认值。对象不飘浮
  left:文本流向对象的右边
  right:文本流向对象的左边

  它是怎样工作的,看个一行两列的例子

  xhtml代码:
  Example Source Code

  <div id="wrap">
  <div id="column1">这里是第一列</div>
  <div id="column2">这里是第二列</div>
  <div class="clear"></div> /*这是违背web标准意图的,只是想说明在它下面的元素需要清除浮动*/
  </div>

  CSS代码:
  Example Source Code

  #wrap{width:100;height:auto;}
  #column1{float:left;width:40;}
  #column2{float:right;width:60;}
  .clear{clear:both;}


  position:static|absolute|fixed|relative

  取值:
  static:�默认值。无特殊定位,对象遵循HTML定位规则
  absolute:�将对象从文档流中拖出,使用left,right,top,bottom等属性相对于其最接近的一个最有定位设置的父对象进行绝对定位。如果不存在这样的父对象,则依据body对象。而其层叠通过z-index属性定义
  fixed:�未支持。对象定位遵从绝对(absolute)方式。但是要遵守一些规范
  relative:�对象不可层叠,但将依据left,right,top,bottom等属性在正常文档流中偏移位置

  它来实现一行两列的例子

  xhtml代码:
  Example Source Code

  <div id="wrap">
  <div id="column1">这里是第一列</div>
  <div id="column2">这里是第二列</div>
  </div>

  CSS代码:
  Example Source Code [www.52css.com]
  #wrap{position:relative;/*相对定位*/width:770px;}
  #column1{position:absolute;top:0;left:0;width:300px;}
  #column2{position:absolute;top:0;right:0;width:470px;}

  他们的区别在哪?

  显然,float是相对定位的,会随着浏览器的大小和分辨率的变化而改变,而position就不行了,所以一般情况下还是float布局!

CSS常用布局实例

  单行一列
  Example Source Code

  body{margin:0px;padding:0px;text-align:center;}
  #content{margin-left:auto;margin-right:auto;width:400px;}

  两行一列
  Example Source Code

  body{margin:0px;padding:0px;text-align:center;}
  #content-top{margin-left:auto;margin-right:auto;width:400px;}
  #content-end{margin-left:auto;margin-right:auto;width:400px;}

  三行一列
  Example Source Code

  body{margin:0px;padding:0px;text-align:center;}
  #content-top{margin-left:auto;margin-right:auto;width:400px;width:370px;}
  #content-mid{margin-left:auto;margin-right:auto;width:400px;}
  #content-end{margin-left:auto;margin-right:auto;width:400px;}

  单行两列
  Example Source Code

  #bodycenter{width:700px;margin-right:auto;margin-left:auto;overflow:auto;}
  #bodycenter#dv1{float:left;width:280px;}
  #bodycenter#dv2{float:right;width:420px;}

  两行两列
  Example Source Code

  #header{width:700px;margin-right:auto;margin-left:auto;overflow:auto;}
  #bodycenter{width:700px;margin-right:auto;margin-left:auto;overflow:auto;}
  #bodycenter#dv1{float:left;width:280px;}
  #bodycenter#dv2{float:right;width:420px;}

  三行两列
  Example Source Code

  #header{width:700px;margin-right:auto;margin-left:auto;}
  #bodycenter{width:700px;margin-right:auto;margin-left:auto;}
  #bodycenter#dv1{float:left;width:280px;}
  #bodycenter#dv2{float:right;width:420px;}
  #footer{width:700px;margin-right:auto;margin-left:auto;overflow:auto;clear:both;}

  单行三列
  绝对定位

  Example Source Code

  #left{position:absolute;top:0px;left:0px;width:120px;}
  #middle{margin:0px190px0px190px;}
  #right{position:absolute;top:0px;right:0px;width:120px;}

  float定位一
  xhtml代码:
  Example Source Code

  <div id="wrap">
  <div id="column">
  <div id="column1">这里是第一列</div>
  <div id="column2">这里是第二列</div>
  <div class="clear"></div>/*用法web标准不建议,但是记住下面元素需要清除浮动*/
  </div>
  <divid="column3">这里是第三列</div>
  <divclass="clear"></div>/*用法web标准不建议,但是记住下面元素需要清除浮动*/
  </div>


  CSS代码:
  Example Source Code

  #wrap{width:100;height:auto;}
  #column{float:left;width:60;}
  #column1{float:left;width:30;}
  #column2{float:right;width:30;}
  #column3{float:right;width:40;}
  .clear{clear:both;}

  float定位二

  xhtml代码
  Example Source Code

  <div id="center"class="column">
  <h1>Thisisthemaincontent.</h1>
  </div>
  <div id="left"class="column">
  <h2>Thisistheleftsidebar.</h2>
  </div>
  <div id="right"class="column">
  <h2>Thisistherightsidebar.</h2>
  </div>

  CSS代码:
  Example Source Code

  body{
  margin:0;
  padding-left:200px;/*LCfullwidth*/
  padding-right:190px;/*RCfullwidth CCpadding*/
  min-width:200px;/*LCfullwidth CCpadding*/
  }
  .column{
  position:relative;
  float:left;
  }
  #center{
  width:100;
  }
  #left{
  width:200px;/*LCwidth*/
  right:200px;/*LCfullwidth*/
  margin-left:-100;
  }
  #right{
  width:190px;/*RCwidth*/
  margin-right:-100;
  }
--
道不远人,人自远。

设计时如何把握网页布局

设计时如何把握网页布局

最开始,网页呈现在你面前的时侯,它就好像一张白纸, 它需要你任意挥洒你的设计才思。在开始的时侯,你需要明白,虽然你能控制一切你所能控制的东西,但假如你知道什么是一种约定俗成的标准或者说大多数访问者 的浏览习惯,那么你可以在此基础上加上自己的东西。你当然也可以创造出自己的设计方案,但如果你是初学者,那么最好明白网页布局的基本概念。

1.页面尺寸

由于页面尺寸和显示器大小及分辨率有关系,网页的局限性就在于你无法突破显示器的范围,而且 因为浏览器也将占去不少空间,留下给你的页面范围变得越来越小。一般分辨率在800x600的情况下,页面的显示尺寸为:780x428个象素;分辨率在 640x480的情况下,页面的显示尺寸为:620X311个象素;分辨率在1024X768的情况下,页面的显示尺寸为:1007x600。从以上数据 可以看出,分辨率越高页面尺寸越大。

浏览器的工具栏也是影响页面尺寸的原因。一般目前的浏览器的工具栏都可以取消或者增加,那么当你显示全部的工具栏时,和关闭全部工具栏时,页面的尺寸是不一样的。

在网页设计过程中,向下拖动页面是惟一给网页增加更多内容(尺寸)的方法。但我想提醒大家除非你能肯定站点的内容能吸引大家拖动,否则不要让访问者拖动页面超过三屏。如果需要在同一页面显示超过三屏的内容,那么你最好能在上面做上页面内部连接,方便访问者浏览。

2.整体造型

什么是造型,造型就是创造出来的物体形象。这里是指页面的整体形象,这种形象应该是一个整体,图形与文本的接合应该是层叠有序。虽然,显示器和浏览器都是矩形,但对于页面的造型,你可以充分运用自然界中的其它形状以及它们的组合:矩形,圆形,三角形,菱形等。

对于不同的形状,它们所代表的意义是不同的。比如矩形代表着正式,规则,你注意到很多ICP 和政府网页都是以矩形为整体造型;圆形带表着柔和,团结,温暖,安全等,许多时尚站点喜欢以圆形为页面整体造型;三角形代表着力量,权威,牢固,侵略等, 许多大型的商业站点为显示它的权威性常以三角形为页面整体造型;菱形代表着平衡,协调,公平,一些交友站点常运用菱形作为页面整体造型。虽然不同形状带表 着不同意义,但目前的网页制作多数是接合多个图形加以设计,在这其中某种图形的构图比例可能占的多一些。

3.页头

页头又可称之为页眉,页眉的作用是定义页面的主题。比如一个站点的名字多数都显示在页眉里。这样,访问者能很快知道这个站点是什么内容。页头是整个页面设计的关键,它将牵涉到下面的更多设计和整个页面的协调性。页头常放置站点名字的图片和公司标志以及旗帜广告。

4.文本

文本在页面中出现都数以行或者块(段落)出现,它们的摆放位置决定者整个页面布局的可视性。在过去因为页面制作技术的局限,文本放置的位置的灵活性非常小,而随着DHTML的兴起,文本已经可以按照自己的要求放置到页面的任何位置。

5.页脚

页脚和页头相呼应。页头是放置站点主题的地方,而页脚是放置制作者或者公司信息的地方。你能看到,许多制作信息都是放置在页脚的。

6.图片

图片和文本是网页的两大构成元素,却一不可。如何处理好图片和文本的位置成了整个页面布局的关键。而你的布局思维也将体现在这里。

7.多媒体

除了文本和图片,还有声音,动画,视频等等其它媒体。虽然它们不是经常能被利用到,但随着动态网页的兴起,它们在网页布局上也将变得更重要。



--
道不远人,人自远。

2009年5月14日星期四

centos 感觉不错~

晚上刻碟安装了centos5.3,用起来感觉真的不错哈!哈哈~ 输入法有点弱。其他的开发环境的配置暂时没去动他,我想不会太难的!明天去买书学习学习下!对自己投资吧!

--
道不远人,人自远。

2009年5月13日星期三

几种主流语言的泛型比较

几种主流语言的泛型比较
    第一种支持泛型的语言是ADA(一种Pascal语言的后代,差不多是军方的专用语言).而把泛型发扬光大的的是C++(主要是借助泛型实现的模板).
    作为一种提高代码重用的技术,泛型被越来越多的语言所支持.
    java,C#,Delphi都开始先后支持了泛型技术.我就在这里比较和评论一下C++,java,C#,Delphi几种泛型技术的特点.
   
                  实现时机 是否会生成参考类    效率       约束                     兼容性           泛型运行时信息            
    C++            编译时         会              高       基本算没有                  好               基本算没有
                                                     
    Java           编译时         不会            高       有                               好                 很弱
   
   
    C#             运行时         不会           一般     有                              一般                强
   
   
    Delphi         编译时         会              高       有                                好                  强
   
先从实现的时机是否生成参考类来说.
C++主要是通过源代码替换机制来实现泛型的.也就是说C++的泛型和宏差不多. 也就是说会为每个泛型实例生成参考类.
Java主要是通过编译器把泛型类全部变成object来实现的.而泛型类的方法是编译通过打包等技术进行类型转换的.例如List<T>实际上永远都是List<object>,不会生成新的参考类.
C#则主要是通过在虚拟机中加入泛型技术来达到对泛型的支持的.List<T>在虚拟机中只是List<T>.不会生成参考类. 只有在JIT编译的时候才会生成参考类的机器代码.当然T的类型不一样具体在虚拟机中的实现也不一样.当T是值类型的时候会生成参考类.但我们这里主要讨 论大部分情况,.NET中多数情况下用引用类型的时候多得多.
Delphi在编译角度讲则更像C++,是通过代码替换机制生成参考类来实现泛型的.但Delphi的类型限制更严格.没有指定类型的约束的时候是不允许使用特定的方法或者操作符等的.具体在后面的约束中讲.  


效率方面
C++的效率就高一些.编译期间生成原生代码效率和正常手写代码一样高.
java的效率也比较高.生成的代码和手写代码几乎也是一样的.但打包拆包的类型转换会影响一点效率.
C#编译速度就快一些.但执行的时候要JIT编译器来处理泛型.会在一定程度上影响执行效率.
Delphi和C++相似.效率也是很高的.  

约束
C++的模板约束能力比较差.相当于没有.主要是通过代码替换.替换后的代码能便通过就通过了.通不过就报编译错误.不过未来的C++0X标准加入了模板约束.
Java通过编译器保证泛型的约束.
C#通过运行时检查来保证约束.
Delphi通过编译器来保证泛型约束.

兼容性.
C++没有虚拟机,原生代码基本不存在兼容性问题.
java是通过编译器把所有类型都换成object.虚拟机都不用改,和旧的虚拟机完全兼容.兼容性非常好.
C#因为是要虚拟机支持的,所以再旧的.NET Frame虚拟机上不能执行新的泛型代码.
Delphi和C++类似,都是原生代码.所以基本不存在兼容问题.

泛型运行时信息.
C++本身运行时信息就弱的可怜.加之泛型利用代码替换的技术实现,所以基本不具有泛型技术的运行时信息.
Java虽然通过把所有的类型都替换成object实现了良好的兼容性,也有泛型的约束,但是却带来了无法获取运行时信息的难题.因为在Java虚拟机看来都是object,没有分别.
C#虽然通过虚拟机技术支持泛型带来兼容性不好的问题.但是运行时信息却及其强.
Delphi虽然实现技术和C++类似,因为有泛型约束,并且不是象java那样靠虚拟机执行无法区分object.所以Delphi的泛型对运行时信息一点都没有影响.



--
道不远人,人自远。

2009年5月12日星期二

OpenCms 启动指导

OpenCms 启动指导

1. 启动MySQL 服务进程。
2. tomcat/bin/找到startup.bat, 双击该命令启动Tomcat 服务。
3. 手工启动Apache 服务(如果您安装了IIS之类的)。
4. 访问URL:http://localhost,进入默认站点的首页。
5. 访问URL:http://localhost/system/login/,进入工作区的登录页面。
6. 在登录页面输入用户名Admin 和密码admin(密码第一个字符小写),进入工作区。

--
道不远人,人自远。

集成Apache、Tomcat 和OpenCms 的意义

1) OpenCms 的所有静态资源(如图片或二进制文件)将有Apache 管理并对外提供服务,提
高了站点的整体性能。

2) OpenCms 中的动态资源将由Tomcat 管理,使Tomcat 从处理静态资源中解放出来。

3)可以去掉地址中的两个opencms 部分。

--
道不远人,人自远。

2009年5月10日星期日

正则表达式语言元素(9)

下表列出了用于修改正则表达式的子表达式。

构造 定义

(? imnsx - imnsx )

对诸如不区分大小写这样的选项进行设置或禁用以使其在模式中间打开或关闭。有关特定选项的信息,请参见正则表达式选项。在封闭组结束之前,选项更改将一直有效。请参见有关分组构造(?imnsx-imnsx: ) 的信息,它是一个更为巧妙的形式。

(?# )

插入到正则表达式内部的内联注释。该注释在第一个右括号字符处终止。

# [至行尾]

X 模式注释。该注释以非转义的 # 开头,并继续到行的结尾。(请注意,必须激活 x 选项或 RegexOptions.IgnorePatternWhitespace 枚举选项才能识别此类注释。)



--
道不远人,人自远。

正则表达式语言元素(8)

替换构造

下表列出了用于修改正则表达式以允许进行二者之一/或匹配的特殊字符。

替换构造 定义

|

与以 |(竖线)字符分隔的术语中的任何一项匹配;例如, cat|dog|tiger。使用最左侧的成功匹配。

(?( 表达式 )yes|no)

如果表达式在此位置匹配,则与"yes"部分匹配;否则,与"no"部分匹配。"no"部分可省略。表达式可以是任何有效的子表达式,但它将变为零宽度断言,因此该语法等效于 (?(?=expression)yes|no)。请注意,如果表达式是命名组的名称或捕获组编号,则替换构造将解释为捕获测试(在本表的下一行对此进行了描述)。若要避免在这些情况下产生混淆,则可以显式拼出内部 (?=expression)

(?( name )yes|no)

如果命名捕获字符串有匹配,则与"yes"部分匹配;否则,与"no"部分匹配。"no"部分可省略。如果给定的名称不与此表达式中使用的捕获组的名称或编号对应,则替换构造将解释为表达式测试(在本表的上一行进行了描述)。



--
道不远人,人自远。

正则表达式语言元素(7)

下表列出了用于将后向引用修饰符添加到正则表达式中的可选参数。

后向引用构造 定义

\ 数字

后向引用。例如,(\w)\1 查找双写的单词字符。

\k<name>

命名后向引用。例如,(?<char>\w)\k<char> 查找双写的单词字符。表达式 (?<43>\w)\43 执行同样的操作。可以使用单引号替代尖括号,例如 \k'char'

请注意八进制转义代码和使用相同表示法的 \number 后向引用之间的多义性。有关正则表达式引擎如何解析多义性的详细信息,请参见反向引用



--
道不远人,人自远。

正则表达式语言元素(6)

分组构造描述了正则表达式的子表达式,通常用于捕获输入字符串的子字符串。下表描述了正则表达式分组构造。

分组构造 说明

( 子表达式 )

捕获匹配的子表达式(或非捕获组;有关更多信息,请参见正则表达式选项中的 ExplicitCapture 选项)。使用 () 的捕获基于左括号按顺序从 1 开始自动编号。捕获元素编号为零的第一个捕获是由整个正则表达式模式匹配的文本。

(?< name > 子表达式)

将匹配的子表达式捕获到一个组名称或编号名称中。用于 name 的字符串不得包含任何标点符号,并且不能以数字开头。可以使用单引号替代尖括号,例如 (?'name')

(?< name1 - name2 > 子表达式)

(平衡组定义。)删除先前定义的 name2 组的定义,并在 name1 组中存储先前定义的 name2 组和当前组之间的间隔。如果未定义 name2 组,则匹配将回溯。由于删除 name2 的最后一个定义会显示 name2 的先前定义,因此该构造允许将 name2 组的捕获堆栈用作计数器,用于跟踪嵌套构造(如括号)。在此构造中,name1 是可选的。可以使用单引号替代尖括号,例如 (?'name1-name2')

有关更多信息,请参见本主题中的示例

(?: 子表达式)

(非捕获组。)不捕获由子表达式匹配的子字符串。

(?imnsx-imnsx: 子表达式)

应用或禁用子表达式中指定的选项。例如,(?i-s: ) 将打开不区分大小写并禁用单行模式。有关更多信息,请参见正则表达式选项

(?= 子表达式)

(零宽度正预测先行断言。)仅当子表达式在此位置的右侧匹配时才继续匹配。例如,\w+(?=\d) 与后跟数字的单词匹配,而不与该数字匹配。此构造不会回溯。

(?! 子表达式)

(零宽度负预测先行断言。)仅当子表达式不在此位置的右侧匹配时才继续匹配。例如,\b(?!un)\w+\b 与不以 un 开头的单词匹配。

(?<= 子表达式)

(零宽度正回顾后发断言。)仅当子表达式在此位置的左侧匹配时才继续匹配。例如,(?<=19)99 与跟在 19 后面的 99 的实例匹配。此构造不会回溯。

(?<! 子表达式)

(零宽度负回顾后发断言。)仅当子表达式不在此位置的左侧匹配时才继续匹配。

(?> 子表达式)

(非回溯子表达式(也称为"贪婪"子表达式)。)该子表达式仅完全匹配一次,然后就不会逐段参与回溯了。(也就是说,该子表达式仅与可由该子表达式单独匹配的字符串匹配。)

默认情况下,如果匹配未成功,回溯会搜索其他可能的匹配。如果已知无法成功回溯,可以使用非回溯子表达式避免不必要的搜索,从而提高性能。

命名捕获基于左括号按从左到右的顺序依次编号(与非命名捕获类似),但在对所有非命名捕获进行计数之后才开始对命名捕获编号。例如,模式 ((?<One>abc)/d+)?(?<Two>xyz)(.*) 按编号和名称产生下列捕获组。(编号为 0 的第一个捕获总是指整个模式)。

编号 名称 模式

0

0(默认名称)

((?<One>abc)/d+)?(?<Two>xyz)(.*)

1

1(默认名称)

((?<One>abc)/d+)

2

2(默认名称)

(.*)

3

1

(?<One>abc)

4

2

(?<Two>xyz)

平衡组定义示例


下 面的代码示例演示使用平衡组定义匹配输入字符串中的左右尖括号 (<>)。在该示例中,像使用堆栈那样使用 Open 组和 Close 组的捕获集合来跟踪尖括号配对:将所捕获的各左尖括号放入 Open 组的捕获集合中;将所捕获的各右尖括号放入 Close 组的捕获集合中;平衡组定义确保每个左尖括号均有一个匹配的右尖括号。

Visual Basic
' This code example demonstrates using the balancing group definition feature of 
' regular expressions to match balanced left angle bracket (<) and right angle
' bracket (>) characters in a string.

Imports System
Imports System.Text.RegularExpressions

Class Sample
Public Shared Sub Main()
'
' The following expression matches all balanced left and right angle brackets(<>).
' The expression:
' 1) Matches and discards zero or more non-angle bracket characters.
' 2) Matches zero or more of:
' 2a) One or more of:
' 2a1) A group named "Open" that matches a left angle bracket, followed by zero
' or more non-angle bracket characters.
' "Open" essentially counts the number of left angle brackets.
' 2b) One or more of:
' 2b1) A balancing group named "Close" that matches a right angle bracket,
' followed by zero or more non-angle bracket characters.
' "Close" essentially counts the number of right angle brackets.
' 3) If the "Open" group contains an unaccounted for left angle bracket, the
' entire regular expression fails.
'
Dim pattern As String = "^[^<>]*" & _
"(" + "((?'Open'<)[^<>]*)+" & _
"((?'Close-Open'>)[^<>]*)+" + ")*" & _
"(?(Open)(?!))$"
Dim input As String = "<abc><mno<xyz>>"
'
Dim m As Match = Regex.Match(input, pattern)
If m.Success = True Then
Console.WriteLine("Input: ""{0}"" " & vbCrLf & "Match: ""{1}""", _
input, m)
Else
Console.WriteLine("Match failed.")
End If
End Sub 'Main
End Class 'Sample

'This code example produces the following results:
'
'Input: "<abc><mno<xyz>>"
'Match: "<abc><mno<xyz>>"
'
// This code example demonstrates using the balancing group definition feature of 
// regular expressions to match balanced left angle bracket (<) and right angle
// bracket (>) characters in a string.

using System;
using System.Text.RegularExpressions;

class Sample
{
public static void Main()
{
/*
The following expression matches all balanced left and right angle brackets(<>).
The expression:
1) Matches and discards zero or more non-angle bracket characters.
2) Matches zero or more of:
2a) One or more of:
2a1) A group named "Open" that matches a left angle bracket, followed by zero
or more non-angle bracket characters.
"Open" essentially counts the number of left angle brackets.
2b) One or more of:
2b1) A balancing group named "Close" that matches a right angle bracket,
followed by zero or more non-angle bracket characters.
"Close" essentially counts the number of right angle brackets.
3) If the "Open" group contains an unaccounted for left angle bracket, the
entire regular expression fails.
*/

string pattern = "^[^<>]*" +
"(" +
"((?'Open'<)[^<>]*)+" +
"((?'Close-Open'>)[^<>]*)+" +
")*" +
"(?(Open)(?!))$";
string input = "<abc><mno<xyz>>";
//
Match m = Regex.Match(input, pattern);
if (m.Success == true)
Console.WriteLine("Input: \"{0}\" \nMatch: \"{1}\"", input, m);
else
Console.WriteLine("Match failed.");
}
}

/*
This code example produces the following results:

Input: "<abc><mno<xyz>>"
Match: "<abc><mno<xyz>>"

*/



--
道不远人,人自远。