<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Martin Pešout &#187; layout</title>
	<atom:link href="https://www.martinpesout.cz/tag/layout/feed/" rel="self" type="application/rss+xml" />
	<link>https://www.martinpesout.cz</link>
	<description>Front-end vývojář</description>
	<lastBuildDate>Thu, 26 Jun 2025 22:12:07 +0000</lastBuildDate>
	<language>cs-CZ</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.6</generator>
		<item>
		<title>Flexbox &#8211; moderní způsob tvorby layoutů</title>
		<link>https://www.martinpesout.cz/flexbox-moderni-zpusob-tvorby-layoutu/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=rss</link>
		<comments>https://www.martinpesout.cz/flexbox-moderni-zpusob-tvorby-layoutu/#comments</comments>
		<pubDate>Sun, 08 Dec 2013 20:43:21 +0000</pubDate>
		<dc:creator>Martin Pešout</dc:creator>
				<category><![CDATA[Kódování]]></category>
		<category><![CDATA[CSS3]]></category>
		<category><![CDATA[flexbox]]></category>
		<category><![CDATA[kódování]]></category>
		<category><![CDATA[layout]]></category>

		<guid isPermaLink="false">http://www.martinpesout.cz/?p=1903</guid>
		<description><![CDATA[Flexbox je nový a velmi mocný nástroj na tvorbu layoutů pomocí CSS. Navíc je zcela odlišný od způsobu, na který jsme tu zvyklý již řadu let. Většina online příruček se zaměřuje na detaily ze samotné specifikace, které bývají dlouhé, složité]]></description>
				<content:encoded><![CDATA[<div class="l-submain"><div class="l-submain-h g-html i-cf"><p><code>Flexbox</code> je nový a velmi mocný nástroj na tvorbu layoutů pomocí CSS. Navíc je zcela odlišný od způsobu, na který jsme tu zvyklý již řadu let. Většina online příruček se zaměřuje na detaily ze samotné specifikace, které bývají dlouhé, složité a těžko srozumitelné. Na druhou stranu je zde poměrně málo informací o tom, jak může být <code>flexbox</code> užitečný fron-end vývojářům při řešení každodenních problémů. Tento článek by měl být takovým úvodem a ukázat možnosti, které nám nabízí při tvorbě layoutu.</p>
<p><code>Flexbox</code> nabízí v základu 3 vlastnosti, které jsou pro design webu podstatné, ale které bylo těžké dlouhou dobu nadefinovat pomocí CSS: zarovnání, rozmístění a pořadí prvků.</p>
<p>Než přistoupím ke konkrétním ukázkám, tak bych rád zmínil několik věcí, které je dobré znát:</p>
<ul>
<li><code>Flexbox</code> prošel třemi vývojovými cykly, než byla stanovena současná definice, kterou nalezneme ve specifikaci. Každá z těchto iterací se vyznačovala odlišným názvem a také odlišným <a href="http://demosthenes.info/blog/217/CSS-Vendor-Prefixes-and-Flags">prefixem</a> pro různé webové prohlížeče. V současnosti se vše ustálilo a nejnovější prohlížeče podporují jeden konečný název bez nutnosti používat prefix. Nicméně podrporovat na novém webu <code>Flexbox</code> pro starší prohlížeče není vůbec snadná věc. Proto při psaní kódu <strong>doporučuji nejprve vše napsat a otestovat pro nejnovější verze prohlížečů</strong> a s použitím finální verze <code>Flexbox</code> a až potom vše ladit pro starší prohlížeče.</li>
<li>I když <code>Flexbox</code> dokáže spolupracovat s ostatními způsoby tvorby layoutů v CSS, tak je většinou vhodnější tyto <strong>původní a zaběhnuté postupy při tvorbě layoutů opustit</strong>. Jde totiž o to, že se nově jedná o odlišný způsob návrhu a práce.</li>
</ul>
<h2>Základní ukázky použití vlastnosti Flexbox</h2>
<p>Mějme 3 jednoduché <code>&lt;div&gt;</code> elementy, které umístíme dovnitř jednoho společného:</p>
<pre class="brush: xml; title: ; notranslate">
&lt;div id=&quot;item-container&quot;&gt;
  &lt;div class=&quot;circle&quot;&gt;&lt;/div&gt;
  &lt;div class=&quot;square&quot;&gt;&lt;/div&gt;
  &lt;div class=&quot;circle&quot;&gt;&lt;/div&gt;
&lt;/div&gt;
</pre>
<p>V CSS nadefinujeme styl tak, aby každý z vnořených <code>&lt;div&gt;</code> elementů vypadal stejně jako název třídy, který nese. Vlastnost <code>display: flex</code> nastavíme na vnější společný <code>&lt;div&gt;</code>:</p>
<pre class="brush: css; title: ; notranslate">
#item-container {
display: flex;
background-color: hsl(34,88%,90%);
}

.square {
height: 200px;
width: 200px;
background-color: hsl(50,88%,50%);
}

.circle {
border-radius: 50%;
width: 150px;
height: 150px;
background-color: hsl(22,88%,50%);
}
</pre>
<p>Výsledek, který dostaneme, vypadá následujícím způsobem:</p>
<p><img class="alignnone size-full wp-image-1925" alt="Snímek obrazovky 2013-12-08 v 19.12.53" src="http://www.martinpesout.cz/wp-content/uploads/2013/12/Snímek-obrazovky-2013-12-08-v 19.12.53.png" width="723" height="194" /></p>
<p>Je potřeba zmínit hned několik důležitých věcí:</p>
<ul>
<li>Nejběžnější vlastnosti &#8222;flex&#8220; se používají na nadřazené elementy v HTML. Proto je také v naší ukázce použita definice u prvků s ID <code>#item-container</code>. Toto bývá často zdrojem nejasností, protože většina webových vývojářů je zvyklá pozicovat až konkrétní vnořené elementy.</li>
<li>&#8222;Block&#8220;, &#8222;inline&#8220;, &#8222;float&#8220; a &#8222;text-align&#8220; nemají žádný význam mluvíme-li o jednotlivých položkách, na které aplikujeme flexbox zarovnání.</li>
<li>Ve výchozím stavu jsou položky zarovnány k levému hornímu rohu nadřazeného elementu.</li>
</ul>
<h2>Další možnosti zarovnání prvků</h2>
<p>Na dalším příkladě si ukážeme, jak změnit horizontální zarovnání jednotlivých položek. Výchozí zarovnání doleva je známo jako <code>flex-start</code>. Zarovnat prvky k pravému okraji můžeme provést následujícím způsobem:</p>
<pre class="brush: css; title: ; notranslate">
#item-container { justify-content: flex-end; }
</pre>
<p><img class="alignnone size-full wp-image-1937" alt="Snímek obrazovky 2013-12-08 v 20.22.08" src="http://www.martinpesout.cz/wp-content/uploads/2013/12/Snímek-obrazovky-2013-12-08-v 20.22.08.png" width="722" height="193" /></p>
<p>Určitě si můžete říkat, že se stále nejedná o nic přelomového. Pojďme si tedy ukázat další možnosti:</p>
<pre class="brush: css; title: ; notranslate">
#item-container { justify-content: center; }
</pre>
<p><img class="alignnone size-full wp-image-1938" alt="Snímek obrazovky 2013-12-08 v 20.26.29" src="http://www.martinpesout.cz/wp-content/uploads/2013/12/Snímek-obrazovky-2013-12-08-v 20.26.29.png" width="722" height="192" /></p>
<p>Toto je už elegantní řešení. Docílit podobného zarovnání použitím tradičního CSS by obvykle vyžadovalo navíc jeden HTML element a další doplňující CSS definice. Nicméně ještě nejsme v ukázkách u konce.</p>
<pre class="brush: css; title: ; notranslate">
#item-container { justify-content: space-between; }
</pre>
<p><img class="alignnone size-full wp-image-1940" alt="Snímek obrazovky 2013-12-08 v 20.32.54" src="http://www.martinpesout.cz/wp-content/uploads/2013/12/Snímek-obrazovky-2013-12-08-v 20.32.54.png" width="723" height="192" /></p>
<p>Můžeme vidět, že prostor mezi prvky se rovnoměrně rozproštřel. Toto nastane pouze v situaci, kdy to aplikujeme na dva a více prvků.</p>
<p>Ještě jednu definici zbývá ukázat:</p>
<pre class="brush: css; title: ; notranslate">
#item-container { justify-content: space-around; }
</pre>
<p><img class="alignnone size-full wp-image-1942" alt="Snímek obrazovky 2013-12-08 v 20.40.35" src="http://www.martinpesout.cz/wp-content/uploads/2013/12/Snímek-obrazovky-2013-12-08-v 20.40.35.png" width="722" height="192" /></p>
<p>Výsledek si lze představit podobně, jako kdyby bylo “margin: 0 auto použito na vše”. Jednotlivé položky jsou opět rovnoměrně rozprostřeny, ale každá zvlášť je navíc vycentrovaná uvnitř přiděleného prostoru.</p>
<p>Tyto ukázky řeší zatím jen horizontální zarovnání. Jaké ale máme možnosti u vertikálního zarovnání?</p>
<pre class="brush: css; title: ; notranslate">
#item-container { justify-content: space-between; align-items: center; }
</pre>
<p><img class="alignnone size-full wp-image-1944" alt="Snímek obrazovky 2013-12-08 v 20.48.42" src="http://www.martinpesout.cz/wp-content/uploads/2013/12/Snímek-obrazovky-2013-12-08-v 20.48.42.png" width="722" height="192" /></p>
<p>Prostřední prvek nemá kolem sebe žádný prostor navíc, protože je ze všech prvků nejvyšší. Zbývající menší prvky jsou rovnoměrně umístěny na středu vzniklého prostoru.</p>
<p>Další možnosti vertikálního zarovnání jsou následující:</p>
<ul>
<li>flex-start &#8211; výchozí nastavení, zarovnání k hornímu okraji obklopujícího HTML elementu</li>
<li>flex-end &#8211; zarovnání k dolnímu okraji obklopujícího HTML elementu</li>
</ul>
<p><code>Flexbox</code> je navíc historicky prvním systémem na tvorbu layoutů, který umožňil definovat pořadí jednotlivých prvků. Pojďme si to ukázat na jednoduchém přikladě: umístíme čtverec před první kruh z naší ukázky:</p>
<pre class="brush: css; title: ; notranslate">
.square { order: -1; }
</pre>
<p><img class="alignnone size-full wp-image-1945" alt="Snímek obrazovky 2013-12-08 v 21.05.08" src="http://www.martinpesout.cz/wp-content/uploads/2013/12/Snímek-obrazovky-2013-12-08-v 21.05.08.png" width="722" height="192" /></p>
<p>Výsledek je úžasný. <code>Flexbox</code> ruší pevně definované pořadí jednotlivých prvků na našich stránkách. Obvykle by totiž pořadí jednotlivých prvků bylo určeno jejich umístěním ve zdrojovém HTML kódu. Dříve by této změny šlo dosáhnout pouze pomocí JavaScriptu. Je důležité si tedy uvědomit, že váš zdrojový HTML kód zůstává nezměněn. Snadno si to můžete ověřit pomocí volby <em>Zobrazit zdrojový kód</em> ve vašem internetovém prohlížeči.</p>
<p><code>Flexbox</code> nám nabízí mnohem víc možností při tvorbě designu webových stránek. V tomto článku jsem se snažil na několika jednoduchých ukázkách demonstrovat sílu tohoto nástroje při zarovnávání, které bylo ještě do nedávna nemožné čistě jen za použití CSS.</p>
<h2>Zdroje</h2>
<ul>
<li><a href="http://demosthenes.info/blog/780/A-Designers-Guide-To-Flexbox">A Designer&#8217;s Guide to Flexbox</a></li>
</ul>
</div></div>]]></content:encoded>
			<wfw:commentRss>https://www.martinpesout.cz/flexbox-moderni-zpusob-tvorby-layoutu/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
	</channel>
</rss>
