知乎登錄/註冊頁之動態背景
知乎登錄頁的動態背景是使用particles.js庫實現的。
我把該部分的代碼單獨抽離出來,在codepen上進行了完全復現。背景色
知乎使用的背景顏色太淺了,我相信不止我一個人會認為是不是我的屏幕髒了?
我將css代碼中的background: #f7fafc替換成background: #6daeda後,效果就很明顯了:

particles元素
因為知乎是把particles.js作為背景展示的,所以設置了如下的css屬性:
#particles { position: absolute; top: 0; z-index: -1; width: 100%; height: 100%}
這裡用了絕對定位,並且把particles元素放到最底層。不過,我更傾向於把particles元素放到最頂層,但是不響應任何事件。看上去更好玩一些~
#particles { position: absolute; top: 0; z-index: 999; pointer-events: none; width: 100%; height: 100%;}

canvas畫布
particles元素下包含了一個canvas畫布,在css中設定了display屬性:
#particles canvas { display: block}
並且使用了行內css的方式設置了width和height均為100%:
<canvas class="particles-js-canvas-el" stylex="width: 100%;height: 100%;" width_="1423" height="810"></canvas>
在我的Chrome(54)和Firefox(50)環境下,canvas元素的默認display屬性值都是inline,那麼問題來了,為什麼這裡要設置canvas的顯示為block?
通過測試我們發現,去掉display: block後就會出現垂直滾動條,加上該css後就不會顯示垂直滾動條。
在stackoverflow中有如下解釋:
It』s because of the 1px borders on each side of the element.
100% + 2px border(s) != 100%.
如何解決高度100%的情況下仍然顯示滾動條的問題呢?有以下幾種方法:
- 使用calc()減去2px:
height: calc(100% - 2px); - 設置元素的display屬性值為block
display: block很明顯第一種寫法不如第二種寫法更簡約。
更多參考資料:
- html5-canvas-100-width-height-of-viewport
- html-css-remove-vertical-scroll-with-height-100
- Canvas should be display block to remove scrollbars
particlesJS參數
particlesJS完整參數見codepen,我把知乎登錄頁使用的參數和官方示例做了對比,主要改動部分如下:
- 修改粒子的 數量/顏色/大小,連接線的 距離/顏色/透明度/寬度


- 修改粒子移動的 速度/隨機性

- 設置 不開啟onhover和onclick事件

interactivity參數中還有一些不同,但是既然已經關閉了onhover和onclick事件,其他的參數設置與否都不起作用了。
總結
particles.js庫可以做出各種酷炫的效果,在知乎登錄頁面中,內容的優先順序要比背景的優先順序要高很多,如果背景太顯眼了反而會喧賓奪主。
更多酷炫particle.js示例,請點擊下述codepen鏈接:
- Official demo
- lightbulb + particles + blending mode
- Moar Plasma
- particles snow
?
推薦閱讀:
※Web網站優化基礎
※移動端手勢庫設計與實踐
※2017--年度個人總結
※一看就暈的React事件機制
※用工具沉澱技術積累
TAG:前端開發 |




