CSS2.0基础知识--语法技巧

2008-05-13 20:18:54

1.css 字体简写规则

当使用css定义字体时你可能会这样做:

font-size: 1em;
line-height: 1.5em;
font-weight: bold;
font-style: italic;
font-variant: small-caps;
font-family: verdana,serif;

事实上你可以简写这些属性:

font: 1em/1.5em bold italic small-caps verdana,serif;

现在好多了吧,不过有一点要注意:使用这一简写方式你至少要指定font-size和font-family属性,其他的属性(如font-weight, font-style,font-varient)如未指定将自动使用默认值。

2.同时使用两个class

通常我们只为属性指定一个class,但这并不等于你只能指定一个,实际上,你想指定多少就可以指定多少,例如:

<div class="news hot">
 内容
</div>

通过同时使用两个class(使用空格而不是逗号分割),这个段落将同时应用两个class中制定的规则。如果两者中有任何规则重叠,那么后一个将获得实际的优先应用。

3.css中边框(border)的默认值

  当编写一条边框的规则时,你通常会指定颜色、宽度以及样式(任何顺序均可)。

  例如:border: 3px solid #000(3像素宽的黑色实线边框),其实这个例子中唯一需要指定的值只是样式。假如你指定样式为实线(solid),那么其余的值将使用默认值:默认的 宽度为中等(相当于3到4像素);默认的颜色为边框里的文字颜色。如果这正是你想要的效果,你完全可以不在css里指定。

4. 专门用于打印的CSS文档

很多web页面都会提供一个打印链接,方便用户使用另一种适合打印界面的CSS。但实际上你完全可以为你的页面指定两个CSS文档link,这样浏览器会自动调用合适的CSS来用于显示或打印。比如:

<link type="text/css" rel="stylesheet" href="stylesheet.css" media="screen" />
<link type="text/css" rel="stylesheet" href="printstyle.css" media="print" />

通过指定link的media属性,浏览器就能根据需要来调用特定的CSS文件来处理页面了。关于打印更多的建议,请参见 Print Different,

5.图片替换的技巧

一般都建议用标准的HTML来显示文字,而不要使用图片,这样不但快,也更具可读性。但如果你想用一些特殊字体时,就只能用图片了。

  比如你想整个卖东西的图标,你就用了这个图片:

  <h1><img src="widget-image.gif" alt="Buy widgets" /></h1>

  这当然可以,但对搜索引擎来说,和正常文字相比,它们对alt里面的替换文字几乎没有兴趣这是因为许多设计者在这里放许多关键词来骗搜索引擎。所以方法应该是这样的:

  <h1>Buy widgets</h1>

  但这样就没有特殊字体了。要想达到同样效果,可以这样设计CSS:

h1
{
background: url(widget-image.gif) no-repeat;
height: image height;
text-indent: -2000px;
}

  注意把image height换成真的图片的高度。这里,图片会当作背景显示出来,而真正的文字由于设定了-2000像素这个缩进,它们会出现在屏幕左边2000点的地方,就看不见了。但这对于关闭图片的人来说,可能全部看不到了,这点要注意。

6.css盒模型hack的另一选择

  这个Box模型的调整主要是针对IE6之前的IE浏览器的,它们把边界宽度和空白都算在元素宽度上。比如:

  #box { width: 100px; border: 5px; padding: 20px }

  这样调用它:
<div id="box">...</div>
这时盒子的全宽应该是150点,这在除IE6之前的IE浏览器之外的所有浏览器上都是正确的。但在IE5这样的浏览器上,它的全宽仍是100点。可以用以前人发明的Box调整方法来处理这种差异。

  但用CSS也可以达到同样的目的,让它们显示效果一致。

  #box { width: 150px } #box div { border: 5px; padding: 20px }

  这样调用:
<div id="box"><div>...</div></div>
这样,不管什么浏览器,宽度都是150点了。

7.将块元素居中

假设你的网站使用了固定宽度的布局,所有的内容置于屏幕中央,可以使用以下的css:

#content
{
width: 700px;
margin: 0 auto;
}

你可以把html的body之内任何项目置于中,该项目将自动获得相等的左右边界值从而保证了居中显示。不过,这在IE6之前版本的浏览器中仍然有问题,将不会居中,因此必须修改如下:

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

对body的设定将导致主体内容居中,但是连所有的文字也居中了,这恐怕不是你想要的效果,为此#content 的div还要指定一个值:text-align: left

8.使用css实现垂直居中

垂直居中对表格来说是小菜一碟,只需指定单元格为vertical-align: middle即可,但这在css布局中不管用。假设你将一个导航菜单的高度设为2em,然后在css中指定垂直对齐的规则,文字还是会被排到盒的顶部,根本没有什么区别。

要解决这一问题,只需将盒的行高设为与盒的高度相同即可,以这个例子来说,盒高2em,那么只需在css中再加入一条:line-height: 2em 就可实现垂直居中了!

