<?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>adamczuk.net.pl</title>
	<atom:link href="http://adamczuk.net.pl/feed/" rel="self" type="application/rss+xml" />
	<link>http://adamczuk.net.pl</link>
	<description>Just another WordPress weblog</description>
	<lastBuildDate>Mon, 08 Feb 2010 20:05:48 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.9</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>LAMP i WAMP</title>
		<link>http://adamczuk.net.pl/2010/02/08/lamp-i-wamp/</link>
		<comments>http://adamczuk.net.pl/2010/02/08/lamp-i-wamp/#comments</comments>
		<pubDate>Mon, 08 Feb 2010 20:01:35 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[PHP]]></category>
		<category><![CDATA[Software]]></category>
		<category><![CDATA[apache]]></category>
		<category><![CDATA[lamp]]></category>
		<category><![CDATA[mysql]]></category>
		<category><![CDATA[wamp]]></category>

		<guid isPermaLink="false">http://adamczuk.net.pl/?p=268</guid>
		<description><![CDATA[Krótki przegląd pakietów LAMP i WAMP.]]></description>
			<content:encoded><![CDATA[<p>Od razu zaznaczam, że nie będę przekonywał nikogo o wyższości jednego rozwiązania na drugim. Osoby znające te skróty zapewne znają ich pochodzenie i wiedzą do czego służą. Dalsza część artykułu przedstawia najpopularniejsze pakiety wolnego oprogramowania do obsługi witryn internetowych, sposoby instalacji i konfiguracji.<span id="more-268"></span></p>
<p>Podstawowe składniki takich platform to serwer Apache, baza danych MySQL oraz interpreter PHP, które przydają się podczas programowania i testowania aplikacji internetowych na lokalnym komputerze. Poszczególne elementy powstały niezależnie, ale razem tworzą znakomity zestaw, którego koszt jest niski w porównaniu z komercyjnymi rozwiązaniami.</p>
<p>Istnieje jeszcze kilka zalet takiego rozwiązania. Serwer lokalny jest darmowy, możliwa jest zmiana jego ustawień i działa nawet przy braku połączenia z internetem. Konta hostingowe często są płatne, ale nie zawsze. Tak samo jest z ustawieniami, które ze względów bezpieczeństwa często są niedostępne dla użytkowników. Ostatnim minusem jest połączenie z internetem, niezbędne dla dostępu do strony.</p>
<h3>LAMP</h3>
<p>W przypadku GNU/Linux sprawa jest bardzo prosta, ponieważ wymienione komponenty są dostępne dla większości dystrybucji. Mimo, tego zawsze możliwe jest ściągnięcie aktualnej wersji z internetu lub repozytorium. Najpewniej będą to poniższe polecenia.</p>
<pre><code>sudo apt-get install apache2</code></pre>
<pre><code>sudo apt-get install php5</code></pre>
<pre><code>sudo apt-get install mysql</code></pre>
<h3>WAMP</h3>
<p>W przypadku Windowsa istnieją paczki, które po instalacji pozwalają na korzystanie ze wszystkich elementów. Cały proces sprowadza się często do wyboru miejsca instalacji oprogramowania. Większość elementów zostanie od razu poprawnie skonfugurowana.</p>
<h4>Krasnal Serv</h4>
<p><a href="http://www.olesno.pl/~pablo/krasnal/">Krasnal Serv</a> to darmowe oprogramowanie, które umożliwia uruchomienie własnego serwera typu WAMP. Możliwe jest uruchomienie serwera WWW bez potrzeby konfigurowania Apache&#8217;a i innych elementów w systemie Microsoft Windows. Najnowsza wersja (2.7) pozwala na przełączanie się w locie między PHP4 i PHP5. Serwer działa niestabilnie w przypadku systemów Windows 9.x/ME.</p>
<p>Skład serwera w wersji 2.7 stanowi:</p>
<ul>
<li>Apache 1.3.31</li>
<li>PHP 4.3.9 + SQLite</li>
<li>PHP 5.0.2</li>
<li>MySQL 3.23.58</li>
<li>ActivePerl 5.6.1.628</li>
<li>phpMyAdmin 2.6.2 pl2</li>
<li>Zend Optimizer 2.0.3</li>
<li>CesarFTP 0.99g</li>
<li>Webalizer 2.1</li>
<li>Free SMTP Server</li>
<li>SQLiteManager 1.0.1</li>
</ul>
<h4>VertrigoServ</h4>
<p><a href="http://vertrigo.sourceforge.net/">VertrigoServ</a> to serwer, którego używałem przez długi czas. Poprzednio stosowałem KrasnalServ, który jednak zbyt wolno się rozwija, jeśli w ogóle. Składniki tego serwera są o wiele aktualniejsze.</p>
<p>Serwer w wersji 2.21 zawiera:</p>
<ul>
<li>Apache 2.0.63</li>
<li>PHP 5.2.6</li>
<li>MySQL 5.0.51b</li>
<li>SQLite 3.5.9</li>
<li>Smarty 2.6.19</li>
<li>PhpMyAdmin 2.11.7</li>
<li>ZendOptimizer 3.3.3</li>
<li>SQLiteManager 1.2.0</li>
</ul>
<h4>WampServer</h4>
<p><a href="http://www.wampserver.com/">WampServer 2</a> to darmowy pakiet typu WAMP. Umożliwia instalację, uruchamianie oraz obsługę w systemie MS Windows serwera WWW opartego na serwerze Apache, interpretera skryptów PHP oraz serwera baz danych MySQL.</p>
<p>WampServer 2 nazywany wcześniej WAMP5 jest platformą opartą na licencji GPL. Jej głównym twórcą jest Francuz Romain Bourdon, którego wspiera społeczność portalu <a href="http://www.phpteam.net/">phpteam.net</a>.</p>
<p>WampServer w wersji 2.0 zawiera:</p>
<ul>
<li>Apache 2.2.11</li>
<li>PHP 5.3.0</li>
<li>MySQL 5.1.36</li>
<li>PhpMyAdmin 3.2.01</li>
</ul>
<h4>XAMPP</h4>
<p><a href="http://www.apachefriends.org/en/xampp.html">XAMPP</a> jest darmowym wieloplatformowym pakietem opartym na licencji GNU General Public License. Składa się głównie z serwera Apache, bazy danych MySQL i interpreterów dla skryptów napisanych w PHP i Perlu. XAMPP działa między innymi na systemach MS Windows, Linux, Solaris i MacOS X.</p>
<h3>Podsumowanie</h3>
<p>Większość platform WAMP zawiera dodatkowe oprogramowanie przydatne podczas tworzenia i testowania aplikacji internetowych. Sam proces instalacji takiego oprogramowania jest łatwy. Pewne trudności zdarzają się przy konfiguracji niestandardowych opcji. Poza tym jest to idealne rozwiązanie na początku przygody z tworzeniem aplikacji internetowych.</p>
<p>Często spotykany PhpMyAdmin jest stosowany do zarządzania bazami danych. Nierzadko udostępniane są inne silniki baz danych, np. SQLite. Warto włączyć niektóre przydatne moduły serwera Apache, które domyślnie bywają wyłączone, jak choćby mod_rewrite, czy mod_userdir.</p>
]]></content:encoded>
			<wfw:commentRss>http://adamczuk.net.pl/2010/02/08/lamp-i-wamp/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Nowe jQuery &#8211; nowe rozwiązania</title>
		<link>http://adamczuk.net.pl/2010/02/05/nowe-jquery-nowe-rozwiazania/</link>
		<comments>http://adamczuk.net.pl/2010/02/05/nowe-jquery-nowe-rozwiazania/#comments</comments>
		<pubDate>Fri, 05 Feb 2010 10:43:28 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Java Script]]></category>
		<category><![CDATA[javascript]]></category>
		<category><![CDATA[jquery]]></category>
		<category><![CDATA[js]]></category>

		<guid isPermaLink="false">http://adamczuk.net.pl/?p=265</guid>
		<description><![CDATA[Krótka notka na temat nowego wydania jQuery 1.4.]]></description>
			<content:encoded><![CDATA[<p><a href="http://adamczuk.net.pl/wp-content/uploads/2010/02/jquery-light.jpg"><img src="http://adamczuk.net.pl/wp-content/uploads/2010/02/jquery-light.jpg" alt="" title="jquery-light" width="200" height="75" class="left" /></a>Na początku roku wydano jQuery 1.4, które wprowadza nowe funkcjonalności i poprawia znane błędy. Wydanie nowej wersji trwało stało się dla twórców powodem do wielkiego świętowania, czemu poświęcili osobną <a href="http://jquery14.com/">stronę</a>.</p>
<p>W ciągu 14 dni twórcy biblioteki opowiadali o zmianach jakie wprowadzili do nowej wersji. Szczególnie interesujący był <a href="http://jquery14.com/day-03/internal-changes-in-jquery-14-2">podcast</a>, w którym John Resig przedstawił zmiany w rdzeniu biblioteki. Zmniejszenie rozmiaru, wzrost wydajności i większa zgodność z przeglądarkami.</p>
]]></content:encoded>
			<wfw:commentRss>http://adamczuk.net.pl/2010/02/05/nowe-jquery-nowe-rozwiazania/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Wzorzec projektowy Fabryka abstrakcyjna</title>
		<link>http://adamczuk.net.pl/2010/02/04/wzorzec-projektowy-fabryka-abstrakcyjna/</link>
		<comments>http://adamczuk.net.pl/2010/02/04/wzorzec-projektowy-fabryka-abstrakcyjna/#comments</comments>
		<pubDate>Wed, 03 Feb 2010 23:00:30 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[PHP]]></category>
		<category><![CDATA[Wzorce projektowe]]></category>
		<category><![CDATA[design patern]]></category>
		<category><![CDATA[factory]]></category>

		<guid isPermaLink="false">http://adamczuk.net.pl/?p=263</guid>
		<description><![CDATA[Poprzedni wpis dotyczył wzorca projektowego Singleton, który jest niezbędny w przypadku pojedynczych obiektów tego samego typu. Obecny tekst porusza problem tworzenia różnych obiektów jednego typu (tej samej rodziny) bez specyfikowania ich konkretnych klas.
Fabryka abstrakcyjna
Plusem wykorzystania wzorca fabryki abstrakcyjnej jest możliwość ukrycia szczegółów implementacyjnych klas reprezentujących dany produkt. W ten sposób klient widzi tylko interfejs. Ukryte [...]]]></description>
			<content:encoded><![CDATA[<p>Poprzedni wpis dotyczył wzorca projektowego Singleton, który jest niezbędny w przypadku pojedynczych obiektów tego samego typu. Obecny tekst porusza problem tworzenia różnych obiektów jednego typu (tej samej rodziny) bez specyfikowania ich konkretnych klas.<span id="more-263"></span></p>
<h3>Fabryka abstrakcyjna</h3>
<p>Plusem wykorzystania wzorca fabryki abstrakcyjnej jest możliwość ukrycia szczegółów implementacyjnych klas reprezentujących dany produkt. W ten sposób klient widzi tylko interfejs. Ukryte zostają również nazwy klas, co odizolowuje klienta od problemu określenia, do której klasy należy obiekt.</p>
<pre><code>&lt;?php
interface IUser {
	function getName();
}

class User implements IUser {
	public function __construct($id) { }

	public function getName() {
		return 'Jacek';
	}
}

class UserFactory {
	public static function create($id) {
		return new User($id);
	}
}
?&gt;</code></pre>
<p>Klasa <code>User</code> zaprezentowana powyżej implementuje interfejs <code>IUser</code>, który zawiera metodę <code>getName()</code>. Tworzenie nowego obiektu użytkownika odbywa się poprzez statyczną metodę <code>create()</code>. Szczegóły tworzenia użytkowników ukryte są w klasie <code>User</code> fabryki.</p>
<h3>Podsumowanie</h3>
<p>Istnieje prosta metoda sprawdzenia czy klasa działa poprawnie.</p>
<pre><code>&lt;?php
$oUser = UserFactory::create(1);
echo($oUser->getName());
?&gt;</code></pre>
<p>Poniższy wydruk pokazuje, że dokładnie tak się dzieje.</p>
<pre><code>Jacek</code></pre>
<p>Wzorzec projektowy fabryki abstrakcyjnej kładzie nacisk na tworzenie produktów z konkretnej rodziny. </p>
]]></content:encoded>
			<wfw:commentRss>http://adamczuk.net.pl/2010/02/04/wzorzec-projektowy-fabryka-abstrakcyjna/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Wzorzec projektowy Singleton</title>
		<link>http://adamczuk.net.pl/2010/01/30/wzorzec-projektowy-singleton/</link>
		<comments>http://adamczuk.net.pl/2010/01/30/wzorzec-projektowy-singleton/#comments</comments>
		<pubDate>Fri, 29 Jan 2010 23:21:05 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[PHP]]></category>
		<category><![CDATA[Wzorce projektowe]]></category>
		<category><![CDATA[design patern]]></category>
		<category><![CDATA[oop]]></category>
		<category><![CDATA[singleton]]></category>

		<guid isPermaLink="false">http://adamczuk.net.pl/?p=250</guid>
		<description><![CDATA[Wzorzec projektowy Singleton. Wyjaśnienie idei oraz implemntacja w PHP.]]></description>
			<content:encoded><![CDATA[<p>Wzorce projektowe to ogólne rozwiązania częstych informatycznych problemów. Programowanie obiektowe w PHP5 różni się nie tylko składnią, ale również pewnymi brakami w porównaniu z innymi językami, typu C++ czy Java. Pomimo tego wzorce projektowe idealnie sprawdzają się w aplikacjach internetowych.<span id="more-250"></span></p>
<p>Częsta sytuacja, z jaką spotykają się programiści to współdzielenie zasobów. Wszystkie zapytania do bazy danych wymagają połączenia. Taki uchwyt może być wykorzystany wielokrotnie przez różne zapytania przy tym samym żądaniu. Otwieranie i zamykanie połączeń jest najzwyczajniej, mało ekonomiczne.</p>
<h3>Singleton</h3>
<p>Istnieje proste rozwiązanie tego problemu. Singleton to wzorzec projektowy, który zwraca istniejącą instancję obiektu. Jeśli taka instancja nie istnieje wówczas jest tworzona. Idea rozwiązania jest bardzo prosta i idealnie pasuje do naszego problemu. Poniżej znajduje się kod klasy <code>DB</code>, która dziedziczy z klasy <code>Singleton</code> i tworzy takie połączenie do bazy.</p>
<p>Prawidłowa struktura klas, co zasugerował <a href="http://adamczuk.net.pl/2010/01/30/wzorzec-projektowy-singleton/comment-page-1/#comment-5526">Wasacz</a> w komentarzach, wymaga dziedziczenia klasy <code>DB</code> po ogólnej klasie wzorca <code>Singleton</code>. Niestety nie mam pomysłu zogranizowanie klasy wzorca poza pustymi metodami i jedną zmienną.</p>
<pre><code>&lt;?php
abstract class Singleton {
	protected static $_instance;

	protected function __construct() { }

	public static function instance() { }
}

class DB extends Singleton {
	private $_conn;

	private function __construct($conf) {
		$this->_conn = mysql_connect($conf['host'], $conf['user'], $conf['pass']) or die($this->error());
	}

	public static function instance($conf=null) {
		if (is_null(self::$_instance)) {
			self::$_instance = new DB($conf);
		}
		return self::$_instance;
	}
}
?&gt;</code></pre>
<p>Klasa <code>DB</code> zaprezentowana powyżej nie jest skomplikowana. Zawiera jednak tylko niezbędne metody, prezentujące działanie klasy. Niemożliwe jest stworzenie egzemplarza klasy <code>DB</code>, ponieważ konstruktor jest prywatny. Dostęp do obiektu możliwy jest poprzez publiczną, statyczną metodę <code>instance()</code>.</p>
<h3>Podsumowanie</h3>
<p>Istnieje prosta metoda sprawdzenia czy klasa działa poprawnie. Próba pobrania obiektu klasy <code>DB</code> powinna zwrócić ten sam zasób.</p>
<pre><code>&lt;?php
print_r(DB::instance());
print_r(DB::instance());
?&gt;</code></pre>
<p>Poniższy wydruk pokazuje, że dokładnie tak się dzieje.</p>
<pre><code>DB Object
(
    [_conn:private] => Resource id #11
)
DB Object
(
    [_conn:private] => Resource id #11
)</code></pre>
<p>Wzorzec projektowy Singleton stosuje się bez względu na stopień skomplikowania aplikacji. Rozwiązanie to jest wygodniejsze i elastyczniejsze niż przechowywanie uchwytu do bazy danych w zmiennej globalnej.</p>
]]></content:encoded>
			<wfw:commentRss>http://adamczuk.net.pl/2010/01/30/wzorzec-projektowy-singleton/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Kolorowanie wierszy i kolumn w tabeli</title>
		<link>http://adamczuk.net.pl/2009/12/16/kolorowanie-wierszy-i-kolumn-w-tabeli/</link>
		<comments>http://adamczuk.net.pl/2009/12/16/kolorowanie-wierszy-i-kolumn-w-tabeli/#comments</comments>
		<pubDate>Wed, 16 Dec 2009 20:49:47 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[CSS]]></category>
		<category><![CDATA[XHTML]]></category>
		<category><![CDATA[html]]></category>
		<category><![CDATA[selectors]]></category>
		<category><![CDATA[table]]></category>

		<guid isPermaLink="false">http://adamczuk.net.pl/?p=236</guid>
		<description><![CDATA[Nowoczesny sposób na kolorowanie wierszy i kolumn w tabeli z wykorzystaniem selektorów potomka.]]></description>
			<content:encoded><![CDATA[<p><img src="http://adamczuk.net.pl/wp-content/uploads/2009/12/zebra-striping.jpg" alt="zebra-striping" title="zebra-striping" width="300" height="100" class="left size-full wp-image-237" /> Tabele to jedne z najpopularniejszych elementów jakie występują na stronach internetowych. Rozbudowana struktura tabel pozwala na osiągnięcie wspaniałych efektów poprzez zastosowanie stylów kaskadowych.<br />
<span id="more-236"></span></p>
<p>Przykłady stylizacji tabel zostały w 2006 roku zebrane przez niezawodny <a href="http://www.smashingmagazine.com/2006/12/29/css-based-tables-modern-solutions/">Smashing Magazine</a>. Czas w sieci upływa bardzo szybko, wiele z tych przykładów, jeśli nie wszystkie to przykłady przestarzałe. Jednak ten sam Smashing Magazine w nowszym artykule prezentuje naprawdę atrakcyjne <a href="http://www.smashingmagazine.com/2008/08/13/top-10-css-table-designs/">przykłady</a>. Niestety wygląd to nie wszystko.</p>
<h3>Problem</h3>
<p>Wielokrotnie zdarza się, że za ciekawym wyglądem tabeli kryje się nadmierna liczba klas, które dotyczą poszczególnych elementów. Podstawowa struktura tabeli składa się z trzech znaczników <code>&lt;table&gt;</code>, <code>&lt;tr&gt;</code> oraz <code>&lt;td&gt;</code>, które tworzą odpowiedni element tabeli, wiersze i poszczególne komórki.</p>
<p>Taka struktura nie pozwala na zbyt wiele, ponieważ odniesienie się do elementów poprzez selektory kontekstu jest wręcz niemożliwa. Jedyne dostępne rozwiązanie to wykorzystanie atrybutów <code>&lt;class&gt;</code> i selektorów klas.</p>
<p>Kolorowanie wierszy i kolumn wymaga użycia atrybutu <code>&lt;class&gt;</code> dla każdej komórki. Kolorowanie samych wierszy uzyskamy poprzez atrybuty<code>&lt;class&gt;</code> dla poszczególnych znaczników <code>&lt;tr&gt;</code>. Poniższe style określają kolor tła dla nieparzystego i parzystego wiersza oraz nieparzystej i parzystej kolumny.</p>
<pre><code>.odd-row {
	background: #eee;
}
.even-row {
	background: #ccc;
}
.odd-column {
	background: #fcc;
}
.even-column {
	background: #f44;
}</code></pre>
<p>Zamierzony efekt zostanie osiągnięty, ale kod naszej tabeli stanie się mniej czytelny, zarówno dla wyszukiwarek, jak i dla ludzie. Istnieje dobra alternatywa dla powyższego rozwiązania.</p>
<h3>Rozwiązanie pośrednie</h3>
<p>Konieczne zmiany dotyczą kodu tabeli. Struktura tabeli udostępnia elementy grupujące wiersze oraz kolumny. Znaczniki <code>&lt;thead&gt;</code>, <code>&lt;tbody&gt;</code> oraz <code>&lt;tfoot&gt;</code> grupują odpowiednio wiersze nagłówka, danych i stopki.</p>
<p>Analogiczne przeznaczenie ma znacznik <code>&lt;colgroup&gt;</code>, który obejmuje poszczególne kolumny tabeli, zdefiniowane przez znaczniki <code>&lt;col&gt;</code>.</p>
<p>Ważne jest zrozumienie kolejności wyświetlania warstw, które tworzą strukturę tabeli. Szczegółowy <a href="http://www.456bereastreet.com/archive/200410/bring_on_the_tables/">artykuł</a> na ten temat napisał Roger Johansson.</p>
<p>Zmodyfikowana struktura pozwala na użycie analogicznych stylów w arkuszu, jednak zamiast selektorów klasy korzystamy z selektorów kontekstu.</p>
<h3>Nowoczesne podejście</h3>
<p>Selektory potomka oferowane przez CSS3 umożliwiają jeszcze dokładniejsze odwołanie się do elementów w strukturze dokumentu. Niestety Internet Explorer <a href="http://adamczuk.net.pl/2009/01/08/obsluga-selektorow-css3-przez-przegladarki/">nie obsługuje</a> selektora potomka, co jest sporym mankamentem tego rozwiązania.</p>
<pre><code>col:nth-child(odd) {
	background: #faa;
}
col:nth-child(even) {
	background: #f44;
}
tbody tr:nth-child(odd) {
	background: transparent url(img/grey-10-transparent.png) 0 0 repeat;
}
tbody tr:nth-child(even) {
	background: transparent url(img/grey-50-transparent.png) 0 0 repeat;
}</code></pre>
<p>Właściwe dobranie kolorów tła oraz obrazów pozwala na uzyskanie właściwego kolorowania wierszy i kolumn. Wygląd <a href="http://adamczuk.net.pl/-/multiple-zebra-striping/">tabeli</a> jest dokładnie taki, jak oczekiwaliśmy. Dodatkowa zaleta tego podejścia to struktura tabeli wolna od zbędnych atrybutów <code>&lt;class&gt;</code>. </p>
<h3>Podsumowanie</h3>
<p>Przedstawione przykłady różnią się sposobem w jaki uzyskano efekt końcowy. Czytelniejsza struktura i lżejszy kod to wielka zaleta. Podobnych rozwiązań istnieje wiele, jednak nie stosuje się ich powszechnie z powodu braku wsparcia po stronie Internet Explorera.</p>
]]></content:encoded>
			<wfw:commentRss>http://adamczuk.net.pl/2009/12/16/kolorowanie-wierszy-i-kolumn-w-tabeli/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>CSS według Erica Meyera. Kolejna odsłona</title>
		<link>http://adamczuk.net.pl/2009/11/30/css-wedlug-erica-meyera-kolejna-odslona/</link>
		<comments>http://adamczuk.net.pl/2009/11/30/css-wedlug-erica-meyera-kolejna-odslona/#comments</comments>
		<pubDate>Mon, 30 Nov 2009 22:13:18 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[CSS]]></category>
		<category><![CDATA[Książki]]></category>
		<category><![CDATA[book]]></category>
		<category><![CDATA[eric]]></category>
		<category><![CDATA[meyer]]></category>
		<category><![CDATA[review]]></category>

		<guid isPermaLink="false">http://adamczuk.net.pl/?p=230</guid>
		<description><![CDATA[Arkusze stylów kaskadowych powinny być używane przez koderów WWW, nawet w przypadku tworzenia prostych stron HTML. Zalety jakie niesie technologia CSS są po prostu nie do ocenienia. Lżejszy kod, rozdzielenie warstwy logicznej i prezentacyjnej, a także zgodność ze standardami. Wszystko to pozwoli nam na uniknięcie kłopotów ze złym wyświetlaniem treści. Niestety nie wszyscy potrafią używać [...]]]></description>
			<content:encoded><![CDATA[<p><img src="http://adamczuk.net.pl/wp-content/uploads/2009/11/css_w_erica_meyera_odslona.jpg" alt="css_w_erica_meyera_odslona" title="css_w_erica_meyera_odslona" width="164" height="200" class="left size-full wp-image-234" />Arkusze stylów kaskadowych powinny być używane przez koderów WWW, nawet w przypadku tworzenia prostych stron <abbr title="HyperText Markup Language">HTML</abbr>. Zalety jakie niesie technologia <abbr title="Cascading Style Sheet">CSS</abbr> są po prostu nie do ocenienia. Lżejszy kod, rozdzielenie warstwy logicznej i prezentacyjnej, a także zgodność ze standardami. Wszystko to pozwoli nam na uniknięcie kłopotów ze złym wyświetlaniem treści. Niestety nie wszyscy potrafią używać arkuszy stylów kaskadowych z ich przeznaczeniem. Jeśli ktoś nie używa <abbr>CSS</abbr> na co dzień może popełniać bardzo proste błędy.<span id="more-230"></span></p>
<p><em>&#8220;CSS według Erica Meyera. Kolejna odsłona&#8221;</em> to kontynuacja pierwszej książki Erica Meyera na temat wykorzystania technologii <abbr>CSS</abbr>. Autor opisał w niej podstawowe właściwości stylów, jak również sposób ich użycia w kodzie strony. Ważne jest, aby konstruować semantyczną strukturę dokumentu, ponieważ nawet z wyłączoną obsługą <abbr>CSS</abbr> nasza strona będzie wyglądać przyzwoicie. Jeżeli zaś użyjemy stylów to mamy pełen dostęp do warstwy prezentacyjnej.</p>
<p>Przykłady przedstawione w książce to dalszym ciągu użyteczne i często spotykane elementy. Mimo dokładnie opisanych czynności i sposobu postępowania, swobodnie możemy zmodyfikować podany <abbr>CSS</abbr>, aby dostosować go do własnych potrzeb. Jeżeli chcemy uczynić nasze aplikacje internetowe lepszymi to pierwszą rzeczą jest zastosowanie arkuszy stylów. Nawet korzystanie z <abbr>CSS</abbr> 2.1 daje programiści wszelkie środki, aby semantycznie tworzyć strony WWW. Używanie tabel do budowania layoutu, stosowanie obrazków imitujących odstępy to przestarzałe techniki. Nowoczesne aplikacje webowe muszą korzystać z właściwych technologii, a jedną z nich jest właśnie <abbr>CSS</abbr>.</p>
<p>Książka bardzo dobrze sprawdzi się jako podręcznik nauki <abbr>CSS</abbr>. Osoby, które chcą zrozumieć zasady działania <abbr>CSS</abbr>, powinny uczyć się od najlepszych. Eric Meyer jest uznanym autorytetem w branży, ponieważ sam jest współtwórcą tej technologii. Potrafi bardzo jasno przedstawić wszystkie zawiłości związane z <abbr>CSS</abbr>, jak również pokazać sposób rozwiązania napotykanych problemów.</p>
<p class="info">OCENA OSTATECZNA: 4/5</p>
<p class="info">OSTATECZNA OCENA: 4/5</p>
<ul>
<li><strong>Autor: <a href="http://meyerweb.com/">Eric A. Meyer</a></strong></li>
<li>Tytuł oryginału: More Eric Meyer on CSS</li>
<li>Tłumaczenie: Wojciech Moch</li>
<li>ISBN: 83-7361-901-1</li>
<li>Format: 205&#215;253, 272 stron</li>
<li>Data wydania: 07/2005 (<a href="http://helion.pl">Helion</a>)</li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://adamczuk.net.pl/2009/11/30/css-wedlug-erica-meyera-kolejna-odslona/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Drawter</title>
		<link>http://adamczuk.net.pl/2009/11/20/drawter/</link>
		<comments>http://adamczuk.net.pl/2009/11/20/drawter/#comments</comments>
		<pubDate>Fri, 20 Nov 2009 20:01:37 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Serwisy]]></category>
		<category><![CDATA[drawter]]></category>
		<category><![CDATA[javascript]]></category>
		<category><![CDATA[js]]></category>

		<guid isPermaLink="false">http://adamczuk.net.pl/?p=225</guid>
		<description><![CDATA[Dawno temu znalazłem w sieci ciekawe narzędzie &#8211; mianowicie Drawter.com. Pamiętam, że jego możliwości były spore, chociaż nigdy nie próbowałem tworzyć przy jego pomocy prawdziwego układu strony. Możliwości aplikacji pokazuje screencast ze strony projektu. Program pozwala na tworzenie stron internetowych poprzez rysowanie warstw. Jednak nie jest to internetowy edytor WYSIWYG.

Drawter w elegancki sposób generuje kod [...]]]></description>
			<content:encoded><![CDATA[<p><img src="http://adamczuk.net.pl/wp-content/uploads/2009/11/drawter.jpg" alt="drawter" title="drawter" width="100" height="100" class="left size-full wp-image-226" />Dawno temu znalazłem w sieci ciekawe narzędzie &#8211; mianowicie <a href="http://drawter.com/">Drawter.com</a>. Pamiętam, że jego możliwości były spore, chociaż nigdy nie próbowałem tworzyć przy jego pomocy prawdziwego układu strony. Możliwości aplikacji pokazuje <a href="http://drawter.com/screencast/">screencast</a> ze strony projektu. Program pozwala na tworzenie stron internetowych poprzez rysowanie warstw. Jednak nie jest to internetowy edytor WYSIWYG.<br />
<span id="more-225"></span><br />
<strong>Drawter</strong> w elegancki sposób generuje kod XHTML oraz CSS na podstawie narysowanych myszką warstw. Rysowane warstwy symbolizują znaczniki kodu, a nie narysowany obraz. Draw Mode pozwala na rysowanie kolejnych tagów naszego layoutu, a Edit Mode pozwala dodać lub zmienić właściwości stylów. Oprócz tego możemy  w dowolnej chwili wygenerować kod naszej strony.</p>
<p>Narzędzie to wymaga od użytkownika wiedzy na temat XHTML i CSS, a zatem nie jest przeznaczone dla początkujących koderów. Jednak programiści Drawtera zapowiadają stworzenie wersji Amateur dla laików standardów sieciowych.</p>
]]></content:encoded>
			<wfw:commentRss>http://adamczuk.net.pl/2009/11/20/drawter/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Ajax loading gif generator</title>
		<link>http://adamczuk.net.pl/2009/11/10/ajax-loading-gif-generator/</link>
		<comments>http://adamczuk.net.pl/2009/11/10/ajax-loading-gif-generator/#comments</comments>
		<pubDate>Tue, 10 Nov 2009 19:47:00 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Java Script]]></category>
		<category><![CDATA[Serwisy]]></category>
		<category><![CDATA[ajax]]></category>
		<category><![CDATA[generator]]></category>
		<category><![CDATA[image]]></category>
		<category><![CDATA[js]]></category>
		<category><![CDATA[loading]]></category>

		<guid isPermaLink="false">http://adamczuk.net.pl/?p=222</guid>
		<description><![CDATA[W jednym z projektów wykorzystałem skrypt GreyBox w celu otwierania obrazków. Jednak standardowy obrazek ładowania były beznadziejny. Skorzystałem ze znanej wszystkim użytkownikom wyszukiwarki i po kilku sekundach trafiłem na stronę, którą generowała obrazek ładowania strony.

W panelu wybieramy typ naszego obrazka, kolory jego tło i pierwszego planu. Możemy jeszcze włączyć lub nie przezroczystość obrazka. Generowanie obrazka [...]]]></description>
			<content:encoded><![CDATA[<p><img src="http://adamczuk.net.pl/wp-content/uploads/2009/11/ajax-loading-generator.jpg" alt="ajax-loading-generator" title="ajax-loading-generator" width="300" height="100" class="left size-full wp-image-223" />W jednym z projektów wykorzystałem skrypt <a href="http://www.orangoo.com/labs/GreyBox/" title="GreyBox">GreyBox</a> w celu otwierania obrazków. Jednak standardowy obrazek ładowania były beznadziejny. Skorzystałem ze znanej wszystkim użytkownikom wyszukiwarki i po kilku sekundach trafiłem na <a href="http://www.ajaxload.info/">stronę</a>, którą generowała obrazek ładowania strony.<br />
<span id="more-222"></span><br />
W panelu wybieramy typ naszego obrazka, kolory jego tło i pierwszego planu. Możemy jeszcze włączyć lub nie przezroczystość obrazka. Generowanie obrazka trwa kilka sekund, a wszystko to za darmo.</p>
<p>Wśród typów obrazka rozpoznamy ten, który ma YouTube, nowy LightBox albo chociaż Lightwindow. Ten wpis jest prawdziwym dopełnieniem artykułu na temat stylowania lightboxa. Po zmianie kolorystki skryptu, możemy spokojnie dostosować do własnych potrzeb również obrazek ładowania.</p>
]]></content:encoded>
			<wfw:commentRss>http://adamczuk.net.pl/2009/11/10/ajax-loading-gif-generator/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>CSS. Gotowe rozwiązania</title>
		<link>http://adamczuk.net.pl/2009/10/24/css-gotowe-rozwiazania/</link>
		<comments>http://adamczuk.net.pl/2009/10/24/css-gotowe-rozwiazania/#comments</comments>
		<pubDate>Sat, 24 Oct 2009 13:28:02 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[CSS]]></category>
		<category><![CDATA[Książki]]></category>
		<category><![CDATA[book]]></category>
		<category><![CDATA[review]]></category>
		<category><![CDATA[richard]]></category>
		<category><![CDATA[york]]></category>

		<guid isPermaLink="false">http://adamczuk.net.pl/?p=219</guid>
		<description><![CDATA[Recenzja książki z gotowymi rozwiązaniami CSS. Szkoda, bo jakość tych rozwiązań jest dyskusyjna.]]></description>
			<content:encoded><![CDATA[<p><img src="http://adamczuk.net.pl/wp-content/uploads/2009/11/css_gotowe_rozw.jpg" alt="css_gotowe_rozw" title="css_gotowe_rozw" width="140" height="200" class="left size-full wp-image-220" />Arkusze stylów kaskadowych służą do wizualizacji aplikacji internetowych. Stosowanie jakiegokolwiek formatowania w kodzie XHTML jest przez standardy sieciowe zabronione. Niestety wielu koderów nadal nie potrafi wykorzystać modelu  blokowego przy tworzeniu semantyczne kodu. Na rynku znajdziemy bardzo wiele książek dotyczących technologii XHTML oraz CSS, które opisują temat od podstaw lub w stopniu bardziej złożonym. Jednak nie wszystkie z nich są warte naszego czasu, a już na pewno nie naszych pieniędzy.<span id="more-219"></span></p>
<p><em>&#8220;CSS. Gotowe rozwiązania&#8221;</em> to książka, która na początku zainteresowała mnie spisem treści. Dziesięć projektów z kodem XHTML i CSS, rozwiązujących jedne z częstszych problemów jakie spotykają programiści stron internetowych potrafi zachęcić. Jednak zawartość merytoryczna książki nie wygląda już tak krystalicznie. Autor proponuje zastąpienie sztuczek starej szkoły, rozdzielenie warstw kodu i prezentacji, ale sam niestety popełnia niewybaczalne błędy.</p>
<p>Początkujący programiści zapewne nie dostrzegą większych błędów w książce, ponieważ nie traktuje ona niczym zaawansowanym. Poza tym początkujący programiści dopiero zdobywają wiedzę i doświadczenie, więc powinni korzystać z poprawnie napisanych źródeł. Kod XHTML jest błędnie skonstruowany, a tym samym w konsekwencji arkusze stylów kaskadowych zawierają nieodpowiednie deklaracje. Nagminne opakowywanie wszystkich elementów przed <code>&lt;div&gt;</code> prowadzi do tworzenia gigantycznej struktury znaczników. Używanie znaczników niezgodnie z ich semantycznym przeznaczeniem, jak również długości nazw klas i identyfikatorów budzą spore zastrzeżenia.</p>
<p>Jednak największym błędem jest stosowanie <acronym title="JavaScript">JS</acronym> do ominięcia błędów przeglądarek. Moim zdaniem są dużo lepsze sposoby, aby zmusić <acronym title="Internet Explorer">IE</acronym> do prawidłowego wyświetlania. Nie chodzi tu bynajmniej o możliwość wyłączenia JS przez użytkownika, bo to robi kilka procent populacji sieciowej, ale najzwyczajniej o to, że JS służy zupełnie do czegoś innego.</p>
<p>Książka miała za zadanie przedstawić sposoby radzenia sobie z problemami aplikacji internetowych, jednak moim zdaniem nie znajdziemy tam zbyt wielu wartościowych informacji. Zaproponowane rozwiązania czasami dają skutek odwrotny od zamierzonego. Przykładowe formatowanie formularzy jest przykładem ingerencji kodera w obszar, którego nigdy nie powinien zmieniać. Stosowanie tabel do tworzenia konstrukcji layoutu, jak również korzystanie z <code>&lt;iframe&gt;</code> jest w dzisiejszych czasach niewybaczalne. Niestety autor nie do końca zna obowiązujące dzisiaj standardy sieciowe. Pewnie z tego, także powodu stosuje najmniej restrykcyjny <code>XHTML 1.0 Transitional</code>.</p>
<p>Zdecydowanie nie polecam tej książki nikomu. Początkujący koderzy nauczą się złych praktyk, związanych z kodem XHTML i arkuszami CSS. Zaawansowanie programiści nie znajdą w tej książce nic wartościowego. Książka mogłaby być o wiele lepsza, ale z powodu ciągłego zainteresowania tworzeniem aplikacji webowych, nadal na rynku wydawane są książki, które nie warto nawet otwierać. Niestety branża WWW nie zmieni się na lepsze, jeśli programiści nie zaczną właściwie stosować standardów sieciowych, a nie zaczną, kiedy będą mogli znaleźć książkę taką jak <em>&#8220;CSS. Gotowe rozwiązania&#8221;</em>.</p>
<p class="info">OSTATECZNA OCENA: 2/5</p>
<ul>
<li><strong>Autor: Richard York</strong>
</li>
<li>Tytuł oryginału: CSS Instant Results
</li>
<li>Tłumaczenie: Łukasz Piwko
</li>
<li>ISBN: 83-246-0574-6
</li>
<li>Format: B5, stron 392
</li>
<li>Data wydania: 11/2006 (<a href="http://helion.pl">Helion</a>)</li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://adamczuk.net.pl/2009/10/24/css-gotowe-rozwiazania/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Stylowanie Lightboxa</title>
		<link>http://adamczuk.net.pl/2009/10/11/stylowanie-lightboxa/</link>
		<comments>http://adamczuk.net.pl/2009/10/11/stylowanie-lightboxa/#comments</comments>
		<pubDate>Sun, 11 Oct 2009 12:48:46 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[CSS]]></category>
		<category><![CDATA[js]]></category>
		<category><![CDATA[lightbox]]></category>
		<category><![CDATA[XHTML]]></category>

		<guid isPermaLink="false">http://adamczuk.net.pl/?p=214</guid>
		<description><![CDATA[Przykładowe zmiany domyślnego wyświetlania obrazów przez skrypt Lightbox.]]></description>
			<content:encoded><![CDATA[<p><img src="http://adamczuk.net.pl/wp-content/uploads/2009/10/lightbox.jpg" alt="lightbox" title="lightbox" width="300" height="100" class="left size-full wp-image-217" />Programiści JS znają na pewno framework <a href="http://www.prototypejs.org/">prototype.js</a> oraz bibliotekę <a href="http://script.aculo.us/">scriptaculous.js</a>, która udostępnia wiele efektów graficznych. Popularne w ostatnich miesiącach otwieranie wszystkiego w <em>overlay&#8217;owych</em> okienkach prowadzi jednak wielokrotnie do przerostu formy nad treścią. Nie wystarczy tylko ściągnąć skrypt z sieci. Prezentowane elementy często wyświetlają się w sposób standardowy, który nie jest dla nich odpowiedni. Możemy to zmienić przy niewielkim wysiłku, a uzyskany efekt na pewno zadowoli naszych klientów i użytkowników. Jednym z pierwszych skryptów działających w ten sposób był lightbox napisany przez <a href="http://www.huddletogether.com/">Lokesha Dhakara</a>.<span id="more-214"></span></p>
<h3>Lightbox 2.02</h3>
<p>Do uruchomienia lightboxa potrzebujemy wspomnianych już plików <em>prototype.js</em> oraz <em>scriptaculous.js</em> oraz dwóch innych. Plik <em>lightbox.js</em> jest właściwym kodem naszego skryptu, a <em>effects.js</em> częścią biblioteki scriptaculous, odpowiedzialną za efekty graficzne. Na stronie autora znajdziemy wszystkie potrzebny pliki, łącznie ze standardowymi stylami <acronym title="Cascading Style Sheet">CSS</acronym> i obrazkami nawigacyjnymi. Należy zwrócić uwagę jaką wersję skryptu ściągamy ze strony.</p>
<p>Lightbox może wyświetlać pojedyncze obrazki lub pewien zbiór obrazków znajdujących się na stronie. Sposób jego uruchomienia jest bardzo prosty i szczegółowo wyjaśniony na stronie projektu, dlatego skupimy się tylko na zmianie sposobu prezentacji oraz ważnych szczegółach technicznych. Poniżej przedstawiony jest przykładowy obrazek z białą ramką szerokości 10 pikseli wyświetlony na czarnym tle z 40% przezroczystością.</p>
<p><img src="/img/art/lightbox-01.jpg" class="art-photo" alt="Standardowy sposób prezentacji" /></p>
<p>Aby to zmienić musimy dokonać edycji pliku <em>lightbox.css</em>. Znajdujemy deklaracje dla naszego tła i zmieniamy co trzeba. W moim pliku definicja dla warstwy <code>#overlay</code> była następująca.</p>
<pre><code>#overlay {

	...

	background-color: #000;

	filter:alpha(opacity=60);

	-moz-opacity: .6;

	opacity: .6;

}</code></pre>
<p>Linijka <code>background-color: #000;</code> odpowiada za kolor tła w czasie prezentacji obrazów. W naszym przypadku jest to kolor czarny. Kolejne 3 linijki definiują nieprzeźroczystość dla Internet Explorera, starszych wersji przeglądarek rodziny Mozilla oraz wszystkich przeglądarek obsługujących poprawnie nieprzeźroczystość rekomendowana przez W3C. Różnica pomiędzy nieprzezroczystością a przezroczystością jest prosta. Jeżeli mamy 20% nieprzezroczystości (opacity) to jej odpowiednikiem jest dokładnie 80% przezroczystości (transparency). Dla niewtajemniczonych, trochę prościej. Jeśli ustawimy dla naszego obrazka <code>opacity: .1;</code> to będzie on praktycznie niewidoczny. W odwrotnej sytuacji, czyli dla wysokiej wartości <code>opacity: .9;</code> nasz obrazek jedynie lekko rozjaśniony. Wartość opacity może być podana bez zera przed przecinkiem, bo jest to skrótowy zapis zgodny z CSS.</p>
<p class="warning">Ostrzegam, że zmiana tych parametrów może nie przynieść oczekiwanego skutku z powodu ustawień przezroczystości w innym miejscu. Mianowicie w pliku <em>lightbox.js</em> może, ale nie musi występować poniższa linijka.</p>
<pre><code>var overlayOpacity = 0.9;	// controls transparency of shadow overlay</code></pre>
<p>Osobiście kiedy używałem lightboxa 2.0 to wykasowałem definicje nieprzezroczystości z warstwy <code>#overlay</code>, ustawiając w stylach jedynie tło. Przezroczystość zmieniałem w pliku <em>lightbox.js</em>.</p>
<p>Bardzo ważnym elementem w lightboxie jest ramka wokół obrazka, której szerokość możemy bardzo szybko zmienić. Wystarczy tylko znaleźć odpowiedni fragment w pliku <em>lightbox.js</em>.</p>
<pre><code>var borderSize = 2;</code></pre>
<p>Rozmiar oczywiście jest w pikselach. Jeżeli zmieniamy szerokość ramki to w stylach musimy również dokonać jednej zmiany, tym razem jednak dopełnienia obrazka.</p>
<pre><code>#imageContainer {

	padding: 2px;

}</code></pre>
<p>Chcemy mieć węższą ramkę to zmieniamy obydwie wartości. W naszym przypadku będzie to <code>2px</code>. Jeżeli chcemy zmienić kolor ramki, która wcale nie jest ramką, a całą warstwą, na której wyświetlamy nasz obrazek musimy znaleźć następujący kod:</p>
<pre><code>#outerImageContainer {

	position: relative;

	<strong>background-color: #AAA;</strong>

	width: 250px;

	height: 250px;

	margin: 0 auto;

}</code></pre>
<p>Jego zmiana spowoduje zmianę koloru warstwy, na której wyświetlany jest obrazek. Nasza warstwa będzie miała kolor <code>#AAA</code>. Teoretycznie możemy dopisać <code>  border: 2px solid #FFF;</code>, ale nie wiem czy jest komukolwiek potrzebne.</p>
<p>Dalszym etapem naszej stylizacji lightboxa będzie pasek rozwijany poniżej samego obrazka. Znajdują się na nim informacje zawarte w atrybucie <em>title</em> naszego linka oraz przycisk Close.</p>
<pre><code>#imageDataContainer {

	font: 10px Verdana, Helvetica, sans-serif;

	<strong>background-color: transparent;</strong>

	margin: 0 auto;

	line-height: 1.4em;

}</code></pre>
<p>Kolor tego paska możemy ustawić dowolnie, w zależności od potrzeby. Jednak w naszym przypadku potrzebujemy, aby pasek był przezroczysty. Przezroczysty pasek może uniemożliwiać odczytanie tekstu. Również obrazek <em>closelabel.gif</em>, który standardowo nie posiada przezroczystości może zaburzać oczekiwany efekt.</p>
<p>Najlepszym rozwiązaniem tej sytuacji jest przygotowanie obrazków z przezroczystym tłem oraz w polskiej wersji językowej, jeśli tylko potrzebujemy. Obrazki <em>loading.gif</em> oraz <em>closelabel.gif</em> znajdują się w katalogu <code>images/</code>, a ścieżki do plików w <em>lightbox.js</em>.</p>
<pre><code>var fileLoadingImage = "images/loading.gif";

