摘要:那我們來看一下這個首頁的布局是如何實現的為了實現全的覆蓋,第一個要做的就是設置的為,寬度的話,應為是自動全覆蓋,就無需多做設置。
我們就從Medium開始本文發表于前端觀察,最新改動可訪問我的博客或是相關Github Repo。
大家好,我是新人kalasoo,現在還處在“試用期”,作為一個自學出來的前端新手,能夠加入前端觀察實在是異常興奮。既然要一起來維護這個關于前端的博客,我一定會努力爭取我所寫的內容可以追上這里文章的質量水平。作為開始,我會做一個小小的系列來分析那些有名、特別、設計感十足或是交互體驗出眾的網站。同時我還會認真閱讀其前端代碼,為大家重現那些神奇的效果是如何實現的,當然也會盡我所知引用更多的資源來豐富內容。希望這個系列可以讓大家更加了解前端技術,同時也可以鍛煉我自己。
決定第一個來做這個網站的原因很簡單,那就是好看啊!由于Medium的出現嚴重影響改變了博客、發布平臺的風格以及編輯器等前端組建的設計,我們會分多期來分析各種細節是如何實現的。我們尤整體走向局部,所以我們先從整體布局來分析:
首頁布局以及大背景圖
網站背景Medium是由Twitter的聯合創始人:Evan Williams和Biz Stone創辦于2012年8月創辦的一個文章寫作、閱讀平臺。注意,我這里并沒有用很多網站上援引的博客平臺是因為Medium的出現塑造了一種新的社會化自我營銷渠道。在首頁引入的Welcome to Medium里,我們看到它的初衷是為了讓人們更好地寫作,但是作為Twitter的一個延伸,它依舊搭載在一個社交性很強的平臺之上。這也讓在Medium中寫作的人更愿意去分享、營銷、推廣自己的寫作內容,甚至成為一些知名Developers, Designers and even Managers的發布渠道。例如:Facebook的Product Design Director Julie Zhuo就曾經通過在Medium上發表文章來解釋Facebook為何revert掉在視覺層面上非常突出的新版界面。而更讓人覺得特別的是,每當我看到好的文章分享到twitter上時,都會有作者親自來favorite你的tweet,這簡直就是自我運營啊,有木有!
好啦,閑話說完,我們進入主題。
首頁布局大背景圖或是視頻,已經成為累當今服務性網站設計的一個趨勢,隨著網速越來越快、屏幕越來越大,一張巨幅首頁圖片無論從視覺沖擊力還是從性能上都已經不再是不可能實現的功能。那我們來看一下這個首頁的布局是如何實現的:
HTML:
::before::after::before......
CSS:
為了實現全window的覆蓋,第一個要做的就是設置html, body的height為100%,寬度的話,應為是自動全覆蓋,就無需多做設置。.container只是作為一個過度,同樣設置到100%的高度(這里我會暫時忽略除了layout之外的屬性設置)。
再深一層是便是.surface,除了再次繼承了滿高度、滿寬度外,還定義了box-sizing: border-box;,請移位MDN來理解。這里要注意它加了.suface:before, .surface:after的屬性,是為了自動生成clearfix的效果來阻止float溢出,但其實在這個首頁之中并沒有用到。
html, body, .container { height: 100%; } .surface {...} .surface:before, .surface:after { display: table; content: " "; } .surface:after { clear: both; }
在往里面的幾個.screen-content, .surface-content只是繼續控制高度,和一些默認背景顏色。直到下面這一層才定義了覆蓋整個背景大圖的屬性,而具體的背景圖片是只額姐加到了DOM的這個div里面(我想原因應該是有一些數據binding在里面,這樣好做更新):
.image-fill, { background-position: center; -webkit-background-size: cover; -moz-background-size: cover; -o-background-size: cover; background-size: cover; } .image-fill { background-color: rgba(0, 0, 0, 0.9); } .promo-fill { background-color: #000; }大背景圖
在這里,為了實現圖片可以滿背景覆蓋,最主要的一個元素就是background-size: cover;,這個屬性一共有以下幾個可能的值:
background-size:| | auto | cover | contain;
它們分別代表的意思是:
background-size: 50% | 120px | auto; 設置了背景圖片的寬度,高度則自動計算。默認的auto維持了背景圖原有的大小。
background-size: 50% auto; 同時強制定義了寬度和高度。
background-size: auto, auto, [...]; 定義給多個背景圖片(注意被一個定義會用逗號隔開,與auto auto并不是一個意思)。
background-size: cover; 這樣定義的背景圖片會被修改圖片大小(長寬比例不變),以確保剛剛好覆蓋整個Element。
background-size: contain; 背景圖片會被修改大小(長寬比例不變),以確保剛剛好被這個Element包裹在里面。
下面幾張圖分別展示了集中不同的情況:
當background-size設置為cover時,即使屏幕被拉窄拉寬,圖片依舊很好地覆蓋著整個屏幕(更多的比對還可以訪問MDN):
contain時,圖片長寬比并不發生變化,卻會被包在window里面:
50% 100%時,圖片長寬比按照設置的數值被拉伸:
注意,這里的背景圖片都是按照默認的會重復鋪排在x和y軸上,所以當背景圖不能覆蓋element的時候,便會出現重復的樣式。此外,background-position: center;也定義了圖片按照所屬element的中心位置來調整大小。
兼容性這樣圖片全頁面覆蓋的實現方法就說明完了,contain & cover屬性的兼容性如下:
Chrome 3.0+
Firefox 3.6 (1.9.2)+
IE 9.0+
Opera 10.0+
Safari 4.1+
如果為了實現同樣的效果,卻要面對恐怖的IE7/8,腫么破,請嘗試如下:
.background-cover { filter: progid:DXImageTransform.Microsoft.AlphaImageLoader( src="PATH_TO_BACKGROUND_IMAGE", sizingMethod="scale"); -ms-filter: progid:DXImageTransform.Microsoft.AlphaImageLoader( src="PATH_TO_BACKGROUND_IMAGE", sizingMethod="scale"); }
但是要小心,這個實現方法會使得起內部的鏈接點擊失效(請給我大MS 32個贊),而且這個實現的是background-size: 100% 100%的效果。或者可以通過jQuery (jquery.backgroundSize.js)來實現。
其他示例這里面是一些好看的大圖覆蓋的例子,但是并不是所有的頁面都是通過background-size來實現的:
http://www.whitmansnyc.com/
https://chrome.google.com/webstore/detail/momentum/laookkfknpbbblfpciffpaejjkokdgca?hl=en
http://quinntonharris.strikingly.com/
其實現方式其實是背景圖很大,大小設置為auto,而覆蓋效果則是通過設置外面一層的div大小來實現的。
http://www.lattrapereve.fr/
背景視頻大小是根據window大小的變化,用javascript來修改的。
下期預告下一期,我們會深入探討Medium上的側邊推進欄sidebar的實現,而這個推進效果其實有好多種不一樣的方法,有的可以在mobile上實現滑動效果,有的會有更好地兼容性。敬請大家期待。
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/87586.html
前端LeetCode刷題 下面是已刷的題目的目錄。GitHub:https://github.com/cunzaizhuy...每日打卡更新中,歡迎關注。 數組類 26 刪除排序數組中的重復項 27 移除元素 35 搜索插入位置 66 加1 80 medium 刪除排序數組中的重復項2 88 合并兩個有序數組 167 兩數之和II - 輸入有序數組 118 楊輝三角 169 easy 求眾數 1...
摘要:前端日報精選專題之跟著學節流冴羽的博客全家桶仿微信項目,支持多人在線聊天和機器人聊天騰訊前端團隊社區編碼的奧秘模塊實現入門淺析知乎專欄前端每周清單發布新版本提升應用性能的方法中文寇可往吾亦可往用實現對決支付寶的微信企業付款到零 2017-06-20 前端日報 精選 JavaScript專題之跟著 underscore 學節流 - 冴羽的JavaScript博客 - SegmentFau...
摘要:前端日報精選精讀與提案知乎專欄第期認識引擎記錄一次利用工具進行性能優化的真實案例簡書中的使用規則教程繼承的實現方法個人文章中文譯組件渲染性能探索個人文章周刊第期表單性能的改進實踐知乎專欄簡單可重用的圖表庫知乎專欄 2017-07-08 前端日報 精選 精讀 TC39 與 ECMAScript 提案 - 知乎專欄【第989期】認識 V8 引擎記錄一次利用 Timeline/Perform...
摘要:前端日報點關注,不迷路精選前端團隊工作流遷移記譯新語法私有屬性知乎專欄前端每周清單大前端技術生命周期模型發布面向生產環境的前端性能優化模塊實現入門淺析知乎專欄中文一個線下沙龍中國最大的前端技術社區單頁面博客從前端到后端基于 2017-06-13 前端日報 點關注,不迷路:-P 精選 ESLint v4.0.0 released - ESLint - Pluggable JavaScri...
閱讀 1972·2021-11-23 10:03
閱讀 4130·2021-11-22 09:34
閱讀 2466·2021-10-08 10:05
閱讀 2247·2019-08-30 15:53
閱讀 1686·2019-08-30 13:56
閱讀 1149·2019-08-29 16:52
閱讀 1102·2019-08-26 13:31
閱讀 3346·2019-08-26 11:45