如何让CSS的标签兼容不同的浏览器
在不同浏览器, 标签呈现的效果是有区别的。所以小面我来谈谈如何让CSS的标签兼容不同的浏览器。
作为块级元素的 标签,在写CSS文件时, 最好定义行高line-height, 不要定义高度height,因为定义了高度, 就限制了块级元素 的高度, 在不同浏览器, 很难实现比较统一的效果,我曾经遇到,在IE6,FIREFOX(FF)效果完好, 而在IE7,标题的文字只出来一半。 且 标题在不同的布局中, 会有不同的行数要求, 比如在侧栏等小地方, 标题很可能有2行或3行, 如果高度被定义了, 那么大部分浏览器都会出现错误的显示, 很拥挤或没有显示, 如果设置了底部边线, 还可能错位。
所以 标签, 最好不要定义高度height,但一定要定义行高line-height,其他数值,根据实际效果适当变化。这样, 对不同浏览器的兼容性是最好的。
h3 {
font-size:14px
margin: 15px 0px 10px 0px
padding: 3px 0px 3px 0px
line-height:20px
color:#55295etext-align:left
border-bottom: 1px dotted #55295e
}
标签一般介绍
标签是一个标题标签,常用做网站主题、文章标题或用在段落之前,用于表明整个网站、整篇文章或段落要表达的`意思。根据显示和要表达意思的级别可以分为H1,H2,H3,H4,H5,H6。
标签成对出现,以 开始,以 结束。
在一个WEB页面中,H1标签最好(理论上是应该)只出现一次,因为它代表该WEB页面的主题。在实际操作中,建议不要使用 h1 来定义文章标题,而是用来定义网站标题。我有一个网站, 在首页一段文字前用了H1,并合理地分布了H2,H3,H4,结果十天以后, 原来排在第一页的关键词, 就掉到了第四页。因此, 用一次H2做页面一级标题,比较安全。
H1的重要性最高,常用于表达对整个网站的作用和性质的描述,或表示网站面向的受众群体。其他标签根据级别的不同分别用于显示某个专区的名称,或某段介绍文字的大概描述。
因它表示对网站或某段文字的大体描述,所以相对于搜索引擎来说H标签具有很高的价值。但这并不意味着可以随意的使用。比如,有些网站为了刻意追求特定关键字的排名,而在一段文字中使用H标签来展示关键字。或干脆把H标签当做一个容器来对网页进行布局。这样完全混淆了H标签的作用,也是不推荐的。
标签代表了一个网页的重点层次,但不要过度使用。否则会受到搜索引擎的不同程度的降权。
标签的使用和控制,合理安排网页层次
h1,h2,h3,是经常用到的标题标志,权重比STONRG高一点。以前我曾在一个网页里多次使用H1,结果很长时间在GG的收录都是补充页面(更新,外连正常)。H标题作为关键词布局的一个重要方面,一定程度上决定了网页的层次结构和轻重布局。很多著名的站点都使用H类标题,用法上略有区别,比较灵活。
1、按照内容的重要性来定义:
使用 h1 定义网站标题
使用 h2 定义文章标题
使用 h3 定义栏目标题
2、按照网站的层次来定义:
使用 h1 定义网站标题
使用 h2 定义栏目标题
使用 h3 定义文章标题
标签CSS样式设置
标签默认的表现样子一般不尽如人意, 不能满足网页设计的要求。好在 标签是块级元素,适用块级元素的属性, 标签均可使用,因此, 标签可以通过CSS加以完美控制。
内外空白边距,可以通过外边距margin和内边距padding控制
h1 {margin:0pxpadding:0px}
字体的字号,颜色,字体控制
h1 {font-size:14pxcolor:#55295efont-family:Verdana,Arial, Helvetica,sans-serif}
高度和宽度的控制
h1 {height:20pxwidth:400pxline-height:20px}
行高的控制
h1 {line-height:20px}
文本对齐方式的控制, 可以是left,right,center。
h1 {text-align:left}
边框的控制
h1 {border: 1px dotted #55295e}
背景的控制
h1 {background: #ccc url(images/test.jpg) no-repeat top }
写css最逃不开的应该是浏览器兼容问题了吧,因为css存在一些 未定义行为 ,各个浏览器都会按照自己的渲染规则来表现,就会存在表现不一致的情况,还有很多属性某些浏览器不支持,很多时候需要我们用更通用的方法来实现一些UI效果。本文重点来说说浏览器是如何把一个页面渲染出来的。
主要流程:
DOM生成、样式计算、布局、分层、图层绘制、栅格化、合成显示
下面主要讲css相关的几个步骤
我们书写的html最终都会被解析成一颗dom树,它来表达的dom结构能被浏览器所理解,那css做的就是赋予dom节点每个元素样式。当然,我们写的css也是不能直接被浏览器理解的,需要转化成styleSheets,我们在浏览器控制台输入document.styleSheets就能看到。
styleSheets要应用到各个元素上还需要两个步骤:
最后得出dom节点每个元素的具体样式。
得到dom树后,浏览器会遍历这棵树,把所有可见的节点加到布局树中,再进行布局计算,得到每个节点的坐标位置,保存在布局树中。
得到每个元素的具体位置后,还不能开始绘制页面,因为我们的页面并不是二维的,3D变换,z轴排序、页面滚动等效果都需要图层来实现。所以浏览器会为特定的节点生成专门的图层便于这些效果的实现。那什么样的节点会创建专门的图层呢,包括拥有层叠上下文属性的元素以及需要剪裁(clip)的地方,可以看一下 css(五)层叠
在浏览器开发者工具会有一个Layers标签,这里面可以直观地看到页面的分层情况
当改变了元素宽高或者几何位置的时候,就会触发 重排 ,需要走一遍完整的渲染过程,开销最大。
如果只是改变颜色,那么布局阶段就不需要执行,可以直接进入绘制阶段,所以叫 重绘 ,省去了布局和分层,效率会比重排要高一些。
而使用css的transform实现动画效果,则可以避开重绘和重排,只进行后续的合成操作,被称为 合成 ,能大大提升绘制效率。
Ps 合成操作实在非主线程(GPU进程)上执行的,不占用主线程资源
整理关于IE6、IE7、IE8、Firefox兼容性CSS HACK问题,另外CSS3的兼容性不是很好,但是在未来有前途。\x0d\x0a\x0d\x0a1.区别IE和非IE浏览器CSS HACK代码\x0d\x0a\x0d\x0a#divcss5{\x0d\x0abackground:blue/*非IE 背景蓝色*/\x0d\x0abackground:red \9/*IE6、IE7、IE8背景红色*/\x0d\x0a} \x0d\x0a\x0d\x0a2.区别IE6,IE7,IE8,FF CSS HACK \x0d\x0a【区别符号】:「\9」、「*」、「_」\x0d\x0a【示例】:\x0d\x0a\x0d\x0a#divcss5{\x0d\x0abackground:blue/*Firefox 背景变蓝色*/\x0d\x0abackground:red \9/*IE8 背景变红色*/\x0d\x0a*background:black/*IE7 背景变黑色*/\x0d\x0a_background:orange/*IE6 背景变橘色*/\x0d\x0a} \x0d\x0a\x0d\x0a【说明】:因为IE系列浏览器可读「\9」,而IE6和IE7可读「*」(米字号),另外IE6可辨识「_」(底线),因此可以依照顺序写下来,就会让浏览器正确的读取到自己看得懂得CSS语法,所以就可以有效区分IE各版本和非IE浏览器(像是Firefox、Opera、Google Chrome、Safari等)。\x0d\x0a\x0d\x0a3.区别IE6、IE7、Firefox (EXP 1) \x0d\x0a【区别符号】:「*」、「_」\x0d\x0a【示例】:\x0d\x0a\x0d\x0a#divcss5{\x0d\x0abackground:blue/*Firefox背景变蓝色*/\x0d\x0a*background:black/*IE7 背景变黑色*/\x0d\x0a_background:orange/*IE6 背景变橘色*/\x0d\x0a} \x0d\x0a\x0d\x0a【说明】:IE7和IE6可读「*」(米字号),IE6又可以读「_」(底线),但是IE7却无法读取「_」,至于Firefox(非IE浏览器)则完全无法辨识「*」和「_」,因此就可以透过这样的差异性来区分IE6、IE7、Firefox\x0d\x0a\x0d\x0a4.区别IE6、IE7、Firefox (EXP 2) \x0d\x0a【区别符号】:「*」、「!important」\x0d\x0a【示例】:\x0d\x0a\x0d\x0a#divcss5{\x0d\x0abackground:blue/*Firefox 背景变蓝色*/\x0d\x0a*background:green !important/*IE7 背景变绿色*/\x0d\x0a*background:orange/*IE6 背景变橘色*/\x0d\x0a} \x0d\x0a\x0d\x0a【说明】:IE7可以辨识「*」和「!important」,但是IE6只可以辨识「*」,却无法辨识「!important」,至于Firefox可以读取「!important」但不能辨识「*」因此可以透过这样的差异来有效区隔IE6、IE7、Firefox。\x0d\x0a\x0d\x0a5.区别IE7、Firefox \x0d\x0a【区别符号】:「*」、「!important」\x0d\x0a【示例】:\x0d\x0a\x0d\x0a#divcss5{\x0d\x0abackground:blue/*Firefox 背景变蓝色*/\x0d\x0a*background:green !important/*IE7 背景变绿色*/\x0d\x0a} \x0d\x0a\x0d\x0a【说明】:因为Firefox可以辨识「!important」但却无法辨识「*」,而IE7则可以同时看懂「*」、「!important」,因此可以两个辨识符号来区隔IE7和Firefox。\x0d\x0a\x0d\x0a6.区别IE6、IE7 (EXP 1) \x0d\x0a【区别符号】:「*」、「_」\x0d\x0a【示例】:\x0d\x0a\x0d\x0a#tip {\x0d\x0a*background:black/*IE7 背景变黑色*/\x0d\x0a_background:orange/*IE6 背景变橘色*/\x0d\x0a} \x0d\x0a\x0d\x0a【说明】:IE7和IE6都可以辨识「*」(米字号),但IE6可以辨识「_」(底线),IE7却无法辨识,透过IE7无法读取「_」的特性就能轻松区隔IE6和IE7之间的差异。\x0d\x0a\x0d\x0a7.区别IE6、IE7 (EXP 2) \x0d\x0a【区别符号】:「!important」\x0d\x0a【示例】:\x0d\x0a\x0d\x0a#divcss5{\x0d\x0abackground:black !important/*IE7 背景变黑色*/\x0d\x0abackground:orange/*IE6 背景变橘色*/\x0d\x0a} \x0d\x0a【说明】:因为IE7可读取「!important」但IE6却不行,而CSS的读取步骤是从上到下,因此IE6读取时因无法辨识「!important」而直接跳到下一行读取CSS,所以背景色会呈现橘色。\x0d\x0a\x0d\x0a8.区别IE6、Firefox \x0d\x0a【区别符号】:「_」\x0d\x0a【示例】:\x0d\x0a\x0d\x0a#divcss5{\x0d\x0abackground:black/*Firefox 背景变黑色*/\x0d\x0a_background:orange/*IE6 背景变橘色*/\x0d\x0a} \x0d\x0a【说明】:因为IE6可以辨识「_」(底线),但是Firefox却不行,因此可以透过这样的差异来区隔Firefox和IE6,有效达成CSS hack。\x0d\x0a\x0d\x0a以上包括了IE6\IE8\IE7\火狐浏览器兼容问题及解决方法。