var fileBottomNavCloseImage = "images/closelabel.gif";</code></pre>
<p>Mamy do wyboru albo nadpisać te pliki albo zmienić ścieżki w kodzie skryptu. Wygodniejsze jest zmienienie ścieżek, bo zawsze zostaną nam standardowe pliki, na wszelki wypadek.</p>
<p>Ostatnim elementem jest opis zdjęcia wyświetlany na pasku. Musimy zmienić jego kolor na jaśniejszy, aby możliwe było jego odczytanie na ciemnym tle.</p>
<pre><code>#imageData #caption {

	font-weight: bold;

	color: #FFF;

}</code></pre>
<p>Jeżeli dokonaliśmy wszystkich zmian poprawnie to powinniśmy otrzymać efekt podobny do widocznego na zdjęciu poniżej.</p>
<p><img src="/img/art/lightbox-02.jpg" class="art-photo" alt="Zmodyfikowany sposób prezentacji" /></p>
<p>Do pełni szczęścia brakuje nam jeszcze obrazków prevlabel.gif i nextlabel.gif, które potrzebne są do nawigacji w momencie oglądania kilku obrazków. Ich wykonanie nie powinno być trudne, a  ścieżki do tych plików zapisane są w stylach <em>lightbox.css</em>. Powinniśmy jeszcze odsunąć nasze obrazki od brzegu o tyle pikseli, ile ma nasza ramka.</p>
<pre><code>#prevLink {

	left: 2px;

	float: left;

}

