<?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</title>
	<atom:link href="https://www.martinpesout.cz/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>Kniha: Design Systems</title>
		<link>https://www.martinpesout.cz/kniha-design-systems/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=rss</link>
		<comments>https://www.martinpesout.cz/kniha-design-systems/#comments</comments>
		<pubDate>Wed, 17 Jan 2018 22:30:12 +0000</pubDate>
		<dc:creator>Martin Pešout</dc:creator>
				<category><![CDATA[Kniha]]></category>
		<category><![CDATA[Webdesign]]></category>

		<guid isPermaLink="false">http://www.martinpesout.cz/?p=2856</guid>
		<description><![CDATA[Pokud pracujete déle na webovém projektu, dostanete se možná do situace, kdy začnete přemýšlet nad jeho lepší organizaci. Nemyslím tím organizaci na úrovni kódu, ale organizaci při návrhu jednotlivých stránek. Projekt by měl navenek působit konzistentně a jednotně. Pokud toho]]></description>
				<content:encoded><![CDATA[<div class="l-submain"><div class="l-submain-h g-html i-cf"><p>Pokud pracujete déle na webovém projektu, dostanete se možná do situace, kdy začnete přemýšlet nad jeho lepší organizaci. Nemyslím tím organizaci na úrovni kódu, ale organizaci při návrhu jednotlivých stránek. Projekt by měl navenek působit konzistentně a jednotně. Pokud toho chcete docílit, je třeba nalézt společný komunikační kanál mezi designery, UX specialisty a frontend vývojáři. Tento společný &#8222;jazyk&#8220; lze vyjádřit tzv. <em>systémem designu</em> (v angličtině pod názvem <em>design system</em>). Smashing Magazine vydal v září 2017 knihu <strong>Design Systems</strong>, která se tímto tématem zabývá. V následujícím textu bych chtěl přiblížit, co v knize najdete a proč se jí vyplatí přečíst. </p>
<p><span id="more-2856"></span> </p>
<p>Autorkou knihy je <a href="http://www.craftui.com/">Alla Kholmatova</a>, UX a interakční designerka s mnohaletou zkušeností v oblasti designu webů. Pravidelně přispívá do designových publikací (např. A List Apart), publikuje články na blogu, přednáší na konferencích a pořádá řadu workshopů. </p>
<p><img src="http://www.martinpesout.cz/wp-content/uploads/2018/01/P1170029-1024x768.jpg" alt="Kniha Design Systems" width="1024" height="768" class="alignnone size-large wp-image-3141" /></p>
<h2>Cílová skupina</h2>
<p>Kniha cílí na malé a středně velké týmy, kteří se snaží integrovat systém designu do svého každodeního života. V podstatě kdokoliv, kdo se podílí na tvorbě daného produktu, může z této knihy profitovat. Na běžných projektech bych knihu doporučil přečíst převážně <strong>designerům, UX specialistům a frontend vývojářům</strong>.</p>
<h2>Oblasti, kterým se kniha věnuje</h2>
<p>Autorka má bohaté zkušenosti v oblasti interakčního designu. Nenajdete zde proto žádné ukázky kódu ani analýzy vhodných nástrojů. Postupně ale získáte přehled o tom, jaké jsou <strong>základní stavební bloky </strong>systému designu a jaké <strong>procesy</strong> by ho měly provázet. Vše, o čem se v knize dočtete, je vysvětleno na reálných ukázkách. Kniha se díky tomu snadno čte a texty by měly být snadno &#8222;stravitelné&#8220; i pro méně zkušené čtenáře. Podíváte se pod pokličku službám jako Airbnb, Atlassian, Spotify, Smashing Magazine, Slack, TED a celé řadě dalších. A právě tyto pohledy na procesy skutečných produktů dávají knize velkou přidanou hodnotu. </p>
<h3>Část I. Základy</h3>
<p>První polovina knihy je zaměřena na <strong>popis návrhových vzorů</strong>. Dozvíte se, že se jedná o znovupoužitelné, opakující se části rozhraní a také proč je důležité tyto vzory co nejdříve rozpoznat. V knize je pak podrobněji rozebíráno rozdělení návrhových vzorů na funkční a pocitové. Funkční vzory si lze představit jako konkrétní komponenty (např. tlačítko, textové pole). Pocitové vzory reprezentují celkový styl produktu (ovlivněny např. používanými barvami, styly ikonek apod.). </p>
<p>V závěru první části se čtenář dozví o důležitosti správného <strong>pojmenovávání návrhových vzorů</strong>. Dobré názvy nesmějí být moc technické a členové v týmu by měli mít možnost do pojmenovávání promlouvat. Jedině tak budou mít všichni pocit, že přispívají ke společnému dílu a začnou systému desingu důvěřovat. V knize jsou pak ukázány konkrétní cesty, jak toho docílit.</p>
<p>Kapitoly první části se věnují následujícím tématům:</p>
<ul>
<li>Kapitola 1: Systémy designu</li>
<li>Kapitola 2: Principy</li>
<li>Kapitola 3: Funkční vzory</li>
<li>Kapitola 4: Pocitové vzory</li>
<li>Kapitola 5: Společný jazyk</li>
</ul>
<h3>Část II. Postupy</h3>
<p>Systém designu se nedá vybudovat jen tak přes noc. Jeho vznik ovlivňuje mnoho faktorů: struktura vaší organizace, týmová kultura, typ samotného produktu a řada dalších věcí. Jedná se o složitý proces a Alla Kholmatova si toho byla při psaní vědoma. Hned první kapitola této části se snaží na příkladech (Airbnb vs. TED) ukázat, že <strong>systém designu nemusí být pokaždé provázený přísnými pravidly</strong>. Přišlo mně zajímavé tuto část knihy zde v recenzi vypíchnout. Mám totiž pocit, že systém designu bývá částo odmítán právě kvůli obavám z jeho náročnosti nebo případné ztráty kreativity. Tato kapitola se snaží podobné obavy vyvrátit.</p>
<p>Zbývající kapitoly se pak zaměřují na <strong>praktické kroky a techniky</strong>, pomocí kterých se dá vystavět a udržovat systém designu. Dozvíte se tak, jaké techniky pomáhají při jeho zavádění do organizace. Nemalá část textu je pak věnována ukázkám postupů při tvorbě návrhových vzorů &#8211; jak je správně najít, pojmenovat a určit jejich význam. V samotném závěru knihy najdete sekci věnovanou tvorbě knihovny návrhových vzorů (<em>pattern library</em>).</p>
<p>Kapitoly druhé části se věnují následujícím tématům:</p>
<ul>
<li>Kapitola 6: Parametry systému designu</li>
<li>Kapitola 7: Plánování a praktické kroky</li>
<li>Kapitola 8: Tvorba funkčních vzorů</li>
<li>Kapitola 9: Tvorba pocitových vzorů</li>
<li>Kapitola 10: Knihovny návrhových vzorů</li>
</ul>
<h2>Co nového vás kniha může naučit?</h2>
<ol>
<li>Jak <strong>získat podporu pro systém designu</strong> u vedení firmy.</li>
<li>Jak provést <strong>audit vašeho rozhraní</strong>.</li>
<li>Jak vybudovat sdílený jazyk designu uvnitř vašeho týmu.</li>
<li>Jak <strong>posunout myšlení celého týmu</strong> od designování jednotlivých stránek po designování produktu jako celku.</li>
<li>Jak co nejdříve rozpoznat jednotlivé vzory při návrhu produktu.</li>
<li>Jak nalézt rovnováhu mezi <strong>znovupoužitelností</strong>, <strong>konsistencí</strong> a přitom <strong>zachovat kreativitu</strong>.</li>
<li>Jak <strong>zamezit duplikování a nekonzistencím</strong> v návrhu.</li>
<li>Jak <strong>vybudovat knihovnu návrhových vzorů</strong>.</li>
<li>Jak efektivně vyvíjet a přidávat nové návrhové vzory.</li>
</ol>
<h2>Ukázková kapitola</h2>
<p>Na webu Smashing Magazine je k dispozici <a href="http://provide.smashingmagazine.com/design-systems-chapter-2.pdf">ukázková kapitola v PDF</a> (0.7MB). Autorka zde rozebírá výhody dobře navrženého systému designu. Můžete si tak udělat představu o tom, jakým stylem je kniha napsaná.</p>
<p><img src="http://www.martinpesout.cz/wp-content/uploads/2018/01/P1170031-1024x768.jpg" alt="Náhled do knihy Design Systems" width="1024" height="768" class="alignnone size-large wp-image-3142" /></p>
<p><img src="http://www.martinpesout.cz/wp-content/uploads/2018/01/P1170032-1024x768.jpg" alt="Náhled do knihy Design Systems" width="1024" height="768" class="alignnone size-large wp-image-3143" /></p>
<h2>Co bylo pro mě největším přínosem?</h2>
<p>Nové knihy od <a href="https://www.smashingmagazine.com/printed-books/">Smashing Magazine</a> se snaží sledovat poslední trendy kolem vývoje webů. Když jsem se začal o systém designu zajímat já, neměl jsem po ruce žádný ucelený zdroj informací, ze kterého bych mohl čerpat. Jedinou možností bylo získávat informace z různých článků na internetu. Vydání této knihy mně osobně udělalo velkou radost a přišlo v pravý čas. </p>
<p>Pro mě byla kniha <em>Design Systems</em> hlavně zdrojem nových informací. I když jsem měl s designem systému už nějaké zkušenosti, lhal bych, kdybych tvrdil, že jsme měli na projektu vše ideálně nastavené. Proto jsem velice ocenil množství ukázek z jiných reálných produktů, kterými je kniha doslova nabitá. Díky nim se nám podařilo do projektu zanést řadu nových postupů.</p>
<h2>Pár slov závěrem</h2>
<p>Systém designu po mě znamenal velkou změnu. Než jsme ho s kolegy začlenili do našeho projektu, byl návrh designu a vývoj frontendu jako dva rozdílné světy. Byl jsem zvyklý, že spolupracují jen výjimečně. Nyní vzájemně kooperují a mám pocit, že je naše aplikace díky tomu snáze udržitelná. Znovupoužitelné části systému se snažíme tvořit společně a zároveň využíváme toho, co už je vytvořené. Pokud jste v podobné situaci a hledáte cestu, jak zlepšit spolupráci mezi designery a frontend vývojáři, mohu vám knihu jen doporučit. <a href="https://www.smashingmagazine.com/printed-books/design-systems/">Design Systems</a> je skvělý startovací bod plný kvalitních informací. </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>Design System je možné objednat na webu Smashing Magazine. Kniha obsahuje 288 barevných stránek a má kvalitní pevnou vazbu. K dispozici je také samostatně jako e-book</p></div><div class="w-actionbox-controls at_right"><a class="w-actionbox-button g-btn type_default" href="https://www.smashingmagazine.com/printed-books/design-systems/"><span>Přejít na e-shop</span></a></div></div></div>
</div></div>]]></content:encoded>
			<wfw:commentRss>https://www.martinpesout.cz/kniha-design-systems/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<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>Kniha: Inclusive Design Patterns</title>
		<link>https://www.martinpesout.cz/kniha-inclusive-design-patterns/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=rss</link>
		<comments>https://www.martinpesout.cz/kniha-inclusive-design-patterns/#comments</comments>
		<pubDate>Tue, 27 Dec 2016 09:12:08 +0000</pubDate>
		<dc:creator>Martin Pešout</dc:creator>
				<category><![CDATA[Kniha]]></category>
		<category><![CDATA[Přístupnost]]></category>

		<guid isPermaLink="false">http://www.martinpesout.cz/?p=2548</guid>
		<description><![CDATA[Pokud se zabýváte novinkami kolem vývoje frontendu, nemohlo vám uniknout, že Smashing Magazine vydává každým rokem několik svých publikací. Letos v září byla výdána nová kniha s názvem Inclusive Design Patterns. Knihu jsem si objednal a musím říct, že se]]></description>
				<content:encoded><![CDATA[<div class="l-submain"><div class="l-submain-h g-html i-cf"><p>Pokud se zabýváte novinkami kolem vývoje frontendu, nemohlo vám uniknout, že <a href="https://www.smashingmagazine.com/">Smashing Magazine</a> vydává každým rokem několik svých publikací. Letos v září byla výdána nová kniha s názvem <strong>Inclusive Design Patterns</strong>. Knihu jsem si objednal a musím říct, že se četla doslova sama. Rozhodl jsem se proto sepsat hlavní postřehy pro ty z vás, kteří možná ještě přemýšlí nad koupí nebo hledají možnost pro nové sebevzdělávání.</p>
<p><span id="more-2548"></span></p>
<p>Autorem knihy je Heydon Pickering, známý jako UI designer, řečník a odborník na přístupnost na webu. Na Smashing Magazine je <a href="https://www.smashingmagazine.com/author/heydon-pickering/">autorem několika zajímavých článků</a>. Dále provozuje svůj blog <a href="http://www.heydonworks.com/">HeydonWorks</a>.</p>
<p><img class="alignnone size-full wp-image-2561 aligncenter" alt="inclusive-design-patterns-22-preview-opt" src="http://www.martinpesout.cz/wp-content/uploads/2016/12/inclusive-design-patterns-22-preview-opt.jpg" width="660" height="658" /></p>
<h2>Zaměření knihy</h2>
<p>Hlavním tématem knihy je tvorba snadno přístupných webů a webových rozhraní. Autor říká, že si možná ani tento problém neuvědomujeme, ale jako vývojáři vytváříme špatně přístupné webové stránky odjakživa. Problémem není nedostatek talentu nebo vědomostí. Problémem je způsob, jakým řešíme konkrétní úkoly.</p>
<p>Heydon si dal za cíl čtenářům ukázat, jak lze vytvořit přístupná rozhraní bez velkého úsilí. Chce všem sdělit, že je nutné nad návrhem komponent přemýšlet jiným způsobem. Je třeba navrhovat web inkluzivně.</p>
<h2>Inkluzivní design &#8211; co to spojení znamená?</h2>
<p>Inkluzivní návrh webu hovoří o tom, že je třeba při vývoji frontendu nahlížet na problém z různých perspektiv. Váš web si budou pravděpodobně prohlížet velice různí uživatelé. Musíme brát v potaz už jen to, že někteří z nich budou web prohlížet na svém notebooku a jiní na mobilu. Někteří můžou mít velice špatné internetové připojení. Jiní zas trpí zrakovou vadou a jsou odkázaní na své čtečky obrazovky s hlasovým výstupem. A to je jen drobný výčet možných situací. Inkluzivní návrh je takový návrh, který počítá s možnými problémy.</p>
<p>Vypůjčil jsem si jednoduchou ukázku z knihy.</p>
<p>HTML:</p>
<pre class="brush: xml; title: ; notranslate">
&lt;div class=&quot;button&quot;&gt;&lt;/div&gt;
</pre>
<p>CSS:</p>
<pre class="brush: css; title: ; notranslate">
.button {
  width: 200px;
  height: 70px;
  background: url('../images/button.png');
}
</pre>
<p>JavaScript:</p>
<pre class="brush: jscript; title: ; notranslate">
button.addEventListener('click', function() {
  // the event fired on click
});
</pre>
<p>Takto navržené tlačítko nepočítá s rozdílným chováním uživatelů. Možných problémů je hned několik. Například:</p>
<ul>
<li>Tlačítko obsahuje PNG obrázek. Uživatel, který bude zoomovat na svém mobilu nebo uživatel s Retina obrazovkou, bude tlačítko vidět rozmazané.</li>
<li>Pokud zakážeme načítání obrázků úplně, stane se takto navržené tlačítko neviditelné.</li>
<li>Protože je použitý <code>&lt;div&gt;</code> element namísto <code>&lt;button&gt;</code>, nebude možné udělat na tlačítko focus pomocí TAB klávesy.</li>
<li>Protože textový popisek tlačítka je umístěný přímo v obrázku, zrakově postižení lidé nemají možnost jak zjistit, který popisek tlačítko obsahuje. Jejich čtečky danou informaci v HTML kódu nenajdou. Navíc takové tlačítko nelze přeložit do jiných jazyků. Tudíž ani uživatelé ze zahraničí, kteří neznají náš jazyk, nebudou schopni daný web používat.</li>
</ul>
<p>Na tvorbu tlačítka a možné problémy je třeba nahlížet z různých perspektiv. V knize je potřeba podobného uvažování neustále opakována. Vždy je vše vysvětleno na konkrétních praktických ukázkách.</p>
<h2>Ať jsi začátečník nebo pokročilý kodér, určitě se dozvíš něco nového</h2>
<p>Když jsem zvažoval, zda tuto knihu vůbec objednat, tak jsem prvně trochu váhal. Říkal jsem si: &#8222;<em>Tvorbou webů se zabývám již deset let a za tu dobu člověk posbírá veliké množství zkušeností. Přinese mně tato kniha něco nového?</em>&#8220; Navíc se snažím pečlivěji vybírat, do čeho investuji svůj volný čas. Co jsem rozhodně něchtěl, je dokola pročítat základní teorii. To považuji za problém i u spousty článků nebo přednášek, na které na internetu narážím &#8211; málo konkrétních ukázek, spousta teorie a konceptů. Naopak zbožňuji a vyhledávám připadové studie &#8211; jdou přímo k věci a na konkrétních ukázkách se toho nejvíce naučím.</p>
<p>Potěšilo mě, když jsem zjistil, že kniha je doslova napěchována praktickými ukázkami. Obsahuje spoustu komponent a připravených ukázek kódu, které můžete rovnou použít v konkrétních situacích.</p>
<p>Nemusíte mít obavu, že se budete učit vytvářet pouze základní věci, jako tlačítka nebo odkazy. Na své si přijde jak začátečník, tak i pokročilý kodér. Kniha z kraje zmiňuje, jak zapisovat správně např. HTML dokument nebo titulek stránky. Důraz se klade opět na přístupnost. Pokročilý čtenář může tento text jen prolétnout a zpytovat své svědomí, zda skutečně daná doporučení dodržuje.</p>
<p>Po několika základních kapitolách přicházejí na řadu pokročilejší techniky. Dozvíte se tak například:</p>
<ul>
<li>jak správně vytvářet přístupné navigace</li>
<li>jak vytvářet SVG ikonky, které nesou sémantickou informaci</li>
<li>jak vytvářet správně formuláře</li>
<li>jak vytvářet jejich validační hlášky způsobem, abychom správně informovali i uživatele se zrakovým postižením použivající čtečku</li>
</ul>
<p>Podobných oblastí, kterým se kniha věnuje, je monohem více.</p>
<h2>Oblasti, kterým se kniha věnuje</h2>
<p>Obsah knihy lze rozdělit do následujících kapitol:</p>
<ol>
<li>Dokument</li>
<li>Odstavec</li>
<li>Jak tvořit blogové články?</li>
<li>Navigace</li>
<li>Menu tlačítko</li>
<li>Inkluzivní prototypování</li>
<li>Jak tvořit seznamy produktů?</li>
<li>Jak vytvářet přístupné filtry?</li>
<li>Registrační formuláře</li>
<li>Test-Driven-Development při tvorbě frontendu</li>
</ol>
<p><img class="alignnone size-full wp-image-2587 aligncenter" alt="inclusive-design-patterns-21-opt" src="http://www.martinpesout.cz/wp-content/uploads/2016/12/inclusive-design-patterns-21-opt.jpg" width="660" height="574" /></p>
<h2>Co bylo pro mě největším přínosem?</h2>
<p>Nejvíce mě překvapilo, jak jsou jednotlivé příklady v knize dávány do spojitosti s použitelností pro zrakově postižené uživatele. Až díky jejich čtečkám obrazovky si dokážeme uvědomit, zda poskytujeme správné sémantické informace. Základní principy jsem znal. Nikdy mně ale nenapadlo, že je třeba použít speciálního přístupu např. při zobrazení validačních hlášek nebo v případě, že používáme &#8222;preloadery&#8220;. V této oblasti jsem získal řadu cenných informací.</p>
<p>V čase, kdy píšu tento článek, patří <strong>Inclusive Design Patterns</strong> mezi nejzajímavější knihy z oblasti frontendu, které jsou na trhu. <a href="https://shop.smashingmagazine.com/products/inclusive-design-patterns" target="_blank">K dispozici je na webu Smashing Magazine</a>, kde je možné pořídit tištěnou nebo jen elektronickou verzi.</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/kniha-inclusive-design-patterns/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>Velikosti dotykových oblastí pod drobnohledem</title>
		<link>https://www.martinpesout.cz/velikosti-dotykovych-oblasti-pod-drobnohledem/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=rss</link>
		<comments>https://www.martinpesout.cz/velikosti-dotykovych-oblasti-pod-drobnohledem/#comments</comments>
		<pubDate>Wed, 16 Mar 2016 13:32:12 +0000</pubDate>
		<dc:creator>Martin Pešout</dc:creator>
				<category><![CDATA[Použitelnost]]></category>
		<category><![CDATA[Přístupnost]]></category>
		<category><![CDATA[kódování]]></category>
		<category><![CDATA[použitelnost]]></category>

		<guid isPermaLink="false">http://www.martinpesout.cz/?p=2271</guid>
		<description><![CDATA[Zamýšleli jste se někdy nad tím, jak veliké mají být dotykové prvky, které máte umístěny na webu? Totiž ne každý element, který vytvoříte, je snadno dostupný pro všechny uživatele. Kurzor myši je velice přesný a dokážete s ním zaměřit i]]></description>
				<content:encoded><![CDATA[<div class="l-submain"><div class="l-submain-h g-html i-cf"><p>Zamýšleli jste se někdy nad tím, jak veliké mají být dotykové prvky, které máte umístěny na webu? Totiž ne každý element, který vytvoříte, je snadno dostupný pro všechny uživatele. Kurzor myši je velice přesný a dokážete s ním zaměřit i poměrně malé oblasti. Situace se však změní, když použijete jiné zařízení a zkusíte web ovládat pomocí prstu na tabletu nebo na mobilním telefonu. Pojďme se společně podívat na doporučení, které nám dávají společnosti Google, Apple a Microsoft.<span id="more-2271"></span></p>
<p>Proč ale dát na rady zrovna těchto společností? Google stojí za vznikem operačního systému Android, Apple je tvůrcem iOS a Microsoft má svůj Windows (Phone). Jeden z těchto tří operačních systémů tvoří základ dnešních chytrých telefonů. Aby byla zajištěna dobrá použitelnost webů i na mobilních zařízeních, vydávají tyto společnosti doporučení, jak by měla vypadat ideální velikost dotykových oblastí.</p>
<h2>Dotykové oblasti podle Google</h2>
<p><a href="https://www.google.com/design/spec/layout/metrics-keylines.html#metrics-keylines-touch-target-size">Specifikace Google</a> doporučuje volit rozměry jednotlivých dotykových oblastí alespoň <strong>48 × 48 dp</strong> pro zachování ideální použitelnosti na dotykových zařízeních. Zároveň by měl být dodržen rozestup mezi více dotykovými prvky nejméně 8 dp. Rozměr 48 dp lze přirovnat fyzickému rozměru 9 mm v závisloti na typu displeje.</p>
<p>Jednotka <code>dp</code> je zkratkou pro <a href="https://www.google.com/design/spec/layout/units-measurements.html#units-measurements-density-independent-pixels-dp-">Density-independent pixel</a> &#8211; tzv. pixel nezávislý na hustotě displeje. Setkáme se s ní na zařízeních s operačním systémem Android a využijí ji především vývojáři Android aplikaci. Používá se pro jednotné zobrazení elementů na obrázovkách s rozdílnou hustotou. Pokud však jako frontendista píšete čistě jen CSS, nemusíte si s <code>dp</code> vůbec lámat hlavu. Rovnout můžete místo jednotky <code>dp</code> uváděd <code>px</code>.</p>
<p>Na následujícím obrázku můžete vidět postupně avatar, ikonku a tlačítko. Dotykové oblasti jsou ve všech případech vysoké 48 dp. I v situaci, kdy je tlačítko nadesignované na výšku pouhých 36 dp, měla by být velikost dotykové oblasti podle doporučení Google vysoká alespoň těch zmíněných 48 dp.</p>
<p style="text-align: left;"><img class="alignnone  wp-image-2307" alt="touch-target" src="http://www.martinpesout.cz/wp-content/uploads/2016/01/touch-target.png" width="228" height="501" /></p>
<h2>Dotykové oblasti podle Apple</h2>
<p><a href="https://developer.apple.com/library/ios/documentation/UserExperience/Conceptual/MobileHIG/LayoutandAppearance.html">Apple doporučuje</a> volit minimální rozměr dotykových oblástí o velikostech <strong>44 × 44 bodů</strong>. Původně byl tento údaj uváděn v pixelech. Rozměr 44 × 44 pixelů je navržen tak, aby odpovídal ideální velikosti dotykové oblasti na starších iPhone s displejem 3.5&#8220; o rozlišení 320 × 480 px (164ppi). Jakmile však přišel Retina displej, který má dvojnásobnou hustotu (326ppi), upravil Apple zároveň své specifikace a uvádí všude body namísto pixelů. I zde však platí pravidlo, že pokud kódujete pouze CSS styly, můžete všude automaticky uvádět pixely.</p>
<h2>Dotykové oblasti podle Microsoftu</h2>
<p><a href="https://msdn.microsoft.com/en-us/library/windows/apps/hh465326.aspx">Specifikace Microsoftu</a> doporučuje volit minimální rozměr dotykových oblastí o velikostech 9 mm nebo větší. To odpovídá rozměru <strong>48 x 48 pixelů</strong> (na displeji s hustotou pixelů 133ppi). Vyloženě pak upozorňuje, ať se vyvarujete používání oblastí menších než 7 mm. Pokud máte více dotykových prvků vedle sebe, měl by být dodržen rozestup alespoň 2 mm.</p>
<h2>Má cenu řešit až takové detaily?</h2>
<p>Velikost dotykových oblastí se v dnešní době opravdu nevyplácí podceňovat. Malá tlačítka nejvíce překvapí uživatele přistupujícího z mobilního zařízení. Není nic otravnějšího než zkoušet třikrát kliknout na položku v menu a až na třetí pokus se dostat na požadovanou stránku. Jiný problém může nastat v případě, kdy se budete snažit vměstnat více dotykových oblastí vedle sebe. Trefit se pak do správného místa, nemusí být zrovna snadné.</p>
<p>Závěrem bych možná jen zmínil, že když jsem velikosti dotykových oblastí testoval na svých zařízeních, začínal jsem mít znatelné problémy až u rozměrů pod 40 pixelů. Proto bych nedoporučoval volit rozměry menší. Větší oblasti rozhodně přispějí jen k lepší použitelnosti a to ocení především budoucí návštěvníci webu.</p>
<h2>Zdroje</h2>
<ul>
<li><a href="https://www.google.com/design/spec/layout/metrics-keylines.html#metrics-keylines-touch-target-size">Google Design &#8211; Metrics &amp; keylines</a></li>
<li><a href="https://developer.apple.com/library/ios/documentation/UserExperience/Conceptual/MobileHIG/LayoutandAppearance.html">iOS Developer Library &#8211; Adaptivity and Layout</a></li>
<li><a href="https://msdn.microsoft.com/en-us/library/windows/apps/hh465326.aspx">Microsoft &#8211; Guidelines for targeting</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/velikosti-dotykovych-oblasti-pod-drobnohledem/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>
	</channel>
</rss>
