在ff測試div+css的過程中發現不少問題,主要原因是代碼的不規範書寫。
1、居中問題
div裡的內容,ie默認為居中,而ff默認為左對齊。
使ff內容居中的方法是增加代碼margin:auto;
2、高度問題
設 有兩橫行div排列,上面的div設置高度(height),如果div裡的實際內容大於所設高度,在ff中會出現兩個div重疊的現象;
但在ie中, 下面的div會自動給上面的div讓出空間。所以為避免出現層的重疊,高度一定要控制恰當,或者乾脆不寫高度,讓他自動調節。
或者設置:overflow:hidden
3、clear:both;
拿 footer為例,有時候如果上面使用 了float控制的n列的佈局,那麼在用ff瀏覽時footer很有可能不老實,到處亂動——因為他還在受到浮動(float)的控制。
如果想讓它老老實 實呆在頁面下方,在footer的div中寫入clear:both;就可以達到效果了!
4、浮動ie產生的雙倍距離
#box{
float:left;
width:100px;
margin:0 0 0 100px; //這種情況之下IE會產生200px的距離
display:inline; //使浮動忽略
}
5、重點講解:display:block,inline兩個元素 display(顯示)
display:block; //可以為內嵌元素模擬為塊元素
display:inline; //實現同一行排列的的效果
diplay:table; //for ff,模擬table的效果
Display:block元素的特點是:
總是在新行上開始;
高度,行高以及頂和底邊距都可控制;
寬度缺省是它的容器的100%,除非設定一個寬度
<div>, <p>, <h1>, <form>, <ul> 和 <li>是塊元素的例子。
display:inline就是將元素顯示為行內元素.
inline元素的特點是:
和其他元素都在一行上;
高,行高及頂和底邊距不可改變;
寬度就是它的文字或圖片的寬度,不可改變。
<span>, <a>, <label>, <input>, <img>, <strong> 和<em>是inline元素的例子。
例子:
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312" />
<title>無標題文檔</title>
<style type="text/css">
#inline{width:400px; height:40px;background:#99CCCC;padding:15px 0px 0px 15px}
#inline ul{ margin:0px; list-style:none;}
#inline ul li{display:inline; font-size:12px;margin-left:5px}
#block{width:400px; height:40px;background:#FFCC99;padding:15px 0px 0px 15px}
#block ul{ margin:0px; list-style:none;}
#block ul li{display:block; font-size:12px;height:20px}
#div_inline{ width:800px;display:inline;height:120px;}
</style>
</head>
<body>
<div id="inline">
<ul>
<li>天天招生網
<li>心血管網
<li>高血壓網
<li>先心病網
</ul>
</div>
<p>
<div id="block">
<ul>
<li>天天招生網</li>
<li>心血管網</li>
<li>高血壓網</li>
<li>先心病網</li>
</ul>
</div>
</p>
</body></html>
6、IE與FF寬度和高度的問題
min -width是個非常方便的CSS命令,它可以指定元素最小也不能小於某個寬度,這樣就能保證排版一直正確。
整體最窄770px,最寬1024px,也就 是說窗口小於770xp就出底部滾動條,如果大於1024px自動屏幕居中。IE不認得min-這個定義,
但實際上它把正常的width和height當 作有min的情況來使。這樣,如果只用寬度和高度,正常的瀏覽器裡這兩個值就不會變,
如果只用min-width和min-height的話,IE下面根 本等於沒有設置寬度和高度。
CSS這樣設計:
#container{
min-width: 600px;
width:expression(document.body.clientWidth < 600? "600px": "auto" );
}
第一個min-width是正常的;但第2行的width使用了Javascrīpt,這只有IE才認得,這也會讓你的HTML文檔不太正規。它實際上通過Javascrīpt的判斷來實現最小寬度。
同樣的辦法也可以為IE實現最大寬度:
#container
{
min-width: 600px;
max-width: 1200px;
width:expression(document.body.clientWidth < 600? "600px" : document.body.clientWidth > 1200? 」1200px「 : 」auto";
}
7、FF: 支持 !important, IE 則忽略,
可用 !important (例:height:30px!important; height:26px;)為 FF 特別設置樣式
div 的垂直居中問題: vertical-align:middle; 將行距增加到和整個DIV一樣高 line-height:200px; 然後插入文字,就垂直居中了。缺點是要控制內容不要換行
cursor: pointer 可以同時在 IE FF 中顯示游標手指狀, hand 僅 IE 可以
FF: 鏈接加邊框和背景色,需設置 display: block, 同時設置 float: left 保證不換行(背景圖片需要設置 float: left )。
參照 menubar, 給 a 和 menubar 設置高度是為了避免底邊顯示錯位, 若不設 height, 可以在 menubar 中插入一個空格
在FF和IE中的BOX模型解釋不一致導致相差2px解決方法:
div{margin:30px!important;margin:28px;}
注意這兩個margin的順序一定不能寫反,據阿捷的說法!important這個屬性IE不能識別,但別的瀏覽器可以識別。所以在IE下其實解釋成這樣:
div css xhtml xml Example Source Code Example Source Code [www.52css.com]
div{maring:30px;margin:28px}
重複定義的話按照最後一個來執行,所以不可以只寫margin:XXpx!important;
在Firefox/Mozilla 瀏覽器中,對象的實際寬度= (margin-left) + (border-left-width) + (padding- left) + width + (padding-right) + (border-right-width) + (margin-right);
而在IE/Opera瀏覽器中,對象的實際寬度 = (margin-left) + width + (margin-right)。
DIV+CSS構建網站時常會出現瀏覽器不兼容的問題,下面整理了一些常見不兼容問題,及解決辦法!
1、用!important解決IE和Mozilla的佈局差別
!important是CSS1就定義的語法,作用是提高指定樣式規則的應用優先權,最重要的一點是:IE一直都不支持這個語法,而其他的瀏覽器都支持。
因此我們就可以利用這一點來分別給IE和其他瀏覽器不同的樣式定義,例如,我們定義這樣一個樣式:
.colortest{ border:20pxsolid#60A179!important; border:20pxsolid#00F; padding:30px; width:300px;}
在Mozilla中瀏覽時候,能夠理解!important的優先級,因此顯示#60A179的顏色;在IE中瀏覽時候,不能夠理解!important的優先級,因此顯示#00F的顏色。
2、解決超鏈接訪問過後hover樣式不顯示的問題
改變CSS屬性的排列順序: 先後順序標準應為:a:link—a:visited—a:hover—a:active
3、Li中內容超過長度後以省略號顯示的方法
<meta content="text/html; charset=gb2312" http-equiv="Content-Type" /><style type="text/css">
<!--
li {
width:200px;
white-space:nowrap;
text-overflow:ellipsis;
-o-text-overflow:ellipsis;
overflow: hidden;}
--></style>
<ul>
<li><a href="#">web標準常見問題大全web標準常見問題大全</a></li>
<li><a href="#">web標準常見問題大全web標準常見問題大全</a></li>
</ul>
4、margin和padding定義尺寸的縮寫
margin:3px——表示所有邊都是3px;
margin:3px 5px—— 表示top和bottom的值是3px ,right和left的值是5px
margin:3px 5px 7px——表示top的值是3,right和left的值是5,bottom的值是7
margin:3px 5px 7px 5px——四個值依次表示top,right,bottom,left;上右下左。
5、解決IE不能正確顯示透明PNG——header內加入代碼
程序代碼
<script language="javascript">
function correctPNG()
{
for(var i=0; i<document.images.length; i++)
{
var img = document.images[i]
var imgName = img.src.toUpperCase()
if (imgName.substring(imgName.length-3, imgName.length) == "PNG")
{
var imgID = (img.id) ? "id='" + img.id + "' " : ""
var imgClass = (img.className) ? "class='" + img.className + "' " : ""
var imgTitle = (img.title) ? "title='" + img.title + "' " : "title='" + img.alt + "' "
var imgStyle = "display:inline-block;" + img.style.cssText
if (img.align == "left") imgStyle = "float:left;" + imgStyle
if (img.align == "right") imgStyle = "float:right;" + imgStyle
if (img.parentElement.href) imgStyle = "cursor:hand;" + imgStyle
var strNewHTML = "<span " + imgID + imgClass + imgTitle
+ " style=\"" + "width:" + img.width + "px; height:" + img.height + "px;" + imgStyle + ";"
+ "filter:progid:DXImageTransform.Microsoft.AlphaImageLoader"
+ "(src=\'" + img.src + "\', sizingMethod='scale');\"></span>"
img.outerHTML = strNewHTML
i = i-1
}
}
}
window.attachEvent("onload", correctPNG);
</script>
6、ul在Firefox和IE下表現不同
使用(padding:0; margin:0; list-style:inside;)或者(padding:0; margin:0; list-style:none;)實現兼容,參考地址:http://and8.net/article.asp?id=273
7、BOX模型在firefox和IE中的解釋相差2px的解決方法
div{margin:30px!important;margin:28px;}
注意這兩個margin的順序一定不能寫反。根據上面提到的IE並不支持!important,所以在IE下其實解釋成這樣:
div{maring:30px;margin:28px}
重複定義的話按照最後一個來執行,所以不可以只寫margin:XXpx!important;
8、margin的默認效果
div裡的內容,ie默認為居中,而ff默認為左對齊。使ff內容居中的方法是增加代碼margin:auto;
http://www.jlorocks.com/content.aspx?conId=1330