天天看點

轉載:IE下div使用margin:0px auto不居中的原因

轉自:http://www.blogjava.net/sealyu/archive/2010/01/08/308640.html

一般在将div居中顯示時,使用css:

divX {margin:0 auto;}

此css在firefox下是好的,但是在ie下不起作用,網上看到原因如下:

<div

id="cnbruce">margin: 0 auto

看看内容居中否</div>

如上調試結果,IE6.0是不居中的,當然解決的辦法可以是對網頁主體“<body>”聲明文本居中,即

[

Copy ] [ Run ] [ Save

]

<style>

body{text-align:center}

#cnbruce{width:500px;

background-color: #ccc; margin: 0 auto}

</style>

看看内容居中否(加了body文本居中)</div>

然後,單個div的CSS居中,非要扯上<body>?

于是在不采用“<body>”聲明文本居中的情況下,将DOCTYPE聲明加上,立馬有效果

<!DOCTYPE

看看内容居中否(加了DOCTYPE聲明)</div>

其實原理都知道,就是因為用這個“懶人”的HTML調試框,懶得去輸入些忘卻的東西,到頭來還以為真相就是如此呢。。。

同樣,關于“一邊固定,一邊自動擴充”的例子,加與不加在IE效果完全不同

如下是不加的情況:

Copy ] [ Run ] [ Save ]

<head>

<meta

http-equiv="Content-Type" content="text/html; charset=gb2312"

/>

<title>CSS布局</title>

<style

type="text/css">

<!--

body {

margin:0;

}

#dv1

{

background-color: #3399FF;

float: left;

width: 280px;

#dv2

background-color:

#FFCC00;

width:100%;

-->

</head>

<body>

id="dv1">

<pre>#dv1 {

float:

left;

} </pre>

</div>

id="dv2">

<pre>#dv2 {

</pre>

</body>

</html>

如下是添加了DOCTYPE聲明

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0

<html

<title>CSS布局1</title>

下次再也不信HTML調試框了,還是用軟體,呵呵。

引用W3C的一些關于DOCTYPE的說明

<a href="http://www.w3cn.org/article/step/2004/26.html" target="_blank">http://www.w3cn.org/article/step/2004/26.html</a>

引用

什麼是DOCTYPE

上面這些代碼我們稱做DOCTYPE聲明。DOCTYPE是document

type(文檔類型)的簡寫,用來說明你用的XHTML或者HTML是什麼版本。

其中的DTD(例如上例中的xhtml1-transitional.dtd)叫文檔類型定義,裡面包含了文檔的規則,浏覽器就根據你定義的DTD來解釋你頁面的辨別,并展現出來。

要建立符合标準的網頁,DOCTYPE聲明是必不可少的關鍵組成部分;除非你的XHTML确定了一個正确的DOCTYPE,否則你的辨別和CSS都不會生效。

XHTML

1.0

提供了三種DTD聲明可供選擇:

過渡的(Transitional):要求非常寬松的DTD,它允許你繼續使用HTML4.01的辨別(但是要符合xhtml的寫法)。完整代碼如下:

嚴格的(Strict):要求嚴格的DTD,你不能使用任何表現層的辨別和屬性,例如&lt;br&gt;。完整代碼如下:

架構的(Frameset):專門針對架構頁面設計使用的DTD,如果你的頁面中包含有架構,需要采用這種DTD。完整代碼如下:

我們選擇什麼樣的DOCTYPE

理想情況當然是嚴格的DTD,但對于我們大多數剛接觸web标準的設計師來說,過渡的DTD(XHTML

Transitional)是目前理想選擇(包括本站,使用的也是過渡型DTD)。因為這種DTD還允許我們使用表現層的辨別、元素和屬性,也比較容易通過W3C的代碼校驗。

注:上面說的"表現層的辨別、屬性"是指那些純粹用來控制表現的tag,例如用于排版的表格、背景顔色辨別等。在XHTML中辨別是用來表示結構的,而不是用來實作表現形式,我們過渡的目的是最終實作資料和表現相分離。

打個比方:人體模特換衣服。模特就好比資料,衣服則是表現形式,模特和衣服是分離的,這樣你就可以随意換衣服。而原來HTML4中,資料和表現是混雜在一起的,要一次性換個表現形式非常困難。呵呵,有點抽象了,這個概念需要我們在應用過程中逐漸領會。

補充

DOCTYPE聲明必須放在每一個XHTML文檔最頂部,在所有代碼和辨別之上。這個是很關鍵的,不然margin:0 atuo ;都不能居中!