关于Web标准
Web标准不是某一个标准,而是一系列标准的集合。网页主要由三部分组成:结构(Structure)、表现(Presentation)和行为(Behavior)。对应的标准也分三方面:结构化标准语言主要包括XHTML和XML,表现标准语言主要包括CSS,行为标准主要包括对象模型(如W3C DOM)、ECMAScript等。这些标准大部分由W3C起草和发布,也有一些是其他标准组织制订的标准,比如ECMA(European Computer Manufacturers Association)的ECMAScript标准。
为什么要建立网站标准
简单说,网站标准的目的就是:
- 提供最多利益给最多的网站用户
- 确保任何网站文挡都能够长期有效
- 简化代码、降低建设成本
- 让网站更容易使用,能适应更多不同用户和更多网路设备
- 当浏览器版本更新,或者出现新的网络交互设备时,确保所有应用能够继续正确执行。
- 对于网站设计和开发人员来说,遵循网站标准就是使用标准;对于你的网站用户来说,网站标准就是最佳体验。
采用网站标准的好处
对网站浏览者的好处:
- 文件下载与页面显示速度更快
- 内容能被更多的用户所访问(包括失明、视弱、色盲等残障人士)
- 内容能被更广泛的设备所访问(包括屏幕阅读机、手持设备、搜索机器人、打印机、电冰箱等等)
- 用户能够通过样式选择定制自己的表现界面
- 所有页面都能提供适于打印的版本
对网站所有者的好处:
- 更少的代码和组件,容易维护
- 带宽要求降低(代码更简洁),成本降低。举个例子:当 ESPN.com使用 CSS改版后,每天节约超过两兆字节(terabytes)的带宽。
- 更容易被搜寻引擎搜索到
- 改版方便,不需要变动页面内容
- 提供打印版本而不需要复制内容
- 提高网站易用性。在美国,有严格的法律条款(Section 508)来约束政府网站必须达到一定的易用性,其他国家也有类似的要求。
什么是样式表?
CSS就是Cascading Style Sheets,中文翻译为“层叠样式表”,简称样式表,它是一种制作网页的新技术。
网页设计最初是用HTML标记来定义页面文档及格式,例如标题<h1>、段落<p>、表格<table>、链接<a>等,但这些标记不能满足更多的文档样式需求,为了解决这个问题,在1997年W3C(The World Wide Web Consortium)颁布HTML4标准的同时也公布了有关样式表的第一个标准CSS1, 自CSS1的版本之后,又在1998年5月发布了CSS2版本,样式表得到了更多的充实。W3C把DHTML(Dynamic HTML)分为三个部分来实现:脚本语言(包括JavaScript、Vbscript等)、支持动态效果的浏览器(包括Internet Explorer、Netscape Navigator等)和CSS样式表。
注意:CSS需要IE4(Internet Explorer 4.0)和NC4(Netscape 4.0)以上的浏览器支持,有些效果需要更高版本的浏览器支持。
怎样使用CSS样式表?
如果你使用的是Dreamweaver MX 2004以上的版本,在定义文字字体、颜色、大小等属性的时候,查看一下代码你会发现有这样的一部分在head区域:
<style type="text/css"> <!-- .STYLE2 { font-size: 16pt; font-family: "Courier New", Courier, monospace; font-weight: bold; color: #FF3300; } --> </style>
那么恭喜你,你已经使用了CSS设计网页。那么除了这种调用CSS的方法外,还有别的吗?回答是“当然有了”,下面是系统介绍
标记加注法(in-line):
如果只有一个HTML标记需要设定样式,则可在该标记内,加上属性
<div style="color:red;">
页面内嵌法:
<style type="text/css"> <!-- body {background:white;color:black;} --> </style>
外部调用法:
<link rel="stylesheet" href="css/style.css" type="text/css" media="all" />双表法调用样式表
<link rel="stylesheet" href="css/style.css" type="text/css" media="all" /> <style type="text/css" media="all">@import url(css/style01.css);</style>
CSS语法基础
基本语法
CSS的定义是由三个部分构成:选择符(selector),属性(properties)和属性的取值(value)。
基本格式如下:
selector {property: value} 选择符 { 属性:值 }
选择符是可以是多种形式,一般是你要定义样式的HTML标记,例如BODY、P、TABLE……,你可以通过此方法定义它的属性和值,属性和值要用冒号隔开:
body {color: black}
选择符body是指页面主体部分,color是控制文字颜色的属性,black是颜色的值,此例的效果是使页面中的文字为黑色。
如果属性的值是多个单词组成,必须在值上加引号,比如字体的名称经常是几个单词的组合:
p {font-family: "sans serif"} 定义段落字体为sans serif
如果需要对一个选择符指定多个属性时,我们使用分号将所有的属性和值分开:
p {text-align: center; color: red} 段落居中排列;并且段落中的文字为红色
为了使你定义的样式表方便阅读,你可以采用分行的书写格式:
p { text-align: center; color: black; font-family: arial } 段落排列居中,段落中文字为黑色,字体是arial
选择符组
你可以把相同属性和值的选择符组合起来书写,用逗号将选择符分开,这样可以减少样式重复定义:
h1, h2, h3, h4, h5, h6 {color:green;} 这个组里包括所有的标题元素,每个标题元素的文字都为绿色
p, table{font-size:9pt} 段落和表格里的文字尺寸为9号字
效果完全等效于:
p {font-size:9pt} table {font-size:9pt}
类选择符
用类选择符你能够把相同的元素分类定义不同的样式,定义类选择符时,在自定类的名称前面加一个点号。假如你想要两个不同的段落,一个段落向右对齐,一个段落居中,你可以先定义两个类:
p.right {text-align: right} p.center {text-align: center}
然后用不在不同的段落里,只要在HTML标记里加入你定义的class参数:
<p class="right">这个段落向右对齐的</p> <p class="center">这个段落是居中排列的</p>
注意:类的名称可以是任意英文单词或以英文开头与数字的组合,一般以其功能和效果简要命名。
类选择符还有一种用法,在选择符中省略HTML标记名,这样可以把几个不同的元素定义成相同的样式:
.center {text-align: center} 定义.center的类选择符为文字居中排列
这样的类可以被应用到任何元素上。下面我们使h1元素(标题1)和p元素(段落)都归为"center"类,这使两个元素的样式都跟随".center"这个类选择符:
<h1 class="center">这个标题是居中排列的</h1> <p class="center">这个段落也是居中排列的</p>
注意:这种省略HTML标记的类选择符是我们经后最常用的CSS方法,使用这种方法,我们可以很方便的在任意元素上套用预先定义好的类样式。
ID选择符
在HTML页面中ID参数指定了某个单一元素,ID选择符是用来对这个单一元素定义单独的样式。 ID选择符的应用和类选择符类似,只要把CLASS换成ID即可。将上例中类用ID替代:
<p id="intro">这个段落向右对齐</p>
定义ID选择符要在ID名称前加上一个“#”号。和类选择符相同,定义ID选择符的属性也有两种方法。下面这个例子,ID属性将匹配所有id="intro"的元素:
#intro { font-size:110%; font-weight:bold; color:#0000ff; background-color:transparent } 字体尺寸为默认尺寸的110%;粗体;蓝色;背景颜色透明
下面这个例子,ID属性只匹配id="intro"的段落元素:
p#intro { font-size:110%; font-weight:bold; color:#0000ff; background-color:transparent }
注意:ID选择符局限性很大,只能单独定义某个元素的样式,一般只在特殊情况下使用。
包含选择符
可以单独对某种元素包含关系定义的样式表,元素1里包含元素2,这种方式只对在元素1里的元素2定义,对单独的元素1或元素2无定义,例如:
table a { font-size: 12px }
在表格内的链接改变了样式,文字大小为12象素,而表格外的链接的文字仍为默认大小。
样式表的层叠性
层叠性就是继承性,样式表的继承规则是外部的元素样式会保留下来继承给这个元素所包含的其他元素。事实上,所有在元素中嵌套的元素都会继承外层元素指定的属性值,有时会把很多层嵌套的样式叠加在一起,除非另外更改。例如在DIV标记中嵌套P标记:
div { color: red; font-size:9pt} …… <div> <p> 这个段落的文字为红色9号字 </p> </div> P元素里的内容会继承DIV定义的属性
注意:有些情况下内部选择符不继承周围选择符的值,但理论上这些都是特殊的。例如,上边界属性值是不会继承的,直觉上,一个段落不会同文档BODY一样的上边界值。
另外,当样式表继承遇到冲突时,总是以最后定义的样式为准。如果上例中定义了P的颜色:
div { color: red; font-size:9pt} p {color: blue} …… <div> <p> 这个段落的文字为蓝色9号字 </p> </div>
我们可以看到段落里的文字大小为9号字是继承div属性的,而color属性则依照最后定义的。
不同的选择符定义相同的元素时,要考虑到不同的选择符之间的优先级。ID选择符,类选择符和HTML标记选择符,因为ID选择符是最后加上元素上的,所以优先级最高,其次是类选择符。如果想超越这三者之间的关系,可以用!important提升样式表的优先权,例如:
p { color: #FF0000!important } .blue { color: #0000FF} #id1 { color: #FFFF00}
我们同时对页面中的一个段落加上这三种样式,它最后会依照被!important申明的HTML标记选择符样式为红色文字。如果去掉!important,则依照优先权最高的ID选择符为黄色文字。
注释
可以在CSS中插入注释来说明你代码的意思,注释有利于你或别人以后编辑和更改代码时理解代码的含义。在浏览器中,注释是不显示的。CSS注释以"/*" 开头,以"*/" 结尾,如下:
/* 定义段落样式表 */ p { text-align: center; /* 文本居中排列 */ color: black; /* 文字为黑色 */ font-family: arial /* 字体为arial */ }
如何在网页中插入CSS
前面我们了解了CSS的语法,但要想在浏览器中显示出效果,就要让浏览器识别并调用。当浏览器读取样式表时,要依照文本格式来读,这里介绍四种在页面中插入样式表的方法:链入外部样式表、内部样式表、导入外表样式表和内嵌样式。
链入外部样式表
链入外部样式表是把样式表保存为一个样式表文件,然后在页面中用 <link>标记链接到这个样式表文件,这个 <link>标记必须放到页面的<head>区内,如下:
<head> …… <link href="mystyle.css" rel="stylesheet" type="text/css" media="all"> …… </head>
上面这个例子表示浏览器从mystyle.css文件中以文档格式读出定义的样式表。rel=”stylesheet”是指在页面中使用这个外部的样式表。type="text/css"是指文件的类型是样式表文本。href="mystyle.css"是文件所在的位置。media是选择媒体类型,这些媒体包括:屏幕,纸张,语音合成设备,盲文阅读设备等。
一个外部样式表文件可以应用于多个页面。当你改变这个样式表文件时,所有页面的样式都随之而改变。在制作大量相同样式页面的网站时,非常有用,不仅减少了重复的工作量,而且有利于以后的修改、编辑,浏览时也减少了重复下载代码。
样式表文件可以用任何文本编辑器(例如:记事本)打开并编辑,一般样式表文件扩展名为.css。内容是定义的样式表,不包含HTML标记,mystyle.css这个文件的内容如下:
hr {color:sienna} p {margin-left:20px} body {background-image:url("images/back40.gif")} /* 定义水平线的颜色为土黄; 段落左边的空白边距为20象素; 页面的背景图片为images目录下的back40.gif文件 */
内部样式表
内部样式表是把样式表放到页面的<head>区里,这些定义的样式就应用到页面中了,样式表是用<style>标记插入的,从下例中可以看出<style>标记的用法:
<head> …… <style type="text/css"> hr {color: sienna} p {margin-left: 20px} body {background-image:url("images/back40.gif")} </style> …… </head>
导入外部样式表
导入外部样式表是指在内部样式表的<style>里导入一个外部样式表,导入时用@import,看下面这个实例:
<head> …… <style type="text/css"> <!-- @import "mystyle.css" 其他样式表的声明 --> </style> …… </head>
例中@import “mystyle.css”表示导入mystyle.css样式表,注意使用时外部样式表的路径。方法和链入样式表的方法很相似,但导入外部样式表输入方式更有优势。实质上它相当于存在内部样式表中的。
注意:导入外部样式表必须在样式表的开始部分,在其他内部样式表上面。
内嵌样式
内嵌样式是混合在HTML标记里使用的,用这种方法,可以很简单的对某个元素单独定义样式。内嵌样式的使用是直接将在HTML标记里加入style参数。而style参数的内容就是CSS的属性和值,如下例:
<p style="color: sienna;margin-left: 20px;"> 这是一个段落 </p> <!--这个段落颜色为土黄,左边距为20象素-->
在style参数后面的引号里的内容相当于在样式表大括号里的内容。
注意:style参数可以应用于任意BODY内的元素(包括BODY本身),除了BASEFONT、PARAM和SCRIPT。
多重样式表的叠加
上一章里我们已经提到样式表的层叠顺序,这里我们讨论插入样式表的这几种方法的叠加,如果在同一个选择器上使用几个不同的样式表时,这个属性值将会叠加几个样式表,遇到冲突的地方会以最后定义的为准。例如,我们首先链入一个外部样式表,其中定义了h3选择符的color 、text-alig和font-size属性:
h3 { color: red; text-align: left; font-size: 8pt; } /*标题3的文字颜色为红色;向左对齐;文字尺寸为8号字*/
然后在内部样式表里也定义了h3选择符的text-align和font-size属性:
h3 { text-align: right; font-size: 20pt; } /*标题3文字向右对齐;尺寸为20号字*/
那么这个页面叠加后的样式就是:
color: red; text-align: right; font-size: 20pt; /*文字颜色为红色;向右对齐;尺寸为20号字*/
字体颜色从外部样式表里保留下来,而对齐方式和字体尺寸都有定义时,按照后定义的优先而依照内部样式表。
注意:依照后定义的优先,所以优先级最高的是内嵌样式,内部样式表高于导入外部样式表,链入的外部样式表和内部样式表之间是最后定义的优先级高。
选择符模式
模式/含义/内容描述
*
匹配任意元素。(通用选择器)
E
匹配任意元素 E (例如一个类型为 E 的元素)。(类型选择器)
E F
匹配元素 E 的任意后代元素 F 。(后代选择器)
E > F
匹配元素 E 的任意子元素 F 。(子选择器)
E:first-child
当元素 E 是它的父元素中的第一个子元素时,匹配元素 E 。(:first-child 伪类)
E:link E:visited
如果 E 是一个目标还没有访问过(:link)或者已经访问过(:visited)的超链接的源锚点时匹配元素 E 。(link 伪类)
E:active E:hover E:focus
在确定的用户动作中匹配 E 。(动态伪类)
E:lang(c)
如果类型为 E 的元素使用了(人类)语言 c (文档语言确定语言是如何被确定的),则匹配该元素。(:lang() 伪类)
E + F
如果一个元素 E 直接在元素 F 之前,则匹配元素 F 。(临近选择器)
E[foo]
匹配具有”foo”属性集(不考虑它的值)的任意元素 E 。(属性选择器)
E[foo="warning"]
匹配其“foo”属性值严格等于“warning”的任意元素 E 。(属性选择器)
E[foo~="warning"]
匹配其“foo”属性值为空格分隔的值列表,并且其中一个严格等于“warning”的任意元素 E 。(属性选择器)
E[lang|="en"]
匹配其“lang”属性具有以“en”开头(从左边)的值的列表的任意元素 E 。(属性选择器)
DIV.warning
仅 HTML。用法同 DIV[class~="warning"]。(类选择器)
E#myid
匹配 ID 等于“myid”的任意元素 E 。(ID 选择器)
From:http://www.w3.org/TR/CSS2/selector.html
我们用下面的例子来解释“[s]父元素[/s]”、“[s]子元素[/s]”、“[s]父/子[/s]”及“[s]相邻[/s]”这几个概念。
<div title="这是一个div"> <h1>这是是h1的内容</h1> <p>这是一个段落p的内容!<strong>这里是strong的内容</strong></p> </div>
从以上代码中,我们可以找出这样的关系:
- h1 和 p 同为 div 的“儿子”,两者分别同 div 形成“父/子”关系。
- h1,p,strong 都是 div 的“子元素”。(三者都包含在 div 之内)
- div 是 h1 和 p 的“父元素”。
- strong 和 p 形成“父/子”关系,strong 的“父元素”是 p 。
- 但 strong 和 div 并非“父/子”关系,而是“祖孙”关系,但 strong 依然是 div 的“子(孙)元素”。
- div 是 h1 p strong 三者的“祖先”,三者是 div 的“子(孙)元素”。
- h1 和 p 两者是相邻的。
继承上面的实例来具体演示一下E F的关系:假如,我们需要将 strong 内的内容二字变为绿色,我们可以有哪些方法呢?
临近选择器和通用选择器:通用选择器以星号“*”表示,可以用于替代任何 tag 。
实例:
h2 + * { color:red }/*所有紧随 h2 的元素内的文字都将呈现红色*/
选择符分类介绍
通配选择符
语法:
* { sRules }
说明:
通配选择符。选定文档目录树(DOM)中的所有类型的单一对象。假如通配选择符不是单一选择符中的唯一组成,“*”可以省略。
示例:
*[lang=fr] { font-size:14px; width:120px; } *.div { text-decoration:none; }
类型选择符
语法
E { sRules }
说明:
类型选择符。以文档语言对象(Element)类型作为选择符。
示例:
td { font-size:14px; width:120px; } a { text-decoration:none; }
属性选择符
语法
E [ attr ] { sRules } E [ attr = value ] { sRules } E [ attr ~= value ] { sRules } E [ attr |= value ] { sRules }
说明:
选择具有 attr 属性的 E
选择具有 attr 属性且属性值等于 value 的 E
选择具有 attr 属性且属性值为一用空格分隔的字词列表,其中一个等于 value 的 E 。这里的 value 不能包含空格
选择具有 attr 属性且属性值为一用连字符分隔的字词列表,由 value 开始的 E
示例:
h[title] { color: blue; } /* 所有具有title属性的h对象 */ span[class=demo] { color: red; } div[speed="fast"][dorun="no"] { color: red; } a[rel~="copyright"] { color:black; }
包含选择符
语法
E1 E2 { sRules }
说明:
包含选择符。选择所有被 E1 包含的 E2 。即 E1.contains(E2)==true 。
示例:
table td { font-size:14px; } div.sub a { font-size:14px; }
子对象选择符
语法
E1 > E2 { sRules }
说明:
子对象选择符。选择所有作为 E1 子对象的 E2 。
示例:
body > p { font-size:14px; } /* 所有作为body的子对象的p对象字体尺寸为14px */ div ul>li p { font-size:14px; }
ID选择符
语法
#ID { sRules }
说明:
ID选择符。以文档目录树(DOM)中作为对象的唯一标识符的 ID 作为选择符。
示例:
#note { font-size:14px; width:120px;}
类选择符
语法
E.className { sRules }
说明:
类选择符。在HTML中可以使用此种选择符。其效果等同于E [ class ~= className ] 。请参阅属性选择符( Attribute Selectors )。
在IE5+,可以为对象的 class 属性(特性)指定多于一个值( className ),其方法是指定用空格隔开的一组样式表的类名。例如:<div class="class1 class2">。
示例:
div.note { font-size:14px; } /* 所有class属性值等于(包含)"note"的div对象字体尺寸为14px */ .dream { font-size:14px; } /* 所有class属性值等于(包含)"note"的对象字体尺寸为14px */
选择符分组
语法
E1 , E2 , E3 { sRules }
说明:
选择符分组。将同样的定义应用于多个选择符,可以将选择符以逗号分隔的方式并为组。
示例:
.td1,div a,body { font-size:14px; } td,div,a { font-size:14px; }
伪类及伪对象选择符
语法
E : Pseudo-Classes { sRules } E : Pseudo-Elements { sRules }
说明:
伪类选择符。请参阅伪类( Pseudo-Classes )[:link :hover :active :visited :focus :first-child :first :left :right :lang]。
伪对象选择符。请参阅伪对象( Pseudo-Elements )[:first-letter :first-line :before :after]。
示例:
div:first-letter { font-size:14px; } a.fly :hover { font-size:14px; color:red; }
伪类——动态链接
伪类可以看做是一种特殊的类选择符,是能被支持CSS的浏览器自动所识别的特殊选择符。它的最大的用处就是可以对链接在不同状态下定义不同的样式效果。
语法
伪类的语法是在原有的语法里加上一个伪类(pseudo-class):
selector:pseudo-class {property: value} 选择符:伪类 { 属性: 值 }
伪类和类不同,是CSS已经定义好的,不能象类选择符一样随意用别的名字,根据上面的语法可以解释为对象(选择符)在某个特殊状态下(伪类)的样式。
类选择符及其他选择符也同样可以和伪类混用:
selector.class:pseudo-class {property: value} 选择符. 类:伪类 { 属性: 值 }
锚的伪类
我们最常用的是4种a(锚)元素的伪类,它表示动态链接在4种不同的状态:link、visited、active、hover(未访问的链接、已访问的链接、激活链接和鼠标停留在链接上)。我们把它们分别定义不同的效果:
a:link {color: #FF0000; text-decoration: none} /* 未访问的链接 */ a:visited {color: #00FF00; text-decoration: none} /* 已访问的链接 */ a:hover {color: #FF00FF; text-decoration: underline} /* 鼠标在链接上 */ a:active {color: #0000FF; text-decoration: underline} /* 激活链接 */
上面这个例子中,这个链接未访问时的颜色是红色并无下划线,访问后是绿色并无下划线,激活链接时为蓝色并有下划线,鼠标在链接上时为紫色并有下划线
注意:有时这个链接访问前鼠标指向链接时有效果,而链接访问后鼠标再次指向链接时却无效果了。这是因为你把a:hover放在了a:visited的前面,这样的话由于后面的优先级高,当访问链接后就忽略了a:hover的效果。所以根据叠层顺序,我们在定义这些链接样式时,一定要按照a:link, a:visited, a:hover, a:actived的顺序书写。
伪类和类选择符
将伪类和类组合起来用,就可以在同一个页面中做几组不同的链接效果了,例如,我们定义一组链接为红色,访问后为蓝色;另一组为绿色,访问后为黄色:
a.red:link {color: #FF0000} a.red:visited {color: #0000FF} a.blue:link {color: #00FF00} a.blue:visited {color: #FF00FF}
现在应用在不同的链接上:
<a class="red" href="...">这是第一组链接</a> <a class="blue" href="...">这是第二组链接</a>
其他伪类
此外CSS2还定义了首字和首行(first-letter和first-line)的伪类,可以对元素的首字或首行设定不同的样式。
下面看这个例子,我们在段落标记里定义文本首字尺寸为默认大小的3倍:
<style type="text/css"> p:first-letter {font-size: 300%} </style> …… <p> 这是一个段落,这个段落的首字被放大了。 </p>
我们再定义一个首行样式的例子:
<style type="text/css"> div p:first-line {color: red} </style> …… <div> <p> 这是段落的第一行 这是段落的第二行 这是段落的第三行 </p> </div> 上例中段落的第一行为红色,第二、三行为默认颜色
注意:首字和首行的伪类需要IE5.5以上的版本支持。
CSS2盒模型
1CSS2中的盒模型是关系到设计中排版定位的关键,任何一个选择符都遵循盒模型规范,例如<div>、<p>、<a>……盒模型包含 (外补丁)margin,(背景颜色)background-color,(背景图片)background-image,(内补丁)padding ,(内容)content,(边框)border。
下图是CSS盒模型的示意图
层次3D示意图
3D示意图(原图出自:hicksdesign)
Flash示意模型:http://www.jluvip.com/blog/flash/box_model.swf
需要说明的是:
IE5.x 和 IE 6.0在quirks模式下使用自己的错误的盒模型解释,box的宽度等于width的值,比如你定义一个div
div{width:90px; padding:10px;margin:10px;border:10px;}
正常的div的宽度应该为90px+10px+10px+10px=120px,而他们认为是90px。width的值包含了padding margin border的值
解决这个问题的方法:
#content { width:90px; voice-family: "/"}/""; voice-family:inherit; width:120px; /* For IE 5.x/Win */ } html>body #content { width:90pxpx; }
#content { width:90px !important;/* For all */ width /**/:120px;/* for IE 5.x/win */ } html>body #content { width:90px; }
而支持标准的浏览器正常的解析了盒模型,认为宽度是120px,比如现在的 Firefox 1.0+ Opera 7.0+ IE6.0的标准模式。
css元素定位
position:static|无定位
position:static是所有元素定位的默认值, 一般不用注明,除非有需要取消继承的别的定位
示例:
#div-1 { position:static; }
position:relative|相对定位
使用position:relative,就需要top,bottom,left,right4个属性来配合,确定元素的位置。如果要让div-1层向下移动20px,左移40px:
示例:
#div-1 { position:relative; top:20px; left:40px; }
如果用到相对定位,紧随他的层divafter是不会出现在div-1的下方,而是和div-1在同一个高度出现。
可见, position:relative;并不是很好用。
position:absolute|绝对定位
使用position:absolute;,能够很准确的将元素移动到你想要的位置。
让我将 div-1a 移动到页面的右上角:
示例:
#div-1a { position:absolute; top:0; right:0; width:200px; }
使用绝对定位的div-1a层前面的或者后面的层会认为这个层并不存在,丝毫不影响到他们。所以position:absolute;用于将一个元素放到固定的位置很好用,但是如果需要div-1a层相对于附近的层来确定位置就不要实现了。
这里有个Win IE的bug需要提到,就是如果为绝对定位的元素定义一个相对的宽度,那么在IE下它的宽度取决于父元素的宽度而不是整个页面的宽度。
position:relative + position:absolute|绝对定位+相对定位
如果给父元素(div-1)定义为position:relative;子元素(div-1a)定义为position:absolute,那么子元素(div-1a)的位置将相对于父元素(div-1),而不是整个页面。
让div-1a定位于div-1的右上角:
示例:
<div id="div-1"> <div id="div-1a"> this is div-1a element. </div> this is div-1 element. </div>
#div-1 { position:relative; } #div-1a { position:absolute; top:0; right:0; width:200px; }
two column layout|两列布局
让我们实践position:relative + position:absolute的理论,实现两列布局。
示例:
<div id="div-1"> <div id="div-1a">this is the column-one </div> <div id="div-1b">this is the column-two </div> </div>
#div-1 { position:relative;/*父元素相对定位*/ } #div-1a { position:absolute;/*子元素绝对定位*/ top:0; right:0; width:200px; } #div-1b { position:absolute;/*子元素绝对定位*/ top:0; left:0; width:200px; }
注意:在这个例子中会发现父元素的告诉不会随着子元素的告诉变化,所以如果父元素的背景和边框需要定义一个足够高的高度才能显示出来。
float|浮动对齐
使用float定位一个元素有float:left;&float:right;两种值。这种定位只能在水平坐标定位,不能在垂直坐标定位。而且让下面的元素浮动环绕在它的左边或者右边。
示例:
#div-1a { float:left; width:200px; }
make two clumn with float|浮动实现两列布局
如果让一个元素float:left;另一个float:right;控制好他们的宽度,就能实现两列的布局效果。
示例:
#div-1a { float:left; width:150px; } #div-1b { float:left; width:150px; }
clear float|清除浮动
如果你不想让使用了float元素的下面的元素浮动环绕在它的周围,那么你就使用clear,clear有三个值,clear:left;(清除左浮动),clear:right;(清除右浮动),clear:both;(清除所有浮动)。
<div id="div-1a">this is div-1a</div> <div id="div-1b">this is div-1b</div> <div id="div-1c">this is div-1c</div>
#div-1a { float:left; width:190px; } #div-1b { float:left; width:190px; } #div-1c { clear:both; }
z-index:控制内外位置
用于设置相对和绝对定位元素的"内外"位置,数值越小的在最内层,外层的将覆盖内层.
E { position:absolute; z-index:3; width:6px; }/*外*/ D { position:absolute; z-index:1; width:6px; }/*内*/
至此,这个css的定位部分就结束了,你可以动手体会体会加深印象。