CSS Grid Layout Module 格線佈局 (3) Responsive Table 響應式表格應用

在響應式網頁設計中,常需要處理不同裝置間版面的切換,以表格為例:在桌機上用表格呈現內容,而在行動裝置上使用卡片式版面,這樣的設計優化能夠提升使用者在不同裝置上的瀏覽體驗。

為了達成這種優化,有以下幾種做法:

  1. 製作兩個版面,利用斷點來進行版面切換
  2. 製作一個共用版面,搭配 CSS Grid Layout 進行設計,在手機版時調整 <table> 的屬性,達成卡片的視覺效果

本篇介紹第二個做法,這麼做可以降低程式碼的複雜度,提升程式碼可重用性,專案維護性也較高。

廣告

CSS Grid 相關知識,可以參考 這篇文章

概念解析

使用 <table> 建立表格,在行動裝置斷點,將 <tr> 設定為 display: grid,利用格線系統達成卡片式版面

HTML

<table>
<thead>
<tr>
<th scope="col">#</th>
<th scope="col">Product</th>
<th scope="col">Ingredient</th>
<th scope="col">Price</th>
<th scope="col"></th>
</tr>
</thead>
<tbody>
<tr>
<td class="index">1</td>
<td class="product">Apple Juice</td>
<td class="ingredient">Apple, Sugar, Water</td>
<td class="price">$ 100</td>
<td class="add-btn">
<button type="button">Add</button>
</td>
</tr>

...

</tbody>
</table>

CSS

  • 設定斷點為 W768(Ipad)
  • 當螢幕視窗小於 768px,tbody > tr 設定為 display: gridtd 欄位利用格線系統排版
table {
width: 1000px;
max-width: 100%;
margin: 0 auto;
white-space: nowrap;
border-spacing: 5px;
}

@media screen and (max-width: 768px) {
thead {
display: none;
}
tbody > tr {
display: grid;
grid-gap: 0.5rem;
grid-template-columns: repeat(2, 1fr);
grid-template-rows: repeat(3, auto);
}
.index {
display: none;
}
.product {
justify-self: start;
margin-bottom: 0.5rem;
}
.ingredient {
grid-column: 1;
grid-row: 2;
justify-self: start;
}
.price {
grid-column: 1;
grid-row: 3;
justify-self: start;
align-self: center;
}
.add-btn {
grid-column: 2;
grid-row: 3;
justify-self: end;
align-self: center;
}
}

範例程式碼


參考資源:

https://adamlynch.com/flexible-data-tables-with-css-grid/
https://codepen.io/gilli/pen/QVaWGR

廣告
CSS Grid Layout Module 格線佈局 (2) Masonry 瀑布流應用 Javascript 常用陣列方法

評論

廣告
Your browser is out-of-date!

Update your browser to view this website correctly. Update my browser now

×