您好,登錄后才能下訂單哦!
這篇文章主要介紹CSS和XTHML寫規范以及常見問題有哪些,文中介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們一定要看完!
項目文檔目錄
div+CSS命名規范 - 4 -
Div+css命名規范 - 4 -
1.1. div+css命名規范 - 4 -
1.2. CSS的Id命名規范 - 4 -
1.3. css樣式文件命名 - 5 -
XHTML編碼基本規范 - 6 -
XHTML編碼基本規范 - 6 -
推薦網頁制作規范 - 10 -
推薦網頁制作規范 - 10 -
Css常用優化技巧 - 11 -
Css瀏覽器兼容性問題總結 - 20 -
JavaScript瀏覽器兼容性總結 - 30 -
XHTML標準的DIV+CSS布局對于網站SEO的影響 - 35 -
div+CSS命名規范
Div+css命名規范
Css的命名是區分大小寫的,建議全部使用小寫。下面總結一下最好的命名準則,好的命名不僅有利于維護人員閱讀對搜索搜索引擎優化(seo)有很大的好處。其中對代碼的優化是一個很關鍵的步驟。為了更加符合SEO的規范,下面是目前流行的CSS+DIV的命名規則,并做了些補充:
1.1. div+css命名規范
頁頭:header
登錄條:loginBar
標志:logo
側欄:sideBar
廣告:banner
導航:nav
子導航:subNav
菜單:menu
子菜單:subMenu
搜索:search
滾動:scroll
頁面主體:main
內容:content
標簽頁:tab
文章列表:list
提示信息:msg
小技巧:tips
欄目標題:title
友情鏈接:friendLink
頁腳:footer
加入:joinus
指南:guild
服務:service
熱點:hot
新聞:news
下載:download
注冊:regsiter
狀態:status
按鈕:btn
投票:vote
合作伙伴:partner
版權:copyRight產品管理
1.2. CSS的Id命名規范
外套:wrap
主導航:mainNav
子導航:subnav
頁腳:footer
整個頁面:content
頁眉:header
頁腳:footer
商標:label
標題:title
主導航:mainNav(globalNav)
頂導航:topnav
邊導航:sidebar
左導航:leftsideBar
右導航:rightsideBar
旗志:logo
標語:banner
菜單內容1:menu1Content
菜單容量:menuContainer
子菜單:submenu
邊導航圖標:sidebarIcon
注釋:note
面包屑:breadCrumb(即頁面所處位置導航提示)
容器:container
內容:content
搜索:search
登陸:login
功能區:shop(如購物車,收銀臺)
當前的:current
1.3. css樣式文件命名
主要的:master.css
布局版面:layout.css
專欄:columns.css
文字:font.css
打印樣式:print.css
主題:themes.css
通用:basic.css
上面的命名規范很直觀,即使程序人員不添加注釋,我們也會很清楚的知道是什么意思。上面的命名幾乎涵蓋了所有的經常使用到的樣式。
XHTML編碼基本規范
XHTML編碼基本規范
2.1 所有的標記都必須要有一個相應的結束標記
XHTML要求有嚴謹的結構,所有標簽必須關閉。如果是單獨不成對的標簽,在標簽最后加一 個"/"來關閉它。例如:
<img height="80" alt="網頁設計師" src="/uploadfile/200806/17/8C162625950.gif" width="200" />
2.2 所有標簽的元素和屬性的名字都必須使用小寫
與HTML不一樣,XHTML對大小寫是敏感的,<title>和<TITLE>是不同的標簽。XHTML要求所有的標簽和屬性的名字都必須使用小寫。例如:<BODY>必須寫成<body> 。大小寫夾雜也是不被認可的。
2.3 所有的XHTML標記都必須合理嵌套
同樣因為XHTML要求有嚴謹的結構,因此所有的嵌套都必須按順序,以前我們這樣寫的代碼:
<p><b></p>/b>必須修改為:<p><b></b>/p>
就是說,一層一層的嵌套必須是嚴格對稱。
2.4 所有的屬性必須用引號""括起來
在HTML中,你可以不需要給屬性值加引號,但是在XHTML中,它們必須被加引號。例如:
<height=80>必須修改為:<height="80">
特殊情況,你需要在屬性值里使用雙引號,你可以用",單引號可以使用',例如:
<alt="say'hello'">
2.5 把所有<和&特殊符號用編碼表示
任何小于號(<),不是標簽的一部分,都必須被編碼為< ;
任何大于號(>),不是標簽的一部分,都必須被編碼為>
任何與號(&),不是實體的一部分的,都必須被編碼為&
2.6 給所有屬性賦一個值
XHTML規定所有屬性都必須有一個值,沒有值的就重復本身。例如:
<td nowrap> <input type="checkbox" name="shirt" value="medium" checked>
必須修改為:
<td nowrap="nowrap"> <input type="checkbox" name="shirt" value="medium" checked="checked">
2.7 不要在注釋內容中使“–”
“–”只能發生在XHTML注釋的開頭和結束,也就是說,在內容中它們不再有效。例如下面的代碼是無效的:
<!–這里是注釋———–這里是注釋–>
用等號或者空格替換內部的虛線。
<!–這里是注釋============這里是注釋–>
以上這些規范有的看上去比較奇怪,但這一切都是為了使我們的代碼有一個統一、唯一的標準,便于以后的數據再利用。
2.8 引用樣式和腳本語言時type屬性不能省略
<script language="javascript" type="text/javascript">
注意:type="text/javascript"不能省略。
2.9 在頁面中寫javascript方法時注意加上注釋符號。這樣就避免>,<,&&等一些特殊符號的報錯
事例:
<script>和<style>標記的內容必須被包圍在CDATA段中。
例如:
<script type="text/javascript">
<![CDATA[
function func(a, b)
{
if (a < b)
return true;
}
]]> </script>
注意到上面的Script中有小于號(<)出現,如果不將其包圍在CDATA段中,那么小于號(<)以及后面的內容會
被誤認為是另一個XHTML標記的開始,引起一些不必要的錯誤。
需要注意的是IE認為在<script>標記中的CDATA段是不合法的,并會引發腳本錯誤,這個問題可以使用
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>
當然,最好的方法是把腳本和CSS放置于單獨的文件中并在XHTML頁面中加上引用。
2.10 將所有的樣式放在style中
例:<td width="4"> </td> 這樣寫不符合標準。
我們要這樣寫:<td style=”width:4px;”> </td>
2.11 樣式屬性最后一個后面一定要加上分號
2.12 使用id屬性,而不是name屬性。
在HTML中,name屬性可以用來標識identify <a>, <applet>, <form>, <frame>, <iframe>, <img>和 <map>標記。XHTML 1.0 Strict 和XHTML 1.1 standards已經刪除了對name屬性的支持。我們應該使用id唯一標識一個頁面上的元素。ID不能重復。
2.13 屬性值中空格的處理。
屬性值中開頭和結尾的所有空格將被忽略。屬性值中詞與詞之間的多個空格或換行符將被認為成單個空格。例如
如下兩個屬性的值相同:
<input value="HTML is out" />
<input value=" HTML is
out " />
2.14 使用恰當的文檔類型聲明和命名空間。
2.15 使用meta元素聲明你的內容類型。
2.16 使用img時要添加alt屬性,可設為空
2.17 使用img時align=absmiddle屬性在W3C驗證下通不過
大家都知道,要想讓圖片和文字垂直居中對齊的話,可以在IMG標簽下添加align=absmiddle屬性即可實現,但align=absmiddle屬性在W3C驗證下通不過[驗證地址請查看W3C網頁標準驗證服務地址],那么是否可以用CSS來代替IMG的align=absmiddle屬性來實現垂直居中呢,答案是肯定的。
可以在CSS中加入vertical-align:middle;就能實現了
事例:
<div><img style="vertical-align:middle;" src="/uploadfile/png/IconBuffet/Redmond/close_32.png" />用CSS實現圖片和文字垂直居中對齊</div><br /><br />
<div><img src="/uploadfile/png/IconBuffet/Redmond/close_32.png" />這個是沒加樣式的效果</div><br /><br />
<div><img align=absmiddle src="/uploadfile/png/IconBuffet/Redmond/close_32.png" />這個是用align=absmiddle實現圖片和文字垂直居中對齊</div>
2.18 不建議使用過時屬性和標簽
為了更好的處理網站的兼容性問題,我建議不要使用過時標簽和屬性
2.19 將VS2005的驗證標準調整為XHTML1.0或更高版本
備注:
XHTML 1.0 Transitional WEB標準產生的問題
曾經流行一時的HTML標記語言已經被官方認為過時了,將要接任它的是XHTML(http://www.w3.org/MarkUp/)。如果你的網站按照較嚴格的XHTML規則書寫,那么這個網站將在不同的瀏覽器中保持一致的樣式。并且你可以認為在未來瀏覽器的版本升級變化中仍然保證網站外觀的一致性。同樣你也會得到跨瀏覽器,跨設備以及跨平臺的一致性支持。
XHTML有如下兩個主要目標:
· 將文檔的結構(使用XHTML標記語言)和表現(使用CSS)分開
· 將HTML作為一種XML書寫
對于第一個目標,W3C刪除了一些HTML的標記以及屬性,例如<font>和bgcolor,因為這些標記或屬性并不是文檔結構中的一部分,而只是用來描述文檔應該如何被顯示,因此應該定義在CSS文件中而不是HTML中。同樣,某些特定的標記內容并不一定要顯示成特定的樣子。比如,<h2>標記里內容顯示的字號完全可能小于<p>里的內容,這些取決于CSS中的定義。當然,<h2>一般用于顯示一篇文檔的標題信息,它的重要程度一般也應該高于<p>中的內容,所以通常的瀏覽器都會以一個較大的字號來顯示。
對于第二個目標,XHTML將嚴格遵守XML的嚴格語法。可以說XHTML是HTML依照XML語法重構的結果。換句話說,當你編寫XHTML文檔的時候,其實是在編寫一份特化了的XML文檔。XML文檔有著比HTML嚴格多了的語法,這些將在本文稍后部分討論。
XHTML有三個版本:
· XHTML 1.0 Transitional
· XHTML 1.0 Strict
· XHTML 1.0 Frameset
XHTML 1.0 Transitional包含HTML4.01的所有標記以及屬性,是一種不是那么嚴格的XHTML,目的是使現有的HTML開發者更容易的接受并使用XHTML。
XHTML 1.0 Strict就是嚴格版本的XHTML了,開發者必須要嚴格遵守文檔的結構與表現分開的規則,也就是說需要用CSS控制頁面的顯示而不是使用<font>,bgcolor之類的標記或屬性。
XHTML 1.0 Frameset用于把文檔分割成幾個楨以顯示不同的內容。(XHTML 1.0 Transitional和Strict 頁面不允許包含<frameset> 標記)。
這里不再贅述更多有關XHTML的介紹,如果感興趣,可以使用Google或者MSN Search找到很多相關資料或是詳細介紹。也歡迎在本貼下留下您的評論與問題,讓我們共同探討。接下來是一些書寫XHTML的基本規則。
參考網址:http://www.cnblogs.com/plain-heart/archive/2008/04/17/1158909.html
https://cache.yisu.com/upload/information/20210311/298/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"命名。
其它文件命名規范:
js的命名原則以功能的英語單詞為名。例如:廣告條的js文件名為:ad.js
所有的CGI文件后綴為cgi。所有CGI程序的配置文件為config.cgi
3.2 目錄結構規范
目錄建立的原則:以最少的層次提供最清晰簡便的訪問結構。
目錄的命名以小寫英文字母,下劃線組成。(參照命名規范)
根目錄一般只存放index.htm以及其他必須的系統文件
每個主要欄目開設一個相應的獨立目錄
根目錄下的images用于存放各頁面都要使用的公用圖片,子目錄下的images目錄存放本欄目頁面使用的私有圖片
所有JS腳本存放在根目錄下的scripts目錄
所有CSS文件存放在根目錄下App_theme目錄
所有flash, avi, ram, quicktime 等多媒體文件存放在根目錄下的media目錄
Css常用優化技巧
CSS常用優化技巧
4.1.使用css縮寫
使用縮寫可以幫助減少你CSS文件的大小,更加容易閱讀。css縮寫的主要規則請參看《常用css縮寫語法總結》,這里就不展開描述。
參考網址:http://homepage.yesky.com/97/7643097.shtml
4.2.明確定義單位,除非值為0
忘記定義尺寸的單位是CSS新手普遍的錯誤。在HTML中你可以只寫width=100,但是在CSS中,你必須給一個準確的單位,比如:width:100px width:100em。只有兩個例外情況可以不定義單位:行高和0值。除此以外,其他值都必須緊跟單位,注意,不要在數值和單位之間加空格。
4.3.區分大小寫
當在XHTML中使用CSS,CSS里定義的元素名稱是區分大小寫的。為了避免這種錯誤,我建議所有的定義名稱都采用小寫。
class和id的值在HTML和XHTML中也是區分大小寫的,如果你一定要大小寫混合寫,請仔細確認你在CSS的定義和XHTML里的標簽是一致的。
4.4.取消class和id前的元素限定
當你寫給一個元素定義class或者id,你可以省略前面的元素限定,因為ID在一個頁面里是唯一的, class可以在頁面中多次使用。你限定某個元素毫無意義。例如:
div#content { /* declarations */ }
fieldset.details { /* declarations */ }
可以寫成
#content { /* declarations */ }
.details { /* declarations */ }
這樣可以節省一些字節。
4.5.默認值
通常padding的默認值為0,background-color的默認值是transparent。但是在不同的瀏覽器默認值可能不同。如果怕有沖突,可以在樣式表一開始就先定義所有元素的margin和padding值都為0,象這樣:
* {
margin:0;
padding:0;
}
4.6.不需要重復定義可繼承的值
CSS中,子元素自動繼承父元素的屬性值,象顏色、字體等,已經在父元素中定義過的,在子元素中可以直接繼承,不需要重復定義。但是要注意,瀏覽器可能用一些默認值覆蓋你的定義。
4.7.最近優先原則
如果對同一個元素的定義有多種,以最接近(最小一級)的定義為最優先,例如有這么一段代碼
Update: Lorem ipsum dolor set
在CSS文件中,你已經定義了元素p,又定義了一個class update
p {
margin:1em 0;
font-size:1em;
color:#333;
}
.update {
font-weight:bold;
color:#600;
}
這兩個定義中,class=update將被使用,因為class比p更近。你可以查閱W3C的《 Calculating a selector’s specificity》 了解更多。
4.8.多重class定義
一個標簽可以同時定義多個class。例如:我們先定義兩個樣式,第一個樣式背景為#666;第二個樣式有10 px的邊框。
.one{width:200px;background:#666;}
.two{border:10px solid #F00;}
在頁面代碼中,我們可以這樣調用
<div class=”one two”></div>
這樣最終的顯示效果是這個div既有#666的背景,也有10px的邊框。是的,這樣做是可以的,你可以嘗試一下。
4.9.使用子選擇器(descendant selectors)
CSS初學者不知道使用子選擇器是影響他們效率的原因之一。子選擇器可以幫助你節約大量的class定義。我們來看下面這段代碼:
<div id=subnav>
<ul>
<li class=subnavitem> <a href=# class=subnavitem>Item 1</a></li>>
<li class=subnavitemselected> <a href=# class=subnavitemselected> Item 1</a> </li>
<li class=subnavitem> <a href=# class=subnavitem> Item 1</a> </li>
</ul>
</div>
這段代碼的CSS定義是:
div#subnav ul { /* Some styling */ }
div#subnav ul li.subnavitem { /* Some styling */ }
div#subnav ul li.subnavitem a.subnavitem { /* Some styling */ }
div#subnav ul li.subnavitemselected { /* Some styling */ }
div#subnav ul li.subnavitemselected a.subnavitemselected { /* Some styling */ }
你可以用下面的方法替代上面的代碼
<ul id=subnav>
<li> <a href=#> Item 1</a> </li>
<li class=sel> <a href=#> Item 1</a> </li>
<li> <a href=#> Item 1</a> </li>
</ul>
樣式定義是:
#subnav { /* Some styling */ }
#subnav li { /* Some styling */ }
#subnav a { /* Some styling */ }
#subnav .sel { /* Some styling */ }
#subnav .sel a { /* Some styling */ }
用子選擇器可以使你的代碼和CSS更加簡潔、更加容易閱讀。
4.10.不需要給背景圖片路徑加引號
為了節省字節,我建議不要給背景圖片路徑加引號,因為引號不是必須的。例如:
background:url(images/***.gif) #333;
可以寫為
background:url(images/***.gif) #333;
如果你加了引號,反而會引起一些瀏覽器的錯誤。
4.11.組選擇器(Group selectors)
當一些元素類型、class或者id都有共同的一些屬性,你就可以使用組選擇器來避免多次的重復定義。這可以節省不少字節。
例如:定義所有標題的字體、顏色和margin,你可以這樣寫:
h2,h3,h4,h5,h6,h7 {
font-family:Lucida Grande,Lucida,Arial,Helvetica,sans-serif;
color:#333;
margin:1em 0;
}
如果在使用時,有個別元素需要定義獨立樣式,你可以再加上新的定義,可以覆蓋老的定義,例如:
h2 { font-size:2em; }
h3 { font-size:1.6em; }
4.12.用正確的順序指定鏈接的樣式
當你用CSS來定義鏈接的多個狀態樣式時,要注意它們書寫的順序,正確的順序是::link :visited :hover :active。抽取第一個字母是LVHA,你可以記憶成LoVe HAte(喜歡討厭)。為什么這么定義,可以參考Eric Meyer的《Link Specificity》。
如果你的用戶需要用鍵盤來控制,需要知道當前鏈接的焦點,你還可以定義:focus屬性。:focus屬性的效果也取決與你書寫的位置,如果你希望聚焦元素顯示:hover效果,你就把:focus寫在:hover前面;如果你希望聚焦效果替代:hover效果,你就把:focus放在:hover后面。
4.13.清除浮動
一個非常常見的CSS問題,定位使用浮動的時候,下面的層被浮動的層所覆蓋,或者層里嵌套的子層超出了外層的范圍。
通常的解決辦法是在浮動層后面添加一個額外元素,例如一個div或者一個br,并且定義它的樣式為clear: both。
4.14.橫向居中(centering)
這是一個簡單的技巧,但是值得再說一遍,因為我看見太多的新手問題都是問這個:CSS如何橫向居中?你需要定義元素的寬,并且定義橫向的margin,如果你的布局包含在一個層(容器)中,就象這樣:
<!-- 你的布局這里開始 -->
你可以這樣定義使它橫向居中:
#wrap {
width:760px; /* 修改為你的層的寬度 */
margin:0 auto;
}
但是IE5/Win不能正確顯示這個定義,我們采用一個非常有用的技巧來解決:用text-align屬性。就象這樣:
body {
text-align:center;
}
#wrap {
width:760px; /* 修改為你的層的寬度 */
margin:0 auto;
text-align:left;
}
第一個body的text-align:center; 規則定義IE5/Win中body的所有元素居中(其他瀏覽器只是將文字居中) ,第二個text-align:left;是將#warp中的文字居左。
4.15.導入(Import)和隱藏CSS
因為老版本瀏覽器不支持CSS,一個通常的做法是使用@import技巧來把CSS隱藏起來。例如:
@import url(main.css);
然而,這個方法對IE4不起作用,這讓我很是頭疼了一陣子。后來我用這樣的寫法:
@import main.css;
4.16.針對IE的優化
有些時候,你需要對IE瀏覽器的bug定義一些特別的規則,這里有太多的CSS技巧(Hacks),我只使用其中的兩種方法,不管微軟在即將發布的IE7 beta版里是否更好的支持CSS,這兩種方法都是最安全的。
1.注釋的方法
(a)在IE中隱藏一個CSS定義,你可以使用子選擇器(child selector):
html>body p {
/* 定義內容 */
}
(b)下面這個寫法只有IE瀏覽器可以理解(對其他瀏覽器都隱藏)
* html p {
/* declarations */
}
(c)還有些時候,你希望IE/Win有效而IE/Mac隱藏,你可以使用反斜線技巧:
/* */
* html p {
declarations
}
/* */
2.條件注釋(conditional comments)的方法
另外一種方法,我認為比CSS Hacks更加經得起考驗就是采用微軟的私有屬性條件注釋(conditional comments)。用這個方法你可以給IE單獨定義一些樣式,而不影響主樣式表的定義。就象這樣:
<!--[if IE]>
<link rel=stylesheet type=text/css href=ie.css />
<![endif]-->
4.17.調試技巧:層有多大?
當調試CSS發生錯誤,你就要象排版工人,逐行分析CSS代碼。我通常在出問題的層上定義一個背景顏色,這樣就能很明顯看到層占據多大空間。有些人建議用 border,一般情況也是可以的,但問題是,有時候border 會增加元素的尺寸,border-top和boeder-bottom會破壞縱向margin的值,所以使用background更加安全些。
另外一個經常出問題的屬性是outline。outline看起來象boeder,但不會影響元素的尺寸或者位置。只有少數瀏覽器支持outline屬性,我所知道的只有Safari、OmniWeb、和Opera。
4.18.CSS代碼書寫樣式
在寫CSS代碼的時候,對于縮進、斷行、空格,每個人有每個人的書寫習慣。在經過不斷實踐后,我決定采用下面這樣的書寫樣式:
selector1,
selector2 {
property:value;
}
當使用聯合定義時,我通常將每個選擇器單獨寫一行,這樣方便在CSS文件中找到它們。在最后一個選擇器和大括號{之間加一個空格,每個定義也單獨寫一行,分號直接在屬性值后,不要加空格。
我習慣在每個屬性值后面都加分號,雖然規則上允許最后一個屬性值后面可以不寫分號,但是如果你要加新樣式時容易忘記補上分號而產生錯誤,所以還是都加比較好。
最后,關閉的大括號}單獨寫一行。
空格和換行有助與閱讀。
推薦閱讀:
http://www.neiyidaogou.com/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瀏覽器兼容性問題總結
CSS對瀏覽器的兼容性總結
CSS對瀏覽器的兼容性有時讓人很頭疼,或許當你了解當中的技巧跟原理,就會覺得也不是難事,從網上收集了IE7,6與Fireofx的兼容性處理方法并整理了一下.對于web2.0的過度,請盡量用xhtml格式寫代碼,而且DOCTYPE 影響 CSS 處理,作為W3C的標準,一定要加 DOCTYPE聲名. 以下為我們工作中經常用到的或是遇到的問題。
CSS技巧
5.1.div的垂直居中問題
vertical-align:middle; 將行距增加到和整個DIV一樣高 line-height:200px; 然后插入文字,就垂直居中了。缺點是要控制內容不要換行
5.2.margin加倍的問題
設置為float的div在ie下設置的margin會加倍。這是一個ie6都存在的bug。解決方案是在這個div里面加上display:inline;
例如: <#div id=”imfloat”> 相應的css為 #IamFloat{ float:left; margin:5px;/*IE下理解為10px*/ display:inline;/*IE下再理解為5px*/}
5.3.浮動ie產生的雙倍距離
#box{ float:left; width:100px; margin:0 0 0 100px; //這種情況之下IE會產生200px的距離 display:inline; //使浮動忽略} 這里細說一下block與inline兩個元素:block元素的特點是,總是在新行上開始,高度,寬度,行高,邊距都可以控制(塊元素);Inline元素的特點是,和其他元素在同一行上,不可控制(內嵌元素); #box{ display:block; //可以為內嵌元素模擬為塊元素 display:inline; //實現同一行排列的效果 diplay:table;
5.4.IE與寬度和高度的問題
IE 不認得min-這個定義,但實際上它把正常的width和height當作有min的情況來使。這樣問題就大了,如果只用寬度和高度,正常的瀏覽器里這兩個值就不會變,如果只用min-width和min-height的話,IE下面根本等于沒有設置寬度和高度。 比如要設置背景圖片,這個寬度是比較重要的。要解決這個問題,可以這樣: #box{ width: 80px; height: 35px;}html>body #box{ width: auto; height: auto; min-width: 80px; min-height: 35px;}
5.5.頁面的最小寬度
min -width是個非常方便的CSS命令,它可以指定元素最小也不能小于某個寬度,這樣就能保證排版一直正確。但IE不認得這個,而它實際上把width當做最小寬度來使。為了讓這一命令在IE上也能用,可以把一個<div> 放到 <body> 標簽下,然后為div指定一個類, 然后CSS這樣設計: #container{ min-width: 600px; width:expression(document.body.clientWidth < 600? "600px": "auto" );} 第一個min-width是正常的;但第2行的width使用了Javascript,這只有IE才認得,這也會讓你的HTML文檔不太正規。它實際上通過Javascript的判斷來實現最小寬度。
5.6.DIV浮動IE文本產生3象素的bug
左邊對象浮動,右邊采用外補丁的左邊距來定位,右邊對象內的文本會離左邊有3px的間距. #box{ float:left; width:800px;} #left{ float:left; width:50%;} #right{ width:50%;} *html #left{ margin-right:-3px; //這句是關鍵} <div id="box"> <div id="left"></div> <div id="right"></div> </div>
5.7.IE捉迷藏的問題
當div應用復雜的時候每個欄中又有一些鏈接,DIV等這個時候容易發生捉迷藏的問題。 有些內容顯示不出來,當鼠標選擇這個區域是發現內容確實在頁面。 解決辦法:對#layout使用line-height屬性 或者給#layout使用固定高和寬。頁面結構盡量簡單。
5.8.float的div閉合;清除浮動;自適應高度;
① 例如:<#div id=”floatA” ><#div id=”floatB” ><#div id=” NOTfloatC” >這里的NOTfloatC并不希望繼續平移,而是希望往下排。(其中floatA、floatB的屬性已經設置為 float:left;) 這段代碼在IE中毫無問題,問題出在FF。原因是NOTfloatC并非float標簽,必須將float標簽閉合。在 <#div class=”floatB”> <#div class=”NOTfloatC”>之間加上 < #div class=”clear”>這個div一定要注意位置,而且必須與兩個具有float屬性的div同級,之間不能存在嵌套關系,否則會產生異常。 并且將clear這種樣式定義為為如下即可: .clear{ clear:both;}
②作為外部 wrapper 的 div 不要定死高度,為了讓高度能自動適應,要在wrapper里面加上overflow:hidden; 當包含float的 box的時候,高度自動適應在IE下無效,這時候應該觸發IE的layout私有屬性(萬惡的IE啊!)用zoom:1;可以做到,這樣就達到了兼容。 例如某一個wrapper如下定義: .colwrapper{ overflow:hidden; zoom:1; margin:5px auto;}
③對于排版,我們用得最多的css描述可能就是float:left.有的時候我們需要在n欄的float div后面做一個統一的背景,譬如: <div id=”page”> <div id=”left”></div> <div id=”center”></div> <div id=”right”></div> </div> 比如我們要將page的背景設置成藍色,以達到所有三欄的背景顏色是藍色的目的,但是我們會發現隨著left center right的向下拉長,而 page居然保存高度不變,問題來了,原因在于page不是float屬性,而我們的page由于要居中,不能設置成float,所以我們應該這樣解決 <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> 再嵌入一個float left而寬度是100%的DIV解決之
④萬能float 閉合(非常重要!) 關于 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 */ 或者這樣設置:.hackbox{ display:table; //將對象作為塊元素級的表格顯示}
5.9.高度不適應
高度不適應是當內層對象的高度發生變化時外層高度不能自動進行調節,特別是當內層對象使用margin 或paddign 時。 例: #box {background-color:#eee; } #box p {margin-top: 20px;margin-bottom: 20px; text-align:center; } <div id="box"> <p>p對象中的內容</p> </div> 解決方法:在P對象上下各加2個空的div對象CSS代碼:.1{height:0px;overflow:hidden;}或者為DIV加上border屬性。
5.10 .IE6下為什么圖片下有空隙產生
解決這個BUG的方法也有很多,可以是改變html的排版,或者設置img 為display:block 或者設置vertical-align 屬性為 vertical-align:top | bottom |middle |text-bottom 都可以解決.
5.11.如何對齊文本與文本輸入框
加上 vertical-align:middle; <style type="text/css"> <!-- input { width:200px; height:30px; border:1px solid red; vertical-align:middle; } --> </style>
5.12.web標準中定義id與class有什么區別嗎
web標準中是不容許重復ID的,比如 div id="aa" 不容許重復2次,而class 定義的是類,理論上可以無限重復, 這樣需要多次引用的定義便可以使用他.
屬性的優先級問題 ID 的優先級要高于class,看上面的例子 三.方便JS等客戶端腳本,如果在頁面中要對某個對象進行腳本操作,那么可以給他定義一個ID,否則只能利用遍歷頁面元素加上指定特定屬性來找到它,這是相對浪費時間資源,遠遠不如一個ID來得簡單.
5.13. LI中內容超過長度后以省略號顯示的方法
此方法適用與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標準中IE無法設置滾動條顏色了
解決辦法是將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下這個問題是因為默認的行高造成的,解決的方法也有很多,例如:overflow:hidden | zoom:0.08 | line-height:1px
5.16.怎么樣才能讓層顯示在FLASH之上呢
解決的辦法是給FLASH設置透明 <param name="wmode" value="transparent" />
5.17.怎樣使一個層垂直居中于瀏覽器中
這里我們使用百分比絕對定位,與外補丁負值的方法,負值的大小為其自身寬度高度除以二
<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下默認的字體尺寸大致在 12 - 14px 之間的問題
IE6下默認的字體尺寸大致在 12 - 14px 之間,當你試圖定義一個高度小于這個默認值的 div 的時候, IE 會固執的認為這個層的高度不應該小于字體的行高。所以即使你用 height:4px; 來定義了一個 div 的高度,實際在 IE 下顯示的仍然是一個 12 px 左右高度的層。添加overflow: hidden解決問題。
<div style=”height: 4px; overflow: hidden;”></div>
FF與IE
1.Div居中問題 div設置 margin-left, margin-right 為 auto 時已經居中,IE 不行,IE需要設定body居中,首先在父級元素定義text-algin: center;這個的意思就是在父級元素內的內容居中。
2.鏈接(a標簽)的邊框與背景 a 鏈接加邊框和背景色,需設置 display: block, 同時設置 float: left 保證不換行。參照 menubar, 給 a 和 menubar 設置高度是為了避免底邊顯示錯位, 若不設 height, 可以在 menubar 中插入一個空格。
3.超鏈接訪問過后hover樣式就不出現的問題 被點擊訪問過的超鏈接樣式不在具有hover和active了,很多人應該都遇到過這個問題,解決方法是改變CSS屬性的排列順序: L-V-H-A Code: <style type="text/css"> <!-- a:link {} a:visited {} a:hover {} a:active {} --> </style>
4. 游標手指cursor cursor: pointer 可以同時在 IE FF 中顯示游標手指狀, hand 僅 IE 可以
5.UL的padding與margin ul標簽在FF中默認是有padding值的,而在IE中只有margin默認有值,所以先定義 ul{margin:0;padding:0;}就能解決大部分問題
6. FORM標簽 這個標簽在IE中,將會自動margin一些邊距,而在FF中margin則是0,因此,如果想顯示一致,所以最好在css中指定margin和 padding,針對上面兩個問題,我的css中一般首先都使用這樣的樣式ul,form{margin:0;padding:0;}給定義死了,所以后面就不會為這個頭疼了.
7. BOX模型解釋不一致問題 在FF和IE 中的BOX模型解釋不一致導致相差2px解決方法:div{margin:30px!important;margin:28px;} 注意這兩個 margin的順序一定不能寫反, important這個屬性IE不能識別,但別的瀏覽器可以識別。所以在IE下其實解釋成這樣: div {maring:30px;margin:28px}重復定義的話按照最后一個來執行,所以不可以只寫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.屬性選擇器(這個不能算是兼容,是隱藏css的一個bug) p[id]{}div[id]{} 這個對于IE6.0和IE6.0以下的版本都隱藏,FF和OPera作用.屬性選擇器和子選擇器還是有區別的,子選擇器的范圍從形式來說縮小了,屬性選擇器的范圍比較大,如p[id]中,所有p標簽中有id的都是同樣式的.
9.最狠的手段 - !important; 如果實在沒有辦法解決一些細節問題,可以用這個方法.FF對于”!important”會自動優先解析,然而IE則會忽略.如下 .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 這句放置在另一句之上,上面已經提過
10.IE,FF的默認值問題 或許你一直在抱怨為什么要專門為IE和FF寫不同的CSS,為什么IE這樣讓人頭疼,然后一邊寫css,一邊咒罵那個可惡的M$ IE.其實對于css的標準支持方面,IE并沒有我們想象的那么可惡,關鍵在于IE和FF的默認值不一樣而已,掌握了這個技巧,你會發現寫出兼容FF和IE的css并不是那么困難,或許對于簡單的css,你完全可以不用”!important”這個東西了。 我們都知道,瀏覽器在顯示網頁的時候,都會根據網頁的 css樣式表來決定如何顯示,但是我們在樣式表中未必會將所有的元素都進行了具體的描述,當然也沒有必要那么做,所以對于那些沒有描述的屬性,瀏覽器將采用內置默認的方式來進行顯示,譬如文字,如果你沒有在css中指定顏色,那么瀏覽器將采用黑色或者系統顏色來顯示,div或者其他元素的背景,如果在 css中沒有被指定,瀏覽器則將其設置為白色或者透明,等等其他未定義的樣式均如此。所以有很多東西出現FF和IE顯示不一樣的根本原因在于它們的默認顯示不一樣,而這個默認樣式該如何顯示我知道在w3中有沒有對應的標準來進行規定,因此對于這點也就別去怪罪IE了。
11.為什么FF下文本無法撐開容器的高度 標準瀏覽器中固定高度值的容器是不會象IE6里那樣被撐開的,那我又想固定高度,又想能被撐開需要怎樣設置呢?辦法就是去掉height設置min-height:200px; 這里為了照顧不認識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)的寬度算在其內,這里IE6解釋為200PX ,而FF則解釋為220PX,那究竟是怎么導致的問題呢?大家把容器頂部的xml去掉就會發現原來問題出在這,頂部的申明觸發了IE的qurks mode,關于qurks mode、 standards mode的相關知識,請參考:http: //www.microsoft.com/china/msdn/library/webservices/asp.net/ ASPNETusStan.mspx?mfr=true
13. 讓IE6支持PNG透明
一個IE6的Bug引起了大麻煩, 他不支持透明的PNG圖片.
你需要使用一個css濾鏡
*html #image-style {
background-image: none;
filter:progid:DXImageTransform.Microsoft.AlphaImageLoader(src="fil
ename.png", sizingMethod="scale");
}
14. 若需給 a 標簽內內容加上 樣式
若需給 a 標簽內內容加上 樣式, 需要設置 display: block;(常見于導航標簽)
15. IE6下默認的字體尺寸大致在 12 - 14px 之間
IE6下默認的字體尺寸大致在 12 - 14px 之間,當你試圖定義一個高度小于這個默認值的 div 的時候, IE 會固執的認為這個層的高度不應該小于字體的行高。所以即使你用 height:4px; 來定義了一個 div 的高度,實際在 IE 下顯示的仍然是一個 12 px 左右高度的層。添加overflow: hidden解決問題。
<div style=”height: 4px; overflow: hidden;”></div>
IE6,IE7,FF IE7.0 出來了,對CSS的支持又有新問題。瀏覽器多了,網頁兼容性更差了,疲于奔命的還是我們 ,為解決IE7.0的兼容問題,找來了下面這篇文章: 現在我大部分都是用!important來hack,對于ie6和firefox測試可以正常顯示,但是ie7對!important可以正確解釋,會導致頁面沒按要求顯示!下面是三個瀏覽器的兼容性收集.
第一種,是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的辦法,以下為經典從國外網站翻譯過來的。.
新建一個css樣式如下:
#item { width: 200px; height: 200px; background: red; } 新建一個div,并使用前面定義的css的樣式: <div id="item">some text here</div> 在body表現這里加入lang屬性,中文為zh: <body lang="en"> 現在對div元素再定義一個樣式: *:lang(en) #item{ background:green !important; } 這樣做是為了用!important覆蓋原來的css樣式,由于:lang選擇器ie7.0并不支持,所以對這句話不會有任何作用,于是也達到了ie6.0下同樣的效果,但是很不幸地的是,safari同樣不支持此屬性,所以需要加入以下css樣式: #item:empty { background: green !important } :empty選擇器為css3的規范,盡管safari并不支持此規范,但是還是會選擇此元素,不管是否此元素存在,現在綠色會現在在除ie各版本以外的瀏覽器上。 對IE6和FF的兼容可以考慮以前的!important 個人比較喜歡用
本文來自: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瀏覽器兼容性總結
下面是些整理的javascript在各瀏覽器兼容性資料。
1. 一些參考資料
http://nexgenmedia.net/evang/iemozguide/
http://www.javascriptkit.com/domref/
firefox對css的擴展
http://developer.mozilla.org/en/docs/CSS_Reference:Mozilla_Extensions
關于css3的信息,能在線測試當前瀏覽器對css3的支持情況
http://www.css3.info
2.js調試工具推薦 firefox 的 firebug 插件
能夠給js設置斷點執行
能夠運行時修改css樣式
查看dom模型等
3. 打開firefox所有js警告:
在地址欄里錄入:about:config
雙擊,設置 javascript option restict 打開為true 能夠看到很多警告,利于糾錯
4. 使用javascript需要注意的地方
△ document.all("id") -> document.getElementById("id")
并且控件盡量用id,而不是name標識
提示:
如果控件只有name,沒有id, 用getElementById時:
IE:也可以找到對象
FF:返回NULL
△ 獲得form里某個元素的方法
elForm.elements['name'];
△ 取集合元素時, ie支持 [],() 2種寫法, 但是ff僅支持[],如:
table.rows(5).cells(0)
改為:
table.rows[5].cells[0]
△ 判斷對象是否是object的方法應該為
if( typeof 對象變量 == "object")
而不是 if(對象變量 == "[object]")
△ eval(對象名稱) -> document.getElementById
FF支持eval函數
△ 通過id直接調用對象
對象id.value = ""
改為
document.getElementById("name").value = ""
△ obj.insertAdjacentElement("beforeBegin",objText);
改為用
obj.parentNode.insertBefore(objText,obj);
△ FF的createElement不支持HTML代碼
用document.write(esHTML);
或者創建元素后再設置屬性, 對input元素來說,需要先設置type再加入到dom里
var obj = createElement("input");
obj.type = "checkbox";
var obj2 = document.getElementById("id2");
obj2.parentNode.insertBefore(obj,obj2);
如果是直接插入html代碼,則可以考慮用
createContextualFragment
△ innerText -> textContent
△ 對象名稱中的$不能識別, 建議改為_
objName = "t1$spin"
改為
objName = "t1_spin"
△ FF里設置Attribute為某個對象,然后再取出來,這時候對象的屬性都丟失了?
objText.setAttribute("obj",obj);
alert(obj.id) //正確的名字
obj = objText.getAttribute("obj");
alert(obj.id) //null
在IE下沒有問題, FF對setAttribute來說,第2個參數都是字符串型的!!!
所以如果第2個參數是對象時,相當于調用對象的 toString() 方法了
解決的方法是用下面的調用方式:
objText.dropdown_select = obj;
obj = objText.dropdown_select
△ className -> class
FF下用class代替IE下的className
由于class是關鍵字, 所以需要用 setAttribute/getAttribute才行
setAttribute("class","css樣式名稱");
△ 在html里定義的屬性,必須用getAttribute才行
<td id="TD1" isOBJ="true">
獲取時:
document.getElementByID("TD1").isOBJ 總返回 undefined, IE下是可以的
應該用:
document.getElementByID("TD1").getAttribute("isOBJ")
△ FF里select控件不再是:總是在頂端顯示
所以可能需要設置控件的zIndex
IE里覆蓋select控件的方法是, 用ifame
△ 對于if ( vars == undefined ) 下面的值用于判斷是等同的
undefined
null
false
0
△ 如果FF調用obj.focus(); 報錯,請嘗試改為:
window.setTimeout( function(){ obj.focus(); }, 20);
△ FF下,keyCode是只讀的, 那把回車轉換為tab怎么辦? 在錄入時進行鍵值轉換怎么辦??
變通的方法是:
1. 回車跳轉 -> 自己寫跳轉處理代碼.
遍歷dom里所有的元素, 找到當前元素的下一個能夠設置焦點的元素, 給其設置焦點
2. 在能夠錄入的控件里,
把選中的部分替換為新錄入的內容: var text = String.fromCharCode(event.keyCode);
同時阻止按鍵事件上傳, 調用: event.preventDefault()
△ <button> 會被firefox解釋為提交form或者刷新頁面???
需要寫標準<button type="button">
或者在onclick="原函數調用(); return false;"
△ 在firefox里, document.onfocus里獲得不到實際獲得焦點的控件?
為什么document.keydown可以呢?
△ children -> childNodes
△ sytle.pixelHeight -> style.height
△ 判斷函數或者變量是否存在
if (!("varName" in window)) var VarName = 1;
△ document.body.clientWidth
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" >
如果html包含上面的語句,則應該用下面的方法獲取
document.documentElement.clientWidth
△ window.createPopup
FF不支持
△ document.body.onresize
FF 不支持
用window.onresize
注意,頁面打開時并不會觸發onresize事件? 需要在onload里也調用一次才行
△ box模型的問題
IE下默認的是 content-box 為了統一,可用設置:
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">
但是對IE舊代碼影響較大
△ 注冊事件
IE: attachEvent
FF: addEventListener("blur", myBlur, false);
第1個參數事件名稱不需要帶"on"
第3個參數false代表事件傳遞從事件對象沿dom樹往body方向傳
△ 觸發事件
IE: obj.fireEvent("onclick");
FF:
var e = document.createEvent("Events");
e.initEvent("click", true, false);
element.dispatchEvent(event)
△ 在事件處理函數中獲得對象句柄
var oThis = this;
obj.onfocus = function(evt){
oThis.doOnFocus(evt);
}
△ 統一事件處理框架代碼
doOnFocus(evt){
evt = evt || window.event;
var el = evt.target || evt.srcElement;
// 后續處理
}
△ FF不支持onpropertychange事件
但是FF里可以定義屬性的setter方法, 如下面的:
HTMLElement.prototype.__defineSetter__("readOnly",function(readOnly){
// 構造虛擬的event對象
var evt = [];
evt["target"] = this;
evt["propertyName"] = 'readOnly'
//onpropertychange函數需要定義evt參數, 參考統一事件處理框架代碼
if (this.onpropertychange) this.onpropertychange(evt);
});
5.IE -> firefox css類
△ cursor:hand -> cursor:pointer
△ expression firefox不支持
在IE下expression也非常消耗CPU,所以不應該使用!!
為了達到較好的效果,應該建立自己的expression to javascript的處理函數
這樣在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不同, 統一一下
input[type=text] {
height:20px;
}
注意input與[之間不能有空格!
△ font在IE里不能對body和td等起作用, FF可以
統一用 font-family
6. css和javascript在IE和Firefox中二十三個不同點
http://hi.baidu.com/xg21/blog/item/fbc87c3d624881e93c6d977e.html
7. Javascript與CSS在IE和Firefox中的誤區及區別
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標準的DIV+CSS布局對于網站SEO的影響
xml標準的div+css布局對于網站seo的影響
7.1代碼精簡
使用DIV+CSS布局,頁面代碼精簡,這一點相信對XHTML有所了解的都知道。代碼精簡所帶來的直接好處有兩點:一是提高spider爬行效率,能在最短的時間內爬完整個頁面,這樣對收錄質量有一定好處;二是由于能高效的爬行,就會受到spider喜歡,這樣對收錄數量有一定好處。
7.2表格的嵌套問題
很多SEOer在其文章中稱,搜索引擎一般不抓取三層以上的表格嵌套, spider爬行Table布局的頁面,遇到多層表格嵌套時,會跳過嵌套的內容或直接放棄整個頁面。
使用Table布局,為了達到一定的視覺效果,不得不套用多個表格。如果嵌套的表格中是核心內容,spider爬行時跳過了這一段沒有抓取到頁面的核心,這個頁面就成了相似頁面。網站中過多的相似頁面會影響排名及域名信任度。
而DIV+CSS布局基本上不會存在這樣的問題,從技術角度來說,XHTML在控制樣式時也不需要過多的嵌套。
7.3速度問題
DIV+CSS布局較Table布局減少了頁面代碼,加載速度得到很大的提高,這在spider爬行時是非常有利的。過多的頁面代碼可能造成爬行超時,spider就會認為這個頁面無法訪問,影響收錄及權重。
另一方面,真正的SEOer不只是為了追求收錄、排名,快速的響應速度是提高用戶體驗度的基礎,這對整個搜索引擎優化及營銷都是非常有利的。
7.4 對排名的影響
基于XTHML標準的DIV+CSS布局,一般在設計完成后會盡可能的完善到能通過W3C驗證。截止目前沒有搜索引擎表示排名規則會傾向于符合W3C標準的網站或頁面,但事實證明使用XTHML架構的網站排名狀況一般都不錯。這一點或許會有爭議,但樂思蜀本人保持這樣的觀點,有異議者可以拿三組以上基本同等質量的網站對比觀察。
我想,這樣的情況可能不是排名規則,最大的可能還是spider爬行網站時,出現以上差異導致收錄質量的不同。
畢竟廖勝于無,建議建站或改版的朋友們,技術許可的情況下,還是選擇DIV+CSS布局為好。
以上是“CSS和XTHML寫規范以及常見問題有哪些”這篇文章的所有內容,感謝各位的閱讀!希望分享的內容對大家有幫助,更多相關知識,歡迎關注億速云行業資訊頻道!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。