也來談談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
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...