<?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; Kódování</title>
	<atom:link href="https://www.martinpesout.cz/category/kodovani-2/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>Seznam zajímavých zdrojů pro frontend designery</title>
		<link>https://www.martinpesout.cz/seznam-zajimavych-zdroju-pro-frontend-designery/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=rss</link>
		<comments>https://www.martinpesout.cz/seznam-zajimavych-zdroju-pro-frontend-designery/#comments</comments>
		<pubDate>Mon, 16 Oct 2017 21:31:18 +0000</pubDate>
		<dc:creator>Martin Pešout</dc:creator>
				<category><![CDATA[Kódování]]></category>
		<category><![CDATA[Webdesign]]></category>

		<guid isPermaLink="false">http://www.martinpesout.cz/?p=2821</guid>
		<description><![CDATA[Internet je plný zajímavých zdrojů. Představte si, že jste začínající frontend designer, nebo že jste člověk zkoumající nové možnosti pro sebevzdělávání. Pokud tyto informace pravidelně nevyhledáváte, bude složité se v současném světě frontendu zorientovat. Rozhodl jsem se proto pro malý]]></description>
				<content:encoded><![CDATA[<div class="l-submain"><div class="l-submain-h g-html i-cf"><p>Internet je plný zajímavých zdrojů. Představte si, že jste začínající frontend designer, nebo že jste člověk zkoumající nové možnosti pro sebevzdělávání. Pokud tyto informace pravidelně nevyhledáváte, bude složité se v současném světě frontendu zorientovat. Rozhodl jsem se proto pro malý experiment. Chtěl bych postupně vybudovat seznam zajímavých zdrojů, který by měl být užitečným rozcestníkem právě při podobném hledání.</p>
<p><span id="more-2821"></span></p>
<p>Seznam má být určený pro všechny frontend designery, kteří se ptají, kde je možné sledovat nejnovější trendy a informace týkající se webových technologií. Chtěl bych v něm postupně popsat nejzajímavější internetové a knižní zdroje. Zmínku si určitě zaslouží i pravidelné srazy a zajímavé konference. Původně jsem se inspiroval dvěma zahraničními projekty podobného zaměření: <a href="https://github.com/dmytroyarmak/frontend-dev-resources">GitHub: frontend-dev-resources</a> a <a href="https://github.com/tommcgurl/frontend-resources">GitHub: frontend-resources</a>. Nechci však tyto seznamy kopírovat. Část prostoru bych proto rád vyhradil i českým zdrojům. Myslím si totiž, že i v této malé zemi máme řadu zajímavých webů a publikací, ze kterých lze čerpat znalosti. V textu rize české zdroje zvýrazňuji českou vlaječkou.</p>
<p>Jako médium jsem vybral GitHub, protože návštěvníkům umožňuje přidávat vlastní návrhy na změny. Díky tomu mám možnost oslovit českou komunitu frontend designerů a společně se můžeme pokusit rozšířit seznam do obsáhlejší podoby.</p>
<div class="wpb_button align_center"><a href="https://github.com/martinpesout/frontend-resources"class="g-btn type_primary size_big"><span><i class="icon-list-ul "></i>Přejít na seznam zdrojů</span></a></div>

<style type="text/css"><!--
p.p1 {margin: 0.0px 0.0px 0.0px 0.0px; line-height: 20.0px; font: 13.0px Lato; color: #262626}
--></style>
<style type="text/css"><!--
p.p1 {margin: 0.0px 0.0px 0.0px 0.0px; line-height: 20.0px; font: 13.0px Lato; color: #262626}
--></style>
</div></div>]]></content:encoded>
			<wfw:commentRss>https://www.martinpesout.cz/seznam-zajimavych-zdroju-pro-frontend-designery/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Kniha: Vzhůru do (responzivního) webdesignu</title>
		<link>https://www.martinpesout.cz/kniha-vzhuru-do-responzivniho-webdesignu/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=rss</link>
		<comments>https://www.martinpesout.cz/kniha-vzhuru-do-responzivniho-webdesignu/#comments</comments>
		<pubDate>Wed, 06 Sep 2017 05:17:49 +0000</pubDate>
		<dc:creator>Martin Pešout</dc:creator>
				<category><![CDATA[Kniha]]></category>
		<category><![CDATA[Kódování]]></category>
		<category><![CDATA[Webdesign]]></category>

		<guid isPermaLink="false">http://www.martinpesout.cz/?p=2642</guid>
		<description><![CDATA[Pokud budete hledat knihu zabývající se implementací a návrhem webů, brzo zjistíte, že nemáte pomalu z čeho vybírat. Podobných publikací je jako šafránu. Není se ale čemu divit. Věci spjaté s tvorbou moderních webů se rychle mění. Psát knihu o tématech,]]></description>
				<content:encoded><![CDATA[<div class="l-submain"><div class="l-submain-h g-html i-cf"><p>Pokud budete hledat knihu zabývající se implementací a návrhem webů, brzo zjistíte, že nemáte pomalu z čeho vybírat. Podobných publikací je jako šafránu. Není se ale čemu divit. Věci spjaté s tvorbou moderních webů se rychle mění. Psát knihu o tématech, které mohou být za dva roky zastaralé, není vůbec snadné. Toto léto však vyšla nová kniha, která se do tohoto tématu pouští rovnou po hlavě. Dámy a pánové, chtěl bych vám představit <strong>Vzhůru do (responzivního) webdesignu</strong>.<img title="Celý příspěvek..." alt="" src="http://www.martinpesout.cz/wp-includes/js/tinymce/plugins/wordpress/img/trans.gif" /></p>
<p>Autorem knihy je Martin Michálek, významná osobnost české frontendové scény. Martin je specialista na CSS a responzivní design. Aktivně píše na svém blogu <a href="http://www.vzhurudolu.cz/">Vzhůru dolů</a>, spoluzaložil a vede spolek <a href="http://www.frontendisti.cz/">Frontendisti.cz</a>. Je také autorem e-booku <a href="http://www.vzhurudolu.cz/ebook">Vzhůru do CSS3</a>.</p>
<p><img alt="vzhuru-do-webdesignu" src="http://www.martinpesout.cz/wp-content/uploads/2017/08/vzhuru-do-webdesignu-1024x576.jpg" width="1024" height="576" /></p>
<h2>Cílová skupina</h2>
<p>Martin hned v úvodu přiznává, že jeho původním záměrem bylo vytvořit technickou příručku pro kodéry. Záhy ale zjistil, že psát o technologiích a zamlčet jejich vazbu na design je v případě responzivního designu nemožné. Vypůjčím si jeho slova: HTML, CSS a design jsou zrátka spojené nádoby. Jsou to odvětví, která spolu úzce souvisí a musí se doplňovat.</p>
<p>Vznikla tak publikace, která na 272 stránkách nabízí množství praktických ukázek a rad. Oslovit by měla širokou škálu čtenářů. Primárně je psaná pro kodéry, kteří využíjí největší část knihy. Získají zde přehled o postupech a technologiích používaných pro tvorbu dnešních responzivních webů. Čerpat z knihy mohou však i designeři, grafici a marketéři. Pro ně jsou naopak určeny texty týkající se statistik, návrhu rozhraní a responzivních navigací.</p>
<p>Pokud občas čtete <a href="http://www.vzhurudolu.cz">Martinův blog</a>, jistě poznáte jeho rukopis. Martin si moc nepotrpí na košatá souvětí. Má rád jednoduché věty a přímá sdělení. Texty sem tam doplní svým osobitým humorem. To je přesně jeho styl. V podobném duchu je i celá tato kniha. Díky tomu, že jsou texty značně zjednodušené, měla by být kniha snadno stravitelná i pro začátečníky, kteří se k tvorbě webů dostali teprve nedávno. Pokročilejší čtenář může být zklamaný, když zjistí, že složitější techniky a nástroje nejsou v textu příliš rozebírány. Je to tak trochu daň za veliké zjednodušování. Na podrobnější zdroje je ale vždy odkazováno. Je ponecháno na čtenáři, zda si sám bude chtít nastudovat podrobnosti. Podle mého názoru to ničemu nevadí, ba naopak. Kniha se o to snadněji čte, lépe se v ní orientuje a každý čtenář si tak přijde na své.</p>
<h2>Oblasti, kterým se kniha věnuje</h2>
<p>Kniha se postupně dotýká celé řady témat, se kterými by měl přijít do styku každý dnešní web v průběhu svého vývoje. Obsah je rozdělen do následujících kapitol:</p>
<ol>
<li>Úvod do tvorby webu</li>
<li>Dokument jako základ</li>
<li>Viewport na mobilech</li>
<li>Rychlost načítání</li>
<li>Obrázky a další média</li>
<li>Návrh rozhraní v éře mobilů</li>
<li>Design komponent rozhraní</li>
<li>Media queries a layout</li>
<li>Responzivní navigace</li>
<li>Testování responzivních webů</li>
</ol>
<h2>Kniha s vlastním dějem</h2>
<p>Do knihy se podařilo dostat zajímavou dějovou linku. Martin zde popisuje, jak by budoval pomyslný eshop s outdoorovým vybavením ForestKid.cz. Jednotlivé kroky začíná návrhem uživatelského rozhraní. Čtenáři radí, jak se neunáhlit a neskočit rovnou na kódování jednotlivých částí. Společně tak procházíme jakousi výzkumnou fází projektu. V dalších kapitolách směřujeme k tvorbě samotného dokumentu a po částech budujeme produktovou stránku eshopu. Výzkumnou fázi tak postupně nahrazují praktické části. Texty jsou navíc doplněny o příklady umístěnými na CodePen. Ukázky je tak možné si vyzkoušet přímo v prohlížeči.</p>
<h2>Designování v prohlížeči</h2>
<p>V knize vás může překvapit, že při budování ukázkového eshopu nedochází k přípravě grafických souborů designerem a k jejich následnému oživení v prohlížeči. Postup, který je zde použit, se nazývá <em>designování v prohlížeči</em>. Vytváříme nejprve hrubou kostru aplikace, kterou v několika iteracích zpřesňujeme a vylaďujeme do finální podoby. Cílem je, dostat obsah co nejdříve do prohlížeče a odhalit včas případné problémy při návrhu. Martin je velkým propagátorem tohoto přístupu a hovořil o tom např. na <a href="https://www.webexpo.net/prague2017/talk/designing-in-the-browser/">WebExpo 2015</a>. Jak však sám v knize uvádí: &#8222;Není dobrého nebo špatného pracovního postupu. Důležitý je vždy výsledek.&#8220; Je zde ale zřejmé, že při designování přímo v prohlížeči se dobře vysvětlují principy responzivního designu.</p>
<h2>Celkové dojmy</h2>
<p>Ze <strong>Vzhůru do (responzivního) webdesignu</strong> jsem opravdu nadšený. Na řadě knih o webdesignu mi vadilo, že buď postrádají dostatek praktických ukázek nebo ukázky nepřináší nic nového. Opakují věci, které jsou zkušenějším kodérům známé. Martin jde o trochu dál. Jako bonus nabízí čtenářům vlastní know-how. Abyste pochopili, co tím myslím, zde je jeden příklad:</p>
<p>V knize je odkaz na žátěžový test typografie. Jedná se o připravený dokument obsahující všechny myslitelné i nemyslitelné HTML elementy, které mají různou délku a jsou do sebe různě zanořené. Jako kodér si ho můžete stáhnout, přidat k němu vlastní CSS a snadno tak otestovat, zda při tvorbě stylů na nic nezapomněl. Je to děsně jednoduché a ušetří to práci. I já jsem připravený dokument ve svém projektu už použil.</p>
<p>Ze začátku čtení jsem měl trochu obavu, aby celá kniha nepůsobila jako referenční příručka. V první půlce knihy je v textech často odkazováno na témata, která se teprve budou probírat v následujících kapitolách. Navíc zde nacházíme množství odkazů na články umístěné na blogu. Musím ale uznat, že jak jsem pokračoval ve čtení, přestal jsem toto naprosto vnímat. Jakmile jsem měl pocit, že bych si potřeboval víc nastudovat, použil jsem odkaz a přešel na blog <a href="http://vzhurudolu.cz">Vzhůru dolů</a>. Zde je krásně vidět, jak se Martinovi zúročuje jeho intenzivní psaní článků z posledních let, kterými pokrývá různá témata z oblasti webdesignu.</p>
<p>Přeci jen musím zmínit jednu oblast, která by podle mého názoru zasloužila větší pozornost. Jedná se o přístupnost při psaní dokumentu webu. V knize sice najdete zmínky o použití HTML5 tagů a WAI-ARIA atributů. Dočtete se, že dodávají sémantickou informace a můžou pomoci např. zrakově hendikepovaným v lepší orientaci na webu. Tím zde popis končí a čtenář je pro bližší informace odkázán na blogový článek. Nějaká drobná kapitola na toto téma by se hodila. Kdo ví, třeba se v budoucnu dočkáme dalšího pokračování.</p>
<h2>Pár slov závěrem</h2>
<p>Kniha se podle mě opravdu povedla. Snadno se čte a jedná se o cenný zdroj informací nejen pro kodéry, ale i další lidi figurující v procesu budování webu. Místo v mé knihovně zatím ještě nezabere. Ale jen z toho důvodu, že by se tam na ní zbytečně prášilo a tak jí nosím při sobě a v případě potřeby do ní nahlédnu. Pokud uvažujete o nějaké formě sebevzdělávání v oblasti webdesignu, mohu vám ji vřele doporučit.</p>
<div class="w-actionbox color_alternate controls_aside"><div class="w-actionbox-h"><div class="w-actionbox-text"><h3>Tištěná kniha a e-book</h3><p>Vzhůru do (responzivního) webdesignu je k dipozici jako tištěná kniha a e-book za celkovou cenu 649 Kč (272 stran barevně na kvalitním papíře ve formátu A5). K dispozici je také jako samostatný e-book za cenu 299 Kč.</p></div><div class="w-actionbox-controls at_right"><a class="w-actionbox-button g-btn type_default" href="https://www.vzhurudolu.cz/ebook-responzivni"><span>E-shop</span></a></div></div></div>
</div></div>]]></content:encoded>
			<wfw:commentRss>https://www.martinpesout.cz/kniha-vzhuru-do-responzivniho-webdesignu/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Jak jsem vyzrál na nechtěný outline</title>
		<link>https://www.martinpesout.cz/jak-jsem-vyzral-na-nechteny-outline/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=rss</link>
		<comments>https://www.martinpesout.cz/jak-jsem-vyzral-na-nechteny-outline/#comments</comments>
		<pubDate>Tue, 08 Nov 2016 08:39:06 +0000</pubDate>
		<dc:creator>Martin Pešout</dc:creator>
				<category><![CDATA[Kódování]]></category>
		<category><![CDATA[Přístupnost]]></category>

		<guid isPermaLink="false">http://www.martinpesout.cz/?p=2380</guid>
		<description><![CDATA[Outline je jednoduchý, ale mocný nástroj, který se využívá především pro lepší přístupnost elementů na webu. I přesto, že se snažím psát přístupné weby a webové aplikace, nevyhnu se občas situacím, kdy musím jeho nechtěné styly zrušit. V následujícím článku]]></description>
				<content:encoded><![CDATA[<div class="l-submain"><div class="l-submain-h g-html i-cf"><p><code>Outline</code> je jednoduchý, ale mocný nástroj, který se využívá především pro lepší přístupnost elementů na webu. I přesto, že se snažím psát přístupné weby a webové aplikace, nevyhnu se občas situacím, kdy musím jeho nechtěné styly zrušit. V následujícím článku bych rád ukázal, jak se dá na nechtěný <code>outline</code> vyzrát.</p>
<p><span id="more-2380"></span></p>
<h2>Co představuje CSS outline?</h2>
<p>Pěkná definice CSS vlastnostni <code>outline</code> je popsána na portálu <a href="https://css-tricks.com/almanac/properties/o/outline/">CSS-Tricks</a>. V kaskádových stylech používáme <code>outline</code> k vykreslení linky kolem vnějšího okraje elementu. Výsledek je hodně podobný použití klasického <a href="http://www.w3schools.com/css/css_border.asp">border</a> kolem nějakého prvku. Je zde ale několik rozdílů:</p>
<ol>
<li>Vždy vede kolem všech stran prvku. Nemůžeme tak definovat, že by měl <code>outline</code> vést pouze pod prvkem.</li>
<li>Není součástí box modelu, tudíž použití <code>outline</code> nemůže ovlivnit pozici samotného elementu nebo sousedních prvků. Co je to box model skvěle popisuje Martin Michálek na svém webu <a href="http://www.vzhurudolu.cz/prirucka/css3-box-sizing">vzhurudolu.cz</a>.</li>
</ol>
<p>Mezi další věci, které stojí za zmínku, je např. nemožnost nadefinovat <code>border-radius</code>. Což je logické protože se nejedná o klasický <code>border</code>. Nemusí se také jednat vždy o klasický obdélníkový tvar. Pokud <code>outline</code> jde kolem prvku, který obsahuje různé velikosti fontů, můžeme dostat i nepravidelný rámeček. Ukázku nepravidelného <code>outline</code> je možné vidět na <a href="http://codepen.io/martinpesout/pen/yVybxa">této ukázce</a>. Stačí jen udělat <code>:focus</code> na daný odkaz.<br />
<img class="alignnone size-full wp-image-2543" alt="test-element" src="http://www.martinpesout.cz/wp-content/uploads/2016/11/test-element.png" width="395" height="103" /></p>
<h2>Využití na webu</h2>
<p>Díky tomu, že <code>outline</code> není součástí box modelu, neovlivní nám jeho používání už definované CSS styly. Pokud to srovnáme s klasickým rámečkem <code>border</code>, tak jeho použití nám může měnit výslednou šířku a výšku elementu. Pokud vezmeme čisté HTML bez jakýchkoliv CSS stylů, tak zde je vlastnost <code>outline</code> použita pro zlepšení přístupnosti na webu. Poskytuje vizuální zpětnou vazbu pro aktuálně vybraný prvek na stránce. Na následujícím obrázku je ukázka aktivního formulářového políčka:</p>
<p><img class="alignnone size-full wp-image-2542" alt="focus" src="http://www.martinpesout.cz/wp-content/uploads/2016/11/focus.png" width="447" height="177" /></p>
<p>Vybrat nějaký prvek na stránce lze velice snadno. Stačí použít pro pohyb klávesnici namísto myši. Klávesa <code>TAB</code> je ideálním příkladem. Nemusí se vždy jednat jen o klasickou klávesnici vašeho PC. Při prohlížení webu na moderních TV, budeme pravděpodobně používat místo klávesnice dálkový ovladač. Ve všech těchto situacích potřebujeme vědět, který prvek je vybraný pro případné další interakce (psaní, kliknutí, přehrání videa, &#8230;).</p>
<p>V CSS lze na podobné prvky cílit pomocí tzv. <code>:focus</code> selektoru. Tento selektor je dostupný na každém HTML elementu, který může přijímat vstupy z klávesnice nebo jakékoli další vstupy od uživatele. Jedná se tedy o všechny odkazy, tlačítka, formulářové položky apod. Pokud se nám klasická &#8222;<code>outline</code> záře&#8220; nelíbí, můžeme ji následujícím zápisem zrušit:</p>
<pre class="brush: css; title: ; notranslate">
:focus {
  outline: 0;
}
</pre>
<p>Pokud toto ale uděláme, je třeba mít na paměti, že namísto <code>outline</code> musíme použít například <code>border</code> rámeček nebo jiný způsob zvýraznění. <strong>Nikdy nerušte styly pro <code>:focus</code> úplně!</strong> Dobrou přístupnost vaši uživatelé ocení. Pro více informací doporučuji <a href="https://www.w3.org/TR/UNDERSTANDING-WCAG20/navigation-mechanisms-focus-visible.html">doporučení přímo od W3C.org</a>.</p>
<h2>Proč mnoho webdesignerů ruší outline?</h2>
<p>Důvody bývají často jednoduché &#8211; ješitnost designera, časový pres nebo úplná neznalost přístupnosti na webu. Nehezká modrá záře, kterou vydává <code>outline</code>, často nezapadá do budoucí vize. Bývá proto &#8222;jednoduší&#8220; <code>outline</code> odstranit úplně. Alternativní zvýraznění se poté už designer neřeší a dodaný design pak s něčím takovým nepočítá.</p>
<p>Nutno dodat, že odebraní <code>outline</code> nemuselo být vždy záměrem frontendisty. Dnes již zastaralý <a href="http://meyerweb.com/eric/tools/css/reset/reset200802.css">Reset CSS</a> od Erica Meyerse rušil zvýraznění aktivních prvků úplně. V kódu byla sice poznámka <code>/* remember to define focus styles! */</code>, jenže ne každý si toho všiml. Novější řešení jako <a href="https://necolas.github.io/normalize.css/">Normalize.css</a> nebo <a href="http://v4-alpha.getbootstrap.com/content/reboot/">Reboot</a> tímto neduhem už netrpí.</p>
<h2>Proč já ruším outline?</h2>
<p>Napřipadám si jako ješitný designer, i znám základy dobré přístupnosti na webu. Poslední léta se soustředím převážně na vývoj webových aplikací a zde (možná ještě více než na webu) nastávají situace, kdy uživatel střídá myš i klávesnici. Ať chcete nebo ne, dříve nebo později se dostanete do situace, kdy potřebujete zrušit nechtěný <code>outline</code>, který občas někde vyskočí. Chtěl bych vám ukázat jednoduchý trik, jak lze zrušit <code>outline</code> pouze v některých případech a neohrozit přitom přistupnost samotného webu.</p>
<p>Rešení jsem našel v drobné JS knihovně <a href="https://github.com/ten1seven/what-input">What Input?</a>, která sleduje všechny vstupy uživatele na webu. Na základě toho přidává k HTML tagu <code>&lt;head&gt;</code> další atributy a neustále mění jejich hodnoty, podle toho, co uživatel na webu momentálně dělá. Výsledek pak vypadá nějak takto:</p>
<pre class="brush: xml; title: ; notranslate">
&lt;!doctype html&gt;
&lt;html class=&quot;whatinput-types-initial whatinput-types-mouse whatinput-types-keyboard&quot; lang=&quot;en&quot; data-whatinput=&quot;keyboard&quot; data-whatintent=&quot;mouse&quot;&gt;
&lt;head&gt;
</pre>
<p>Za zmínku stojí tyto přidané atributy:</p>
<ul>
<li><code>data-whatinput</code> - hodnota tohoto atributu se mění v závislosti na přímých vstupech od uživatele. Může nabývat hodnot <em>mouse</em>, <em>keyboard</em> a <em>touch</em>.</li>
<li><code>data-whatintent</code> &#8211; hodnota tohoto se mění v závislosti na nepřímých vstupech od uživatele.</li>
</ul>
<p>Když uživatel píše text do formulářového políčka, budou mít oba atributy hodnotu <em>keyboard</em>. Jakmile však pohneme myší bez kliknutí, změní se hodnota atributu <code>data-whatintent</code> na <em>mouse</em>. A to je celé. Na tyto atributy můžeme pak reagovat v CSS stylech.</p>
<pre class="brush: css; title: ; notranslate">
/* výchozí :focus styl před tím než se načte knihovna WhatInput */
:focus {

}

/* výchozí styl po spuštění WhatInput, ale před jakoukoliv jinou interakcí */
[data-whatinput=&quot;initial&quot;] :focus {
  outline: 2px dotted black;
}

/* focus pomocí myši */
[data-whatinput=&quot;mouse&quot;] :focus {
  outline-color: red;
}

/* focus pomocí klávesnice */
[data-whatinput=&quot;keyboard&quot;] :focus {
  outline-color: green;
}

/* focus pomocí dotykového zařízení */
[data-whatinput=&quot;touch&quot;] :focus {
  outline-color: blue;
}
</pre>
<p>Pokud se knihovna WhatInput z nějakého důvodu nenačte, máme stále jistotu, že výchozí zvýraznění aktivních prvků je k dispozici.</p>
<p>Nejvíce mi většinou vadí nechtěný <code>outline</code> vznikající při použití myši. Při využití knihovny WhatInput, se ho zbavím velice snadno:</p>
<pre class="brush: css; title: ; notranslate">
[data-whatintent=&quot;mouse&quot;] .prvek:focus {
  outline: 0;
}
</pre>
<p>Nyní mám jistotu, že se mi nechtěný <code>outline</code> neobjeví při pohybu myši. Jakmile použiji k pohybu po webu například <code>TAB</code> klávesu, změní se hodnota atributu na <code>data-whatintent="keyboard"</code> a potřebný <code>outline</code> pro lepší přístupnost je zpět.</p>
<p>V SASS jsem si definici podobného stylu zjednodušil použitím mixinu:</p>
<pre class="brush: css; title: ; notranslate">
@mixin disable-mouse-outline {
  [data-whatintent='mouse'] &amp; {
    outline: 0;
  }
}

/* použití u konkrétních problematických prvků */
.prvek:focus {
  @include disable-mouse-outline;
}
</pre>
<h2>Pár slov závěrem</h2>
<p>Zvýraznění aktivních prvků je na webu velice důležité. Designer znalý dobré přístupnosti na webu by nikdy neměl dopustit, že nepoznáme aktivní element. Osobně si myslím, že není nutné všude používát defaultní <code>outline</code>. Například u formulářových políček dávám často přednost <code>border</code> rámečku. Dá to jen více práce nachystat potřebné styly. Naopak pro klasické odkazy považuji použití výchozího <code>outline</code> za ideální řešení.</p>
<div class="w-actionbox color_alternate controls_aside"><div class="w-actionbox-h"><div class="w-actionbox-text"><h3>Novinky ze světa front-endu</h3><p>Pokud vás zajímají další novinky ze světa front-endu, můžete sledovat můj profil na Twitteru</p></div><div class="w-actionbox-controls at_right"><a class="w-actionbox-button g-btn type_default" href="https://twitter.com/martinpesout"><span>@martinpesout</span></a></div></div></div>
</div></div>]]></content:encoded>
			<wfw:commentRss>https://www.martinpesout.cz/jak-jsem-vyzral-na-nechteny-outline/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Přehlednější definice z-index v jazyce SASS</title>
		<link>https://www.martinpesout.cz/prehlednejsi-definice-z-index-v-jazyce-sass/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=rss</link>
		<comments>https://www.martinpesout.cz/prehlednejsi-definice-z-index-v-jazyce-sass/#comments</comments>
		<pubDate>Mon, 16 May 2016 05:14:41 +0000</pubDate>
		<dc:creator>Martin Pešout</dc:creator>
				<category><![CDATA[Kódování]]></category>
		<category><![CDATA[kódování]]></category>

		<guid isPermaLink="false">http://www.martinpesout.cz/?p=2387</guid>
		<description><![CDATA[CSS vlastnost z-index určuje prioritu při překrývání HTML elementů. Jedná se vlastně o výšku prvku na ose z. Definice se provádí pomocí celého čísla a čím větší číslo prvek dostane, tím více v popředí se bude nacházet. Ať chceme nebo]]></description>
				<content:encoded><![CDATA[<div class="l-submain"><div class="l-submain-h g-html i-cf"><p>CSS vlastnost <code>z-index</code> určuje prioritu při překrývání HTML elementů. Jedná se vlastně o výšku prvku na ose z. Definice se provádí pomocí celého čísla a čím větší číslo prvek dostane, tím více v popředí se bude nacházet. Ať chceme nebo ne, použití vlastnosti <code>z-index</code> se u větších projektů časem nevyhneme. Asi si dokážete představit, že pokud takových definic budeme mít v kódu více, je rázem těžší udržovat správné pořadí. Nehledě na to, že jakákoliv změna pořadí v budoucnu je poměrně pracná a náchylnější na vznik chyb. V tomto článku bych chtěl ukázat jednoduchý trik, jak lze zkrotit definici <code>z-index</code> v jazyce SASS.</p>
<p><span id="more-2387"></span></p>
<p>Celé kouzlo spočívá v tom, že všechny výskyty <code>z-index</code> definujeme pouze na jednom místě v kódu. V SASS k tomuto účelu můžeme použít tzv. <a href="http://sass-lang.com/documentation/file.SASS_REFERENCE.html#maps">mapy</a>. Jedná se o asociativní datový typ, který nám dovoluje definovat více hodnot v rámci jedné proměnné. Každá hodnota má svůj unikátní klíč. Například takto:</p>
<pre class="brush: css; title: ; notranslate">
$colors: (
  primary: #FFBB00,
  secondary: #0969A2,
);
</pre>
<p>Podobně si uložíme do jedné proměnné všechny hodnoty <code>z-index</code>, které na projektu používáme:</p>
<pre class="brush: css; title: ; notranslate">
/**
 * Global definitions for all z-indexes on the web
 */

$layer: (
  disabled-element: 20,
  panel: 950,
  form-bubble: 985,
  header-dropdown: 1100,
  page-sidebar: 1200,
  date-range-picker: 1500,
  modal: 2000,
);
</pre>
<p>Konkrétní hodnotu lze v SASS získat pomocí funkce <a href="http://sass-lang.com/documentation/Sass/Script/Functions.html#map_get-instance_method">map-get</a>, které předáme jako parametr právě námi definovanou mapu <code>$layer</code> a požadovaný klíč.</p>
<pre class="brush: css; title: ; notranslate">
.modal {
  z-index: map-get($layer, modal);
}
</pre>
<p>Já si celý zápis ještě více zjednodušuji pomocí vhodně definované funkce:</p>
<pre class="brush: css; title: ; notranslate">
/**
 * Function for better work with z-indexes;
 */

@function layer($name) {
  @if map-has-key($layer, $name) {
    @return map-get($layer, $name);
  }

  @warn &quot;The key '#{$name}' is not in the map '$layer'&quot;;
  @return null;
};
</pre>
<p>Výhodou použítí této funkce je, že si nemusím pamatovat název proměnné, ve které mám uložené hodnoty <code>z-index</code>. V kódu pak použiji pouze jednoduchý zápis:</p>
<pre class="brush: css; title: ; notranslate">
.modal {
  z-index: layer(modal);
}
</pre>
<p>Díky tomu, že mám všechny hodnoty uložené na jednom místě, se výrazně zjednoduší a zpřehlední všechny budoucí úpravy. Například takové přečíslování hodnot <code>z-index</code> je rázem velice jednoduchý úkon a není třeba pracně procházet celý kód. Upravíme pouze jednu proměnou.</p>
</div></div>]]></content:encoded>
			<wfw:commentRss>https://www.martinpesout.cz/prehlednejsi-definice-z-index-v-jazyce-sass/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Přidávání a odebírání tříd z SVG elementů pomcí jQuery</title>
		<link>https://www.martinpesout.cz/pridavani-a-odebirani-trid-z-svg-elementu-pomci-jquery/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=rss</link>
		<comments>https://www.martinpesout.cz/pridavani-a-odebirani-trid-z-svg-elementu-pomci-jquery/#comments</comments>
		<pubDate>Thu, 18 Jun 2015 07:37:23 +0000</pubDate>
		<dc:creator>Martin Pešout</dc:creator>
				<category><![CDATA[Kódování]]></category>
		<category><![CDATA[jQuery]]></category>
		<category><![CDATA[kódování]]></category>
		<category><![CDATA[SVG]]></category>

		<guid isPermaLink="false">http://www.martinpesout.cz/?p=2231</guid>
		<description><![CDATA[Nedávno jsem se začal více zaměřovat na práci s SVG souborama a také na tvorbu SVG animací. Specializuju se převážně na UI a nepoužívám žádné složité Javascript frameworky. Dá se říct, že ke spokojenému životu front-end vývojáře si vystačím pouze]]></description>
				<content:encoded><![CDATA[<div class="l-submain"><div class="l-submain-h g-html i-cf"><p>Nedávno jsem se začal více zaměřovat na práci s SVG souborama a také na tvorbu SVG animací. Specializuju se převážně na UI a nepoužívám žádné složité Javascript frameworky. Dá se říct, že ke spokojenému životu front-end vývojáře si vystačím pouze s běžnou knihovnou jQuery. Před nedávnem jsem narazil na zajímavý problém. Potřeboval jsem po kliknutí přidat třídu do SVG elementu na stránce, abych mohl nechat proběhnout CSS3 animaci. Všechny knihovny jsem měl načtené. Nicméně po zavolání <code>$('#js-svg-element').toggleClass('element--animated');</code> se nestalo vůbec nic.<span id="more-2231"></span></p>
<p>Přiznám se, že jsem nad tím strávil dost času, než mně došlo, že bude zakopaný pes někde jinde. Stále jsem si myslel, že chyba musí být ukrytá v mém kódu. Nakonec jsem však našel vysvětelní. Manipulace s třídami v jQuery nefunguje na SVG elementech, protože jQuery k tomuto účelu používá vlastnost <a href="https://developer.mozilla.org/en-US/docs/Web/API/Element/className">className</a>. O konkrétní volání v jQuery se stará tato část kódu <a href="https://github.com/jquery/jquery/blob/53aa87f3bf4284763405f3eb8affff296e55ba4f/src/attributes/classes.js#L29-L32">attributes/classes.js</a></p>
<pre class="brush: jscript; title: ; notranslate">
cur = elem.nodeType === 1 &amp;&amp; ( elem.className ?
    ( &quot; &quot; + elem.className + &quot; &quot; ).replace( rclass, &quot; &quot; ) :
    &quot; &quot;
);
</pre>
<p>Toto volání funguje na běžných HTML elementech. Avšak vlastnost <code>className</code> se na SVG elementu chová trochu jinak. Nevrací totiž běžný string, ale instanci <a href="https://developer.mozilla.org/en-US/docs/Web/API/SVGAnimatedString">SVGAnimatedString</a>.</p>
<p>Autoři jQuery o tomto problému ví, nicméně mají tento problém umístěný na <a href="https://contribute.jquery.org/wont-fix/">seznamu požadavků, které nechtějí řešit</a>. Naštěstí existuje jednoduchý trik, s kterým se dá tento problém obejít:</p>
<h2>jQuery .attr()</h2>
<p>Asi nejjednodušším řešením je použití jQuery metody <code>.attr()</code>:</p>
<pre class="brush: jscript; title: ; notranslate">
/**
 * Místo volání metody .addClass('element--animated')
 */
$('#js-svg-element').attr('class', 'element--animated');

/**
 * Místo volání metody .removeClass('element--animated')
 */
$('#js-svg-element').attr('class', '');
</pre>
<p>Volání metody <code>.attr()</code> nahradí celý atribut <code>class</code>, takže pokud již máte na vybraném elementu nějakou třídu a nechcete o ní přijít, budete muset zápis trochu rozšířit:</p>
<pre class="brush: jscript; title: ; notranslate">
/**
 * Místo volání metody .addClass('element--animated')
 */
var element = $('#js-svg-element');
var classes = element.attr('class');
element.attr('class', classes + ' element--animated');
</pre>
<h2>classList</h2>
<p>Druhým řešením, které jsem našel, je použít <a href="https://developer.mozilla.org/en-US/docs/Web/API/Element/classList">classList</a> dostupný ve <em>Web API Interface</em>. <code>classList</code> je považován jako alternativa k běžnému volání, které vrací string tříd oddělených mezerami. Pro manipulaci s třídami nabízí tři metody: <code>.add</code>, <code>.remove</code> a <code>.toggle</code>.</p>
<pre class="brush: jscript; title: ; notranslate">
// div je objekt, který ukazuje na element &lt;div class=&quot;foo bar&quot;&gt;&lt;/div&gt;
div.classList.remove(&quot;foo&quot;);
div.classList.add(&quot;anotherclass&quot;);

// Pokud je třída visible dostupná, tak ji odebere.
// V opačném případě ji přidá.
div.classList.toggle(&quot;visible&quot;);
</pre>
<p>Bohužel Microsoft tuto možnost <a href="http://caniuse.com/#search=classList">podporuje ve svých prohlížečích velice slabě</a>. Pokud budeme chtít toto volání podporovat pro Internet Explorer 9, je třeba své stránky rozšířit o <em>Javascrit Shim</em>, který nám zajístí potřebnou dostupnost pro IE9 a Opera Mini.</p>
<h2>Závěrem</h2>
<p>Na první pohled je druhé řešení mnohem elegantnější a dovolí nám mnohem kratší zápis. Ale řekněme si na rovinu, že v dnešní době je stále nutné zajišťovat podporu pro prohlížeče Internet Explorer 9. Osobně zastávám názor, že přidávání dalších knihoven (jako <em>Javascript Shim</em>) do projektu mně za tu snahu nestojí. Snažím se totiž držet počet pluginů a závislostí na možném minimu. První řešení pomocí jQuery <code>.attr()</code> je za mě jasným vítězem.</p>
<h2>Zdroje</h2>
<ul>
<li><a href="http://stackoverflow.com/a/29525743">http://stackoverflow.com/a/29525743</a></li>
<li><a href="https://contribute.jquery.org/wont-fix/">jQuery Won&#8217;t Fix</a></li>
<li><a href="http://martinwolf.org/2014/12/11/adding-and-removing-classes-from-svg-elements-with-jquery/">Článek na blogu Martin Wolf</a></li>
<li><a href="http://www.whoishostingthis.com/resources/jquery/">Learn and Master jQuery</a></li>
</ul>
<div class="w-actionbox color_alternate controls_aside"><div class="w-actionbox-h"><div class="w-actionbox-text"><h3>Novinky ze světa front-endu</h3><p>Pokud vás zajímají další novinky ze světa front-endu, můžete sledovat můj profil na Twitteru</p></div><div class="w-actionbox-controls at_right"><a class="w-actionbox-button g-btn type_default" href="https://twitter.com/martinpesout"><span>@martinpesout</span></a></div></div></div>
</div></div>]]></content:encoded>
			<wfw:commentRss>https://www.martinpesout.cz/pridavani-a-odebirani-trid-z-svg-elementu-pomci-jquery/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Najděte správné řešení pro vaše selectboxy</title>
		<link>https://www.martinpesout.cz/najdete-spravne-reseni-pro-vase-selectboxy/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=rss</link>
		<comments>https://www.martinpesout.cz/najdete-spravne-reseni-pro-vase-selectboxy/#comments</comments>
		<pubDate>Wed, 05 Nov 2014 23:35:04 +0000</pubDate>
		<dc:creator>Martin Pešout</dc:creator>
				<category><![CDATA[Kódování]]></category>
		<category><![CDATA[knihovny]]></category>
		<category><![CDATA[kódování]]></category>
		<category><![CDATA[UX]]></category>

		<guid isPermaLink="false">http://www.martinpesout.cz/?p=2083</guid>
		<description><![CDATA[K napsání tohoto článku mě vedla dřívější diskuze, kterou jsem otevřel ve skupině Frontedisti.cz na Facebooku. Když jsem se tehdy o danou problematiku zajímal, tak jsem chtěl zjistit, jak přistupují jiní kolegové z oboru k designovnání klasických formulářových selectboxů. Pokud]]></description>
				<content:encoded><![CDATA[<div class="l-submain"><div class="l-submain-h g-html i-cf"><p>K napsání tohoto článku mě vedla dřívější diskuze, kterou jsem otevřel ve skupině <a href="https://www.facebook.com/groups/frontendisti/permalink/1491177374427115/">Frontedisti.cz na Facebooku</a>. Když jsem se tehdy o danou problematiku zajímal, tak jsem chtěl zjistit, jak přistupují jiní kolegové z oboru k designovnání klasických formulářových selectboxů. Pokud jste frontendista, tak se s tímto problémem dříve nebo později setkáte. A záhy zjistíte, že je k dispozici veliké množství různých knihoven, které tento problém řeší. Nicméně pokud chcete být opravdu precizní a postihnout různé případy používání, tak se váš výběr poměrně zužuje. Rád bych v následujícím textu zmínil několik bodů, na které je třeba podle mého názoru pamatovat.</p>
<h2>Začínáme</h2>
<p>Na začátku práce obrží frontendista grafický návrh. Když se zaměřím pouze na selecboxy, tak může být naším cílem vytvořit třeba něco takového:</p>
<p><img class="alignnone size-medium wp-image-2091" alt="Snímek obrazovky 2014-11-03 v 23.55.06" src="http://www.martinpesout.cz/wp-content/uploads/2014/11/Snímek-obrazovky-2014-11-03-v 23.55.06-300x37.png" width="300" height="37" /></p>
<p>Přičemž rozbalená nabídka by měla vypadat následujícím způsobem:</p>
<p><img class="alignnone size-medium wp-image-2107" alt="Snímek obrazovky 2014-11-04 v 1.04.28" src="http://www.martinpesout.cz/wp-content/uploads/2014/11/Snímek-obrazovky-2014-11-04-v 1.04.28-300x133.png" width="300" height="133" /></p>
<p>Cílem práce frontendisty bude, aby takovýto selectbox vypadal ve všech prohlížečích stejně. A to nehledě na to, jestli si budoucí web budeme prohlížet na stolním počítači a nebo na svém mobilu ve vlaku.</p>
<h2>Dnešní doba si (možná) žádá čisté CSS řešení</h2>
<p>Jedním z přístupů by mohlo být překreslení pouze za pomocí kaskádových stylů. U běžných HTML elementů by s tím nebyl problém. Bohužel selecbox se řadí do kategorie tzv. <em>systémových elementů</em> (podobně jako checkbox nebo radio list). Pro nás to znamená, že na takovéto elementy budeme těžko aplikovat vlastní design. Prohlížeč totiž tyto prvky vykresluje podle svých zvyklostí, které jsou dány operačním systémem, na kterém se nacházíte. Situace se sice poslední dobou začíná měnit k lepšímu a frontendistům se otvírá více možností jak stylovat jen za pomocí CSS. Nicméně stále žijeme v době, kdy je třeba pamatovat na starší prohlížeče jako jsou Internet Explorer 9 (případně i verze 8) a další. A každý z nich si tyto prvky vykresluje stále po svém. Firefox nám třeba neumožní překreslit šipku symbolizující možnost rozbalení nabídky a dostaneme následujcí rozbitý výsledek:</p>
<p><img class="alignnone size-medium wp-image-2095" alt="Snímek obrazovky 2014-11-04 v 0.12.28" src="http://www.martinpesout.cz/wp-content/uploads/2014/11/Snímek-obrazovky-2014-11-04-v 0.12.28-300x37.png" width="300" height="37" /></p>
<p>S čistým CSS řešením si tedy nevystačíme.</p>
<h2>Pomožme si Javascriptem</h2>
<p>Ať chcete nebo ne, pokud je třeba sladit selectboxy se zbytkem webu, musíte ještě v dnešní době sáhnout po Javascriptové knihovně. V praxi tyto knihovny fungují tak, že samotný selectbox skryjí a místo něho vytvoří vlastní část HTML kódu, kterou lze pak snadno ostylovat. Pokud si vyberete něco z rozbalovací nabídky nově vzniklého elementu, tak příslušný Javascript změní vybranou hodnotu i ve skrytém selectboxu. Samotný formulář nic nepozná. Při stisknutí potvrzovacího tlačítka se odešlou vždy správné hodnoty. Vše funguje správně jak na stolním počitači, tak na tabletu nebo mobilu.</p>
<h2>V čem je tedy zakopaný pes?</h2>
<p>Problém nastane až v situaci, kdy začneme více přemýšlet nad použitelností na dotykových zařízeních. V případě, že použijeme zmíněné &#8222;obyčejné&#8220; Javascriptové řešení, bude rozbalená nabídka selectboxu vypadat všude stejně. Jak na stolním počítačí, tak i na mobilu. V případě našeho ukázkového řešení dostaneme tedy následující výsledek:</p>
<p><img class="alignnone size-medium wp-image-2107" alt="Snímek obrazovky 2014-11-04 v 1.04.28" src="http://www.martinpesout.cz/wp-content/uploads/2014/11/Snímek-obrazovky-2014-11-04-v 1.04.28-300x133.png" width="300" height="133" /></p>
<p>Pokud na chvilku zapomeneme na náš grafický cíl, kterého chceme dosáhnout, tak <strong>základní neostylovaný selectbox</strong> reaguje i na mobilních zařízeních různým způsobem. Na iPhone telefonu bude výběr hodnoty zobrazen pomocí &#8222;rolovátka&#8220;:</p>
<p><img class="alignnone size-medium wp-image-2100" alt="ZSZh6" src="http://www.martinpesout.cz/wp-content/uploads/2014/11/ZSZh6-156x300.png" width="156" height="300" /></p>
<p>Když budeme chtít vybrat hodnotu na zařízeních s Androidem, uvidíme úplně jiný způsob výběru:</p>
<p><img class="alignnone size-medium wp-image-2101" alt="android-select-correct" src="http://www.martinpesout.cz/wp-content/uploads/2014/11/android-select-correct-186x300.png" width="186" height="300" /></p>
<p>Lze si všimnout, že každý operační systém i napříč mobilními zařízeními, zobrazuje nabídky selectboxů po svém. Výhodou ale je, že takovýto seznam je snadno čitelný a rychlé se ovládá. Vždy je optimálně přizpůsoben zvyklostem na daném zařízení.</p>
<p><strong>Uživatele je zbytečné &#8222;okrádat&#8220; o tento způsob výběru hodnot, na který je zvyklý na svém zařízení.</strong> Nejlepší řešením, které můžete na dotykovém zařízení zvolit, je ostylovat pouze tělo selectboxu, aby zapadalo do vašeho grafického návrhu a rozbalovací nabídku ponechat systémovou. Budeme-li se bavit o mobilu, tak si to můžeme dovolit. Vzhledem k trvanlivosti samotného telefonu má většina uživatelů chytrých telefonů už zařízení, které podporují moderní standardy. Troufnu si říct, že díky tomu na mobilním telefonu netrpíme obdobným problémem jako u klasických prohlížečů.</p>
<p>Ozkoušel jsem si, že není problém přestylovat selectbox pouze pomocí CSS. Pro ostylování naší ukázky postačí něco takového:</p>
<pre class="brush: css; title: ; notranslate">
select {
  box-sizing: border-box;
  display: block;
  padding:  0.375rem 0.4375rem;
  margin:  0 0 0.9375rem 0;
  height: 2.25rem;
  width: 100%;
  max-width: 355px;

  font-family: inherit;
  font-size: 1rem;
  line-height: 1.3125rem;

  appearance: none !important;
  background-color: #fff;
  background-repeat: no-repeat;
  background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAB8AAAAsCAYAAACdQGM6AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAyJpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuMC1jMDYwIDYxLjEzNDc3NywgMjAxMC8wMi8xMi0xNzozMjowMCAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENTNSBNYWNpbnRvc2giIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6QjVBNTA4NjlEOUQ1MTFFMzhCQkQ4NTYxQjFCRjUyNkUiIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6QjVBNTA4NkFEOUQ1MTFFMzhCQkQ4NTYxQjFCRjUyNkUiPiA8eG1wTU06RGVyaXZlZEZyb20gc3RSZWY6aW5zdGFuY2VJRD0ieG1wLmlpZDpCNUE1MDg2N0Q5RDUxMUUzOEJCRDg1NjFCMUJGNTI2RSIgc3RSZWY6ZG9jdW1lbnRJRD0ieG1wLmRpZDpCNUE1MDg2OEQ5RDUxMUUzOEJCRDg1NjFCMUJGNTI2RSIvPiA8L3JkZjpEZXNjcmlwdGlvbj4gPC9yZGY6UkRGPiA8L3g6eG1wbWV0YT4gPD94cGFja2V0IGVuZD0iciI/PnaZgBgAAACiSURBVHja7NfLCcQgEAbgUQIePVqBBViBBQh24smCbMeDFQniZveUQxKISZCFf8CTI9/4BKmU0tegGY3TxAAOHDhw4MCBA/9ffLmSnHPuKaXTHOccee/Z4zM3xpDW+rBfKUXW2neWXQjBQgi7BXzhGCNJKdlre75XwAg8fOC2BYzCv7jzaWit9Vrr8Pjl1j3lnK0Njwxw4MCBAwcOfE58BBgAnE/QLQwhc+sAAAAASUVORK5CYII=);
  background-position: right center;
  color: #333;
  border: 1px solid #ccc;
  border-radius: 5px;
}
</pre>
<h2>Pojďme oba přistupy zkombinovat</h2>
<p>Co jsem zjistil, lze shrnout do dvou bodů:</p>
<ol>
<li>V běžném prohlížeči si s čistým CSS řešením zatím v dnešní době nevystačíme. Je třeba sáhnout po Javascriptové knihovně, která nám zajistí to, že přestyluju jak samotný selectbox, tak i jeho rozbalovací nabídku.</li>
<li>Na mobilním zařízení by byla škoda zobrazovat přestylovanou rozbalovací nabídku. Z hlediska použitelnosti plně postačí přestylovat pouze tělo selectboxu. A rozbalovací nabídku použít nativní. Na tu je uživatel na daném zařízení zvyklý.</li>
</ol>
<p><img class="alignnone size-medium wp-image-2195" alt="Snímek obrazovky 2014-11-04 v 0.29.12" src="http://www.martinpesout.cz/wp-content/uploads/2014/11/Snímek-obrazovky-2014-11-04-v 0.29.121-300x280.png" width="300" height="280" /></p>
<p>A jde to vůbec oba přísupy zkombinovat? Já tvrdím, že určitě ano. Možností je hned několik.</p>
<p>Pro ty z vás, kteří využívají Boostrap, můžete vyzkoušet třeba oblíbenou knihovnu <a href="https://fk.github.io/select2-bootstrap-css/">Select2</a>. Jediný rozdíl bude v tom, že ji nenačtete pokaždé, ale musíte prvně detekovat přístup z mobilního zařízení. A pokud se na takovém zařízení nacházíte, tak nenačtete Select2, ale ponecháte čístý CSS styl. Pro účely detekce postačí následující jednoduchá Javascriptová podmínka:</p>
<pre class="brush: jscript; title: ; notranslate">
if (window.navigator.appName === &quot;Microsoft Internet Explorer&quot;) {
  return document.documentMode &gt;= 8;
}
if (/iP(od|hone|ad)/i.test(window.navigator.userAgent)) {
  return false;
}
if (/Android/i.test(window.navigator.userAgent)) {
  if (/Mobile/i.test(window.navigator.userAgent)) {
    return false;
  }
}
return true;
</pre>
<p>Kdyby náhodou váše mobilní zařízení i tak podmínkou prošlo, tak nemusíte zoufat. Načte se vám přestylovaný selectbox pomocí Select2 a i nadále bude vše funkční.</p>
<p>Já jsem naštěstí objevil knihovnu, která moje požadavky splňuje na maximum. Jmenuje se <a href="http://harvesthq.github.io/chosen/">Chosen jQuery plugin</a>. A v podstatě je to knihovna, kterou bych považoval v současnosti za vítěze mého hledání. Výše zmíněnou detekci má již v sobě. Jediné co tedy stačí splnit, je několik <a href="http://harvesthq.github.io/chosen/">základních kroků</a> potřebných k instalaci. V balíčku, kteří autoři nabízí ke stažení, naleznete základní kaskádové styly v CSS a také verzi pro SASS. Pokud však používáte LESS či Stylus, tak přepsání kaskádových stylů nezabere mnoho času. Syntax není vůbec složitá.</p>
<h2>Pár slov závěřem</h2>
<p>Rád bych závěrem zmínil, že ve výsledku nezáleží ani tak na použité knihovně. Každému projektu totiž vyhovují jiné nástroje. Já jsem se v tomto článku pokusil vypíchnou několik základních bodů, na které se podle mého názoru v České republice zapomíná. Z mobilních zařízení prohlíží vaše weby stále větší množství lidí. Letos jsem se dokonce stetkal s prvním projektem, kde přístupy lidí z mobílních zařízení mírně přesahují 50% celkové návštěvnosti. A takových webů bude nadále přibývat. Proto prosím nepodceňujte použitelnost vašich selectboxů.</p>
</div></div>]]></content:encoded>
			<wfw:commentRss>https://www.martinpesout.cz/najdete-spravne-reseni-pro-vase-selectboxy/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>Metodika BEM</title>
		<link>https://www.martinpesout.cz/metodika-bem/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=rss</link>
		<comments>https://www.martinpesout.cz/metodika-bem/#comments</comments>
		<pubDate>Thu, 10 Apr 2014 23:01:49 +0000</pubDate>
		<dc:creator>Martin Pešout</dc:creator>
				<category><![CDATA[Kódování]]></category>
		<category><![CDATA[BEM]]></category>
		<category><![CDATA[CSS]]></category>
		<category><![CDATA[metodika]]></category>

		<guid isPermaLink="false">http://www.martinpesout.cz/?p=2029</guid>
		<description><![CDATA[Na začátku minulého roku jsem si říkal, že 2013 bude ve znamení optimalizací. Řada firem totiž vytvářela &#8222;responsivní&#8220; webové stránky, které šlo zobrazit na mobilních zařízeních, ale ve finále byl uživatel stejně nucen stahovat megabajty dat, aby si mohl výsledný]]></description>
				<content:encoded><![CDATA[<div class="l-submain"><div class="l-submain-h g-html i-cf"><p>Na začátku minulého roku jsem si říkal, že 2013 bude ve znamení optimalizací. Řada firem totiž vytvářela &#8222;responsivní&#8220; webové stránky, které šlo zobrazit na mobilních zařízeních, ale ve finále byl uživatel stejně nucen stahovat megabajty dat, aby si mohl výsledný web prohlédnout. Rok poté vidíme, že situace stále není ideální, ale určitá osvěta v tomhle směru už zafungovala. Nicméně objevil se tu ještě jeden problém. Větší poptávka po responsivních webech opět o něco zesložitila vývojářům psaní kaskádových stylů. Minulý rok se tak začalo více hovořit o používání standardů jako jsou <a href="http://oocss.org/">OOCSS</a>, <a href="http://webdesign.tutsplus.com/articles/quick-tip-fix-your-messy-css-with-smacss--webdesign-18489">SMACSS</a> a <a href="http://bem.info/method/">BEM</a>, které mají za cíl zlepšit strukturu psaní CSS. Ve své praxi se mně zatím nejvíce osvědčila metodika BEM. Proto bych rád tento článek věnoval jejím základům a položil tak úvod pro další zajímavé články do budoucna.</p>
<p><span id="more-2029"></span></p>
<h2>Jak tato metodika vznikla?</h2>
<p>Metodika <i>Block Element Modifier</i>, zkráceně BEM, byla poprvé použita ve společnosti <a href="http://company.yandex.com/">Yandex</a> při vývoji robustního interního systému. Na počátku bylo potřeba dosáhnout několika cílů:</p>
<ul>
<li>Najít postup pro rychlý vývoj komponent, které přežijí uvnitř rozrůstajícího se projektu</li>
<li>Znovu použitelnost kódu</li>
<li>Snadná a rychlá pochopitelnost pro nové členy v týmu</li>
</ul>
<p>BEM se tak postupně zformovala po několika letech práce na projektu. Výsledkem je poměrně přísný, ale na druhou stranu velice přehledný způsob pojmenovávání CSS tříd. To dělá tuto metodiku ideální pro vývoj projektů, které bude třeba udržovat i několik let.</p>
<h2>BEM nepoužívá ID selektory</h2>
<p>BEM nepočítá s používáním #ID selektoru v CSS. Já s tímto přístupem naprosto souhlasím a hned vysvětlím proč.</p>
<p>První nevýhodou totiž je, že takovéto elementy není možné znovu použít v kódu. Obečně totiž platí, že na vykreslené HTML stránce musí být každá ID použita pouze jednou. Můžeme sice říct, že naše kaskádové styly se aplikují i v případě, že bude konkrétní ID použito několikrát na stránce. Problém však nastává u JavaScriptu, kde se zohledňuje pouze první výskyt daného ID a dál už se nehledá. To je také důvod, proč použití ID je pro JavaScript rychlejší. Pokud se ale vyhneme tvorbě zbytečně složitých webů, bude tento rozdíl nepatrný.</p>
<p>Druhou větší nevýhodou, je priorita ID selektoru. Důležitější selektor &#8222;přebíjí&#8220; méně důležitý. A právě ID selektory mají vyšší prioritu než běžné třídy u HTML elementů. To je taky důvod proč vznikl v CSS zápis <em>!important</em>. Naštěstí všechno, co dokážeme vyjádřit pomocí ID selektoru, můžeme hezky popsat pomocí běžných tříd. Navíc získáme znovupoužitelné komponenty a právě to je pro tuto metodiku podstatná vlastnost.</p>
<h2>BLOCK, ELEMENT, MODIFIER</h2>
<h3>Základem je blok</h3>
<p>Jednotlivé části webové stránky lze rozdělit do ucelených komponent - <strong>bloků</strong>. Jeden blok tak představuje skupinu prvků sdílejících společné vlastnosti. Příkladem může být například hlavička, patička, hlavní menu, produkt, filtr produktů atd. Ukažme si vše na bloku znázorňujícím hlavičku webové stránky, kterou označíme následující třídou.</p>
<pre class="brush: css; title: ; notranslate">
.header {}
</pre>
<h3>Blok může mít své části</h3>
<p>Samotné bloky se můžou skládat z více součástí &#8211; <strong>elementů</strong>. Aby bylo zřejmé, že tyto části patří k naší komponentě, označíme je pomocí vzoru:</p>
<pre class="brush: css; title: ; notranslate">
.block__element {}
</pre>
<p>V zápisu používáme k odlišení bloku a elementu dvojí podtržítko. Naše ukázková hlavička může obsahovat např. logo, navigaci, vyhledávání.</p>
<pre class="brush: css; title: ; notranslate">
.header__logo {}
.header__nav {}
.header__searchbar {}
</pre>
<h3>Specifické elementy</h3>
<p>Může se stát, že takto vytvořené bloky a elementy budeme potřebovat ještě v určitých situacích modifikovat. K těmto účelům slouží v BEM takzvané <strong>modifikátory</strong>. V zápisu používáme k odlišení dvojí pomlčku:</p>
<pre class="brush: css; title: ; notranslate">
.block--modifier {}
.block__element--modifier {}
</pre>
<p>Pokud si vezmeme náš ukázkový příklad, může být takovým modifikátorem třeba třída, která z naší navigace udělá navigaci fixní:</p>
<pre class="brush: css; title: ; notranslate">
.header__nav--sticky {}
</pre>
<p>Nebo hlavičku roztáhneme na 100% šířky stránky:</p>
<pre class="brush: css; title: ; notranslate">
.header--fullscreen {}
</pre>
<h3>Jak na zápis v HTML?</h3>
<p>Jednotlivé komponenty se můžou dále navzájem prolínat. Náš ukázkový příklad s hlavičkou z předchozího odstavce obohatíme ještě o blok <em>.main-nav</em>, který ponese styly pro hlavní navigaci na webu. Výsledný zápis může vypadat v HTML třeba takto:</p>
<pre class="brush: xml; title: ; notranslate">
&lt;header class=&quot;header header--fullscreen&quot;&gt;
  &lt;a href=&quot;/&quot; class=&quot;header__logo&quot;&gt;&lt;img src=&quot;logo.png&quot; alt=&quot;Logo webu&quot; title=&quot;Velké logo&quot; /&gt;&lt;/a&gt;
  &lt;nav class=&quot;header__nav main-nav&quot;&gt;
    &lt;ul&gt;
      &lt;li class=&quot;main-nav__link&quot;&gt;&lt;a href=&quot;/str1.html&quot;&gt;Stránka 1&lt;/a&gt;&lt;/li&gt;
      &lt;li class=&quot;main-nav__link main-nav__link--active&quot;&gt;&lt;a href=&quot;/str2.html&quot;&gt;Stránka 2&lt;/a&gt;&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/nav&gt;
  &lt;form class=&quot;header__searchbar&quot; action=&quot;process.php&quot;&gt;
    &lt;input type=&quot;text&quot; name=&quot;searchtext&quot; /&gt;
    &lt;input type=&quot;submit&quot; value=&quot;Hledat&quot; /&gt;
  &lt;/form&gt;
&lt;/header&gt;
</pre>
<h2>Závěrem</h2>
<p>Pokud jste metodiku BEM ještě nepoužili v praxi, může vám připadat podobný zápis tříd poměrně upovídaný. Ano, názvy tříd jsou o něco delší, nicméně je potřeba se přes to trochu přenést. Až si BEM více osvojíte, tak zjistíte, že vám do vaší práce vnese pořádek a nestane se vám, že byste si začali jednotlivé definice kaskádových stylů mezi sebou omylem přepisovat.</p>
</div></div>]]></content:encoded>
			<wfw:commentRss>https://www.martinpesout.cz/metodika-bem/feed/</wfw:commentRss>
		<slash:comments>8</slash:comments>
		</item>
		<item>
		<title>Animované barevné přechody v CSS</title>
		<link>https://www.martinpesout.cz/animovane-barevne-prechody-v-css/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=rss</link>
		<comments>https://www.martinpesout.cz/animovane-barevne-prechody-v-css/#comments</comments>
		<pubDate>Sat, 04 Jan 2014 13:27:42 +0000</pubDate>
		<dc:creator>Martin Pešout</dc:creator>
				<category><![CDATA[Kódování]]></category>
		<category><![CDATA[animace]]></category>
		<category><![CDATA[CSS3]]></category>
		<category><![CDATA[kódování]]></category>

		<guid isPermaLink="false">http://www.martinpesout.cz/?p=1958</guid>
		<description><![CDATA[Běžný front-end vývojář musí čas od času použít barevné přechody u různých prvků na webové stránce. Typickým příkladem může být třeba barevné talčítko. Jenže rozhodneme-li se přidat k takovému tlačítku animaci, např. při najetí myši ho budeme chtít plynule zesvětlit,]]></description>
				<content:encoded><![CDATA[<div class="l-submain"><div class="l-submain-h g-html i-cf"><p>Běžný front-end vývojář musí čas od času použít barevné přechody u různých prvků na webové stránce. Typickým příkladem může být třeba barevné talčítko. Jenže rozhodneme-li se přidat k takovému tlačítku animaci, např. při najetí myši ho budeme chtít plynule zesvětlit, tak narazíme na problém, protože prohlížeč naší animaci jednoduše ignoruje. V dnešním článku bych rád ukázal zajímavou techniku jen za použití CSS, která problém animovaných přechodů do určité míry řeší.</p>
<h2>Proč problém nastává?</h2>
<p>Aby bylo možné si udělat představu, jak funguje původní neopravené řešení, tak jsem připravil malou ukázku:</p>
<pre class="codepen"data-height="300"data-type="result"data-href="nxqby"data-user="martinpesout"data-safe="true"><code></code><a href="http://codepen.io/martinpesout/pen/nxqby">Check out this Pen!</a></pre><script async src="http://codepen.io/assets/embed/ei.js"></script>
<p>Důvod, proč nelze barevný přechod animovat, je jednoduchý. Podíváme-li se do <a href="http://www.w3.org/TR/css3-transitions/#animatable-properties">specifikace</a>, tak zde uvidíme celou řadu vlastností, na které lze animace použít. Barevné přechody musíme brát jako obrázky, které se renderují přímo v prohlížeči. A právě <code>background-image</code> není v seznamu podporovaných vlastností.</p>
<h2>Jednoduchý trik pro jednoduché animace</h2>
<p>Je sice pravda, že animaci nelze použít na vlastnost <code>background-image</code>, ale je zde stále řada jiných vlastností, které takové omezení nemají. Protože se jedná o jistý druh obrázku, tak máme k dispozici <code>background-size</code> a <code>background-position</code>. A právě <code>background-position</code> již animovat lze. Naleznete jí také v zmíněném <a href="http://www.w3.org/TR/css3-transitions/#animatable-properties">seznamu</a>.</p>
<p>Použijme tedy následující trik. Pozadí (barevný přechod) roztáhneme na výšku pomoci <code>background-size</code> na velikost rovnou dvojnásobku původní velikosti a po najetí myši posuneme celý obrázek o 100% nahoru (tzn. o celý původní rozměr). Zápis v CSS může vypadat následujícím způsobem:</p>
<pre class="brush: css; title: ; notranslate">
.btn {
  background: linear-gradient(#ffce25,#ff9201);
  background-size: auto 200%;
  background-position: 0 100%;
  background-repeat: repeat;
}
</pre>
<p>Nezapomeňte dodržet pořadí zápisu a definovat barevný přechod před změnou jeho velikosti na 200%. Pak už jen zbývá přidat zmíněnou animaci a efekt, který nastane při přejetí myší:</p>
<pre class="brush: css; title: ; notranslate">
.btn {
  transition-property: all;
  transition-duration: 0.25s;
  transition-timing-function: linear;
}

.btn:hover {
  background-position: 0 0;
}
</pre>
<p>Výsledek si můžete prohlédnout zde:</p>
<pre class="codepen"data-height="300"data-type="result"data-href="skAie"data-user="martinpesout"data-safe="true"><code></code><a href="http://codepen.io/martinpesout/pen/skAie">Check out this Pen!</a></pre><script async src="http://codepen.io/assets/embed/ei.js"></script>
<h2>Podpora běžných prohlížečů</h2>
<p>Toto řešení je podporováno u těch prohlížečů, kde je již implementována podpora CSS vlastnosti <code>linear-gradient</code>:</p>
<ul>
<li>Chrome 4+</li>
<li>Firefox 3.6+</li>
<li>Opera 11.1+</li>
<li>Safari 4+</li>
<li>Internet Explorer 10+</li>
</ul>
<p>Více informací naleznete zde <a href="http://caniuse.com/css-gradients">http://caniuse.com/css-gradients</a>.</p>
<p>I když v této ukázce nejsou podporovány starší verze prohlížečů Internet Explorer 8 a 9, tak nemusíme ještě házet flintu do žita. Toto řešení obsahuje jednoduchý fallback a při jejich použití se zobrazí se pouze čísté jednobarevné tlačítko s barvou definovanou u vlastnosti <code>background</code>. Přijdeme sice o animaci a barevný přechod, ale to je jediný rozdíl. Důležité je, že tlačítko neztratí rozměry a barevností zůstane také stejné.</p>
<h2>Závěrem</h2>
<p>Z ukázky lze vidět, že toto jednoduché řešení se hodí pouze na lineární tranformace. Nicméně tyto transformace bývají nejčastější a právě u prvků, jako jsou tlačítka, je využijeme nejvíce. Pokud však někdo z čtenářů objeví lepší a třeba i čistší řešení, budu velice rád, když se o něj podělí v komentářích.</p>
<div class="w-actionbox color_alternate controls_aside"><div class="w-actionbox-h"><div class="w-actionbox-text"><h3>Novinky ze světa front-endu</h3><p>Pokud vás zajímají další novinky ze světa front-endu, můžete sledovat můj profil na Twitteru</p></div><div class="w-actionbox-controls at_right"><a class="w-actionbox-button g-btn type_default" href="https://twitter.com/martinpesout"><span>@martinpesout</span></a></div></div></div>
</div></div>]]></content:encoded>
			<wfw:commentRss>https://www.martinpesout.cz/animovane-barevne-prechody-v-css/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<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>
		<item>
		<title>Tajemství lepšího formátování do bloku</title>
		<link>https://www.martinpesout.cz/tajemstvi-lepsiho-formatovani-do-bloku/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=rss</link>
		<comments>https://www.martinpesout.cz/tajemstvi-lepsiho-formatovani-do-bloku/#comments</comments>
		<pubDate>Fri, 18 Oct 2013 23:33:53 +0000</pubDate>
		<dc:creator>Martin Pešout</dc:creator>
				<category><![CDATA[Kódování]]></category>
		<category><![CDATA[CSS3]]></category>
		<category><![CDATA[kódování]]></category>

		<guid isPermaLink="false">http://beta.martinpesout.cz/?p=1816</guid>
		<description><![CDATA[V tomto příspěvku bych se rád rozepsal o metodice, která je v angličtině popisovaná jako block formatting context. Jednoduše řečeno, jedná se sérii CSS pravidel, které ovlivňují způsob obtékání kolem plovoucích prvků. Trocha specifikace na začátek Když jsem poprvé četl]]></description>
				<content:encoded><![CDATA[<div class="l-submain"><div class="l-submain-h g-html i-cf"><p>V tomto příspěvku bych se rád rozepsal o metodice, která je v angličtině popisovaná jako <strong>block formatting context</strong>. Jednoduše řečeno, jedná se sérii CSS pravidel, které ovlivňují způsob obtékání kolem plovoucích prvků.</p>
<p><span id="more-1816"></span></p>
<h2>Trocha specifikace na začátek</h2>
<p>Když jsem poprvé četl o této metodice, tak se ke mně nejprve dostala <a href="http://www.w3.org/TR/2011/REC-CSS2-20110607/visuren.html#block-formatting">oficiální definice</a>:</p>
<div class="w-testimonial">
						<div class="w-testimonial-h">
							<blockquote>
								<q class="w-testimonial-text"> Floats, absolutely positioned elements, block containers (such as inline-blocks, table-cells, and table-captions) that are not block boxes, and block boxes with &#8218;overflow&#8216; other than &#8218;visible&#8216; (except when that value has been propagated to the viewport) establish new block formatting contexts for their contents. </q>
								<div class="w-testimonial-person">
									<i class="icon-user"></i>
									<span class="w-testimonial-person-name">W3C</span>,
									<span class="w-testimonial-person-meta">CSS 2.1</span>
								</div>
							</blockquote>
						</div>
					</div>
<p>&nbsp;</p>
<p>Pro běžné čtenáře může být tento zápis poměrně nepřehledný a zmatený. Zvažoval jsem tedy, že zde uvedu český přepis, ale díky složitému zápisu by to do celé věci nevneslo moc pořádku. <em>Block formatting context</em> se týká způsobu vykreslování a obtékání prvků na stránce. Vyvoláno bývá jednou z následujících CSS vlastností:</p>
<ul>
<li><code>float: left/right</code></li>
<li><code>overflow: hidden/auto/scroll</code></li>
<li><code>display: table-cell/table-caption</code></li>
<li><code>display: inline-block</code></li>
<li><code><code>position: absolute/fixed</code></code></li>
<li><code>display: flex/inline-flex</code></li>
</ul>
<p>Zkusme si raději celou definici přepsat do lidštější podoby a ukázat na několika příkladech.</p>
<h2>Příklad 1: Jak zabránit zalamování textu?</h2>
<p>Pokud vytváříme webové stránky, tak se nám často stává, že nechceme zalamovat text kolem plovoucího prvku. Typickým příkladem může být vytváření kratičkých sloupců.</p>
<p>Ná následujícím obrázku můžete vidět jednoduché použití vlastnosti <code>float: left</code>. Lze vidět, že pokud je text delší, tak začně obtékat šedý boxík kolem dokola.</p>
<p><img class="alignnone size-full wp-image-1846" alt="ukazka" src="http://www.martinpesout.cz/wp-content/uploads/2013/10/ukazka.jpg" width="650" height="157" /></p>
<p>Co když ale nechceme, aby se text nám zalamoval pod šedým boxíkem? Řešení je velmi jednoduché. Zkusme naše CSS definice mírně upravit</p>
<p><img class="alignnone size-full wp-image-1851" alt="ukazka2" src="http://www.martinpesout.cz/wp-content/uploads/2013/10/ukazka2.jpg" width="650" height="158" /></p>
<p>Všimněte si, že stačilo přidat žulté oblasti vlastnost <code>display: table-cell</code>. V mém přehledu nahoře v textu jsem tuto definici uvedl jako vlastnost, která vyvolává <em>block formatting context</em>. Šírku celé oblasti (v tomto případě 10000px) nastavíme jako šířku celé modré oblasti na obrázku.</p>
<p>Živou ukázku tohoto příkladu si můžete <a href="http://jsbin.com/amarox/4/edit">prohlédnout zde</a>.</p>
<h2>Příklad 2: Vytváření šablony stránky</h2>
<p>Můžeme jít v našem uvažování o trochu dál a využít předchozího příkladu při vytváření celých stránek. Často se stává, že layout připravované stránky počítá s použitím levého či pravého sloupce.</p>
<p><img class="alignnone size-full wp-image-1855" alt="ukazka3" src="http://www.martinpesout.cz/wp-content/uploads/2013/10/ukazka3.jpg" width="650" height="265" /></p>
<p>Hlavní textová část má v CSS definovanou šířku, které odpovídá celé šířce stránky. Navíc přidáme vlastnost <code>display: table-cell</code>. Toto nám dovolí přidávat flexibilní sloupce podle vlastního uvážení. V naší ukázce je vidět sloupec o šířce 300px.  Technika <em>block formatting context</em> je natolik šikovná, že pokud se rozhodneme změnit šírku sloupce např. z 300px na 400px, tak se nemusíme obávat nutnosti přepočítávat ostatní rozměry. Jednoduše změníme šířku levého sloupce a hlavní oblast se nám automaticky přizpůsobí.</p>
<p>Není to jednoduché? Navíc vše funguje i v situacích, kdy se rozhodneme na stránce mít levý i pravý sloupec. Hlavní oblast se nám automaticky přizpůsobí. Ukázku použití tří sloupců si můžete <a href="http://jsbin.com/idohoz/4/edit">prohlédnout zde</a>.</p>
<h2>Zdroje</h2>
<ul>
<li><a href="http://www.youtube.com/watch?v=8YtQwv1cUVs">Fiona Chan &#8211; The secrets of block formatting context</a></li>
<li><a href="http://www.w3.org/TR/2011/REC-CSS2-20110607/visuren.html#block-formatting">W3C definice</a></li>
</ul>
</div></div>]]></content:encoded>
			<wfw:commentRss>https://www.martinpesout.cz/tajemstvi-lepsiho-formatovani-do-bloku/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
	</channel>
</rss>
