<?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>Nekuřácké kupé - Jakub Bouček &#187; HTML</title>
	<atom:link href="http://www.jakub-boucek.cz/blog/rubrika/html/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.jakub-boucek.cz/blog</link>
	<description></description>
	<lastBuildDate>Wed, 25 Jan 2012 23:20:49 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
		<item>
		<title>Čárové kódy na webových stránkách</title>
		<link>http://www.jakub-boucek.cz/blog/carove-kody-na-webovych-strankach/</link>
		<comments>http://www.jakub-boucek.cz/blog/carove-kody-na-webovych-strankach/#comments</comments>
		<pubDate>Wed, 25 Jan 2012 23:11:24 +0000</pubDate>
		<dc:creator>Jakub Bouček</dc:creator>
				<category><![CDATA[HTML]]></category>
		<category><![CDATA[Internet]]></category>
		<category><![CDATA[Návody a FAQ]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[Software]]></category>

		<guid isPermaLink="false">http://www.jakub-boucek.cz/blog/?p=1018</guid>
		<description><![CDATA[Čárové kódy známe všichni, jsou to ty podivné čárky a čísly na krabici mléka, sušenkách i kondomech. Pokud ale vyvíjíte webové aplikace, může se dříve nebo později dostavit požadavek vložit čárový kód i do stránky určené k tisku (například faktura). Samotné vygenerování kódu není takový problém, existují k tomuto účelu desítky různých on-line generátorů i [...]]]></description>
			<content:encoded><![CDATA[<p><a title="Čárový kód na Wikipedii" href="http://cs.wikipedia.org/wiki/%C4%8C%C3%A1rov%C3%BD_k%C3%B3d">Čárové kódy</a> známe všichni, jsou to ty podivné čárky a čísly na krabici mléka, sušenkách i kondomech.</p>
<div class="ilust right "><img class="alignright size-full wp-image-1026" title="codebar_0" src="http://www.jakub-boucek.cz/blog/wp-content/uploads/2012/01/codebar_01.jpg" alt="" width="259" height="117" /></div>
<p>Pokud ale vyvíjíte webové aplikace, může se dříve nebo později dostavit požadavek vložit čárový kód i do stránky určené k tisku (například faktura). Samotné vygenerování kódu není takový problém, existují k tomuto účelu desítky různých <a title="Odkazy na on-line generátory čárových kódů" href="http://cs.wikipedia.org/wiki/%C4%8C%C3%A1rov%C3%BD_k%C3%B3d#Extern.C3.AD_odkazy">on-line generátorů</a> i <a title="Oblíbený PHP genrátor" href="http://www.barcodephp.com/en">off-line generátorů</a>. Tyto generátory pomocí parametrů v URL vygenerují obrázek, který se klasicky pomocí <code>&lt;img&gt;</code> vloží do stránky.</p>
<p>Samotný problém ale bývá s vložením kódu do stránky tak, aby se zobrazil i na počítači bez internetu (např. při uložení dokumentu na flešku) a aby při tisku nedocházelo k rozostření hran, které jsou způsobeny rozdílem DPI mezi obrazovkou a tiskárnou.</p>
<p><span id="more-1018"></span></p>
<h2>Kvalita tisku</h2>
<p>Problém s kvalitou tisku obrázků řešil nedávno na svém <a title="Fakturoid - Kvalitnější tisk obrázků na fakturách" href="http://blog.fakturoid.cz/2011/08/30/tisk-obrazku-na-fakture/">blogu i Fakturoid</a>. Řešení je vcelku jednoduché, stačí obrázek vygenerovat třeba ve dvojnásobných rozměrech a ten na stránce stlačit na původní rozměry pomocí <code>&lt;img width="..." height="..." &gt;</code>.</p>
<p>Prohlížeč potom na obrazovce zobrazí kód takřka stejně jako předtím, ale při tisku, který má mnohem drobnější rozlišení, se takový obrázek vykreslí se všemi detaily, tedy včetně ostrých hran čar.</p>
<p>Příklad můžete vidět na tomto čárovém kódu:</p>
<div id="attachment_1023" class="wp-caption aligncenter" style="width: 353px"><img class="size-full wp-image-1023" title="codebar_1_343px" src="http://www.jakub-boucek.cz/blog/wp-content/uploads/2012/01/codebar_1_343px.png" alt="" width="343" height="50" /><p class="wp-caption-text">Tento čárový kód je zobrazen na obrazovce v poměru 1:1, ale při tisku je jeho kvalita špatná, pro mnoho čteček nepoužitelná.</p></div>
<p>Stejný kód generovaný ve větším rozlišení:</p>
<div id="attachment_1035" class="wp-caption aligncenter" style="width: 351px"><img class="size-full wp-image-1035" title="codebar_1_1364px" src="http://www.jakub-boucek.cz/blog/wp-content/uploads/2012/01/codebar_1_1364px.png" alt="" width="341" height="50" /><p class="wp-caption-text">Tento čárový kód je zobrazen na obrazovce v poměru 1:4. Při tisku je ale zobrazen prvotřídně.</p></div>
<blockquote><p>Pozn.: Některé prohlížeče při tisku nevyhlazují obrázky a proto se mohou oba výše uvedené čárové kódy vytisknout zcela stejně.</p></blockquote>
<p>Aby kód dobře vypadal dobře na obrazovce, je vhodné striktně dodržovat poměr 1:2 nebo 1:4, protože jinak se bude obrázek přepočítávat přes pixely a bude vypadat ošklivě a rozmazaně (na tisk to má ale minimální vliv).</p>
<div id="attachment_1035" class="wp-caption aligncenter" style="width: 460px"><img class="size-full wp-image-1035" title="codebar_1_1364px" src="http://www.jakub-boucek.cz/blog/wp-content/uploads/2012/01/codebar_1_343px.png" alt="" width="450" height="40" /><p class="wp-caption-text">Nehezký efekt při úpravě velikosti obrázku v jiném poměru než 1:2 či 1:4</p></div>
<p>Pokud už budete takto násilně upravovat velikost čárového kódu, můžete rovnou generovat obrázek o výšce 1px a velikost pak podle potřeby upravit ve stránce obdobným způsoben. U obrázků čárového kódu bez dalších prvků (např. popisku) lze libovolně měnit poměr obrázku, aniž by to mělo na kvalitu jeho zobrazení vliv.</p>
<h2>Tisk bez internetu</h2>
<p>Klasické vložení pomocí tagu <code>&lt;img src="http://domena.tld/obrazek.png"&gt;</code> má několik nedostatků:</p>
<ol>
<li>Bez připojení k internetu se nic nezobrazí,</li>
<li>Není součástí dokumentu (což například u faktury představuje problém),</li>
<li>Obrázek se generuje při každém zobrazení faktury znovu,</li>
<li>Rozměry obrázku nejsou předem známé, protože ty se definují až při samotném generování podle množství dat.</li>
</ol>
<p>Všechny uvedené problémy může vyřešit <a title="Zdroják - Datová URL pomohou s malými soubory" href="http://zdrojak.root.cz/clanky/datova-url-pomohou-s-malymi-soubory/">datové URL</a>, tedy obrázek zakódovaný přímo ve zdrojovém kódu stránky. Jeho vytvoření lze v PHP zajistit pomocí funkce <code>base64_encode()</code> a výsledek vypadá následovně:</p>
<pre>&lt;img src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAABVQAAAABCAIAAAC+HbKQ
AAAACXBIWXMAAAsSAAALEgHS3X78AAAAlUlEQVRIie2XUQrAIAxD1/sf2v0K25MUW61gPiWm0UZR
a609O2Bmv+O9n55DPhWO4oHqEpRaUWtcqansw4xP0vGua0ZzxgMhKkuKTlROlLnZfPJWLZMVzqai
SRyvJvEr9MLLOZ1/MznmZ+eEcHvx5d931FhHqUWokEnFW7VeEFbe1Rl1T3kHZnv2/hMVTWUu6UTt
QzZeWZgLDmfubaMAAAAASUVORK5CYII=" /&gt;</pre>
<div id="attachment_1035" class="wp-caption aligncenter" style="width: 351px"><img class="size-full wp-image-1035" title="codebar_1_1364px" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAABVQAAAABCAIAAAC+HbKQAAAACXBIWXMAAAsSAAALEgHS3X78AAAAlUlEQVRIie2XUQrAIAxD1/sf2v0K25MUW61gPiWm0UZRa609O2Bmv+O9n55DPhWO4oHqEpRaUWtcqansw4xP0vGua0ZzxgMhKkuKTlROlLnZfPJWLZMVzqaiSRyvJvEr9MLLOZ1/MznmZ+eEcHvx5d931FhHqUWokEnFW7VeEFbe1Rl1T3kHZnv2/hMVTWUu6UTtQzZeWZgLDmfubaMAAAAASUVORK5CYII=" alt="" width="341" height="50" /><p class="wp-caption-text">Čárový kód vykreslený pomocí datového URL</p></div>
<p>Je třeba ale zvážit, jaké bude primární použití takové faktury. Určitá omezení proto mohou dosáhnout na uživatele, kteří budou mít na svých počítačích starší Internet Explorer. Ten si s datovými URL moc nerozumí. Je proto vhodné toto nasazovat pouze v prostředí, kde lze ovlivnit volbu prohlížeče, například pro účely firemního intranetu. Mimo toto kontrolované prostředí lze datová URL využívat za předpokladu, že čárové kódy na dokumentu jsou pouhým doplňkem a netvoří nezbytnou součást takového dokladu.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.jakub-boucek.cz/blog/carove-kody-na-webovych-strankach/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>ID nebo class?</title>
		<link>http://www.jakub-boucek.cz/blog/id-vs-class/</link>
		<comments>http://www.jakub-boucek.cz/blog/id-vs-class/#comments</comments>
		<pubDate>Wed, 15 Apr 2009 22:12:38 +0000</pubDate>
		<dc:creator>Jakub Bouček</dc:creator>
				<category><![CDATA[HTML]]></category>
		<category><![CDATA[Internet]]></category>
		<category><![CDATA[Návody a FAQ]]></category>
		<category><![CDATA[Zamyšlení]]></category>

		<guid isPermaLink="false">http://www.jakub-boucek.cz/blog/?p=112</guid>
		<description><![CDATA[Při kódování HTML (a nejen v něm) se často nesprávně zaměňují atributy ID a CLASS. Velkou chybou je tyto atributy považovat za podobné, nebo dokonce zaměnitelné. A přesto se tomu tak děje, neboť pro začátečníky je jejich použití (tj. tagování elementů pro stylování v CSS) velmi podobné (#id nebo .class). Ve skutečnosti mají téměř protichůdné [...]]]></description>
			<content:encoded><![CDATA[<p>Při kódování HTML (a nejen v něm) se často nesprávně zaměňují atributy ID a CLASS.</p>
<p>Velkou chybou je tyto atributy považovat za podobné, nebo dokonce zaměnitelné. A přesto se tomu tak děje, neboť pro začátečníky je jejich použití (tj. tagování elementů pro stylování v CSS) velmi podobné (#id nebo .class).</p>
<p>Ve skutečnosti mají téměř protichůdné chování.<span id="more-112"></span></p>
<p>ID dává prvku název. Název, který musí být v daném prostoru jedinečný. Podle tohoto názvu musí být prvek jednoznačně určitelný.</p>
<p>CLASS určuje vlastnosti prvku.</p>
<p>Převedeno na příkladu na lidech, ID je „Jakub Bouček, nar.: 11. 11. 1982“, kdežto CLASS by mohl být: „běloch, černovlasý, vysoký, hubený, programátor“. Zatímco podle ID byste ani na celé zemi nenašli jiného odpovídajícího člověka než mě, tak vychrtlých černovlasých programátorů, věřím, je mnoho.</p>
<p>Podobný systém by se měl dodržovat i při kódování v HTML.</p>
<p>Nečastějším důvodem pro použití ID je potřeba dvojího označení jednoho elemntu. Tedy pokud máte například řadu prvků, které mají určitý CLASS a dodatečně zjistíte, že pro stylovní potřebujete v kódu označit první prvek v této řadě. Zde to přímo láká použít ID.</p>
<pre>&lt;div class="trida" id="prvni"&gt;...&lt;/div&gt;
&lt;div class="trida"&gt;...&lt;/div&gt;
&lt;div class="trida"&gt;...&lt;/div&gt;
&lt;div class="trida"&gt;...&lt;/div&gt;
&lt;div class="trida"&gt;...&lt;/div&gt;
&lt;div class="trida"&gt;...&lt;/div&gt;</pre>
<p>Ve stylech pak napíšete jen:</p>
<pre>div.trida#prvni {...}</pre>
<p>Jenže tím si sobě pravděpodobně řežete větev pod vlasním zadkem. Je velká pravděpodobnost, že co nevidět bude třeba mít na stránce podobné řady prvků dvě a nastane problém s tím, že id=&#8220;prvni&#8220; nesmí být na stránce použito více než jednou. Pak totiž nezbývá, než vytvářet zvěrstva jako &#8222;prvni2&#8243;, nebo pravidlo jedinečnosti ignorovat a mít tak nevalidní kód.</p>
<p>Lepším řešeím je proto využít toho, že jeden prvek může mít více class a proto lze zapsat:</p>
<pre>&lt;div class="trida prvni"&gt;...&lt;/div&gt;

div.trida.prvni {...}</pre>
<h2>Závěrem</h2>
<p>Obecně tedy platí, že ID je vhodné použít pouze tehy, pokud je jím jednoznačně označen nějaký přesně určený kus stránky, který pro danou stránku zcela jedinečný.</p>
<p>Proto je například dobré mít pomocí ID stránku rozdělenou na pevně stanovené bloky, což jest: hlavička stránky, hlavní menu, logo stránky, pomocné menu, drobečková navigace, místní nabídka (boční panel), obsah stránky a patička stránky.U těchto bloků se vám nestane, že by se některý mohl někdy v budoucnu opakovat vícekrát na stránce.<br />
A pokud by přecijen nějaká taková situace nastala, že by se kupříkladu na stránce objevily dvě hlavičky, nebude to určitě jen tak a navíc tyto hlavičky budou mít vůči sobě určitě nějaký vztah (nadřazený/podazený), který lze použít pro jejich jednoznačnou identifikaci v názvu ID (např.: sub_header).</p>
<p>A velmi stručně řečeno: nepoužívejte v kódu ID, pokud k tomu opravdu nebudete schopni dokonale obhájit, proč to děláte.</p>
<p>Problematika ID a CLASS jde ještě více do hloubky, ale to už je zcela nad rámec tohoto článku.</p>
<div class="wp-caption aligncenter" style="width: 510px"><img src="/data/blog/id_vs_class_02.png" alt="Příklad velmi špatného použití ID. Zdroj: pratele.okamzite.eu" width="500" height="255" /><p class="wp-caption-text">Příklad velmi špatného použití ID. Zdroj: pratele.okamzite.eu</p></div>
]]></content:encoded>
			<wfw:commentRss>http://www.jakub-boucek.cz/blog/id-vs-class/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

