<?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; css</title>
	<atom:link href="http://blog.visionsoftware.pl/tag/css/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>@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>CMS Made Simple na Home.pl a dostęp do /tmp/cache</title>
		<link>http://blog.visionsoftware.pl/programowanie-php/cms-made-simple-na-home-pl-a-dostep-do-tmpcache.html</link>
		<comments>http://blog.visionsoftware.pl/programowanie-php/cms-made-simple-na-home-pl-a-dostep-do-tmpcache.html#comments</comments>
		<pubDate>Mon, 31 Oct 2011 20:14:40 +0000</pubDate>
		<dc:creator><![CDATA[Marcin Fliszta]]></dc:creator>
				<category><![CDATA[PHP]]></category>
		<category><![CDATA[cache]]></category>
		<category><![CDATA[CMS Made Simple]]></category>
		<category><![CDATA[css]]></category>
		<category><![CDATA[Home.pl]]></category>
		<category><![CDATA[tmp]]></category>

		<guid isPermaLink="false">http://blog.visionsoftware.pl/?p=379</guid>
		<description><![CDATA[Osoby wdrażające CMS Made Simple na serwerach wirtualnych Home.pl mogą napotkać pewien problem. Po instalacji strona wyświetlała się bez żadnego formatowania, bez przetwarzania arkuszy styli CSS. Dostęp do nich kończy się na zwróceniu błędu 403 Forbidden. Podobna sytuacja ma miejsce przy działaniu niektórych pluginów, np. Captcha. Problem ten może wystąpić także na innych serwerach, a ma związek z prawami dostępu do katalogu /tmp/cache, w którym CMS zapisuje różnego rodzaju dane. W momencie pisania artykułu CMS Made [&#8230;]]]></description>
				<content:encoded><![CDATA[<p>Osoby wdrażające CMS Made Simple na serwerach wirtualnych Home.pl mogą napotkać pewien problem. Po instalacji strona wyświetlała się bez żadnego formatowania, bez przetwarzania arkuszy styli CSS. Dostęp do nich kończy się na zwróceniu błędu 403 Forbidden. Podobna sytuacja ma miejsce przy działaniu niektórych pluginów, np. Captcha. Problem ten może wystąpić także na innych serwerach, a ma związek z prawami dostępu do katalogu <code>/tmp/cache</code>, w którym CMS zapisuje różnego rodzaju dane.<span id="more-379"></span></p>
<p>W momencie pisania artykułu CMS Made Simple był dostępny w wersji 1.10 i i takiej dotyczą niniejsze informacje. Oczywiście problem występuje we wcześniejszych, oraz może się pojawić w późniejszych edycjach.</p>
<h3>Na czym polega problem?</h3>
<p>Na wirtualnych serwerach Home.pl, ale taka sytuacja może mieć miejsce na innych, dostęp do katalogu <code>tmp</code> jest ograniczony. Z założenia ma on służyć do zapisu różnych danych tymczasowych, takich jak np. sesje. Ze względów bezpieczeństwa jest on niedostępny z zewnątrz.</p>
<p>Cały problem polega na tym, że od wersji 1.8 CMS Made Simple generuje arkusze CSS do statycznych plików i umieszcza je w katalogu <code>/tmp/cache</code>. O ile potrafi je w tym przypadku bez problemu zapisać, to już przy dostępie z zewnątrz po HTTP otrzymujemy wspomniany wcześniej błąd 403 Forbidden, czyli brak dostępu.</p>
<h3>Rozwiązanie problemu nr 1 – inny sposób generowania CSS</h3>
<p>Pierwszym i najszybszym sposobem na niedogodność, jest zmiana sposobu generowania plików CSS, a konkretnie do powrócenia do starej możliwości stosowanej w CMS Made Simple. Wystarczy więc zamienić w szablonie wywołanie <code>{cms_stylesheet}</code> na <code>{stylesheet}</code>.</p>
<p>Możemy to zrobić w panelu administracyjnym, wchodząc w menu w Wygląd -&gt; Szablony i wybrać odpowiedni/e szablon/y.</p>
<p>W ten sposób zamiast dołączenia CSS z katalogu /tmp/cache w postaci</p>
<pre class="brush: xml; light: true; title: ; notranslate">&lt;link rel=&quot;stylesheet&quot; type=&quot;text/css&quot; href=&quot;http://www.moja-strona.pl/cache/stylesheet_50_132723884.css&quot; media=&quot;all&quot;&gt;</pre>
<p>w wygenerowanym pliku HTML otrzymamy:</p>
<pre class="brush: xml; light: true; title: ; notranslate">&lt;link rel=&quot;stylesheet&quot; type=&quot;text/css&quot; media=&quot;all&quot; href=&quot;http://www.fmoja-strona.pl/stylesheet.php?cssid=50&amp;mediatype=all&quot; /&gt;</pre>
<h3>Rozwiązanie problemu nr 2 – zmiana w konfiguracji</h3>
<p>I tu pojawia się drobny problem. Pierwszym krokiem w zmianie jest oczywiście sprawdzenie zawartości pliku <code>config.php</code>. Tu niestety możemy się rozczarować &#8211; nie ma w nim odpowiedniej opcji, umożliwiającej szybką zmianę. Jedyną związaną z tym katalogiem zmienną jest ustawienie</p>
<pre class="brush: php; light: true; title: ; notranslate">$config['previews_path'] = '/tmp/cache';</pre>
<p>Założenie katalogu <code>/cache</code> i nadanie mu praw do zapisu, a następnie zmiana powyższej zmiennej nie spowoduje poprawnego dostępu do plików CSS. Jest to bowiem związane z tym, że wykorzystywana w wielu miejscach CMSa ścieżka jest zapisana w pliku <code>fileloc.php</code> oraz niestety &#8222;na twardo&#8221; w innych.</p>
<p><strong>UWAGA:</strong> wszelkie opisane poniżej zmiany ingerują bezpośrednio w kod CMS Made Simple. W takim wypadku tracimy możliwość oficjalnego supprotu oraz utrudniamy sobie aktualizacje. Musimy pamiętać, że po jej wykonaniu będziemy musieli ponownie wprowadzić nasze poprawki.</p>
<p>W linii nr 3 w pliku <code>fileloc.php</code>  znajduje się następująca definicja:</p>
<pre class="brush: php; light: true; title: ; notranslate">define(&quot;TMP_CACHE_LOCATION&quot;, dirname(__FILE__) . DIRECTORY_SEPARATOR . 'tmp' . DIRECTORY_SEPARATOR . 'cache');</pre>
<p>Wystarczy więc wpisać tu swoją własną ścieżkę, czyli w naszym przypadku <code>/cache</code>:</p>
<pre class="brush: php; light: true; title: ; notranslate">define(&quot;TMP_CACHE_LOCATION&quot;, dirname(__FILE__) . DIRECTORY_SEPARATOR . 'cache');</pre>
<p>Po tej zmianie pliki CSS będą zapisywane w nowej lokacji, jednak niestety CMS będzie ich nadal szukał w poprzedniej. Cóż, jest to ewidentny błąd programistów, którzy „na twardo: wpisali ścieżkę, zamiast skorzystać z odpowiedniej zmiennej konfiguracyjnej. Musimy więc zająć się plikiem <code>/plugins/function.cms_stylesheet.php</code> i odnaleźć odpowiedniwpis (linie 117 i 121 lub w ich pobliżu). Najlepiej w nich po prostu podać swoje ścieżki do katalogu, w którym zapisywane są obecnie pliki CSS. Poniższe linie:</p>
<pre class="brush: php; light: true; title: ; notranslate">
$stylesheet .= '&lt;link rel=&quot;stylesheet&quot; type=&quot;text/css&quot; href=&quot;' . $root_url . '/tmp/cache/' . $filename . '&quot;/&gt;' . &quot;\n&quot;;

$stylesheet .= '&lt;link rel=&quot;stylesheet&quot; type=&quot;text/css&quot; href=&quot;' . $root_url . '/tmp/cache/' . $filename.'&quot; media=&quot;' . $media_type.'&quot;/&gt;'.&quot;\n&quot;;
</pre>
<p>należy więc zamienić na</p>
<pre class="brush: php; light: true; title: ; notranslate">
$stylesheet .= '&lt;link rel=&quot;stylesheet&quot; type=&quot;text/css&quot; href=&quot;' . $root_url . $config['previews_path'] . '/' . $filename.'&quot; media=&quot;' . $media_type . '&quot;/&gt;' . &quot;\n&quot;;

$stylesheet .= '&lt;link rel=&quot;stylesheet&quot; type=&quot;text/css&quot; href=&quot;' . $root_url . $config['previews_path'] . '/' . $filename . '&quot;/&gt;' . &quot;\n&quot;;
</pre>
<p>W ten sposób problem z dostępem do CSS zostanie rozwiązany i arkusze stylów będą mogły być wczytane przez naszą stronę.</p>
<h3>Problem z pluginami, np. Captcha 0.4.5</h3>
<p>Część dodatków pisanych do CMS Made Simple przez zewnętrznych programistów zawiera podobny do opisanego powyżej błąd. Niestety, ale ścieżki dostępu do katalogów cache zostały w nich zapisane &#8222;na twardo&#8221;, a nie z wykorzystaniem zmiennej konfiguracyjnej. Musimy być zatem czujni i gdy występuje problem z dostępem do tworzonych plików, przeglądać ich kod.</p>
<p>Przykładowo występuje on we wtyczce Captcha (w momencie pisania artykułu w wersji 0.4.5), z której korzysta między innymi doskonałe rozszerzenie Form Builider. Zapisuje ona wygenerowane do przepisania przez użytkownika obrazki w katalogu <code>/tmp/cache</code>, jednak na stronie nie jest możliwe ich poprawne wyświetlenie.</p>
<p>Rozwiązanie jest proste, czyli poprawienie odpowiedniej linijki w pliku wtyczki <code>modules/Captcha/lib/classes/class.captchalib.php</code> w liniach 81 oraz 82 (lub pobliskich). W następującym kodzie:</p>
<pre class="brush: php; light: true; title: ; notranslate">
$this-&gt;setImagePath(cms_join_path($this-&gt;cmsconfig['root_path'],'tmp','cache'));
$this-&gt;setImageUrl($this-&gt;cmsconfig['root_url'] . '/tmp/cache');
</pre>
<p>musimy podać swój katalog, czyli <code>/cache</code>:</p>
<pre class="brush: php; light: true; title: ; notranslate">
$this-&gt;setImagePath(cms_join_path($this-&gt;cmsconfig['root_path'],'cache'));
$this-&gt;setImageUrl($this-&gt;cmsconfig['root_url'] . '/cache');
</pre>
]]></content:encoded>
			<wfw:commentRss>http://blog.visionsoftware.pl/programowanie-php/cms-made-simple-na-home-pl-a-dostep-do-tmpcache.html/feed</wfw:commentRss>
		<slash:comments>3</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>
