<?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>BBProject.net &#187; css</title>
	<atom:link href="http://www.bbproject.net/tag/css/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.bbproject.net</link>
	<description>Programowanie, webmastering, informatyka</description>
	<lastBuildDate>Tue, 03 Aug 2010 08:22:56 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0</generator>
		<item>
		<title>Przydatne sztuczki w AdTaily.pl</title>
		<link>http://www.bbproject.net/2010/04/przydatne-sztuczki-w-adtaily-pl/</link>
		<comments>http://www.bbproject.net/2010/04/przydatne-sztuczki-w-adtaily-pl/#comments</comments>
		<pubDate>Sun, 04 Apr 2010 15:43:09 +0000</pubDate>
		<dc:creator>M@ster</dc:creator>
				<category><![CDATA[Webmastering]]></category>
		<category><![CDATA[adtaily]]></category>
		<category><![CDATA[cpm]]></category>
		<category><![CDATA[css]]></category>
		<category><![CDATA[reklama]]></category>
		<category><![CDATA[widget]]></category>

		<guid isPermaLink="false">http://www.bbproject.net/?p=299</guid>
		<description><![CDATA[Wpis ten kieruje do wszystkich użytkowników sieci reklamowej AdTaily.pl, głównie rzec jasna wydawców, którzy umieszczają reklamy na swoich stronach. Mimo ciągłego rozwoju przez autorów (a właściwie autorki ) tego systemu reklamy, wciąż jest w nim kilka niedogodności które powiem jak ominąć bądź obejść. Mam tutaj na myśli rozszerzone personalizowanie wyglądu widgetu, jego umieszczanie na stronie [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.adtaily.pl"><img class="alignleft size-thumbnail wp-image-300" title="AdTaily.pl" src="http://www.bbproject.net/wp-content/uploads/2010/04/adtaily-160x89.png" alt="" width="160" height="89" /></a>Wpis ten kieruje do wszystkich użytkowników sieci reklamowej <a href="http://www.adtaily.pl">AdTaily.pl</a>, głównie rzec jasna wydawców, którzy umieszczają reklamy na swoich stronach.</p>
<p>Mimo ciągłego rozwoju przez autorów (a właściwie autorki <img src='http://www.bbproject.net/wp-includes/images/smilies/icon_smile.png' alt=':)' class='wp-smiley' /> ) tego systemu reklamy, wciąż jest w nim kilka niedogodności które powiem jak ominąć bądź obejść. Mam tutaj na myśli rozszerzone personalizowanie wyglądu widgetu, jego umieszczanie na stronie oraz przeliczanie stawek za dzień odsłony.</p>
<p>Korzystasz z AdTaily.pl i chcesz wycisnąć z niego siódme poty oraz zwiększyć przychody z reklamy? Zapraszam do dalszej części wpisu.</p>
<p><span id="more-299"></span>Cały wpis podzieliłem na dwa podrozdziały, jeden dotyczący wyglądu widgetu, oraz drugi na temat ustalania stawek za dzień odsłony.</p>
<h4>Widget</h4>
<p>Widget, czyli boks reklamowy jaki umieszczamy na swojej stronie. Mimo iż w panelu reklamowym możemy ustalić takie rzeczy jak tytuł czy kolor ramki oraz wypełnienia, to czasami jest to za mało.</p>
<p style="text-align: center;"><a href="http://www.bbproject.net/wp-content/uploads/2010/04/adtaily_widget_settings.png"><img class="alignnone size-large wp-image-304" title="AdTaily.pl - konfiguracja widgetu" src="http://www.bbproject.net/wp-content/uploads/2010/04/adtaily_widget_settings-512x449.png" alt="" width="512" height="449" /></a><br />
<em>Panel konfiguracji widgetu w serwisie AdTaily.pl</em></p>
<p>Pierwsza sytuacja, tytuł boksa. Nie można go usunąć, nawet wpisując pusty ciąg znaków. Czasami chcemy sami dodać nagłówek zgodny z wyglądem naszej strony. Druga sprawa, kolor wypełnienia, co jeśli tło naszej strony nie jest jednolite? Niestety nie możemy wybrać tła przeźroczystego.</p>
<p>Rozwiązanie? Nadpisanie stylów w arkuszu CSS:</p>
<pre class="brush: css">#AdTaily_Widget_Container div
{
  border: none !important;
  background-color: transparent !important;
}

#AdTaily_Widget_Container span
{
  display: none !important;
}</pre>
<p>Pierwszy fragment odpowiedzialny jest za usunięcie obramowania widgetu oraz ustawienie przeźroczystego koloru tła. Drugi natomiast za usunięcie nagłówka nad boksem.</p>
<p>Oczywiście możemy tutaj bardziej zaszaleć i dodać sobie przykładowo bardziej finezyjne obramowanie czy w inny sposób skonfigurować wygląd widgetu AdTaily.pl.</p>
<h5>Szerokość widgetu</h5>
<p>Drugą poważną wadą widgetu jest jego szerokość, która czasami przekracza realną na jaką jest zapotrzebowanie. Powoduje to, że mimo dostatecznej dostępnej szerokości na stronie gdzie znajduje się boks, mieści się w nim tylko jedna reklama w rzędzie, mimo iż na oko widać że weszły by tam dwie (dokładnie jak na tej stronie).</p>
<p>W tej sytuacji wystarczy że wrzucimy kod widgetu w warstwę której nadamy powiększoną szerokość i odpowiednio, relatywnie przesuniemy aby uzyskać optymalne położenie. Przykładowo:</p>
<pre class="brush: xml">&lt;div style="position: relative; top: 0px; left: -10px; width: 290px;"&gt;
  ... kod widgetu ...
&lt;/div&gt;</pre>
<p>Liczę że każdy kto bierze się za umieszczanie kodu na stronie ma na tyle rozwinięte umiejętności operowania HTML&#8217;em iż zrozumie powyższą ideę i dobierze odpowiednio parametry w zaprezentowanym kodzie.</p>
<h4>Cena</h4>
<p>Jeden z ważniejszych parametrów ekonomicznych naszej reklamy <img src='http://www.bbproject.net/wp-includes/images/smilies/icon_smile.png' alt=':)' class='wp-smiley' /> . Cena jaką ustalamy w konfiguracji serwisu, jest to cena za dzień prezentowania reklamy. AdTaily.pl pobiera 30% prowizji od tego co płaci reklamodawca, a ustalana stawka jaką podajemy to pozostałe 70% jakie wpadnie do naszej kieszeni.</p>
<p>Cena jaka będzie widoczna w widgecie oraz katalogu AdTaily.pl wyraża się wzorem:</p>
<pre style="text-align: center;">Cena dla reklamodawcy = Cena podana / 0,7</pre>
<p>&#8230;analogicznie:</p>
<pre style="text-align: center;">Cena podana = Cena dla reklamodawcy * 0,7</pre>
<p>Po co te wzory? Gdyż czasami zachodzi potrzeba ustalenie tak ceny aby ta widoczna dla kupujących była na określonym poziomie &#8211; np.: jakaś równa kwota. Jeśli przykładowo chcemy aby cena na stronie była na poziomie równo 2zł to w panelu konfiguracyjnym musimy wpisać 1,40zł (2 / 0,7).</p>
<h5>CPM</h5>
<p>Koszt tysiąca odsłon reklamy. Jest to ważny czynnik przy ustalaniu ceny dziennej. Musimy pamiętać o tym aby nie przesadzić, gdyż po prostu nie zdobędziemy żadnego klienta. CPM określa nam realny koszt reklamy, bo co z tego jeśli mamy niską cenę per dzień skoro w przeliczeniu na odsłonę wychodzi drożej niż u tego który ma za dzień więcej?</p>
<p>I tutaj znów powstaje problem, jaką podać stawkę, aby po uwzględnieniu miesięcznych statystyk wyszedł pożądany przez nas wskaźnik CPM?</p>
<pre style="text-align: center;">Cena podana = (Miesięczna ilość odsłon * CPM * 0.7) / 30 000</pre>
<p>Zatem, jeśli nasz serwis zalicza przykładowo 20 000 odsłon w miesiącu, i chcemy aby CPM był na poziomie 0,40zł, to kwota jaką musimy podać za dzień wynosie 0,19zł.</p>
<p>Jeśli natomiast chcesz dowiedzieć się ile wyniesie CPM przy założonej cenie oraz miesięcznych statystykach odwiedzalności:</p>
<pre style="text-align: center;">CPM = (30 000 * Cena podana) / (Miesięczna ilość odsłon * 0,7)</pre>
<p>Dla przypomnienia, <em>cena podana</em> to kwota jaką wpisujemy w serwisie.</p>
<p>Bardzo szkoda że autorzy AdTaily.pl nie dali możliwości podawania stawki CPM zamiast dziennej. Było by to o wiele wygodniejsze i uwzględniało by wzrosty i spadki ilości wejść na stronę, dostosowując automatycznie cenę w dla reklamodawców.</p>
<h4>Podsumowanie</h4>
<p>Na <a href="http://blog.adtaily.pl">blogu</a> AdTaily.pl oraz <a href="http://www.goldenline.pl/forum/adtaily">forum</a>, możemy przeczytać iż trwają pracę nad nową wersją widgetu oraz innymi udogodnieniami. Miejmy nadzieję że znajdą się tam również te dotyczące CPM.</p>
<p>Liczę że opisane tutaj zagadnienia pozwolą na ujarzmienie boksa od AdTaily.pl i zwiększenie zysków na Waszych stronach. Jeśli potrzebujecie innych rad lub wyliczeń, piszcie śmiało!</p>
]]></content:encoded>
			<wfw:commentRss>http://www.bbproject.net/2010/04/przydatne-sztuczki-w-adtaily-pl/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>Co zrobić gdy reklama blokuje wyświetlanie strony?</title>
		<link>http://www.bbproject.net/2010/03/co-zrobic-gdy-reklama-blokuje-wyswietlanie-strony/</link>
		<comments>http://www.bbproject.net/2010/03/co-zrobic-gdy-reklama-blokuje-wyswietlanie-strony/#comments</comments>
		<pubDate>Tue, 09 Mar 2010 06:07:39 +0000</pubDate>
		<dc:creator>M@ster</dc:creator>
				<category><![CDATA[Webmastering]]></category>
		<category><![CDATA[absolute]]></category>
		<category><![CDATA[css]]></category>
		<category><![CDATA[html]]></category>
		<category><![CDATA[optymalizacja]]></category>
		<category><![CDATA[position]]></category>
		<category><![CDATA[reklama]]></category>

		<guid isPermaLink="false">http://www.bbproject.net/?p=220</guid>
		<description><![CDATA[Otwieramy stronę internetową, widzimy nagłówek i czekamy&#8230; czekamy&#8230; po chwili pojawia się reklama a za nią interesująca nas treść. Brzmi znajomo? Zdecydowana większość systemów reklamowych opiera się na załączaniu zewnętrznego kodu JavaScript, który w przypadku wolnego serwera dostawcy reklam, może powodować niepotrzebne spowalnianie ładowania się naszej strony. O ile w sytuacji takich gigantów jak Google [...]]]></description>
			<content:encoded><![CDATA[<p><img class="alignleft size-thumbnail wp-image-224" title="Billboard" src="http://www.bbproject.net/wp-content/uploads/2010/02/billboard-160x122.jpg" alt="" width="160" height="122" />Otwieramy stronę internetową, widzimy nagłówek i czekamy&#8230; czekamy&#8230; po chwili pojawia się reklama a za nią interesująca nas treść. Brzmi znajomo?</p>
<p>Zdecydowana większość systemów reklamowych opiera się na załączaniu zewnętrznego kodu JavaScript, który w przypadku wolnego serwera dostawcy reklam, może powodować niepotrzebne spowalnianie ładowania się naszej strony. O ile w sytuacji takich gigantów jak <a href="https://www.google.com/adsense">Google AdSense</a> nie mamy się o co martwić, to przy korzystaniu z usług innych podmiotów czy też systemów pośredniczących (np.: <a href="http://www.openx.org">OpenX</a>), może warto zastanowić się jak pozbyć się tego problemu i nie opóźniać pokazania treści tylko przez reklamę. Zniecierpliwiony użytkownik naszej witryny może ją po prostu opuścić zanim zdąży cokolwiek zobaczyć.</p>
<p><span id="more-220"></span>Przedstawione rozwiązanie problemu jest stricte teoretyczne, gdyż docelowa implementacja zależy od konkretnego przypadku, a osoby które zajmują się tworzeniem stron internetowych na pewno będą wiedziały jak przenieść to na własny grunt.</p>
<p>Załóżmy hipotetyczną budowę naszej witryny w następującej postaci:</p>
<div style="margin: 10px auto; width: 300px;">
<div style="border: 2px solid #ff0000; padding: 10px; margin: 10px 0px; text-align: center;"><span style="color: #ff0000;">nagłówek</span></div>
<div style="border: 2px dotted #696969; padding: 10px; margin: 10px 0px; text-align: center;"><strong><span style="color: #696969;">reklama</span></strong></div>
<div style="border: 2px solid #1e90ff; padding: 10px; margin: 10px 0px; text-align: center;"><span style="color: #1e90ff;">treść</span></div>
</div>
<p>Przykładowy kod takiej witryny mógł by wyglądać w następujący sposób:</p>
<pre class="brush: xml">&lt;div id="header"&gt;&lt;/div&gt;
&lt;div id="advert"&gt;&lt;/div&gt;
&lt;div id="content"&gt;&lt;/div&gt;</pre>
<p>Jeśli nie chcemy aby warstwa reklamowa blokowała pojawienie się treści, wystarczy że przeniesiemy ją na sam koniec. Ktoś powie &#8211; ok, ale w tym wypadku reklama powędruje na dół strony. Musimy zatem zastosować pewną sztuczkę. Mianowicie, zwiększamy <strong>dolny margines</strong> warstwy nagłówka o wartość wysokości sekcji reklamowej, tak aby powstała pusta luka. Z kolei warstwę z reklamą, pozycjonujemy w sposób <strong>absolutny</strong> (<em>position: absolute;</em>) przy pomocy stylów, umieszczając ja w otrzymanej wnęcę.</p>
<pre class="brush: xml">&lt;div id="header" style="margin-bottom: 50px;"&gt;&lt;/div&gt;
&lt;div id="content"&gt;&lt;/div&gt;
&lt;div id="advert" style="position: absolute; top: 200px; height: 50px;"&gt;&lt;/div&gt;</pre>
<p>Tym sposobem, przeglądarka wyświetlając stronę, najpierw pokaże nagłówek, treść a dopiero na samym końcu reklamę &#8211; ale w odpowiednim miejscu. Jeśli ta z jakichś powodów nie będzie w stanie się wyświetlić (padnie serwer reklamy), to nie spowoduje to blokowania treści.</p>
<p>Oczywiście to co znajduje się pod reklamą, np.: stopka strony, nie pokaże się dopóki nie zostanie pobrana reklama, nie mniej, nie jest to tak istotny element w stosunku do treści po którą sięga odwiedzający witrynę.</p>
<p>Rozwiązania tego nie możemy zastosować w sytuacji w której odległość warstwy z reklamą jest zmienna w stosunku do początku strony, gdyż w tym momencie nie jesteśmy w stanie pozycjonować warstwy przy pomocy atrybutu <em>absolute</em>. Metodę tą stosuje z powodzeniem na dwóch swoich stronach i spisuje się znakomicie &#8211; <a href="http://www.cotozaplik.pl">cotozaplik.pl</a> oraz <a href="http://checksum.me">checksum.me</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.bbproject.net/2010/03/co-zrobic-gdy-reklama-blokuje-wyswietlanie-strony/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Wbudowane style PHP-Fusion 7</title>
		<link>http://www.bbproject.net/2010/03/wbudowane-style-php-fusion-7/</link>
		<comments>http://www.bbproject.net/2010/03/wbudowane-style-php-fusion-7/#comments</comments>
		<pubDate>Fri, 05 Mar 2010 06:32:24 +0000</pubDate>
		<dc:creator>M@ster</dc:creator>
				<category><![CDATA[Webmastering]]></category>
		<category><![CDATA[cms]]></category>
		<category><![CDATA[css]]></category>
		<category><![CDATA[klasa]]></category>
		<category><![CDATA[php-fusion]]></category>
		<category><![CDATA[skróka]]></category>
		<category><![CDATA[theme]]></category>

		<guid isPermaLink="false">http://www.bbproject.net/?p=272</guid>
		<description><![CDATA[Wpis ten jest dość specyficzny, gdyż kierowany do osób tworzących/edytujących skórki dla PHP-Fusion 7. Każda skórka z reguły posiada swój własny arkusz stylów CSS. Jednakże, sam CMS również używa kilkunastu, które są zaszyte w plikach źródłowych. Chcąc dobrze dopasować nasz temat i określić wygląd wszystkich możliwych elementów musimy zdefiniować w arkuszu stylów również te klasy [...]]]></description>
			<content:encoded><![CDATA[<p><img class="alignright size-full wp-image-274" title="PHP-Fusion" src="http://www.bbproject.net/wp-content/uploads/2010/03/php_fusion.png" alt="" width="218" height="83" />Wpis ten jest dość specyficzny, gdyż kierowany do osób tworzących/edytujących skórki dla <a href="http://www.php-fusion.co.uk">PHP-Fusion 7</a>. Każda skórka z reguły posiada swój własny arkusz stylów CSS. Jednakże, sam CMS również używa kilkunastu, które są zaszyte w plikach źródłowych.</p>
<p>Chcąc dobrze dopasować nasz temat i określić wygląd wszystkich możliwych elementów musimy zdefiniować w arkuszu stylów również te klasy których używa sam PHP-Fusion. I tutaj pojawia się problem, skąd wziąć ich listę?</p>
<p><span id="more-272"></span>Też kiedyś stanąłem przed tym problemem, i napisałem drobny skrypt PHP, który analizuje wszystkie pliki tego systemu zarządzania treścią i wyłuskuje wystąpienia definicji klasy stylu (<em>class=&#8217;&#8230;&#8217;</em>). Efekt tych poszukiwań prezentuje poniżej.</p>
<pre>admin-message
alt
article_idx_cat_name
bbcode
button
center
comment-name
comment_actions
comment_message
download_idx_cat_name
failed
faq_idx_cat_name
first-link
forum
forum-caption
forum_cat_name
forum_idx_table
forum_name
forum_table
forum_thread_table
forum_thread_title
forum_thread_user_name
forum_thread_userbar
full-header
news-category
pagenav
panelbutton
passed
photogallery_album_desc
photogallery_album_photo
photogallery_album_photo_info
photogallery_album_photo_link
photogallery_album_thumb
photogallery_photo
photogallery_photo_desc
photogallery_photo_link
poll
profile_user_avatar
profile_user_level
profile_user_name
quote
setuser_body
shoutbox
shoutboxdate
shoutboxname
side
side-hr
side-label
side-small
slink
small
small2
sub-header
tbl
tbl-border
tbl1
tbl2
textbox
</pre>
<p>Oczywiście nie trzeba deklarować wszystkich wypisanych klas, a jedynie te których wygląd chcemy doprecyzować.</p>
<p>Powyższa lista została sporządzona na bazie źródeł PHP-Fusion w wersji 7.00.07.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.bbproject.net/2010/03/wbudowane-style-php-fusion-7/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Przeźroczystość w CSS</title>
		<link>http://www.bbproject.net/2009/12/przezroczystosc-w-css/</link>
		<comments>http://www.bbproject.net/2009/12/przezroczystosc-w-css/#comments</comments>
		<pubDate>Fri, 18 Dec 2009 10:06:08 +0000</pubDate>
		<dc:creator>M@ster</dc:creator>
				<category><![CDATA[Webmastering]]></category>
		<category><![CDATA[css]]></category>
		<category><![CDATA[opacity]]></category>
		<category><![CDATA[przeźroczystość]]></category>

		<guid isPermaLink="false">http://www.bbproject.net/?p=37</guid>
		<description><![CDATA[Jeśli chcecie uzyskać efekt przeźroczystości na swojej stronie www, a jednocześnie nie chcecie kombinować z kodem JavaScript albo jeszcze gorzej, tworzyć odpowiednio spreparowanej grafiki (jak za dawnych czasów), to dobrym wyjściem będzie skorzystanie z dobrodziejstw arkuszy stylów w wersji trzeciej. Niestety nie wszystkie przeglądarki obsługują w pełni CSS 3, dlatego posłużymy się pewnymi sztuczkami, aby [...]]]></description>
			<content:encoded><![CDATA[<p>Jeśli chcecie uzyskać efekt przeźroczystości na swojej stronie www, a jednocześnie nie chcecie kombinować z kodem JavaScript albo jeszcze gorzej, tworzyć odpowiednio spreparowanej grafiki (jak za dawnych czasów), to dobrym wyjściem będzie skorzystanie z dobrodziejstw arkuszy stylów w wersji trzeciej.</p>
<p>Niestety nie wszystkie przeglądarki obsługują w pełni CSS 3, dlatego posłużymy się pewnymi sztuczkami, aby efekt docelowy mógł być widoczny dla jak największej ilości odbiorców.</p>
<p><span id="more-37"></span>Na potrzeby tego wpisu, stworzyłem sobie prostą stronę z jednym elementem graficznym, oraz warstwą w jego wnętrzu o kolorze czarnym. Jeśli chciałbym teraz aby czarny prostokąt stał się przeźroczysty, wystarczy że zastosuje dla niego następującą klasę CSS:</p>
<pre class="brush: css">.transparent
{
  opacity: 0.5;
}</pre>
<p>W efekcie otrzymamy przeźroczysty w 50% czarny kwadrat.</p>
<p style="text-align: center;"><img class="alignnone size-full wp-image-39" title="CSS 3 Opacity - 100%" src="http://www.bbproject.net/wp-content/uploads/2009/11/transparent_box_100.png" alt="CSS 3 Opacity - 100%" width="250" height="250" /> <img class="alignnone size-full wp-image-38" title="CSS 3 Opacity - 50%" src="http://www.bbproject.net/wp-content/uploads/2009/11/transparent_box_50.png" alt="CSS 3 Opacity - 50%" width="250" height="250" /><br />
<em>Przed i po zastosowaniu klasy .transaprent</em></p>
<p>Właściwość <em>opacity</em> jest jednym z elementów CSS 3, dlatego, aby uodpornić się na inne przeglądarki, dodamy nieco dodatkowych właściwości, które niestety nie są zgodne z specyfikacją CSS w żadnej wersji. Nie mniej, nasza strona będzie poprawnie wyświetlana w większości popularnych przeglądarek (FF, Opera, IE, Chrome, inne oparte o silnik WebKit).</p>
<pre class="brush: css">.transparent
{
  opacity: 0.5;
  filter: alpha(opacity=50);
  -moz-opacity: 0.5;
  -khtml-opacity: 0.5;
}</pre>
]]></content:encoded>
			<wfw:commentRss>http://www.bbproject.net/2009/12/przezroczystosc-w-css/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Poprawa szybkości wczytywania grafik przy pomocy stylów</title>
		<link>http://www.bbproject.net/2009/12/poprawa-szybkosci-wczytywania-grafik-przy-pomocy-stylow/</link>
		<comments>http://www.bbproject.net/2009/12/poprawa-szybkosci-wczytywania-grafik-przy-pomocy-stylow/#comments</comments>
		<pubDate>Sun, 06 Dec 2009 09:16:27 +0000</pubDate>
		<dc:creator>M@ster</dc:creator>
				<category><![CDATA[Webmastering]]></category>
		<category><![CDATA[css]]></category>
		<category><![CDATA[html]]></category>
		<category><![CDATA[optymalizacja]]></category>

		<guid isPermaLink="false">http://www.bbproject.net/?p=9</guid>
		<description><![CDATA[Czy zdarza się Wam czy to projektując własną stronę czy też odwiedzając cudzą, mieć do czynienia z dużą ilością drobnych grafik (np.: ikon) które to kolejno wypełniają zawartość strony? Czy nie można przyspieszyć tego procesu skoro każdy z plików to z reguły nie więcej niż 1KB? Oczywiście można. Przyczyną tego stanu jest sposób w jaki [...]]]></description>
			<content:encoded><![CDATA[<p><img class="alignleft size-thumbnail wp-image-44" title="Wirtualna Polska - menu" src="http://www.bbproject.net/wp-content/uploads/2009/11/wp_menu-160x123.png" alt="Wirtualna Polska - menu" width="160" height="123" />Czy zdarza się Wam czy to projektując własną stronę czy też odwiedzając cudzą, mieć do czynienia z dużą ilością drobnych grafik (np.: ikon) które to kolejno wypełniają zawartość strony? Czy nie można przyspieszyć tego procesu skoro każdy z plików to z reguły nie więcej niż 1KB? Oczywiście można.</p>
<p>Przyczyną tego stanu jest sposób w jaki przeglądarka pobiera kolejne zasoby dołączone do odwiedzanej strony. Łącząc wszystkie drobne grafiki w jeden większy plik, a następnie przy pomocy stylów CSS wybierając interesującą nas część, możemy znacznie przyspieszyć ładowanie takiej strony.</p>
<p><span id="more-9"></span></p>
<h4>Jak działa przeglądarka?</h4>
<p>Otwierając dowolną stronę www, uzyskujemy od serwera treść dokumentu HTML, to czy jest on statyczny czy generowany dynamicznie (przez np.: php) nie ma w tej chwili znaczenia, która jest parsowana i wyświetlana przez przeglądarkę. Jeśli ta napotka na swej drodze zewnętrzne zasoby w postaci stylów CSS, skryptów JavaScript czy też grafikę rozpoczyna ich pobieranie.</p>
<h4>W czym tkwi problem?</h4>
<p>Na nieszczęście, z uwagi na fakt iż protokół HTTP jest protokołem bezstanowym, każde pobranie zasobu poprzedzone jest otwarciem gniazda TCP, nawiązaniem połączenia, pobraniem danych oraz zamknięciem połączenia. Stwarza to pewien narzut w postaci danych oraz czasu. Jeśli mamy do czynienia z dużymi plikami, przykładowo zdjęciami, nie jest to tak istotne. Z kolei jeśli naszą stronę ozdabiają różne drobne elementy graficzne, wtedy ów narzut nie tyle przekracza rozmiar zasobu co wprowadza niepotrzebne opóźnienia, gdyż samo nawiązanie sesji TCP trwa dłużej niż pobranie piku.</p>
<h4>Jak temu zaradzić?</h4>
<p>Dobrym rozwiązaniem jest scalenie wszystkich elementów graficznych w jeden plik, np.: w postaci kolumny obrazków. Ktoś może powiedzieć, jaki w tym zysk skoro i tak przeglądarka musi pobrać tą samą ilość danych? Zgadza się, jednakże zyskujemy mnóstwo czasu na narzucie związanym z tworzeniem połączenia i jego kończeniem dla każdego zasobu z osobna. Co to oznacza w praktyce? Znacznie szybsze ładowanie strony. Oczywiście opłacalność zabiegu w dużej mierze zależy od ilości grafiki klasyfikującej się do scalenia.</p>
<h4>A w praktyce?</h4>
<p>Przejdźmy zatem do części praktycznej. O ile samo scalenie obrazków nie powinno stwarzać problemów o tyle ich późniejsze wykorzystanie może rodzić pytania. Jak „wyciąć” grafikę na której nam zależy? Oczywiście stosując odpowiednią klasę stylów kaskadowych. Najprostszym sposobem jest używanie obrazków jako tło którym jest nasz zbiorczy plik graficzny, przesunięty o żądaną ilość pikseli.</p>
<p>Zastosujmy teraz zdobytą wiedzę do stworzenia menu strony składającego się z etykiet tekstowych oraz ikon. Potrzebny nam będzie zestaw stosownych obrazków oraz odpowiednie style zastosowane do menu. Zacznijmy jednak od napisania samego kodu HTML:</p>
<pre class="brush: xml">&lt;ul class="menu"&gt;
  &lt;li class="home"&gt;Strona główna&lt;/li&gt;
  &lt;li class="mail"&gt;Kontakt&lt;/li&gt;
  &lt;li class="download"&gt;Pobierz&lt;/li&gt;
  &lt;li class="tools"&gt;Narzędzia&lt;/li&gt;
&lt;/ul&gt;</pre>
<p>&#8230;kolejno arkusza stylów:</p>
<pre class="brush: css">.menu
{
  list-style: none;
  color: #404040;
  font: bold 16px Arial;
}
.menu li
{
  float: left;
  height: 24px;
  line-height: 24px;
  padding: 0px 30px;
}
.home     { background: url(icons.png) 0px   0px no-repeat; }
.mail     { background: url(icons.png) 0px -24px no-repeat; }
.download { background: url(icons.png) 0px -48px no-repeat; }
.tools    { background: url(icons.png) 0px -72px no-repeat; }</pre>
<p>&#8230;jeszcze dodajmy tylko użyty zestaw ikon:</p>
<p><img class="alignnone size-full wp-image-10" title="Zestaw ikon" src="http://www.bbproject.net/wp-content/uploads/2009/11/icons.png" alt="Zestaw ikon" /></p>
<p>&#8230;i cieszmy oko gotowym menu:</p>
<p><img class="size-full wp-image-11 aligncenter" title="Menu" src="http://www.bbproject.net/wp-content/uploads/2009/11/menu.png" alt="Menu" width="517" height="24" /></p>
<p>Jak widać, cała zabawa polega na odpowiednim przesunięciu tła tak aby trafić w interesujący nas punkt. Każda ikona ma rozmiar 24x24px, zatem musimy wymusić wysokość elementu menu właśnie na 24px, tak aby sąsiednie obrazki nie były widoczne.</p>
<p>Co zrobić w sytuacji w której mamy dużo rysunków o różnych rozmiarach? Można scalać je podobnie, jednakże lepszym wyjściem jest pogrupowanie identycznych pod względem rozmiaru w osobne pliki.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.bbproject.net/2009/12/poprawa-szybkosci-wczytywania-grafik-przy-pomocy-stylow/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
