Web前端瀏覽器兼容性問題及解決方案


常見的兼容性問題:
1、不同瀏覽器的標簽默認的外邊距( margin )和內邊距(padding)不同
解決方案: css 里增加通配符 * { margin: 0; padding: 0; }

2、IE6雙邊距問題;在 IE6中設置了float , 同時又設置margin , 就會出現邊距問題
解決方案:設置display:inline;

3、當標簽的高度設置小於10px,在IE6、IE7中會超出自己設置的高度
解決方案:超出高度的標簽設置overflow:hidden,或者設置line-height的值小於你的設置高度

4、圖片默認有間距
解決方案:使用float 為img 布局

5、IE9一下瀏覽器不能使用opacity
解決方案:
opacity: 0.5;filter: alpha(opacity = 50);filter: progid:DXImageTransform.Microsoft.Alpha(style = 0, opacity = 50);

6、邊距重疊問題;當相鄰兩個元素都設置了margin 邊距時,margin 將取最大值,舍棄最小值;
解決方案:為了不讓邊重疊,可以給子元素增加一個父級元素,並設置父級元素為overflow:hidden;

7、cursor:hand 顯示手型在safari 上不支持
解決方案:統一使用 cursor:pointer

8、兩個塊級元素,父元素設置了overflow:auto;子元素設置了position:relative ;且高度大於父元素,在IE6、IE7會被隱藏而不是溢出;
解決方案:父級元素設置position:relative

技巧一:css hack

使用hack 我可以把瀏覽器分為3類:ie6 ;ie7和遨游;其他(ie8 chrome ff safari opera等)

ie6認識的hack 是下划線_ 和星號 *
ie7 遨游認識的hack是星號 * (包括上面問題6中的 !important也算是hack的一種。不過實用性較小。)

  比如這樣一個css設置 height:300px;*height:200px;_height:100px;
ie6瀏覽器在讀到 height:300px的時候會認為高時300px;繼續往下讀,他也認識*heihgt, 所以當ie6讀到*height:200px的時候會覆蓋掉
前一條的相沖突設置,認為高度是200px。繼續往下讀,ie6還認識_height,所以他又會覆蓋掉200px高的設置,把高度設置為100px;
ie7和遨游也是一樣的從高度300px的設置往下讀。當它們讀到*height200px的時候就停下了,因為它們不認識_height。所以它們會把高度
解析為200px;剩下的瀏覽器只認識第一個height:300px;所以他們會把高度解析為300px。

因為優先級相同且相沖突的屬性設置后一個會覆蓋掉前一個,所以書寫的次序是很重要的。

/* CSS屬性級Hack */
color:red; /* 所有瀏覽器可識別*/

_color:red; /* 僅IE6 識別 */

*color:red; /* IE6、IE7 識別 */

+color:red; /* IE6、IE7 識別 */

*+color:red; /* IE6、IE7 識別 */

[color:red; /* IE6、IE7 識別 */

color:red\9; /* IE6、IE7、IE8、IE9 識別 */

color:red\0; /* IE8、IE9 識別*/

color:red\9\0; /* 僅IE9識別 */

color:red \0; /* 僅IE9識別 */

color:red!important; /* IE6 不識別!important 有危險*/

/* CSS選擇符級Hack */
*html #demo { color:red;} /* 僅IE6 識別 */

*+html #demo { color:red;} /* 僅IE7 識別 */

body:nth-of-type(1) #demo { color:red;} /* IE9+、FF3.5+、Chrome、Safari、Opera 可以識別
*/
head:first-child+body #demo { color:red; } /* IE7+、FF、Chrome、Safari、Opera 可以識別 */

:root #demo { color:red\9; } : /* 僅IE9識別 */
越少的浮動,就會越少的代碼,會有更靈活的頁面,會有擴展性更強的頁面。

CSS屬性前綴語義化:

  • 使用Trident內核的瀏覽器:IE、Maxthon、TT
  • 使用Gecko內核的瀏覽器:Netcape6及以上版本、FireFox
  • 使用Presto內核的瀏覽器:Opera7及以上版本;
  • 使用Webkit內核的瀏覽器:Safari、Chrome


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM