Advertisement
  1. Web Design
  2. HTML/CSS
  3. CSS

CSS Grid Layout a komiks (vysvětluje kocour Barry)

Scroll to top
Read Time: 6 min

() 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!

Sleepy Fat Cat on GraphicRiver
Sleepy Fat Cat Typeface na GraphicRiver

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>&copy; 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">
KalamKalamKalam
Google font Kalam

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.

Už to téměř funguje ...

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
  }
before flexbox after flexboxbefore flexbox after flexboxbefore flexbox after flexbox
Před flexboxem, po flexboxu

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í

Advertisement
Did you find this post useful?
Want a weekly email summary?
Subscribe below and we’ll send you a weekly email summary of all new Web Design tutorials. Never miss out on learning about the next big thing.
Advertisement
Looking for something to help kick start your next project?
Envato Market has a range of items for sale to help get you started.