Recommended Articles

Cuevana 3

Australia Battles Historic Floods as Qantas Settles $105 Million COVID Credit Dispute

Northern Australia faces devastating floods forcing mass evacuations while Qantas agrees to pay $105 million to settle a class action over COVID-era flight credits.

James Whitmore
Cuevana 3

Australian Greens Navigate Leadership Transition After Electoral Setback

[[person:Larissa Waters|Larissa Waters]] takes the helm of the [[company:Australian Greens|Australian Greens]] following a devastating 2025 election that saw the party lose three of four House seats, including leader [[person:Adam Bandt|Adam Bandt’s]] historic Melbourne stronghold.

James Whitmore
Cuevana 3

The Guardian’s Experience Column: Where Extraordinary Stories Meet Ordinary Lives

For over two decades, The Guardian’s Experience section has carved out a unique niche in journalism, offering readers a weekly dose of remarkable personal stories that transcend the noise of daily news.

Maya Chen
Cuevana 3

From $1 an Hour to Heroes: The Complex Reality of America’s Incarcerated Firefighters

As devastating wildfires tear through Los Angeles, over 1,000 incarcerated firefighters risk their lives for as little as $1 per hour. California just changed that.

James Whitmore
Cuevana 3

China’s Energy Lifeline Under Threat as Trump’s Iran War Disrupts Oil Flows

Beijing faces a perfect storm as U.S. military action against Iran threatens its primary source of discounted crude oil, while new domestic laws cement the erosion of minority rights.

Richard Hayes
Cuevana 3

Australia’s Military Gamble: When Albanese Chose Trump Over Tame

As missiles streak across Middle Eastern skies, Australia finds itself drawn deeper into America’s war with Iran while its Prime Minister faces fierce criticism from an unlikely opponent at home.

Richard Hayes

Masonry fotogalerie: Proč ji používá Pinterest a jak ji vytvoříte za 15 minut

Masonry layout patří mezi nejoblíbenější způsoby zobrazení fotogalerií na moderních webech. Tento typ rozvržení, známý především z Pinterestu, umožňuje elegantně zobrazit obrázky různých velikostí bez nevzhledných mezer a prázdných míst. Pokud hledáte způsob, jak vytvořit profesionální responzivní galerii, jste na správném místě.

Co je Masonry layout a proč jej používat

Masonry layout je technika zobrazení obsahu inspirovaná zdivem z kamene nebo cihel. Na rozdíl od klasické mřížky, kde všechny položky mají stejnou výšku, Masonry umožňuje každému prvku mít vlastní rozměry. Prvky se pak dynamicky skládají do sloupců tak, aby využily veškerý dostupný prostor.

Hlavní výhody Masonry layoutu:

  • Efektivní využití prostoru bez prázdných míst
  • Možnost zobrazit obrázky v původních poměrech stran
  • Vizuálně atraktivní a moderní vzhled
  • Perfektní pro portfolia, fotogalerie a produktové katalogy
  • Responzivní chování napříč všemi zařízeními

Tři způsoby implementace Masonry galerie

Pro vytvoření Masonry layoutu existuje několik osvědčených přístupů. Každý má své výhody a hodí se pro jiný typ projektu.

CSS Grid s vlastností masonry

Nejmodernější přístup využívá nativní CSS vlastnost masonry, která je součástí specifikace CSS Grid Layout Module Level Three. Bohužel v době psaní tohoto článku je podpora prohlížečů stále omezená.

Základní syntaxe vypadá takto:

Pro kontejner galerie použijete display: grid s vlastností grid-template-rows nastavenou na masonry. Tento přístup je čistě CSS řešení bez nutnosti JavaScriptu. Sloupce se přizpůsobují automaticky pomocí grid-template-columns s hodnotou repeat(auto-fill, minmax(250px, 1fr)).

Výhodou je minimální kód a výborný výkon. Nevýhodou zatím omezená podpora v Safari a dalších prohlížečích, která vyžaduje fallback řešení.

JavaScript knihovna Masonry.js

