這篇文章主要介紹CSS和XTHML寫規(guī)范以及常見問題有哪些,文中介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們一定要看完!
創(chuàng)新互聯(lián)主營(yíng)黃州網(wǎng)站建設(shè)的網(wǎng)絡(luò)公司,主營(yíng)網(wǎng)站建設(shè)方案,成都App定制開發(fā),黃州h5微信小程序定制開發(fā)搭建,黃州網(wǎng)站營(yíng)銷推廣歡迎黃州等地區(qū)企業(yè)咨詢
項(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)頁制作規(guī)范 - 10 -
推薦網(wǎng)頁制作規(guī)范 - 10 -
Css常用優(yōu)化技巧 - 11 -
Css瀏覽器兼容性問題總結(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ū)分大小寫的,建議全部使用小寫。下面總結(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ī)范
頁頭:header
登錄條:loginBar
標(biāo)志:logo
側(cè)欄:sideBar
廣告:banner
導(dǎo)航:nav
子導(dǎo)航:subNav
菜單:menu
子菜單:subMenu
搜索:search
滾動(dòng):scroll
頁面主體:main
內(nèi)容:content
標(biāo)簽頁:tab
文章列表:list
提示信息:msg
小技巧:tips
欄目標(biāo)題:title
友情鏈接:friendLink
頁腳: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
頁腳:footer
整個(gè)頁面:content
頁眉:header
頁腳: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)語:banner
菜單內(nèi)容1:menu1Content
菜單容量:menuContainer
子菜單:submenu
邊導(dǎo)航圖標(biāo):sidebarIcon
注釋:note
面包屑:breadCrumb(即頁面所處位置導(dǎo)航提示)
容器:container
內(nèi)容:content
搜索:search
登陸:login
功能區(qū):shop(如購物車,收銀臺(tái))
當(dāng)前的:current
1.3. css樣式文件命名
主要的:master.css
布局版面:layout.css
專欄:columns.css
文字:font.css
打印樣式:print.css
主題:themes.css
通用:basic.css
上面的命名規(guī)范很直觀,即使程序人員不添加注釋,我們也會(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è)"/"來關(guān)閉它。例如:
<img height="80" alt="網(wǎng)頁設(shè)計(jì)師" src="/uploadfile/200806/17/8C162625950.gif" width="200" />
2.2 所有標(biāo)簽的元素和屬性的名字都必須使用小寫
與HTML不一樣,XHTML對(duì)大小寫是敏感的,<title>和<TITLE>是不同的標(biāo)簽。XHTML要求所有的標(biāo)簽和屬性的名字都必須使用小寫。例如:<BODY>必須寫成<body> 。大小寫夾雜也是不被認(rèn)可的。
2.3 所有的XHTML標(biāo)記都必須合理嵌套
同樣因?yàn)閄HTML要求有嚴(yán)謹(jǐn)?shù)慕Y(jié)構(gòu),因此所有的嵌套都必須按順序,以前我們這樣寫的代碼:
<p><b></p>/b>必須修改為:<p><b></b>/p>
就是說,一層一層的嵌套必須是嚴(yán)格對(duì)稱。
2.4 所有的屬性必須用引號(hào)""括起來
在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è)值,沒有值的就重復(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注釋的開頭和結(jié)束,也就是說,在內(nèi)容中它們不再有效。例如下面的代碼是無效的:
<!–這里是注釋———–這里是注釋–>
用等號(hào)或者空格替換內(nèi)部的虛線。
<!–這里是注釋============這里是注釋–>
以上這些規(guī)范有的看上去比較奇怪,但這一切都是為了使我們的代碼有一個(gè)統(tǒng)一、唯一的標(biāo)準(zhǔn),便于以后的數(shù)據(jù)再利用。
2.8 引用樣式和腳本語言時(shí)type屬性不能省略
<script language="javascript" type="text/javascript">
注意:type="text/javascript"不能省略。
2.9 在頁面中寫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)記的開始,引起一些不必要的錯(cuò)誤。
需要注意的是IE認(rèn)為在<script>標(biāo)記中的CDATA段是不合法的,并會(huì)引發(fā)腳本錯(cuò)誤,這個(gè)問題可以使用
JavaScript注釋來避免:
<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頁面中加上引用。
2.10 將所有的樣式放在style中
例:<td width="4"> </td> 這樣寫不符合標(biāo)準(zhǔn)。
我們要這樣寫:<td style=”width:4px;”> </td>
2.11 樣式屬性最后一個(gè)后面一定要加上分號(hào)
2.12 使用id屬性,而不是name屬性。
在HTML中,name屬性可以用來標(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è)頁面上的元素。ID不能重復(fù)。
2.13 屬性值中空格的處理。
屬性值中開頭和結(jié)尾的所有空格將被忽略。屬性值中詞與詞之間的多個(gè)空格或換行符將被認(rèn)為成單個(gè)空格。例如
如下兩個(gè)屬性的值相同:
<input value="HTML is out" />
<input value=" HTML is
out " />
2.14 使用恰當(dāng)?shù)奈臋n類型聲明和命名空間。
2.15 使用meta元素聲明你的內(nèi)容類型。
2.16 使用img時(shí)要添加alt屬性,可設(shè)為空
2.17 使用img時(shí)align=absmiddle屬性在W3C驗(yàn)證下通不過
大家都知道,要想讓圖片和文字垂直居中對(duì)齊的話,可以在IMG標(biāo)簽下添加align=absmiddle屬性即可實(shí)現(xiàn),但align=absmiddle屬性在W3C驗(yàn)證下通不過[驗(yàn)證地址請(qǐng)查看W3C網(wǎng)頁標(biāo)準(zhǔn)驗(yàn)證服務(wù)地址],那么是否可以用CSS來代替IMG的align=absmiddle屬性來實(shí)現(xiàn)垂直居中呢,答案是肯定的。
可以在CSS中加入vertical-align:middle;就能實(shí)現(xiàn)了
事例:
<div><img style="vertical-align:middle;" src="/upload/otherpic69/close_32.png" />用CSS實(shí)現(xiàn)圖片和文字垂直居中對(duì)齊</div><br /><br />
<div><img src="/upload/otherpic69/close_32.png" />這個(gè)是沒加樣式的效果</div><br /><br />
<div><img align=absmiddle src="/upload/otherpic69/close_32.png" />這個(gè)是用align=absmiddle實(shí)現(xiàn)圖片和文字垂直居中對(duì)齊</div>
2.18 不建議使用過時(shí)屬性和標(biāo)簽
為了更好的處理網(wǎng)站的兼容性問題,我建議不要使用過時(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)生的問題
曾經(jīng)流行一時(shí)的HTML標(biāo)記語言已經(jīng)被官方認(rèn)為過時(shí)了,將要接任它的是XHTML(http://www.w3.org/MarkUp/)。如果你的網(wǎng)站按照較嚴(yán)格的XHTML規(guī)則書寫,那么這個(gè)網(wǎng)站將在不同的瀏覽器中保持一致的樣式。并且你可以認(rèn)為在未來瀏覽器的版本升級(jí)變化中仍然保證網(wǎng)站外觀的一致性。同樣你也會(huì)得到跨瀏覽器,跨設(shè)備以及跨平臺(tái)的一致性支持。
XHTML有如下兩個(gè)主要目標(biāo):
· 將文檔的結(jié)構(gòu)(使用XHTML標(biāo)記語言)和表現(xiàn)(使用CSS)分開
· 將HTML作為一種XML書寫
對(duì)于第一個(gè)目標(biāo),W3C刪除了一些HTML的標(biāo)記以及屬性,例如<font>和bgcolor,因?yàn)檫@些標(biāo)記或?qū)傩圆⒉皇俏臋n結(jié)構(gòu)中的一部分,而只是用來描述文檔應(yīng)該如何被顯示,因此應(yīng)該定義在CSS文件中而不是HTML中。同樣,某些特定的標(biāo)記內(nèi)容并不一定要顯示成特定的樣子。比如,<h2>標(biāo)記里內(nèi)容顯示的字號(hào)完全可能小于<p>里的內(nèi)容,這些取決于CSS中的定義。當(dāng)然,<h2>一般用于顯示一篇文檔的標(biāo)題信息,它的重要程度一般也應(yīng)該高于<p>中的內(nèi)容,所以通常的瀏覽器都會(huì)以一個(gè)較大的字號(hào)來顯示。
對(duì)于第二個(gè)目標(biāo),XHTML將嚴(yán)格遵守XML的嚴(yán)格語法??梢哉fXHTML是HTML依照XML語法重構(gòu)的結(jié)果。換句話說,當(dāng)你編寫XHTML文檔的時(shí)候,其實(shí)是在編寫一份特化了的XML文檔。XML文檔有著比HTML嚴(yán)格多了的語法,這些將在本文稍后部分討論。
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開發(fā)者更容易的接受并使用XHTML。
XHTML 1.0 Strict就是嚴(yán)格版本的XHTML了,開發(fā)者必須要嚴(yán)格遵守文檔的結(jié)構(gòu)與表現(xiàn)分開的規(guī)則,也就是說需要用CSS控制頁面的顯示而不是使用<font>,bgcolor之類的標(biāo)記或?qū)傩浴?br/>XHTML 1.0 Frameset用于把文檔分割成幾個(gè)楨以顯示不同的內(nèi)容。(XHTML 1.0 Transitional和Strict 頁面不允許包含<frameset> 標(biāo)記)。
這里不再贅述更多有關(guān)XHTML的介紹,如果感興趣,可以使用Google或者M(jìn)SN Search找到很多相關(guān)資料或是詳細(xì)介紹。也歡迎在本貼下留下您的評(píng)論與問題,讓我們共同探討。接下來是一些書寫XHTML的基本規(guī)則。
參考網(wǎng)址:http://www.cnblogs.com/plain-heart/archive/2008/04/17/1158909.html
/upload/otherpic69/10251.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的命名原則以功能的英語單詞為名。例如:廣告條的js文件名為:ad.js
所有的CGI文件后綴為cgi。所有CGI程序的配置文件為config.cgi
3.2 目錄結(jié)構(gòu)規(guī)范
目錄建立的原則:以最少的層次提供最清晰簡(jiǎn)便的訪問結(jié)構(gòu)。
目錄的命名以小寫英文字母,下劃線組成。(參照命名規(guī)范)
根目錄一般只存放index.htm以及其他必須的系統(tǒng)文件
每個(gè)主要欄目開設(shè)一個(gè)相應(yīng)的獨(dú)立目錄
根目錄下的images用于存放各頁面都要使用的公用圖片,子目錄下的images目錄存放本欄目頁面使用的私有圖片
所有JS腳本存放在根目錄下的scripts目錄
所有CSS文件存放在根目錄下App_theme目錄
所有flash, avi, ram, quicktime 等多媒體文件存放在根目錄下的media目錄
Css常用優(yōu)化技巧
CSS常用優(yōu)化技巧
4.1.使用css縮寫
使用縮寫可以幫助減少你CSS文件的大小,更加容易閱讀。css縮寫的主要規(guī)則請(qǐng)參看《常用css縮寫語法總結(jié)》,這里就不展開描述。
參考網(wǎng)址:http://homepage.yesky.com/97/7643097.shtml
4.2.明確定義單位,除非值為0
忘記定義尺寸的單位是CSS新手普遍的錯(cuò)誤。在HTML中你可以只寫width=100,但是在CSS中,你必須給一個(gè)準(zhǔn)確的單位,比如:width:100px width:100em。只有兩個(gè)例外情況可以不定義單位:行高和0值。除此以外,其他值都必須緊跟單位,注意,不要在數(shù)值和單位之間加空格。
4.3.區(qū)分大小寫
當(dāng)在XHTML中使用CSS,CSS里定義的元素名稱是區(qū)分大小寫的。為了避免這種錯(cuò)誤,我建議所有的定義名稱都采用小寫。
class和id的值在HTML和XHTML中也是區(qū)分大小寫的,如果你一定要大小寫混合寫,請(qǐng)仔細(xì)確認(rèn)你在CSS的定義和XHTML里的標(biāo)簽是一致的。
4.4.取消class和id前的元素限定
當(dāng)你寫給一個(gè)元素定義class或者id,你可以省略前面的元素限定,因?yàn)镮D在一個(gè)頁面里是唯一的, class可以在頁面中多次使用。你限定某個(gè)元素毫無意義。例如:
div#content { /* declarations */ }
fieldset.details { /* declarations */ }
可以寫成
#content { /* declarations */ }
.details { /* declarations */ }
這樣可以節(jié)省一些字節(jié)。
4.5.默認(rèn)值
通常padding的默認(rèn)值為0,background-color的默認(rèn)值是transparent。但是在不同的瀏覽器默認(rèn)值可能不同。如果怕有沖突,可以在樣式表一開始就先定義所有元素的margin和padding值都為0,象這樣:
* {
margin:0;
padding:0;
}
4.6.不需要重復(fù)定義可繼承的值
CSS中,子元素自動(dòng)繼承父元素的屬性值,象顏色、字體等,已經(jīng)在父元素中定義過的,在子元素中可以直接繼承,不需要重復(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;}
在頁面代碼中,我們可以這樣調(diào)用
<div class=”one two”></div>
這樣最終的顯示效果是這個(gè)div既有#666的背景,也有10px的邊框。是的,這樣做是可以的,你可以嘗試一下。
4.9.使用子選擇器(descendant selectors)
CSS初學(xué)者不知道使用子選擇器是影響他們效率的原因之一。子選擇器可以幫助你節(jié)約大量的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更加簡(jiǎn)潔、更加容易閱讀。
4.10.不需要給背景圖片路徑加引號(hào)
為了節(jié)省字節(jié),我建議不要給背景圖片路徑加引號(hào),因?yàn)橐?hào)不是必須的。例如:
background:url(images/***.gif) #333;
可以寫為
background:url(images/***.gif) #333;
如果你加了引號(hào),反而會(huì)引起一些瀏覽器的錯(cuò)誤。
4.11.組選擇器(Group selectors)
當(dāng)一些元素類型、class或者id都有共同的一些屬性,你就可以使用組選擇器來避免多次的重復(fù)定義。這可以節(jié)省不少字節(jié)。
例如:定義所有標(biāo)題的字體、顏色和margin,你可以這樣寫:
h2,h3,h4,h5,h6,h7 {
font-family:Lucida Grande,Lucida,Arial,Helvetica,sans-serif;
color:#333;
margin:1em 0;
}
如果在使用時(shí),有個(gè)別元素需要定義獨(dú)立樣式,你可以再加上新的定義,可以覆蓋老的定義,例如:
h2 { font-size:2em; }
h3 { font-size:1.6em; }
4.12.用正確的順序指定鏈接的樣式
當(dāng)你用CSS來定義鏈接的多個(gè)狀態(tài)樣式時(shí),要注意它們書寫的順序,正確的順序是::link :visited :hover :active。抽取第一個(gè)字母是LVHA,你可以記憶成LoVe HAte(喜歡討厭)。為什么這么定義,可以參考Eric Meyer的《Link Specificity》。
如果你的用戶需要用鍵盤來控制,需要知道當(dāng)前鏈接的焦點(diǎn),你還可以定義:focus屬性。:focus屬性的效果也取決與你書寫的位置,如果你希望聚焦元素顯示:hover效果,你就把:focus寫在:hover前面;如果你希望聚焦效果替代:hover效果,你就把:focus放在:hover后面。
4.13.清除浮動(dòng)
一個(gè)非常常見的CSS問題,定位使用浮動(dòng)的時(shí)候,下面的層被浮動(dòng)的層所覆蓋,或者層里嵌套的子層超出了外層的范圍。
通常的解決辦法是在浮動(dòng)層后面添加一個(gè)額外元素,例如一個(gè)div或者一個(gè)br,并且定義它的樣式為clear: both。
4.14.橫向居中(centering)
這是一個(gè)簡(jiǎn)單的技巧,但是值得再說一遍,因?yàn)槲铱匆娞嗟男率謫栴}都是問這個(gè):CSS如何橫向居中?你需要定義元素的寬,并且定義橫向的margin,如果你的布局包含在一個(gè)層(容器)中,就象這樣:
<!-- 你的布局這里開始 -->
你可以這樣定義使它橫向居中:
#wrap {
width:760px; /* 修改為你的層的寬度 */
margin:0 auto;
}
但是IE5/Win不能正確顯示這個(gè)定義,我們采用一個(gè)非常有用的技巧來解決:用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技巧來把CSS隱藏起來。例如:
@import url(main.css);
然而,這個(gè)方法對(duì)IE4不起作用,這讓我很是頭疼了一陣子。后來我用這樣的寫法:
@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è)寫法只有IE瀏覽器可以理解(對(duì)其他瀏覽器都隱藏)
* html p {
/* declarations */
}
(c)還有些時(shí)候,你希望IE/Win有效而IE/Mac隱藏,你可以使用反斜線技巧:
/* */
* 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代碼。我通常在出問題的層上定義一個(gè)背景顏色,這樣就能很明顯看到層占據(jù)多大空間。有些人建議用 border,一般情況也是可以的,但問題是,有時(shí)候border 會(huì)增加元素的尺寸,border-top和boeder-bottom會(huì)破壞縱向margin的值,所以使用background更加安全些。
另外一個(gè)經(jīng)常出問題的屬性是outline。outline看起來象boeder,但不會(huì)影響元素的尺寸或者位置。只有少數(shù)瀏覽器支持outline屬性,我所知道的只有Safari、OmniWeb、和Opera。
4.18.CSS代碼書寫樣式
在寫CSS代碼的時(shí)候,對(duì)于縮進(jìn)、斷行、空格,每個(gè)人有每個(gè)人的書寫習(xí)慣。在經(jīng)過不斷實(shí)踐后,我決定采用下面這樣的書寫樣式:
selector1,
selector2 {
property:value;
}
當(dāng)使用聯(lián)合定義時(shí),我通常將每個(gè)選擇器單獨(dú)寫一行,這樣方便在CSS文件中找到它們。在最后一個(gè)選擇器和大括號(hào){之間加一個(gè)空格,每個(gè)定義也單獨(dú)寫一行,分號(hào)直接在屬性值后,不要加空格。
我習(xí)慣在每個(gè)屬性值后面都加分號(hào),雖然規(guī)則上允許最后一個(gè)屬性值后面可以不寫分號(hào),但是如果你要加新樣式時(shí)容易忘記補(bǔ)上分號(hào)而產(chǎn)生錯(cuò)誤,所以還是都加比較好。
最后,關(guān)閉的大括號(hào)}單獨(dú)寫一行。
空格和換行有助與閱讀。
推薦閱讀:
http://m.rwnh.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瀏覽器兼容性問題總結(jié)
CSS對(duì)瀏覽器的兼容性總結(jié)
CSS對(duì)瀏覽器的兼容性有時(shí)讓人很頭疼,或許當(dāng)你了解當(dāng)中的技巧跟原理,就會(huì)覺得也不是難事,從網(wǎng)上收集了IE7,6與Fireofx的兼容性處理方法并整理了一下.對(duì)于web2.0的過度,請(qǐng)盡量用xhtml格式寫代碼,而且DOCTYPE 影響 CSS 處理,作為W3C的標(biāo)準(zhǔn),一定要加 DOCTYPE聲名. 以下為我們工作中經(jīng)常用到的或是遇到的問題。
CSS技巧
5.1.div的垂直居中問題
vertical-align:middle; 將行距增加到和整個(gè)DIV一樣高 line-height:200px; 然后插入文字,就垂直居中了。缺點(diǎn)是要控制內(nèi)容不要換行
5.2.margin加倍的問題
設(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ì)說一下block與inline兩個(gè)元素:block元素的特點(diǎn)是,總是在新行上開始,高度,寬度,行高,邊距都可以控制(塊元素);Inline元素的特點(diǎn)是,和其他元素在同一行上,不可控制(內(nèi)嵌元素); #box{ display:block; //可以為內(nèi)嵌元素模擬為塊元素 display:inline; //實(shí)現(xiàn)同一行排列的效果 diplay:table;
5.4.IE與寬度和高度的問題
IE 不認(rèn)得min-這個(gè)定義,但實(shí)際上它把正常的width和height當(dāng)作有min的情況來使。這樣問題就大了,如果只用寬度和高度,正常的瀏覽器里這兩個(gè)值就不會(huì)變,如果只用min-width和min-height的話,IE下面根本等于沒有設(shè)置寬度和高度。 比如要設(shè)置背景圖片,這個(gè)寬度是比較重要的。要解決這個(gè)問題,可以這樣: #box{ width: 80px; height: 35px;}html>body #box{ width: auto; height: auto; min-width: 80px; min-height: 35px;}
5.5.頁面的最小寬度
min -width是個(gè)非常方便的CSS命令,它可以指定元素最小也不能小于某個(gè)寬度,這樣就能保證排版一直正確。但I(xiàn)E不認(rèn)得這個(gè),而它實(shí)際上把width當(dāng)做最小寬度來使。為了讓這一命令在IE上也能用,可以把一個(gè)<div> 放到 <body> 標(biāo)簽下,然后為div指定一個(gè)類, 然后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í)際上通過Javascript的判斷來實(shí)現(xiàn)最小寬度。
5.6.DIV浮動(dòng)IE文本產(chǎn)生3象素的bug
左邊對(duì)象浮動(dòng),右邊采用外補(bǔ)丁的左邊距來定位,右邊對(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捉迷藏的問題
當(dāng)div應(yīng)用復(fù)雜的時(shí)候每個(gè)欄中又有一些鏈接,DIV等這個(gè)時(shí)候容易發(fā)生捉迷藏的問題。 有些內(nèi)容顯示不出來,當(dāng)鼠標(biāo)選擇這個(gè)區(qū)域是發(fā)現(xiàn)內(nèi)容確實(shí)在頁面。 解決辦法:對(duì)#layout使用line-height屬性 或者給#layout使用固定高和寬。頁面結(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中毫無問題,問題出在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下無效,這時(shí)候應(yīng)該觸發(fā)IE的layout私有屬性(萬惡的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居然保存高度不變,問題來了,原因在于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解決之
④萬能float 閉合(非常重要!) 關(guān)于 clear float 的原理可參見 [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 定義的是類,理論上可以無限重復(fù), 這樣需要多次引用的定義便可以使用他.
屬性的優(yōu)先級(jí)問題 ID 的優(yōu)先級(jí)要高于class,看上面的例子 三.方便JS等客戶端腳本,如果在頁面中要對(duì)某個(gè)對(duì)象進(jìn)行腳本操作,那么可以給他定義一個(gè)ID,否則只能利用遍歷頁面元素加上指定特定屬性來找到它,這是相對(duì)浪費(fèi)時(shí)間資源,遠(yuǎn)遠(yuǎn)不如一個(gè)ID來得簡(jiǎn)單.
5.13. LI中內(nèi)容超過長(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無法設(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.為什么無法定義1px左右高度的容器
IE6下這個(gè)問題是因?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 之間的問題
IE6下默認(rèn)的字體尺寸大致在 12 - 14px 之間,當(dāng)你試圖定義一個(gè)高度小于這個(gè)默認(rèn)值的 div 的時(shí)候, IE 會(huì)固執(zhí)的認(rèn)為這個(gè)層的高度不應(yīng)該小于字體的行高。所以即使你用 height:4px; 來定義了一個(gè) div 的高度,實(shí)際在 IE 下顯示的仍然是一個(gè) 12 px 左右高度的層。添加overflow: hidden解決問題。
<div style=”height: 4px; overflow: hidden;”></div>
FF與IE
1.Div居中問題 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.超鏈接訪問過后hover樣式就不出現(xiàn)的問題 被點(diǎn)擊訪問過的超鏈接樣式不在具有hover和active了,很多人應(yīng)該都遇到過這個(gè)問題,解決方法是改變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;}就能解決大部分問題
6. FORM標(biāo)簽 這個(gè)標(biāo)簽在IE中,將會(huì)自動(dòng)margin一些邊距,而在FF中margin則是0,因此,如果想顯示一致,所以最好在css中指定margin和 padding,針對(duì)上面兩個(gè)問題,我的css中一般首先都使用這樣的樣式ul,form{margin:0;padding:0;}給定義死了,所以后面就不會(huì)為這個(gè)頭疼了.
7. BOX模型解釋不一致問題 在FF和IE 中的BOX模型解釋不一致導(dǎo)致相差2px解決方法:div{margin:30px!important;margin:28px;} 注意這兩個(gè) margin的順序一定不能寫反, important這個(gè)屬性IE不能識(shí)別,但別的瀏覽器可以識(shí)別。所以在IE下其實(shí)解釋成這樣: div {maring:30px;margin:28px}重復(fù)定義的話按照最后一個(gè)來執(zhí)行,所以不可以只寫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ū)別的,子選擇器的范圍從形式來說縮小了,屬性選擇器的范圍比較大,如p[id]中,所有p標(biāo)簽中有id的都是同樣式的.
9.最狠的手段 - !important; 如果實(shí)在沒有辦法解決一些細(xì)節(jié)問題,可以用這個(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)提過
10.IE,FF的默認(rèn)值問題 或許你一直在抱怨為什么要專門為IE和FF寫不同的CSS,為什么IE這樣讓人頭疼,然后一邊寫css,一邊咒罵那個(gè)可惡的M$ IE.其實(shí)對(duì)于css的標(biāo)準(zhǔn)支持方面,IE并沒有我們想象的那么可惡,關(guān)鍵在于IE和FF的默認(rèn)值不一樣而已,掌握了這個(gè)技巧,你會(huì)發(fā)現(xiàn)寫出兼容FF和IE的css并不是那么困難,或許對(duì)于簡(jiǎn)單的css,你完全可以不用”!important”這個(gè)東西了。 我們都知道,瀏覽器在顯示網(wǎng)頁的時(shí)候,都會(huì)根據(jù)網(wǎng)頁的 css樣式表來決定如何顯示,但是我們?cè)跇邮奖碇形幢貢?huì)將所有的元素都進(jìn)行了具體的描述,當(dāng)然也沒有必要那么做,所以對(duì)于那些沒有描述的屬性,瀏覽器將采用內(nèi)置默認(rèn)的方式來進(jìn)行顯示,譬如文字,如果你沒有在css中指定顏色,那么瀏覽器將采用黑色或者系統(tǒng)顏色來顯示,div或者其他元素的背景,如果在 css中沒有被指定,瀏覽器則將其設(shè)置為白色或者透明,等等其他未定義的樣式均如此。所以有很多東西出現(xiàn)FF和IE顯示不一樣的根本原因在于它們的默認(rèn)顯示不一樣,而這個(gè)默認(rèn)樣式該如何顯示我知道在w3中有沒有對(duì)應(yīng)的標(biāo)準(zhǔn)來進(jìn)行規(guī)定,因此對(duì)于這點(diǎn)也就別去怪罪IE了。
11.為什么FF下文本無法撐開容器的高度 標(biāo)準(zhǔn)瀏覽器中固定高度值的容器是不會(huì)象IE6里那樣被撐開的,那我又想固定高度,又想能被撐開需要怎樣設(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> 問題的差別在于容器的整體寬度有沒有將邊框(border)的寬度算在其內(nèi),這里IE6解釋為200PX ,而FF則解釋為220PX,那究竟是怎么導(dǎo)致的問題呢?大家把容器頂部的xml去掉就會(huì)發(fā)現(xià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;(常見于導(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; 來定義了一個(gè) div 的高度,實(shí)際在 IE 下顯示的仍然是一個(gè) 12 px 左右高度的層。添加overflow: hidden解決問題。
<div style=”height: 4px; overflow: hidden;”></div>
IE6,IE7,FF IE7.0 出來了,對(duì)CSS的支持又有新問題。瀏覽器多了,網(wǎng)頁兼容性更差了,疲于奔命的還是我們 ,為解決IE7.0的兼容問題,找來了下面這篇文章: 現(xiàn)在我大部分都是用!important來hack,對(duì)于ie6和firefox測(cè)試可以正常顯示,但是ie7對(duì)!important可以正確解釋,會(huì)導(dǎo)致頁面沒按要求顯示!下面是三個(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)典從國外網(wǎng)站翻譯過來的。.
新建一個(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覆蓋原來的css樣式,由于:lang選擇器ie7.0并不支持,所以對(duì)這句話不會(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è)人比較喜歡用
本文來自:http://www.aa25.cn/504.shtml
推薦的寫法:
#example { color: #333; } /* Moz */
* html #example { color: #666; } /* IE6 */
*+html #example { color: #999; } /* IE7 */
感覺這樣容易記憶
推薦閱讀
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的信息,能在線測(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. 打開firefox所有js警告:
在地址欄里錄入:about:config
雙擊,設(shè)置 javascript option restict 打開為true 能夠看到很多警告,利于糾錯(cuò)
4. 使用javascript需要注意的地方
△ document.all("id") -> document.getElementById("id")
并且控件盡量用id,而不是name標(biāo)識(shí)
提示:
如果控件只有name,沒有id, 用getElementById時(shí):
IE:也可以找到對(duì)象
FF:返回NULL
△ 獲得form里某個(gè)元素的方法
elForm.elements['name'];
△ 取集合元素時(shí), ie支持 [],() 2種寫法, 但是ff僅支持[],如:
table.rows(5).cells(0)
改為:
table.rows[5].cells[0]
△ 判斷對(duì)象是否是object的方法應(yīng)該為
if( typeof 對(duì)象變量 == "object")
而不是 if(對(duì)象變量 == "[object]")
△ eval(對(duì)象名稱) -> document.getElementById
FF支持eval函數(shù)
△ 通過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元素來說,需要先設(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ì)象名稱中的$不能識(shí)別, 建議改為_
objName = "t1$spin"
改為
objName = "t1_spin"
△ FF里設(shè)置Attribute為某個(gè)對(duì)象,然后再取出來,這時(shí)候?qū)ο蟮膶傩远紒G失了?
objText.setAttribute("obj",obj);
alert(obj.id) //正確的名字
obj = objText.getAttribute("obj");
alert(obj.id) //null
在IE下沒有問題, FF對(duì)setAttribute來說,第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樣式名稱");
△ 在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是只讀的, 那把回車轉(zhuǎn)換為tab怎么辦? 在錄入時(shí)進(jìn)行鍵值轉(zhuǎn)換怎么辦??
變通的方法是:
1. 回車跳轉(zhuǎn) -> 自己寫跳轉(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或者刷新頁面???
需要寫標(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īng)該用下面的方法獲取
document.documentElement.clientWidth
△ window.createPopup
FF不支持
△ document.body.onresize
FF 不支持
用window.onresize
注意,頁面打開時(shí)并不會(huì)觸發(fā)onresize事件? 需要在onload里也調(diào)用一次才行
△ box模型的問題
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ù)事件名稱不需要帶"on"
第3個(gè)參數(shù)false代表事件傳遞從事件對(duì)象沿dom樹往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類
△ 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.寫入文本
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布局,頁面代碼精簡(jiǎn),這一點(diǎn)相信對(duì)XHTML有所了解的都知道。代碼精簡(jiǎn)所帶來的直接好處有兩點(diǎn):一是提高spider爬行效率,能在最短的時(shí)間內(nèi)爬完整個(gè)頁面,這樣對(duì)收錄質(zhì)量有一定好處;二是由于能高效的爬行,就會(huì)受到spider喜歡,這樣對(duì)收錄數(shù)量有一定好處。
7.2表格的嵌套問題
很多SEOer在其文章中稱,搜索引擎一般不抓取三層以上的表格嵌套, spider爬行Table布局的頁面,遇到多層表格嵌套時(shí),會(huì)跳過嵌套的內(nèi)容或直接放棄整個(gè)頁面。
使用Table布局,為了達(dá)到一定的視覺效果,不得不套用多個(gè)表格。如果嵌套的表格中是核心內(nèi)容,spider爬行時(shí)跳過了這一段沒有抓取到頁面的核心,這個(gè)頁面就成了相似頁面。網(wǎng)站中過多的相似頁面會(huì)影響排名及域名信任度。
而DIV+CSS布局基本上不會(huì)存在這樣的問題,從技術(shù)角度來說,XHTML在控制樣式時(shí)也不需要過多的嵌套。
7.3速度問題
DIV+CSS布局較Table布局減少了頁面代碼,加載速度得到很大的提高,這在spider爬行時(shí)是非常有利的。過多的頁面代碼可能造成爬行超時(shí),spider就會(huì)認(rèn)為這個(gè)頁面無法訪問,影響收錄及權(quán)重。
另一方面,真正的SEOer不只是為了追求收錄、排名,快速的響應(yīng)速度是提高用戶體驗(yàn)度的基礎(chǔ),這對(duì)整個(gè)搜索引擎優(yōu)化及營(yíng)銷都是非常有利的。
7.4 對(duì)排名的影響
基于XTHML標(biāo)準(zhǔn)的DIV+CSS布局,一般在設(shè)計(jì)完成后會(huì)盡可能的完善到能通過W3C驗(yàn)證。截止目前沒有搜索引擎表示排名規(guī)則會(huì)傾向于符合W3C標(biāo)準(zhǔn)的網(wǎng)站或頁面,但事實(shí)證明使用XTHML架構(gòu)的網(wǎng)站排名狀況一般都不錯(cuò)。這一點(diǎn)或許會(huì)有爭(zhēng)議,但樂思蜀本人保持這樣的觀點(diǎn),有異議者可以拿三組以上基本同等質(zhì)量的網(wǎng)站對(duì)比觀察。
我想,這樣的情況可能不是排名規(guī)則,最大的可能還是spider爬行網(wǎng)站時(shí),出現(xiàn)以上差異導(dǎo)致收錄質(zhì)量的不同。
畢竟廖勝于無,建議建站或改版的朋友們,技術(shù)許可的情況下,還是選擇DIV+CSS布局為好。
以上是“CSS和XTHML寫規(guī)范以及常見問題有哪些”這篇文章的所有內(nèi)容,感謝各位的閱讀!希望分享的內(nèi)容對(duì)大家有幫助,更多相關(guān)知識(shí),歡迎關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道!
網(wǎng)頁名稱:CSS和XTHML寫規(guī)范以及常見問題有哪些
標(biāo)題路徑:http://m.rwnh.cn/article32/pcdopc.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供響應(yīng)式網(wǎng)站、網(wǎng)頁設(shè)計(jì)公司、定制網(wǎng)站、關(guān)鍵詞優(yōu)化、品牌網(wǎng)站制作、網(wǎng)站排名
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)