CSS Grid Layout a komiks (vysvětluje kocour Barry)
() translation by (you can also view the original English article)
Ukazuje se, že CSS Grid se dá docela dobře využít pro rozvržení online komiksů, zvláště pokud chcete, aby vaše komiksy byly flexibilní. V tomto návodu použijeme kocoura Barryho a ukážeme si, jak vytvořit responsivní komiks.
Kocour Barry
Pro tento návod si vypůjčíme některé kresby z GraphicRiver; Sleepy Fat Cat je ve skutečnosti zobrazení písma, ale v podobě pěkné vektorové kočky – ideální pro naše komiksové demo!
Nastavte si prohlížeč
Nezapomeňte, že pro zobrazení CSS Gridu, budete potřebovat nejnovější funkce prohlížeče. Pokud používáte nepodporovaný prohlížeč, přečtěte si CSS Grid Layout: Rychlý průvodce. A tady vidíte, na čem budeme pracovat:
Celou ukázku najdete na CodePen. Je vidět, že reaguje na různé velikosti obrazovky.
1. Značky
Začneme rozložením HTML:
1 |
<section class="grid-1"> |
2 |
|
3 |
<div class="panel panel-title"> |
4 |
<h1>Barry’s Cushion</h2> |
5 |
<p>A tale of lethargy and soft furnishings</p> |
6 |
</div>
|
7 |
<div class="panel panel-1"></div> |
8 |
<div class="panel panel-2"></div> |
9 |
<div class="panel panel-3"> |
10 |
<p>“I should probably get up–things to do.”</p> |
11 |
</div>
|
12 |
<div class="panel panel-4"></div> |
13 |
<div class="panel panel-5"></div> |
14 |
<div class="panel panel-6"></div> |
15 |
<div class="panel panel-7"> |
16 |
<p>“Naaah.”</p> |
17 |
</div>
|
18 |
<div class="panel panel-8"></div> |
19 |
<div class="panel panel-9"></div> |
20 |
<div class="panel panel-copyright"> |
21 |
<p>Sleepy Fat Cat by messenj4h<br>© Copyright happily ever after <a href="https://webdesign.tutsplus.com">Envato Tuts+</a> |
22 |
</div>
|
23 |
</section>
|
Element <section>
použijeme pro naši mřížku a elementy <div class="panel">
jako položky mřížky.
Několik panelů obsahuje text, ale zbytek využijeme pro naše komiksové obrázky. Máme dvě možnosti: buď obrázky umístíme přímo do panelů, nebo je přidáme pomocí CSS. Já využiji druhou možnost, protože poskytuje snadnější kontrolu nad umístěním a změnou velikosti grafiky, ale dalo by se argumentovat tím, že vložené obrázky budou více přístupnější. Záleží na vás.
2. Základní styly
Nejprve dodáme styly, kterými nadefinujeme typografii a barvy:
1 |
/* basics */
|
2 |
body { |
3 |
background: #f8f7f2; |
4 |
padding: 0 10%; |
5 |
font: 100%/1.5 'Kalam', cursive; |
6 |
}
|
7 |
|
8 |
h1 { |
9 |
margin: 0; |
10 |
line-height: 1; |
11 |
padding: 10px; |
12 |
color: #251b19; |
13 |
}
|
14 |
|
15 |
p { |
16 |
margin: 0; |
17 |
padding: 10px; |
18 |
color: #251b19; |
19 |
font-size: 1.2em; |
20 |
|
21 |
a { |
22 |
color: #e56633; |
23 |
}
|
24 |
|
25 |
a:hover { |
26 |
text-decoration: none; |
27 |
}
|
Pro text jsem zvolil webové písmo Kalam od Googlu. Je psané rukou a počítám, že se bude skvěle hodit pro náš komiks. Font se připojí v CSS souboru, nebo prostřednictvím odkazu v hlavičce dokumentu:
1 |
<link href="https://fonts.googleapis.com/css?family=Kalam" rel="stylesheet"> |



3. Naše mřížka
Začneme rozvržením pro mobilní zařízení. Rozvrhneme si prvky do jednoho sloupce s jediným panelem na každém řádku:
1 |
.grid-1 { |
2 |
display: grid; |
3 |
width: 100%; |
4 |
max-width: 770px; |
5 |
margin: 10% auto; |
6 |
grid-template-columns: 1fr; |
7 |
grid-template-rows: auto 200px 200px auto 200px 200px 200px auto 200px 200px auto; |
8 |
grid-gap: 25px; |
9 |
}
|
Při pohledu na náš dřívější tutoriál o Gridu si vzpomenete, že grid-template-columns
definuje, kolik budeme mít sloupců a jak budou široké. grid-template-rows
dělá totéž pro řádky. V našem příkladu jsem jich nadefinovali jedenáct Řádky s obrázky budou 200px vysoké a řádky s textem budou měnit velikost automaticky podle obsahu. Nakonec grid-gap
definuje velikost okraje.
Teď přidáme některé obecné styly pro naše panely:
1 |
.panel { |
2 |
color: white; |
3 |
background-repeat: no-repeat; |
4 |
background-position: center center; |
5 |
background-size: cover; |
6 |
box-shadow: 0px 0px 0px 5px #251b19; |
7 |
}
|
Vlastnosti background
zatím nemají žádný vizuální dopad, ale budou, jakmile přidáme obrázky. box-shadow
se chová jako ohraničení. Pokud chcete, můžete použít tradiční border
, ale box-shadow je flexibilnější.
Podívejme se, co zatím máme!
4. Obrázky kočky
Pro co jiného byl Internet stvořen, že? Připravil jsem pár SVG obrázků a jeden po druhém je přidám do panelů:
1 |
.panel-1 { |
2 |
background-image: url(cat-1.svg); |
3 |
}
|
Vypadá to dobře!
Ale nechci ohraničení kolem všech panelů. Odeberu je (pomocí box-shadow: none;
) od těch, které obsahují text. Tedy od prvního a posledního obrázku.
5. Media Queries
Obrázky zatím nefungují úplně dokonale. Chudák starý Barry je špatně oříznut. Je na čase podívat se za hranice mobilních zařízení a změnit naši mřížku pro větší zobrazení. Přidáme media queries, jeden na 400px a jeden na 600px (můžete použít libovolná čísla, pokud chcete):
1 |
/* media query 1 */
|
2 |
@media only screen and (min-width: 400px) { |
3 |
|
4 |
}
|
5 |
|
6 |
/* media query 2 */
|
7 |
@media only screen and (min-width: 600px) { |
8 |
|
9 |
}
|
Pro každou definici pak změníme rozložení mřížky.
1 |
/* media query 1 */
|
2 |
@media only screen and (min-width: 400px) { |
3 |
|
4 |
.grid-1 { |
5 |
grid-template-columns: repeat(2, 1fr); |
6 |
grid-template-rows: auto 200px auto 200px 200px auto 200px auto; |
7 |
}
|
8 |
|
9 |
}
|
10 |
|
11 |
/* media query 2 */
|
12 |
@media only screen and (min-width: 600px) { |
13 |
|
14 |
.grid-1 { |
15 |
grid-template-columns: repeat(3, 1fr); |
16 |
grid-template-rows: auto 200px 200px 200px auto; |
17 |
}
|
18 |
|
19 |
}
|
Dva sloupce a osm řádků pro větší obrazovky, tři sloupce po pěti řádcích pro ještě větší.
Šířky
Teď, když jsme opustili omezení jednoho sloupce, můžeme být kreativnější. Například bude potřeba, aby nadpis odpovídal šířce celého komiksu. Totéž platí o panelech s textem a prohlášení o autorských právech. Dokonce i některé obrázky by vypadaly lépe v plné šířce panelů. Takže tyhle drobnosti přidáme k prvnímu media query:
1 |
.panel-title, |
2 |
.panel-3, |
3 |
.panel-6, |
4 |
.panel-7, |
5 |
.panel-copyright { |
6 |
grid-column: span 2; |
7 |
}
|
V některých případech jsem také změnil typografii a tady je výsledek:



Rozložení se dvěma sloupci vypadá skvěle! Nicméně třísloupcový komiks potřebuje opravit.



6. Oprava třísloupcového layotu
Pravidla, která jsme použili při tvorbě vzhledu pro mobilní zařízení, se stále aplikují na větší obrazovky. Musíme tedy zapracovat na našich panelech a obnovit některé styly.
Začněte tím, že .panel-title
zahrnuje tři sloupce místo dvou. Dále .panel-3
(s textem) můžeme nastavit zpátky na grid-column: span 1;
nebo grid-column: auto;
To samé aplikujeme na .panel-6
. S několika dalšími změnami byste měli získat něco takového:
Trošičku Flexboxu
Rád bych, aby první dialog byl vertikálně vycentrován. Takže k tomu použijeme flexbox. Do druhého media query přidejte:
1 |
.panel-3 { |
2 |
display: flex; |
3 |
align-items: center; |
4 |
}
|



7. Překrytí panelů
CSS Grid nás neomezuje jen na stejně vzdálené bloky, které se zobrazí ze shora dolů. Naštěstí můžeme panely libovolně vrstvit. Chceme, aby náš poslední text byl trochu zajímavější a tak jej přiřadíme na stejnou pozici jako další panel:
1 |
.panel-7 { |
2 |
grid-column: 1; |
3 |
grid-row: 4; |
4 |
z-index: 1; |
5 |
}
|
6 |
|
7 |
.panel-8 { |
8 |
grid-column: 1 / span 2; |
9 |
grid-row: 4; |
10 |
}
|
Oba panely .panel-7
a .panel-8
nastavíme na grid-column: 1;
a grid-row: 4;
. To znamená, že jsou oba přesně na stejném místě a druhý se vykresluje na prvním.
Za pomoci z-index můžeme změnit pořadí překrývání, takže .panel-7
nastavte na z-index: 1;
. Tím se dostane nahoru.



Poznámka: Teď jsme odstranili řádek, takže budete muset zkontrolovat, zda je grid-template-rows
v pořádku.
Teď přidáme pár dalších stylů. Opět, položky mřížky nejsou striktně omezeny, můžeme je posunout za pomoci záporného marginu a dokonce je bez problémů transformovat. Přidal jsem některé styly do panelu s odstavcem a tohle je výsledek:



Závěr
Skvěle, tady je náš výsledek!
Tohle bylo zábavné cvičení za pomocí CSS Gridu, během kterého jsme se seznámili s novou koncepcí. Doufám, že se vám líbilo. Teď, pokud to nevadí, si jdu zdřímnout.
Další čtení
- Pochopení CSS Grid Layoutu série pro začátečníky
- Sleepy Fat Cat Typeface na GraphicRiver
- Mechanika komiksu
- Pochopení komiksu od Scotta McClouda