DIV+CSS是网站标准(或称“WEB标准”)中常用术语之一,div+css 是一种网页的布局方法,这一种网页布局方法有别于传统的HTML网页设计语言中的表格(table)定位方式,可实现网页页面内容与表现相分离。XHTML是The Extensible HyperText MarkupLanguage(可扩展超文本标识语言)的缩写。XHTML基于可扩展标记语言(XML),是一种在HTML 基础上优化和改进的新语言,目的是基于XML应用与强大的数据转换能力,适应未来网络应用更多的需求。在XHTML网站设计标准中,不再使用表格定位技术,而是采用DIV+CSS的方式实现各种定位。
叠样式表(Cascading Style Sheets)的缩写,用于定义HTML元素的显示形式,是W3C推出的格式化网页内容的标准技术。网页设计者必须掌握的技术之一。样式表可分为嵌入式样式表、外部样式表和内联样式表三种,在同一文档内可以同时使用三种方法。
例:新建一个后辍为CSS的样式定义。
元素{ 属性color:值red;} 在head段使用<link>标记,
引用语法:<link rel=”stylesheet” type=”text/css”href=”样式表URL” />
2、嵌入式样式表:
<style>元素段必须出现在head段内,有一个开始和结束标记,并且可以有多个<style>段
语法格式: <style type=”text/css”>
我们可以使用@import导入一个外部样式表,例:
<styletype=”text/css”>
@import url(外部样式表位置);
…其它嵌入式的样式定义…
</style>
4、内联样式表:
写在开始标记里面,比如你要H1变红色,
<h1style=”color:red;”>变为红色</h1>
总结: 三种样式表优先使用外部样式表、嵌入式样式表用来调试用的、一般不使用内联样式表。
5、样式规则。
一个样式规则由一个选择器后跟一个声明块组成,声明块是一个大容器,由大括号中间的部分组成,声明块中间的空间会被忽略,,声明块由一个一个的声明组成,声明由属性和值组成,属性和值用冒号隔开,分号结束,每个声明内只能有一个属性,如果属性值中含有空格用双引号括起来例,在一个声明块内可以有多个声明,每个声明用分号隔开
选择器 |
声明块 |
选择一个元素 |
声明{ } |
属性 : 值; |
|
冒号开始分号结束 |
有关的详细内容在中有详细的解释。
当遇到几个选择器共享一个声明的时候,可以分组放在一起,每个选择器必须以逗号隔开。例:h1,h2,h3,h4 { color red;} 选择器分组时要将每个选择器路径写全,分组结尾不能有逗号。
例:路径不全: #maincontent p, ul{ border-top:1pxsolid#ddd;}
正确写法:#maincontent p, #maincontent ul{border-top:1pxsolid #ddd;}
例:结尾多了一个逗号: .a1 p, .a1 ul,{color:red;}
元素选择器:语法格式: 元素{color: blue;}
类选择器: 语法格式: .类名{属性: 值;}
ID选择器:#id名 {属性 : 值;} ID名不能重复
通配符选择器:语法格式:*{属性:值;}
伪类选择器:可以以不同方式格式化超级链接<a>元素的四种不同状态:以下顺序依次写;(记忆方法:a Love orHate)
a:link是用在未访问的链接的选择器
a:visited是用在已访问过的链接的选择器
a:hover是用在鼠标光标放在其上的链接的选择器
a:active是用在获得焦点(比如,被点击)的链接的选择器
如果需要,我们可以组合这几个状态,按顺序写:
a:link,a:visited { color:blue;}
a:hover,a:active { color:blue;}
标准的选择器不能格式化一个元素内容的第一个字母或者第一行,而伪元素选择器能实现:所有浏览器支持的有两种::first-line和 :first-letter
例:段落的第一行:p:first-line {属性:值;}
例:段落的第一个字母:p:first-letter {属性:值;}
所谓CSS优先级,即是指CSS样式在浏览器中被解析的先后顺序。
内联样式(inline style) > ID选择符 > 类选择符(class), 伪类(pseudo-class)和属*(attribute)选择符 > 类别(type),伪对象(pseudo-element)
*内联样式(inline style):元素的style属*,比如 <divstyle="color:red;"></div>,其中的color:red;就是内联样式
*ID选择符:元素的id属*,比如<divid="content"></div> 可以用ID选择符#content
*类选择符:比如<divclass="box"></div>,可以使用类选择符 .box
*伪类(pseudo-class):最常见的是锚(a)伪类,比如a:link,a:visited.
*属性选择符(attributeselectors):比如div[class=demo],含有class为demo的div元素
*类别选择器(type selector):HTML标签选择,比如div .demo,div元素下含有class为demo的元素
*伪对象选择器(pseudo-elementselector):比如div:first-letter,div元素下的第一个单词。
多重CSS样式定义,属性追加重复最后优先原则
一个标签可以同时定义多个class,也可以是同一个class中重复定义属性。例如:我们先定义两个样式
.one{width:200px;background:url(images/imgA.jpg)no-repeatleft top;}
.two{border:10pxsolid #000;background:url(images/imgB.jpg) no-repeat left top;}
在页面代码中,我们可以这样调用:<div class="onetwo"></div>
<divclass="onetwo"></div>应用到的样式如下:
width:200px;
border:10px solid#000;
background:url(images/imgB.jpg)no-repeatleft top;
因为,当应用两个或多个样式时,浏览器所应用的样式根据是属性追加重复最后优先原则就是说两个或多个或重复的样式名定义,浏览器所应用的样式是按先后顺序的,如果定义了重复的属性值,以最后定义的为准,如果应用了两个或多个样式名,里面不重复定义的
属性值就追加上去,重复的属性值就以最后一个为准。这里要注意的是,样式的先后不是根据页面上应用的名字顺序,而是样式表里的样式顺序。
页面内嵌法:就是将样式表直接写在页面代码的head区。类似这样:
<styletype="text/css"><!-- body { background : white ; color : black; } --> </style>
外部调用法:将样式表写在一个独立的.css文件中,然后在页面head区用类似以下代码调用。
<linkhref="css/style.css"type="text/css" rel="stylesheet"/>
"@import"命令方法:类以下代码, <styletype="text/css"media="all">@import url( css/style01.css);</style>
本人推荐使用第二种调用方法(外部调用法)
既然样式有优先级,那么就会有一个规则来约定这个优先级,而这个“规则”就是本次所需要讲的重点。
样式表中的特殊性描述了不同规则的相对权重,它的基本规则是:
1、统计选择符中的ID属性个数。
2、统计选择符中的CLASS属性个数。
3、统计选择符中的HTML标记名个数。
最后,按正确的顺序写出三个数字,不要加空格或逗号,得到一个三位数(css2.1是用4位数表示)。( 注意,你需要把数字转换成一个以三个数字结尾的更大的数)。相应于选择符的最终数字列表可以很容易确定较高数字特性凌驾于较低数字的。
例如:
1、每个ID选择符(#someid),加 0,1,0,0。
2、每个class选择符(.someclass)、每个属性选择符(形如[attr=value]等)、每个伪类(形如:hover等)加0,0,1,0。
3、每个元素或伪元素(:firstchild)等,加0,0,0,1。
4、其它选择符包括全局选择符*,加0,0,0,0。相当于没加,不过这也是一种specificity,后面会解释。
解释上图:
│body {} /*这是一个HTML元素*/
└#Container {} /*页面层容器*/
├#Header {} /*页面头部*/
├#PageBody {} /*页面主体*/
│ ├#Sidebar {} /*侧边栏*/
│ └#MainBody {} /*主体内容*/
└#Footer {} /*页面底部*/
body是一个HTML元素,页面中所有的内容都应该写在这标签对之内。
网站使用DIV+CSS布局使代码很是精简,相信大多朋友也都略有所闻,CSS文件可以在网站的任意一个页面进行调用,而若是使用table表格修改部分页面却是显得很麻烦。要是一个门户网站的话,需手动改很多页面,而且看着那些表格也会感觉很乱也很浪费时间,但是使用CSS+DIV布局只需修改CSS文件中的一个代码即可。
使用了DIV+CSS布局的网页与Table布局比较,精简了许多页面代码,那么其浏览访问速度自然得以提升,也从而提升了网站的用户体验度。
采用div-css布局的网站对于搜索引擎很是友好,因此其避免了Table嵌套层次过多而无法被搜索引擎抓取的问题,而且简洁、结构化的代码更加有利于突出重点和适合搜索引擎抓取。
DIV+CSS相比TABLE布局,更容易出现多种浏览器不兼容的问题,主要原因是不同的浏览器对web标准默认值不同。国内主流是ie,firefox及chrome用的较少,在兼容性测试方面,首先需要保证在ie多版本不出现问题,这里涉及到一些方法和技巧,可以针对具体问题在网站查找解决办法。
即使是老手也经常会弄错div的嵌套关系。可以用dreamweaver的验证功能检查一下有无错误。
检查一下有无拼写错误、是否忘记结尾的 } 等。可以利用CleanCSS来检查CSS的拼写错误。CleanCSS本是为CSS减肥的工具,但也能检查出拼写错误。
如果错误影响了整体布局,则可以逐个删除div块,直到删除某个div块后显示恢复正常,即可确定错误发生的位置。
使用float属性布局一不小心就会出错。这时为元素添加border属性确定元素边界,错误原因即水落石出。
MacIE下如果对float的元素的父元素使用clear属性,周围的float元素布局就会混乱。这是MacIE的著名的bug,倘若不知道就会走弯路。
很多浏览器在显示未指定width的float元素时会有bug。所以不管float元素的内容如何,一定要为其指定width属性。
另外指定元素时尽量使用em而不是px做单位。
IE在显示指定了margin和padding的float元素时有bug。因此不要对float元素指定margin和padding属性(可以在float元素内部嵌套一个div来设置margin和padding)。也可以使用hack方法为IE指定特别的值。
如果float元素的宽度之和正好是100%,某些古老的浏览器将不能正常显示。因此请保证宽度之和小于99%。
某些属性如margin、padding等,不同浏览器会有不同的解释。因此最好在开发前首先将全体的margin、padding设置为0、列表样式设置为none等。
如果无论怎样调整不同浏览器显示结果还是不一样,那么可以检查一下页面开头是不是忘了写下DTD声明。
最后,需要注意的是,蜘蛛不喜欢一个页面有太多的css代码,否则同样会影响蜘蛛的爬行,影响搜索引擎的收录,所以采用外部调用的方式调用CSS是非常不错的方法。而同时,若非必须太多花哨的网站,采用CSS布局,同样可以到达所想要的效果。如网站导航中的文字颜色变化、下拉菜单等。
以上是CSS+DIV的解析和牛腩新闻发布系统实例的简单应用,如果出入,还请见谅。