問題發(fā)現(xiàn):
在開發(fā)過程中需要實現(xiàn)盒子 parent-box 的上下滾動府蔗,底部footer 始終在頁面底部晋控,由于內(nèi)部元素高度不確定,起初給大盒子設(shè)置了樣式:
<div class="parent-box">
<div>
<ul>
<li></li>
<li></li>
......
</ul>
</div>
<div class="footer"></div>
</div>
/*CSS*/
.footer{
position: fixed;
bottom: 0;
right: 0;
min-width: 940px;
height: 100px;
}
.parent-box {
height:101%姓赤;
overflow-y: scroll;
padding-bottom: 110px!important;
}
在chrome瀏覽器正常滾動到底部赡译,頁面能夠正常上下滾動,
但是在火狐瀏覽器下 滾動條滾動到最底部頁面內(nèi)容部分被footer 遮擋不铆。
解決方案:
/*修改CSS*/
.parent-box {
/*padding-bottom: 110px!important;*/
/*height:101%蝌焚;*/
/*overflow-y: scroll;*/
height: calc(100vh - 150px) !important;
overflow-y: scroll;
}
問題得到解決
相關(guān)資料整理
1、IE與Fire Fox識別CSS屬性區(qū)別標簽 !important
#page_body{
width: 1000px !important;
height:30px !important;
width: 980px ;
height:36px ;
}
以上樣式
在IE6/7中只執(zhí)行width: 980px與height:36px
FireFox中則優(yōu)先執(zhí)行帶有!important標簽的CSS行width: 1000px與height:30px
記住誓斥,以上代碼的順序不能顛倒只洒。
2、div居中區(qū)別
FF:margin:0 auto 0 auto !important;
IE:margin:0 auto;
FF: div 設(shè)置 margin-left, margin-right 為 auto 時已經(jīng)居中
3劳坑、文本內(nèi)容居中
FF:margin:0 auto 0 auto !important;text-align:center
IE:text-align:center
FF: body 設(shè)置 text-align 時, div 需要設(shè)置 margin: auto(主要是 margin-left,margin-right) 方可居中
4毕谴、width與margin,padding之間的寬度計算問題區(qū)別
一個600px寬的div,margin,padding的值計算區(qū)別
ie{width: 600px;margin:10px;padding10px;}
在Firefox中應(yīng)修改為
FF{width: 560px;margin:10px;padding10px;}
也就是說在FF中,margin,padding的左右值也要算在width中涝开,600-10×2-10X2=560px
在進行Div+Css重構(gòu)中循帐,IE與FF的排版結(jié)構(gòu)中,最關(guān)鍵是第二和第四點舀武,如果不處理好以上幾個問題惧浴,那么你的你的網(wǎng)站在IE中瀏覽是那么定位精確,排版完美奕剃,一到Fire Fox中就是亂七八糟衷旅,橫七樹八的。
最后說一句纵朋,如果你要把你的網(wǎng)站改為一個兼容性完美的Div+Css網(wǎng)站柿顶,那么你就準備大量的CSS知識,那怕你一個經(jīng)驗老到的高手操软,也要為一些兼容BUG付出比較用table排版的網(wǎng)站更多的時間嘁锯。
CSS對瀏覽器器的兼容性具有很高的價值,通常情況下IE和Firefox存在很大的解析差異聂薪,這里介紹一下兼容要點家乘。
常見兼容問題:
1.DOCTYPE 影響 CSS 處理
2.FF: div 設(shè)置 margin-left, margin-right 為 auto 時已經(jīng)居中, IE 不行
3.FF: body 設(shè)置 text-align 時, div 需要設(shè)置 margin: auto(主要是 margin-left,margin-right) 方可居中
4.FF: 設(shè)置 padding 后, div 會增加 height 和 width, 但 IE 不會, 故需要用 !important 多設(shè)一個 height 和 width
5.FF: 支持 !important, IE 則忽略, 可用 !important 為 FF 特別設(shè)置樣式
6.div 的垂直居中問題: vertical-align:middle; 將行距增加到和整個DIV一樣高 line-height:200px; 然后--文字,就垂直居中了藏澳。缺點是要控制內(nèi)容不要換行
7.cursor: pointer 可以同時在 IE FF 中顯示游標手指狀仁锯, hand 僅 IE 可以
8.FF: 鏈接加邊框和背景色,需設(shè)置 display: block, 同時設(shè)置 float: left 保證不換行翔悠。參照 menubar, 給 a 和 menubar 設(shè)置高度是為了避免底邊顯示錯位, 若不設(shè) height, 可以在 menubar 中--一個空格业崖。
9.在mozilla firefox和IE中的BOX模型解釋不一致導(dǎo)致相差2px解決方法:
div{margin:30px!important;margin:28px;}
注意這兩個margin的順序一定不能寫反,據(jù)阿捷的說法!important這個屬性IE不能識別蓄愁,但別的瀏覽器可以識別双炕。所以在IE下其實解釋成這樣:
div{maring:30px;margin:28px}
重復(fù)定義的話按照最后一個來執(zhí)行,所以不可以只寫margin:XXpx!important;
10.IE5 和IE6的BOX解釋不一致
//IE5下
div{width:300px;margin:0 10px 0 10px;}
div的寬度會被解釋為300px-10px(右填充)-10px(左填充)最終div的寬度為280px撮抓,
而在IE6和其他瀏覽器上寬度則是以300px+10px(右填充)+10px(左填充)=320px來計算的妇斤。這時我們可以做如下修改
div{width:300px!important;width :340px;margin:0 10px 0 10px}
關(guān)于這個是什么我也不太明白,只知道IE5和firefox都支持但IE6不支持丹拯,如果有人理解的話站超,請告訴我一聲,謝了Q柿:)
11.ul標簽在Mozilla中默認是有padding值的,而在IE中只有margin有值所以先定義
ul{margin:0;padding:0;}
就能解決大部分問題
注意事項:
1顷编、float的div一定要閉合戚炫。
例如:(其中floatA剑刑、floatB的屬性已經(jīng)設(shè)置為float:left;)
< #div id=”floatA” >
< #div id=”floatB” >
< #div id=”NOTfloatC” >
這里的NOTfloatC并不希望繼續(xù)平移,而是希望往下排。
這段代碼在IE中毫無問題施掏,問題出在FF钮惠。原因是NOTfloatC并非float標簽,必須將float標簽閉合七芭。
在
< #div class=”floatB”>
< #div class=”NOTfloatC”>
之間加上
< #div class=”clear”>
這個div一定要注意聲明位置素挽,一定要放在最恰當(dāng)?shù)牡胤剑冶仨毰c兩個具有float屬性的div同級狸驳,之間不能存在嵌套關(guān)系预明,否則會產(chǎn)生異常。
并且將clear這種樣式定義為為如下即可:
.clear{
clear:both;}
此外耙箍,為了讓高度能自動適應(yīng)撰糠,要在wrapper里面加上overflow:hidden;
當(dāng)包含float的box的時候,高度自動適應(yīng)在IE下無效辩昆,這時候應(yīng)該觸發(fā)IE的layout私有屬性(萬惡的IE霸睦摇!)用zoom:1;可以做到汁针,這樣就達到了兼容术辐。
例如某一個wrapper如下定義:
.colwrapper{
overflow:hidden;
zoom:1;
margin:5px auto;}
2、margin加倍的問題施无。
設(shè)置為float的div在ie下設(shè)置的margin會加倍辉词。這是一個ie6都存在的bug。
解決方案是在這個div里面加上display:inline;
例如:
<div class=”imfloat”>
<--相應(yīng)的css為-->
.imfloat{
float:left;
margin:5px;
display:inline;
}
3猾骡、關(guān)于容器的包涵關(guān)系
很多時候较屿,尤其是容器內(nèi)有平行布局,例如兩卓练、三個float的div時隘蝎,寬度很容易出現(xiàn)問題。在IE中襟企,外層的寬度會被內(nèi)層更寬的div擠破嘱么。一定要用Photoshop或者Firework量取像素級的精度。
4顽悼、關(guān)于高度的問題
如果是動態(tài)地添加內(nèi)容曼振,高度最好不要定義。瀏覽器可以自動伸縮蔚龙,然而如果是靜態(tài)的內(nèi)容冰评,高度最好定好。(似乎有時候不會自動往下?lián)伍_木羹,不知道具體怎么回事)
5甲雅、最狠的手段 – !important;
如果實在沒有辦法解決一些細節(jié)問題,可以用這個方法.FF對于”!important”會自動優(yōu)先解析,然而IE則會忽略.如下
.tabd1{
background:url(/res/images/up/tab1.gif) no-repeat 0px 0px !important;
background:url(/res/images/up/tab1.gif) no-repeat 1px 0px; }
申明:本資料由百萬站會員提供解孙,轉(zhuǎn)載請注明出處,資料來源百萬站網(wǎng)站知識庫:http://www.baiwanzhan.com/site/t122522/.
CSS中IE和火狐對margin抛人、padding的兼容性解析
感謝您的支持!