#nextLink {

	right: 2px;

	float: right;

}</code></pre>
<p>W przypadku oglądania kilku zdjęć poniżej opisu pojawia się, także tekst mówiący nam o numerze zdjęcia. Zmiany tego tekstu możemy dokonać w pliku <em>lightbox.js</em>.</p>
<pre><code>// if image is part of set display 'Image x of x'

if(imageArray.length &gt; 1){

	Element.show('numberDisplay');

	Element.setInnerHTML( 'numberDisplay', "Zdjęcie " + eval(activeImage + 1) + " z " + imageArray.length);

}</code></pre>
<p>Kolor tekstu siedzi w stylach <em>lightbox.js</em>.</p>
<pre><code>#imageData #numberDisplay {

	display: block;

	clear: left;

	<strong>color: #FFF;</strong>

	padding-bottom: 1.0em;

}</code></pre>
<h3>Podsumowanie</h3>
<p>Jak widać na załączonych obrazkach zmiany w wyglądzie lightboxa mogą być spore, a ich wykonanie wcale nie musi być trudne. Wszystko zależy od naszych potrzeb i chęci. Zmiany przedstawione w artykule dotykają tylko czubka góry lodowej, bo taka stylizacja jest praktycznie nieograniczona. Ważne jest, aby dokładnie zaplanować, co chcemy zmienić i do tego dążyć.</p>
]]></content:encoded>
			<wfw:commentRss>http://adamczuk.net.pl/2009/10/11/stylowanie-lightboxa/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