Nejpopulárnější a nejspolehlivější řešení představuje knihovna Masonry.js od Davida DeSandra. Tato knihovna je battle-tested a používá ji tisíce webů včetně velkých portálů.

Implementace je velmi přímočará:

Nejprve připojíte knihovnu do projektu, buď přes CDN nebo npm balíček. Poté vytvoříte HTML kontejner s třídou grid a jednotlivé položky s třídou grid-item. JavaScript inicializaci provedete jednoduchým voláním konstruktoru s nastavením šířky sloupců a mezer mezi prvky.

Knihovna automaticky vypočítá optimální pozice všech prvků a přiřadí jim absolutní pozicování. Při změně velikosti okna se layout dynamicky přepočítává.

CSS Column layout

Třetí možností je využití CSS vlastnosti column-count, která vytvoří vícesloupcové rozvržení podobné novinovému layoutu. Tento přístup je nejjednodušší na implementaci.

Nastavíte počet sloupců pomocí column-count nebo šířku sloupce pomocí column-width. Mezery mezi sloupci definujete vlastností column-gap. Důležité je přidat break-inside: avoid pro položky, aby se nerozdělily mezi sloupce.

Výhodou je extrémní jednoduchost a výborná podpora prohlížečů. Nevýhodou je vertikální tok obsahu místo horizontálního, což může být v některých případech nežádoucí.

Praktický návod krok za krokem

Ukážeme si kompletní implementaci pomocí Masonry.js, která nabízí nejlepší kombinaci funkčnosti a kompatibility.

Příprava HTML struktury

Vytvořte základní HTML strukturu s kontejnerem pro galerii. Každý obrázek zabalte do divu s třídou grid-item. Tento obal umožňuje přidat padding, stín nebo jiné stylování bez ovlivnění samotného obrázku.

Pro responzivitu přidejte obrázky s atributem loading=“lazy“ pro odložené načítání. To výrazně zlepší výkon stránky, zejména u galerií s desítkami obrázků.

Stylování pomocí CSS

Kontejner galerie nastavte na relativní pozicování. Jednotlivé položky budou mít šířku definovanou v procentech – například třicet tři procent pro tři sloupce, dvacet pět procent pro čtyři sloupce.

Nezapomeňte na media queries pro responzivní chování. Na mobilních zařízeních můžete zobrazit jeden nebo dva sloupce, na tabletech tři a na desktopu čtyři či více.

Důležité CSS vlastnosti:

  • Box-sizing: border-box pro správné počítání šířek
  • Width: sto procent pro obrázky uvnitř položek
  • Display: block pro odstranění mezery pod obrázky
  • Height: auto pro zachování poměru stran

Inicializace JavaScriptu

Po načtení DOM inicializujte Masonry knihovnu. Můžete použít vanilla JavaScript nebo jQuery podle preference. Klíčové je počkat na načtení všech obrázků pomocí imagesLoaded pluginu, jinak se layout vypočítá špatně.

Nastavte itemSelector na třídu položek, columnWidth na šířku jednoho sloupce a percentPosition na true pro responzivní chování. Gutter definuje mezery mezi položkami.

Optimalizace výkonu a UX

Masonry galerie může při špatné implementaci způsobit problémy s výkonem. Zde jsou osvědčené postupy pro optimalizaci.

Lazy loading obrázků

Načítejte obrázky postupně při scrollování pomocí Intersection Observer API nebo knihovny jako lazysizes. Tím výrazně zkrátíte čas načtení stránky a snížíte spotřebu dat.

Nativní lazy loading pomocí atributu loading=“lazy“ funguje ve většině moderních prohlížečů a nevyžaduje JavaScript. Pro starší prohlížeče implementujte polyfill.

Placeholder a progresivní načítání

Zobrazte placeholdery nebo rozmazané náhledy před načtením plných obrázků. Technika LQIP (Low Quality Image Placeholder) používá miniaturní verzi obrázku, která se postupně nahradí plnou kvalitou.

Další možností je skeleton screen – šedé obdélníky na místě budoucích obrázků. To uživateli jasně komunikuje, že obsah se načítá.

Debouncing při resize

