<?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>&#60;?blog &#187; html</title>
	<atom:link href="http://blog.visionsoftware.pl/tag/html/feed" rel="self" type="application/rss+xml" />
	<link>http://blog.visionsoftware.pl</link>
	<description>...nie tylko o programowaniu</description>
	<lastBuildDate>Sun, 23 Mar 2014 19:23:43 +0000</lastBuildDate>
	<language>pl-PL</language>
		<sy:updatePeriod>hourly</sy:updatePeriod>
		<sy:updateFrequency>1</sy:updateFrequency>
	
	<item>
		<title>Wielojęzyczne strony &#8211; jak wybrać domenę?</title>
		<link>http://blog.visionsoftware.pl/pozycjonowanie-seo/wielojezyczne-strony-jak-wybrac-domene.html</link>
		<comments>http://blog.visionsoftware.pl/pozycjonowanie-seo/wielojezyczne-strony-jak-wybrac-domene.html#comments</comments>
		<pubDate>Mon, 30 Jan 2012 19:36:23 +0000</pubDate>
		<dc:creator><![CDATA[Marcin Fliszta]]></dc:creator>
				<category><![CDATA[Pozycjonowanie]]></category>
		<category><![CDATA[alternate]]></category>
		<category><![CDATA[canonical]]></category>
		<category><![CDATA[domeny]]></category>
		<category><![CDATA[html]]></category>
		<category><![CDATA[wersje językowe]]></category>

		<guid isPermaLink="false">http://blog.visionsoftware.pl/?p=491</guid>
		<description><![CDATA[Tworząc strony internetowe zawierające różne wersje językowe, musimy zwrócić uwagę na kilka ważnych spraw. Ma to późniejszy wpływ na pozycję w wyszukiwarkach, co przekłada się na liczbę odwiedzających. Warto o tym także pomyśleć w kontekście kosztów. Jaki adres www powinny mieć wersje językowe strony? Istnieją trzy podstawowe możliwości rozwiania problemu z wersjami strony www. Po pierwsze możemy wykupić różne domeny dla każdej z nich. Przykładowo pod adresem mojastrona.pl umieścimy rodzimą wersję, pod mojastrona.com angielską, mojastrona.de [&#8230;]]]></description>
				<content:encoded><![CDATA[<p>Tworząc strony internetowe zawierające różne wersje językowe, musimy zwrócić uwagę na kilka ważnych spraw. Ma to późniejszy wpływ na pozycję w wyszukiwarkach, co przekłada się na liczbę odwiedzających. Warto o tym także pomyśleć w kontekście kosztów.<span id="more-491"></span></p>
<h3>Jaki adres www powinny mieć wersje językowe strony?</h3>
<p>Istnieją trzy podstawowe możliwości rozwiania problemu z wersjami strony www. Po pierwsze możemy wykupić różne domeny dla każdej z nich. Przykładowo pod adresem mojastrona.pl umieścimy rodzimą wersję, pod mojastrona.com angielską, mojastrona.de niemiecką itd. Oczywiście z uwagi na koszty domen jest to najdroższa możliwość. O ile można to robić przy kliku krajach, to ich większa ilość stwarza coraz większe problemy.</p>
<p>Przeciwną możliwością jest skorzystanie z podziału serwisu na części według języka i korzystanie z odpowiedniego parametru do jego rozróżnienia. Może to wyglądać następująco:</p>
<ul>
<li>mojastrona.pl</li>
<li>mojastrona.pl/en</li>
<li>mojastrona.pl/de</li>
</ul>
<p>Takie rozwianie jest znaczenie tańsze (potrzebujemy tylko jednej domeny), jednak ma swoje wady. Cała strona jest umieszczona pod jednym adresem IP, katalogi stron www przyjmą tylko jej jedną wersję, a więc trudniej przeprowadzić udane pozycjonowanie. Takich minusów jest jeszcze więcej.</p>
<p>Istnieje dobra metoda pośrednia pomiędzy dwoma powyższymi przypadkami, opierająca się na subdomenach. Łączy ona ich zalety w postaci niskich kosztów (subdomeny mamy w cenie domeny głównej) oraz nie posiada wad drugiej z omówionych możliwości. Na początek pod główną domeną umieszczamy naszą podstawową wersję językową. Może to być mojastorna.pl dla wersji polskiej, jednak w przypadku stawiania na wielojęzyczność lepiej skorzystać z mojastrona.com dla angielskiej itd. Następnie dla kolejnych tworzymy kolejne, na przykład:</p>
<ul>
<li>pl.mojastrona.com</li>
<li>de.mojastrona.com</li>
<li>fr.mojastrona.com</li>
<li>ru.mojastrona.com</li>
</ul>
<p>Możemy także w ten sposób tworzyć wersje językowe dla poszczególnych krajów. Przykładowo język hiszpański wygląda trochę inaczej w swojej ojczyźnie niż w Meksyku. Dlatego możemy zastosować następujące wersje:</p>
<ul>
<li>es-es.mojastrona.com – hiszpańska wersja językowa dla mieszkańców Hiszpanii</li>
<li>es-mx.mojastrona.com – hiszpańska wersja językowa dla mieszkańców Meksyku</li>
</ul>
<h3>Oznaczenie wersji językowych dla Google</h3>
<p>Gdy poszczególne wersje językowe strony są wydzielone na subdomenach, warto dodatkowo pokazać Google, jak ma je rozróżniać. Można w tym celu skorzystać z właściwości rel=”alternate” dla znacznika HTML link. Można to zrobić w następujący sposób:</p>
<pre class="brush: xml; light: true; title: ; notranslate">
&lt;link rel=&quot;alternate&quot; hreflang=&quot;en&quot; href=&quot;http://example.com/&quot; /&gt;
&lt;link rel=&quot;alternate&quot; hreflang=&quot;de&quot; href=&quot;http://de.example.com/&quot; /&gt;
&lt;link rel=&quot;alternate&quot; hreflang=&quot;es-ES&quot; href=&quot;http://es-es.example.com/&quot; /&gt;
&lt;link rel=&quot;alternate&quot; hreflang=&quot;es-MX&quot; href=&quot;http://es-mx.example.com/&quot; /&gt;
</pre>
<p>Dodatkowo, gdy wyświetlamy bardzo podobną treść pod różnymi subdomenami dla kilku krajów, warto oznaczyć wersję preferowaną. Można to zrobić przy pomocy właściwości rel=”canonical” znacznika link. Dzięki temu unikniemy problemów z duplikowaniem treści:</p>
<pre class="brush: xml; light: true; title: ; notranslate">
&lt;link rel=&quot;canonical&quot; href=&quot;http://www.example.com/&quot; /&gt;
</pre>
]]></content:encoded>
			<wfw:commentRss>http://blog.visionsoftware.pl/pozycjonowanie-seo/wielojezyczne-strony-jak-wybrac-domene.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>@font-face czyli niestandardowe czcionki na stronie www</title>
		<link>http://blog.visionsoftware.pl/css-xhtml/font-face-czyli-niestandardowe-czcionki-na-stronie-www.html</link>
		<comments>http://blog.visionsoftware.pl/css-xhtml/font-face-czyli-niestandardowe-czcionki-na-stronie-www.html#comments</comments>
		<pubDate>Mon, 31 Oct 2011 20:57:12 +0000</pubDate>
		<dc:creator><![CDATA[Marcin Fliszta]]></dc:creator>
				<category><![CDATA[CSS/XHTML]]></category>
		<category><![CDATA[@font-face]]></category>
		<category><![CDATA[css]]></category>
		<category><![CDATA[czcionki]]></category>
		<category><![CDATA[Font Squirrel]]></category>
		<category><![CDATA[fonty]]></category>
		<category><![CDATA[Google Web Fonts]]></category>
		<category><![CDATA[html]]></category>

		<guid isPermaLink="false">http://blog.visionsoftware.pl/?p=393</guid>
		<description><![CDATA[Podczas projektowania strony internetowej nie mamy zbyt dużego wyboru jeśli chodzi o dostępne czcionki. Korzystając z HTML oraz CSS możemy standardowo wykorzystać raptem kilka fontów, które poprawnie wyświetlą się na większości urządzeń i przeglądarek. Osoby, które mają bardziej artystyczne zachcianki, muszą niestety skorzystać z elementów graficznych lub Flasha, co sprawia  pewne problemy. Istnieje jednak dobre rozwiązanie problemu &#8211; deklaracja własnych czcionek w CSS przez @font-face. Niestandardowe czcionki jako grafika Jak już wspomniałem we wstępie, umieszczanie [&#8230;]]]></description>
				<content:encoded><![CDATA[<p>Podczas projektowania strony internetowej nie mamy zbyt dużego wyboru jeśli chodzi o dostępne czcionki. Korzystając z HTML oraz CSS możemy standardowo wykorzystać raptem kilka fontów, które poprawnie wyświetlą się na większości urządzeń i przeglądarek. Osoby, które mają bardziej artystyczne zachcianki, muszą niestety skorzystać z elementów graficznych lub Flasha, co sprawia  pewne problemy. Istnieje jednak dobre rozwiązanie problemu &#8211; deklaracja własnych czcionek w CSS przez <code>@font-face</code>.<span id="more-393"></span></p>
<h3>Niestandardowe czcionki jako grafika</h3>
<p>Jak już wspomniałem we wstępie, umieszczanie &#8222;graficznych tekstów&#8221; nie jest najlepszym rozwiązaniem, po pierwsze ze względu na pozycjonowanie. Dla Google bardzo ważna jest treść na naszej stronie, a w przypadku takiego podejścia nie będzie ona odczytana. Dodatkowo utrudnione będzie wprowadzanie zmian na stronie, gdyż za każdym razem będziemy musieli generować na nowo grafiki i wstawiać je na stronie. Podobne problemy może sprawiać strona przygotowana we Flashu.</p>
<p>Aby to zautomatyzować, możemy wykorzystać bibliotekę JavaScript Cufon. Generuje ona sama potrzebne grafiki do wprowadzonych przez nas tekstów, jednak pozostanie drugi z problemów &#8211; odczytanie ich przez wyszukiwarki internetowe.</p>
<p>Jeśli w graficzny sposób tworzymy tylko niewielkie części strony, menu lub nagłówek, nie będzie to problem. Co jednak zrobić w przypadku normalnych tekstów?</p>
<h3>Wstawianie czcionek przez <code>@font-face</code></h3>
<p>Istnieje bardzo proste rozwiązanie powyższych problemów. W CSS możemy dodawać własne, niestandardowe czcionki przy pomocy <code>@font-face</code>. Pewną niedogodnością jest to, że poszczególne przeglądarki internetowe wykorzystują różne standardy (EOT, SVG,  WOFF, TTF). Możemy jednak w jednej definicji zawrzeć różne warianty, dzięki czemu w praktycznie w każdej wygląd będzie taki, jak zamierzaliśmy (nawet w Internet Explorer 6).</p>
<p>Najprościej stworzyć wymagane definicje za pośrednictwem serwisu <a href="http://www.fontsquirrel.com/" title="Font Squirrel" target="_blank">Font Squirrel</a>. Możemy tam wybrać z całkiem pokaźnego zbioru interesującą nas czcionkę i pobrać paczkę zawierającą pliki źródłowe w różnych formatach oraz wymagany kod CSS.</p>
<p>Jeśli nie znajdziemy w zasobach serwisu interesującego fonta, możemy stworzyć własną definicję. Trzeba w tym celu posiadać plik <code>TTF</code>, z którego dostępny generator utworzy dla nas indywidualną paczkę z definicją czcionki.</p>
<p>Gdy posiadamy już definicję wybranej przez nasz czcionki w plikach EOT, SVG,  WOFF oraz TTF należy je wgrać na serwer, a następnie określić nową czcionkę w CSS podając odpowiednie ścieżki:</p>
<pre class="brush: css; light: true; title: ; notranslate">
@font-face {
font-family: 'KingthingsSpikelessRegular';
src: url('Kingthings_Spikeless-webfont.eot');
src: url('Kingthings_Spikeless-webfont.eot?#iefix') format('embedded-opentype'),
url('Kingthings_Spikeless-webfont.woff') format('woff'),
url('Kingthings_Spikeless-webfont.ttf') format('truetype'),
url('Kingthings_Spikeless-webfont.svg#KingthingsSpikelessRegular') format('svg');
font-weight: normal;
font-style: normal;
}
</pre>
<p>Następnie wystarczy tak zdefiniowaną czcionkę przypisać standardowo do odpowiedniego obiektu poprzez <code>font-family</code>:</p>
<pre class="brush: css; light: true; title: ; notranslate">
p {font-family: KingthingsSpikelessRegular, Arial, sans-serif}
</pre>
<h3>Niestandardowe czcionki z Google Web Fonts</h3>
<p>Jeśli nie chcemy sami przygotowywać definicji czcionek i wgrywać ich na nasz serwer, możemy skorzystać z usługi <a href="http://www.google.com/webfonts#HomePlace:home" title="Googe Web Fonts" target="_blank">Google Web Fonts</a>. Po wyborze interesującej nas czcionki możemy ją dodać na trzy różne sposoby:</p>
<ul>
<li>standardowe dołączenie dokumentu CSS
<pre class="brush: xml; light: true; title: ; notranslate">
&lt;link href='http://fonts.googleapis.com/css?family=Nosifer+Caps' rel='stylesheet' type='text/css'&gt;
</pre>
</li>
<li>
polecenie <code>@import</code> w CSS</p>
<pre class="brush: css; light: true; title: ; notranslate">
@import url(http://fonts.googleapis.com/css?family=Nosifer+Caps);
</pre>
</li>
<li>
kod Java Script
</li>
</ul>
<p>Usługa Google sama rozpozna z jakiej przeglądarki korzystamy i prześle jej odpowiednie definicje. Szybkość działania jest bardzo dobra, czcionki pojawiają się w wybranym formacie praktycznie od razu.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.visionsoftware.pl/css-xhtml/font-face-czyli-niestandardowe-czcionki-na-stronie-www.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Wywołanie nowego okna i ściemnienie tła w jQuery</title>
		<link>http://blog.visionsoftware.pl/java-script-jquery/wywolanie-nowego-okna-i-sciemnienie-tla-w-jquery.html</link>
		<comments>http://blog.visionsoftware.pl/java-script-jquery/wywolanie-nowego-okna-i-sciemnienie-tla-w-jquery.html#comments</comments>
		<pubDate>Mon, 24 Jan 2011 22:38:13 +0000</pubDate>
		<dc:creator><![CDATA[Marcin Fliszta]]></dc:creator>
				<category><![CDATA[Java Script/jQuery]]></category>
		<category><![CDATA[css]]></category>
		<category><![CDATA[html]]></category>
		<category><![CDATA[java script]]></category>
		<category><![CDATA[jquery]]></category>
		<category><![CDATA[xhtml]]></category>

		<guid isPermaLink="false">http://blog.visionsoftware.pl/?p=154</guid>
		<description><![CDATA[Ciekawym sposobem na wywołanie nowego okna dialogowego jest wyświetlenie go na bieżącej stronie, ściemniając jednocześnie tło. Podobny efekt stosuje m. in. Lightbox. W ten sposób okno będzie dobrze widoczne a użytkownik nie będzie zdezorientowany interfejsem. W niniejszym tekście postaram się pokazać, jak wyświetlić w ten sposób dodatkowy formularz stosując jQuery. Na zakończenie niniejszego poradnika otrzymamy efekt, który można zobaczyć w całości tutaj. Będzie to formularz umożliwiający dodanie nowej osoby do przykładowego systemu. Znajdzie się na [&#8230;]]]></description>
				<content:encoded><![CDATA[<p>Ciekawym sposobem na wywołanie nowego okna dialogowego jest wyświetlenie go na bieżącej stronie, ściemniając jednocześnie tło. Podobny efekt stosuje m. in. Lightbox. W ten sposób okno będzie dobrze widoczne a użytkownik nie będzie zdezorientowany interfejsem. W niniejszym tekście postaram się pokazać, jak wyświetlić w ten sposób dodatkowy formularz stosując jQuery.<span id="more-154"></span></p>
<p>Na zakończenie niniejszego poradnika otrzymamy efekt, który można zobaczyć w całości <a href="http://blog.visionsoftware.pl/przyklady/154/" title="" target="_blank">tutaj</a>. Będzie to formularz umożliwiający dodanie nowej osoby do przykładowego systemu. Znajdzie się na nim kilka pól, w tym lista rozwijana z nazwami zawodów a obok niej przycisk &#8222;Dodaj nowy&#8221;. Po jego kliknięciu pojawi się odpowiednie okno z formularzem dodania rekordu. Pomijam tu fakt, że pola będą generowane na podstawie danych z bazy, oraz uproszczam wygląd samego formularza (osoba a nie imię, nazwisko, itd).</p>
<p>Na początek stwórzmy więc formularz, który będzie widoczny od samego początku na ekranie.</p>
<pre class="brush: xml; title: ; notranslate">
&lt;form action=&quot;&quot; method=&quot;post&quot;&gt;
  &lt;div class=&quot;field&quot;&gt;
    &lt;label for=&quot;person&quot;&gt;Osoba&lt;/label&gt;
    &lt;input type=&quot;text&quot; name=&quot;person&quot; id=&quot;person&quot; value=&quot;&quot;/&gt;
  &lt;/div&gt;
  &lt;div id=&quot;add-new-subform&quot;&gt;
  &lt;label for=&quot;new-occupation&quot;&gt;Nowy zawód&lt;/label&gt;
  &lt;input type=&quot;text&quot; value=&quot;&quot; name=&quot;new-occupation&quot; id=&quot;new-occupation&quot; /&gt;
  &lt;input type=&quot;button&quot; value=&quot;Dodaj&quot; id=&quot;add-new-save&quot; /&gt;
  &lt;input type=&quot;button&quot; value=&quot;Anuluj&quot; id=&quot;add-new-cancel&quot; /&gt;
  &lt;/div&gt;
  &lt;div class=&quot;field&quot;&gt;
    &lt;label for=&quot;occupation&quot;&gt;Zawód&lt;/label&gt;
    &lt;select name=&quot;occupation&quot; id=&quot;occupation&quot;&gt;
      &lt;option value=&quot;1&quot;&gt;Opcja 1&lt;/option&gt;
      &lt;option value=&quot;2&quot;&gt;Opcja 2&lt;/option&gt;
      &lt;option value=&quot;3&quot;&gt;Opcja 3&lt;/option&gt;
      &lt;option value=&quot;4&quot;&gt;Opcja 4&lt;/option&gt;
    &lt;/select&gt;
    &lt;input type=&quot;button&quot; value=&quot;+&quot; id=&quot;add-new-show&quot; /&gt;
  &lt;/div&gt;
  &lt;div class=&quot;field&quot;&gt;
    &lt;label for=&quot;information&quot;&gt;Uwagi&lt;/label&gt;
    &lt;textarea name=&quot;information&quot; id=&quot;information&quot; rows=&quot;5&quot; cols=&quot;10&quot;&gt;&lt;/textarea&gt;
  &lt;/div&gt;
  &lt;div&gt;
    &lt;input type=&quot;submit&quot; value=&quot;Zapisz&quot; /&gt;
  &lt;/div&gt;
&lt;/form&gt;
</pre>
<p>W powyższym formularzu zostały umieszczone trzy pola: tekstowe, select oraz textarea. W divie &#8222;add-new-subform&#8221; znajdzie się podformularz z polem tekstowym, który pojawi się w momencie dodawania nowego rekordu. Nie będę tu prezentował całego pliku CSS, można go zobaczyć w zaprezentowanym wcześniej przykładzie.</p>
<p>Ważne są dwie definicje. Po pierwsze, należy ukryć podformularz i przygotować go do wyświetlenia na pierwszym planie (wyskoki z-index):</p>
<pre class="brush: css; light: true; title: ; notranslate">

div#add-new-subform {position: absolute; display: none; z-index: 100;
 background-color: #fff; border: solid 1px #000; padding: 15px;}

</pre>
<p>Dodatkowo zdefiniujemy obiekt, który &#8222;ściemni&#8221; całość widocznej strony. Ważne, aby znalazł się on na obecnie widocznym obszarze, ale pod nowym oknem formularza. Dlatego musi mieć odpowiednią wartość z-index i na początku pozostać niewidoczny. Definicje przeźroczystości zostały przedstawione w sposób, dzięki któremu powinny się wyświetlać poprawnie we wszystkich popularnych przeglądarkach:</p>
<pre class="brush: css; light: true; title: ; notranslate">

div#cover {position: fixed; width: 100%; height: 100%;
z-index: 99; background-color: #000000; -moz-opacity: 0.7; 
opacity: 0.7; filter: alpha(opacity=70);}

</pre>
<p>Teraz pozostaje oprogramowanie funkcjonalności w jQuery (dokładny opis poniżej):</p>
<pre class="brush: jscript; title: ; notranslate">
$(document).ready(function(){
    $('#add-new-show').click(function(){
	// dodanie ciemnego tła
	$('body').prepend('&lt;div id=&quot;cover&quot;&gt;&amp;nbsp;&lt;/div&gt;');
	// wyświetlenie podformularza
	$(&quot;#add-new-subform&quot;).css({'display': 'block'});
      
	$(&quot;#add-new-save&quot;).click(function(){
	  var new_occupation = $(&quot;#new-occupation&quot;).val();
	  if(typeof new_occupation !== &quot;undefined&quot; &amp;&amp; new_occupation){
	    // dodanie nowego rekordu do bazy oraz wpisu w polu select 
	    addNewOccupation(new_occupation);
	    // usunięcie ciemnego tła i ukrycie podformularza
	    $('#cover').remove();
	    $(&quot;#add-new-subform&quot;).css({'display': 'none'});
	  };
	});
	
	$(&quot;#add-new-cancel&quot;).click(function(){
	    // usunięcie ciemnego tła i ukrycie podformularza
	    $('#cover').remove();
	    $(&quot;#add-new-subform&quot;).css({'display': 'none'});
	});
    });
});      

function addNewOccupation(new_occupation){
  // tutaj za pomoca AJAX mozna dodać do bazy nowy rekord
  // zapytanie powinno zwrócić id nowego zawodu
  var id = 100;	// id nowego zawodu dodanego do bazy
  $(&quot;#occupation&quot;).append(new Option(new_occupation,id));
  $(&quot;#occupation&quot;).val(id);
}
</pre>
<p>Na początek ustalamy działanie dla akcji kliknięcia w przycisk &#8222;+&#8221; (#add-new-show). Kolejno: dodajemy nową warstwę do dokumentu, która przykryje całą obecnie wyświetlaną stronę (patrz definicja styli dla #cover) oraz wyświetlamy podformularz.</p>
<p>Następnie definiujemy odpowiednie działania dla klikniętego przycisku zapisania nowego zawodu (#add-new-save). Gdy został on wpisany w pojawiającym się polu tekstowym, wywołujemy funkcję addNewOccupation(), po czym usuwamy ciemne tło i ukrywamy podformularz. Funkcja dodania nowego zawodu powinna zawierać wywołanie AJAX, zapisujące dane do bazy po uprzednim sprawdzeniu ich poprawności. Wynikiem powinno być id dodanego rekordu, dzięki czemu będziemy mogli parę id oraz nazwa zawodu dopisać do pola select na formularzu głównym, a następnie zaznaczyć ją jako wybraną. W zaprezentowanym przykładzie nie przedstawiono samego zapisu do bazy, a do zmiennej id przypisana została przykładowa wartość.</p>
<p>Powyższy przykład został zaprezentowany w bardzo uproszczony sposób, może stanowić podstawę do własnej implementacji ciekawego wywołania okna dialogowego. Dostosowanie do własnych potrzeb nie powinno stanowić większego problemu.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.visionsoftware.pl/java-script-jquery/wywolanie-nowego-okna-i-sciemnienie-tla-w-jquery.html/feed</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>Sprawdź wygląd strony pod każdym Internet Explorerem &#8211; IE Tester</title>
		<link>http://blog.visionsoftware.pl/css-xhtml/sprawdz-wyglad-strony-pod-kazdym-internet-explorerem-ie-tester.html</link>
		<comments>http://blog.visionsoftware.pl/css-xhtml/sprawdz-wyglad-strony-pod-kazdym-internet-explorerem-ie-tester.html#comments</comments>
		<pubDate>Mon, 13 Dec 2010 21:51:29 +0000</pubDate>
		<dc:creator><![CDATA[Marcin Fliszta]]></dc:creator>
				<category><![CDATA[CSS/XHTML]]></category>
		<category><![CDATA[css]]></category>
		<category><![CDATA[html]]></category>
		<category><![CDATA[ie tester]]></category>
		<category><![CDATA[interet explorer]]></category>

		<guid isPermaLink="false">http://blog.visionsoftware.pl/?p=63</guid>
		<description><![CDATA[Każdej osobie zajmującej się tworzeniem stron internetowych sen z oka spędza niezgodność przeglądarek z obowiązującymi standardami. Jeśli mamy na uwadze wybór użytkowników, nasze strony powinny się poprawnie wyświetlać pod Internet Explorerem, Firefoxem, Operą, Gogle Chrome, Safari… Największym problemem jest jednak IE, który jest używany w wielu wersjach, a każda może wyświetlać naszą witrynę inaczej. Dzięki różnym upodobaniom użytkowników musimy mieć więc zainstalowanych w systemie kilka przeglądarek internetowych. Tylko wtedy stestujemy dobrze wygląd tworzonego serwisu WWW. [&#8230;]]]></description>
				<content:encoded><![CDATA[<p>Każdej osobie zajmującej się tworzeniem stron internetowych sen z oka spędza niezgodność przeglądarek z obowiązującymi standardami. Jeśli mamy na uwadze wybór użytkowników, nasze strony powinny się poprawnie wyświetlać pod Internet Explorerem, Firefoxem, Operą, Gogle Chrome, Safari… Największym problemem jest jednak IE, który jest używany w wielu wersjach, a każda może wyświetlać naszą witrynę inaczej.<span id="more-63"></span></p>
<p>Dzięki różnym upodobaniom użytkowników musimy mieć więc zainstalowanych w systemie kilka przeglądarek internetowych. Tylko wtedy stestujemy dobrze wygląd tworzonego serwisu WWW. Jeśli chodzi o Internet Explorer, możemy sobie pomóc świetną aplikacją o nazwie IE Tester.</p>
<p>Dzięki niej mamy możliwość wyświetlenia strony w wielu wersjach przeglądarki, tj. IE 5.5, 6, 7, 8 oraz 9 (w momencie pisania tego artykułu). Wyświetlenie strony w ostatniej wersji IE jest możliwe tylko pod Windows 7 z zainstalowaną w systemie wersją tej przeglądarki. Program można pobrać ze strony <a href="http://www.my-debugbar.com" target="_blank">http://www.my-debugbar.com</a></p>
]]></content:encoded>
			<wfw:commentRss>http://blog.visionsoftware.pl/css-xhtml/sprawdz-wyglad-strony-pod-kazdym-internet-explorerem-ie-tester.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Osadzanie grafiki za pomocą Data URI</title>
		<link>http://blog.visionsoftware.pl/css-xhtml/osadzanie-grafiki-za-pomoca-data-uri.html</link>
		<comments>http://blog.visionsoftware.pl/css-xhtml/osadzanie-grafiki-za-pomoca-data-uri.html#comments</comments>
		<pubDate>Sun, 12 Dec 2010 22:20:37 +0000</pubDate>
		<dc:creator><![CDATA[Marcin Fliszta]]></dc:creator>
				<category><![CDATA[CSS/XHTML]]></category>
		<category><![CDATA[css]]></category>
		<category><![CDATA[data uri]]></category>
		<category><![CDATA[html]]></category>
		<category><![CDATA[optymalizacja]]></category>

		<guid isPermaLink="false">http://blog.visionsoftware.pl/?p=47</guid>
		<description><![CDATA[Optymalizacja tworzonych serwisów internetowych jest niezwykle ważna. Zwiększająca się liczba użytkowników wymusza wprowadzanie mechanizmów, które umożliwią normalne działanie serwisu. Spowoduje ona także, że nie będziemy zużywali w zastraszającym tempie limitów transferu. Dla użytkownika optymalizacja oznacza szybkie działanie serwisu, a więc możliwość korzystania z niego w normalny sposób.Szybkość ładowania naszego serwisu zależy jednak nie tylko od kodu PHP (lub innego języka). Bardzo ważnym elementem, wpływającym na czas pojawienia się strony na ekranie, jest liczba zapytań HTTP. [&#8230;]]]></description>
				<content:encoded><![CDATA[<p>Optymalizacja tworzonych serwisów internetowych jest niezwykle ważna. Zwiększająca się liczba użytkowników wymusza wprowadzanie mechanizmów, które umożliwią normalne działanie serwisu. Spowoduje ona także, że nie będziemy zużywali w zastraszającym tempie limitów transferu. Dla użytkownika optymalizacja oznacza szybkie działanie serwisu, a więc możliwość korzystania z niego w normalny sposób.<span id="more-47"></span>Szybkość ładowania naszego serwisu zależy jednak nie tylko od kodu PHP (lub innego języka). Bardzo ważnym elementem, wpływającym na czas pojawienia się strony na ekranie, jest liczba zapytań HTTP. Każdy dodatkowo otwarty dokument CSS, Java Script lub obrazek wydłuża czas oczekiwania.</p>
<p>W tym tekście zamierzam się zająć ostatnim z tych elementów, czyli elementami graficznymi naszego serwisu. Każdy wie, że nie powinno ich być za dużo, oraz  że powinny mieć jak najmniejszy rozmiar. Istnieje także sposób na zmniejszenie liczby odwołań do nich.</p>
<p>Wystarczy w tym celu skorzystać z dobrodziejstw Data URI, czyli możliwości przechowywania obrazka w postaci binarnej, zakodowanej przy pomocy base64,  bezpośrednio w dokumencie CSS.  Dzięki temu zmniejszamy ilość odwołań HTTP, wielkość pliku CSS możemy natomiast zmniejszyć poprzez kompresję. Wystarczy skorzystać z gzipa, dane zapisane w base64 kompresują się bardzo dobrze.</p>
<p>Przykładowy kod dodający obrazek, może wyglądać w następujący sposób:</p>
<pre class="brush: xml; title: ; notranslate">&lt;img src=&quot;data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAwAA
AAMAgMAAAArG7R0AAAADFBMVEX/////mQD/ZgDMMwAfZILpAAAAJUlEQVQImWNgAALW
0BAGqVWrIVgDiLu0GaQWdUNojdVwOf7/fwACPA009gxCxwAAAABJRU5ErkJggg==&quot;
alt=&quot;My image&quot; /&gt;</pre>
<p>Definicja elementu listy w CSS może natomiatst wyglądać tak:</p>
<pre class="brush: css; title: ; notranslate">ul li { margin-left: 20px; background: url(' data:image/png;
base64,iVBORw0KGgoAAAANSUhEUgAAAAwAA AAMAgMAAAArG7R0AAAADFBMVEX//
///mQD/ZgDMMwAfZILpAAAAJUlEQVQImWNgAALW0BAGqVWrIVgDiLu0GaQWdUNojd
VwOf7/fwACPA009gxCxwAAAABJRU5ErkJggg==') top left no-repeat;}</pre>
<p>Aby zakodować obrazek pod systemami linuksowymi, wystarczy skorzystać z polecania base64. Innym sposobem może być skorzystanie z <a href="http://www.dailycoding.com/Utils/Converter/ImageToBase64.aspx" target="_blank">darmowego konwertera</a>.</p>
<p>Jeśli korzystamy z PHP, możemy wygenerować potrzeby kod przy użyciu poniższej funkcji:</p>
<pre class="brush: php; title: ; notranslate">
&lt;?php
function data_uri($file, $mime)
{
 $contents = file_get_contents($file);
 $base64   = base64_encode($contents);
 return ('data:' . $mime . ';base64,' . $base64);
}
?&gt;
</pre>
<p>A nastepnie wykorzystać go na naszej stronie:</p>
<pre class="brush: xml; title: ; notranslate">&lt;img src=&quot;&lt;?php echo data_uri('image.png','image/png');?&gt;&quot; alt=&quot;My image&quot; /&gt;</pre>
<p>Niestety, nie ma róży bez kolców. Mimo ogromnych zalet jakie stwarza Data URI, napotkamy na ogromny problem związany z przeglądarkami. IE potrafi wyświetlać zakodowane w ten sposób obrazki od wersji 8, o ile nie przekraczają one 32 KB. Starsze wersje przeglądarki Microsoftu w ogóle nie obsługują tej technologii.</p>
<p>Jeśli jednak optymalizujemy serwis będący pod dużym obciążeniem, warto skorzystać z tego mechanizmu dla użytkowników używających przeglądarek, które go wspierają.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.visionsoftware.pl/css-xhtml/osadzanie-grafiki-za-pomoca-data-uri.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
