Wes Bos je poduzetnik i autor nekoliko tečajeva, među kojima je i ovaj o CSS Gridu. S obzirom da mi njegov stil podučavanja odgovara neke od tečajeva sam i kupio kako bi na strukturiran način saznao i naučio nešto novo.
Redovito ih se sjetim kada me netko od kolega pita za dobre online resurse, a prema njihovim pozitivnim reakcijama zaključio sam da bi bilo dobro nešto više o tome napisati i na blogu.
Jedan od tih tečajeva je CSS Grid koji je u potpunosti besplatan, a moguće ga je pronaći na adresi https://cssgrid.io/. Sastoji se od 25 videa tj. lekcija od kojih će svaka biti detaljnije pojašnjena u nastavku.
Prvi dio blog posta objavljen pod naslovom “Recenzija: CSS Grid by Wes Bos, 1. dio“.
11.) Spanning and Placing Cardio
U ovom dijelu tečaja cilj je ponoviti sve do sada obrađeno tj. samostalno napraviti primjer stranice sa zadanim rasmještajem elemenata.
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 |
<body> <div class="container"> <div class="item item1">1</div> <div class="item item2">2</div> <div class="item item3">3</div> <div class="item item4">4</div> <div class="item item5">5</div> <div class="item item6">6</div> <div class="item item7">7</div> <div class="item item8">8</div> <div class="item poop">💩</div> <div class="item item9">9</div> <div class="item item10">10</div> <div class="item item11">11</div> <div class="item item12">12</div> <div class="item item13">13</div> <div class="item item14">14</div> <div class="item item15">15</div> <div class="item item16">16</div> <div class="item item17">17</div> <div class="item item18">18</div> <div class="item item19">19</div> <div class="item item20">20</div> <div class="item item21">21</div> <div class="item item22">22</div> <div class="item item23">23</div> <div class="item item24">24</div> <div class="item item25">25</div> <div class="item item26">26</div> <div class="item item27">27</div> <div class="item item28">28</div> <div class="item item29">29</div> <div class="item item30">30</div> </div> <style> .container { display: grid; grid-gap: 20px; /* Make the grid 10 columns wide, every other taking up twice the free space */ /* Make the grid have 10 explicit rows, 50px high each */ /* With Item 1, start at col 3 and go until 5 */ /* With Item 2, start at col 5 and go until the end */ /* Make Item 5 double span 2 cols and rows */ /* Make Item 8 two rows high */ /* Make Item 15 span the entire grid width */ /* Make item 18 span 4 widths, but end 9 */ /* Make item 20 start at row 4 and go for 3 */ </style> </body> |
Ovdje je poželjno “izgubiti” nešto vremena i barem pokušati samostalno napraviti krajnje rješenje nego u startu gledati kako ti radi Wes Bos.
Krajnje rješenje izgleda kao u nastavku. Zakomentirani dijelovi su moji pokušaji prije nego sam ih ispravno napravio.
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 |
.container { display: grid; grid-gap: 20px; /* Make the grid 10 columns wide, every other taking up twice the free space */ /* grid-template-columns: repeat(10, auto 2fr); */ /* grid-template-columns: auto 2fr auto 2fr auto 2fr auto 2fr auto 2fr; */ grid-template-columns: repeat(5, 1fr 2fr); /* Make the grid have 10 explicit rows, 50px high each */ /*grid-template-rows: repeat(10, 50px); */ grid-template-rows: repeat(10, 50px); } /* With Item 1, start at col 3 and go until 5 */ .item1 { grid-column: 3 / 5; } /* With Item 2, start at col 5 and go until the end */ .item2 { grid-column: 5 / -1; } /* Make Item 5 double span 2 cols and rows */ .item5 { grid-column: span 2; grid-row: span 2; } /* Make Item 8 two rows high */ .item8 { grid-row: span 2; } /* Make Item 15 span the entire grid width */ .item15 { grid-column: 1 / -1; } /* Make item 18 span 4 widths, but end 9 */ .item18 { grid-column: span 4 / 9; } /* Make item 20 start at row 4 and go for 3 */ .item20 { grid-row: 4 / span 3; } |
12.) auto-fit and auto-fill
auto-fit i auto-fill koriste se za bolje upravljanje kolonama tj. stupcima grid-template-columns.
Na početku imam sljedeću situaciju
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 |
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <link rel="stylesheet" href="../assets/style.css"> <title>auto-fit and auto-fill!</title> </head> <body> <div class="container"> <div class="item item1">Item 01</div> <div class="item item2">Item 02</div> <div class="item item3">Item 03</div> <div class="item item4">Item 04</div> <div class="item item5">Item 05</div> <div class="item item6">Item 06</div> <div class="item item7">Item 07</div> <div class="item item8">Item 08</div> <div class="item item9">Item 09</div> <div class="item item10">Item 10</div> <div class="item item11">Item 11</div> <div class="item item12">Item 12</div> <div class="item item13">Item 13</div> <div class="item item14">Item 14</div> <div class="item item15">Item 15</div> <div class="item item16">Item 16</div> <div class="item item17">Item 17</div> <div class="item item18">Item 18</div> <div class="item item19">Item 19</div> <div class="item item20">Item 20</div> </div> <style> .container { display: grid; grid-gap: 20px; border: 10px solid var(--yellow); grid-template-columns: repeat(5, 100px); } </style> </body> </html> |
Na ekranu će to izgledati kao na slici ispod. Znači, imam pet kolona i višak praznog prostora sa desne strane ekrana. U slučaju kada znam kakav će sadržaj biti u svakoj koloni tj. kada znam koliko takvih kolona mi je potrebno da bi popunio cijeli red onda mogu koristiti nešto kao grid-template-columns: repeat(5, 100px).
Međutim ako nisam siguran kakav će mi biti sadržaj u svakoj koloni niti koliko njih mi je potrebno da popunim cijeli red, a ipak želim da cijeli red bude dinamički popunjen mogu koristiti npr. grid-template-columns: repeat(auto-fill, 100px) tj. grid-template-columns: repeat(auto-fit, 100px) i rezultat će biti sljedeći
Gledajući gornju sliku lako se može zaključiti da ne postoji razlika između auto-fit i auto-fill, međutim razlika postoji i može se vidjeti kada nema dovoljno kolona da popune cijeli red.
auto-fit završava red iza zadnje kolone – vidljivo po punoj okomitoj liniji na kraju zadnje kolone što označava explicit grid pojašnjen u prethodnom blog postu.
|
1 2 3 4 5 6 |
.container { display: grid; grid-gap: 20px; border: 10px solid var(--yellow); grid-template-columns: repeat(auto-fit, 100px); } |
auto-fill kreira prazne kolone u preostalom prostoru. U te je kolone moguće postaviti novi sadržaj.
|
1 2 3 4 5 6 |
.container { display: grid; grid-gap: 20px; border: 10px solid var(--yellow); grid-template-columns: repeat(auto-fill, 100px); } |
Npr. mogu dodati jednu kolonu u krajnji desni rub ekrana.
|
1 2 3 4 5 6 7 8 9 |
.container { display: grid; grid-gap: 20px; border: 10px solid var(--yellow); grid-template-columns: repeat(auto-fill, 100px); } .item4 { grid-column-end: -1; } |































