也來談談wap端瀑布流佈局

来源:http://www.cnblogs.com/phillyx/archive/2016/08/26/5811608.html
-Advertisement-
Play Games

Definition 瀑布流佈局,在視覺上表現為參差不齊的多欄佈局,隨著頁面滾動條向下滾動,新數據不斷被載入進來。 瀑布流對於圖片的展現,是高效而具有吸引力的,用戶一眼掃過的快速閱讀模式可以在短時間內獲得更多的信息量,而瀑布流里懶載入模式又避免了用戶滑鼠點擊的翻頁操作。 瀑布流的主要特性便是錯落有致 ...


Definition

瀑布流佈局,在視覺上表現為參差不齊的多欄佈局,隨著頁面滾動條向下滾動,新數據不斷被載入進來。

瀑布流對於圖片的展現,是高效而具有吸引力的,用戶一眼掃過的快速閱讀模式可以在短時間內獲得更多的信息量,而瀑布流里懶載入模式又避免了用戶滑鼠點擊的翻頁操作。

瀑布流的主要特性便是錯落有致,於亂中見序,定寬而不定高的設計讓頁面區別於傳統的矩陣式圖片佈局模式,巧妙的利用視覺層級,視線的任意流動又緩解了視覺疲勞,同時給人以不拘一格的感覺,切中年輕一族的個性化心理。

ps:以上來自百度百科,說的挺有道理的。

最早採用此佈局的網站是Pinterest,逐漸在國內流行開來。

目前主流的佈局方式是以下三種:

  1. 傳統的多列浮動:如wap端天貓的搜索結果頁就是左右兩列浮動佈局
  2. 通過絕對定位的方式:如Pinterest。
  3. 使用css3實現。

本文重點討論的是第三種。

Origin

我組負責的搜索結果頁佈局是傳統的格子佈局,通過 ul>li.float[width:50%]*2 簡單代碼就可以滿足效果了。

不過,PM在橫向比較其他廠的設計後,堅決要求我們上瀑布流。

老早就有這個需求了,在我入職前老早就有了。因為開發進度等各種原因拖了下來,這次過完了818,又提了出來。前端不是什麼麻煩事,在和後端同學溝通後,這事就定了下來。

限於移動端的硬體性能,絕對定位實現瀑布流的方式首先就否了。

另外左右兩列的佈局,不利於數據的渲染。

一般搜索結果頁有列表和大圖兩種模式切換。

切換的樣式佈局可以通過css來控制(ps:具體的代碼就不貼了,可以參考現有的搜索結果頁),

後臺的模板渲染也只是一套,前端非同步載入新數據依然是一種數據就可以了。

如果是左右兩列的佈局,就麻煩多了

  • 首先列表佈局和大圖佈局各有一種樣式
  • 後臺的渲染模板也要有兩套,列表的data-module不變,大圖模式需要將dm奇偶數分開,然後各自再組成data-list去填充模板
  • 前端載入下一頁獲取的數據可以保持dm不變,不過需要通過js拆為兩個奇偶list
    這樣就背離了前後端分離的初衷,而且也加重了browser的負擔。
    因此,依然需要後臺去實現數據分拆,介面變更。
  • 這也就是瀑布流佈局一直拖著沒做的原因。

所以如果前端能實現,不需要多少的工作量,不增加其他童鞋的工作量,自然是皆大歡喜。

Fill the hole

1. 使用flex彈性佈局實現

ps:還不知道flex? 傳送門在這
使用flex-direction:column縱向排列的屬性 + flex-wrap:wrap超過高度換行的屬性來實現。

線上的可以參考這個網址

DEMO的代碼在這

截圖如下:

  • 看數字,很明顯是縱向排列,根本就是偽瀑布流佈局。
  • 很坑的是,高度要定死,要不DOM是不會換行的。
  • 另外載入新數據,高度需要重新計算,且整體的排列順序變掉了。依然是先占滿左列的空間,再折行。

如下圖,高度不變,增加DOM,變成四列了。




高度改變,變成這樣了




so,這種實現方式對單頁且對排序不敏感的需求適用或者對橫向佈局適用。

2. 通過collumn屬性來實現

css3中增加了一個新的屬性:column 來實現等高的列的佈局效果。該屬性有column-width寬度,column-count數量等,並且能根據視窗自適應。

DEMO代碼傳送門

該屬性的效果幾乎與上面的截圖等同,新增數據的效果也一樣

因此,該屬性並不適合瀑布流的格子佈局。

實際上,collumn比較適合文字內容的佈局,w3cScholl提供的就是文本佈局的慄子傳送門

我們來看看普通瀑布流佈局與css3實現的效果對比圖


無論是flex.collumn還是collumn都是以縱向展開、向右推進的形式來佈局的,並不是橫向平鋪佈局、向下推進的方式。其他的實現方式尚未找到,到這裡就走到了死衚衕了,所以還得使用最上面所說的左右兩列佈局來實現

3. 依然使用flex

佈局的傳統解決方案,基於盒狀模型,依賴 display屬性 + position屬性 + float屬性。

而現代特性的Flex佈局,可以簡便、完整、響應式地實現各種頁面佈局,那麼就用flex取代float來實現左右兩列的佈局。

具體的實現邏輯只能按照最上的分析了。
DEMO傳送門

