<?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; UX</title>
	<atom:link href="https://www.martinpesout.cz/tag/ux/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>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>
	</channel>
</rss>
