🖥️ Learn CSS Grid the easy way | Kevin Powell
⚙️ 方法1
從攏統開始,除非需要特別指定,才處理特別之處,簡化設計。
- 
grid-template-columns.testimonial-grid { display: grid; gap: 1.5rem; grid-template-columns: repeat(3, 1fr); } - 
grid-template-rows盡量不用, 讓它自己長 (隱式網格,Implicit Grid Rows),簡化設計 - 
gapgrid-row-gap: 20px; grid-colume-gap: 10px; /* or */ gap: 20px 10px; /* Different row and column gaps */ /* or */ gap: 1.5rem; - 
span(在 grid item 上).grid-col-span-2 { grid-column: span 2; }<article class="testimonial grid-col-span-2 ..."> - 
處理特別的卡片,個別指定開始跟結束
.testimonial:last-child { grid-column-start: 4; grid-column-end: 5; grid-row-start: 1; grid-row-end: 3; /* or span 2 */ } /* or 縮寫 */ .testimonial:last-child { grid-column: 4 / 5; grid-row: 1 / 3; /* or 1 / span 2 */ } - 
media query (mobile first)
@media (min-width: 40em) {}表示當螢幕寬度大於或等於 40em 時套用樣式。這是使用min-width的情況。- 在 mobile-first 設計中,通常會使用 
min-width,因為一開始的樣式是針對較小的螢幕(例如手機)設計的,然後使用媒體查詢逐漸增加樣式以適應較大的螢幕。因此,一開始的樣式將不帶有媒體查詢,而後續的樣式將使用min-width來確保它們只在螢幕寬度超過特定值時套用。 
 - 
💪💪💪 Final
@media (min-width: 40em) { .grid-col-span-2 { grid-column: span 2; } .testimonial-grid { display: grid; gap: 1.5rem; grid-template-columns: repeat(4, 1fr); } .testimonial:last-child { grid-column-start: 4; grid-row: 1 / span 2; } } - 
🔥 使用 Tailwind CSS 達到同樣效果
<div class="grid-container grid grid-cols-1 gap-4 md:grid-cols-4"> <div class="itm border-2 md:col-span-2">1</div> <div class="itm border-2">2</div> <div class="ite border-2">3</div> <div class="ite border-2 md:col-span-2">4</div> <div class="ite border-2 md:col-start-4 md:row-span-2 md:row-start-1">5</div> </div> 
⚙️ 方法2
- 
grid-template-areasgrid-template-areas屬性用於定義 CSS Grid 的區域佈局。- 透過指定區域名稱,可以輕鬆地組態子元素的位置。
 - 在 
.testimonial-grid中,使用了五個區域名稱one,two,three,four,five來定義區域。 - 注意最後的分號🔥。
 
 - 
nth-child()這部分如果不設定,會錯位nth-child()是 CSS 選擇器中的一種,用於選擇父元素的特定子元素。- 在這裡,
.testimonial:nth-child(n)被用來選擇.testimonial元素中的第 n 個子元素,並且透過grid-area屬性指定它們在 grid 中的區域。 - 如果移除了 
.testimonial:nth-child(n)選擇器中的grid-area屬性,將會影響到 grid 的佈局。在這個特定的情境中,.testimonial-grid使用了grid-template-areas來定義區域佈局,而.testimonial:nth-child(n)選擇器被用來將特定的.testimonial元素放置到相應的區域。 - 如果省略了 
grid-area,.testimonial元素將不會被對應到指定的區域,而是預設將它們按照正常的流動放置在 grid 中。這可能會導致 grid 的佈局混亂,因為沒有確定每個 testimonial 應該放置在哪個區域。 - 簡而言之,
.testimonial元素的位置不再受到grid-template-areas的影響,它們將按照正常文檔流的方式排列。這可能會使得原本為每個 testimonial 定義的區域佈局失效,並可能造成不符合預期的外觀。 
 - 
grid-auto-columns讓 column 等寬,不然就會自然流動分配- 如果移除了 
.testimonial-grid中的grid-auto-columns屬性,則將影響到自動生成欄的寬度。在這裡,grid-auto-columns: 1fr;的設置表示自動生成的欄寬度均為 1fr。 - 如果省略了 
grid-auto-columns,則自動生成的欄將使用預設的欄寬度。這可能會影響到該 grid 的外觀,特別是當沒有明確定義欄寬度時,欄的寬度可能會被內容的寬度所影響。 - 簡而言之,
grid-auto-columns的存在有助於明確指定自動生成的欄的寬度,而省略它將使用默認值。具體影響取決於其他樣式規則和內容的特性,但在這個例子中,可能會導致 grid 的欄寬度不如預期。 
 - 如果移除了 
 - 
💪💪💪 Final
.testimonial-grid { display: grid; gap: 1.5rem; grid-auto-columns: 1fr; /* 🔥 */ grid-template-areas: 'one' 'two' 'three' 'four' 'five'; /* don't forget */ } .testimonial:nth-child(1) { grid-area: one; } .testimonial:nth-child(2) { grid-area: two; } .testimonial:nth-child(3) { grid-area: three; } .testimonial:nth-child(4) { grid-area: four; } .testimonial:nth-child(5) { grid-area: five; } @media (min-width: 50em) { .testimonial-grid { grid-template-areas: 'one one two five' 'three four four five'; } }