已經兩個月沒更新 blog 了,感覺再不寫都快忘光 hexo, Travis CI 跟 elasticsearch 的使用了,不過先前已經將大部分的工作都自動化了,所以現在省事很多,只要 git push 後沒出問題的話
最近一兩個月下來,本來有想說寫一下怎麼做 FB 產品目錄,不過感覺這個找相關文件看好像就好了,加上寫文章動力大減,就一直荒廢中,而工作也幾乎都是切版,套程式,雖然有花一點時間摸索一下 docker 跟 golang 可是礙於工作需完成的進度很趕,所以實在沒太多時間好好深入這兩個東西,覺得非常可惜!希望之後可以跟得上大家的進度,不要扯後腿。
之所以寫這篇只是記錄一下最近幾次的切版習慣跟用法,以及一些常用的 mixin 函式
SCSS 慣用目錄結構
雖然我是寫 scss 語法,可是我好像都把目錄命名成 sass,不曉得當初怎麼想的,反正就參考吧!
./sass ├── main.scss ├── modules │ ├── _common.scss │ ├── _component.scss │ ├── _mixins.scss │ ├── _normalize.scss │ └── _variables.scss └── partials ├── _auth.scss ├── _blog.scss ├── _button.scss ├── _category.scss ├── _footer.scss ├── _header.scss ├── _list.scss ├── _login.scss ├── _modal.scss ├── _order.scss └── _smartbanner.scss
|
主要就用 main.scss 來 import 其他檔案來編譯, modules 裡面放些比較通用的資源,如: normalize (不過有另外用 bootstrap 的話應該不用在 import 了)、網站 CSS 通用變數、mixin 函式等等,而另一個 partials 就可能依照頁面名稱、功能來撰寫相關 CSS
所以 main.scss 的檔案大概就只會像這樣,這裡我還多了 body 的樣式,主要是用來控制全站頁面 body 的 padding
@import 'modules/normalize'; @import 'modules/variables'; @import 'modules/mixins'; @import 'modules/common'; @import 'modules/component';
@import 'partials/button'; @import 'partials/list'; @import 'partials/smartbanner'; .... @import 'partials/login'; @import 'partials/modal';
body { padding-top: 70px; }
|
常用 mixin function
清除 float
後來少用了,大多用 flexbox 排版了
@mixin clearfix { &::after { content: ""; display: table; clear: both; } }
// 使用上 .my-container { @include clearfix; padding: 10px 20px; .... }
|
過長文字結尾省略
多行的用法不是每個瀏覽器都適用
@mixin ellipsis($line:1) { text-overflow: ellipsis; overflow: hidden;
@if $line == 1 { white-space: nowrap; } @else { display: -webkit-box; -webkit-line-clamp: $line; -webkit-box-orient: vertical; } }
// 使用上, 標題過長省略(一行), 描述第三行後省略 .card { .title { font-size: 1em; line-height: 1.4; width: 100%; @include ellipsis; } .description { font-size: .8em; line-height: 1.2; @include ellipsis(3); } }
|
容器, flexbox 排版(預設置中)
@mixin size($w, $h:$w, $bdrs:0) { width: $w; height: $h; border-radius: $bdrs; } @mixin flex($jc:center, $ai:center) { display: flex; justify-content: $jc; align-items: $ai; }
// 範例: 按鈕內文字置中 .redeem-btn { @include size(80, 50, 6); border: 1px solid #ccc; font-size: 1em; line-height: 1.3; @include flex; }
|
空背景
方便替換圖片
@mixin no-image-bg { background-color: rgba(255,255,255, .1); background-position: center center; background-repeat: no-repeat; background-size: cover; }
// 範例: 某封面圖 .cover { @include size(160, 120, 10); @include flex; @include no-image-bg; }
// HTML 內搭配背景圖片使用 <div class="cover" style="background-image:url('path-to-cover-image')"> <h3 class="title">封面標題</h3> </div>
|
RWD 使用
這個之前好像有寫過,這裡詳細列出
/* 尺寸變數 */ $desktop-lg-min: 1200px; $desktop-max: 1199px; $tablet-max: 991px; $mobile-max: 767px; $mobile-min: 480px;
@mixin lg-desktop { @media screen and (min-width: $desktop-lg-min) { @content; } }
@mixin desktop { @media screen and (max-width: $desktop-max) { @content; } }
@mixin tablet { @media screen and (max-width: $tablet-max) { @content; } } @mixin phone { @media screen and (max-width: $mobile-max) { @content; } } @mixin phoneV { @media screen and (max-width: $mobile-min) { @content; } }
// 使用範例 .swiper-slide { width: calc(33.33% - 10px);
@include tablet { width: calc(50% - 10px); }
@include phone { width: calc(75% - 10px); }
@include phoneV { width: 100%; } }
|
捲軸隱藏, 非支援所有瀏覽器
有時候覺得捲軸有點醜,可以在 Chrome 瀏覽器內隱藏起來,只是使用時要小心,使用者因此不曉得可以捲動,反而造成使用上的困擾
.my-dropdown-list { max-height: 300px; overflow-x: hidden; overflow-y: scroll;
&::-webkit-scrollbar { display: none; } }
|
另外最近幫網站切版,發現幾乎大量使用到 Swiper 這套件,而開始用這套件時,還是 3.4.2 版,而現在時過境遷,都更新到 4.0.1 版了,查閱的 API 資料也開始不適用了…感覺有點糟糕,要是全站套件更新,感覺是個大工程,只能先繼續使用舊版,而相關參數應該不會差太多,目前已知的是左右切換的按鈕參數寫法改變了
這裡也記錄一下最常用的幾個參數
// 必要 DOM <div class="swiper-container"> <div class="swiper-wrapper"> <div class="swiper-slide">Slide 1</div> <div class="swiper-slide">Slide 2</div> <div class="swiper-slide">Slide 3</div> .... </div>
<div class="swiper-button-prev"></div> <div class="swiper-button-next"></div> </div>
// JS new Swiper ('.swiper-container', { freeMode: false, freeModeSticky: false, freeModeMomentumRatio: 5, threshold: 50, slidesPerView: 'auto', spaceBetween: 30, paginationClickable: true, touchReleaseOnEdges: true, prevButton: '.swiper-button-prev', nextButton: '.swiper-button-next', breakpoints: { 991: { spaceBetween: 10, }, 1199: { spaceBetween: 15, } } });
|
freeMode
預設 false,如果設定成 tree, 在手機上滑動的時候,會非常平順,不過也不好定下來
freeModeSticky
在 free mode 下設定 true 好讓 slide 可以再鬆開滑動時,停在某一 slide 下
freeModeMomentumRatio
滑動釋放時的動量
threshold
行動裝置上, touch 時移動的容錯距離,在這範圍內不觸法 slider 滑動
slidesPerView
指定每一頁 slider 要放幾個,當有給定 swiper-slide 寬度時,使用 auto 可自行排序,但是畫面會等 js 處理
spaceBetween
每個 slide 中間的間距,在 slidesPerView
設定 auto 時,可以明顯感受出來
paginationClickable
顧名思義,當有 pagination 時,可點擊下方小圓點來切換
touchReleaseOnEdges
有點忘了當初為何有用這個,好像是可以讓滑到 slider 邊緣時,繼續滑動吧?!
breakpoints
很好用,但是不一定常用,用來指定在不同螢幕寬度下,要變化的參數
大概就先這樣吧!其實最近還有用到一個套件是 jquery.dotdotdot 的樣子,不過才剛使用沒多久,馬上就版本更新,害我後來想找舊版文件超難找,還好一開始有寫好一個版本可以參考,不然真的就 GG 了