Bootstrap - Masonry Demo

Bootstrap Masonry 介紹

各位有志於網頁開發的同學們,大家好!今天我們要一起進入 Bootstrap Masonry 的精彩世界。作為你們親切的鄰居電腦老師,我非常高興能夠帶領大家走過這個旅程。即使你從未寫過一行代碼,也不用擔心——我們會一步步來,很快你就能像專業人士一樣創建有吸引力、動態的佈局!

Bootstrap-Masonry Demo

Bootstrap Masonry 是什麼?

Bootstrap Masonry 是一種強大的佈局技術,讓你可以創建有不同高度的元素網格。想像一下一堵由不同大小的磚塊完美組合的牆——這就是 Masonry 的精髓!它特別適用於創建圖片庫、作品集或任何你想要整齊、有組織外觀而不浪費空間的內容。

Bootstrap Masonry 入門

建立專案

在我們深入研究代碼之前,讓我們先設定我們的專案。我們需要在 HTML 文件中包含 Bootstrap 和 Masonry 圖書。別擔心這聽起來有點混亂——我會在過程中解釋每一部分。

<!DOCTYPE html>
<html lang="zh-tw">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Bootstrap Masonry Demo</title>
<link href="https://cdn.jsdelivr.net/npm/[email protected]/dist/css/bootstrap.min.css" rel="stylesheet">
</head>
<body>
<!-- 我們的內容將放在這裡 -->

<script src="https://cdn.jsdelivr.net/npm/[email protected]/dist/js/bootstrap.bundle.min.js"></script>
<script src="https://cdn.jsdelivr.net/npm/[email protected]/dist/masonry.pkgd.min.js"></script>
</body>
</html>

讓我們來分析一下:

  1. 我們從基本的 HTML 構架開始。
  2. <head> 標籤中,我們鏈接到 Bootstrap 的 CSS 文件。
  3. <body> 标籤底部,我們包含了 Bootstrap 和 Masonry 的 JavaScript 文件。

這些文件給我們提供了創建 Masonry 佈局所需的工具。

創建你的第一個 Masonry 佈局

現在,讓我們創建一個簡單的 Masonry 佈局,有一些彩色盒子。我們將這段代碼添加到 <body> 標籤中:

<div class="container my-5">
<div class="row" data-masonry='{"percentPosition": true }'>
<div class="col-sm-6 col-lg-4 mb-4">
<div class="card bg-primary text-white">
<div class="card-body">
<h5 class="card-title">Box 1</h5>
<p class="card-text">這是一個短的盒子。</p>
</div>
</div>
</div>
<div class="col-sm-6 col-lg-4 mb-4">
<div class="card bg-success text-white">
<div class="card-body">
<h5 class="card-title">Box 2</h5>
<p class="card-text">這個盒子有點高。Masonry 將會調整!</p>
<p class="card-text">看它如何恰如其分地嵌入。</p>
</div>
</div>
</div>
<!-- 在這裡添加更多的盒子 -->
</div>
</div>

讓我們來分析一下:

  1. 我們創建了一個容器,裡面有一個行。
  2. data-masonry='{"percentPosition": true }' 屬性告訴 Bootstrap 對這一行使用 Masonry 佈局。
  3. 每個盒子都是一個列(col-sm-6 col-lg-4),裡面有一個卡片。
  4. 我們使用不同的背景顏色(bg-primarybg-success)來讓我們的盒子在視覺上有所區分。

自定義你的 Masonry 佈局

現在我們有了基本的佈局,讓我們探索一些自定義的方法。

添加不同大小的元素

Masonry 的美妙之處在於它如何處理不同大小的元素。讓我們添加一些內容不同的盒子:

