---
# System prepended metadata

title: 觀念/技巧/踩雷分享
tags: [styling]

---

# 觀念/技巧/踩雷分享

**目前公司專案都不會需要支援 IE，請放心使用最新技術**

#### 基礎排版＆文字

- 主流是使用 flex & grid 排版，請務必學會
- 使用 h1~h6 時，不要依賴預設的 styling，請務必 style 給好給滿
- 使用「position: absolute」時，一定至少要給「left,right」+「top,bottom」各一種
- 字體大小盡量不要使用 14 和 20 (微軟正黑體會破字)，但為了通用的話，還是使用 2 的倍數為佳
- line-height 1.618 為黃金比例
- RWD 切斷點
    * ~413 (非必要)
    * 414~767 (或直接 ~767)
    * 768~1023 (平板)
    * 1024~1279 (或直接 1024~)
    * 1280~ (非必要)
- 每個元素都應該要有自己的參考點，而非參考全螢幕（善用 div）
- inline layout 如果有不同元素，比如：文字+按鈕，請務必讓文字的 line-height 和按鈕同高

#### 跨瀏覽器處理
- safari 下的 linear-gradient 不要用 transparent 會變髒髒黑色，要用 rgba(255, 255, 255, 0)
- 手機版加上 -webkit-overflow-scrolling: touch; 會讓滑動比較順 **（2019-10 更新：最新版的 safari 已經預設了這個行為）**
- ios Safari: 點擊按鈕時會有延遲，那是因為為了偵測是否為 dbClick 事件，可以加上 touch-action: manipulation; 會讓在點擊按鈕時，無法啟用dbClick 縮放。
- transition clip-path 在 safari 上需補上 -webkit- (否則不會作用)
- ios 針對 input / textarea 這些會有預設「內陰影＆border-radius」，要拿掉就加上
```
-webkit-appearance: none;
-moz-appearance: none;
appearance: none;
border-radius: 0;
```
- 如果要「隱藏瀏覽器預設 scrollbar」，要記得 firefox 必須使用下面這行才有用（firefox 限定的）
```
scrollbar-width: none;
```

#### 踩雷注意
- 有 flex-box 的狀況下，button 盡量設定 display: block，不然他預設是 inline-block，在高度計算上會有問題（似乎是上下會各多 1px，且這個高度不會被算在 height 內）
- canvas 的寬高如果用 css 去 assign 會有失真問題，要真實寬高的話就直接在 canvas tag 上給 width, height
- 要在信件中插入 html 電子報的話，一律只能使用 inline-style，class 類的在用瀏覽器開啟 Gmail 信件瀏覽的狀況下，class 太多會全部被清掉（詳見電子報）
- 圖片 img 在手機版有 3D Touch 時，有 border-radius 的圖片經長按時會自動變方形 => pointer-events: none 可解（讓 event 在 img 外層） 
- Safari 會因為效能考量，使用 transform:translate @ css animation 時，並不會於 100% 時完整的移動到終點。
  > e.g.`
    @keyframes {
      0% {
        transform: translate(0px, 0px);
      }
      100% {
        transform: translate(0px, 100px);
      }
    }`
  > 這樣可能會讓最後的動畫結果停止於 translate(0px, 99.75px) 而有微小的像素差，要解決問題只能於 transitionend / animationend 時強制多上一層 `transfrom: translate(0, 100px) !important;` 於 css tree 並接受些許的抖動（？
- 手機版全螢幕問題，建議使用 `window.innerHeight` 來計算 vh，不要直接用 100vh，請參考 https://css-tricks.com/the-trick-to-viewport-units-on-mobile/

#### Tips 小技巧分享
- 讓 browser 能使用「hardware acceleration (硬體/GPU 加速)」，可以在 css 上套用「3D 效果」，就能達到加速（假設某些畫面的轉換有些卡頓時）。ex: transform: translateZ(0), perspective, 
- 動畫 transition 進場用 ease-out, 離開用 ease-in（更貼近真實世界的物理效果）
- 善用 grid-auto-flow + auto-fit 就能完美對齊左右排版 [參考文章](https://css-tricks.com/cool-little-css-grid-tricks-for-your-blog/?fbclid=IwAR0BmSxEh01E9FO_hs5VAuaCIeOV56rpmpew2tLfCIULT9ENL9lWlzZafpE)


###### tags: `styling`