end


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 一、抽象類 抽象類,只為繼承而出現,不定義具體的內容,只規定該有哪些東西 一般抽象類中只放置抽象方法,只規定了返回類型和參數 比如: 人 - 有吃飯,睡覺方法 男人 - 繼承人抽象類,必須實現吃飯,睡覺的方法主體 女人 - 繼承人抽象類,必須實現吃飯,睡覺方法的主體 抽象類中可以有普通屬性,通過子類 ...
  • HTML代碼: jquery代碼: 註:只要修改動畫時間就可以控制滾動的速度。 ...
  • 線上實例 使用方法 ...
  • 現象: 近期在微信中開發了一個電商的平臺,一切介面頁面處理完成後,正式佈置到公眾號,在公眾號上自定義菜單進行平臺時(如:.../index.html),發現了一個很有意思的問題:哪個頁面是從公眾號里點擊進入的平臺的,當切換一兩次頁面時,.../index.html這個頁面就切換不進了。 解決過程: ...
  • 享元模式 在JavaScript中,瀏覽器特別是移動端的瀏覽器分配的記憶體很有限,如何節省記憶體就成了一件非常有意義的事情。節省記憶體的一個有效方法是減少對象的數量。 享元模式(Flyweight),運行共用技術有效地支持大量細粒度的對象,避免大量擁有相同內容的小類的開銷(如耗費記憶體),使大家共用一個類( ...
  • 什麼是Ajax Ajax 是一種在無需重新載入整個網頁的情況下,能夠更新部分網頁的技術。 Ajax的全稱是Asynchronous JavaScript and XML,即非同步JavaScript+XML。它並不是新的編程語言,而是幾種原有技術的結合體。它由以下幾種技術組合而成,包括: HTML/X ...
  • 前言:找了上課時數據結構的教程來看,但是用的語言是c++,所以具體實現在網上搜大神的博客來看,我看到的大神們的博客都寫得特別好,不止講了最基本的思想和演算法實現,更多的是側重於實例運用,一邊看一邊在心裡隱隱歌頌大神的厲害,然後別人的厲害不是我的,所以到底看得各種受打擊+頭昏腦漲,寫這個系列是希望自己能 ...
  • 1.什麼是Code Mirror 最近做一個項目需要在網頁上實現一個代碼編輯器,支持語法高亮、自動縮進、智能提示等功能。發現Code Mirror剛好滿足所有需求。Code Mirror是由js寫的一款插件,其功能非常強大,用來實現網頁端代碼編輯器非常方便。如果想看效果圖,可移步到這裡 CodeOn ...
一周排行
    -Advertisement-
    Play Games
  • 示例項目結構 在 Visual Studio 中創建一個 WinForms 應用程式後,項目結構如下所示: MyWinFormsApp/ │ ├───Properties/ │ └───Settings.settings │ ├───bin/ │ ├───Debug/ │ └───Release/ ...
  • [STAThread] 特性用於需要與 COM 組件交互的應用程式,尤其是依賴單線程模型(如 Windows Forms 應用程式)的組件。在 STA 模式下,線程擁有自己的消息迴圈,這對於處理用戶界面和某些 COM 組件是必要的。 [STAThread] static void Main(stri ...
  • 在WinForm中使用全局異常捕獲處理 在WinForm應用程式中,全局異常捕獲是確保程式穩定性的關鍵。通過在Program類的Main方法中設置全局異常處理,可以有效地捕獲並處理未預見的異常,從而避免程式崩潰。 註冊全局異常事件 [STAThread] static void Main() { / ...
  • 前言 給大家推薦一款開源的 Winform 控制項庫,可以幫助我們開發更加美觀、漂亮的 WinForm 界面。 項目介紹 SunnyUI.NET 是一個基於 .NET Framework 4.0+、.NET 6、.NET 7 和 .NET 8 的 WinForm 開源控制項庫,同時也提供了工具類庫、擴展 ...
  • 說明 該文章是屬於OverallAuth2.0系列文章,每周更新一篇該系列文章(從0到1完成系統開發)。 該系統文章,我會儘量說的非常詳細,做到不管新手、老手都能看懂。 說明:OverallAuth2.0 是一個簡單、易懂、功能強大的許可權+可視化流程管理系統。 有興趣的朋友,請關註我吧(*^▽^*) ...
  • 一、下載安裝 1.下載git 必須先下載並安裝git,再TortoiseGit下載安裝 git安裝參考教程:https://blog.csdn.net/mukes/article/details/115693833 2.TortoiseGit下載與安裝 TortoiseGit,Git客戶端,32/6 ...
  • 前言 在項目開發過程中,理解數據結構和演算法如同掌握蓋房子的秘訣。演算法不僅能幫助我們編寫高效、優質的代碼,還能解決項目中遇到的各種難題。 給大家推薦一個支持C#的開源免費、新手友好的數據結構與演算法入門教程:Hello演算法。 項目介紹 《Hello Algo》是一本開源免費、新手友好的數據結構與演算法入門 ...
  • 1.生成單個Proto.bat內容 @rem Copyright 2016, Google Inc. @rem All rights reserved. @rem @rem Redistribution and use in source and binary forms, with or with ...
  • 一:背景 1. 講故事 前段時間有位朋友找到我,說他的窗體程式在客戶這邊出現了卡死,讓我幫忙看下怎麼回事?dump也生成了,既然有dump了那就上 windbg 分析吧。 二:WinDbg 分析 1. 為什麼會卡死 窗體程式的卡死,入口門檻很低,後續往下分析就不一定了,不管怎麼說先用 !clrsta ...
  • 前言 人工智慧時代,人臉識別技術已成為安全驗證、身份識別和用戶交互的關鍵工具。 給大家推薦一款.NET 開源提供了強大的人臉識別 API,工具不僅易於集成,還具備高效處理能力。 本文將介紹一款如何利用這些API,為我們的項目添加智能識別的亮點。 項目介紹 GitHub 上擁有 1.2k 星標的 C# ...