<div class="col-sm-6 col-lg-4 mb-4">
<div class="card bg-warning">
<div class="card-body">
<h5 class="card-title">Box 3</h5>
<p class="card-text">這是一個非常高的盒子!</p>
<p class="card-text">它有大量的內容。</p>
<p class="card-text">Masonry 將確保它完美地嵌入。</p>
<p class="card-text">無論它多高。</p>
</div>
</div>
</div>
<div class="col-sm-6 col-lg-4 mb-4">
<div class="card bg-info">
<div class="card-body">
<h5 class="card-title">Box 4</h5>
<p class="card-text">回到一個短的盒子。</p>
</div>
</div>
</div>

在你的 Masonry 佈局中添加圖片

Masonry 非常適合圖片庫。讓我們在我們的佈局中添加一些圖片:

<div class="col-sm-6 col-lg-4 mb-4">
<div class="card">
<img src="https://picsum.photos/300/200" class="card-img-top" alt="Random image">
<div class="card-body">
<h5 class="card-title">Image Card</h5>
<p class="card-text">這張卡片有一張圖片。</p>
</div>
</div>
</div>

這段代碼添加了一個帶有 Lorem Picsum 隨機圖片的卡片。圖片將以 300x200 像素的尺寸加載,但你可以調整這些數字以獲得不同大小的圖片。

高級技巧

過濾 Masonry 項目

我們可以添加的一個很酷的功能是過濾 Masonry 項目。讓我們添加一些分類按鈕並給我們的項目分配分類:

<div class="container my-5">
<div class="mb-3">
<button class="btn btn-primary filter-btn" data-filter="all">全部</button>
<button class="btn btn-secondary filter-btn" data-filter="category1">分類 1</button>
<button class="btn btn-secondary filter-btn" data-filter="category2">分類 2</button>
</div>
<div class="row" id="masonry-grid" data-masonry='{"percentPosition": true }'>
<div class="col-sm-6 col-lg-4 mb-4 masonry-item" data-category="category1">
<!-- 項目內容 -->
</div>
<div class="col-sm-6 col-lg-4 mb-4 masonry-item" data-category="category2">
<!-- 項目內容 -->
</div>
<!-- 更多項目... -->
</div>
</div>

為了讓這個功能工作,我們需要添加一些 JavaScript:

<script>
document.addEventListener('DOMContentLoaded', function() {
var grid = document.querySelector('#masonry-grid');
var msnry = new Masonry(grid, {
percentPosition: true
});

var filterButtons = document.querySelectorAll('.filter-btn');
filterButtons.forEach(function(button) {
button.addEventListener('click', function() {
var filterValue = this.getAttribute('data-filter');
var items = grid.querySelectorAll('.masonry-item');

items.forEach(function(item) {
if (filterValue === 'all' || item.getAttribute('data-category') === filterValue) {
item.style.display = 'block';
} else {
item.style.display = 'none';
}
});

msnry.layout();
});
});
});
</script>

這段腳本做了以下事情:

  1. 在我們的網格上初始化 Masonry。
  2. 為我們的分類按鈕添加點擊事件监聽器。
  3. 當按鈕被點擊時,它會根據分類顯示/隱藏項目。
  4. 過濾後,它調用 msnry.layout() 重新排列可見的項目。

結論

恭喜你!你剛剛創建了你自己的第一個 Bootstrap Masonry 佈局。從基本的網格到進階的過濾,你現在有了創建有吸引力、響應式佈局的工具,這將使你的網頁頁面脫穎而出。

記住,精通網頁開發的關鍵是練習。嘗試不同的內容、佈局和功能。不要害怕弄壞東西——這通常是我们在編程中學到最有價值課程的方式。

繼續建設,繼續學習,最重要的是,享受其中的樂趣!在你意識到之前,你將會創建有會讓最熟練的石匠都會嫉妒的網頁佈局。快樂編程!

方法 描述
Masonry(element[, options]) 在元素上初始化 Masonry
msnry.layout() 在進行更改後觸發佈局
msnry.appended(elements) 添加並佈局新追加的元素項目
msnry.prepended(elements) 添加並佈局新前置的元素項目
msnry.destroy() 完全移除 Masonry 功能

Credits: Image by storyset