Přepočítávání layoutu při každé změně velikosti okna je náročné na výkon. Implementujte debouncing – techniku, která spustí přepočet až po ukončení změny velikosti okna.

Většina Masonry knihoven má debouncing zabudovaný, ale pokud píšete vlastní řešení, použijte setTimeout s clearTimeout pro odložení funkce.

Responzivní breakpointy

Správné nastavení breakpointů je klíčové pro dobrý uživatelský zážitek na všech zařízeních.

Doporučené nastavení sloupců:

  • Mobil (do 576px): jeden sloupec na celou šířku
  • Větší mobil (576-768px): dva sloupce
  • Tablet (768-992px): tři sloupce
  • Desktop (992-1200px): čtyři sloupce
  • Velký desktop (nad 1200px): pět a více sloupců

Tyto hodnoty upravte podle velikosti vašich obrázků a celkového designu webu. Testujte na reálných zařízeních, ne jen v emulátoru.

Přístupnost a SEO

Fotogalerie musí být přístupná všem uživatelům včetně těch se zrakovým postižením.

Každý obrázek opatřete popisným alt textem. Nepoužívejte obecné popisy jako „obrázek“ nebo „fotka“, ale konkrétní popis obsahu. To pomůže i SEO.

Implementujte klávesovou navigaci pro prohlížení galerie. Uživatelé by měli být schopni procházet obrázky pomocí šipek a otevírat lightbox pomocí Enter.

Pro SEO přidejte structured data ve formátu JSON-LD s typem ImageGallery. To Googlu pomůže lépe pochopit obsah galerie a může vést k zobrazení v obrázkových výsledcích vyhledávání.

Časté problémy a jejich řešení

Při implementaci Masonry layoutu můžete narazit na několik typických problémů.

Překrývající se prvky

Pokud se prvky překrývají nebo mají nesprávné pozice, pravděpodobně jste inicializovali Masonry před načtením obrázků. Použijte imagesLoaded knihovnu nebo počkejte na window.load event.

Layout se nepřepočítává

Po přidání nových položek musíte volat metodu layout() nebo reloadItems(). Některé knihovny to dělají automaticky, jiné vyžadují manuální trigger.

Problémy s animacemi

CSS transitions na položkách mohou kolidovat s Masonry animacemi. Buď použijte vestavěné animace knihovny, nebo vypněte transitionDuration nastavením na nulu.

Alternativy k Masonry layoutu

Masonry není vždy nejlepší volba. Pro některé případy použití existují vhodnější alternativy.

Flexbox galerie funguje skvěle pro obrázky podobných rozměrů. Je jednodušší na implementaci a nevyžaduje JavaScript. Použijte display: flex s flex-wrap: wrap a justify-content: space-between.

CSS Grid galerie nabízí přesnou kontrolu nad layoutem. Můžete definovat konkrétní pozice prvků a vytvářet komplexní asymetrické mřížky. Hodí se pro redakční weby a portfolia.

Justified gallery zarovná obrázky do řádků se stejnou výškou, podobně jako Google Photos. Výsledek je vizuálně uspořádanější než Masonry, ale méně dynamický.

Závěrečné tipy pro profesionální výsledek

Masonry galerie vypadá nejlépe s kvalitními fotografiami v dostatečném rozlišení. Optimalizujte obrázky pomocí moderních formátů jako WebP nebo AVIF pro menší velikost souboru při zachování kvality.

Přidejte lightbox funkci pro zobrazení obrázků na celou obrazovku. Knihovny jako GLightbox nebo PhotoSwipe nabízejí plynulé animace a touch gesta.

Implementujte filtrování nebo kategorie, pokud máte velké množství obrázků. Uživatelé ocení možnost zobrazit pouze relevantní obsah.

Nezapomeňte na loading indikátor při načítání obrázků. Jednoduchý spinner nebo progress bar výrazně zlepší vnímaný výkon galerie.

S těmito znalostmi jste připraveni vytvořit profesionální Masonry fotogalerii, která bude fungovat perfektně na všech zařízeních a zaujme vaše návštěvníky. Začněte s jednoduchým prototypem a postupně přidávejte pokročilé funkce podle potřeb vašeho projektu.