兼容ie8的血淚史

條件注釋判斷瀏覽器版本

<!--[if !IE]><!--> 除IE外都可識別 <!--<![endif]-->
<!--[if IE]> 所有的IE可識別 <![endif]-->
<!--[if IE 6]> 僅IE6可識別 <![endif]-->
<!--[if lt IE 6]> IE6以及IE6以下版本可識別 <![endif]-->
<!--[if gte IE 6]> IE6以及IE6以上版本可識別 <![endif]-->
<!--[if IE 7]> 僅IE7可識別 <![endif]-->
<!--[if lt IE 7]> IE7以及IE7以下版本可識別 <![endif]-->
<!--[if gte IE 7]> IE7以及IE7以上版本可識別 <![endif]-->
<!--[if IE 8]> 僅IE8可識別 <![endif]-->
<!--[if IE 9]> 僅IE9可識別 <![endif]-->
  • 1.jquery只支持2.0以下的
<script type="text/javascript" src="<%=path%>/js/jquery-3.1.1.min.js"></script>
<!--[if IE 8]>
<script type="text/javascript" src="<%=path%>/js/jquery-1.9.1.min.js"></script>
<![endif]-->
  • 2.swiper.js 2.x版本支持ie7-10
    初始化swiper對象時脂凶,2.x版本和更高版本的方式是不同的,2.x版本的容器選擇器是一個字符串枯怖,而更高版本是一個對象唐片,如果用高版本的方式初始化對象則會報錯
        selector:".swiper-container"http://低
        selector:{el:".swiper-container"}//高
  • 3.兼容h5的新標簽
    使用Google的html5shiv包(推薦)
<!--[if lt IE9]> 
<script src="http://html5shiv.googlecode.com/svn/trunk/html5.js"></script>
<![endif]-->

但是不管使用以上哪種方法,都要初始化新標簽的CSS.因為HTML5在默認情況下表現(xiàn)為內(nèi)聯(lián)元素厚柳,對這些元素進行布局我們需要利用CSS手工把它們轉(zhuǎn)為塊狀元素方便布局

/*html5*/
article,aside,dialog,footer,header,section,footer,nav,figure,menu{display:block}

但是如果ie6/7/8 禁用腳本的用戶,那么就變成了無樣式的"白板"網(wǎng)頁,我們該怎么解決呢?

我們可以參照facebook的做法,即引導用戶進入帶有noscript標識的 “/?_fb_noscript=1”頁面熊杨,用 html4 標簽替換 html5 標簽曙旭,這要比為了保持兼容性而寫大量 hack 的做法更輕便一些盗舰。

<!--[if lte IE 8]> 
<noscript>
     <style>.html5-wrappers{display:none!important;}</style>
     <div class="ie-noscript-warning">您的瀏覽器禁用了腳本,請<a href="">查看這里</a>來啟用腳本!或者<a href="/?noscript=1">繼續(xù)訪問</a>.
     </div>
</noscript>
<![endif]-->

這樣可以引導用戶開啟腳本,或者直接跳轉(zhuǎn)到HTML4標簽設計的界面桂躏。

  • 4.解決IE8不支持一些css3屬性
    1.transform:我是用transform來使元素水平垂直居中的钻趋,ie轉(zhuǎn)換起來太麻煩改用table-cell的方法實現(xiàn)水平垂直居中了
    2.max-width:100%;
    改成
    {
    max-width: none;
    width: auto;
    }
  • 5.媒體查詢
<!--[if lt IE 9]>
    <script src="https://cdn.staticfile.org/respond.js/1.4.2/respond.min.js"></script>
<![endif]-->
  • 6.偽元素選擇器兼容
<body>
     <div>
           <p>aaaa</p>
           <p>aaaa</p>
           <p>aaaa</p>
           <p>aaaa</p>
     </div>        
</body>

如果要讓第2個p元素變成“藍色”字體.
一般是這樣寫 div p:nth-child(2) { color:blue; }
或者 div p:nth-of-type(2) { color:blue; }
或者 就是給第2個p元素加上class了剂习。

IE7蛮位,IE8上進行兼容:

<body>
    <style>
        div p:first-child+p  { color:blue; }
    </style> 
    <div>
        <p>aaaa</p>
        <p>aaaa</p>
        <p>aaaa</p>
        <p>aaaa</p>
    </div>        
</body>

這時就可以在IE7,IE8上進行兼容了

兼容的樣式要和其它代碼分開鳞绕,不能為了使用相同的樣式而用逗號隔開