9. 容器内的css定位

CSS的一个好处是可以把一个元素任意定位,在一个容器内也可以。比如对这个容器:

  #container { position: relative }

  这样容器内所有的元素都会相对定位,可以这样用:

  <div id="container"><div id="navigation">...</div></div>

  如果想定位到距左30点,距上5点,可以这样:

  #navigation { position: absolute; left: 30px; top: 5px }

  当然,你还可以这样:

  margin: 5px 0 0 30px;

  注意4个数字的顺序是:上、右、下、左。当然,有时候定位的方法而不是边距的方法更好些。}

10.延伸至屏幕底部的背景色

css的缺点之一是缺乏垂直方向的控制,从而导致了一个表格布局不会遇到的问题。假设你在页面的左侧设定了一列用于放置网站的导航。页面为白色背景,但你希望导航所在的列为蓝色背景,使用以下css即可:

#navigation
{
background: blue;
width: 150px;
}

问题在于导航项不会一直延伸到页面的底部,自然它的背景色也不会延伸到底部。于是左列的蓝色背景在页面上被半路截断,浪费了你的一番设计。怎么办呢?将body的背景指定为与左列同颜色同宽度的图片,css如下:

 body
{
background: url(blue-image.gif) 0 0 repeat-y;
}

背景图应为宽150像素的蓝色图片。这一办法的缺点是没法使用em来指定左列的宽度,当用户改变文字的大小导致内容的宽度扩张时,背景色的宽度不会随之改变。

11. block / inline 属性

任何一个HTML元素都是block或者inline的。
block元素的特性包括:

  • 总是另起一行开始显示
  • height, line-height, top/bottom margin属性可以被设置
  • width缺省值是100%,除非你指定了另外的width值

这一类的HTML元素包括<div>, <p>, <h1>, <form>, <ul> 以及 <li>等。

inline元素的特性包括:

  • 直接跟在当前行的后面显示
  • height, line-height, top/bottom margin属性不能改变
  • width值就等于包含其中的文字/图片的宽度,并且这个值不能被改变

这一类的HTML元素包括<span>, <a>, <label>, <input>, <img>, <strong> 以及 <em>等。

你可以通过设置元素属性display: inlinedisplay: block来改变元素的以上特性。

12. 设置页面的最小宽度

CSS语法中很有用的一个属性是 min-width 。通过这个属性你可以设置任何元素的最小宽度。也就是说你也可以用这个来限制页面显示的最小宽度。
但有个小问题是:IE浏览器无法为<body>元素设置min-width,因此要让这个属性起作用,我们需要走点弯路。
首先在<body>后面插入一个<div>

<body>
<div class="container">

然后在CSS定义里面定义最小宽度为600px:

#container
{
min-width: 600px;
width:expression(document.body.clientWidth < 600? "600px": "auto" );
}

第一个属性是最小宽度定义的标准写法;第二个属性则是只有IE能够理解的javascript表达式。
你也可以同时设定页面的最大最小宽度:

#container
{
min-width: 600px;
max-width: 1200px;
width:expression(document.body.clientWidth < 600? "600px" : document.body.clientWidth > 1200? "1200px" : "auto");
}

13. Text-transform 属性

这个属性可能也是CSS当中用的人不多但却很有用处的属性之一。其常见的可用值包括:text-transform: uppercase, text-transform: lowercase 以及 text-transform: capitalize

第一个将把所有的字母转化成大写;第二个将把所有字母转成小写;第三个则把每个单词的首字母转成大写。不过对于非英文网站来说,这个功能确实就没什么用了。

14. IE中消失的文字和图片

IE有个很莫名其妙的Bug:有时候文字或者背景图片死活显示不出来。如果你全选整个页面,会发现那些内容实际上还在那里,或者重新刷新一下页面显示就正常了。
通常来说这个问题都发生在那些跟在浮动元素后面显示的文字或背景图片身上。要解决这个问题,可以试试给你的那些消失的元素加上position: relative 属性。如果还不行,再试试设置一下width属性。一般来说这样做之后问题就解决了。

15、针对浏览器的选择器

  这些选择器在你需要针对某款浏览器进行css设计时将非常有用。

  IE6及其更低版本

  * html {}  IE7及其更低版本

  *:first-child+html {} * html {}  仅针对IE7

  *:first-child+html {}  IE7和当代浏览器

  html>body{}  仅当代浏览器(IE7不适用)

  html>/**/body{}  Opera9及其更低版本

  html:first-child {}  Safari

  html[xmlns*=""] body:last-child {}

  要使用这些选择器,请将它们放在样式之前。 例如:

  #content-box {
width: 300px;
height: 150px;
}

  * html
#content-box {
width: 250px;
} /* overrides the above style and changes the width to 250px in IE 6 and below */

上一篇:让人欣喜的CSS3.0
下一篇:css实例-超链接alt 提示效果

有什么想说的吗?