一個(gè)需要兼容到IE8的項(xiàng)目

從未兼容過IE8的girl,在看到自己滿心歡喜寫的頁(yè)面在IE8里打開的時(shí)候,是崩潰的。
兼容的過程經(jīng)歷下來有一種洗心革面、破繭成蝶的感覺(尷尬而不失禮貌的微笑臉)。

1.html中的注釋怎么判斷IE8/非IE8

<!--[if lte IE 8 ]><html class="ie" lang="zh-cn"><![endif]-->
<!--[if (gt IE 8)|!(IE)]><!-->
<html class="modern"
  lang="zh-cmn-Hans">
<!--<![endif]-->

如上,[if lt IE 8]的意思是:小于或等于[if (gt IE 8)|!(IE)]的意思是:大于(切不包含)IE8,或,非IE8。至于lte、gt都是什么意思呢?

  • gt: greater than,選擇條件版本以上版本,不包含條件版本
  • lt: less than,選擇條件版本以下版本,不包含條件版本
  • gte : greater than or equal,選擇條件版本以上版本,包含條件版本
  • lte : less than or equal,選擇條件版本以下版本,包含條件版本
  • ! : 選擇條件版本以外所有版本,無(wú)論高低
  • &:并
  • |:或
  • ():子表達(dá)式

在這里留個(gè)問題給今后的自己(偏偏在問了俊哥的時(shí)候豁然開朗):
為什么有些注釋是這種寫法

<!--[if (gt IE 8)|!(IE)]><!-->
something doesn't show in ie
<!--<![endif]--> 

而有些確是

<!--[if lte IE 8 ]>
  something you want to show in ie
<![endif]-->

2. 一個(gè)關(guān)于meta的故事

對(duì)于360瀏覽器來說,<meta name="renderer" content="webkit">意味著在360瀏覽器中啟用極速模式(頁(yè)面默認(rèn)用極速核),取之的有IE兼容內(nèi)核:<meta name="renderer" content="ie-comp">和IE標(biāo)準(zhǔn)內(nèi)核:<meta name="renderer" content="ie-stand">

3. 學(xué)會(huì)觀察控制臺(tái)中的render

故事的起因是這樣的:
前提:頁(yè)面有一個(gè)每秒一次的定時(shí)器。
我呢用了一個(gè)外引得超細(xì)字體,發(fā)現(xiàn)這些字體每秒都會(huì)閃一下(文字粗細(xì)顏色深淺來回轉(zhuǎn)換)。這個(gè)現(xiàn)象被文博一眼看透,他說“閃爍,說明瀏覽器每秒都在渲染這個(gè)區(qū)域,看下rendering吧...”

兩步:

  • 找到控制臺(tái)中的Rendering
  • 勾選上Paint flashing之類的
    Rendering

    Paint flashing

    勾選上了paint flashing之后會(huì)發(fā)現(xiàn),那個(gè)定時(shí)器造成了幾乎整個(gè)頁(yè)面的每秒渲染一次。這個(gè)時(shí)候那個(gè)神奇的要使用will-change的原理就浮出水面了。所以解決辦法之一,就是在定時(shí)器作用的<span>上加上will-change: transform

4. 不要高估IE8/9對(duì)偽元素的渲染能力

為什么這么說呢?
用偽元素span::beforetransform:translateY()模擬數(shù)字滾輪(當(dāng)然在IE8/9中,我乖乖地把transform改為了top):
發(fā)現(xiàn)在IE11的模擬器下模擬IE8/9的時(shí)候,瀏覽器可以準(zhǔn)時(shí)并精準(zhǔn)地把某一時(shí)刻::beforetop位置渲染出來。然而在真實(shí)的瀏覽器中,IE8卡!住!了!(IE9甚至渲染找不到top位置,一次都賦值不上!)就連強(qiáng)制執(zhí)行$targetElem.offsetLeft以求強(qiáng)制render,也是沒有任何效果的。
無(wú)奈之下,只能在IE8/9中放棄偽元素,直接把數(shù)字innerHTML到相應(yīng)的span中。
所以結(jié)論是,如果想要頁(yè)面兼容IE8/9并且?guī)в袆?dòng)畫的話,慎用偽元素的定位變化。

5. a標(biāo)簽中的rel="noopener noreferrer"

