當你陪著家人嗑著瓜子,和家人一起看著春晚,順便拿著手淘參與春晚抽獎互動的時候,杭州還有兩百多程序員還奮戰(zhàn)在一線當中?,F在年也過完了,獎也抽了,紅包也拿了。也該好好回來工作的時候了。這次很榮幸,自己能參與手淘過年項目(紅包開光和春晚互動項目)的項目中,雖然僅僅參與其中的部分工作,但事后感覺有些東西還是應該總結總結的,為之后的項目做準備。那么簡單的來總結一下,我自己在參與項目中用到的一些前端技術。 這些技術其實也并不是什么鮮為人知的技術棧,因為這些技術點已經出現很久了,只不過大家習慣了自己的開發(fā)模式,加上項目時間緊,怕嘗試新的東西。事實上我自己也是如此,害怕使用這些技術點,給項目帶來其他的風險(本來項目時間就很緊),慶幸的是,接下來了到的一些東西,經住了項目的考驗,雖然當中踩過一些坑,但總算是無驚無險。 過年項目手淘過年項目,事實上分為兩個,其中一個叫紅包開光,另一個是春晚抽獎的互動項目。 上面兩張圖分別是紅包開光和春晚互動的主界面視覺圖。如果你參與過手淘過年互動的活動中,這兩個界面應該對您來說并不會太陌生。 經過團隊同學一起討論,這次兩個項目都基于Vue來開發(fā),Vue只是一個JavaScript庫而以,選擇他并不沒有太多的主要原因,而是想讓團隊在今后的項目開發(fā)的時候,JavaScript庫能趨于統(tǒng)一,從而慢慢在項目中有所沉淀與積累?;谶@個原因,我在其中主要做的事情,在這個腳手架中(也就是Vue-cli的基礎)添加了以下三個部分:
PostCSS插件在互動腳手架中,目前已配置的PostCSS插件主要有:
PostCSS插件的配置Webpack項目的
對于這些PostCSS插件所起的作用和怎么配置,在其對應的GitHub上都有詳細的描述。這里簡要的描述一下,為什么在我們的項目中會采用這些PostCSS的插件:
在實際使用的時候,你可以把自定義屬性
我個人比較喜歡用自定義屬性,它和類名所起的作用是同等的。結構定義之后,需要在你的樣式文件中添加一個統(tǒng)一的寬度比默認屬性:
如果我們想要做一個
有一點需要特別注意:
編譯前的CSS如下:
編譯之后:
主要是因為在插件中做了相應的處理,不在每次調用
這個時候,編譯出來的CSS就正常了:
目前采用PostCSS插件只是一個過渡階段,在將來我們可以直接在CSS中使用 剩下的 在配置中需要配置相關的幾個關鍵參數:
目前出視覺設計稿,我們都是使用
編譯出來的CSS:
在不想要把
寫CSS的時候:
編譯出來的CSS:
上面解決了 由于瀏覽器對 而在采用Viewport Units Buggyfill的時候,需要手動給使用
如果每一個都這樣來做,那么將是災難性的。幸運的是,可以使用
上面這些PostCSS插件是在這次項目中使用的,也將會在后面的項目中繼續(xù)使用,使用其主要原因是幫助我們解放雙手能更好的擼?;蛟S你對其中一些插件有更好的使用心得,歡迎和我們一起分享,如果你有更好的插件,能幫助我們解放雙手,也歡迎分享給我們。 vw適配方案
Flexible的適合方案,在那個時期是非常強大的,想出這個方案的大神讓我膜拜已久。當然,事物是兩極的,他非常強大,但他也有自己的不足之處,特別是在 使用 大家看到眾多,或許會生疑,那么還有不支持的將會是怎么?特別是老板跟我說,這次過年項目咱們使用 眾所周知,瀏覽器對 為了能讓項目更安全,在決定過年項目中采用 當然,完成這個技術方案的驗證,其中還是碰到一些坑的,幸好能像打老怪一樣,一個一個Fix。這里就不闡述整個過程,如果你感興趣可以閱讀《如何在Vue項目中使用vw實現移動端適配》一文。接下來簡單的介紹一下 vw兼容方案移動端使用 引入JavaScript文件在你的HTML文件,比如 引入下面的JavaScript文件:
調用viewport-units-buggyfill的方法同樣在HTML文件中調用 JavaScript
有關于Viewport Units Buggyfill更多的方法,可以閱讀其官網文檔。
Flexible項目無縫過渡到
|
1 |
<script src="http://g.alicdn.com/fdilab/lib3rd/viewport-units-buggyfill/0.6.2/??viewport-units-buggyfill.hacks.min.js,viewport-units-buggyfill.min.js"></script> |
在<head>標簽添加
meta
標簽:
1 |
<meta name="viewport" content="width=device-width,initial-scale=1,user-scalable=no,viewport-fit=cover"> |
為了兼容iPhone X的適配,在
meta
標簽中添加了viewport-fit="cover"
參數處理。有關于這方面的可以閱讀《iPhone X的缺口和CSS》和《iPhone X的Web設計》。
添加前面提到的PostCSS插件的配置,當然,你可以只添加處理px
轉vw
和vw
配合Viewport Units Buggyfill的兩個PostCSS插件:postcss-px-to-viewport
和postcss-viewport-units
。
PostCSS插件配置有一個強大之處,不管你使用的是什么腳手架,他的配置都非常的靈活,支持流行的配置工具,比如Webpack,gulp等。所以你不用擔心不好配置。因為在使用Flexible時,也需要
px2rem
的PostCSS插件配置。
重新編譯你的代碼,并在瀏覽器中驗證一下編譯后的頁面。為什么要這么做呢?主要是因為postcss-px-to-viewport
和postcss-viewport-units
兩個插件會對::before
(:before
)、::after
(:after
)、img
中的content
做覆蓋。如果你的項目中有使用到具有content
屬性的元素,需要做一定的清理工作。目前這部分沒有較好的方式,我也咨詢過這兩個插件的作者,他們反饋也沒找到更好的方案,只能人肉處理,或者變相不使用::before
和::after
這樣的東東,添加額外的元素標簽來替代。如果你嘗試之后,發(fā)現有更好的方案,歡迎把你的方案分享給我們。
自從蘋果出了iPhone X的設備,對于前端開發(fā)的同學而言,避免不了對其適配處理。而且這部分適配的處理相對而言是較為繁鎖的。我也一直在探尋從設計開始就能規(guī)避一些常規(guī)的適配問題。這部分內容正在整理,當其成熟之后再與大家分享。下面簡單的羅列一下自己對iPhone X適配的處理思路。
蘋果對于iPhone X上H5頁面的適配,提供了特殊屬性支持,包括meta標簽的viewport
屬性值中加入viewport-fit
和加入constant(safe-area-inset-*)
和env(safe-area-inset-*)
,這些屬性是與iOS11以上的所有iPhone機型(不僅僅包括iPhone X)都相關的,故以iOS版本為區(qū)別具體分析一下全屏下的H5頁面:
meta
標簽下的viewport-fit
及constant(safe-area-inset-*)/env(safe-area-inset-*)
屬性。viewport-fit="cover"
,H5頁面會覆蓋頁面安全區(qū)域全屏展示,但是這樣會帶來頁面元素會被“劉海兒”和底部Home Indicator遮擋問題,所以蘋果提供在CSS中設置constant(safe-area-inset-*)
距離來規(guī)避遮擋問題。另外,頁面不加viewport-fit="cover"
默認viewport-fit="contain/auto"
,也就是我們看到的頁面不能覆蓋安全區(qū)域的情況,此時constant(safe-area-inset-*)
的值都為0
。所以在meta標簽的viewpoint
中加viewport-fit="cover"
時iOS10和iOS11下constant(safe-area-inset-*)
值的表現是不一樣的。constant()
改成了env()
。另外,iOS11.2新增了CSS function: min()
和max()
。例如:padding-left: max(12px, env(safe-area-inset-left));
。在env(safe-area-inset-left)
值因為Webview變化時值也可以做出相應變化,取12px
和env(safe-area-inset-left)
的較大值。總結如下圖:
通過媒體查詢針對 iPhone X采用個性化樣式處理:
1 2 3 4 |
@media only screen and (device-width: 375px) and (device-height: 812px) and (-webkit-device-pixel-ratio: 3) { /* iPhone X 獨有樣式寫在這里*/ } |
最后感謝您花時間把這篇文章閱讀完。上面介紹的內容就是我自己在手淘過年項目中采用到的部分前端技術,稍作整理與大家分享。如果其中有不對之處,煩請路過的大嬸斧正。如果您在自己的項目中將采用上述提到的一些技術方案,踩到任何坑也歡迎一起探討。
|