2016年2月17日 星期三

OOCSS - 以 SASS 開發為例

  1. 什麼是 OOCSS?
    1. Object Oriented CSS” (物件導向的 CSS)
    2. OOCSS 是一種哲學,透過模組化、可重複使用性,一定程度上解決了專案越來越複雜難以維護的問題。
    3. 重點在於可利用性,OOCSS 並不是新的語言或是框架,它是一種撰寫 CSS 的方法,可減少 CSS 代碼,達到優化效能的作用。
  2. 兩大原則
    1. Separate Structure and Skin,結構外觀分離 (size v.s. color)
    2. // size + color
      #button 
          width: 200px
          height: 50px
          padding: 10px
          border: solid 1px #ccc
          background: linear-gradient(#ccc, #222)
          box-shadow: rgba(0, 0, 0, .5) 2px 2px 5px
      
      #box
          overflow: hidden
          width: 400px
          border: solid 1px #ccc
          background: linear-gradient(#ccc, #222)
          box-shadow: rgba(0, 0, 0, .5) 2px 2px 5px
      
      #widget
          overflow: auto
          width: 500px
          min-height: 200px
          border: solid 1px #ccc
          background: linear-gradient(#ccc, #222)
          box-shadow: rgba(0, 0, 0, .5) 2px 2px 5px
      // size
      .button 
        width: 200px
        height: 50px
      
      .box 
        width: 400px
        overflow: hidden  
      
      .widget 
        width: 500px
        min-height: 200px
        overflow: auto
      
      // color
      .skin 
        border: solid 1px #ccc
        background: linear-gradient(#ccc, #222)
        box-shadow: rgba(0, 0, 0, .5) 2px 2px 5p
    3. Separate Container and Content,容器內容分離 (container v.s. content)
      • 避免樣式依賴位置。
      • 把容器和內容獨立出來,好處是相同內容可以任意插入到任何容器中。
      • 為了讓內容可重用,OOCSS 主張在內容中添加更多的 Class。
      <!-- 一般的做法:樣式相依於結構,一定要 .friday 搭配子項目 .item 才會成立。 -->
      <div class="friday">
          <p class="item">
              <a>反向傘買一送一<span>$2980</span></a>
          </p>
      </div>
      
      <div class="fresh">
          <p class="item">
              <a>反向傘買一送一<span>$2980</span></a>
          </p>
      </div>
      
      <div class="newmodel">
          <p class="item">
              <a>反向傘買一送一<span>$2980</span></a>
          </p>
      </div>
      .friday .item 
          font-size: 1.2 em
          text-align: left
          margin: 10 px 0
          /*在內容新加的樣式*/ 
          width: 500 px 
          background-color: #efefef 
          color: #fff
      
      .fresh .item
          font-size: 1.2 em
          text-align: left
          margin: 10 px 0
          /*在內容新加的樣式*/ 
          width: 300 px 
          background-color: #c3c3c3 
          color: #000
      
      .newmodel .item
          font-size: 1.2 em
          text-align: left
          margin: 10 px 0
          /*在內容新加的樣式*/ 
          width: 200 px 
          background-color: #f1f1f1 
          color: #ccc
      <!-- OOCSS 的做法:下通用的基礎樣式,再添加 Class 擴展名稱將樣式抽出來。 -->
      <div class="friday">
          <p class="item item-friday">
              <a>反向傘買一送一<span>$2980</span></a>
          </p>
      </div>
      
      <div class="fresh">
          <p class="item item-fresh">
              <a>反向傘買一送一<span>$2980</span></a>
          </p>
      </div>
      
      <div class="newmodel">
          <p class="item item-newmodel">
              <a>反向傘買一送一<span>$2980</span></a>
          </p>
      </div>
      .item
          /*基礎內容樣式*/
          font-size: 1.2 em
          text-align: left
          margin: 10 px 0
      
      .item-friday
          /*在內容新加的樣式*/ 
          width: 500 px 
          background-color: #efefef 
          color: #fff
      
      .item-fresh
          /*在內容新加的樣式*/ 
          width: 300 px 
          background-color: #c3c3c3 
          color: #000
      
      .item-newmodel
          /*在內容新加的樣式*/ 
          width: 200 px 
          background-color: #f1f1f1 
          color: #ccc

  3. 命名建議
    1. 使用語意: 與其用 text-red, 不如用 text-danger
    2. 名稱擴展: 追加屬性時, 延伸原來的名稱, 例: .item 與 .item.item-firday (oocss)
    3. 顏色變數:
    $blue: #4183c4
    // Or
    $primary-color: #4183c4
    // Better
    $blue: #4183c4
    $primary-color: $blue
  4. 如何逐步提升可利用性、模組化 css 程式碼
    1. 分析網頁元素(HTML 語意化)
      • 語意化用途:
        不是給我們讀的,是給瀏覽器讀的,供裝置辨識的標籤。不用使用語意化寫法也寫得出網頁,但正確使用語意,讓瀏覽器能分辨出標題、內容、語氣、重要性。目前IE不支援,但加上一段JS可正常套用。
      • 語意化的必要性:
        正確的語意化寫法可以提高 SEO、語音瀏覽器、手機裝置的支援
      • 如何判斷適用的語意 TAG ?
        HTML5doctor 提供了一份流程圖 供你參考。
    2. 評估每次開發都會重複撰寫的相同內容
      • 命名原則(img、class)
      • 計算圖片寬高(MIXIN)
      • 設計常用排版屬性為class: pull-left , pull-right , clearfix...
    3. UI 元素整理(表格、選單、按鈕)
      • 整理出常用的UI元素
      • 表單按鈕
      • 多階層式選單
      • 麵包屑、網站導覽
      • 參考熱門前端框架(Bootstrap)
    4. 整理出常用 jQuery 熱門動畫特效
      • 圖片輪播動畫
      • TAB效果
      • 彈跳視窗
  5. 注意事項
    • 原則上不要使用 !important
    • 讓 css 不具相依性 (低耦合概念提升可利用性),另外不要直接用 tag 選擇器,會導致對元素依賴
    • 使用 absolute 之前,父元素設定 relative
  6. sublime plugin 開發輔助工具
  7. 總結
    • 兩大原則
      • 結構外觀分離
      • 容器內容分離
    • 找出重複結構 HTML ,分出容器與內容,依據不同頁面同結構不同長相,以 Class 名稱擴展方式來做外觀樣式。
    • 重點在於可利用性,OOCSS 並不是新的語言或是框架,它是一種撰寫 CSS 的方法,可減少 CSS 代碼,達到優化效能的作用。
  8. References:

2015年10月4日 星期日

第一次做迷宮就上手!

中秋節剩下好多月餅盒怎麼辦?
(你知道你把月餅都吃光光了好胖胖嗎QQ)
利用盒子變身成迷宮吧!

1. 準備材料:吸管、保利龍膠、彈珠、鉛筆、麥克筆、剪刀。


2. 裁一塊跟月餅盒大小一樣的厚紙板,
用厚紙板的話你可以設計好幾個迷宮,
方便置換。
(或者你要直接在月餅盒子底部直接製作迷宮也可以)


3. 設計迷宮路線。
首先用鉛筆畫出正確的起點到終點的路線,
再加上死路的路線,
設計好後在路線旁邊加上牆壁(粗麥克筆畫的粗線)
用保利龍膠塗在粗線上,
粘上吸管。


4. 製作起點、終點凹洞。
用美工刀割兩個小圓(不要割到底割表面就好)
割好後按下去(有一種按可樂杯蓋的快感XD)
就完成半凹洞了,
玻璃彈珠可以穩穩的坐在洞裡。


5. 放到盒子裡,大功告成!


2015年8月31日 星期一

Sublimerge


跟不同人不得已改同一支檔案如何合併檔案呢?
在 Windows 可能會使用 WinMerge
在 Mac 可以在 Sublime 裝 Sublimerge 這個外掛用看看

安裝完後重開,比對檔案時只要使用上下左右鍵就可以輕鬆合併檔案囉!



Installation

  1. Install the Package Control (if you haven't already)
  2. Open Command Palette ([ctrl]+[shift]+[p] on Windows and Linux, [cmd]+[shift]+[p] on Mac)
  3. Choose Package Control: Install Package
  4. Search for Sublimerge Pro and hit [Enter]
  5. Restart Sublime Text to complete the installation





Comparing local files

Please remember that if you want to compare two files, you can also select them in Side Bar and then use Sublimerge > Compare Selected Files command.




In files diff view

  • [/] - display Differences Navigator
  • [down] - select the next change (only single selection is possible)
  • [up] - select the previous change (only single selection is possible)
  • [left] - merge selected change(s) from right to left
  • [right] - merge selected change(s) from left to right
  • [shift]+[left] - merge all changes from right to left
  • [shift]+[right] - merge all changes from left to right
  • [ctrl]+[enter] - toggle edit mode (if available)


  • Enter Edit Mode 


  • Leave Edit Mode


2015年7月9日 星期四

chrome cast 錯誤


問題:嵌入 YouTube 影片網址,console 出現錯誤!
GET chrome-extension://eojlgccfgnjlphjnlopmadngcgmmdgpk/cast_sender.js net::ERR_FAILED


原因:沒裝 chrome cast 外掛。

解決方法:裝  google cast 外掛。


不裝就跑錯誤給你看也是蠻厲害的!


chrome cast 介紹:http://www.techbang.com/posts/14642-chromecast-evaluation
chrome cast 官網:https://www.google.com.tw/chrome/devices/chromecast/learn.html

2015年6月28日 星期日

如何留住人才

發現工程師流動率蠻高的
如果以正面思考的角度來看
可以建議公司做這樣的轉變~

1.公司資訊透明、公開、不保留,彼此站在同一陣線,知道為何而戰。
2.不加班文化,完善的福利制度,支持生活與工作平衡。
3.公司制度完備且運作順暢。
4.多看多聽多說並且知無不言,即便是激烈討論也是在溝通。
5.建立知識庫,讓同事間可以互相激勵、扶持、成長。
6.開放、活潑的辦公環境。
7.建立信用,不開芭樂票。
8.讓新人一起融入公司文化產生歸屬感。
9.薪資合理, 公司夠霸氣人才敢開敢給,訂定 KPI 定期調整合理薪資。

2015年5月28日 星期四

前端工程師心得筆記

前端工程師心得筆記

正式成為前端工程師滿一年,還記得從 UI 設計師轉換為 F2E,工作強度一下增強了好幾倍,每天下班回家躺在沙發上就睡著,而且到了下午很容易肚子餓。雖然每天都好忙好忙,但是過得非常充實,回顧這一年非常幸運有饅頭能適時提點,改變工作方式提升效率,不然很容易卡關卡很久+瞎忙一通。

最近開始跑步來紓解一下壓力,不過對陽光過敏實的我在非常討厭戶外運動,所以買了跑步機訓練一下耐力,目前跟前端算是偶爾撞個牆的撞牆期,每當問題解開一切就海闊天空的感覺還不錯,希望未來可以在這一條不歸路上一直堅持下去。

雖然一天工作有 8 個小時,預估工作時數時一天 6 小時就差不多了,有些人可能會是 5 小時或更少,一定要抓個緩衝時間,不然一個卡關很容易就GG了!

工作方式的改進方式:
  1. 預估時間 -(先了解不熟悉的技術,評估執行困難度)把學習時間加進去。
  2. 多看書
  3. 多分享

學習新技術的步驟:
  1. 找尋你的饅頭
  2. 對這個技術產生興趣
  3. 實作一些簡單的小程式。主要有兩個目的:一來可以瞭解這個技術實際運作的方式,二來可以明白這個技術的優缺點在哪裡。
  4. 分享技術 - 撰寫部落格文章、在公司舉辦內部教育訓練。
  5. 只有不斷向前,你才能在這個環境中生存下去!