Responzivní fotogalerie rubrika: Kódování: CSS

8 v6ak
položil/-a 4.10.2014

Řeším, jak vhodně udělat reponzivní fotogalerii. Situace:

  • Pokud zvětším okno, mělo by se to rozumně roztáhnout, případně by se mělo zvětšit počet fotek na řádek. Řeší gridy v Bootstrapu a .img-responsive.
  • Mám zvolený poměr stran pro thumbnail.
  • Thumbnail se nemá ořezávat, ale radši použít menší thumbnail a udělat prázdné místo okolo něj.

Je jasné, že všechny náhledy musejí mít ve výsledku stejnou výšku i šířku (třeba za cenu prázdného místa), jinak z toho float: left může snadno udělat guláš. Jak to řešit? Napadají mě tři řešení:

a) Přímo do obrázku vložit bílé místo. Zatím to jde, protože stránka má bílé pozadí, ale je jasné, že s tímto přístupem lze snadno narazit. Průhlednost by to sice řešila, ale musel bych použít jiný formát, čímž by se zvýšila datová náročnost.

b) Nastavit tomu obrázku třeba width: 80% (pro každý poměr stran by byla jiná hodnota), čímž bych vyrobil prostor okolo. Teoreticky mi to přijde čistější a nejspíš by to v 99% případů fungovalo dobře. Jenže se obávám, že by občas došlo k nějaké zaokrouhlovací chybě a jeden obrázek by byl vyšší třeba o 1px, což by opět nadělalo guláš. Ale blbě by se to ladilo, protože chyba by se vyskytovala pouze u obrázku s "vhodným" rozměrem v kombinaci s nějakým rozlišením displeje apod. Kdybych dostal takovýto problém nahlášený, dost možná bych ho nebyl schopen vůbec reprodukovat.

c) Počítat rozměry javascriptem, vždy nastavit maximální výšku. No fuj.

odkaz Vyřešeno
8 v6ak
odpověděl/-a 5.10.2014

Tak jsem to vyřešil jinak.

Poměr stran jsem zanesl přímo do CSS. Inspiroval jsem se tímto trikem: http://www.mademyday.de/css-height-equals-width-with-pure-css.html

Potom jsem nechal obrázky vyplnit celý obsah. Použil jsem max-width: 100% a max-height: 100%. Nakonec jsem je vycentroval.

Až na načítání obrázku vhodné velikosti mi to celé funguje i bez Javascriptu. Teď ještě dořešit IE6, bude-li potřeba. To ještě uvidím.

Pro zobrazení všech 3 odpovědí se prosím přihlaste:

Rychlé přihlášení přes sociální sítě:

Nebo se přihlaste jménem a heslem:

Zadejte prosím svou e-mailovou adresu.
Zadejte své heslo.