vscode中一些插件(如HTML Snippets)已經(jīng)把a(bǔ):blank的補(bǔ)全自動(dòng)加上了該屬性。
可以看下此文的解釋:
當(dāng)給a標(biāo)簽加上target="_blank"的時(shí)候,待跳轉(zhuǎn)的頁(yè)面是可以通過window.opener獲取到當(dāng)前頁(yè)面的部分訪問的。所以,新開的tab頁(yè)也就能夠再用window.opener.location跳轉(zhuǎn)到其他(比如某個(gè)釣魚的)網(wǎng)頁(yè),或者代表當(dāng)前頁(yè)面執(zhí)行一些JS操作。而用戶往往是信任從當(dāng)前頁(yè)跳轉(zhuǎn)的新tab頁(yè)的。
比如,用一個(gè)萌貓的圖片吸引你分享到facebook,然而當(dāng)你在分享前需要登錄的時(shí)候,卻是一個(gè)fake的facebook登錄頁(yè)。如果你分不清的話,就是會(huì)乖乖地輸入你的賬號(hào)和密碼的。
那么解決方式呢。。。
就是在target="_blank"的a標(biāo)簽中加上rel="noopener",鑒于FF是不認(rèn)noopener的,所以還要為了FF加上noreferer,所以完整寫來就是:rel="noopener noreferer"
舉個(gè)例子實(shí)踐一下:
new page a、page b。page a 中有一個(gè)target="_blank"的a標(biāo)簽,link到了page b,當(dāng)點(diǎn)擊鏈接打開新標(biāo)簽也就是page b的時(shí)候:

console in page b.png

試著在page b的console中輸入window.opener.location,能夠看到原頁(yè)面page a的地址。然后,將window.opener.location設(shè)置為其他頁(yè)面地址的時(shí)候,page a就乖乖跳轉(zhuǎn)了:
page a的location發(fā)生了變化.png

在我們加上了noopener之后,新打開的page b中就無(wú)法訪問到window.opener當(dāng)中的屬性了。
after set noopener.png

值得注意的是,用JS實(shí)現(xiàn)新建標(biāo)簽打開頁(yè)面,也伴有同樣的問題,所以我們不要直接用window.open('http://www.google.com'),而是要像這樣:

var otherWindow = window.open();
otherWindow.opener = null;
otherWindow.location = url;

6. 漸變的文字

所有的IE都不支持文字的漸變
優(yōu)雅降級(jí)的處理方式是:-webkit內(nèi)核者,漸變;IE核,純色。
文字的漸變實(shí)際上是依靠背景的漸變來實(shí)現(xiàn)的:

  • background-image: linear-gradient(to right,#ffd823 30%,#0f9);:給文字設(shè)置一個(gè)漸變的背景
  • -webkit-background-clip: text;:文字以外的部分都cut掉
  • -webkit-text-fill-color: transparent;:文字部分設(shè)置為透明,以此來把背景部分透露出來。

不難看出,基本原理還是靠操作背景。所以不僅是文字漸變,鏤空的文字也可以通過background: whatever;再加上-webkit-text-fill-color: transparent;-webkit-background-clip: text;來實(shí)現(xiàn)。
有關(guān)knockout text的實(shí)現(xiàn)可參考css-tricks上的這篇。

7. 幀動(dòng)畫的實(shí)現(xiàn)

幀動(dòng)畫,也就是把動(dòng)畫分解,每一幀做成一張圖片,再把所有幀圖拼成一個(gè)長(zhǎng)圖。最后利用改變background-position來實(shí)現(xiàn)動(dòng)畫。
舉例:

animation: lightning 2s steps(20) infinite;

animation中寫下自定義的動(dòng)畫名lightning之后,設(shè)置一個(gè)steps(20)(表示一共執(zhí)行20步,每一步的時(shí)間被2s平均分配)就可以了。

@keyframes lightning {
  0% {
    background-position: 0 0;
  }
  100% {
    background-position: 0 -3350px;
  }
}

ps: 開發(fā)一定要和動(dòng)效師確認(rèn)好每一幀的停留時(shí)間(一般來說是40ms)。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 227,488評(píng)論 6 531
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 98,034評(píng)論 3 414
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 175,327評(píng)論 0 373
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)。 經(jīng)常有香客問我,道長(zhǎng),這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 62,554評(píng)論 1 307
  • 正文 為了忘掉前任,我火速辦了婚禮,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 71,337評(píng)論 6 404
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 54,883評(píng)論 1 321
  • 那天,我揣著相機(jī)與錄音,去河邊找鬼。 笑死,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 42,975評(píng)論 3 439
  • 文/蒼蘭香墨 我猛地睜開眼,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 42,114評(píng)論 0 286
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 48,625評(píng)論 1 332
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 40,555評(píng)論 3 354
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 42,737評(píng)論 1 369
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,244評(píng)論 5 355
  • 正文 年R本政府宣布,位于F島的核電站,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 43,973評(píng)論 3 345
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 34,362評(píng)論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 35,615評(píng)論 1 280
  • 我被黑心中介騙來泰國(guó)打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 51,343評(píng)論 3 390
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 47,699評(píng)論 2 370

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