- 浏览: 122764 次
- 性别:
- 来自: 杭州
最新评论
-
小幕天:
...
解决System.Data.OracleClient需要Oracle 客户端软件8.1.7或更高版本 -
u011922057:
使用final修饰变量会让变量的值不能被改变吗--楼主给的这一 ...
谈使用final关键字 -
一念思量LG:
路过,
谈使用final关键字 -
yuejingjiahong:
在搞并发下是有的
将不使用的对象置为NULL可以加快回收吗 -
a00589:
太感谢了 刚刚公司说发送的邮件看不了图片,我也纠结了半天,想都 ...
IE8打开GMAIL的邮件中的图片
第1章 引言
介绍Web规范中的Div+CSS标准的优点:
1.大大缩减页面代码,提高页面浏览速度,缩减带宽成本;
2.结构清晰,容易被搜索引擎搜索到,天生优化了seo
3.缩短改版时间。只要简单的修改几个CSS文件就可以重新设计一个有成百上千页面的站点。
4.强大的字体控制和排版能力。CSS控制字体的能力比糟糕的FONT标签好多了,有了CSS,我们不再需要用FONT标签或者透明的1 px GIF图片来控制标题,改变字体颜色,字体样式等等。
5.CSS非常容易编写。你可以象写html代码一样轻松地编写CSS。
6.提高易用性。使用CSS可以结构化HTML,例如:<p>标签只用来控制段落,heading标签只用来控制标题,table标签只用来表现格式化的数据等等。你可以增加更多的用户而不需要建立独立的版本。
7.可以一次设计,随处发布。你的设计不仅仅用于web浏览器,也可以发布在其他设备上,比如PowerPoint。
8.更好的控制页面布局。不用多说。
9.表现和内容相分离。将设计部分剥离出来放在一个独立样式文件中,你可以减少未来网页无效的可能。
10.更方便搜索引擎的搜索。用只包含结构化内容的HTML代替嵌套的标签,搜索引擎将更有效地搜索到你的内容,并可能给你一个较高的评价(ranking)。
11.Table 布局灵活性不大,你只能遵循 table tr td 的格式。而div 你可以 div ul li 也可以 ol li 还可以 ul li ……但标准语法最好有序的写。
12.另外如果你不是javascrput的高手,你可以不必去写ID,只用class就可以。当客户端程序员写完程序,需要调整时候,你可以在利用他的ID进行控制。
13.Table 中布局中,垃圾代码会很多,一些修饰的样式及布局的代码混合一起,很不利于直观。而Div 更能体现样式和结构相分离,结构的重构性强。
14.在几乎所有的浏览器上都可以使用。
15.以前一些非得通过图片转换实现的功能,现在只要用CSS就可以轻松实现,从而更快地下载页面。
16.使页面的字体变得更漂亮,更容易编排,使页面真正赏心悦目。
17.你可以轻松地控制页面的布局 。
18.你可以将许多网页的风格格式同时更新,不用再一页一页地更新了。你可以将站点上所有的网页风格都使用一个CSS文件进行控制,只要修改这个CSS文件中相应的行,那么整个站点的所有页面都会随之发生变动。
第2章 目标
l 将文档定义<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">换成<?xml version="1.0" encoding="gb2312"?>后保存,能在浏览器中打开无错误。
l 程序员不需关心或了解任何有关界面的表现实现。
l 站点与浏览器无关,或能适应常用浏览器。
l 站点换肤改动量最小(即只需修改配置文件)。
l 站点风格布局随意更换。
第3章 实现前提
程序员
l 程序员不要在页面上加入任何有关页面表现的元素。如页面比较特殊,请在页面的<head></head>中,用<!-- -->用注释的标记表示此页面特殊,不需界面人员修改。
l 程序员在做页面期间使用到ajax等与页面有关技术时,同样在<!-->注释标记出ajax等的使用范围,从第几行到几行是ajax实现的。
l 在界面人员修改页面的时候,如果程序员要修改程序,务必先将工程内的页面替换为界面人员修改后的,防止界面人员多劳动。
界面人员
l 界面人员要加强学习,做一行精一行。如js、javascript等角本技术、css样式布局与重用、xhmlt规范与实现步骤、html页面的缓存技术、样式文件与角本文件的编写规范、文件传输效率等。
l 界面人员要为每个页面中的html标记加class或id等属性,样式文件要精简、每个类要有其存在的必要性,不要陷入class的样式地狱中。
l 界面人员要了解常用浏览器有哪些区别,包括角本区别与样式解析区别。
l 界面人员要了解有关ajax等与界面关系非常大的技术以及实现原理。
****** 程序员与界面人员之间要加强的交流,加强学习。
第4章 具体实现步骤
4.1 页面规则
以下用词如有不了解,请参考第5章释义
4.1.1 文档头定义规则
每个页面必须第一行要有xhtml的文档头定义(必须在第一行),
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">。
本规则无论是页面第一次打开还是执行过一些具体操作都要遵守。
4.1.2 布局容器的使用规则
页面布局使用div,数据表的显示使用table标记,文本的显示label标记,菜单项或多链接(链接比较多)的使用<ul><li><a href=”#”></a></li><li><a></a></li><li><a></a></li></ul>等。
4.1.3 id使用规则
在每个页面中id是惟一的,一个页面只能存在惟一的一个id。尽量少用或不用id选择符。
4.1.4 class使用规则
l class由界面人员负责创建并命名。
l 尽量少用或不用class选择符(类选择符)。
l 通过“选择符”无法精确定位到html标记的使用class。
l 使用常用的input button等。
l 页面中特殊表现形式的。
4.1.5 页面有效规则
程序员交给界面人员的页面必须是有效的,能通过链接的方式或入口打开。
4.1.6 特殊页面规则
页面按照要求要特殊处理的,先在页面上加标记,然后由程序员自己完成或与界面人员交流讨论,由界面人员完成。
4.2 目录规则
由负责界面实现的人员在系统的Themes下存放css、js、images等内容。
4.3 注意事项
4.3.1 要尊重劳动成果,不要随意替换或删除页面。
4.3.2 加强交流
4.3.3 加强学习与运用
第5章 释义
5.1 选择符
任何HTML元素都可以是一个CSS1的选择符。选择符仅仅是指向特别样式的元素。例如,
P { text-indent: 3em }
当中的选择符是P。
div { border: 3px solid #000; }
当中的选择符是div。
5.1.1 类选择符
单一个选择符能有不同的CLASS(类),因而允许同一元素有不同样式。例如,一个网页制作者也许希望视其语言而定,用不同的颜色显示代码 :
code.html { color: #191970 }
code.css { color: #4b0082 }
以上的例子建立了两个类,css和html,供HTML的CODE元素使用。CLASS属性是用于在HTML中以指明元素的类,例如,
<P CLASS=warning>每个选择符只允许有一个类。
例如,code.html.proprietary是无效的。</p>
类的声明也可以无须相关的元素:
.note { font-size: small }
在这个例子,名为note的类可以被用于任何元素。
一个良好的习惯是在命名类的时候,根据它们的功能而不是根据它们的外观。上述例子中的note类也可以命名为small,但如果网页制作者决定改变这个类的样式,使得它不再是小字体的话,那么这个名字就变得毫无意义了。
5.1.2 ID 选择符
ID 选择符个别地定义每个元素的成分。这种选择符应该尽量少用,因为他具有一定的局限。一个ID选择符的指定要有指示符"#"在名字前面。例如,ID选择符可以指定如下:
#svp94O { text-indent: 3em }
这点可以参考HTML中的ID属性:
<P ID=svp94O>文本缩进3em</P>
5.1.3 关联选择符
关联选择符只不过是一个用空格隔开的两个或更多的单一选择符组成的字符串。这些选择符可以指定一般属性,而且因为层叠顺序的规则,它们的优先权比单一的选择符大。例如,以下的上下文选择符
P EM { background: yellow }
是P EM。这个值表示段落中的强调文本会是黄色背景;而标题的强调文本则不受影响。
5.2 声明
5.2.1 属性
一个属性被指定到选择符是为了使用它的样式。属性的例子包括颜色、边界和字体。
5.2.2 值
声明的值是一个属性接受的指定。例如,属性颜色能接受值red。
5.2.3 组合
为了减少样式表的重复声明,组合的选择符声明是允许的。例如,文档中所有的标题可以通过组合给出相同的声明:
H1, H2, H3, H4, H5, H6 {
color: red;
font-family: sans-serif }
5.2.4 继承
实际上,所有在选择符中嵌套的选择符都会继承外层选择符指定的属性值,除非另外更改。例如,一个BODY定义了的颜色值也会应用到段落的文本中。
有些情况是内部选择符不继承周围的选择符的值,但理论上这些都是特殊的。例如,上边界属性是不会继承的;直觉上,一个段落不会有同文档BODY一样的上边界值。
5.2.5 注解
样式表里面的注解使用C语言编程中一样的约定方法去指定。CSS1注解的例子如以下格式:
/* COMMENTS CANNOT BE NESTED */
5.3 伪类和伪元素
伪类和伪元素是特殊的类和元素,能自动地被支持CSS的浏览器所识别。伪类区别开不同种类的元素(例如,visited links(已访问的连接)和active links(可激活连接)描述了两个定位锚(anchors)的类型)。伪元素指元素的一部分,例如段落的第一个字母。
伪类或伪元素规则的形式如
选择符:伪类 { 属性: 值 }
或
选择符:伪元素 { 属性: 值 }
伪类和伪元素不应用HTML的CLASS属性来指定。一般的类可以与伪类和伪元素一起使用,如下:
选择符.类: 伪类 { 属性: 值 }
或
选择符.类: 伪元素 { 属性: 值 }
5.3.1 定位锚伪类
伪类可以指定A元素以不同的方式显示连接(links)、已访问连接(visited links)和可激活连接(active links)。定位锚元素可给出伪类link、visited或active。一个已访问连接可以定义为不同颜色的显示,甚至不同字体大小和风格。
一个有趣的效果是使当前(或“可激活”)连接以不同颜色、更大的字体显示。然后,当网页的已访问连接被重选时,又以不同颜色、更小字体显示。这个样式表的示例如下:
A:link { color: red }
A:active { color: blue; font-size: 125% }
A:visited { color: green; font-size: 85% }
5.3.2 首行伪元素
通常在报纸上的文章,例如Wall Street Journal中的,文本的首行都会以粗印体而且全部大写地展示。CSS1包括了这个功能,将其作为一个伪元素。首行伪元素可以用于任何块级元素(例如P、H1等等)。以下是一个首行伪元素的例子:
P:first-line {
font-variant: small-caps;
font-weight: bold }
5.3.3 首个字母伪元素
首个字母伪元素用于加大(drop caps)和其他效果。含有已指定值选择符的文本的首个字母会按照指定的值展示。一个首个字母伪元素可以用于任何块级元素。例如:
P:first-letter { font-size: 300%; float: left }
会比普通字体加大三倍。
5.4 层叠顺序
当使用了多个样式表,样式表需要争夺特定选择符的控制权。在这些情况下,总会有样式表的规则能获得控制权。以下的特性将决定互相对立的样式表的结果。
1. ! important
规则可以用指定的! important 特指为重要的。一个特指为重要的样式会凌驾于与之对立的其它相同权重的样式。同样地,当网页制作者和读者都指定了重要规则时,网页制作者的规则会超越读者的。以下是! important 声明的例子:
BODY { background: url(bar.gif) white;
background-repeat: repeat-x ! important }
2. Origin of Rules (Author's vs. Reader's)
正如以前所提及的,网页制作者和读者都有能力去指定样式表。当两者的规则发生冲突,网页制作者的规则会凌驾于读者的其它相同权重的规则。而网页制作者和读者的样式表都超越浏览器的内置样式表。
网页制作者应该小心地使用! important 规则,因为它们会超越用户任何的! important 规则。例如,一个用户由于视觉关系,会要求大字体或指定的颜色,而且这样的用户会有可能声明确定的样式规则为! important,因为这些样式对于用户阅读网页是极为重要的。任何的! important 规则会超越一般的规则,所以建议网页制作者使用一般的规则以确保有特殊样式需要的用户能阅读网页。
3. 选择符规则: 计算特性
基于它们的特性级别,样式表也可以超越与之冲突的样式表,一个较高特性的样式永远都凌驾于一个较低特性的样式。这只不过是计算选择符的指定个数的一个统计游戏。
a. 统计选择符中的ID属性个数。
b. 统计选择符中的CLASS属性个数。
c. 统计选择符中的HTML标记名格式。
最后,按正确的顺序写出三个数字,不要加空格或逗号,得到一个三位数。( 注意,你需要将数字转换成一个以三个数字结尾的更大的数。)相应于选择符的最终数字列表可以很容易确定较高数字特性凌驾于较低数字的。以下是一个按特性分类的选择符的列表:
#id1 {xxx} /* a=1 b=0 c=0 --> 特性 = 100 */
UL UL LI.red {xxx} /* a=0 b=1 c=3 --> 特性 = 013 */
LI.red {xxx} /* a=0 b=1 c=1 --> 特性 = 011 */
LI {xxx} /* a=0 b=0 c=1 --> 特性 = 001 */
4. 特性的顺序
为了方便使用,当两个规则具同样权重时,取后面的那个。
第6章 XHTML概念及规则简略总结
一、 XHTML概念
XHTML是 EXtensible HyperText Markup Language(可扩展超文本标记语言) 的英文缩写,并于2000年1月26日被国际标准组织机构W3C(World Wide web Consortium)定为一个标准的,认为是HTML的一个最新版本,并且将逐渐替换HTML。现在所有的浏览器都支持XHTML,XHTML兼容 HTML 4.0。
XHTML是HTML升级为XML的一种过度技术产品,被定为一个标准,XHTML完全兼容HTML4.01,并且具有XML的语法。
二、 XHTML与HTML的最大区别。
1. XHTML 元素一定要被正确的嵌套使用。
例:在HTML中,错误的嵌套<div><p>text</div></p>会被浏览器所兼容,而在XHTML中,必须正确嵌套<div><p>text</p></div>!
2. XHTML 文件一定要有正确的组织格式。
所有的XHTML应该正确的被嵌套在以<html>开始以</html>结束的元素里面,其他的元素可以有子元素,并且子元素也要被正确的嵌套在他们的父元素内。
例:<div><span>text</span></div>是正确的,而<span><div>text</div></span>是错误的,因为span是div的子元素,而不是相反。其他元素关系请参见XHTML语法。
3. 标签名字一定要用小写字母。
因为 XHTML文档是XML应用程序, XML 对大小写是敏感的。象 <br> 和 <BR> 是两个不同的标记。
例:<BODY></BODY>是错误的,必须改为<body></body>。
4. 所有的 XHTML 元素一定要关闭。
XHTML要求有严谨的结构,所有标签必须关闭。不能有没有关闭的空的元素存在我们的代码中,有开始就应该有结束。独立的一个标签我们也要结束用 />来结束。
例:<p>text是错误的,必须改为<p>text</p>。<br><hr>是错误的,必须改为<br /><hr />。
5. 属性名字必须小写。
<table ID=”table”>是错误的,必须改为<table id=”table”>
6. 属性的缩写被禁止。
XHTML规定所有属性都必须有一个值,没有值的就重复本身。
例:<input checked>是错误的,必须改为<input checked=”checked” />
7. 所有的属性必须用双引号""括起来。
<table id=table>是错误的,必须改为<table id=”table”>。
8. XHTML DTD定义文档的类型。
在XHTML中我们必须声明文档的类型,以便于浏览器知道你的文档是什么类型的,而且声明部分要加在文档的head之前。DOCTYPE声明是必不可少的关键组成部分,否则标识和CSS都不会生效。
<!DOCTYPE ...>
<html>
<head>
<title>... </title>
</head>
<body> ... </body>
</html>
9. DTD声明类型。
过渡的(Transitional):要求非常宽松的DTD,它允许你继续使用HTML4.01的标识(但是要符合xhtml的写法)。
写法:<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
严格的(Strict):要求严格的DTD,你不能使用任何表现层的标识和属性。
写法:<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
框架的(Frameset):专门针对框架页面设计使用的DTD,如果你的页面中包含有框架,需要采用这种DTD。
写法:<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Frameset//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-frameset.dtd">
第7章 针对IE6,IE7,Firefox的CSS
[转]
用CSS进行构建网页的时候,IE6跟Firefox之间的差异问题可以用 !important 来解决(这种方法尽量少用),但是IE7似乎还是不认识 !important ,而且它跟IE6之间也存在一些差异。浏览器的不一致性总是让人很头疼!
下面分别给出IE6\IE7\Firefox的hack代码:
#example { color: #333 !important; } /* Firefox */
* html #example { color: #666; } /* IE6 */
*+html #example { color: #999; } /* IE7 */
那么在Firefox下字体颜色显示为#333,IE6下字体颜色显示为#666,IE7下字体颜色显示为#999,他们之间互不干扰。
判断浏览器类型
<!--[if lt IE 7]>
<link type="text/css" media="all" rel="stylesheet" href="/css/main_IE.css" />
<script type="text/javascript" src="/scripts/pngfix.js"></script>
<![endif]-->
注释中的东西只有小于版本7的IE采取执行,其他浏览器都忽略。
第8章 Css优先权
[转]
优先权问题其实就是一个冲突解决的问题,当同一个元素(或内容)被CSS选择符选中时,就要按照优先权取舍不同的CSS规则,这其中涉及到的问题其实很多。
首先就是CSS规则的specificity(特殊性),CSS2.1有一套关于specificity的计算方式,用一个四位的数字串(CSS2是三位)来表示,最终specificity越高的规则越特殊,在优先级判定时也就越有优势。关于specificity的具体计算在各种情况下的数字加成有如下一般规则:
* 每个ID选择符(#someid),加 0,1,0,0。
* 每个class选择符(.someclass)、每个属性选择符(形如[attr=”"]等)、每个伪类(形如:hover等)加0,0,1,0
* 每个元素或伪元素(:firstchild)等,加0,0,0,1
* 其他选择符包括全局选择符*,加0,0,0,0。相当于没加,不过这也是一种specificity,后面会解释。
按这些规则将数字串逐位相加,就得到最终计算得的specificity,然后在比较取舍时按照从左到右的顺序逐位比较。
举一些例子吧:
h1 {color: red;}
/* 只有一个普通元素加成,结果是 0,0,0,1 */
body h1 {color: green;}
/* 两个普通元素加成,结果是 0,0,0,2 */
——后者胜出
h2.grape {color: purple;}
/* 一个普通元素、一个class选择符加成,结果是 0,0,1,1*/
h2 {color: silver;} /*一个普通元素,结果是 0,0,0,1 */
——前者胜出
html > body table tr[id=”totals”] td ul > li {color: maroon;}
/* 7个普通元素、一个属性选择符、两个其他选择符,结果是0,0,1,7 */
li#answer {color: navy;}
/* 一个ID选择符,一个普通选择符,结果是0,1,0,1 */
——后者胜出
除了specificity还有一些其他规则
* 文内的样式优先级为1,0,0,0,所以始终高于外部定义。这里文内样式指形如<div style=”color: red”>blah</div>的样式,而外部定义指经由<link>或<style>标签定义的规则。
* 有!important声明的规则高于一切。
* 如果!important声明冲突,则比较优先权。
* 如果优先权一样,则按照在源码中出现的顺序决定,后来者居上。
* 由继承而得到的样式没有specificity的计算,它低于一切其他规则(比如全局选择符*定义的规则)。
* 关于经由@import载入的外部样式,由于@import必须出现在所有其他规则定义之前(如不是,则浏览器应该忽略之),所以按照后来居上原则,一般优先权冲突时是占下风的。
这里需要提一下IE,IE是可以识别位置错误的@import的,但无论@import在什么地方,它都认为是位于所有其他规则定义之前的,这可能会引发一些误会。
所以优先权问题虽然看起来简单,但其背后还是有蛮复杂的机制
第9章 CSS的十八般技巧
[转]
一.使用css缩写
使用缩写可以帮助减少你CSS文件的大小,更加容易阅读。css缩写的主要规则请参看《常用css缩写语法总结》,这里就不展开描述。
二.明确定义单位,除非值为0
忘记定义尺寸的单位是CSS新手普遍的错误。在HTML中你可以只写width="100",但是在CSS中,你必须给一个准确的单位,比如:width:100px width:100em。只有两个例外情况可以不定义单位:行高和0值。除此以外,其他值都必须紧跟单位,注意,不要在数值和单位之间加空格。
三.区分大小写
当在XHTML中使用CSS,CSS里定义的元素名称是区分大小写的。为了避免这种错误,我建议所有的定义名称都采用小写。
class和id的值在HTML和XHTML中也是区分大小写的,如果你一定要大小写混合写,请仔细确认你在CSS的定义和XHTML里的标签是一致的。
四.取消class和id前的元素限定
当你写给一个元素定义class或者id,你可以省略前面的元素限定,因为ID在一个页面里是唯一的,而clas s可以在页面中多次使用。你限定某个元素毫无意义。例如:
div#content { /* declarations */ }
fieldset.details { /* declarations */ }
可以写成
#content { /* declarations */ }
.details { /* declarations */ }
这样可以节省一些字节。
五.默认值
通常padding的默认值为0,background-color的默认值是transparent。但是在不同的浏览器默认值可能不同。如果怕有冲突,可以在样式表一开始就先定义所有元素的margin和padding值都为0,象这样:
* {
margin:0;
padding:0;
}
六.不需要重复定义可继承的值
CSS中,子元素自动继承父元素的属性值,象颜色、字体等,已经在父元素中定义过的,在子元素中可以直接继承,不需要重复定义。但是要注意,浏览器可能用一些默认值覆盖你的定义。
七.最近优先原则
如果对同一个元素的定义有多种,以最接近(最小一级)的定义为最优先,例如有这么一段代码
Update: Lorem ipsum dolor set
在CSS文件中,你已经定义了元素p,又定义了一个class"update"
p {
margin:1em 0;
font-size:1em;
color:#333;
}
.update {
font-weight:bold;
color:#600;
}
这两个定义中,class="update"将被使用,因为class比p更近。你可以查阅W3C的《 Calculating a selector’s specificity》 了解更多。
八.多重class定义
一个标签可以同时定义多个class。例如:我们先定义两个样式,第一个样式背景为#666;第二个样式有10 px的边框。
.one{width:200px;background:#666;}
.two{border:10px solid #F00;}
在页面代码中,我们可以这样调用
<div class="one two"></div>
这样最终的显示效果是这个div既有#666的背景,也有10px的边框。是的,这样做是可以的,你可以尝试一下。
九.使用子选择器(descendant selectors)
CSS初学者不知道使用子选择器是影响他们效率的原因之一。子选择器可以帮助你节约大量的class定义。我们来看下面这段代码:
<div id="subnav">
<ul>
<li class="subnavitem"> <a href="#" class="subnavitem">Item 1</a></li>>
<li class="subnavitemselected"> <a href="#" class="subnavitemselected"> Item 1</a> </li>
<li class="subnavitem"> <a href="#" class="subnavitem"> Item 1</a> </li>
</ul>
</div>
这段代码的CSS定义是:
div#subnav ul { /* Some styling */ }
div#subnav ul li.subnavitem { /* Some styling */ }
div#subnav ul li.subnavitem a.subnavitem { /* Some styling */ }
div#subnav ul li.subnavitemselected { /* Some styling */ }
div#subnav ul li.subnavitemselected a.subnavitemselected { /* Some styling */ }
你可以用下面的方法替代上面的代码
<ul id="subnav">
<li> <a href="#"> Item 1</a> </li>
<li class="sel"> <a href="#"> Item 1</a> </li>
<li> <a href="#"> Item 1</a> </li>
</ul>
样式定义是:
#subnav { /* Some styling */ }
#subnav li { /* Some styling */ }
#subnav a { /* Some styling */ }
#subnav .sel { /* Some styling */ }
#subnav .sel a { /* Some styling */ }
用子选择器可以使你的代码和CSS更加简洁、更加容易阅读。
十.不需要给背景图片路径加引号
为了节省字节,我建议不要给背景图片路径加引号,因为引号不是必须的。例如:
background:url("images/***.gif") #333;
可以写为
background:url(images/***.gif) #333;
如果你加了引号,反而会引起一些浏览器的错误。
十一.组选择器(Group selectors)
当一些元素类型、class或者id都有共同的一些属性,你就可以使用组选择器来避免多次的重复定义。这可以节省不少字节。
例如:定义所有标题的字体、颜色和margin,你可以这样写:
h1,h2,h3,h4,h5,h6 {
font-family:"Lucida Grande",Lucida,Arial,Helvetica,sans-serif;
color:#333;
margin:1em 0;
}
如果在使用时,有个别元素需要定义独立样式,你可以再加上新的定义,可以覆盖老的定义,例如:
h1 { font-size:2em; }
h2 { font-size:1.6em; }
十二.用正确的顺序指定链接的样式
当你用CSS来定义链接的多个状态样式时,要注意它们书写的顺序,正确的顺序是::link :visited :hover :active。抽取第一个字母是"LVHA",你可以记忆成"LoVe HAte"(喜欢讨厌)。为什么这么定义,可以参考Eric Meyer的《Link Specificity》。
如果你的用户需要用键盘来控制,需要知道当前链接的焦点,你还可以定义:focus属性。:focus属性的效果也取决与你书写的位置,如果你希望聚焦元素显示:hover效果,你就把:focus写在:hover前面;如果你希望聚焦效果替代:hover效果,你就把:focus放在:hover后面。
十三.清除浮动
一个非常常见的CSS问题,定位使用浮动的时候,下面的层被浮动的层所覆盖,或者层里嵌套的子层超出了外层的范围。
通常的解决办法是在浮动层后面添加一个额外元素,例如一个div或者一个br,并且定义它的样式为clear: both。这个办法有一点牵强,幸运的是还有一个好办法可以解决,参看这篇文章《How To Clear Floats Without Structural Markup》(注:本站将尽快翻译此文)。
上面2种方法可以很好解决浮动超出的问题,但是如果当你真的需要对层或者层里的对象进行clear的时候怎么办?一种简单的方法就是用overflow属性,这个方法最初的发表在《Simple Clearing of Floats》,又在《Clearance》和《Super simple clearing floats》中被广泛讨论。
上面那一种clear方法更适合你,要看具体的情况,这里不再展开论述。另外关于float的应用,一些优秀的文章已经说得很清楚,推荐你阅读:《Floatutorial》、《Containing Floats》和《Float Layouts》
十四.横向居中(centering)
这是一个简单的技巧,但是值得再说一遍,因为我看见太多的新手问题都是问这个:CSS如何横向居中?你需要定义元素的宽,并且定义横向的margin,如果你的布局包含在一个层(容器)中,就象这样:
你可以这样定义使它横向居中:
#wrap {
width:760px; /* 修改为你的层的宽度 */
margin:0 auto;
}
但是IE5/Win不能正确显示这个定义,我们采用一个非常有用的技巧来解决:用text-align属性。就象这样:
body {
text-align:center;
}
#wrap {
width:760px; /* 修改为你的层的宽度 */
margin:0 auto;
text-align:left;
}
第一个body的text-align:center; 规则定义IE5/Win中body的所有元素居中(其他浏览器只是将文字居中) ,第二个text-align:left;是将#warp中的文字居左。
十五.导入(Import)和隐藏CSS
因为老版本浏览器不支持CSS,一个通常的做法是使用@import技巧来把CSS隐藏起来。例如:
@import url("main.css");
然而,这个方法对IE4不起作用,这让我很是头疼了一阵子。后来我用这样的写法:
@import "main.css";
这样就可以在IE4中也隐藏CSS了,呵呵,还节省了5个字节呢。想了解@import语法的详细说明,可以看这里《centricle’s css filter chart》
十六.针对IE的优化
有些时候,你需要对IE浏览器的bug定义一些特别的规则,这里有太多的CSS技巧(hacks),我只使用其中的两种方法,不管微软在即将发布的IE7 beta版里是否更好的支持CSS,这两种方法都是最安全的。
* 1.注释的方法
o (a)在IE中隐藏一个CSS定义,你可以使用子选择器(child selector):
html>body p {
/* 定义内容 */
}
o (b)下面这个写法只有IE浏览器可以理解(对其他浏览器都隐藏)
* html p {
/* declarations */
}
o (c)还有些时候,你希望IE/Win有效而IE/Mac隐藏,你可以使用"反斜线"技巧:
/* \*/
* html p {
declarations
}
/* */
* 2.条件注释(conditional comments)的方法
另外一种方法,我认为比CSS Hacks更加经得起考验就是采用微软的私有属性条件注释(conditional comments)。用这个方法你可以给IE单独定义一些样式,而不影响主样式表的定义。就象这样:
<!--[if IE]>
<link rel="stylesheet" type="text/css" href="ie.css" />
<![endif]-->
十七.调试技巧:层有多大?
当调试CSS发生错误,你就要象排版工人,逐行分析CSS代码。我通常在出问题的层上定义一个背景颜色,这样就能很明显看到层占据多大空间。有些人建议用border,一般情况也是可以的,但问题是,有时候border 会增加元素的尺寸,border-top和boeder-bottom会破坏纵向margin的值,所以使用background更加安全些。
另外一个经常出问题的属性是outline。outline看起来象boeder,但不会影响元素的尺寸或者位置。只有少数浏览器支持outline属性,我所知道的只有Safari、OmniWeb、和Opera。
十八.CSS代码书写样式
在写CSS代码的时候,对于缩进、断行、空格,每个人有每个人的书写习惯。在经过不断实践后,我决定采用下面这样的书写样式:
selector1,
selector2 {
property:value;
}
当使用联合定义时,我通常将每个选择器单独写一行,这样方便在CSS文件中找到它们。在最后一个选择器和大括号{之间加一个空格,每个定义也单独写一行,分号直接在属性值后,不要加空格。
我习惯在每个属性值后面都加分号,虽然规则上允许最后一个属性值后面可以不写分号,但是如果你要加新样式时容易忘记补上分号而产生错误,所以还是都加比较好。
最后,关闭的大括号}单独写一行。
空格和换行有助与阅读。
介绍Web规范中的Div+CSS标准的优点:
1.大大缩减页面代码,提高页面浏览速度,缩减带宽成本;
2.结构清晰,容易被搜索引擎搜索到,天生优化了seo
3.缩短改版时间。只要简单的修改几个CSS文件就可以重新设计一个有成百上千页面的站点。
4.强大的字体控制和排版能力。CSS控制字体的能力比糟糕的FONT标签好多了,有了CSS,我们不再需要用FONT标签或者透明的1 px GIF图片来控制标题,改变字体颜色,字体样式等等。
5.CSS非常容易编写。你可以象写html代码一样轻松地编写CSS。
6.提高易用性。使用CSS可以结构化HTML,例如:<p>标签只用来控制段落,heading标签只用来控制标题,table标签只用来表现格式化的数据等等。你可以增加更多的用户而不需要建立独立的版本。
7.可以一次设计,随处发布。你的设计不仅仅用于web浏览器,也可以发布在其他设备上,比如PowerPoint。
8.更好的控制页面布局。不用多说。
9.表现和内容相分离。将设计部分剥离出来放在一个独立样式文件中,你可以减少未来网页无效的可能。
10.更方便搜索引擎的搜索。用只包含结构化内容的HTML代替嵌套的标签,搜索引擎将更有效地搜索到你的内容,并可能给你一个较高的评价(ranking)。
11.Table 布局灵活性不大,你只能遵循 table tr td 的格式。而div 你可以 div ul li 也可以 ol li 还可以 ul li ……但标准语法最好有序的写。
12.另外如果你不是javascrput的高手,你可以不必去写ID,只用class就可以。当客户端程序员写完程序,需要调整时候,你可以在利用他的ID进行控制。
13.Table 中布局中,垃圾代码会很多,一些修饰的样式及布局的代码混合一起,很不利于直观。而Div 更能体现样式和结构相分离,结构的重构性强。
14.在几乎所有的浏览器上都可以使用。
15.以前一些非得通过图片转换实现的功能,现在只要用CSS就可以轻松实现,从而更快地下载页面。
16.使页面的字体变得更漂亮,更容易编排,使页面真正赏心悦目。
17.你可以轻松地控制页面的布局 。
18.你可以将许多网页的风格格式同时更新,不用再一页一页地更新了。你可以将站点上所有的网页风格都使用一个CSS文件进行控制,只要修改这个CSS文件中相应的行,那么整个站点的所有页面都会随之发生变动。
第2章 目标
l 将文档定义<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">换成<?xml version="1.0" encoding="gb2312"?>后保存,能在浏览器中打开无错误。
l 程序员不需关心或了解任何有关界面的表现实现。
l 站点与浏览器无关,或能适应常用浏览器。
l 站点换肤改动量最小(即只需修改配置文件)。
l 站点风格布局随意更换。
第3章 实现前提
程序员
l 程序员不要在页面上加入任何有关页面表现的元素。如页面比较特殊,请在页面的<head></head>中,用<!-- -->用注释的标记表示此页面特殊,不需界面人员修改。
l 程序员在做页面期间使用到ajax等与页面有关技术时,同样在<!-->注释标记出ajax等的使用范围,从第几行到几行是ajax实现的。
l 在界面人员修改页面的时候,如果程序员要修改程序,务必先将工程内的页面替换为界面人员修改后的,防止界面人员多劳动。
界面人员
l 界面人员要加强学习,做一行精一行。如js、javascript等角本技术、css样式布局与重用、xhmlt规范与实现步骤、html页面的缓存技术、样式文件与角本文件的编写规范、文件传输效率等。
l 界面人员要为每个页面中的html标记加class或id等属性,样式文件要精简、每个类要有其存在的必要性,不要陷入class的样式地狱中。
l 界面人员要了解常用浏览器有哪些区别,包括角本区别与样式解析区别。
l 界面人员要了解有关ajax等与界面关系非常大的技术以及实现原理。
****** 程序员与界面人员之间要加强的交流,加强学习。
第4章 具体实现步骤
4.1 页面规则
以下用词如有不了解,请参考第5章释义
4.1.1 文档头定义规则
每个页面必须第一行要有xhtml的文档头定义(必须在第一行),
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">。
本规则无论是页面第一次打开还是执行过一些具体操作都要遵守。
4.1.2 布局容器的使用规则
页面布局使用div,数据表的显示使用table标记,文本的显示label标记,菜单项或多链接(链接比较多)的使用<ul><li><a href=”#”></a></li><li><a></a></li><li><a></a></li></ul>等。
4.1.3 id使用规则
在每个页面中id是惟一的,一个页面只能存在惟一的一个id。尽量少用或不用id选择符。
4.1.4 class使用规则
l class由界面人员负责创建并命名。
l 尽量少用或不用class选择符(类选择符)。
l 通过“选择符”无法精确定位到html标记的使用class。
l 使用常用的input button等。
l 页面中特殊表现形式的。
4.1.5 页面有效规则
程序员交给界面人员的页面必须是有效的,能通过链接的方式或入口打开。
4.1.6 特殊页面规则
页面按照要求要特殊处理的,先在页面上加标记,然后由程序员自己完成或与界面人员交流讨论,由界面人员完成。
4.2 目录规则
由负责界面实现的人员在系统的Themes下存放css、js、images等内容。
4.3 注意事项
4.3.1 要尊重劳动成果,不要随意替换或删除页面。
4.3.2 加强交流
4.3.3 加强学习与运用
第5章 释义
5.1 选择符
任何HTML元素都可以是一个CSS1的选择符。选择符仅仅是指向特别样式的元素。例如,
P { text-indent: 3em }
当中的选择符是P。
div { border: 3px solid #000; }
当中的选择符是div。
5.1.1 类选择符
单一个选择符能有不同的CLASS(类),因而允许同一元素有不同样式。例如,一个网页制作者也许希望视其语言而定,用不同的颜色显示代码 :
code.html { color: #191970 }
code.css { color: #4b0082 }
以上的例子建立了两个类,css和html,供HTML的CODE元素使用。CLASS属性是用于在HTML中以指明元素的类,例如,
<P CLASS=warning>每个选择符只允许有一个类。
例如,code.html.proprietary是无效的。</p>
类的声明也可以无须相关的元素:
.note { font-size: small }
在这个例子,名为note的类可以被用于任何元素。
一个良好的习惯是在命名类的时候,根据它们的功能而不是根据它们的外观。上述例子中的note类也可以命名为small,但如果网页制作者决定改变这个类的样式,使得它不再是小字体的话,那么这个名字就变得毫无意义了。
5.1.2 ID 选择符
ID 选择符个别地定义每个元素的成分。这种选择符应该尽量少用,因为他具有一定的局限。一个ID选择符的指定要有指示符"#"在名字前面。例如,ID选择符可以指定如下:
#svp94O { text-indent: 3em }
这点可以参考HTML中的ID属性:
<P ID=svp94O>文本缩进3em</P>
5.1.3 关联选择符
关联选择符只不过是一个用空格隔开的两个或更多的单一选择符组成的字符串。这些选择符可以指定一般属性,而且因为层叠顺序的规则,它们的优先权比单一的选择符大。例如,以下的上下文选择符
P EM { background: yellow }
是P EM。这个值表示段落中的强调文本会是黄色背景;而标题的强调文本则不受影响。
5.2 声明
5.2.1 属性
一个属性被指定到选择符是为了使用它的样式。属性的例子包括颜色、边界和字体。
5.2.2 值
声明的值是一个属性接受的指定。例如,属性颜色能接受值red。
5.2.3 组合
为了减少样式表的重复声明,组合的选择符声明是允许的。例如,文档中所有的标题可以通过组合给出相同的声明:
H1, H2, H3, H4, H5, H6 {
color: red;
font-family: sans-serif }
5.2.4 继承
实际上,所有在选择符中嵌套的选择符都会继承外层选择符指定的属性值,除非另外更改。例如,一个BODY定义了的颜色值也会应用到段落的文本中。
有些情况是内部选择符不继承周围的选择符的值,但理论上这些都是特殊的。例如,上边界属性是不会继承的;直觉上,一个段落不会有同文档BODY一样的上边界值。
5.2.5 注解
样式表里面的注解使用C语言编程中一样的约定方法去指定。CSS1注解的例子如以下格式:
/* COMMENTS CANNOT BE NESTED */
5.3 伪类和伪元素
伪类和伪元素是特殊的类和元素,能自动地被支持CSS的浏览器所识别。伪类区别开不同种类的元素(例如,visited links(已访问的连接)和active links(可激活连接)描述了两个定位锚(anchors)的类型)。伪元素指元素的一部分,例如段落的第一个字母。
伪类或伪元素规则的形式如
选择符:伪类 { 属性: 值 }
或
选择符:伪元素 { 属性: 值 }
伪类和伪元素不应用HTML的CLASS属性来指定。一般的类可以与伪类和伪元素一起使用,如下:
选择符.类: 伪类 { 属性: 值 }
或
选择符.类: 伪元素 { 属性: 值 }
5.3.1 定位锚伪类
伪类可以指定A元素以不同的方式显示连接(links)、已访问连接(visited links)和可激活连接(active links)。定位锚元素可给出伪类link、visited或active。一个已访问连接可以定义为不同颜色的显示,甚至不同字体大小和风格。
一个有趣的效果是使当前(或“可激活”)连接以不同颜色、更大的字体显示。然后,当网页的已访问连接被重选时,又以不同颜色、更小字体显示。这个样式表的示例如下:
A:link { color: red }
A:active { color: blue; font-size: 125% }
A:visited { color: green; font-size: 85% }
5.3.2 首行伪元素
通常在报纸上的文章,例如Wall Street Journal中的,文本的首行都会以粗印体而且全部大写地展示。CSS1包括了这个功能,将其作为一个伪元素。首行伪元素可以用于任何块级元素(例如P、H1等等)。以下是一个首行伪元素的例子:
P:first-line {
font-variant: small-caps;
font-weight: bold }
5.3.3 首个字母伪元素
首个字母伪元素用于加大(drop caps)和其他效果。含有已指定值选择符的文本的首个字母会按照指定的值展示。一个首个字母伪元素可以用于任何块级元素。例如:
P:first-letter { font-size: 300%; float: left }
会比普通字体加大三倍。
5.4 层叠顺序
当使用了多个样式表,样式表需要争夺特定选择符的控制权。在这些情况下,总会有样式表的规则能获得控制权。以下的特性将决定互相对立的样式表的结果。
1. ! important
规则可以用指定的! important 特指为重要的。一个特指为重要的样式会凌驾于与之对立的其它相同权重的样式。同样地,当网页制作者和读者都指定了重要规则时,网页制作者的规则会超越读者的。以下是! important 声明的例子:
BODY { background: url(bar.gif) white;
background-repeat: repeat-x ! important }
2. Origin of Rules (Author's vs. Reader's)
正如以前所提及的,网页制作者和读者都有能力去指定样式表。当两者的规则发生冲突,网页制作者的规则会凌驾于读者的其它相同权重的规则。而网页制作者和读者的样式表都超越浏览器的内置样式表。
网页制作者应该小心地使用! important 规则,因为它们会超越用户任何的! important 规则。例如,一个用户由于视觉关系,会要求大字体或指定的颜色,而且这样的用户会有可能声明确定的样式规则为! important,因为这些样式对于用户阅读网页是极为重要的。任何的! important 规则会超越一般的规则,所以建议网页制作者使用一般的规则以确保有特殊样式需要的用户能阅读网页。
3. 选择符规则: 计算特性
基于它们的特性级别,样式表也可以超越与之冲突的样式表,一个较高特性的样式永远都凌驾于一个较低特性的样式。这只不过是计算选择符的指定个数的一个统计游戏。
a. 统计选择符中的ID属性个数。
b. 统计选择符中的CLASS属性个数。
c. 统计选择符中的HTML标记名格式。
最后,按正确的顺序写出三个数字,不要加空格或逗号,得到一个三位数。( 注意,你需要将数字转换成一个以三个数字结尾的更大的数。)相应于选择符的最终数字列表可以很容易确定较高数字特性凌驾于较低数字的。以下是一个按特性分类的选择符的列表:
#id1 {xxx} /* a=1 b=0 c=0 --> 特性 = 100 */
UL UL LI.red {xxx} /* a=0 b=1 c=3 --> 特性 = 013 */
LI.red {xxx} /* a=0 b=1 c=1 --> 特性 = 011 */
LI {xxx} /* a=0 b=0 c=1 --> 特性 = 001 */
4. 特性的顺序
为了方便使用,当两个规则具同样权重时,取后面的那个。
第6章 XHTML概念及规则简略总结
一、 XHTML概念
XHTML是 EXtensible HyperText Markup Language(可扩展超文本标记语言) 的英文缩写,并于2000年1月26日被国际标准组织机构W3C(World Wide web Consortium)定为一个标准的,认为是HTML的一个最新版本,并且将逐渐替换HTML。现在所有的浏览器都支持XHTML,XHTML兼容 HTML 4.0。
XHTML是HTML升级为XML的一种过度技术产品,被定为一个标准,XHTML完全兼容HTML4.01,并且具有XML的语法。
二、 XHTML与HTML的最大区别。
1. XHTML 元素一定要被正确的嵌套使用。
例:在HTML中,错误的嵌套<div><p>text</div></p>会被浏览器所兼容,而在XHTML中,必须正确嵌套<div><p>text</p></div>!
2. XHTML 文件一定要有正确的组织格式。
所有的XHTML应该正确的被嵌套在以<html>开始以</html>结束的元素里面,其他的元素可以有子元素,并且子元素也要被正确的嵌套在他们的父元素内。
例:<div><span>text</span></div>是正确的,而<span><div>text</div></span>是错误的,因为span是div的子元素,而不是相反。其他元素关系请参见XHTML语法。
3. 标签名字一定要用小写字母。
因为 XHTML文档是XML应用程序, XML 对大小写是敏感的。象 <br> 和 <BR> 是两个不同的标记。
例:<BODY></BODY>是错误的,必须改为<body></body>。
4. 所有的 XHTML 元素一定要关闭。
XHTML要求有严谨的结构,所有标签必须关闭。不能有没有关闭的空的元素存在我们的代码中,有开始就应该有结束。独立的一个标签我们也要结束用 />来结束。
例:<p>text是错误的,必须改为<p>text</p>。<br><hr>是错误的,必须改为<br /><hr />。
5. 属性名字必须小写。
<table ID=”table”>是错误的,必须改为<table id=”table”>
6. 属性的缩写被禁止。
XHTML规定所有属性都必须有一个值,没有值的就重复本身。
例:<input checked>是错误的,必须改为<input checked=”checked” />
7. 所有的属性必须用双引号""括起来。
<table id=table>是错误的,必须改为<table id=”table”>。
8. XHTML DTD定义文档的类型。
在XHTML中我们必须声明文档的类型,以便于浏览器知道你的文档是什么类型的,而且声明部分要加在文档的head之前。DOCTYPE声明是必不可少的关键组成部分,否则标识和CSS都不会生效。
<!DOCTYPE ...>
<html>
<head>
<title>... </title>
</head>
<body> ... </body>
</html>
9. DTD声明类型。
过渡的(Transitional):要求非常宽松的DTD,它允许你继续使用HTML4.01的标识(但是要符合xhtml的写法)。
写法:<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
严格的(Strict):要求严格的DTD,你不能使用任何表现层的标识和属性。
写法:<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
框架的(Frameset):专门针对框架页面设计使用的DTD,如果你的页面中包含有框架,需要采用这种DTD。
写法:<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Frameset//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-frameset.dtd">
第7章 针对IE6,IE7,Firefox的CSS
[转]
用CSS进行构建网页的时候,IE6跟Firefox之间的差异问题可以用 !important 来解决(这种方法尽量少用),但是IE7似乎还是不认识 !important ,而且它跟IE6之间也存在一些差异。浏览器的不一致性总是让人很头疼!
下面分别给出IE6\IE7\Firefox的hack代码:
#example { color: #333 !important; } /* Firefox */
* html #example { color: #666; } /* IE6 */
*+html #example { color: #999; } /* IE7 */
那么在Firefox下字体颜色显示为#333,IE6下字体颜色显示为#666,IE7下字体颜色显示为#999,他们之间互不干扰。
判断浏览器类型
<!--[if lt IE 7]>
<link type="text/css" media="all" rel="stylesheet" href="/css/main_IE.css" />
<script type="text/javascript" src="/scripts/pngfix.js"></script>
<![endif]-->
注释中的东西只有小于版本7的IE采取执行,其他浏览器都忽略。
第8章 Css优先权
[转]
优先权问题其实就是一个冲突解决的问题,当同一个元素(或内容)被CSS选择符选中时,就要按照优先权取舍不同的CSS规则,这其中涉及到的问题其实很多。
首先就是CSS规则的specificity(特殊性),CSS2.1有一套关于specificity的计算方式,用一个四位的数字串(CSS2是三位)来表示,最终specificity越高的规则越特殊,在优先级判定时也就越有优势。关于specificity的具体计算在各种情况下的数字加成有如下一般规则:
* 每个ID选择符(#someid),加 0,1,0,0。
* 每个class选择符(.someclass)、每个属性选择符(形如[attr=”"]等)、每个伪类(形如:hover等)加0,0,1,0
* 每个元素或伪元素(:firstchild)等,加0,0,0,1
* 其他选择符包括全局选择符*,加0,0,0,0。相当于没加,不过这也是一种specificity,后面会解释。
按这些规则将数字串逐位相加,就得到最终计算得的specificity,然后在比较取舍时按照从左到右的顺序逐位比较。
举一些例子吧:
h1 {color: red;}
/* 只有一个普通元素加成,结果是 0,0,0,1 */
body h1 {color: green;}
/* 两个普通元素加成,结果是 0,0,0,2 */
——后者胜出
h2.grape {color: purple;}
/* 一个普通元素、一个class选择符加成,结果是 0,0,1,1*/
h2 {color: silver;} /*一个普通元素,结果是 0,0,0,1 */
——前者胜出
html > body table tr[id=”totals”] td ul > li {color: maroon;}
/* 7个普通元素、一个属性选择符、两个其他选择符,结果是0,0,1,7 */
li#answer {color: navy;}
/* 一个ID选择符,一个普通选择符,结果是0,1,0,1 */
——后者胜出
除了specificity还有一些其他规则
* 文内的样式优先级为1,0,0,0,所以始终高于外部定义。这里文内样式指形如<div style=”color: red”>blah</div>的样式,而外部定义指经由<link>或<style>标签定义的规则。
* 有!important声明的规则高于一切。
* 如果!important声明冲突,则比较优先权。
* 如果优先权一样,则按照在源码中出现的顺序决定,后来者居上。
* 由继承而得到的样式没有specificity的计算,它低于一切其他规则(比如全局选择符*定义的规则)。
* 关于经由@import载入的外部样式,由于@import必须出现在所有其他规则定义之前(如不是,则浏览器应该忽略之),所以按照后来居上原则,一般优先权冲突时是占下风的。
这里需要提一下IE,IE是可以识别位置错误的@import的,但无论@import在什么地方,它都认为是位于所有其他规则定义之前的,这可能会引发一些误会。
所以优先权问题虽然看起来简单,但其背后还是有蛮复杂的机制
第9章 CSS的十八般技巧
[转]
一.使用css缩写
使用缩写可以帮助减少你CSS文件的大小,更加容易阅读。css缩写的主要规则请参看《常用css缩写语法总结》,这里就不展开描述。
二.明确定义单位,除非值为0
忘记定义尺寸的单位是CSS新手普遍的错误。在HTML中你可以只写width="100",但是在CSS中,你必须给一个准确的单位,比如:width:100px width:100em。只有两个例外情况可以不定义单位:行高和0值。除此以外,其他值都必须紧跟单位,注意,不要在数值和单位之间加空格。
三.区分大小写
当在XHTML中使用CSS,CSS里定义的元素名称是区分大小写的。为了避免这种错误,我建议所有的定义名称都采用小写。
class和id的值在HTML和XHTML中也是区分大小写的,如果你一定要大小写混合写,请仔细确认你在CSS的定义和XHTML里的标签是一致的。
四.取消class和id前的元素限定
当你写给一个元素定义class或者id,你可以省略前面的元素限定,因为ID在一个页面里是唯一的,而clas s可以在页面中多次使用。你限定某个元素毫无意义。例如:
div#content { /* declarations */ }
fieldset.details { /* declarations */ }
可以写成
#content { /* declarations */ }
.details { /* declarations */ }
这样可以节省一些字节。
五.默认值
通常padding的默认值为0,background-color的默认值是transparent。但是在不同的浏览器默认值可能不同。如果怕有冲突,可以在样式表一开始就先定义所有元素的margin和padding值都为0,象这样:
* {
margin:0;
padding:0;
}
六.不需要重复定义可继承的值
CSS中,子元素自动继承父元素的属性值,象颜色、字体等,已经在父元素中定义过的,在子元素中可以直接继承,不需要重复定义。但是要注意,浏览器可能用一些默认值覆盖你的定义。
七.最近优先原则
如果对同一个元素的定义有多种,以最接近(最小一级)的定义为最优先,例如有这么一段代码
Update: Lorem ipsum dolor set
在CSS文件中,你已经定义了元素p,又定义了一个class"update"
p {
margin:1em 0;
font-size:1em;
color:#333;
}
.update {
font-weight:bold;
color:#600;
}
这两个定义中,class="update"将被使用,因为class比p更近。你可以查阅W3C的《 Calculating a selector’s specificity》 了解更多。
八.多重class定义
一个标签可以同时定义多个class。例如:我们先定义两个样式,第一个样式背景为#666;第二个样式有10 px的边框。
.one{width:200px;background:#666;}
.two{border:10px solid #F00;}
在页面代码中,我们可以这样调用
<div class="one two"></div>
这样最终的显示效果是这个div既有#666的背景,也有10px的边框。是的,这样做是可以的,你可以尝试一下。
九.使用子选择器(descendant selectors)
CSS初学者不知道使用子选择器是影响他们效率的原因之一。子选择器可以帮助你节约大量的class定义。我们来看下面这段代码:
<div id="subnav">
<ul>
<li class="subnavitem"> <a href="#" class="subnavitem">Item 1</a></li>>
<li class="subnavitemselected"> <a href="#" class="subnavitemselected"> Item 1</a> </li>
<li class="subnavitem"> <a href="#" class="subnavitem"> Item 1</a> </li>
</ul>
</div>
这段代码的CSS定义是:
div#subnav ul { /* Some styling */ }
div#subnav ul li.subnavitem { /* Some styling */ }
div#subnav ul li.subnavitem a.subnavitem { /* Some styling */ }
div#subnav ul li.subnavitemselected { /* Some styling */ }
div#subnav ul li.subnavitemselected a.subnavitemselected { /* Some styling */ }
你可以用下面的方法替代上面的代码
<ul id="subnav">
<li> <a href="#"> Item 1</a> </li>
<li class="sel"> <a href="#"> Item 1</a> </li>
<li> <a href="#"> Item 1</a> </li>
</ul>
样式定义是:
#subnav { /* Some styling */ }
#subnav li { /* Some styling */ }
#subnav a { /* Some styling */ }
#subnav .sel { /* Some styling */ }
#subnav .sel a { /* Some styling */ }
用子选择器可以使你的代码和CSS更加简洁、更加容易阅读。
十.不需要给背景图片路径加引号
为了节省字节,我建议不要给背景图片路径加引号,因为引号不是必须的。例如:
background:url("images/***.gif") #333;
可以写为
background:url(images/***.gif) #333;
如果你加了引号,反而会引起一些浏览器的错误。
十一.组选择器(Group selectors)
当一些元素类型、class或者id都有共同的一些属性,你就可以使用组选择器来避免多次的重复定义。这可以节省不少字节。
例如:定义所有标题的字体、颜色和margin,你可以这样写:
h1,h2,h3,h4,h5,h6 {
font-family:"Lucida Grande",Lucida,Arial,Helvetica,sans-serif;
color:#333;
margin:1em 0;
}
如果在使用时,有个别元素需要定义独立样式,你可以再加上新的定义,可以覆盖老的定义,例如:
h1 { font-size:2em; }
h2 { font-size:1.6em; }
十二.用正确的顺序指定链接的样式
当你用CSS来定义链接的多个状态样式时,要注意它们书写的顺序,正确的顺序是::link :visited :hover :active。抽取第一个字母是"LVHA",你可以记忆成"LoVe HAte"(喜欢讨厌)。为什么这么定义,可以参考Eric Meyer的《Link Specificity》。
如果你的用户需要用键盘来控制,需要知道当前链接的焦点,你还可以定义:focus属性。:focus属性的效果也取决与你书写的位置,如果你希望聚焦元素显示:hover效果,你就把:focus写在:hover前面;如果你希望聚焦效果替代:hover效果,你就把:focus放在:hover后面。
十三.清除浮动
一个非常常见的CSS问题,定位使用浮动的时候,下面的层被浮动的层所覆盖,或者层里嵌套的子层超出了外层的范围。
通常的解决办法是在浮动层后面添加一个额外元素,例如一个div或者一个br,并且定义它的样式为clear: both。这个办法有一点牵强,幸运的是还有一个好办法可以解决,参看这篇文章《How To Clear Floats Without Structural Markup》(注:本站将尽快翻译此文)。
上面2种方法可以很好解决浮动超出的问题,但是如果当你真的需要对层或者层里的对象进行clear的时候怎么办?一种简单的方法就是用overflow属性,这个方法最初的发表在《Simple Clearing of Floats》,又在《Clearance》和《Super simple clearing floats》中被广泛讨论。
上面那一种clear方法更适合你,要看具体的情况,这里不再展开论述。另外关于float的应用,一些优秀的文章已经说得很清楚,推荐你阅读:《Floatutorial》、《Containing Floats》和《Float Layouts》
十四.横向居中(centering)
这是一个简单的技巧,但是值得再说一遍,因为我看见太多的新手问题都是问这个:CSS如何横向居中?你需要定义元素的宽,并且定义横向的margin,如果你的布局包含在一个层(容器)中,就象这样:
你可以这样定义使它横向居中:
#wrap {
width:760px; /* 修改为你的层的宽度 */
margin:0 auto;
}
但是IE5/Win不能正确显示这个定义,我们采用一个非常有用的技巧来解决:用text-align属性。就象这样:
body {
text-align:center;
}
#wrap {
width:760px; /* 修改为你的层的宽度 */
margin:0 auto;
text-align:left;
}
第一个body的text-align:center; 规则定义IE5/Win中body的所有元素居中(其他浏览器只是将文字居中) ,第二个text-align:left;是将#warp中的文字居左。
十五.导入(Import)和隐藏CSS
因为老版本浏览器不支持CSS,一个通常的做法是使用@import技巧来把CSS隐藏起来。例如:
@import url("main.css");
然而,这个方法对IE4不起作用,这让我很是头疼了一阵子。后来我用这样的写法:
@import "main.css";
这样就可以在IE4中也隐藏CSS了,呵呵,还节省了5个字节呢。想了解@import语法的详细说明,可以看这里《centricle’s css filter chart》
十六.针对IE的优化
有些时候,你需要对IE浏览器的bug定义一些特别的规则,这里有太多的CSS技巧(hacks),我只使用其中的两种方法,不管微软在即将发布的IE7 beta版里是否更好的支持CSS,这两种方法都是最安全的。
* 1.注释的方法
o (a)在IE中隐藏一个CSS定义,你可以使用子选择器(child selector):
html>body p {
/* 定义内容 */
}
o (b)下面这个写法只有IE浏览器可以理解(对其他浏览器都隐藏)
* html p {
/* declarations */
}
o (c)还有些时候,你希望IE/Win有效而IE/Mac隐藏,你可以使用"反斜线"技巧:
/* \*/
* html p {
declarations
}
/* */
* 2.条件注释(conditional comments)的方法
另外一种方法,我认为比CSS Hacks更加经得起考验就是采用微软的私有属性条件注释(conditional comments)。用这个方法你可以给IE单独定义一些样式,而不影响主样式表的定义。就象这样:
<!--[if IE]>
<link rel="stylesheet" type="text/css" href="ie.css" />
<![endif]-->
十七.调试技巧:层有多大?
当调试CSS发生错误,你就要象排版工人,逐行分析CSS代码。我通常在出问题的层上定义一个背景颜色,这样就能很明显看到层占据多大空间。有些人建议用border,一般情况也是可以的,但问题是,有时候border 会增加元素的尺寸,border-top和boeder-bottom会破坏纵向margin的值,所以使用background更加安全些。
另外一个经常出问题的属性是outline。outline看起来象boeder,但不会影响元素的尺寸或者位置。只有少数浏览器支持outline属性,我所知道的只有Safari、OmniWeb、和Opera。
十八.CSS代码书写样式
在写CSS代码的时候,对于缩进、断行、空格,每个人有每个人的书写习惯。在经过不断实践后,我决定采用下面这样的书写样式:
selector1,
selector2 {
property:value;
}
当使用联合定义时,我通常将每个选择器单独写一行,这样方便在CSS文件中找到它们。在最后一个选择器和大括号{之间加一个空格,每个定义也单独写一行,分号直接在属性值后,不要加空格。
我习惯在每个属性值后面都加分号,虽然规则上允许最后一个属性值后面可以不写分号,但是如果你要加新样式时容易忘记补上分号而产生错误,所以还是都加比较好。
最后,关闭的大括号}单独写一行。
空格和换行有助与阅读。
相关推荐
本篇文档主要探讨了在使用Div+CSS时的命名规范,这对于团队协作和后期维护至关重要。以下是相关知识点的详细说明: 1. **Div和CSS命名规范**: - 页头:通常用`header`或`#header`表示,如`#header{属性:属性值;}`...
在这个项目中,我们将探讨如何使用CSS(层叠样式表)和HTML的DIV元素来创建一个类似小米登录页面的界面。CSS和DIV是Web前端开发中的基本工具,用于实现页面的布局和美化。通过这个实践,我们可以深入了解这两种技术...
学习“精通CSS+DIV网页样式与布局”,你将掌握创建现代网页所需的技能,包括跨浏览器兼容性处理、优化性能的方法,以及如何利用最新的CSS规范如Grid和Flexbox实现更先进的布局。此外,你还将了解到如何利用CSS预...
在构建“css+div实现小米商城主界面”的项目中,我们深入探讨了HTML和CSS这两种核心技术,它们共同构成了网页的结构和样式。以下是对描述中提及的知识点的详细解释: 1. **伪类`:hover`**:`:hover`是CSS中的一个伪...
在后台设计中,CSS使得界面元素的统一风格和规范性得以实现,提高用户体验。通过熟练掌握CSS选择器、盒模型、浮动、定位等概念,开发者能够精确地控制元素的布局和显示效果。 其次,div元素是HTML中的一个基本结构...
在“精通CSS+DIV源码 第十八章”中,我们主要探讨的是利用CSS(层叠样式表)和DIV(分块元素)进行网页布局和设计的高级技巧。这一章的内容可能涵盖以下几个关键知识点: 1. **CSS定位机制**:CSS中的定位是网页...
5. `notes.html`:这可能是一个笔记或者信息页,展示了如何使用<div>和CSS创建一种特别的布局或界面设计。 6. `form.html`:此文件可能包含HTML表单,展示如何用<div>和CSS来设计和格式化表单元素,如输入框、按钮...
界面规范总体原则 1) 以用户为中心。设计由用户控制的界面,而不是界面控制用户。 2) 简单且美观实用。界面应该很简单(不是过分单纯化)、易于学习、并且易于使用。每个页面简单明了,用户一看就能大概明白如何操作...
【Div+CSS】 Div(层)和CSS(层叠样式表)是构建现代网页布局的基础。Div元素在HTML中通常被用作容器,用于组织和分隔网页内容。CSS则用于控制这些Div元素的样式,如颜色、大小、位置等,实现网页的布局和美化。...
### DIV+CSS命名规范 #### 一、基本概念与原则 在前端开发中,合理而规范的命名方式对于项目的维护性和扩展性至关重要。一个清晰、一致的命名规则不仅能够提高团队成员之间的协作效率,还能降低后期维护成本。本文...
- 学习内容包括盒子模型、div标记、边框、内边距、外边距、背景属性和元素转换。 - 重点是掌握盒子模型的相关属性,理解元素类型,并进行元素转换。 - 学生应能熟练使用盒子模型调整网页元素的布局和样式。 5. *...
【浪曦】是一个在线教育平台,提供原创的IT技术教程,本教程重点讲解了如何将Struts、Hibernate、DisplayTag、JavaScript、Div和CSS结合使用,以构建一个强大的Web应用程序。这一讲是系列课程的第二部分,由讲师 zk ...
对于"微信界面"这个标签,可能意味着例子中包含了模拟微信界面设计的实践,这对于了解移动应用界面设计的规范和用户体验也是有帮助的。通过实践和不断学习,你将能够逐步提升网页设计和开发的能力。
Div元素是CSS布局中的核心元素,通过合理的Div布局,可以实现灵活多变的网页设计,提高用户体验。 综上所述,这个“jsp+servlet+javabean +mysql cs+div信息发布系统”是一个完整的Web应用实例,涵盖了从前端展示到...
"pj皮肤flash定位方法"可能涉及到在CSS中使用绝对或相对定位来精确控制Flash元素的位置,这在创建动态效果或交互式界面时非常有用。同时,"25条CSS编程提醒及小技巧整理"提供了实用的建议,如避免使用内联样式,优先...
【WEB前端开发规范文档+CSS命名规范】 前端开发规范旨在提升团队协作效率,确保后台人员能够轻松添加功能,以及前端开发者能高效地进行优化维护,从而产出高质量的文档。一旦这个规范被确认,所有前端开发人员都...
### WEB前端开发规范文档+CSS命名规范 #### 规范目的 为了提升团队协作效率、便于后台人员添加功能以及前端后期优化维护,本规范旨在输出高质量的文档。一旦该规范文档被确认,前端开发人员必须按照本文档所规定的...
调整CSS样式以达到预期设计,同时确保HTML结构符合V5SHOP的规范,以保证模板功能的正常运行。 七、调试与优化 在开发过程中,使用浏览器的开发者工具可以帮助检查和调试CSS样式,查看HTML结构,并进行性能优化。...
此外,初学者可以从这个项目中学到如何组织CSS代码,遵循良好的编码规范,以及如何调试和优化CSS,以提高页面性能。 总结,"美淘网"的页面设计项目是一个理想的实践平台,让初学者能够深入理解并掌握DIV+CSS在实际...