整合營銷服務商

          電腦端+手機端+微信端=數據同步管理

          免費咨詢熱線:

          干貨來襲!web前端開發工程師必看之如何使用CSS3

          干貨來襲!web前端開發工程師必看之如何使用CSS3實現瀑布流效果?

          先,我們來看一下什么是瀑布流布局效果,比如電商網站 蘑菇街

          原理圖:

          在一個大盒子里,放置多個小盒子,小盒子的大小可以不一致,長短不一樣,呈現一種瀑布流的效果。

          使用CSS3S實現只需要如下4步:

          1. 準備圖片素材

          2. 書寫相應HTML結構

          3. 了解CSS 多欄(Multi-column) 屬性

          4. 使用CSS 多欄屬性完成瀑布流布局

          布流布局出來好多年了,剛出來時,一般都采用js來實現,涌現了很多比較好的js插件,例如:masonry.js、gridify.js等等。這里就不再詳說如何使用了,網上都能找到。今天討論的是純CSS實現瀑布流布局。

          一、多個列表并列的瀑布流布局法:

          這種布局方法非常簡單,就是將多個列表橫向排列,每個列表擁有的項都差不多。圖片寬度固定,高度自動撐起來。

          html:

          <div class="wrap">
          	<ul class="waterfall">
          		<li class="item"><img src="image/1.jpg"></li>
          		<li class="item"><img src="image/3.jpg"></li>
          		<li class="item"><img src="image/5.jpg"></li>
          		<li class="item"><img src="image/7.jpg"></li>
          		<li class="item"><img src="image/9.jpg"></li>
          	</ul>
          	<ul class="waterfall">
          		<li class="item"><img src="image/2.jpg"></li>
          		<li class="item"><img src="image/4.jpg"></li>
          		<li class="item"><img src="image/6.jpg"></li>
          		<li class="item"><img src="image/8.jpg"></li>
          		<li class="item"><img src="image/10.jpg"></li>
          	</ul>
          </div>
          

          css:

          .wrap{
          	display:flex;
          	justify-content: space-between;
          }
          .waterfall{
          	width:50%;
          }
          .waterfall .item img{
          	width:100%;
          }
          

          注:

          1、waterfall也可以浮動,wrap清除浮動,只要兩個列表在一行就行。

          2、每一塊 item 都是從上往下排列的,并不能實現從左往右,解決辦法是:在獲取數據時,需要將數據按奇偶進行分類顯示(假設顯示兩列,多列同理)。您可以定義兩個數組:listEven和listOdd,分別來接受獲取的數據的偶數項和奇數項,然后分別進行渲染。這里用VUE來演示:

          //假設res.data為ajax請求到的數據
          res.data.map(function(item,index){
          	index%2===0 ? that.listEven.push(item) : that.listOdd.push(item);
          })
          
          <div class="wrap">
          	<ul class="waterfall">
          		<li class="item" v-for="(item,index) in listEven" :key="'even'+index"><img :src="item"></li>
          	</ul>
          	<ul class="waterfall">
          		<li class="item" v-for="(item,index) in listOdd" :key="'odd'+index"><img :src="item"></li>
          	</ul>
          </div>
          

          3、這種布局方法,會有一個問題,如果item高度左右列相差很大,就會顯示有問題,如下圖,解決辦法給item一個max-height,超過圖片這個max-height就隱藏,此外,后臺在傳圖片時做裁切更好:

          css 瀑布流

          二、CSS3 column瀑布流布局法:

          CSS3 column多列可以非常輕松的實現瀑布流效果,它會自動將列表項分配到根據設置的列數當中去,先看下它的常用屬性:

          • column-count:列數 給waterfall加
          • column-width:列的寬度
          • column-gap:列之間的間隙
          • break-inside:avoid 禁止列表項斷裂,即左邊列表項的內容有可能跑到右邊的最上面 給item加

          html

          <ul class="waterfall">
          	<li class="item"><img src="1.jpg"></li>
          	<li class="item"><img src="2.jpg"></li>
          	<li class="item"><img src="3.jpg"></li>
          	<li class="item"><img src="4.jpg"></li>
          	<li class="item"><img src="5.jpg"></li>
          	<li class="item"><img src="6.jpg"></li>
          	<li class="item"><img src="7.jpg"></li>
          	<li class="item"><img src="8.jpg"></li>
          	<li class="item"><img src="9.jpg"></li>
          	<li class="item"><img src="10.jpg"></li>
          </ul>
          

          css

          .waterfall{
          	column-count:2;
          }
          .waterfall .item{
          	break-inside: avoid;
          }
          

          效果如下:

          css3瀑布流布局

          注:

          1、每一塊 item 都是從上往下排列的,并不能實現從左往右,第一種方法采用了奇偶兩個數組解決了,這個不好解決,如果帶有上拉加載,不確定總個數,就更不好解決了。

          2、item的上下間距盡量不要用margin,否則可能會出現下面這種情況,這是因為左列最后一個margin跑到右邊上面去了,改成padding即可,因為padding屬于item的內容,而break-inside: avoid則禁止item折斷:

          css3瀑布流布局

          三、CSS3 flex豎排瀑布流布局法

          CSS3的flex用法很多。大多數情況都是用來橫排,將塊狀容器顯示在一行,還有就是用來對其一行。但是,改變flex-direction就可以做到縱向排列。

          html

          <ul class="waterfall">
          	<li class="item"><img src="1.jpg"></li>
          	<li class="item"><img src="2.jpg"></li>
          	<li class="item"><img src="3.jpg"></li>
          	<li class="item"><img src="4.jpg"></li>
          	<li class="item"><img src="5.jpg"></li>
          	<li class="item"><img src="6.jpg"></li>
          	<li class="item"><img src="7.jpg"></li>
          	<li class="item"><img src="8.jpg"></li>
          	<li class="item"><img src="9.jpg"></li>
          	<li class="item"><img src="10.jpg"></li>
          </ul>
          

          css

          .waterfall{
          	/*flex-box*/
          	display: flex;
          	/*縱向排列*/
          	flex-direction: column;
          	/*換列*/
          	flex-wrap: wrap;
          	height: 100vh;
          }
          .waterfall .item{
          	width:50%;
          }
          

          注:

          1、flex-wrap: wrap 是為了讓item撐滿waterfall的時候換列(可以理解為換行)

          2、這里waterfall的height一定要寫,否則,waterfall隨著內容變多,不斷撐高也不會換列。

          3、waterfall的height要隨著item的數量變化而變化,否則,一列顯示不了就顯示兩列,兩列顯示不了就顯示三列,為了維持固定的列數,只能不斷升高waterfall的高度。

          4、flex-direction: column和flex-wrap: wrap可以合并為flex-flow: column wrap;

          5、與前面兩種方法一樣,這種方法仍然是不好解決從上往下排列而非從左往右排列的問題。

          總結:純CSS實現瀑布流,總有這樣或那樣的問題,最終還是要通過js來控制。如果對排序沒有要求的話,第二種方法還是比較好用的。純css實現瀑布流,大家還有什么好的方法,歡迎留言評論。關注IT學堂,會有更多驚喜哦!

          者:十三億少女的夢

          來源:CSDN

          原文:https://blog.csdn.net/qq_38187437/article/details/84673612

          版權聲明:本文為博主原創文章,轉載請附上博文鏈接!

          瀑布流,又稱瀑布流式布局。是比較流行的一種網站頁面布局,視覺表現為參差不齊的多欄布局,隨著頁面滾動條向下滾動,這種布局還會不斷加載數據塊并附加至當前尾部。最早采用此布局的網站是Pinterest,逐漸在國內流行開來。國內大多數清新站基本為這類風格。

          在css中,早已實現了瀑布流布局,這里用css做的一個瀑布流案例。廢話不多說,直接上代碼。

          <%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>

          <%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>

          <%

          String path=request.getContextPath();

          String basePath=request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";

          %>

          <!DOCTYPE html>

          <html lang="en">

          <head>

          <meta charset="UTF-8">

          <title>瀑布流模型</title>

          <style type="text/css">

          .masonry {

          -moz-column-count:3; /* 火狐 */

          -webkit-column-count:3; /* Safari 和 谷歌 */

          column-count:3;

          -moz-column-gap: 1em;

          -webkit-column-gap: 1em;

          column-gap: 1em;

          width: 80%;

          margin:1em auto;

          }

          .item {

          padding: 1em;

          margin-bottom: 1em;

          -moz-page-break-inside: avoid;

          -webkit-column-break-inside: avoid;

          break-inside: avoid;

          background: #b5ffa1;

          }

          //適應屏幕

          @media screen and (max-width: 800px) {

          .masonry {

          column-count: 2; // two columns on larger phones

          }

          }

          @media screen and (max-width: 500px) {

          .masonry {

          column-count: 1; // two columns on larger phones

          }

          }

          </style>

          </head>

          <body>

          <-- 這里是使用c標簽循環一個圖片列表,假設后臺數據已經寫好 -->

          <div class="masonry">

          <c:forEach items="${imgList}" var="other">

          <c:if test="${other !=null and other !='' }">

          <div class="item"><img style="width: 100%" src="${other}"/>

          </div>

          </c:if>

          </c:forEach>

          </div>

          </div>

          </body>

          </html>

          水平有限,僅供參考。

          ---------------------


          主站蜘蛛池模板: 国产成人精品一区二三区熟女| 亚洲av午夜精品一区二区三区| 麻豆视频一区二区三区| 国产在线精品一区二区高清不卡| 中文字幕一区二区精品区| 国产福利电影一区二区三区,日韩伦理电影在线福 | 国产乱码精品一区二区三| 亚洲高清一区二区三区电影| 人体内射精一区二区三区| 免费观看一区二区三区| 亚洲国产一区二区三区| 婷婷亚洲综合一区二区| 国产一区二区三区韩国女主播| 文中字幕一区二区三区视频播放 | 久久亚洲中文字幕精品一区四| 日本免费一区二区三区最新 | 久久毛片免费看一区二区三区| 成人免费一区二区无码视频| 亚洲愉拍一区二区三区| 国产精品视频一区二区猎奇| 麻豆AV无码精品一区二区| 亚洲AV无码一区二区三区人 | av在线亚洲欧洲日产一区二区| 波多野结衣中文一区| 日韩一区二区在线观看| 亚洲午夜精品第一区二区8050| 精品无码成人片一区二区| 亚洲乱码国产一区网址| 日韩国产一区二区| 精品一区二区三区在线观看| 成人精品视频一区二区三区| 日本大香伊一区二区三区| 亚洲AV午夜福利精品一区二区 | 亚洲av无码片区一区二区三区| 久久精品无码一区二区无码| 国产对白精品刺激一区二区| 日韩高清一区二区三区不卡| 日韩精品一区二区三区中文字幕| 精品国产日韩亚洲一区| 一区二区三区四区视频| 亚州AV综合色区无码一区|