CSS XTHML書(shū)寫(xiě)規(guī)范以及常見(jiàn)問(wèn)題總結(jié)(頁(yè)面最優(yōu)化)
發(fā)布時(shí)間:2010-06-01 09:20:00 作者:佚名
我要評(píng)論

這是去年為公司培訓(xùn)的時(shí)候?qū)懙恼淼囊粋€(gè)白皮書(shū),希望大家多多提出意見(jiàn)。謝謝!
項(xiàng)目文檔目錄
div+CSS命名規(guī)范 - 4 -
Div+css命名規(guī)范 - 4 -
1.1. div+css命名規(guī)范 - 4 -
1.2. CSS的Id命名規(guī)范 - 4 -
1.3. css樣式文件命名 - 5 -
XHTML編碼基本規(guī)范 - 6 -
XHTML編碼基本規(guī)范 - 6 -
推薦網(wǎng)頁(yè)制作規(guī)范 - 10 -
推薦網(wǎng)頁(yè)制作規(guī)范 - 10 -
Css常用優(yōu)化技巧 - 11 -
Css瀏覽器兼容性問(wèn)題總結(jié) - 20 -
JavaScript瀏覽器兼容性總結(jié) - 30 -
XHTML標(biāo)準(zhǔn)的DIV+CSS布局對(duì)于網(wǎng)站SEO的影響 - 35 -
div+CSS命名規(guī)范
Div+css命名規(guī)范
Css的命名是區(qū)分大小寫(xiě)的,建議全部使用小寫(xiě)。下面總結(jié)一下最好的命名準(zhǔn)則,好的命名不僅有利于維護(hù)人員閱讀對(duì)搜索搜索引擎優(yōu)化(seo)有很大的好處。其中對(duì)代碼的優(yōu)化是一個(gè)很關(guān)鍵的步驟。為了更加符合SEO的規(guī)范,下面是目前流行的CSS+DIV的命名規(guī)則,并做了些補(bǔ)充:
1.1. div+css命名規(guī)范
頁(yè)頭:header
登錄條:loginBar
標(biāo)志:logo
側(cè)欄:sideBar
廣告:banner
導(dǎo)航:nav
子導(dǎo)航:subNav
菜單:menu
子菜單:subMenu
搜索:search
滾動(dòng):scroll
頁(yè)面主體:main
內(nèi)容:content
標(biāo)簽頁(yè):tab
文章列表:list
提示信息:msg
小技巧:tips
欄目標(biāo)題:title
友情鏈接:friendLink
頁(yè)腳:footer
加入:joinus
指南:guild
服務(wù):service
熱點(diǎn):hot
新聞:news
下載:download
注冊(cè):regsiter
狀態(tài):status
按鈕:btn
投票:vote
合作伙伴:partner
版權(quán):copyRight產(chǎn)品管理
1.2. CSS的Id命名規(guī)范
外套:wrap
主導(dǎo)航:mainNav
子導(dǎo)航:subnav
頁(yè)腳:footer
整個(gè)頁(yè)面:content
頁(yè)眉:header
頁(yè)腳:footer
商標(biāo):label
標(biāo)題:title
主導(dǎo)航:mainNav(globalNav)
頂導(dǎo)航:topnav
邊導(dǎo)航:sidebar
左導(dǎo)航:leftsideBar
右導(dǎo)航:rightsideBar
旗志:logo
標(biāo)語(yǔ):banner
菜單內(nèi)容1:menu1Content
菜單容量:menuContainer
子菜單:submenu
邊導(dǎo)航圖標(biāo):sidebarIcon
注釋:note
面包屑:breadCrumb(即頁(yè)面所處位置導(dǎo)航提示)
容器:container
內(nèi)容:content
搜索:search
登陸:login
功能區(qū):shop(如購(gòu)物車(chē),收銀臺(tái))
當(dāng)前的:current
1.3. css樣式文件命名
主要的:master.css
布局版面:layout.css
專(zhuān)欄:columns.css
文字:font.css
打印樣式:print.css
主題:themes.css
通用:basic.css
上面的命名規(guī)范很直觀(guān),即使程序人員不添加注釋?zhuān)覀円矔?huì)很清楚的知道是什么意思。上面的命名幾乎涵蓋了所有的經(jīng)常使用到的樣式。
XHTML編碼基本規(guī)范
XHTML編碼基本規(guī)范
2.1 所有的標(biāo)記都必須要有一個(gè)相應(yīng)的結(jié)束標(biāo)記
XHTML要求有嚴(yán)謹(jǐn)?shù)慕Y(jié)構(gòu),所有標(biāo)簽必須關(guān)閉。如果是單獨(dú)不成對(duì)的標(biāo)簽,在標(biāo)簽最后加一 個(gè)"/"來(lái)關(guān)閉它。例如:
<img height="80" alt="網(wǎng)頁(yè)設(shè)計(jì)師" src="/uploadfile/200806/17/8C162625950.gif" width="200" />
2.2 所有標(biāo)簽的元素和屬性的名字都必須使用小寫(xiě)
與HTML不一樣,XHTML對(duì)大小寫(xiě)是敏感的,<title>和<TITLE>是不同的標(biāo)簽。XHTML要求所有的標(biāo)簽和屬性的名字都必須使用小寫(xiě)。例如:<BODY>必須寫(xiě)成<body> 。大小寫(xiě)夾雜也是不被認(rèn)可的。
2.3 所有的XHTML標(biāo)記都必須合理嵌套
同樣因?yàn)閄HTML要求有嚴(yán)謹(jǐn)?shù)慕Y(jié)構(gòu),因此所有的嵌套都必須按順序,以前我們這樣寫(xiě)的代碼:
<p><b></p>/b>必須修改為:<p><b></b>/p>
就是說(shuō),一層一層的嵌套必須是嚴(yán)格對(duì)稱(chēng)。
2.4 所有的屬性必須用引號(hào)""括起來(lái)
在HTML中,你可以不需要給屬性值加引號(hào),但是在XHTML中,它們必須被加引號(hào)。例如:
<height=80>必須修改為:<height="80">
特殊情況,你需要在屬性值里使用雙引號(hào),你可以用",單引號(hào)可以使用',例如:
<alt="say'hello'">
2.5 把所有<和&特殊符號(hào)用編碼表示
任何小于號(hào)(<),不是標(biāo)簽的一部分,都必須被編碼為< ;
任何大于號(hào)(>),不是標(biāo)簽的一部分,都必須被編碼為>
任何與號(hào)(&),不是實(shí)體的一部分的,都必須被編碼為&
2.6 給所有屬性賦一個(gè)值
XHTML規(guī)定所有屬性都必須有一個(gè)值,沒(méi)有值的就重復(fù)本身。例如:
<td nowrap> <input type="checkbox" name="shirt" value="medium" checked>
必須修改為:
<td nowrap="nowrap"> <input type="checkbox" name="shirt" value="medium" checked="checked">
2.7 不要在注釋內(nèi)容中使“–”
“–”只能發(fā)生在XHTML注釋的開(kāi)頭和結(jié)束,也就是說(shuō),在內(nèi)容中它們不再有效。例如下面的代碼是無(wú)效的:
<!–這里是注釋———–這里是注釋–>
用等號(hào)或者空格替換內(nèi)部的虛線(xiàn)。
<!–這里是注釋============這里是注釋–>
以上這些規(guī)范有的看上去比較奇怪,但這一切都是為了使我們的代碼有一個(gè)統(tǒng)一、唯一的標(biāo)準(zhǔn),便于以后的數(shù)據(jù)再利用。
2.8 引用樣式和腳本語(yǔ)言時(shí)type屬性不能省略
<script language="javascript" type="text/javascript">
注意:type="text/javascript"不能省略。
2.9 在頁(yè)面中寫(xiě)javascript方法時(shí)注意加上注釋符號(hào)。這樣就避免>,<,&&等一些特殊符號(hào)的報(bào)錯(cuò)
事例:
<script>和<style>標(biāo)記的內(nèi)容必須被包圍在CDATA段中。
例如:
<script type="text/javascript">
<![CDATA[
function func(a, b)
{
if (a < b)
return true;
}
]]> </script>
注意到上面的Script中有小于號(hào)(<)出現(xiàn),如果不將其包圍在CDATA段中,那么小于號(hào)(<)以及后面的內(nèi)容會(huì)
被誤認(rèn)為是另一個(gè)XHTML標(biāo)記的開(kāi)始,引起一些不必要的錯(cuò)誤。
需要注意的是IE認(rèn)為在<script>標(biāo)記中的CDATA段是不合法的,并會(huì)引發(fā)腳本錯(cuò)誤,這個(gè)問(wèn)題可以使用
JavaScript注釋來(lái)避免:
<script type="text/javascript">
/* <![CDATA[ */
function func(a, b)
{
if (a < b)
return true;
}
/* ]]> */
</script>
或者
<script type="text/javascript">
// <![CDATA[
function func(a, b)
{
if (a < b)
return true;
}
// ]]>
</script>
當(dāng)然,最好的方法是把腳本和CSS放置于單獨(dú)的文件中并在XHTML頁(yè)面中加上引用。
2.10 將所有的樣式放在style中
例:<td width="4"> </td> 這樣寫(xiě)不符合標(biāo)準(zhǔn)。
我們要這樣寫(xiě):<td style=”width:4px;”> </td>
2.11 樣式屬性最后一個(gè)后面一定要加上分號(hào)
2.12 使用id屬性,而不是name屬性。
在HTML中,name屬性可以用來(lái)標(biāo)識(shí)identify <a>, <applet>, <form>, <frame>, <iframe>, <img>和 <map>標(biāo)記。XHTML 1.0 Strict 和XHTML 1.1 standards已經(jīng)刪除了對(duì)name屬性的支持。我們應(yīng)該使用id唯一標(biāo)識(shí)一個(gè)頁(yè)面上的元素。ID不能重復(fù)。
2.13 屬性值中空格的處理。
屬性值中開(kāi)頭和結(jié)尾的所有空格將被忽略。屬性值中詞與詞之間的多個(gè)空格或換行符將被認(rèn)為成單個(gè)空格。例如
如下兩個(gè)屬性的值相同:
<input value="HTML is out" />
<input value=" HTML is
out " />
2.14 使用恰當(dāng)?shù)奈臋n類(lèi)型聲明和命名空間。
2.15 使用meta元素聲明你的內(nèi)容類(lèi)型。
2.16 使用img時(shí)要添加alt屬性,可設(shè)為空
2.17 使用img時(shí)align=absmiddle屬性在W3C驗(yàn)證下通不過(guò)
大家都知道,要想讓圖片和文字垂直居中對(duì)齊的話(huà),可以在IMG標(biāo)簽下添加align=absmiddle屬性即可實(shí)現(xiàn),但align=absmiddle屬性在W3C驗(yàn)證下通不過(guò)[驗(yàn)證地址請(qǐng)查看W3C網(wǎng)頁(yè)標(biāo)準(zhǔn)驗(yàn)證服務(wù)地址],那么是否可以用CSS來(lái)代替IMG的align=absmiddle屬性來(lái)實(shí)現(xiàn)垂直居中呢,答案是肯定的。
可以在CSS中加入vertical-align:middle;就能實(shí)現(xiàn)了
事例:
<div><img style="vertical-align:middle;" src="/uploadfile/png/IconBuffet/Redmond/close_32.png" />用CSS實(shí)現(xiàn)圖片和文字垂直居中對(duì)齊</div><br /><br />
<div><img src="/uploadfile/png/IconBuffet/Redmond/close_32.png" />這個(gè)是沒(méi)加樣式的效果</div><br /><br />
<div><img align=absmiddle src="/uploadfile/png/IconBuffet/Redmond/close_32.png" />這個(gè)是用align=absmiddle實(shí)現(xiàn)圖片和文字垂直居中對(duì)齊</div>
2.18 不建議使用過(guò)時(shí)屬性和標(biāo)簽
為了更好的處理網(wǎng)站的兼容性問(wèn)題,我建議不要使用過(guò)時(shí)標(biāo)簽和屬性
2.19 將VS2005的驗(yàn)證標(biāo)準(zhǔn)調(diào)整為XHTML1.0或更高版本
備注:
XHTML 1.0 Transitional WEB標(biāo)準(zhǔn)產(chǎn)生的問(wèn)題
曾經(jīng)流行一時(shí)的HTML標(biāo)記語(yǔ)言已經(jīng)被官方認(rèn)為過(guò)時(shí)了,將要接任它的是XHTML(http://www.w3.org/MarkUp/)。如果你的網(wǎng)站按照較嚴(yán)格的XHTML規(guī)則書(shū)寫(xiě),那么這個(gè)網(wǎng)站將在不同的瀏覽器中保持一致的樣式。并且你可以認(rèn)為在未來(lái)瀏覽器的版本升級(jí)變化中仍然保證網(wǎng)站外觀(guān)的一致性。同樣你也會(huì)得到跨瀏覽器,跨設(shè)備以及跨平臺(tái)的一致性支持。
XHTML有如下兩個(gè)主要目標(biāo):
· 將文檔的結(jié)構(gòu)(使用XHTML標(biāo)記語(yǔ)言)和表現(xiàn)(使用CSS)分開(kāi)
· 將HTML作為一種XML書(shū)寫(xiě)
對(duì)于第一個(gè)目標(biāo),W3C刪除了一些HTML的標(biāo)記以及屬性,例如<font>和bgcolor,因?yàn)檫@些標(biāo)記或?qū)傩圆⒉皇俏臋n結(jié)構(gòu)中的一部分,而只是用來(lái)描述文檔應(yīng)該如何被顯示,因此應(yīng)該定義在CSS文件中而不是HTML中。同樣,某些特定的標(biāo)記內(nèi)容并不一定要顯示成特定的樣子。比如,<h1>標(biāo)記里內(nèi)容顯示的字號(hào)完全可能小于<p>里的內(nèi)容,這些取決于CSS中的定義。當(dāng)然,<h1>一般用于顯示一篇文檔的標(biāo)題信息,它的重要程度一般也應(yīng)該高于<p>中的內(nèi)容,所以通常的瀏覽器都會(huì)以一個(gè)較大的字號(hào)來(lái)顯示。
對(duì)于第二個(gè)目標(biāo),XHTML將嚴(yán)格遵守XML的嚴(yán)格語(yǔ)法??梢哉f(shuō)XHTML是HTML依照XML語(yǔ)法重構(gòu)的結(jié)果。換句話(huà)說(shuō),當(dāng)你編寫(xiě)XHTML文檔的時(shí)候,其實(shí)是在編寫(xiě)一份特化了的XML文檔。XML文檔有著比HTML嚴(yán)格多了的語(yǔ)法,這些將在本文稍后部分討論。
XHTML有三個(gè)版本:
· XHTML 1.0 Transitional
· XHTML 1.0 Strict
· XHTML 1.0 Frameset
XHTML 1.0 Transitional包含HTML4.01的所有標(biāo)記以及屬性,是一種不是那么嚴(yán)格的XHTML,目的是使現(xiàn)有的HTML開(kāi)發(fā)者更容易的接受并使用XHTML。
XHTML 1.0 Strict就是嚴(yán)格版本的XHTML了,開(kāi)發(fā)者必須要嚴(yán)格遵守文檔的結(jié)構(gòu)與表現(xiàn)分開(kāi)的規(guī)則,也就是說(shuō)需要用CSS控制頁(yè)面的顯示而不是使用<font>,bgcolor之類(lèi)的標(biāo)記或?qū)傩浴?
XHTML 1.0 Frameset用于把文檔分割成幾個(gè)楨以顯示不同的內(nèi)容。(XHTML 1.0 Transitional和Strict 頁(yè)面不允許包含<frameset> 標(biāo)記)。
這里不再贅述更多有關(guān)XHTML的介紹,如果感興趣,可以使用Google或者M(jìn)SN Search找到很多相關(guān)資料或是詳細(xì)介紹。也歡迎在本貼下留下您的評(píng)論與問(wèn)題,讓我們共同探討。接下來(lái)是一些書(shū)寫(xiě)XHTML的基本規(guī)則。
參考網(wǎng)址:http://www.cnblogs.com/plain-heart/archive/2008/04/17/1158909.html
http://www.chinaz.com/Design/Pages/10091JN2007.html
推薦網(wǎng)頁(yè)制作規(guī)范
推薦網(wǎng)頁(yè)制作規(guī)范
3.1 命名規(guī)范
文件命名的原則:
以最少的字母達(dá)到最容易理解的意義。
一般文件及目錄命名規(guī)范:
每一個(gè)目錄中應(yīng)該包含一個(gè)缺省的html 文件,文件名統(tǒng)一用index.htm 文件名稱(chēng)統(tǒng)一用小寫(xiě)的英文字母、數(shù)字和下劃線(xiàn)的組合 盡量按單詞的英語(yǔ)翻譯為名稱(chēng)。例如:feedback(信息反饋),aboutus(關(guān)于我們) 多個(gè)同類(lèi)型文件使用英文字母加數(shù)字命名,字母和數(shù)字之間用_分隔。例如:news_01.htm。注意,數(shù)字位數(shù)與文件個(gè)數(shù)成正比,不夠的用0補(bǔ)齊。例如共有200條新聞,其中第18條命名為news_018.htm
圖片的命名規(guī)范 :
名稱(chēng)分為頭尾兩兩部分,用下劃線(xiàn)隔開(kāi)。
頭部分表示此圖片的大類(lèi)性質(zhì)。例如: 放置在頁(yè)面頂部的廣告、裝飾圖案等長(zhǎng)方形的圖片我們?nèi)∶篵anner ;標(biāo)志性的圖片我們?nèi)∶麨椋簂ogo ;在頁(yè)面上位置不固定并且?guī)в墟溄拥男D片我們?nèi)∶麨閎utton ;在頁(yè)面上某一個(gè)位置連續(xù)出現(xiàn),性質(zhì)相同的鏈接欄目的圖片我們?nèi)∶簃enu ;裝飾用的照片我們?nèi)∶簆ic ;不帶鏈接表示標(biāo)題的圖片我們?nèi)∶簍itle 依照此原則類(lèi)推。 尾部分用來(lái)表示圖片的具體含義,用英文字母表示。例如:banner_sohu.gif banner_sina.gif menu_aboutus.gif menu_job.gif title_news.gif logo_police.gif logo_national.gif pic_people.jpg pic_hill.jpg.
有onmouse效果的圖片,兩張分別在原有文件名后加"_on"和"_off"命名。
其它文件命名規(guī)范:
js的命名原則以功能的英語(yǔ)單詞為名。例如:廣告條的js文件名為:ad.js
所有的CGI文件后綴為cgi。所有CGI程序的配置文件為config.cgi
3.2 目錄結(jié)構(gòu)規(guī)范
目錄建立的原則:以最少的層次提供最清晰簡(jiǎn)便的訪(fǎng)問(wèn)結(jié)構(gòu)。
目錄的命名以小寫(xiě)英文字母,下劃線(xiàn)組成。(參照命名規(guī)范)
根目錄一般只存放index.htm以及其他必須的系統(tǒng)文件
每個(gè)主要欄目開(kāi)設(shè)一個(gè)相應(yīng)的獨(dú)立目錄
根目錄下的images用于存放各頁(yè)面都要使用的公用圖片,子目錄下的images目錄存放本欄目頁(yè)面使用的私有圖片
所有JS腳本存放在根目錄下的scripts目錄
所有CSS文件存放在根目錄下App_theme目錄
所有flash, avi, ram, quicktime 等多媒體文件存放在根目錄下的media目錄
Css常用優(yōu)化技巧
CSS常用優(yōu)化技巧
4.1.使用css縮寫(xiě)
使用縮寫(xiě)可以幫助減少你CSS文件的大小,更加容易閱讀。css縮寫(xiě)的主要規(guī)則請(qǐng)參看《常用css縮寫(xiě)語(yǔ)法總結(jié)》,這里就不展開(kāi)描述。
參考網(wǎng)址:http://homepage.yesky.com/97/7643097.shtml
4.2.明確定義單位,除非值為0
忘記定義尺寸的單位是CSS新手普遍的錯(cuò)誤。在HTML中你可以只寫(xiě)width=100,但是在CSS中,你必須給一個(gè)準(zhǔn)確的單位,比如:width:100px width:100em。只有兩個(gè)例外情況可以不定義單位:行高和0值。除此以外,其他值都必須緊跟單位,注意,不要在數(shù)值和單位之間加空格。
4.3.區(qū)分大小寫(xiě)
當(dāng)在XHTML中使用CSS,CSS里定義的元素名稱(chēng)是區(qū)分大小寫(xiě)的。為了避免這種錯(cuò)誤,我建議所有的定義名稱(chēng)都采用小寫(xiě)。
class和id的值在HTML和XHTML中也是區(qū)分大小寫(xiě)的,如果你一定要大小寫(xiě)混合寫(xiě),請(qǐng)仔細(xì)確認(rèn)你在CSS的定義和XHTML里的標(biāo)簽是一致的。
4.4.取消class和id前的元素限定
當(dāng)你寫(xiě)給一個(gè)元素定義class或者id,你可以省略前面的元素限定,因?yàn)镮D在一個(gè)頁(yè)面里是唯一的, class可以在頁(yè)面中多次使用。你限定某個(gè)元素毫無(wú)意義。例如:
div#content { /* declarations */ }
fieldset.details { /* declarations */ }
可以寫(xiě)成
#content { /* declarations */ }
.details { /* declarations */ }
這樣可以節(jié)省一些字節(jié)。
4.5.默認(rèn)值
通常padding的默認(rèn)值為0,background-color的默認(rèn)值是transparent。但是在不同的瀏覽器默認(rèn)值可能不同。如果怕有沖突,可以在樣式表一開(kāi)始就先定義所有元素的margin和padding值都為0,象這樣:
* {
margin:0;
padding:0;
}
4.6.不需要重復(fù)定義可繼承的值
CSS中,子元素自動(dòng)繼承父元素的屬性值,象顏色、字體等,已經(jīng)在父元素中定義過(guò)的,在子元素中可以直接繼承,不需要重復(fù)定義。但是要注意,瀏覽器可能用一些默認(rèn)值覆蓋你的定義。
4.7.最近優(yōu)先原則
如果對(duì)同一個(gè)元素的定義有多種,以最接近(最小一級(jí))的定義為最優(yōu)先,例如有這么一段代碼
Update: Lorem ipsum dolor set
在CSS文件中,你已經(jīng)定義了元素p,又定義了一個(gè)class update
p {
margin:1em 0;
font-size:1em;
color:#333;
}
.update {
font-weight:bold;
color:#600;
}
這兩個(gè)定義中,class=update將被使用,因?yàn)閏lass比p更近。你可以查閱W3C的《 Calculating a selector’s specificity》 了解更多。
4.8.多重class定義
一個(gè)標(biāo)簽可以同時(shí)定義多個(gè)class。例如:我們先定義兩個(gè)樣式,第一個(gè)樣式背景為#666;第二個(gè)樣式有10 px的邊框。
.one{width:200px;background:#666;}
.two{border:10px solid #F00;}
在頁(yè)面代碼中,我們可以這樣調(diào)用
<div class=”one two”></div>
這樣最終的顯示效果是這個(gè)div既有#666的背景,也有10px的邊框。是的,這樣做是可以的,你可以嘗試一下。
4.9.使用子選擇器(descendant selectors)
CSS初學(xué)者不知道使用子選擇器是影響他們效率的原因之一。子選擇器可以幫助你節(jié)約大量的class定義。我們來(lái)看下面這段代碼:
<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更加簡(jiǎn)潔、更加容易閱讀。
4.10.不需要給背景圖片路徑加引號(hào)
為了節(jié)省字節(jié),我建議不要給背景圖片路徑加引號(hào),因?yàn)橐?hào)不是必須的。例如:
background:url(images/***.gif) #333;
可以寫(xiě)為
background:url(images/***.gif) #333;
如果你加了引號(hào),反而會(huì)引起一些瀏覽器的錯(cuò)誤。
4.11.組選擇器(Group selectors)
當(dāng)一些元素類(lèi)型、class或者id都有共同的一些屬性,你就可以使用組選擇器來(lái)避免多次的重復(fù)定義。這可以節(jié)省不少字節(jié)。
例如:定義所有標(biāo)題的字體、顏色和margin,你可以這樣寫(xiě):
h1,h2,h3,h4,h5,h6 {
font-family:Lucida Grande,Lucida,Arial,Helvetica,sans-serif;
color:#333;
margin:1em 0;
}
如果在使用時(shí),有個(gè)別元素需要定義獨(dú)立樣式,你可以再加上新的定義,可以覆蓋老的定義,例如:
h1 { font-size:2em; }
h2 { font-size:1.6em; }
4.12.用正確的順序指定鏈接的樣式
當(dāng)你用CSS來(lái)定義鏈接的多個(gè)狀態(tài)樣式時(shí),要注意它們書(shū)寫(xiě)的順序,正確的順序是::link :visited :hover :active。抽取第一個(gè)字母是LVHA,你可以記憶成LoVe HAte(喜歡討厭)。為什么這么定義,可以參考Eric Meyer的《Link Specificity》。
如果你的用戶(hù)需要用鍵盤(pán)來(lái)控制,需要知道當(dāng)前鏈接的焦點(diǎn),你還可以定義:focus屬性。:focus屬性的效果也取決與你書(shū)寫(xiě)的位置,如果你希望聚焦元素顯示:hover效果,你就把:focus寫(xiě)在:hover前面;如果你希望聚焦效果替代:hover效果,你就把:focus放在:hover后面。
4.13.清除浮動(dòng)
一個(gè)非常常見(jiàn)的CSS問(wèn)題,定位使用浮動(dòng)的時(shí)候,下面的層被浮動(dòng)的層所覆蓋,或者層里嵌套的子層超出了外層的范圍。
通常的解決辦法是在浮動(dòng)層后面添加一個(gè)額外元素,例如一個(gè)div或者一個(gè)br,并且定義它的樣式為clear: both。
4.14.橫向居中(centering)
這是一個(gè)簡(jiǎn)單的技巧,但是值得再說(shuō)一遍,因?yàn)槲铱匆?jiàn)太多的新手問(wèn)題都是問(wèn)這個(gè):CSS如何橫向居中?你需要定義元素的寬,并且定義橫向的margin,如果你的布局包含在一個(gè)層(容器)中,就象這樣:
<!-- 你的布局這里開(kāi)始 -->
你可以這樣定義使它橫向居中:
#wrap {
width:760px; /* 修改為你的層的寬度 */
margin:0 auto;
}
但是IE5/Win不能正確顯示這個(gè)定義,我們采用一個(gè)非常有用的技巧來(lái)解決:用text-align屬性。就象這樣:
body {
text-align:center;
}
#wrap {
width:760px; /* 修改為你的層的寬度 */
margin:0 auto;
text-align:left;
}
第一個(gè)body的text-align:center; 規(guī)則定義IE5/Win中body的所有元素居中(其他瀏覽器只是將文字居中) ,第二個(gè)text-align:left;是將#warp中的文字居左。
4.15.導(dǎo)入(Import)和隱藏CSS
因?yàn)槔习姹緸g覽器不支持CSS,一個(gè)通常的做法是使用@import技巧來(lái)把CSS隱藏起來(lái)。例如:
@import url(main.css);
然而,這個(gè)方法對(duì)IE4不起作用,這讓我很是頭疼了一陣子。后來(lái)我用這樣的寫(xiě)法:
@import main.css;
4.16.針對(duì)IE的優(yōu)化
有些時(shí)候,你需要對(duì)IE瀏覽器的bug定義一些特別的規(guī)則,這里有太多的CSS技巧(Hacks),我只使用其中的兩種方法,不管微軟在即將發(fā)布的IE7 beta版里是否更好的支持CSS,這兩種方法都是最安全的。
1.注釋的方法
(a)在IE中隱藏一個(gè)CSS定義,你可以使用子選擇器(child selector):
html>body p {
/* 定義內(nèi)容 */
}
(b)下面這個(gè)寫(xiě)法只有IE瀏覽器可以理解(對(duì)其他瀏覽器都隱藏)
* html p {
/* declarations */
}
(c)還有些時(shí)候,你希望IE/Win有效而IE/Mac隱藏,你可以使用反斜線(xiàn)技巧:
/* */
* html p {
declarations
}
/* */
2.條件注釋(conditional comments)的方法
另外一種方法,我認(rèn)為比CSS Hacks更加經(jīng)得起考驗(yàn)就是采用微軟的私有屬性條件注釋(conditional comments)。用這個(gè)方法你可以給IE單獨(dú)定義一些樣式,而不影響主樣式表的定義。就象這樣:
<!--[if IE]>
<link rel=stylesheet type=text/css href=ie.css />
<![endif]-->
4.17.調(diào)試技巧:層有多大?
當(dāng)調(diào)試CSS發(fā)生錯(cuò)誤,你就要象排版工人,逐行分析CSS代碼。我通常在出問(wèn)題的層上定義一個(gè)背景顏色,這樣就能很明顯看到層占據(jù)多大空間。有些人建議用 border,一般情況也是可以的,但問(wèn)題是,有時(shí)候border 會(huì)增加元素的尺寸,border-top和boeder-bottom會(huì)破壞縱向margin的值,所以使用background更加安全些。
另外一個(gè)經(jīng)常出問(wèn)題的屬性是outline。outline看起來(lái)象boeder,但不會(huì)影響元素的尺寸或者位置。只有少數(shù)瀏覽器支持outline屬性,我所知道的只有Safari、OmniWeb、和Opera。
4.18.CSS代碼書(shū)寫(xiě)樣式
在寫(xiě)CSS代碼的時(shí)候,對(duì)于縮進(jìn)、斷行、空格,每個(gè)人有每個(gè)人的書(shū)寫(xiě)習(xí)慣。在經(jīng)過(guò)不斷實(shí)踐后,我決定采用下面這樣的書(shū)寫(xiě)樣式:
selector1,
selector2 {
property:value;
}
當(dāng)使用聯(lián)合定義時(shí),我通常將每個(gè)選擇器單獨(dú)寫(xiě)一行,這樣方便在CSS文件中找到它們。在最后一個(gè)選擇器和大括號(hào){之間加一個(gè)空格,每個(gè)定義也單獨(dú)寫(xiě)一行,分號(hào)直接在屬性值后,不要加空格。
我習(xí)慣在每個(gè)屬性值后面都加分號(hào),雖然規(guī)則上允許最后一個(gè)屬性值后面可以不寫(xiě)分號(hào),但是如果你要加新樣式時(shí)容易忘記補(bǔ)上分號(hào)而產(chǎn)生錯(cuò)誤,所以還是都加比較好。
最后,關(guān)閉的大括號(hào)}單獨(dú)寫(xiě)一行。
空格和換行有助與閱讀。
推薦閱讀:
http://www.dbjr.com.cn/article/15758.htm
http://portal.oss.org.tw/files/95/a/a6.pdf
http://en.wikipedia.org/wiki/XHTML
http://www.w3.org/TR/2000/REC-xhtml1-20000126/
http://www.dreamdu.com/xhtml/function_xhtml11/
Css瀏覽器兼容性問(wèn)題總結(jié)
CSS對(duì)瀏覽器的兼容性總結(jié)
CSS對(duì)瀏覽器的兼容性有時(shí)讓人很頭疼,或許當(dāng)你了解當(dāng)中的技巧跟原理,就會(huì)覺(jué)得也不是難事,從網(wǎng)上收集了IE7,6與Fireofx的兼容性處理方法并整理了一下.對(duì)于web2.0的過(guò)度,請(qǐng)盡量用xhtml格式寫(xiě)代碼,而且DOCTYPE 影響 CSS 處理,作為W3C的標(biāo)準(zhǔn),一定要加 DOCTYPE聲名. 以下為我們工作中經(jīng)常用到的或是遇到的問(wèn)題。
CSS技巧
5.1.div的垂直居中問(wèn)題
vertical-align:middle; 將行距增加到和整個(gè)DIV一樣高 line-height:200px; 然后插入文字,就垂直居中了。缺點(diǎn)是要控制內(nèi)容不要換行
5.2.margin加倍的問(wèn)題
設(shè)置為float的div在ie下設(shè)置的margin會(huì)加倍。這是一個(gè)ie6都存在的bug。解決方案是在這個(gè)div里面加上display:inline;
例如: <#div id=”imfloat”> 相應(yīng)的css為 #IamFloat{ float:left; margin:5px;/*IE下理解為10px*/ display:inline;/*IE下再理解為5px*/}
5.3.浮動(dòng)ie產(chǎn)生的雙倍距離
#box{ float:left; width:100px; margin:0 0 0 100px; //這種情況之下IE會(huì)產(chǎn)生200px的距離 display:inline; //使浮動(dòng)忽略} 這里細(xì)說(shuō)一下block與inline兩個(gè)元素:block元素的特點(diǎn)是,總是在新行上開(kāi)始,高度,寬度,行高,邊距都可以控制(塊元素);Inline元素的特點(diǎn)是,和其他元素在同一行上,不可控制(內(nèi)嵌元素); #box{ display:block; //可以為內(nèi)嵌元素模擬為塊元素 display:inline; //實(shí)現(xiàn)同一行排列的效果 diplay:table;
5.4.IE與寬度和高度的問(wèn)題
IE 不認(rèn)得min-這個(gè)定義,但實(shí)際上它把正常的width和height當(dāng)作有min的情況來(lái)使。這樣問(wèn)題就大了,如果只用寬度和高度,正常的瀏覽器里這兩個(gè)值就不會(huì)變,如果只用min-width和min-height的話(huà),IE下面根本等于沒(méi)有設(shè)置寬度和高度。 比如要設(shè)置背景圖片,這個(gè)寬度是比較重要的。要解決這個(gè)問(wèn)題,可以這樣: #box{ width: 80px; height: 35px;}html>body #box{ width: auto; height: auto; min-width: 80px; min-height: 35px;}
5.5.頁(yè)面的最小寬度
min -width是個(gè)非常方便的CSS命令,它可以指定元素最小也不能小于某個(gè)寬度,這樣就能保證排版一直正確。但I(xiàn)E不認(rèn)得這個(gè),而它實(shí)際上把width當(dāng)做最小寬度來(lái)使。為了讓這一命令在IE上也能用,可以把一個(gè)<div> 放到 <body> 標(biāo)簽下,然后為div指定一個(gè)類(lèi), 然后CSS這樣設(shè)計(jì): #container{ min-width: 600px; width:expression(document.body.clientWidth < 600? "600px": "auto" );} 第一個(gè)min-width是正常的;但第2行的width使用了Javascript,這只有IE才認(rèn)得,這也會(huì)讓你的HTML文檔不太正規(guī)。它實(shí)際上通過(guò)Javascript的判斷來(lái)實(shí)現(xiàn)最小寬度。
5.6.DIV浮動(dòng)IE文本產(chǎn)生3象素的bug
左邊對(duì)象浮動(dòng),右邊采用外補(bǔ)丁的左邊距來(lái)定位,右邊對(duì)象內(nèi)的文本會(huì)離左邊有3px的間距. #box{ float:left; width:800px;} #left{ float:left; width:50%;} #right{ width:50%;} *html #left{ margin-right:-3px; //這句是關(guān)鍵} <div id="box"> <div id="left"></div> <div id="right"></div> </div>
5.7.IE捉迷藏的問(wèn)題
當(dāng)div應(yīng)用復(fù)雜的時(shí)候每個(gè)欄中又有一些鏈接,DIV等這個(gè)時(shí)候容易發(fā)生捉迷藏的問(wèn)題。 有些內(nèi)容顯示不出來(lái),當(dāng)鼠標(biāo)選擇這個(gè)區(qū)域是發(fā)現(xiàn)內(nèi)容確實(shí)在頁(yè)面。 解決辦法:對(duì)#layout使用line-height屬性 或者給#layout使用固定高和寬。頁(yè)面結(jié)構(gòu)盡量簡(jiǎn)單。
5.8.float的div閉合;清除浮動(dòng);自適應(yīng)高度;
① 例如:<#div id=”floatA” ><#div id=”floatB” ><#div id=” NOTfloatC” >這里的NOTfloatC并不希望繼續(xù)平移,而是希望往下排。(其中floatA、floatB的屬性已經(jīng)設(shè)置為 float:left;) 這段代碼在IE中毫無(wú)問(wèn)題,問(wèn)題出在FF。原因是NOTfloatC并非float標(biāo)簽,必須將float標(biāo)簽閉合。在 <#div class=”floatB”> <#div class=”NOTfloatC”>之間加上 < #div class=”clear”>這個(gè)div一定要注意位置,而且必須與兩個(gè)具有float屬性的div同級(jí),之間不能存在嵌套關(guān)系,否則會(huì)產(chǎn)生異常。 并且將clear這種樣式定義為為如下即可: .clear{ clear:both;}
②作為外部 wrapper 的 div 不要定死高度,為了讓高度能自動(dòng)適應(yīng),要在wrapper里面加上overflow:hidden; 當(dāng)包含float的 box的時(shí)候,高度自動(dòng)適應(yīng)在IE下無(wú)效,這時(shí)候應(yīng)該觸發(fā)IE的layout私有屬性(萬(wàn)惡的IE?。?用zoom:1;可以做到,這樣就達(dá)到了兼容。 例如某一個(gè)wrapper如下定義: .colwrapper{ overflow:hidden; zoom:1; margin:5px auto;}
③對(duì)于排版,我們用得最多的css描述可能就是float:left.有的時(shí)候我們需要在n欄的float div后面做一個(gè)統(tǒng)一的背景,譬如: <div id=”page”> <div id=”left”></div> <div id=”center”></div> <div id=”right”></div> </div> 比如我們要將page的背景設(shè)置成藍(lán)色,以達(dá)到所有三欄的背景顏色是藍(lán)色的目的,但是我們會(huì)發(fā)現(xiàn)隨著left center right的向下拉長(zhǎng),而 page居然保存高度不變,問(wèn)題來(lái)了,原因在于page不是float屬性,而我們的page由于要居中,不能設(shè)置成float,所以我們應(yīng)該這樣解決 <div id=”page”> <div id=”bg” style=”float:left;width:100%”> <div id=”left”></div> <div id=”center”></div> <div id=”right”></div> </div> </div> 再嵌入一個(gè)float left而寬度是100%的DIV解決之
④萬(wàn)能float 閉合(非常重要!) 關(guān)于 clear float 的原理可參見(jiàn) [How To Clear Floats Without Structural Markup],將以下代碼加入Global CSS 中,給需要閉合的div加上 class="clearfix" 即可,屢試不爽. /* Clear Fix */ .clearfix:after { content:"."; display:block; height:0; clear:both; visibility:hidden; } .clearfix { display:inline-block; } /* Hide from IE Mac */ .clearfix {display:block;} /* End hide from IE Mac */ /* end of clearfix */ 或者這樣設(shè)置:.hackbox{ display:table; //將對(duì)象作為塊元素級(jí)的表格顯示}
5.9.高度不適應(yīng)
高度不適應(yīng)是當(dāng)內(nèi)層對(duì)象的高度發(fā)生變化時(shí)外層高度不能自動(dòng)進(jìn)行調(diào)節(jié),特別是當(dāng)內(nèi)層對(duì)象使用margin 或paddign 時(shí)。 例: #box {background-color:#eee; } #box p {margin-top: 20px;margin-bottom: 20px; text-align:center; } <div id="box"> <p>p對(duì)象中的內(nèi)容</p> </div> 解決方法:在P對(duì)象上下各加2個(gè)空的div對(duì)象CSS代碼:.1{height:0px;overflow:hidden;}或者為DIV加上border屬性。
5.10 .IE6下為什么圖片下有空隙產(chǎn)生
解決這個(gè)BUG的方法也有很多,可以是改變html的排版,或者設(shè)置img 為display:block 或者設(shè)置vertical-align 屬性為 vertical-align:top | bottom |middle |text-bottom 都可以解決.
5.11.如何對(duì)齊文本與文本輸入框
加上 vertical-align:middle; <style type="text/css"> <!-- input { width:200px; height:30px; border:1px solid red; vertical-align:middle; } --> </style>
5.12.web標(biāo)準(zhǔn)中定義id與class有什么區(qū)別嗎
web標(biāo)準(zhǔn)中是不容許重復(fù)ID的,比如 div id="aa" 不容許重復(fù)2次,而class 定義的是類(lèi),理論上可以無(wú)限重復(fù), 這樣需要多次引用的定義便可以使用他.
屬性的優(yōu)先級(jí)問(wèn)題 ID 的優(yōu)先級(jí)要高于class,看上面的例子 三.方便JS等客戶(hù)端腳本,如果在頁(yè)面中要對(duì)某個(gè)對(duì)象進(jìn)行腳本操作,那么可以給他定義一個(gè)ID,否則只能利用遍歷頁(yè)面元素加上指定特定屬性來(lái)找到它,這是相對(duì)浪費(fèi)時(shí)間資源,遠(yuǎn)遠(yuǎn)不如一個(gè)ID來(lái)得簡(jiǎn)單.
5.13. LI中內(nèi)容超過(guò)長(zhǎng)度后以省略號(hào)顯示的方法
此方法適用與IE與OP瀏覽器 <style type="text/css"> <!-- li { width:200px; white-space:nowrap; text-overflow:ellipsis; -o-text-overflow:ellipsis; overflow: hidden; } --> </style>
5.14.為什么web標(biāo)準(zhǔn)中IE無(wú)法設(shè)置滾動(dòng)條顏色了
解決辦法是將body換成html <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> <meta http-equiv="Content-Type" content="text/html; charset=gb2312" /> <style type="text/css"> <!-- html { scrollbar-face-color:#f6f6f6; scrollbar-highlight-color:#fff; scrollbar-shadow-color:#eeeeee; scrollbar-3dlight-color:#eeeeee; scrollbar-arrow-color:#000; scrollbar-track-color:#fff; scrollbar-darkshadow-color:#fff; } --> </style>
5.15.為什么無(wú)法定義1px左右高度的容器
IE6下這個(gè)問(wèn)題是因?yàn)槟J(rèn)的行高造成的,解決的方法也有很多,例如:overflow:hidden | zoom:0.08 | line-height:1px
5.16.怎么樣才能讓層顯示在FLASH之上呢
解決的辦法是給FLASH設(shè)置透明 <param name="wmode" value="transparent" />
5.17.怎樣使一個(gè)層垂直居中于瀏覽器中
這里我們使用百分比絕對(duì)定位,與外補(bǔ)丁負(fù)值的方法,負(fù)值的大小為其自身寬度高度除以二
<style type="text/css">
<!—
div
{
position:absolute;
top:50%;
lef:50%;
margin:-100px 0 0 -100px;
width:200px;
height:200px;
border:1px solid red;
}
-->
</style>
5.18.兼容各瀏覽器中最小高度
<!--
#mrjin {
background:#ccc;
min-height:100px;
height:auto !important;
height:100px;
overflow:visible;
}
-->
5.18. IE6下默認(rèn)的字體尺寸大致在 12 - 14px 之間的問(wèn)題
IE6下默認(rèn)的字體尺寸大致在 12 - 14px 之間,當(dāng)你試圖定義一個(gè)高度小于這個(gè)默認(rèn)值的 div 的時(shí)候, IE 會(huì)固執(zhí)的認(rèn)為這個(gè)層的高度不應(yīng)該小于字體的行高。所以即使你用 height:4px; 來(lái)定義了一個(gè) div 的高度,實(shí)際在 IE 下顯示的仍然是一個(gè) 12 px 左右高度的層。添加overflow: hidden解決問(wèn)題。
<div style=”height: 4px; overflow: hidden;”></div>
FF與IE
1.Div居中問(wèn)題 div設(shè)置 margin-left, margin-right 為 auto 時(shí)已經(jīng)居中,IE 不行,IE需要設(shè)定body居中,首先在父級(jí)元素定義text-algin: center;這個(gè)的意思就是在父級(jí)元素內(nèi)的內(nèi)容居中。
2.鏈接(a標(biāo)簽)的邊框與背景 a 鏈接加邊框和背景色,需設(shè)置 display: block, 同時(shí)設(shè)置 float: left 保證不換行。參照 menubar, 給 a 和 menubar 設(shè)置高度是為了避免底邊顯示錯(cuò)位, 若不設(shè) height, 可以在 menubar 中插入一個(gè)空格。
3.超鏈接訪(fǎng)問(wèn)過(guò)后hover樣式就不出現(xiàn)的問(wèn)題 被點(diǎn)擊訪(fǎng)問(wèn)過(guò)的超鏈接樣式不在具有hover和active了,很多人應(yīng)該都遇到過(guò)這個(gè)問(wèn)題,解決方法是改變CSS屬性的排列順序: L-V-H-A Code: <style type="text/css"> <!-- a:link {} a:visited {} a:hover {} a:active {} --> </style>
4. 游標(biāo)手指cursor cursor: pointer 可以同時(shí)在 IE FF 中顯示游標(biāo)手指狀, hand 僅 IE 可以
5.UL的padding與margin ul標(biāo)簽在FF中默認(rèn)是有padding值的,而在IE中只有margin默認(rèn)有值,所以先定義 ul{margin:0;padding:0;}就能解決大部分問(wèn)題
6. FORM標(biāo)簽 這個(gè)標(biāo)簽在IE中,將會(huì)自動(dòng)margin一些邊距,而在FF中margin則是0,因此,如果想顯示一致,所以最好在css中指定margin和 padding,針對(duì)上面兩個(gè)問(wèn)題,我的css中一般首先都使用這樣的樣式ul,form{margin:0;padding:0;}給定義死了,所以后面就不會(huì)為這個(gè)頭疼了.
7. BOX模型解釋不一致問(wèn)題 在FF和IE 中的BOX模型解釋不一致導(dǎo)致相差2px解決方法:div{margin:30px!important;margin:28px;} 注意這兩個(gè) margin的順序一定不能寫(xiě)反, important這個(gè)屬性IE不能識(shí)別,但別的瀏覽器可以識(shí)別。所以在IE下其實(shí)解釋成這樣: div {maring:30px;margin:28px}重復(fù)定義的話(huà)按照最后一個(gè)來(lái)執(zhí)行,所以不可以只寫(xiě)margin:xx px!important; #box{ width:600px; //for ie6.0- w\idth:500px; //for ff+ie6.0} #box{ width:600px!important //for ff width:600px; //for ff+ie6.0 width /**/:500px; //for ie6.0-}
8.屬性選擇器(這個(gè)不能算是兼容,是隱藏css的一個(gè)bug) p[id]{}div[id]{} 這個(gè)對(duì)于IE6.0和IE6.0以下的版本都隱藏,FF和OPera作用.屬性選擇器和子選擇器還是有區(qū)別的,子選擇器的范圍從形式來(lái)說(shuō)縮小了,屬性選擇器的范圍比較大,如p[id]中,所有p標(biāo)簽中有id的都是同樣式的.
9.最狠的手段 - !important; 如果實(shí)在沒(méi)有辦法解決一些細(xì)節(jié)問(wèn)題,可以用這個(gè)方法.FF對(duì)于”!important”會(huì)自動(dòng)優(yōu)先解析,然而IE則會(huì)忽略.如下 .tabd1{ background:url(/res/images/up/tab1.gif) no-repeat 0px 0px !important; /*Style for FF*/ background:url(/res/images/up/tab1.gif) no-repeat 1px 0px; /* Style for IE */} 值得注意的是,一定要將xxxx !important 這句放置在另一句之上,上面已經(jīng)提過(guò)
10.IE,FF的默認(rèn)值問(wèn)題 或許你一直在抱怨為什么要專(zhuān)門(mén)為IE和FF寫(xiě)不同的CSS,為什么IE這樣讓人頭疼,然后一邊寫(xiě)css,一邊咒罵那個(gè)可惡的M$ IE.其實(shí)對(duì)于css的標(biāo)準(zhǔn)支持方面,IE并沒(méi)有我們想象的那么可惡,關(guān)鍵在于IE和FF的默認(rèn)值不一樣而已,掌握了這個(gè)技巧,你會(huì)發(fā)現(xiàn)寫(xiě)出兼容FF和IE的css并不是那么困難,或許對(duì)于簡(jiǎn)單的css,你完全可以不用”!important”這個(gè)東西了。 我們都知道,瀏覽器在顯示網(wǎng)頁(yè)的時(shí)候,都會(huì)根據(jù)網(wǎng)頁(yè)的 css樣式表來(lái)決定如何顯示,但是我們?cè)跇邮奖碇形幢貢?huì)將所有的元素都進(jìn)行了具體的描述,當(dāng)然也沒(méi)有必要那么做,所以對(duì)于那些沒(méi)有描述的屬性,瀏覽器將采用內(nèi)置默認(rèn)的方式來(lái)進(jìn)行顯示,譬如文字,如果你沒(méi)有在css中指定顏色,那么瀏覽器將采用黑色或者系統(tǒng)顏色來(lái)顯示,div或者其他元素的背景,如果在 css中沒(méi)有被指定,瀏覽器則將其設(shè)置為白色或者透明,等等其他未定義的樣式均如此。所以有很多東西出現(xiàn)FF和IE顯示不一樣的根本原因在于它們的默認(rèn)顯示不一樣,而這個(gè)默認(rèn)樣式該如何顯示我知道在w3中有沒(méi)有對(duì)應(yīng)的標(biāo)準(zhǔn)來(lái)進(jìn)行規(guī)定,因此對(duì)于這點(diǎn)也就別去怪罪IE了。
11.為什么FF下文本無(wú)法撐開(kāi)容器的高度 標(biāo)準(zhǔn)瀏覽器中固定高度值的容器是不會(huì)象IE6里那樣被撐開(kāi)的,那我又想固定高度,又想能被撐開(kāi)需要怎樣設(shè)置呢?辦法就是去掉height設(shè)置min-height:200px; 這里為了照顧不認(rèn)識(shí)min-height的IE6 可以這樣定義: { height:auto!important; height:200px; min-height:200px; }
12.為什么IE6下容器的寬度和FF解釋不同呢 <?xml version="1.0" encoding="gb2312"?> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> <meta http-equiv="Content-Type" content="text/html; charset=gb2312" /> <style type="text/css"> <!-- div { cursor:pointer; width:200px; height:200px; border:10px solid red } --> </style> <div ōnclick="alert(this.offsetWidth)">讓firefox與IE兼容</div> 問(wèn)題的差別在于容器的整體寬度有沒(méi)有將邊框(border)的寬度算在其內(nèi),這里IE6解釋為200PX ,而FF則解釋為220PX,那究竟是怎么導(dǎo)致的問(wèn)題呢?大家把容器頂部的xml去掉就會(huì)發(fā)現(xiàn)原來(lái)問(wèn)題出在這,頂部的申明觸發(fā)了IE的qurks mode,關(guān)于qurks mode、 standards mode的相關(guān)知識(shí),請(qǐng)參考:http: //www.microsoft.com/china/msdn/library/webservices/asp.net/ ASPNETusStan.mspx?mfr=true
13. 讓IE6支持PNG透明
一個(gè)IE6的Bug引起了大麻煩, 他不支持透明的PNG圖片.
你需要使用一個(gè)css濾鏡
*html #image-style {
background-image: none;
filter:progid:DXImageTransform.Microsoft.AlphaImageLoader(src="fil
ename.png", sizingMethod="scale");
}
14. 若需給 a 標(biāo)簽內(nèi)內(nèi)容加上 樣式
若需給 a 標(biāo)簽內(nèi)內(nèi)容加上 樣式, 需要設(shè)置 display: block;(常見(jiàn)于導(dǎo)航標(biāo)簽)
15. IE6下默認(rèn)的字體尺寸大致在 12 - 14px 之間
IE6下默認(rèn)的字體尺寸大致在 12 - 14px 之間,當(dāng)你試圖定義一個(gè)高度小于這個(gè)默認(rèn)值的 div 的時(shí)候, IE 會(huì)固執(zhí)的認(rèn)為這個(gè)層的高度不應(yīng)該小于字體的行高。所以即使你用 height:4px; 來(lái)定義了一個(gè) div 的高度,實(shí)際在 IE 下顯示的仍然是一個(gè) 12 px 左右高度的層。添加overflow: hidden解決問(wèn)題。
<div style=”height: 4px; overflow: hidden;”></div>
IE6,IE7,FF IE7.0 出來(lái)了,對(duì)CSS的支持又有新問(wèn)題。瀏覽器多了,網(wǎng)頁(yè)兼容性更差了,疲于奔命的還是我們 ,為解決IE7.0的兼容問(wèn)題,找來(lái)了下面這篇文章: 現(xiàn)在我大部分都是用!important來(lái)hack,對(duì)于ie6和firefox測(cè)試可以正常顯示,但是ie7對(duì)!important可以正確解釋?zhuān)瑫?huì)導(dǎo)致頁(yè)面沒(méi)按要求顯示!下面是三個(gè)瀏覽器的兼容性收集.
第一種,是CSS HACK的方法
height:20px; /*For firefox*/
*height:25px; /*For IE7 & IE6*/
_height:20px; /*For IE6*/ 注意順序。
這樣也屬于CSS HACK.
#example { color: #333; } /* Moz */
* html #example { color: #666; } /* IE6 */
*+html #example { color: #999; } /* IE7 */
第2種:
<!--其他瀏覽器 -->
<link rel="stylesheet" type="text/css" href="css.css" />
<!--[if IE 7]> <!-- 適合于IE7 -->
<link rel="stylesheet" type="text/css" href="ie7.css" />
<![endif]-->
<!--[if lte IE 6]> <!-- 適合于IE6及一下 -->
<link rel="stylesheet" type="text/css" href="ie.css" />
<![endif]-->
第三種,css filter的辦法,以下為經(jīng)典從國(guó)外網(wǎng)站翻譯過(guò)來(lái)的。.
新建一個(gè)css樣式如下:
#item { width: 200px; height: 200px; background: red; } 新建一個(gè)div,并使用前面定義的css的樣式: <div id="item">some text here</div> 在body表現(xiàn)這里加入lang屬性,中文為zh: <body lang="en"> 現(xiàn)在對(duì)div元素再定義一個(gè)樣式: *:lang(en) #item{ background:green !important; } 這樣做是為了用!important覆蓋原來(lái)的css樣式,由于:lang選擇器ie7.0并不支持,所以對(duì)這句話(huà)不會(huì)有任何作用,于是也達(dá)到了ie6.0下同樣的效果,但是很不幸地的是,safari同樣不支持此屬性,所以需要加入以下css樣式: #item:empty { background: green !important } :empty選擇器為css3的規(guī)范,盡管safari并不支持此規(guī)范,但是還是會(huì)選擇此元素,不管是否此元素存在,現(xiàn)在綠色會(huì)現(xiàn)在在除ie各版本以外的瀏覽器上。 對(duì)IE6和FF的兼容可以考慮以前的!important 個(gè)人比較喜歡用
本文來(lái)自:http://www.aa25.cn/504.shtml
推薦的寫(xiě)法:
#example { color: #333; } /* Moz */
* html #example { color: #666; } /* IE6 */
*+html #example { color: #999; } /* IE7 */
感覺(jué)這樣容易記憶
推薦閱讀
http://www.cnblogs.com/me-sa/archive/2007/12/03/980685.html#981249
http://693272.blog.163.com/blog/static/364859842008514102556309/
JavaScript瀏覽器兼容性總結(jié)
下面是些整理的javascript在各瀏覽器兼容性資料。
1. 一些參考資料
http://nexgenmedia.net/evang/iemozguide/
http://www.javascriptkit.com/domref/
firefox對(duì)css的擴(kuò)展
http://developer.mozilla.org/en/docs/CSS_Reference:Mozilla_Extensions
關(guān)于css3的信息,能在線(xiàn)測(cè)試當(dāng)前瀏覽器對(duì)css3的支持情況
http://www.css3.info
2.js調(diào)試工具推薦 firefox 的 firebug 插件
能夠給js設(shè)置斷點(diǎn)執(zhí)行
能夠運(yùn)行時(shí)修改css樣式
查看dom模型等
3. 打開(kāi)firefox所有js警告:
在地址欄里錄入:about:config
雙擊,設(shè)置 javascript option restict 打開(kāi)為true 能夠看到很多警告,利于糾錯(cuò)
4. 使用javascript需要注意的地方
△ document.all("id") -> document.getElementById("id")
并且控件盡量用id,而不是name標(biāo)識(shí)
提示:
如果控件只有name,沒(méi)有id, 用getElementById時(shí):
IE:也可以找到對(duì)象
FF:返回NULL
△ 獲得form里某個(gè)元素的方法
elForm.elements['name'];
△ 取集合元素時(shí), ie支持 [],() 2種寫(xiě)法, 但是ff僅支持[],如:
table.rows(5).cells(0)
改為:
table.rows[5].cells[0]
△ 判斷對(duì)象是否是object的方法應(yīng)該為
if( typeof 對(duì)象變量 == "object")
而不是 if(對(duì)象變量 == "[object]")
△ eval(對(duì)象名稱(chēng)) -> document.getElementById
FF支持eval函數(shù)
△ 通過(guò)id直接調(diào)用對(duì)象
對(duì)象id.value = ""
改為
document.getElementById("name").value = ""
△ obj.insertAdjacentElement("beforeBegin",objText);
改為用
obj.parentNode.insertBefore(objText,obj);
△ FF的createElement不支持HTML代碼
用document.write(esHTML);
或者創(chuàng)建元素后再設(shè)置屬性, 對(duì)input元素來(lái)說(shuō),需要先設(shè)置type再加入到dom里
var obj = createElement("input");
obj.type = "checkbox";
var obj2 = document.getElementById("id2");
obj2.parentNode.insertBefore(obj,obj2);
如果是直接插入html代碼,則可以考慮用
createContextualFragment
△ innerText -> textContent
△ 對(duì)象名稱(chēng)中的$不能識(shí)別, 建議改為_(kāi)
objName = "t1$spin"
改為
objName = "t1_spin"
△ FF里設(shè)置Attribute為某個(gè)對(duì)象,然后再取出來(lái),這時(shí)候?qū)ο蟮膶傩远紒G失了?
objText.setAttribute("obj",obj);
alert(obj.id) //正確的名字
obj = objText.getAttribute("obj");
alert(obj.id) //null
在IE下沒(méi)有問(wèn)題, FF對(duì)setAttribute來(lái)說(shuō),第2個(gè)參數(shù)都是字符串型的!!!
所以如果第2個(gè)參數(shù)是對(duì)象時(shí),相當(dāng)于調(diào)用對(duì)象的 toString() 方法了
解決的方法是用下面的調(diào)用方式:
objText.dropdown_select = obj;
obj = objText.dropdown_select
△ className -> class
FF下用class代替IE下的className
由于class是關(guān)鍵字, 所以需要用 setAttribute/getAttribute才行
setAttribute("class","css樣式名稱(chēng)");
△ 在html里定義的屬性,必須用getAttribute才行
<td id="TD1" isOBJ="true">
獲取時(shí):
document.getElementByID("TD1").isOBJ 總返回 undefined, IE下是可以的
應(yīng)該用:
document.getElementByID("TD1").getAttribute("isOBJ")
△ FF里select控件不再是:總是在頂端顯示
所以可能需要設(shè)置控件的zIndex
IE里覆蓋select控件的方法是, 用ifame
△ 對(duì)于if ( vars == undefined ) 下面的值用于判斷是等同的
undefined
null
false
0
△ 如果FF調(diào)用obj.focus(); 報(bào)錯(cuò),請(qǐng)嘗試改為:
window.setTimeout( function(){ obj.focus(); }, 20);
△ FF下,keyCode是只讀的, 那把回車(chē)轉(zhuǎn)換為tab怎么辦? 在錄入時(shí)進(jìn)行鍵值轉(zhuǎn)換怎么辦??
變通的方法是:
1. 回車(chē)跳轉(zhuǎn) -> 自己寫(xiě)跳轉(zhuǎn)處理代碼.
遍歷dom里所有的元素, 找到當(dāng)前元素的下一個(gè)能夠設(shè)置焦點(diǎn)的元素, 給其設(shè)置焦點(diǎn)
2. 在能夠錄入的控件里,
把選中的部分替換為新錄入的內(nèi)容: var text = String.fromCharCode(event.keyCode);
同時(shí)阻止按鍵事件上傳, 調(diào)用: event.preventDefault()
△ <button> 會(huì)被firefox解釋為提交form或者刷新頁(yè)面???
需要寫(xiě)標(biāo)準(zhǔn)<button type="button">
或者在onclick="原函數(shù)調(diào)用(); return false;"
△ 在firefox里, document.onfocus里獲得不到實(shí)際獲得焦點(diǎn)的控件?
為什么document.keydown可以呢?
△ children -> childNodes
△ sytle.pixelHeight -> style.height
△ 判斷函數(shù)或者變量是否存在
if (!("varName" in window)) var VarName = 1;
△ document.body.clientWidth
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" >
如果html包含上面的語(yǔ)句,則應(yīng)該用下面的方法獲取
document.documentElement.clientWidth
△ window.createPopup
FF不支持
△ document.body.onresize
FF 不支持
用window.onresize
注意,頁(yè)面打開(kāi)時(shí)并不會(huì)觸發(fā)onresize事件? 需要在onload里也調(diào)用一次才行
△ box模型的問(wèn)題
IE下默認(rèn)的是 content-box 為了統(tǒng)一,可用設(shè)置:
div, td {-moz-box-sizing:border-box;box-sizing:border-box;margin:0;padding: 0;}
也可用在文檔頭加入:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
但是對(duì)IE舊代碼影響較大
△ 注冊(cè)事件
IE: attachEvent
FF: addEventListener("blur", myBlur, false);
第1個(gè)參數(shù)事件名稱(chēng)不需要帶"on"
第3個(gè)參數(shù)false代表事件傳遞從事件對(duì)象沿dom樹(shù)往body方向傳
△ 觸發(fā)事件
IE: obj.fireEvent("onclick");
FF:
var e = document.createEvent("Events");
e.initEvent("click", true, false);
element.dispatchEvent(event)
△ 在事件處理函數(shù)中獲得對(duì)象句柄
var oThis = this;
obj.onfocus = function(evt){
oThis.doOnFocus(evt);
}
△ 統(tǒng)一事件處理框架代碼
doOnFocus(evt){
evt = evt || window.event;
var el = evt.target || evt.srcElement;
// 后續(xù)處理
}
△ FF不支持onpropertychange事件
但是FF里可以定義屬性的setter方法, 如下面的:
HTMLElement.prototype.__defineSetter__("readOnly",function(readOnly){
// 構(gòu)造虛擬的event對(duì)象
var evt = [];
evt["target"] = this;
evt["propertyName"] = 'readOnly'
//onpropertychange函數(shù)需要定義evt參數(shù), 參考統(tǒng)一事件處理框架代碼
if (this.onpropertychange) this.onpropertychange(evt);
});
5.IE -> firefox css類(lèi)
△ cursor:hand -> cursor:pointer
△ expression firefox不支持
在IE下expression也非常消耗CPU,所以不應(yīng)該使用!!
為了達(dá)到較好的效果,應(yīng)該建立自己的expression to javascript的處理函數(shù)
這樣在IE和FF里就都能用了.
△ FILTER firefox不支持
filter: Alpha(Opacity=50);
替換為
-moz-opacity: 0.5;
△ text-overflow
不支持
△ transparent
firefox下 obj.setAttribute("bgColor","#ffffff") 只支持顏色
必須用 obj.style.backgroundColor = "transparent" 才行
△ FF下text控件高度與IE不同, 統(tǒng)一一下
input[type=text] {
height:20px;
}
注意input與[之間不能有空格!
△ font在IE里不能對(duì)body和td等起作用, FF可以
統(tǒng)一用 font-family
6. css和javascript在IE和Firefox中二十三個(gè)不同點(diǎn)
http://hi.baidu.com/xg21/blog/item/fbc87c3d624881e93c6d977e.html
7. Javascript與CSS在IE和Firefox中的誤區(qū)及區(qū)別
http://hi.baidu.com/leiting084/blog/item/60dcac6e1decf4dd81cb4a5d.html
8.寫(xiě)入文本
function CompatibleInnerText(id,text)
{
if(navigator.appName.indexOf("Explorer") > -1){
document.getElementById(id).innerText = text;
}
else
{
document.getElementById(id).textContent = text;
}
}
XHTML標(biāo)準(zhǔn)的DIV+CSS布局對(duì)于網(wǎng)站SEO的影響
xml標(biāo)準(zhǔn)的div+css布局對(duì)于網(wǎng)站seo的影響
7.1代碼精簡(jiǎn)
使用DIV+CSS布局,頁(yè)面代碼精簡(jiǎn),這一點(diǎn)相信對(duì)XHTML有所了解的都知道。代碼精簡(jiǎn)所帶來(lái)的直接好處有兩點(diǎn):一是提高spider爬行效率,能在最短的時(shí)間內(nèi)爬完整個(gè)頁(yè)面,這樣對(duì)收錄質(zhì)量有一定好處;二是由于能高效的爬行,就會(huì)受到spider喜歡,這樣對(duì)收錄數(shù)量有一定好處。
7.2表格的嵌套問(wèn)題
很多SEOer在其文章中稱(chēng),搜索引擎一般不抓取三層以上的表格嵌套, spider爬行Table布局的頁(yè)面,遇到多層表格嵌套時(shí),會(huì)跳過(guò)嵌套的內(nèi)容或直接放棄整個(gè)頁(yè)面。
使用Table布局,為了達(dá)到一定的視覺(jué)效果,不得不套用多個(gè)表格。如果嵌套的表格中是核心內(nèi)容,spider爬行時(shí)跳過(guò)了這一段沒(méi)有抓取到頁(yè)面的核心,這個(gè)頁(yè)面就成了相似頁(yè)面。網(wǎng)站中過(guò)多的相似頁(yè)面會(huì)影響排名及域名信任度。
而DIV+CSS布局基本上不會(huì)存在這樣的問(wèn)題,從技術(shù)角度來(lái)說(shuō),XHTML在控制樣式時(shí)也不需要過(guò)多的嵌套。
7.3速度問(wèn)題
DIV+CSS布局較Table布局減少了頁(yè)面代碼,加載速度得到很大的提高,這在spider爬行時(shí)是非常有利的。過(guò)多的頁(yè)面代碼可能造成爬行超時(shí),spider就會(huì)認(rèn)為這個(gè)頁(yè)面無(wú)法訪(fǎng)問(wèn),影響收錄及權(quán)重。
另一方面,真正的SEOer不只是為了追求收錄、排名,快速的響應(yīng)速度是提高用戶(hù)體驗(yàn)度的基礎(chǔ),這對(duì)整個(gè)搜索引擎優(yōu)化及營(yíng)銷(xiāo)都是非常有利的。
7.4 對(duì)排名的影響
基于XTHML標(biāo)準(zhǔn)的DIV+CSS布局,一般在設(shè)計(jì)完成后會(huì)盡可能的完善到能通過(guò)W3C驗(yàn)證。截止目前沒(méi)有搜索引擎表示排名規(guī)則會(huì)傾向于符合W3C標(biāo)準(zhǔn)的網(wǎng)站或頁(yè)面,但事實(shí)證明使用XTHML架構(gòu)的網(wǎng)站排名狀況一般都不錯(cuò)。這一點(diǎn)或許會(huì)有爭(zhēng)議,但樂(lè)思蜀本人保持這樣的觀(guān)點(diǎn),有異議者可以拿三組以上基本同等質(zhì)量的網(wǎng)站對(duì)比觀(guān)察。
我想,這樣的情況可能不是排名規(guī)則,最大的可能還是spider爬行網(wǎng)站時(shí),出現(xiàn)以上差異導(dǎo)致收錄質(zhì)量的不同。
畢竟廖勝于無(wú),建議建站或改版的朋友們,技術(shù)許可的情況下,還是選擇DIV+CSS布局為好。
工作很長(zhǎng)時(shí)間了,這是去年為公司培訓(xùn)的時(shí)候?qū)懙恼淼囊粋€(gè)白皮書(shū),希望大家多多提出意見(jiàn)。謝謝!
div+CSS命名規(guī)范 - 4 -
Div+css命名規(guī)范 - 4 -
1.1. div+css命名規(guī)范 - 4 -
1.2. CSS的Id命名規(guī)范 - 4 -
1.3. css樣式文件命名 - 5 -
XHTML編碼基本規(guī)范 - 6 -
XHTML編碼基本規(guī)范 - 6 -
推薦網(wǎng)頁(yè)制作規(guī)范 - 10 -
推薦網(wǎng)頁(yè)制作規(guī)范 - 10 -
Css常用優(yōu)化技巧 - 11 -
Css瀏覽器兼容性問(wèn)題總結(jié) - 20 -
JavaScript瀏覽器兼容性總結(jié) - 30 -
XHTML標(biāo)準(zhǔn)的DIV+CSS布局對(duì)于網(wǎng)站SEO的影響 - 35 -
div+CSS命名規(guī)范
Div+css命名規(guī)范
Css的命名是區(qū)分大小寫(xiě)的,建議全部使用小寫(xiě)。下面總結(jié)一下最好的命名準(zhǔn)則,好的命名不僅有利于維護(hù)人員閱讀對(duì)搜索搜索引擎優(yōu)化(seo)有很大的好處。其中對(duì)代碼的優(yōu)化是一個(gè)很關(guān)鍵的步驟。為了更加符合SEO的規(guī)范,下面是目前流行的CSS+DIV的命名規(guī)則,并做了些補(bǔ)充:
1.1. div+css命名規(guī)范
頁(yè)頭:header
登錄條:loginBar
標(biāo)志:logo
側(cè)欄:sideBar
廣告:banner
導(dǎo)航:nav
子導(dǎo)航:subNav
菜單:menu
子菜單:subMenu
搜索:search
滾動(dòng):scroll
頁(yè)面主體:main
內(nèi)容:content
標(biāo)簽頁(yè):tab
文章列表:list
提示信息:msg
小技巧:tips
欄目標(biāo)題:title
友情鏈接:friendLink
頁(yè)腳:footer
加入:joinus
指南:guild
服務(wù):service
熱點(diǎn):hot
新聞:news
下載:download
注冊(cè):regsiter
狀態(tài):status
按鈕:btn
投票:vote
合作伙伴:partner
版權(quán):copyRight產(chǎn)品管理
1.2. CSS的Id命名規(guī)范
外套:wrap
主導(dǎo)航:mainNav
子導(dǎo)航:subnav
頁(yè)腳:footer
整個(gè)頁(yè)面:content
頁(yè)眉:header
頁(yè)腳:footer
商標(biāo):label
標(biāo)題:title
主導(dǎo)航:mainNav(globalNav)
頂導(dǎo)航:topnav
邊導(dǎo)航:sidebar
左導(dǎo)航:leftsideBar
右導(dǎo)航:rightsideBar
旗志:logo
標(biāo)語(yǔ):banner
菜單內(nèi)容1:menu1Content
菜單容量:menuContainer
子菜單:submenu
邊導(dǎo)航圖標(biāo):sidebarIcon
注釋:note
面包屑:breadCrumb(即頁(yè)面所處位置導(dǎo)航提示)
容器:container
內(nèi)容:content
搜索:search
登陸:login
功能區(qū):shop(如購(gòu)物車(chē),收銀臺(tái))
當(dāng)前的:current
1.3. css樣式文件命名
主要的:master.css
布局版面:layout.css
專(zhuān)欄:columns.css
文字:font.css
打印樣式:print.css
主題:themes.css
通用:basic.css
上面的命名規(guī)范很直觀(guān),即使程序人員不添加注釋?zhuān)覀円矔?huì)很清楚的知道是什么意思。上面的命名幾乎涵蓋了所有的經(jīng)常使用到的樣式。
XHTML編碼基本規(guī)范
XHTML編碼基本規(guī)范
2.1 所有的標(biāo)記都必須要有一個(gè)相應(yīng)的結(jié)束標(biāo)記
XHTML要求有嚴(yán)謹(jǐn)?shù)慕Y(jié)構(gòu),所有標(biāo)簽必須關(guān)閉。如果是單獨(dú)不成對(duì)的標(biāo)簽,在標(biāo)簽最后加一 個(gè)"/"來(lái)關(guān)閉它。例如:
<img height="80" alt="網(wǎng)頁(yè)設(shè)計(jì)師" src="/uploadfile/200806/17/8C162625950.gif" width="200" />
2.2 所有標(biāo)簽的元素和屬性的名字都必須使用小寫(xiě)
與HTML不一樣,XHTML對(duì)大小寫(xiě)是敏感的,<title>和<TITLE>是不同的標(biāo)簽。XHTML要求所有的標(biāo)簽和屬性的名字都必須使用小寫(xiě)。例如:<BODY>必須寫(xiě)成<body> 。大小寫(xiě)夾雜也是不被認(rèn)可的。
2.3 所有的XHTML標(biāo)記都必須合理嵌套
同樣因?yàn)閄HTML要求有嚴(yán)謹(jǐn)?shù)慕Y(jié)構(gòu),因此所有的嵌套都必須按順序,以前我們這樣寫(xiě)的代碼:
<p><b></p>/b>必須修改為:<p><b></b>/p>
就是說(shuō),一層一層的嵌套必須是嚴(yán)格對(duì)稱(chēng)。
2.4 所有的屬性必須用引號(hào)""括起來(lái)
在HTML中,你可以不需要給屬性值加引號(hào),但是在XHTML中,它們必須被加引號(hào)。例如:
<height=80>必須修改為:<height="80">
特殊情況,你需要在屬性值里使用雙引號(hào),你可以用",單引號(hào)可以使用',例如:
<alt="say'hello'">
2.5 把所有<和&特殊符號(hào)用編碼表示
任何小于號(hào)(<),不是標(biāo)簽的一部分,都必須被編碼為< ;
任何大于號(hào)(>),不是標(biāo)簽的一部分,都必須被編碼為>
任何與號(hào)(&),不是實(shí)體的一部分的,都必須被編碼為&
2.6 給所有屬性賦一個(gè)值
XHTML規(guī)定所有屬性都必須有一個(gè)值,沒(méi)有值的就重復(fù)本身。例如:
<td nowrap> <input type="checkbox" name="shirt" value="medium" checked>
必須修改為:
<td nowrap="nowrap"> <input type="checkbox" name="shirt" value="medium" checked="checked">
2.7 不要在注釋內(nèi)容中使“–”
“–”只能發(fā)生在XHTML注釋的開(kāi)頭和結(jié)束,也就是說(shuō),在內(nèi)容中它們不再有效。例如下面的代碼是無(wú)效的:
<!–這里是注釋———–這里是注釋–>
用等號(hào)或者空格替換內(nèi)部的虛線(xiàn)。
<!–這里是注釋============這里是注釋–>
以上這些規(guī)范有的看上去比較奇怪,但這一切都是為了使我們的代碼有一個(gè)統(tǒng)一、唯一的標(biāo)準(zhǔn),便于以后的數(shù)據(jù)再利用。
2.8 引用樣式和腳本語(yǔ)言時(shí)type屬性不能省略
<script language="javascript" type="text/javascript">
注意:type="text/javascript"不能省略。
2.9 在頁(yè)面中寫(xiě)javascript方法時(shí)注意加上注釋符號(hào)。這樣就避免>,<,&&等一些特殊符號(hào)的報(bào)錯(cuò)
事例:
<script>和<style>標(biāo)記的內(nèi)容必須被包圍在CDATA段中。
例如:
<script type="text/javascript">
<![CDATA[
function func(a, b)
{
if (a < b)
return true;
}
]]> </script>
注意到上面的Script中有小于號(hào)(<)出現(xiàn),如果不將其包圍在CDATA段中,那么小于號(hào)(<)以及后面的內(nèi)容會(huì)
被誤認(rèn)為是另一個(gè)XHTML標(biāo)記的開(kāi)始,引起一些不必要的錯(cuò)誤。
需要注意的是IE認(rèn)為在<script>標(biāo)記中的CDATA段是不合法的,并會(huì)引發(fā)腳本錯(cuò)誤,這個(gè)問(wèn)題可以使用
JavaScript注釋來(lái)避免:
<script type="text/javascript">
/* <![CDATA[ */
function func(a, b)
{
if (a < b)
return true;
}
/* ]]> */
</script>
或者
<script type="text/javascript">
// <![CDATA[
function func(a, b)
{
if (a < b)
return true;
}
// ]]>
</script>
當(dāng)然,最好的方法是把腳本和CSS放置于單獨(dú)的文件中并在XHTML頁(yè)面中加上引用。
2.10 將所有的樣式放在style中
例:<td width="4"> </td> 這樣寫(xiě)不符合標(biāo)準(zhǔn)。
我們要這樣寫(xiě):<td style=”width:4px;”> </td>
2.11 樣式屬性最后一個(gè)后面一定要加上分號(hào)
2.12 使用id屬性,而不是name屬性。
在HTML中,name屬性可以用來(lái)標(biāo)識(shí)identify <a>, <applet>, <form>, <frame>, <iframe>, <img>和 <map>標(biāo)記。XHTML 1.0 Strict 和XHTML 1.1 standards已經(jīng)刪除了對(duì)name屬性的支持。我們應(yīng)該使用id唯一標(biāo)識(shí)一個(gè)頁(yè)面上的元素。ID不能重復(fù)。
2.13 屬性值中空格的處理。
屬性值中開(kāi)頭和結(jié)尾的所有空格將被忽略。屬性值中詞與詞之間的多個(gè)空格或換行符將被認(rèn)為成單個(gè)空格。例如
如下兩個(gè)屬性的值相同:
<input value="HTML is out" />
<input value=" HTML is
out " />
2.14 使用恰當(dāng)?shù)奈臋n類(lèi)型聲明和命名空間。
2.15 使用meta元素聲明你的內(nèi)容類(lèi)型。
2.16 使用img時(shí)要添加alt屬性,可設(shè)為空
2.17 使用img時(shí)align=absmiddle屬性在W3C驗(yàn)證下通不過(guò)
大家都知道,要想讓圖片和文字垂直居中對(duì)齊的話(huà),可以在IMG標(biāo)簽下添加align=absmiddle屬性即可實(shí)現(xiàn),但align=absmiddle屬性在W3C驗(yàn)證下通不過(guò)[驗(yàn)證地址請(qǐng)查看W3C網(wǎng)頁(yè)標(biāo)準(zhǔn)驗(yàn)證服務(wù)地址],那么是否可以用CSS來(lái)代替IMG的align=absmiddle屬性來(lái)實(shí)現(xiàn)垂直居中呢,答案是肯定的。
可以在CSS中加入vertical-align:middle;就能實(shí)現(xiàn)了
事例:
<div><img style="vertical-align:middle;" src="/uploadfile/png/IconBuffet/Redmond/close_32.png" />用CSS實(shí)現(xiàn)圖片和文字垂直居中對(duì)齊</div><br /><br />
<div><img src="/uploadfile/png/IconBuffet/Redmond/close_32.png" />這個(gè)是沒(méi)加樣式的效果</div><br /><br />
<div><img align=absmiddle src="/uploadfile/png/IconBuffet/Redmond/close_32.png" />這個(gè)是用align=absmiddle實(shí)現(xiàn)圖片和文字垂直居中對(duì)齊</div>
2.18 不建議使用過(guò)時(shí)屬性和標(biāo)簽
為了更好的處理網(wǎng)站的兼容性問(wèn)題,我建議不要使用過(guò)時(shí)標(biāo)簽和屬性
2.19 將VS2005的驗(yàn)證標(biāo)準(zhǔn)調(diào)整為XHTML1.0或更高版本
備注:
XHTML 1.0 Transitional WEB標(biāo)準(zhǔn)產(chǎn)生的問(wèn)題
曾經(jīng)流行一時(shí)的HTML標(biāo)記語(yǔ)言已經(jīng)被官方認(rèn)為過(guò)時(shí)了,將要接任它的是XHTML(http://www.w3.org/MarkUp/)。如果你的網(wǎng)站按照較嚴(yán)格的XHTML規(guī)則書(shū)寫(xiě),那么這個(gè)網(wǎng)站將在不同的瀏覽器中保持一致的樣式。并且你可以認(rèn)為在未來(lái)瀏覽器的版本升級(jí)變化中仍然保證網(wǎng)站外觀(guān)的一致性。同樣你也會(huì)得到跨瀏覽器,跨設(shè)備以及跨平臺(tái)的一致性支持。
XHTML有如下兩個(gè)主要目標(biāo):
· 將文檔的結(jié)構(gòu)(使用XHTML標(biāo)記語(yǔ)言)和表現(xiàn)(使用CSS)分開(kāi)
· 將HTML作為一種XML書(shū)寫(xiě)
對(duì)于第一個(gè)目標(biāo),W3C刪除了一些HTML的標(biāo)記以及屬性,例如<font>和bgcolor,因?yàn)檫@些標(biāo)記或?qū)傩圆⒉皇俏臋n結(jié)構(gòu)中的一部分,而只是用來(lái)描述文檔應(yīng)該如何被顯示,因此應(yīng)該定義在CSS文件中而不是HTML中。同樣,某些特定的標(biāo)記內(nèi)容并不一定要顯示成特定的樣子。比如,<h1>標(biāo)記里內(nèi)容顯示的字號(hào)完全可能小于<p>里的內(nèi)容,這些取決于CSS中的定義。當(dāng)然,<h1>一般用于顯示一篇文檔的標(biāo)題信息,它的重要程度一般也應(yīng)該高于<p>中的內(nèi)容,所以通常的瀏覽器都會(huì)以一個(gè)較大的字號(hào)來(lái)顯示。
對(duì)于第二個(gè)目標(biāo),XHTML將嚴(yán)格遵守XML的嚴(yán)格語(yǔ)法??梢哉f(shuō)XHTML是HTML依照XML語(yǔ)法重構(gòu)的結(jié)果。換句話(huà)說(shuō),當(dāng)你編寫(xiě)XHTML文檔的時(shí)候,其實(shí)是在編寫(xiě)一份特化了的XML文檔。XML文檔有著比HTML嚴(yán)格多了的語(yǔ)法,這些將在本文稍后部分討論。
XHTML有三個(gè)版本:
· XHTML 1.0 Transitional
· XHTML 1.0 Strict
· XHTML 1.0 Frameset
XHTML 1.0 Transitional包含HTML4.01的所有標(biāo)記以及屬性,是一種不是那么嚴(yán)格的XHTML,目的是使現(xiàn)有的HTML開(kāi)發(fā)者更容易的接受并使用XHTML。
XHTML 1.0 Strict就是嚴(yán)格版本的XHTML了,開(kāi)發(fā)者必須要嚴(yán)格遵守文檔的結(jié)構(gòu)與表現(xiàn)分開(kāi)的規(guī)則,也就是說(shuō)需要用CSS控制頁(yè)面的顯示而不是使用<font>,bgcolor之類(lèi)的標(biāo)記或?qū)傩浴?
XHTML 1.0 Frameset用于把文檔分割成幾個(gè)楨以顯示不同的內(nèi)容。(XHTML 1.0 Transitional和Strict 頁(yè)面不允許包含<frameset> 標(biāo)記)。
這里不再贅述更多有關(guān)XHTML的介紹,如果感興趣,可以使用Google或者M(jìn)SN Search找到很多相關(guān)資料或是詳細(xì)介紹。也歡迎在本貼下留下您的評(píng)論與問(wèn)題,讓我們共同探討。接下來(lái)是一些書(shū)寫(xiě)XHTML的基本規(guī)則。
參考網(wǎng)址:http://www.cnblogs.com/plain-heart/archive/2008/04/17/1158909.html
http://www.chinaz.com/Design/Pages/10091JN2007.html
推薦網(wǎng)頁(yè)制作規(guī)范
推薦網(wǎng)頁(yè)制作規(guī)范
3.1 命名規(guī)范
文件命名的原則:
以最少的字母達(dá)到最容易理解的意義。
一般文件及目錄命名規(guī)范:
每一個(gè)目錄中應(yīng)該包含一個(gè)缺省的html 文件,文件名統(tǒng)一用index.htm 文件名稱(chēng)統(tǒng)一用小寫(xiě)的英文字母、數(shù)字和下劃線(xiàn)的組合 盡量按單詞的英語(yǔ)翻譯為名稱(chēng)。例如:feedback(信息反饋),aboutus(關(guān)于我們) 多個(gè)同類(lèi)型文件使用英文字母加數(shù)字命名,字母和數(shù)字之間用_分隔。例如:news_01.htm。注意,數(shù)字位數(shù)與文件個(gè)數(shù)成正比,不夠的用0補(bǔ)齊。例如共有200條新聞,其中第18條命名為news_018.htm
圖片的命名規(guī)范 :
名稱(chēng)分為頭尾兩兩部分,用下劃線(xiàn)隔開(kāi)。
頭部分表示此圖片的大類(lèi)性質(zhì)。例如: 放置在頁(yè)面頂部的廣告、裝飾圖案等長(zhǎng)方形的圖片我們?nèi)∶篵anner ;標(biāo)志性的圖片我們?nèi)∶麨椋簂ogo ;在頁(yè)面上位置不固定并且?guī)в墟溄拥男D片我們?nèi)∶麨閎utton ;在頁(yè)面上某一個(gè)位置連續(xù)出現(xiàn),性質(zhì)相同的鏈接欄目的圖片我們?nèi)∶簃enu ;裝飾用的照片我們?nèi)∶簆ic ;不帶鏈接表示標(biāo)題的圖片我們?nèi)∶簍itle 依照此原則類(lèi)推。 尾部分用來(lái)表示圖片的具體含義,用英文字母表示。例如:banner_sohu.gif banner_sina.gif menu_aboutus.gif menu_job.gif title_news.gif logo_police.gif logo_national.gif pic_people.jpg pic_hill.jpg.
有onmouse效果的圖片,兩張分別在原有文件名后加"_on"和"_off"命名。
其它文件命名規(guī)范:
js的命名原則以功能的英語(yǔ)單詞為名。例如:廣告條的js文件名為:ad.js
所有的CGI文件后綴為cgi。所有CGI程序的配置文件為config.cgi
3.2 目錄結(jié)構(gòu)規(guī)范
目錄建立的原則:以最少的層次提供最清晰簡(jiǎn)便的訪(fǎng)問(wèn)結(jié)構(gòu)。
目錄的命名以小寫(xiě)英文字母,下劃線(xiàn)組成。(參照命名規(guī)范)
根目錄一般只存放index.htm以及其他必須的系統(tǒng)文件
每個(gè)主要欄目開(kāi)設(shè)一個(gè)相應(yīng)的獨(dú)立目錄
根目錄下的images用于存放各頁(yè)面都要使用的公用圖片,子目錄下的images目錄存放本欄目頁(yè)面使用的私有圖片
所有JS腳本存放在根目錄下的scripts目錄
所有CSS文件存放在根目錄下App_theme目錄
所有flash, avi, ram, quicktime 等多媒體文件存放在根目錄下的media目錄
Css常用優(yōu)化技巧
CSS常用優(yōu)化技巧
4.1.使用css縮寫(xiě)
使用縮寫(xiě)可以幫助減少你CSS文件的大小,更加容易閱讀。css縮寫(xiě)的主要規(guī)則請(qǐng)參看《常用css縮寫(xiě)語(yǔ)法總結(jié)》,這里就不展開(kāi)描述。
參考網(wǎng)址:http://homepage.yesky.com/97/7643097.shtml
4.2.明確定義單位,除非值為0
忘記定義尺寸的單位是CSS新手普遍的錯(cuò)誤。在HTML中你可以只寫(xiě)width=100,但是在CSS中,你必須給一個(gè)準(zhǔn)確的單位,比如:width:100px width:100em。只有兩個(gè)例外情況可以不定義單位:行高和0值。除此以外,其他值都必須緊跟單位,注意,不要在數(shù)值和單位之間加空格。
4.3.區(qū)分大小寫(xiě)
當(dāng)在XHTML中使用CSS,CSS里定義的元素名稱(chēng)是區(qū)分大小寫(xiě)的。為了避免這種錯(cuò)誤,我建議所有的定義名稱(chēng)都采用小寫(xiě)。
class和id的值在HTML和XHTML中也是區(qū)分大小寫(xiě)的,如果你一定要大小寫(xiě)混合寫(xiě),請(qǐng)仔細(xì)確認(rèn)你在CSS的定義和XHTML里的標(biāo)簽是一致的。
4.4.取消class和id前的元素限定
當(dāng)你寫(xiě)給一個(gè)元素定義class或者id,你可以省略前面的元素限定,因?yàn)镮D在一個(gè)頁(yè)面里是唯一的, class可以在頁(yè)面中多次使用。你限定某個(gè)元素毫無(wú)意義。例如:
div#content { /* declarations */ }
fieldset.details { /* declarations */ }
可以寫(xiě)成
#content { /* declarations */ }
.details { /* declarations */ }
這樣可以節(jié)省一些字節(jié)。
4.5.默認(rèn)值
通常padding的默認(rèn)值為0,background-color的默認(rèn)值是transparent。但是在不同的瀏覽器默認(rèn)值可能不同。如果怕有沖突,可以在樣式表一開(kāi)始就先定義所有元素的margin和padding值都為0,象這樣:
* {
margin:0;
padding:0;
}
4.6.不需要重復(fù)定義可繼承的值
CSS中,子元素自動(dòng)繼承父元素的屬性值,象顏色、字體等,已經(jīng)在父元素中定義過(guò)的,在子元素中可以直接繼承,不需要重復(fù)定義。但是要注意,瀏覽器可能用一些默認(rèn)值覆蓋你的定義。
4.7.最近優(yōu)先原則
如果對(duì)同一個(gè)元素的定義有多種,以最接近(最小一級(jí))的定義為最優(yōu)先,例如有這么一段代碼
Update: Lorem ipsum dolor set
在CSS文件中,你已經(jīng)定義了元素p,又定義了一個(gè)class update
p {
margin:1em 0;
font-size:1em;
color:#333;
}
.update {
font-weight:bold;
color:#600;
}
這兩個(gè)定義中,class=update將被使用,因?yàn)閏lass比p更近。你可以查閱W3C的《 Calculating a selector’s specificity》 了解更多。
4.8.多重class定義
一個(gè)標(biāo)簽可以同時(shí)定義多個(gè)class。例如:我們先定義兩個(gè)樣式,第一個(gè)樣式背景為#666;第二個(gè)樣式有10 px的邊框。
.one{width:200px;background:#666;}
.two{border:10px solid #F00;}
在頁(yè)面代碼中,我們可以這樣調(diào)用
<div class=”one two”></div>
這樣最終的顯示效果是這個(gè)div既有#666的背景,也有10px的邊框。是的,這樣做是可以的,你可以嘗試一下。
4.9.使用子選擇器(descendant selectors)
CSS初學(xué)者不知道使用子選擇器是影響他們效率的原因之一。子選擇器可以幫助你節(jié)約大量的class定義。我們來(lái)看下面這段代碼:
<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更加簡(jiǎn)潔、更加容易閱讀。
4.10.不需要給背景圖片路徑加引號(hào)
為了節(jié)省字節(jié),我建議不要給背景圖片路徑加引號(hào),因?yàn)橐?hào)不是必須的。例如:
background:url(images/***.gif) #333;
可以寫(xiě)為
background:url(images/***.gif) #333;
如果你加了引號(hào),反而會(huì)引起一些瀏覽器的錯(cuò)誤。
4.11.組選擇器(Group selectors)
當(dāng)一些元素類(lèi)型、class或者id都有共同的一些屬性,你就可以使用組選擇器來(lái)避免多次的重復(fù)定義。這可以節(jié)省不少字節(jié)。
例如:定義所有標(biāo)題的字體、顏色和margin,你可以這樣寫(xiě):
h1,h2,h3,h4,h5,h6 {
font-family:Lucida Grande,Lucida,Arial,Helvetica,sans-serif;
color:#333;
margin:1em 0;
}
如果在使用時(shí),有個(gè)別元素需要定義獨(dú)立樣式,你可以再加上新的定義,可以覆蓋老的定義,例如:
h1 { font-size:2em; }
h2 { font-size:1.6em; }
4.12.用正確的順序指定鏈接的樣式
當(dāng)你用CSS來(lái)定義鏈接的多個(gè)狀態(tài)樣式時(shí),要注意它們書(shū)寫(xiě)的順序,正確的順序是::link :visited :hover :active。抽取第一個(gè)字母是LVHA,你可以記憶成LoVe HAte(喜歡討厭)。為什么這么定義,可以參考Eric Meyer的《Link Specificity》。
如果你的用戶(hù)需要用鍵盤(pán)來(lái)控制,需要知道當(dāng)前鏈接的焦點(diǎn),你還可以定義:focus屬性。:focus屬性的效果也取決與你書(shū)寫(xiě)的位置,如果你希望聚焦元素顯示:hover效果,你就把:focus寫(xiě)在:hover前面;如果你希望聚焦效果替代:hover效果,你就把:focus放在:hover后面。
4.13.清除浮動(dòng)
一個(gè)非常常見(jiàn)的CSS問(wèn)題,定位使用浮動(dòng)的時(shí)候,下面的層被浮動(dòng)的層所覆蓋,或者層里嵌套的子層超出了外層的范圍。
通常的解決辦法是在浮動(dòng)層后面添加一個(gè)額外元素,例如一個(gè)div或者一個(gè)br,并且定義它的樣式為clear: both。
4.14.橫向居中(centering)
這是一個(gè)簡(jiǎn)單的技巧,但是值得再說(shuō)一遍,因?yàn)槲铱匆?jiàn)太多的新手問(wèn)題都是問(wèn)這個(gè):CSS如何橫向居中?你需要定義元素的寬,并且定義橫向的margin,如果你的布局包含在一個(gè)層(容器)中,就象這樣:
<!-- 你的布局這里開(kāi)始 -->
你可以這樣定義使它橫向居中:
#wrap {
width:760px; /* 修改為你的層的寬度 */
margin:0 auto;
}
但是IE5/Win不能正確顯示這個(gè)定義,我們采用一個(gè)非常有用的技巧來(lái)解決:用text-align屬性。就象這樣:
body {
text-align:center;
}
#wrap {
width:760px; /* 修改為你的層的寬度 */
margin:0 auto;
text-align:left;
}
第一個(gè)body的text-align:center; 規(guī)則定義IE5/Win中body的所有元素居中(其他瀏覽器只是將文字居中) ,第二個(gè)text-align:left;是將#warp中的文字居左。
4.15.導(dǎo)入(Import)和隱藏CSS
因?yàn)槔习姹緸g覽器不支持CSS,一個(gè)通常的做法是使用@import技巧來(lái)把CSS隱藏起來(lái)。例如:
@import url(main.css);
然而,這個(gè)方法對(duì)IE4不起作用,這讓我很是頭疼了一陣子。后來(lái)我用這樣的寫(xiě)法:
@import main.css;
4.16.針對(duì)IE的優(yōu)化
有些時(shí)候,你需要對(duì)IE瀏覽器的bug定義一些特別的規(guī)則,這里有太多的CSS技巧(Hacks),我只使用其中的兩種方法,不管微軟在即將發(fā)布的IE7 beta版里是否更好的支持CSS,這兩種方法都是最安全的。
1.注釋的方法
(a)在IE中隱藏一個(gè)CSS定義,你可以使用子選擇器(child selector):
html>body p {
/* 定義內(nèi)容 */
}
(b)下面這個(gè)寫(xiě)法只有IE瀏覽器可以理解(對(duì)其他瀏覽器都隱藏)
* html p {
/* declarations */
}
(c)還有些時(shí)候,你希望IE/Win有效而IE/Mac隱藏,你可以使用反斜線(xiàn)技巧:
/* */
* html p {
declarations
}
/* */
2.條件注釋(conditional comments)的方法
另外一種方法,我認(rèn)為比CSS Hacks更加經(jīng)得起考驗(yàn)就是采用微軟的私有屬性條件注釋(conditional comments)。用這個(gè)方法你可以給IE單獨(dú)定義一些樣式,而不影響主樣式表的定義。就象這樣:
<!--[if IE]>
<link rel=stylesheet type=text/css href=ie.css />
<![endif]-->
4.17.調(diào)試技巧:層有多大?
當(dāng)調(diào)試CSS發(fā)生錯(cuò)誤,你就要象排版工人,逐行分析CSS代碼。我通常在出問(wèn)題的層上定義一個(gè)背景顏色,這樣就能很明顯看到層占據(jù)多大空間。有些人建議用 border,一般情況也是可以的,但問(wèn)題是,有時(shí)候border 會(huì)增加元素的尺寸,border-top和boeder-bottom會(huì)破壞縱向margin的值,所以使用background更加安全些。
另外一個(gè)經(jīng)常出問(wèn)題的屬性是outline。outline看起來(lái)象boeder,但不會(huì)影響元素的尺寸或者位置。只有少數(shù)瀏覽器支持outline屬性,我所知道的只有Safari、OmniWeb、和Opera。
4.18.CSS代碼書(shū)寫(xiě)樣式
在寫(xiě)CSS代碼的時(shí)候,對(duì)于縮進(jìn)、斷行、空格,每個(gè)人有每個(gè)人的書(shū)寫(xiě)習(xí)慣。在經(jīng)過(guò)不斷實(shí)踐后,我決定采用下面這樣的書(shū)寫(xiě)樣式:
selector1,
selector2 {
property:value;
}
當(dāng)使用聯(lián)合定義時(shí),我通常將每個(gè)選擇器單獨(dú)寫(xiě)一行,這樣方便在CSS文件中找到它們。在最后一個(gè)選擇器和大括號(hào){之間加一個(gè)空格,每個(gè)定義也單獨(dú)寫(xiě)一行,分號(hào)直接在屬性值后,不要加空格。
我習(xí)慣在每個(gè)屬性值后面都加分號(hào),雖然規(guī)則上允許最后一個(gè)屬性值后面可以不寫(xiě)分號(hào),但是如果你要加新樣式時(shí)容易忘記補(bǔ)上分號(hào)而產(chǎn)生錯(cuò)誤,所以還是都加比較好。
最后,關(guān)閉的大括號(hào)}單獨(dú)寫(xiě)一行。
空格和換行有助與閱讀。
推薦閱讀:
http://www.dbjr.com.cn/article/15758.htm
http://portal.oss.org.tw/files/95/a/a6.pdf
http://en.wikipedia.org/wiki/XHTML
http://www.w3.org/TR/2000/REC-xhtml1-20000126/
http://www.dreamdu.com/xhtml/function_xhtml11/
Css瀏覽器兼容性問(wèn)題總結(jié)
CSS對(duì)瀏覽器的兼容性總結(jié)
CSS對(duì)瀏覽器的兼容性有時(shí)讓人很頭疼,或許當(dāng)你了解當(dāng)中的技巧跟原理,就會(huì)覺(jué)得也不是難事,從網(wǎng)上收集了IE7,6與Fireofx的兼容性處理方法并整理了一下.對(duì)于web2.0的過(guò)度,請(qǐng)盡量用xhtml格式寫(xiě)代碼,而且DOCTYPE 影響 CSS 處理,作為W3C的標(biāo)準(zhǔn),一定要加 DOCTYPE聲名. 以下為我們工作中經(jīng)常用到的或是遇到的問(wèn)題。
CSS技巧
5.1.div的垂直居中問(wèn)題
vertical-align:middle; 將行距增加到和整個(gè)DIV一樣高 line-height:200px; 然后插入文字,就垂直居中了。缺點(diǎn)是要控制內(nèi)容不要換行
5.2.margin加倍的問(wèn)題
設(shè)置為float的div在ie下設(shè)置的margin會(huì)加倍。這是一個(gè)ie6都存在的bug。解決方案是在這個(gè)div里面加上display:inline;
例如: <#div id=”imfloat”> 相應(yīng)的css為 #IamFloat{ float:left; margin:5px;/*IE下理解為10px*/ display:inline;/*IE下再理解為5px*/}
5.3.浮動(dòng)ie產(chǎn)生的雙倍距離
#box{ float:left; width:100px; margin:0 0 0 100px; //這種情況之下IE會(huì)產(chǎn)生200px的距離 display:inline; //使浮動(dòng)忽略} 這里細(xì)說(shuō)一下block與inline兩個(gè)元素:block元素的特點(diǎn)是,總是在新行上開(kāi)始,高度,寬度,行高,邊距都可以控制(塊元素);Inline元素的特點(diǎn)是,和其他元素在同一行上,不可控制(內(nèi)嵌元素); #box{ display:block; //可以為內(nèi)嵌元素模擬為塊元素 display:inline; //實(shí)現(xiàn)同一行排列的效果 diplay:table;
5.4.IE與寬度和高度的問(wèn)題
IE 不認(rèn)得min-這個(gè)定義,但實(shí)際上它把正常的width和height當(dāng)作有min的情況來(lái)使。這樣問(wèn)題就大了,如果只用寬度和高度,正常的瀏覽器里這兩個(gè)值就不會(huì)變,如果只用min-width和min-height的話(huà),IE下面根本等于沒(méi)有設(shè)置寬度和高度。 比如要設(shè)置背景圖片,這個(gè)寬度是比較重要的。要解決這個(gè)問(wèn)題,可以這樣: #box{ width: 80px; height: 35px;}html>body #box{ width: auto; height: auto; min-width: 80px; min-height: 35px;}
5.5.頁(yè)面的最小寬度
min -width是個(gè)非常方便的CSS命令,它可以指定元素最小也不能小于某個(gè)寬度,這樣就能保證排版一直正確。但I(xiàn)E不認(rèn)得這個(gè),而它實(shí)際上把width當(dāng)做最小寬度來(lái)使。為了讓這一命令在IE上也能用,可以把一個(gè)<div> 放到 <body> 標(biāo)簽下,然后為div指定一個(gè)類(lèi), 然后CSS這樣設(shè)計(jì): #container{ min-width: 600px; width:expression(document.body.clientWidth < 600? "600px": "auto" );} 第一個(gè)min-width是正常的;但第2行的width使用了Javascript,這只有IE才認(rèn)得,這也會(huì)讓你的HTML文檔不太正規(guī)。它實(shí)際上通過(guò)Javascript的判斷來(lái)實(shí)現(xiàn)最小寬度。
5.6.DIV浮動(dòng)IE文本產(chǎn)生3象素的bug
左邊對(duì)象浮動(dòng),右邊采用外補(bǔ)丁的左邊距來(lái)定位,右邊對(duì)象內(nèi)的文本會(huì)離左邊有3px的間距. #box{ float:left; width:800px;} #left{ float:left; width:50%;} #right{ width:50%;} *html #left{ margin-right:-3px; //這句是關(guān)鍵} <div id="box"> <div id="left"></div> <div id="right"></div> </div>
5.7.IE捉迷藏的問(wèn)題
當(dāng)div應(yīng)用復(fù)雜的時(shí)候每個(gè)欄中又有一些鏈接,DIV等這個(gè)時(shí)候容易發(fā)生捉迷藏的問(wèn)題。 有些內(nèi)容顯示不出來(lái),當(dāng)鼠標(biāo)選擇這個(gè)區(qū)域是發(fā)現(xiàn)內(nèi)容確實(shí)在頁(yè)面。 解決辦法:對(duì)#layout使用line-height屬性 或者給#layout使用固定高和寬。頁(yè)面結(jié)構(gòu)盡量簡(jiǎn)單。
5.8.float的div閉合;清除浮動(dòng);自適應(yīng)高度;
① 例如:<#div id=”floatA” ><#div id=”floatB” ><#div id=” NOTfloatC” >這里的NOTfloatC并不希望繼續(xù)平移,而是希望往下排。(其中floatA、floatB的屬性已經(jīng)設(shè)置為 float:left;) 這段代碼在IE中毫無(wú)問(wèn)題,問(wèn)題出在FF。原因是NOTfloatC并非float標(biāo)簽,必須將float標(biāo)簽閉合。在 <#div class=”floatB”> <#div class=”NOTfloatC”>之間加上 < #div class=”clear”>這個(gè)div一定要注意位置,而且必須與兩個(gè)具有float屬性的div同級(jí),之間不能存在嵌套關(guān)系,否則會(huì)產(chǎn)生異常。 并且將clear這種樣式定義為為如下即可: .clear{ clear:both;}
②作為外部 wrapper 的 div 不要定死高度,為了讓高度能自動(dòng)適應(yīng),要在wrapper里面加上overflow:hidden; 當(dāng)包含float的 box的時(shí)候,高度自動(dòng)適應(yīng)在IE下無(wú)效,這時(shí)候應(yīng)該觸發(fā)IE的layout私有屬性(萬(wàn)惡的IE?。?用zoom:1;可以做到,這樣就達(dá)到了兼容。 例如某一個(gè)wrapper如下定義: .colwrapper{ overflow:hidden; zoom:1; margin:5px auto;}
③對(duì)于排版,我們用得最多的css描述可能就是float:left.有的時(shí)候我們需要在n欄的float div后面做一個(gè)統(tǒng)一的背景,譬如: <div id=”page”> <div id=”left”></div> <div id=”center”></div> <div id=”right”></div> </div> 比如我們要將page的背景設(shè)置成藍(lán)色,以達(dá)到所有三欄的背景顏色是藍(lán)色的目的,但是我們會(huì)發(fā)現(xiàn)隨著left center right的向下拉長(zhǎng),而 page居然保存高度不變,問(wèn)題來(lái)了,原因在于page不是float屬性,而我們的page由于要居中,不能設(shè)置成float,所以我們應(yīng)該這樣解決 <div id=”page”> <div id=”bg” style=”float:left;width:100%”> <div id=”left”></div> <div id=”center”></div> <div id=”right”></div> </div> </div> 再嵌入一個(gè)float left而寬度是100%的DIV解決之
④萬(wàn)能float 閉合(非常重要!) 關(guān)于 clear float 的原理可參見(jiàn) [How To Clear Floats Without Structural Markup],將以下代碼加入Global CSS 中,給需要閉合的div加上 class="clearfix" 即可,屢試不爽. /* Clear Fix */ .clearfix:after { content:"."; display:block; height:0; clear:both; visibility:hidden; } .clearfix { display:inline-block; } /* Hide from IE Mac */ .clearfix {display:block;} /* End hide from IE Mac */ /* end of clearfix */ 或者這樣設(shè)置:.hackbox{ display:table; //將對(duì)象作為塊元素級(jí)的表格顯示}
5.9.高度不適應(yīng)
高度不適應(yīng)是當(dāng)內(nèi)層對(duì)象的高度發(fā)生變化時(shí)外層高度不能自動(dòng)進(jìn)行調(diào)節(jié),特別是當(dāng)內(nèi)層對(duì)象使用margin 或paddign 時(shí)。 例: #box {background-color:#eee; } #box p {margin-top: 20px;margin-bottom: 20px; text-align:center; } <div id="box"> <p>p對(duì)象中的內(nèi)容</p> </div> 解決方法:在P對(duì)象上下各加2個(gè)空的div對(duì)象CSS代碼:.1{height:0px;overflow:hidden;}或者為DIV加上border屬性。
5.10 .IE6下為什么圖片下有空隙產(chǎn)生
解決這個(gè)BUG的方法也有很多,可以是改變html的排版,或者設(shè)置img 為display:block 或者設(shè)置vertical-align 屬性為 vertical-align:top | bottom |middle |text-bottom 都可以解決.
5.11.如何對(duì)齊文本與文本輸入框
加上 vertical-align:middle; <style type="text/css"> <!-- input { width:200px; height:30px; border:1px solid red; vertical-align:middle; } --> </style>
5.12.web標(biāo)準(zhǔn)中定義id與class有什么區(qū)別嗎
web標(biāo)準(zhǔn)中是不容許重復(fù)ID的,比如 div id="aa" 不容許重復(fù)2次,而class 定義的是類(lèi),理論上可以無(wú)限重復(fù), 這樣需要多次引用的定義便可以使用他.
屬性的優(yōu)先級(jí)問(wèn)題 ID 的優(yōu)先級(jí)要高于class,看上面的例子 三.方便JS等客戶(hù)端腳本,如果在頁(yè)面中要對(duì)某個(gè)對(duì)象進(jìn)行腳本操作,那么可以給他定義一個(gè)ID,否則只能利用遍歷頁(yè)面元素加上指定特定屬性來(lái)找到它,這是相對(duì)浪費(fèi)時(shí)間資源,遠(yuǎn)遠(yuǎn)不如一個(gè)ID來(lái)得簡(jiǎn)單.
5.13. LI中內(nèi)容超過(guò)長(zhǎng)度后以省略號(hào)顯示的方法
此方法適用與IE與OP瀏覽器 <style type="text/css"> <!-- li { width:200px; white-space:nowrap; text-overflow:ellipsis; -o-text-overflow:ellipsis; overflow: hidden; } --> </style>
5.14.為什么web標(biāo)準(zhǔn)中IE無(wú)法設(shè)置滾動(dòng)條顏色了
解決辦法是將body換成html <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> <meta http-equiv="Content-Type" content="text/html; charset=gb2312" /> <style type="text/css"> <!-- html { scrollbar-face-color:#f6f6f6; scrollbar-highlight-color:#fff; scrollbar-shadow-color:#eeeeee; scrollbar-3dlight-color:#eeeeee; scrollbar-arrow-color:#000; scrollbar-track-color:#fff; scrollbar-darkshadow-color:#fff; } --> </style>
5.15.為什么無(wú)法定義1px左右高度的容器
IE6下這個(gè)問(wèn)題是因?yàn)槟J(rèn)的行高造成的,解決的方法也有很多,例如:overflow:hidden | zoom:0.08 | line-height:1px
5.16.怎么樣才能讓層顯示在FLASH之上呢
解決的辦法是給FLASH設(shè)置透明 <param name="wmode" value="transparent" />
5.17.怎樣使一個(gè)層垂直居中于瀏覽器中
這里我們使用百分比絕對(duì)定位,與外補(bǔ)丁負(fù)值的方法,負(fù)值的大小為其自身寬度高度除以二
<style type="text/css">
<!—
div
{
position:absolute;
top:50%;
lef:50%;
margin:-100px 0 0 -100px;
width:200px;
height:200px;
border:1px solid red;
}
-->
</style>
5.18.兼容各瀏覽器中最小高度
<!--
#mrjin {
background:#ccc;
min-height:100px;
height:auto !important;
height:100px;
overflow:visible;
}
-->
5.18. IE6下默認(rèn)的字體尺寸大致在 12 - 14px 之間的問(wèn)題
IE6下默認(rèn)的字體尺寸大致在 12 - 14px 之間,當(dāng)你試圖定義一個(gè)高度小于這個(gè)默認(rèn)值的 div 的時(shí)候, IE 會(huì)固執(zhí)的認(rèn)為這個(gè)層的高度不應(yīng)該小于字體的行高。所以即使你用 height:4px; 來(lái)定義了一個(gè) div 的高度,實(shí)際在 IE 下顯示的仍然是一個(gè) 12 px 左右高度的層。添加overflow: hidden解決問(wèn)題。
<div style=”height: 4px; overflow: hidden;”></div>
FF與IE
1.Div居中問(wèn)題 div設(shè)置 margin-left, margin-right 為 auto 時(shí)已經(jīng)居中,IE 不行,IE需要設(shè)定body居中,首先在父級(jí)元素定義text-algin: center;這個(gè)的意思就是在父級(jí)元素內(nèi)的內(nèi)容居中。
2.鏈接(a標(biāo)簽)的邊框與背景 a 鏈接加邊框和背景色,需設(shè)置 display: block, 同時(shí)設(shè)置 float: left 保證不換行。參照 menubar, 給 a 和 menubar 設(shè)置高度是為了避免底邊顯示錯(cuò)位, 若不設(shè) height, 可以在 menubar 中插入一個(gè)空格。
3.超鏈接訪(fǎng)問(wèn)過(guò)后hover樣式就不出現(xiàn)的問(wèn)題 被點(diǎn)擊訪(fǎng)問(wèn)過(guò)的超鏈接樣式不在具有hover和active了,很多人應(yīng)該都遇到過(guò)這個(gè)問(wèn)題,解決方法是改變CSS屬性的排列順序: L-V-H-A Code: <style type="text/css"> <!-- a:link {} a:visited {} a:hover {} a:active {} --> </style>
4. 游標(biāo)手指cursor cursor: pointer 可以同時(shí)在 IE FF 中顯示游標(biāo)手指狀, hand 僅 IE 可以
5.UL的padding與margin ul標(biāo)簽在FF中默認(rèn)是有padding值的,而在IE中只有margin默認(rèn)有值,所以先定義 ul{margin:0;padding:0;}就能解決大部分問(wèn)題
6. FORM標(biāo)簽 這個(gè)標(biāo)簽在IE中,將會(huì)自動(dòng)margin一些邊距,而在FF中margin則是0,因此,如果想顯示一致,所以最好在css中指定margin和 padding,針對(duì)上面兩個(gè)問(wèn)題,我的css中一般首先都使用這樣的樣式ul,form{margin:0;padding:0;}給定義死了,所以后面就不會(huì)為這個(gè)頭疼了.
7. BOX模型解釋不一致問(wèn)題 在FF和IE 中的BOX模型解釋不一致導(dǎo)致相差2px解決方法:div{margin:30px!important;margin:28px;} 注意這兩個(gè) margin的順序一定不能寫(xiě)反, important這個(gè)屬性IE不能識(shí)別,但別的瀏覽器可以識(shí)別。所以在IE下其實(shí)解釋成這樣: div {maring:30px;margin:28px}重復(fù)定義的話(huà)按照最后一個(gè)來(lái)執(zhí)行,所以不可以只寫(xiě)margin:xx px!important; #box{ width:600px; //for ie6.0- w\idth:500px; //for ff+ie6.0} #box{ width:600px!important //for ff width:600px; //for ff+ie6.0 width /**/:500px; //for ie6.0-}
8.屬性選擇器(這個(gè)不能算是兼容,是隱藏css的一個(gè)bug) p[id]{}div[id]{} 這個(gè)對(duì)于IE6.0和IE6.0以下的版本都隱藏,FF和OPera作用.屬性選擇器和子選擇器還是有區(qū)別的,子選擇器的范圍從形式來(lái)說(shuō)縮小了,屬性選擇器的范圍比較大,如p[id]中,所有p標(biāo)簽中有id的都是同樣式的.
9.最狠的手段 - !important; 如果實(shí)在沒(méi)有辦法解決一些細(xì)節(jié)問(wèn)題,可以用這個(gè)方法.FF對(duì)于”!important”會(huì)自動(dòng)優(yōu)先解析,然而IE則會(huì)忽略.如下 .tabd1{ background:url(/res/images/up/tab1.gif) no-repeat 0px 0px !important; /*Style for FF*/ background:url(/res/images/up/tab1.gif) no-repeat 1px 0px; /* Style for IE */} 值得注意的是,一定要將xxxx !important 這句放置在另一句之上,上面已經(jīng)提過(guò)
10.IE,FF的默認(rèn)值問(wèn)題 或許你一直在抱怨為什么要專(zhuān)門(mén)為IE和FF寫(xiě)不同的CSS,為什么IE這樣讓人頭疼,然后一邊寫(xiě)css,一邊咒罵那個(gè)可惡的M$ IE.其實(shí)對(duì)于css的標(biāo)準(zhǔn)支持方面,IE并沒(méi)有我們想象的那么可惡,關(guān)鍵在于IE和FF的默認(rèn)值不一樣而已,掌握了這個(gè)技巧,你會(huì)發(fā)現(xiàn)寫(xiě)出兼容FF和IE的css并不是那么困難,或許對(duì)于簡(jiǎn)單的css,你完全可以不用”!important”這個(gè)東西了。 我們都知道,瀏覽器在顯示網(wǎng)頁(yè)的時(shí)候,都會(huì)根據(jù)網(wǎng)頁(yè)的 css樣式表來(lái)決定如何顯示,但是我們?cè)跇邮奖碇形幢貢?huì)將所有的元素都進(jìn)行了具體的描述,當(dāng)然也沒(méi)有必要那么做,所以對(duì)于那些沒(méi)有描述的屬性,瀏覽器將采用內(nèi)置默認(rèn)的方式來(lái)進(jìn)行顯示,譬如文字,如果你沒(méi)有在css中指定顏色,那么瀏覽器將采用黑色或者系統(tǒng)顏色來(lái)顯示,div或者其他元素的背景,如果在 css中沒(méi)有被指定,瀏覽器則將其設(shè)置為白色或者透明,等等其他未定義的樣式均如此。所以有很多東西出現(xiàn)FF和IE顯示不一樣的根本原因在于它們的默認(rèn)顯示不一樣,而這個(gè)默認(rèn)樣式該如何顯示我知道在w3中有沒(méi)有對(duì)應(yīng)的標(biāo)準(zhǔn)來(lái)進(jìn)行規(guī)定,因此對(duì)于這點(diǎn)也就別去怪罪IE了。
11.為什么FF下文本無(wú)法撐開(kāi)容器的高度 標(biāo)準(zhǔn)瀏覽器中固定高度值的容器是不會(huì)象IE6里那樣被撐開(kāi)的,那我又想固定高度,又想能被撐開(kāi)需要怎樣設(shè)置呢?辦法就是去掉height設(shè)置min-height:200px; 這里為了照顧不認(rèn)識(shí)min-height的IE6 可以這樣定義: { height:auto!important; height:200px; min-height:200px; }
12.為什么IE6下容器的寬度和FF解釋不同呢 <?xml version="1.0" encoding="gb2312"?> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> <meta http-equiv="Content-Type" content="text/html; charset=gb2312" /> <style type="text/css"> <!-- div { cursor:pointer; width:200px; height:200px; border:10px solid red } --> </style> <div ōnclick="alert(this.offsetWidth)">讓firefox與IE兼容</div> 問(wèn)題的差別在于容器的整體寬度有沒(méi)有將邊框(border)的寬度算在其內(nèi),這里IE6解釋為200PX ,而FF則解釋為220PX,那究竟是怎么導(dǎo)致的問(wèn)題呢?大家把容器頂部的xml去掉就會(huì)發(fā)現(xiàn)原來(lái)問(wèn)題出在這,頂部的申明觸發(fā)了IE的qurks mode,關(guān)于qurks mode、 standards mode的相關(guān)知識(shí),請(qǐng)參考:http: //www.microsoft.com/china/msdn/library/webservices/asp.net/ ASPNETusStan.mspx?mfr=true
13. 讓IE6支持PNG透明
一個(gè)IE6的Bug引起了大麻煩, 他不支持透明的PNG圖片.
你需要使用一個(gè)css濾鏡
*html #image-style {
background-image: none;
filter:progid:DXImageTransform.Microsoft.AlphaImageLoader(src="fil
ename.png", sizingMethod="scale");
}
14. 若需給 a 標(biāo)簽內(nèi)內(nèi)容加上 樣式
若需給 a 標(biāo)簽內(nèi)內(nèi)容加上 樣式, 需要設(shè)置 display: block;(常見(jiàn)于導(dǎo)航標(biāo)簽)
15. IE6下默認(rèn)的字體尺寸大致在 12 - 14px 之間
IE6下默認(rèn)的字體尺寸大致在 12 - 14px 之間,當(dāng)你試圖定義一個(gè)高度小于這個(gè)默認(rèn)值的 div 的時(shí)候, IE 會(huì)固執(zhí)的認(rèn)為這個(gè)層的高度不應(yīng)該小于字體的行高。所以即使你用 height:4px; 來(lái)定義了一個(gè) div 的高度,實(shí)際在 IE 下顯示的仍然是一個(gè) 12 px 左右高度的層。添加overflow: hidden解決問(wèn)題。
<div style=”height: 4px; overflow: hidden;”></div>
IE6,IE7,FF IE7.0 出來(lái)了,對(duì)CSS的支持又有新問(wèn)題。瀏覽器多了,網(wǎng)頁(yè)兼容性更差了,疲于奔命的還是我們 ,為解決IE7.0的兼容問(wèn)題,找來(lái)了下面這篇文章: 現(xiàn)在我大部分都是用!important來(lái)hack,對(duì)于ie6和firefox測(cè)試可以正常顯示,但是ie7對(duì)!important可以正確解釋?zhuān)瑫?huì)導(dǎo)致頁(yè)面沒(méi)按要求顯示!下面是三個(gè)瀏覽器的兼容性收集.
第一種,是CSS HACK的方法
height:20px; /*For firefox*/
*height:25px; /*For IE7 & IE6*/
_height:20px; /*For IE6*/ 注意順序。
這樣也屬于CSS HACK.
#example { color: #333; } /* Moz */
* html #example { color: #666; } /* IE6 */
*+html #example { color: #999; } /* IE7 */
第2種:
<!--其他瀏覽器 -->
<link rel="stylesheet" type="text/css" href="css.css" />
<!--[if IE 7]> <!-- 適合于IE7 -->
<link rel="stylesheet" type="text/css" href="ie7.css" />
<![endif]-->
<!--[if lte IE 6]> <!-- 適合于IE6及一下 -->
<link rel="stylesheet" type="text/css" href="ie.css" />
<![endif]-->
第三種,css filter的辦法,以下為經(jīng)典從國(guó)外網(wǎng)站翻譯過(guò)來(lái)的。.
新建一個(gè)css樣式如下:
#item { width: 200px; height: 200px; background: red; } 新建一個(gè)div,并使用前面定義的css的樣式: <div id="item">some text here</div> 在body表現(xiàn)這里加入lang屬性,中文為zh: <body lang="en"> 現(xiàn)在對(duì)div元素再定義一個(gè)樣式: *:lang(en) #item{ background:green !important; } 這樣做是為了用!important覆蓋原來(lái)的css樣式,由于:lang選擇器ie7.0并不支持,所以對(duì)這句話(huà)不會(huì)有任何作用,于是也達(dá)到了ie6.0下同樣的效果,但是很不幸地的是,safari同樣不支持此屬性,所以需要加入以下css樣式: #item:empty { background: green !important } :empty選擇器為css3的規(guī)范,盡管safari并不支持此規(guī)范,但是還是會(huì)選擇此元素,不管是否此元素存在,現(xiàn)在綠色會(huì)現(xiàn)在在除ie各版本以外的瀏覽器上。 對(duì)IE6和FF的兼容可以考慮以前的!important 個(gè)人比較喜歡用
本文來(lái)自:http://www.aa25.cn/504.shtml
推薦的寫(xiě)法:
#example { color: #333; } /* Moz */
* html #example { color: #666; } /* IE6 */
*+html #example { color: #999; } /* IE7 */
感覺(jué)這樣容易記憶
推薦閱讀
http://www.cnblogs.com/me-sa/archive/2007/12/03/980685.html#981249
http://693272.blog.163.com/blog/static/364859842008514102556309/
JavaScript瀏覽器兼容性總結(jié)
下面是些整理的javascript在各瀏覽器兼容性資料。
1. 一些參考資料
http://nexgenmedia.net/evang/iemozguide/
http://www.javascriptkit.com/domref/
firefox對(duì)css的擴(kuò)展
http://developer.mozilla.org/en/docs/CSS_Reference:Mozilla_Extensions
關(guān)于css3的信息,能在線(xiàn)測(cè)試當(dāng)前瀏覽器對(duì)css3的支持情況
http://www.css3.info
2.js調(diào)試工具推薦 firefox 的 firebug 插件
能夠給js設(shè)置斷點(diǎn)執(zhí)行
能夠運(yùn)行時(shí)修改css樣式
查看dom模型等
3. 打開(kāi)firefox所有js警告:
在地址欄里錄入:about:config
雙擊,設(shè)置 javascript option restict 打開(kāi)為true 能夠看到很多警告,利于糾錯(cuò)
4. 使用javascript需要注意的地方
△ document.all("id") -> document.getElementById("id")
并且控件盡量用id,而不是name標(biāo)識(shí)
提示:
如果控件只有name,沒(méi)有id, 用getElementById時(shí):
IE:也可以找到對(duì)象
FF:返回NULL
△ 獲得form里某個(gè)元素的方法
elForm.elements['name'];
△ 取集合元素時(shí), ie支持 [],() 2種寫(xiě)法, 但是ff僅支持[],如:
table.rows(5).cells(0)
改為:
table.rows[5].cells[0]
△ 判斷對(duì)象是否是object的方法應(yīng)該為
if( typeof 對(duì)象變量 == "object")
而不是 if(對(duì)象變量 == "[object]")
△ eval(對(duì)象名稱(chēng)) -> document.getElementById
FF支持eval函數(shù)
△ 通過(guò)id直接調(diào)用對(duì)象
對(duì)象id.value = ""
改為
document.getElementById("name").value = ""
△ obj.insertAdjacentElement("beforeBegin",objText);
改為用
obj.parentNode.insertBefore(objText,obj);
△ FF的createElement不支持HTML代碼
用document.write(esHTML);
或者創(chuàng)建元素后再設(shè)置屬性, 對(duì)input元素來(lái)說(shuō),需要先設(shè)置type再加入到dom里
var obj = createElement("input");
obj.type = "checkbox";
var obj2 = document.getElementById("id2");
obj2.parentNode.insertBefore(obj,obj2);
如果是直接插入html代碼,則可以考慮用
createContextualFragment
△ innerText -> textContent
△ 對(duì)象名稱(chēng)中的$不能識(shí)別, 建議改為_(kāi)
objName = "t1$spin"
改為
objName = "t1_spin"
△ FF里設(shè)置Attribute為某個(gè)對(duì)象,然后再取出來(lái),這時(shí)候?qū)ο蟮膶傩远紒G失了?
objText.setAttribute("obj",obj);
alert(obj.id) //正確的名字
obj = objText.getAttribute("obj");
alert(obj.id) //null
在IE下沒(méi)有問(wèn)題, FF對(duì)setAttribute來(lái)說(shuō),第2個(gè)參數(shù)都是字符串型的!!!
所以如果第2個(gè)參數(shù)是對(duì)象時(shí),相當(dāng)于調(diào)用對(duì)象的 toString() 方法了
解決的方法是用下面的調(diào)用方式:
objText.dropdown_select = obj;
obj = objText.dropdown_select
△ className -> class
FF下用class代替IE下的className
由于class是關(guān)鍵字, 所以需要用 setAttribute/getAttribute才行
setAttribute("class","css樣式名稱(chēng)");
△ 在html里定義的屬性,必須用getAttribute才行
<td id="TD1" isOBJ="true">
獲取時(shí):
document.getElementByID("TD1").isOBJ 總返回 undefined, IE下是可以的
應(yīng)該用:
document.getElementByID("TD1").getAttribute("isOBJ")
△ FF里select控件不再是:總是在頂端顯示
所以可能需要設(shè)置控件的zIndex
IE里覆蓋select控件的方法是, 用ifame
△ 對(duì)于if ( vars == undefined ) 下面的值用于判斷是等同的
undefined
null
false
0
△ 如果FF調(diào)用obj.focus(); 報(bào)錯(cuò),請(qǐng)嘗試改為:
window.setTimeout( function(){ obj.focus(); }, 20);
△ FF下,keyCode是只讀的, 那把回車(chē)轉(zhuǎn)換為tab怎么辦? 在錄入時(shí)進(jìn)行鍵值轉(zhuǎn)換怎么辦??
變通的方法是:
1. 回車(chē)跳轉(zhuǎn) -> 自己寫(xiě)跳轉(zhuǎn)處理代碼.
遍歷dom里所有的元素, 找到當(dāng)前元素的下一個(gè)能夠設(shè)置焦點(diǎn)的元素, 給其設(shè)置焦點(diǎn)
2. 在能夠錄入的控件里,
把選中的部分替換為新錄入的內(nèi)容: var text = String.fromCharCode(event.keyCode);
同時(shí)阻止按鍵事件上傳, 調(diào)用: event.preventDefault()
△ <button> 會(huì)被firefox解釋為提交form或者刷新頁(yè)面???
需要寫(xiě)標(biāo)準(zhǔn)<button type="button">
或者在onclick="原函數(shù)調(diào)用(); return false;"
△ 在firefox里, document.onfocus里獲得不到實(shí)際獲得焦點(diǎn)的控件?
為什么document.keydown可以呢?
△ children -> childNodes
△ sytle.pixelHeight -> style.height
△ 判斷函數(shù)或者變量是否存在
if (!("varName" in window)) var VarName = 1;
△ document.body.clientWidth
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" >
如果html包含上面的語(yǔ)句,則應(yīng)該用下面的方法獲取
document.documentElement.clientWidth
△ window.createPopup
FF不支持
△ document.body.onresize
FF 不支持
用window.onresize
注意,頁(yè)面打開(kāi)時(shí)并不會(huì)觸發(fā)onresize事件? 需要在onload里也調(diào)用一次才行
△ box模型的問(wèn)題
IE下默認(rèn)的是 content-box 為了統(tǒng)一,可用設(shè)置:
div, td {-moz-box-sizing:border-box;box-sizing:border-box;margin:0;padding: 0;}
也可用在文檔頭加入:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
但是對(duì)IE舊代碼影響較大
△ 注冊(cè)事件
IE: attachEvent
FF: addEventListener("blur", myBlur, false);
第1個(gè)參數(shù)事件名稱(chēng)不需要帶"on"
第3個(gè)參數(shù)false代表事件傳遞從事件對(duì)象沿dom樹(shù)往body方向傳
△ 觸發(fā)事件
IE: obj.fireEvent("onclick");
FF:
var e = document.createEvent("Events");
e.initEvent("click", true, false);
element.dispatchEvent(event)
△ 在事件處理函數(shù)中獲得對(duì)象句柄
var oThis = this;
obj.onfocus = function(evt){
oThis.doOnFocus(evt);
}
△ 統(tǒng)一事件處理框架代碼
doOnFocus(evt){
evt = evt || window.event;
var el = evt.target || evt.srcElement;
// 后續(xù)處理
}
△ FF不支持onpropertychange事件
但是FF里可以定義屬性的setter方法, 如下面的:
HTMLElement.prototype.__defineSetter__("readOnly",function(readOnly){
// 構(gòu)造虛擬的event對(duì)象
var evt = [];
evt["target"] = this;
evt["propertyName"] = 'readOnly'
//onpropertychange函數(shù)需要定義evt參數(shù), 參考統(tǒng)一事件處理框架代碼
if (this.onpropertychange) this.onpropertychange(evt);
});
5.IE -> firefox css類(lèi)
△ cursor:hand -> cursor:pointer
△ expression firefox不支持
在IE下expression也非常消耗CPU,所以不應(yīng)該使用!!
為了達(dá)到較好的效果,應(yīng)該建立自己的expression to javascript的處理函數(shù)
這樣在IE和FF里就都能用了.
△ FILTER firefox不支持
filter: Alpha(Opacity=50);
替換為
-moz-opacity: 0.5;
△ text-overflow
不支持
△ transparent
firefox下 obj.setAttribute("bgColor","#ffffff") 只支持顏色
必須用 obj.style.backgroundColor = "transparent" 才行
△ FF下text控件高度與IE不同, 統(tǒng)一一下
input[type=text] {
height:20px;
}
注意input與[之間不能有空格!
△ font在IE里不能對(duì)body和td等起作用, FF可以
統(tǒng)一用 font-family
6. css和javascript在IE和Firefox中二十三個(gè)不同點(diǎn)
http://hi.baidu.com/xg21/blog/item/fbc87c3d624881e93c6d977e.html
7. Javascript與CSS在IE和Firefox中的誤區(qū)及區(qū)別
http://hi.baidu.com/leiting084/blog/item/60dcac6e1decf4dd81cb4a5d.html
8.寫(xiě)入文本
function CompatibleInnerText(id,text)
{
if(navigator.appName.indexOf("Explorer") > -1){
document.getElementById(id).innerText = text;
}
else
{
document.getElementById(id).textContent = text;
}
}
XHTML標(biāo)準(zhǔn)的DIV+CSS布局對(duì)于網(wǎng)站SEO的影響
xml標(biāo)準(zhǔn)的div+css布局對(duì)于網(wǎng)站seo的影響
7.1代碼精簡(jiǎn)
使用DIV+CSS布局,頁(yè)面代碼精簡(jiǎn),這一點(diǎn)相信對(duì)XHTML有所了解的都知道。代碼精簡(jiǎn)所帶來(lái)的直接好處有兩點(diǎn):一是提高spider爬行效率,能在最短的時(shí)間內(nèi)爬完整個(gè)頁(yè)面,這樣對(duì)收錄質(zhì)量有一定好處;二是由于能高效的爬行,就會(huì)受到spider喜歡,這樣對(duì)收錄數(shù)量有一定好處。
7.2表格的嵌套問(wèn)題
很多SEOer在其文章中稱(chēng),搜索引擎一般不抓取三層以上的表格嵌套, spider爬行Table布局的頁(yè)面,遇到多層表格嵌套時(shí),會(huì)跳過(guò)嵌套的內(nèi)容或直接放棄整個(gè)頁(yè)面。
使用Table布局,為了達(dá)到一定的視覺(jué)效果,不得不套用多個(gè)表格。如果嵌套的表格中是核心內(nèi)容,spider爬行時(shí)跳過(guò)了這一段沒(méi)有抓取到頁(yè)面的核心,這個(gè)頁(yè)面就成了相似頁(yè)面。網(wǎng)站中過(guò)多的相似頁(yè)面會(huì)影響排名及域名信任度。
而DIV+CSS布局基本上不會(huì)存在這樣的問(wèn)題,從技術(shù)角度來(lái)說(shuō),XHTML在控制樣式時(shí)也不需要過(guò)多的嵌套。
7.3速度問(wèn)題
DIV+CSS布局較Table布局減少了頁(yè)面代碼,加載速度得到很大的提高,這在spider爬行時(shí)是非常有利的。過(guò)多的頁(yè)面代碼可能造成爬行超時(shí),spider就會(huì)認(rèn)為這個(gè)頁(yè)面無(wú)法訪(fǎng)問(wèn),影響收錄及權(quán)重。
另一方面,真正的SEOer不只是為了追求收錄、排名,快速的響應(yīng)速度是提高用戶(hù)體驗(yàn)度的基礎(chǔ),這對(duì)整個(gè)搜索引擎優(yōu)化及營(yíng)銷(xiāo)都是非常有利的。
7.4 對(duì)排名的影響
基于XTHML標(biāo)準(zhǔn)的DIV+CSS布局,一般在設(shè)計(jì)完成后會(huì)盡可能的完善到能通過(guò)W3C驗(yàn)證。截止目前沒(méi)有搜索引擎表示排名規(guī)則會(huì)傾向于符合W3C標(biāo)準(zhǔn)的網(wǎng)站或頁(yè)面,但事實(shí)證明使用XTHML架構(gòu)的網(wǎng)站排名狀況一般都不錯(cuò)。這一點(diǎn)或許會(huì)有爭(zhēng)議,但樂(lè)思蜀本人保持這樣的觀(guān)點(diǎn),有異議者可以拿三組以上基本同等質(zhì)量的網(wǎng)站對(duì)比觀(guān)察。
我想,這樣的情況可能不是排名規(guī)則,最大的可能還是spider爬行網(wǎng)站時(shí),出現(xiàn)以上差異導(dǎo)致收錄質(zhì)量的不同。
畢竟廖勝于無(wú),建議建站或改版的朋友們,技術(shù)許可的情況下,還是選擇DIV+CSS布局為好。
工作很長(zhǎng)時(shí)間了,這是去年為公司培訓(xùn)的時(shí)候?qū)懙恼淼囊粋€(gè)白皮書(shū),希望大家多多提出意見(jiàn)。謝謝!
相關(guān)文章
- 這里為大家送上一份CSS代碼書(shū)寫(xiě)規(guī)范究極指南,包括代碼注釋和命名規(guī)范以及空格縮進(jìn)等一應(yīng)俱全,都來(lái)自大家平時(shí)的約定俗成,絕對(duì)值得學(xué)習(xí)借鑒,需要的朋友可以參考下2016-05-27
Discuzx系統(tǒng) CSS 編碼規(guī)范、CSS屬性書(shū)寫(xiě)順序
這篇文章主要介紹了Discuzx系統(tǒng) CSS 編碼規(guī)范、CSS屬性書(shū)寫(xiě)順序,需要的朋友可以參考下2014-10-22CSS書(shū)寫(xiě)規(guī)范、順序和命名規(guī)則
寫(xiě)了這么久的CSS,但大部分前端er都沒(méi)有按照良好的CSS書(shū)寫(xiě)規(guī)范來(lái)寫(xiě)CSS代碼,這樣會(huì)影響代碼的閱讀體驗(yàn),這里總結(jié)一個(gè)CSS書(shū)寫(xiě)規(guī)范、CSS書(shū)寫(xiě)順序供大家參考2014-03-06書(shū)寫(xiě)CSS的5個(gè)小技巧讓你的樣式更規(guī)范
CSS在書(shū)寫(xiě)過(guò)程中會(huì)一些小技巧,會(huì)省時(shí)省力,比如按字母順序來(lái)排列css、先標(biāo)記 后css等等,本文整理了一些,感興趣的朋友可以參考下希望對(duì)大家書(shū)寫(xiě)css有所幫助2013-08-13web開(kāi)發(fā)中怎么樣使css書(shū)寫(xiě)規(guī)范?
在web開(kāi)發(fā)中頁(yè)面設(shè)計(jì)時(shí)如何使css書(shū)寫(xiě)規(guī)范是很重要的。正確規(guī)范的書(shū)寫(xiě)css樣式表可以使提高網(wǎng)頁(yè)的速度以及,各種瀏覽器的兼容性,以便于開(kāi)發(fā)程序的人員更好的嵌入程序。2009-10-29- 這篇文章主要給大家介紹CSS 的加載及加載順序以及遇到的問(wèn)題思路解析,文中還給大家補(bǔ)充介紹了關(guān)于html,css,js三者的加載順序問(wèn)題,需要的朋友參考下吧2017-12-25
- CSS在使用選擇器對(duì)元素施加屬性的時(shí)候會(huì)有先后順序,包括特殊性和重要性等概念在內(nèi),這里我們就來(lái)詳解CSS中的選擇器優(yōu)先級(jí)順序,需要的朋友可以參考下2016-06-21
解決CSS3的opacity屬性帶來(lái)的層疊順序問(wèn)題
這篇文章主要介紹了解決CSS3的opacity屬性帶來(lái)的層疊順序問(wèn)題的方法,主要針對(duì)opacity的屬性值小于1的層會(huì)覆蓋在其他層之上的問(wèn)題,需要的朋友可以參考下2016-05-09深入解析CSS中z-index屬性對(duì)層疊順序的處理
這篇文章主要介紹了CSS中z-index屬性對(duì)層疊順序的處理,分情況講解了各種曾跌情況下哪個(gè)box更靠近用戶(hù),需要的朋友可以參考下2016-03-05- css書(shū)寫(xiě)順序,據(jù)網(wǎng)上說(shuō)這個(gè)是Mozilla建議的,讓你的代碼兼容性更好。2010-01-01