* 作者:阮臻
* 鏈接:https://rdc.hundsun.com/portal/article/701.html
*本文建議閱讀6分鐘,保持學習喲~
當一個項目產品需要制作時,大概流程可以分為3個階段:原型需求分析期、切圖期、動畫交互期。這三個時期都需要會什么呢?看本文達妹為你解答。
隨著前端技術的不斷演變進化,很多東西名字沒變,但本質早已今非昔比?!扒袌D”就是其中之一吧。早期“切圖”是非常形象的比喻,就是用PS把設計稿圖切成一塊一塊,再用編輯器拼在一起,然后直接導出(那時候叫網頁制作無可厚非)。
現在的“切圖”是一種思路??吹皆O計稿,設計師腦子里會迅速形成“切圖”思路,哪些平鋪、哪些用純css實現,哪些用png24,哪些合并, UI的層次是怎樣的, 模板怎么組織...... 這是現在的“切圖”方式,也是前端工程師必備的最基本能力。
當一個項目產品需要制作時,大概流程可以分為3個階段:原型需求分析期、切圖期、動畫交互期。
01
原型需求分析期
在確定產品的功能后,項目組需要在設計前組織一次需求會議,為前端工程師、后端工程師、產品設計師做一下產品講解, 然后各方各自評估下,提出疑難點。
舉個例子
一個功能會涉及到類似淘寶類似的配送地址,要求可以作為搜索條件,這個就會涉及到前端的展示,儲存(編輯時初始化)效果,和數據結構,而后端可能會涉及到數據庫的儲存方式,查詢方式,從這個功能都可以提出自己的方案,最終合并為最終方案,要求解決前/后端問題,且要達到產品的需求,盡可能地降低開發(fā)成本,加快開發(fā)速度!
拿到確定好的效果圖后,接下來就是要對整體的觀察,確定大致的dom結構,原則上遵循從上到下,從左到右,從外到里的順序。然后思考布局方式,主流方式有浮動(float)、定位(position)、flex。
其中flex是一個非常好的css3布局,但是在移動端很多瀏覽器不支持display: flex,僅支持display: -webkit-box,所以為了兼容寫了三種語法:
? display: -webkit-box;
? display: -webkit-flex;
? display: flex;
就能保證兼容移動端各種主流瀏覽器,微信端和webview上完美運行。
02
切圖期
一. css重置樣式
切圖前的準備工作,首先是切圖前要熟悉公司的重置樣式、公用樣式、公用庫等,因為這樣可以使你少寫代碼。由于不同的瀏覽器對于html標簽的解釋各不相同,重置css可以使得html標簽在各個瀏覽器下產生相同的表現效果,最簡單的說法就是把瀏覽器提供的默認樣式覆蓋掉!這就是CSS reset。
例如
對常用標簽的樣式進行重置:
▲重置樣式按屬性可以分為物理性css和功能性css。
物理性css包含了寬高、字體、顏色、邊距等常規(guī)通用屬性樣式。
功能性css類似于js的模塊化,可以多場景復用的樣式。
例如
二. 命名書寫規(guī)范
CSS書寫規(guī)范使用CSS縮寫屬性:比如padding,margin,font等,按照上、右、下、左順時針順序書寫。這樣精簡代碼同時又能提高用戶的閱讀體驗。
三.CSS命名規(guī)范
1. 語義化:“help-guest-regist” 就是 “幫助-顧客-注冊”
*出現率高的做成基類+擴展類 :class="m-list m-list-1” class="u-btn u-btn-hover”
*相同語義的不同類命名 —可直接加數字或字母區(qū)分 .m-list-1.m-list-2
2. 長名稱或詞組可以使用中橫線來為選擇器命名
3. 不建議使用“_”下劃線來命名CSS選擇器
*比如使用_tips的選擇器命名,在IE6是無效的
*能良好區(qū)分Java變量命名(JS變量命名是用“_”)
四.切圖質量標準
切圖質量的好壞可以從如下幾個方面來判斷:
? 業(yè)務角度:制作完的HTML網頁還原度高,甚至做到像素級還原;
? 技術角度:圖片體積小(減少網絡傳輸)、圖片數量少(減少請求數量);
? 配合角度:便于后續(xù)制作HTML,特別是制作自適應屏幕的網頁。
一般來說,圖片總是比字符形式的HTML/CSS體積大,因此總體原則是能用HTML/CSS實現的就不切圖。
常見的比如:
1.純色背景色:用CSS2的background-color來實現;
2.漸變背景色:用background-image配合CSS3的漸變屬性(線性漸變linear-gradient、徑向漸變radial-gradient)來實現;
3.邊框顏色:用CSS2的border-color來實現,另外邊框線型可以用border-style實現,如果邊框顏色特別花哨甚至有精妙的圖案,那就只能用圖片加border-image來實現;
4.背景投影/陰影:用CSS3的box-shadow實現,可以實現不同樣式顏色的陰影;
5.橢圓等不規(guī)則圖形:這個難度相對較大,用CSS3的圓角(border-radius)、變換(transform)來實現,當然我個人對于一些圖標喜歡用SVG來做,SVG的語法和CSS、HTML極其類似,入門學習(點擊直達)https://w3school.com.cn/svg一小時左右即可。
五.圖片格式的選擇
常見的網絡圖片格式有:JPG/JPEG、GIF、PNG、SVG,對于這些圖片格式的比較如下表(每種格式不考慮同種格式版本的差異):
以下是自身從實踐中總結的幾個要點:
1.logo統(tǒng)一切成png透明度的。
2.一般情況下臨時圖、ad、banner圖用jpg格式,色彩豐富的、大圖切成jpg。
3.在保證圖片的畫質情況下,圖片的大小越小越好。
4.顏色較少的都用png,用png8還是png24需看圖片具體透明底情況,半透明的切成png24。
5.尺寸小的,色彩不豐富的和背景透明的切成gif或者png8的。
(IE6不支持PNG24透明度圖片,需做兼容處理或切成PNG8)
6.PS中裁剪完成后ctrl+shift+alt+s 進行保存為web可用格式。
7.一般來說SVG格式的體積最小,但是IE僅IE9及以上原生支持。
上述原則有時候不能一概而論,經常需要把圖片存成多種格式、多種顏色位數進行實際比較,在色彩和體積之間找到一個平衡點,其中每張圖片盡量不要大于100kB。
六.css雪碧圖
從網頁體積來看,切圖必然是切得小一些更好,比如能切1像素寬然后repeat的,就不要切出一長條。重復的圖形能切一個循環(huán),就不要切n個循環(huán)。圖片越小,存儲量越小,對網絡的負擔也相應會小。
但是如果一堆小圖片在一個網頁中加載,會產生大量的HTTP請求,從而拖慢網頁加載速度,這時候就需要考慮把小圖片合并為大圖片,只進行一次加載,可以有效的減少http請求數量,加速內容顯示,從而提高效率。
所謂css sprite,就是把網頁中一些零星背景圖片整合到一張圖片文件中,再利用CSS的背景圖片定位(background-position:x定位點 y定位點)到要顯示的位置,因此也叫“圖片拼合”技術。
如:.div{ background:url(abc.jpg) no-repeat -30px -50px;}。
具體怎么切,其實還需要看網頁布局,因此切圖和HTML靜態(tài)頁面制作不能割裂開來,否則切但的圖和靜態(tài)頁面不在一個頻道上,會導致返工。
在此推薦一款工具自動生成sprite:TexturePackerGUI,可以快速拼合出雪碧圖,并且生成出對應css,使用非常方便。
03
動畫交互期
高性能移動Web相較PC的場景需要考慮的因素也相對更多更復雜,總結為以下幾點:流量、功耗與流暢度。
在PC時代我們更多的是考慮體驗上的流暢度,而在移動端本身豐富的場景下,需要額外關注對用戶基站網絡流量使用的情況,設備耗電量的情況。
關于流暢度,主要體現在前端動畫中,在現有的前端動畫體系中,通常有兩種模式:JS動畫與CSS3動畫。JS動畫是通過JS動態(tài)改寫樣式實現動畫能力的一種方案,在PC端兼容低端瀏覽器中不失為一種推薦方案。
而在移動端,我們選擇性能更優(yōu)瀏覽器原生實現方案:CSS3動畫。
▲CSS3中的三種動畫:
1.tranform形變動畫:2d轉換。
2.transition緩動動畫:property duration timing-function delay(css過渡,使變化以漸變形式呈現)。
3.animation逐幀動畫:KeyframesName duration timing-function delay iteration-count direction play-state fill-mode(引用關鍵幀,并設計動畫時間,@keyframes:css動畫關鍵幀為動畫設計過渡畫面)。
要對一個dom進行2d轉換,比如放大縮小、平移、旋轉,就可以使用transform屬性,transform可以設置的變形有:scale(放大縮?。?translate(平移),rotate(旋轉),skew(斜切,即扭轉),matrix(以像素精度控制變形效果)。
例如
div { transform:scale(2,4) translate(20px,20px) rotate(30deg); }
要對一個變形進行過度漸變處理,就可以使用transition屬性。transition屬性聲稱任何css屬性都可以過度處理(過度對象設置為all),但實際引用中需要測試。例如對上例的變形進行過度處理:div{ transition:transform 2s; }
▲transition的優(yōu)點在于簡單易用,但是它有幾個很大的局限:
1.transition需要事件觸發(fā),所以沒法在網頁加載時自動發(fā)生。
2.transition是一次性的,不能重復發(fā)生,除非一再觸發(fā)。
3.transition只能定義開始狀態(tài)和結束狀態(tài),不能定義中間狀態(tài),也就是說只有兩個狀態(tài)。
4.一條transition規(guī)則,只能定義一個屬性的變化,不能涉及多個屬性。
所以,CSS Animation就是為了解決這些問題而提出的,結合關鍵幀@keyframes和animation屬性,
例如
div{ animation:myfirst 2s;}
@keyframes myfirst{
0%{background:red;}
50%{background:blue;}
100%{background:yellow;}
}
在此推薦一款強大的預設css3動畫庫:Animate.css。內置預設了豐富的css3動畫效果,使用引入也非常方便,可以基本滿足日常需求并且快速制作出理想的動效。
完成以上3個階段的工作,整個切圖的骨架基本思路就已經完成啦,剩下的就是在實踐過程中不斷的添磚加瓦,結合項目的具體需求,搭建起前端開發(fā)的堅實地基吧!如果你也想成為月入過萬的web前端工程師,點擊閱讀原文趕快報名達內web前端免費訓練營~
達內web前端免費訓練營:專為零基礎、跨行人員設置的HTML基礎、CSS基礎、Java基礎,特別適合意圖在互聯網時代,通過掌握技術快速實現自己高薪夢想的學員,如果你也想加入高薪一族,點擊“閱讀原文”報名達內2017年4月份免費課程~,就有機會獲得達內精品免費在線學習(TMOOC.CN)會員卡哦~名額有限,先報先得!給自己一個接觸互聯網高薪技術的機會。
達內上市集團
40萬學員的共同選擇
QQ咨詢:2421473554
評論列表