.t1,.t2 { 這樣不行
...
}
  • 8.border-radius失仁,box-shadow 兼容
    使用插件pie.htc
    (下載地址:http://css3pie.com/download/
    behavior: url(相對于當前文件的路徑/pie.htc);

  • 9.行數(shù)限制的兼容性代碼
    使用插件jquery.ellipsis.js

插件使用
<!--[if lte IE 9]>
<script>
      $(function(){
          $(".industry .detail").ellipsis({
              row:4
          })
      })
  </script>
<![endif]-->

插件代碼jquery.ellipsis.js

(function($) {
  $.fn.ellipsis = function(options) {

      // default option
      var defaults = {
          'row' : 1, // show rows
          'onlyFullWords': false, // set to true to avoid cutting the text in the middle of a word
          'char' : '...', // ellipsis
          'callback': function() {},
          'position': 'tail' // middle, tail
      };

      options = $.extend(defaults, options);

      this.each(function() {
          // get element text
          var $this = $(this);
          var text = $this.text();
          var origText = text;
          var origLength = origText.length;
          var origHeight = $this.height();

          // get height
          $this.text('a');
          var lineHeight =  parseFloat($this.css("lineHeight"), 10);
          var rowHeight = $this.height();
          var gapHeight = lineHeight > rowHeight ? (lineHeight - rowHeight) : 0;
          var targetHeight = gapHeight * (options.row - 1) + rowHeight * options.row;

          if (origHeight <= targetHeight) {
              $this.text(text);
              options.callback.call(this);
              return;
          }

          var start = 1, length = 0;
          var end = text.length;

          if(options.position === 'tail') {
              while (start < end) { // Binary search for max length
                  length = Math.ceil((start + end) / 2);

                  $this.text(text.slice(0, length) + options['char']);

                  if ($this.height() <= targetHeight) {
                      start = length;
                  } else {
                      end = length - 1;
                  }
              }

              text = text.slice(0, start);

              if (options.onlyFullWords) {
                  text = text.replace(/[\u00AD\w\uac00-\ud7af]+$/, ''); // remove fragment of the last word together with possible soft-hyphen characters
              }
              text += options['char'];

          }else if(options.position === 'middle') {

              var sliceLength = 0;
              while (start < end) { // Binary search for max length
                  length = Math.ceil((start + end) / 2);
                  sliceLength = Math.max(origLength - length, 0);

                  $this.text(
                      origText.slice(0, Math.floor((origLength - sliceLength) / 2)) +
                             options['char'] +
                             origText.slice(Math.floor((origLength + sliceLength) / 2), origLength)
                  );

                  if ($this.height() <= targetHeight) {
                      start = length;
                  } else {
                      end = length - 1;
                  }
              }

              sliceLength = Math.max(origLength - start, 0);
              var head = origText.slice(0, Math.floor((origLength - sliceLength) / 2));
              var tail = origText.slice(Math.floor((origLength + sliceLength) / 2), origLength);

              if (options.onlyFullWords) {
                  // remove fragment of the last or first word together with possible soft-hyphen characters
                  head = head.replace(/[\u00AD\w\uac00-\ud7af]+$/, '');
              }

              text = head + options['char'] + tail;
          }

          $this.text(text);

          options.callback.call(this);
      });

      return this;
  };
}) (jQuery);
?著作權歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市们何,隨后出現(xiàn)的幾起案子萄焦,更是在濱河造成了極大的恐慌,老刑警劉巖冤竹,帶你破解...
    沈念sama閱讀 211,290評論 6 491
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件拂封,死亡現(xiàn)場離奇詭異,居然都是意外死亡鹦蠕,警方通過查閱死者的電腦和手機冒签,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,107評論 2 385
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來钟病,“玉大人萧恕,你說我怎么就攤上這事〕澹” “怎么了廊鸥?”我有些...
    開封第一講書人閱讀 156,872評論 0 347
  • 文/不壞的土叔 我叫張陵,是天一觀的道長辖所。 經(jīng)常有香客問我,道長磨德,這世上最難降的妖魔是什么缘回? 我笑而不...
    開封第一講書人閱讀 56,415評論 1 283
  • 正文 為了忘掉前任,我火速辦了婚禮典挑,結(jié)果婚禮上酥宴,老公的妹妹穿的比我還像新娘。我一直安慰自己您觉,他們只是感情好拙寡,可當我...
    茶點故事閱讀 65,453評論 6 385
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著琳水,像睡著了一般肆糕。 火紅的嫁衣襯著肌膚如雪般堆。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,784評論 1 290
  • 那天诚啃,我揣著相機與錄音淮摔,去河邊找鬼。 笑死始赎,一個胖子當著我的面吹牛和橙,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播造垛,決...
    沈念sama閱讀 38,927評論 3 406
  • 文/蒼蘭香墨 我猛地睜開眼魔招,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了五辽?” 一聲冷哼從身側(cè)響起办斑,我...
    開封第一講書人閱讀 37,691評論 0 266
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎奔脐,沒想到半個月后俄周,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,137評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡髓迎,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,472評論 2 326
  • 正文 我和宋清朗相戀三年峦朗,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片排龄。...
    茶點故事閱讀 38,622評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡波势,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出橄维,到底是詐尸還是另有隱情尺铣,我是刑警寧澤,帶...
    沈念sama閱讀 34,289評論 4 329
  • 正文 年R本政府宣布争舞,位于F島的核電站凛忿,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏竞川。R本人自食惡果不足惜店溢,卻給世界環(huán)境...
    茶點故事閱讀 39,887評論 3 312
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望委乌。 院中可真熱鬧床牧,春花似錦、人聲如沸遭贸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,741評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至著蛙,卻和暖如春删铃,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背册踩。 一陣腳步聲響...
    開封第一講書人閱讀 31,977評論 1 265
  • 我被黑心中介騙來泰國打工泳姐, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人暂吉。 一個月前我還...
    沈念sama閱讀 46,316評論 2 360
  • 正文 我出身青樓胖秒,卻偏偏與公主長得像,于是被迫代替她去往敵國和親慕的。 傳聞我的和親對象是個殘疾皇子阎肝,可洞房花燭夜當晚...
    茶點故事閱讀 43,490評論 2 348

推薦閱讀更多精彩內(nèi)容