<?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 &#187; roger johansson</title>
	<atom:link href="http://adamczuk.net.pl/tag/roger-johansson/feed/" rel="self" type="application/rss+xml" />
	<link>http://adamczuk.net.pl</link>
	<description>Just another WordPress weblog</description>
	<lastBuildDate>Fri, 03 Feb 2012 21:59:27 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
		<item>
		<title>Selektory CSS 3</title>
		<link>http://adamczuk.net.pl/2009/01/07/selektory-css-3/</link>
		<comments>http://adamczuk.net.pl/2009/01/07/selektory-css-3/#comments</comments>
		<pubDate>Tue, 06 Jan 2009 23:25:22 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[CSS]]></category>
		<category><![CDATA[roger johansson]]></category>
		<category><![CDATA[selectors]]></category>
		<category><![CDATA[translation]]></category>
		<category><![CDATA[webstandards]]></category>

		<guid isPermaLink="false">http://adamczuk.net.pl/?p=62</guid>
		<description><![CDATA[Tłumaczenie artykułu Rogera Johanssona na temat selektorów CSS 3.]]></description>
			<content:encoded><![CDATA[<p>We wrześniu i październiku 2005 roku opublikowałem serię artykułów na temat selektorów CSS 2.1. Podsumowując, większość z opisanych tam selektorów można używać <em>dziś</em> w nowoczesnych przeglądarkach jak Mozilla/Firefox, Safari i Opera. Potrzebujemy jeszcze poczekać, aż Internet Expolorer zacznie równać do najlepszych. Deklaracja pełnego wsparcia dla selektorów CSS 2.1 w Internet Explorer 7 to dobra wiadomość.<span id="more-62"></span></p>
<p>Jeśli popatrzymy w przyszłość to specyfikacja CSS 3 oferuje wiele nowych i potężnych selektorów. Wiele z nich zostało już zaimplementowanych w nowoczesnych przeglądarkach. Niestety ich obsługa póki co jest dość niejednolita i programiści nie mogą do końca na nich polegać. W niektórych przypadkach stosowanie selektorów CSS 3 jest zasadne, więc warto przyjrzeć się im bliżej.</p>
<p>W tym artykule, odnoszę się do specyfikacji przedstawionej w <a href="http://www.w3.org/TR/2005/WD-css3-selectors-20051215/">Selectors W3C Working Draft 15 December 2005</a>. Nowe selektory opisane w tym dokumencie będą używane przez CSS 3, ale także inne języki programowania. Kiedy czytasz ten artykuł po miesiącach, albo nawet latach, może warto sprawdzić czy nie jest dostępna aktualniejsza wersja.</p>
<p>Nie zamierzam tu opisywać podstaw na temat selektorów CSS. Jeśli potrzebujesz przypomnienia wiadomości to dobrym miejscem na początek jest artykuł <a href="http://adamczuk.net.pl/2008/12/08/selektory-css-21-czesc-1/">Selektory CSS 21 &#8211; część 1</a>.</p>
<p>Na początku poznajmy nowe selektory CSS 3:</p>
<table cellpadding="0" cellspacing="0">
<caption>Przegląd selektorów CSS 3</caption>
<thead>
<tr>
<th scope="col">Selektor</th>
<th scope="col">Wzorzec</th>
<th scope="col">Opis</th>
</tr>
</thead>
<tbody>
<tr>
<td>Atrybut</td>
<td>E[att^=&#8221;val&#8221;]</td>
<td>Pasuje do dowolnego elementu E, którego atrybut <code>att</code> rozpoczyna się od wartości &#8220;val&#8221;.</td>
</tr>
<tr>
<td>Atrybut</td>
<td>E[att$=&#8221;val&#8221;]</td>
<td>Pasuje do dowolnego elementu E, którego atrybut <code>att</code> kończy się wartością &#8220;val&#8221;.</td>
</tr>
<tr>
<td>Atrybut</td>
<td>E[att*=&#8221;val&#8221;]</td>
<td>Pasuje do dowolnego elementu E, którego atrybut <code>att</code> zawiera wartość &#8220;val&#8221;.</td>
</tr>
<tr>
<td>Pseudo-klasa</td>
<td>E:root</td>
<td>Pasuje do korzenia dokumentu. W przypadku HTML, korzeniem jest zawsze element HTML.</td>
</tr>
<tr>
<td>Pseudo-klasa</td>
<td>E:nth-child(n)</td>
<td>Pasuje do dowolnego elementu E, który jest n-tym dzieckiem swojego rodzica.</td>
</tr>
<tr>
<td>Pseudo-klasa</td>
<td>E:nth-last-child(n)</td>
<td>Pasuje do dowolnego elementu E, który jest n-tym dzieckiem swojego rodzica, licząc od ostatniego dziecka.</td>
</tr>
<tr>
<td>Pseudo-klasa</td>
<td>E:nth-of-type(n)</td>
<td>Pasuje do dowolnego elementu E, który jest n-tym rodzeństwem swojego typu.</td>
</tr>
<tr>
<td>Pseudo-klasa</td>
<td>E:nth-last-of-type(n)</td>
<td>Pasuje do dowolnego elementu E, który jest n-tym rodzeństwem swojego typu, licząc od ostatniego rodzeństwa.</td>
</tr>
<tr>
<td>Pseudo-klasa</td>
<td>E:last-child</td>
<td>Pasuje do dowolnego elementu E, który jest ostatnim dzieckiem swojego rodzica.</td>
</tr>
<tr>
<td>Pseudo-klasa</td>
<td>E:first-of-type</td>
<td>Pasuje do dowolnego elementu E, który pierwszym rodzeństwem swojego typu.</td>
</tr>
<tr>
<td>Pseudo-klasa</td>
<td>E:last-of-type</td>
<td>Pasuje do dowolnego elementu E, który ostatnim rodzeństwem swojego typu.</td>
</tr>
<tr>
<td>Pseudo-klasa</td>
<td>E:only-child</td>
<td>Pasuje do dowolnego elementu E, który jest jedynym dzieckiem swojego rodzica.</td>
</tr>
<tr>
<td>Pseudo-klasa</td>
<td>E:only-of-type</td>
<td>Pasuje do dowolnego elementu E, który jest jedynym rodzeństwem swojego typu.</td>
</tr>
<tr>
<td>Pseudo-klasa</td>
<td>E:empty</td>
<td>Pasuje do dowolnego elementu E, który nie ma dzieci, w tym także węzłów tekstu.</td>
</tr>
<tr>
<td>Pseudo-klasa</td>
<td>E:target</td>
<td>Pasuje do elementu E, który jest celem danego adresu URL.</td>
</tr>
<tr>
<td>Pseudo-klasa</td>
<td>E:enabled</td>
<td>Pasuje do dowolnego elementu E interfejsu użytkownika (kontrola formularza), który jest dostępny.</td>
</tr>
<tr>
<td>Pseudo-klasa</td>
<td>E:disabled</td>
<td>Pasuje do dowolnego elementu E interfejsu użytkownika (kontrola formularza), który jest niedostępny.</td>
</tr>
<tr>
<td>Pseudo-klasa</td>
<td>E:checked</td>
<td>Pasuje do dowolnego elementu E interfejsu użytkownika (kontrola formularza), który jest zaznaczony.</td>
</tr>
<tr>
<td>Pseudo-klasa</td>
<td>E::selection</td>
<td>Pasuje do dowolnego elementu E interfejsu użytkownika (kontrola formularza), który jest wybrany lub wyróżniony przez użytkownika.</td>
</tr>
<tr>
<td>Pseudo-klasa</td>
<td>E:not(s)</td>
<td>Pasuje do dowolnego elementu E, który nie pasuje do selektora prostego s.</td>
</tr>
<tr>
<td>Ogólne rodzeństwo</td>
<td>E ~ F</td>
<td>Pasuje do dowolnego elementu F, który jest poprzedzony elementem E.</td>
</tr>
</tbody>
</table>
<p>Nie martw się, jeśli coś nie jest do końca jasne. Każdy selektor zostanie w artykule dokładnie omówiony, również z przykładami użycia.</p>
<h3>Selektory dopasowania ciągu znaków</h3>
<p>Grupa ta jest nowa, a selektory w niej zawarte pozwalają programistom znaleźć elementy na podstawie części wartości atrybutu.</p>
<p>Przyjmijmy, że mamy dokument HTML o następującej strukturze:</p>
<pre><code>&lt;div id="nav-primary"&gt;&lt;/div&gt;
&lt;div id="content-primary"&gt;&lt;/div&gt;
&lt;div id="content-secondary"&gt;&lt;/div&gt;
&lt;div id="tertiary-content"&gt;&lt;/div&gt;
&lt;div id="nav-secondary"&gt;&lt;/div&gt;</code></pre>
<p>Poprzez użycie selektorów dopasowania możesz odnieść się do strukturalnych części dokumentu.</p>
<p>Następująca reguła ustawia kolor tła dla wszystkich elementów <code>div</code>, których <code>id</code> rozpoczyna się od &#8220;nav&#8221;:</p>
<pre><code>div[id^="nav"] { background:#ff0; }</code></pre>
<p>W tym wypadku selektor będzie pasował do <code>div#nav-primary</code> i <code>div#nav-secondary</code>.</p>
<p>Aby znaleźć elementy <code>div</code>, których <code>id</code> kończy się ciągiem &#8220;primary&#8221;, możesz użyć następującej reguły:</p>
<pre><code>div[id$="primary"] { background:#ff0; }</code></pre>
<p>Tym razem selektor będzie pasował do <code>div#nav-primary</code> i <code>div#content-primary</code>.</p>
<p>Następujące reguły stosują się do wszystkich elementów <code>div</code>, których <code>id</code> zawiera ciąg &#8220;content&#8221;:</p>
<pre><code>div[id*="content"] { background:#ff0; }</code></pre>
<p>Elementy, których dotyczy to reguła to <code>div#content-primary</code>, <code>div#content-secondary</code> i <code>div#tertiary-content</code>.</p>
<p>Selektory dopasowania ciągu znaków są w pełni wspierane przez ostatnie wersje przeglądarek: Mozilla, Firefox, Flock, Camino, Safari, OmniWeb i Opera, więc gdyby pominąć Internet Explorer moglibyśmy już zacząć ich używanie.</p>
<h3>Pseudo-klasa :target</h3>
<p>Adresy URL z względnym odnośnikiem to takie, które zawierają &#8220;#&#8221; i linkują na podstawie nazwy lub identyfikatora elementu w obrębie dokumentu. Stylizacja takiego elementu jest możliwa dzięki pseudo-klasie <code>:target</code>. Jeśli aktualny adres URL nie zawiera fragmentu z identyfikatorem to pseudo-klasa <code>:target</code> nie pasuje do żadnego elementu.</p>
<p>W przypadku wspomnianej wcześniej struktury HTML, następująca zasada tworzy kontur wokół elementu <code>div#content-primary</code> kiedy adres URL będzie zawierał identyfikator:</p>
<pre><code>div#content-primary:target { outline:1px solid #300; }</code></pre>
<p>Przykład takiego URL to <code>http://www.example.com/index.html#content-primary</code>.</p>
<p>Pseudo-klasa <code>:target</code> jest obecnie wspierana przez przeglądarki rodziny Mozilla i Safari.</p>
<h3>Pseudo-klasy interfejsu użytkownika</h3>
<h4>Pseudo-klasa :enabled i :disabled</h4>
<p>Pseudo-klasy<code>:enabled</code> i <code>:disabled</code> pozwalają programistom na określenie wyglądu elementów formularzy, które są dostępne lub niedostępne, pomimo tego, że przeglądarka sama stylizuje kontrolki formularzy. Poniższe reguły zmieniają kolory tła dla pól tekstowych w formularzu w zależności czy są one dostępne czy niedostępne:</p>
<pre><code>input[type="text"]:enabled { background:#ffc; }

input[type="text"]:disabled { background:#ddd; }</code></pre>
<h4>Pseudo-klasa :checked</h4>
<p>Pseudo-klasa <code>:checked</code> pozwala programistom na określenie wyglądu wybranych (aktywnych) kontrolek radio i checkbox w formularzach. Również w tym przypadku przeglądarka umożliwia stylizowanie elementów formularzy. Poniższe reguły CSS tworzą zieloną ramkę wokół wybranych (aktywnych) elementów radio i checkbox:</p>
<pre><code>input:checked { border:1px solid #090; }</code></pre>
<p>Opera oraz przeglądarki z rodziny Mozilla obsługują pseudo-klasy interfejsu użytkownika.</p>
<p>Należy zaznaczyć, że wygląd formularzy w przeglądarkach może się bardzo różnić, a same przeglądarki bardzo restrykcyjnie traktują zmiany kontrolek formularzy przez programistów. Więcej na ten temat możesz dowiedzieć się z artykułu <a href="http://www.456bereastreet.com/archive/200409/styling_form_controls/">Styling form controls</a> i <a href="http://www.456bereastreet.com/archive/200410/styling_even_more_form_controls/">Styling even more form controls</a>.</p>
<h3>Strukturalne pseudo-klasy</h3>
<p>Strukturalne pseudo-klasy pozwalają programistom odwołać się do elementów ze struktury dokumentu, do których dostęp poprzez selektory proste i złożone jest niemożliwy. Strukturalne pseudo-klasy są bardzo potężne, ale niestety nie wszystkie z nich są wspierane przez nowoczesne przeglądarki.</p>
<h4>Pseudo-klasa :root</h4>
<p>Pseudo-klasa <code>:root</code> odnosi się do do elementu korzenia dokumentu. Dla dokumentów HTML takim korzeniem jest zawsze element HTML, w takim razie poniższe reguły są takie same. Nie do końca, ponieważ <code>:root</code> ma większe znaczenie niż <code>html</code>):</p>
<pre><code>:root { background:#ff0; }
html { background:#ff0; }</code></pre>
<p>Pseudo-klasa <code>:root</code> jest aktualnie wspierana przez przeglądarki z rodziny Mozilla i Safari.</p>
<h4>Pseudo-klasa :nth-child()</h4>
<p>Pseudo-klasa <code>:nth-child()</code> odnosi się do elementu, który ma przed sobą określoną liczbę rodzeństwa w drzewie dokumentu. Wartość, która o tym decyduje, znajduje się w nawiasach i może być liczą, słowem kluczowym lub formułą.</p>
<p><strong>Numer</strong> <code>b</code> pasuje do <code>b</code>-tego dziecka. Następująca reguła stosuje się do wszystkich elementów <code>p</code>, które są trzecim dzieckiem swojego rodzica:</p>
<pre><code>p:nth-child(3) { color:#f00; }
</code></pre>
<p><strong>Słowa kluczowe</strong> <code>odd</code> i <code>even</code> można wykorzystać do elementów o indeksach nieparzystych i parzystych. Indeks pierwszego elementu to 1, więc ta reguła będzie pasować do każdego paragrafu, który jest pierwszym, trzecim, piątym i kolejnym dzieckiem swojego rodzica:</p>
<pre><code>p:nth-child(odd) { color:#f00; }</code></pre>
<p>Poniższa reguła pasuje do elementów <code>p</code>, które są drugim, czwartym, szóstym i kolejnym dzieckiem swojego rodzica.:</p>
<pre><code>p:nth-child(even) { color:#f00; }</code></pre>
<p><strong>Formuła</strong> <code>an + b</code> może być użyta do stworzenia bardziej złożonych  wzorów. W przykładowym wzorze, <code>a</code> reprezentuje ilość cykli, <code>n</code> to licznik, startujący od zera, a <code>b</code> przesunięcie wartości. Wszystkie wartości są liczbami całkowitymi. Aby wszystko dokładnie zrozumieć, zapoznaj się z poniższymi przykładami.</p>
<p>Poniższe reguły będą pasować do wszystkich elementów <code>p</code>, których indeks dzieli się przez 3. W pierwszej regule zero można pominąć, tak jak to zrobiliśmy zostało zapisane w drugiej regule:</p>
<pre><code>p:nth-child(3n+0) { color:#f00; }
p:nth-child(3n) { color:#f00; }</code></pre>
<p>Przesunięcie wartości służy do określenia momentu, w którym reguła zaczyna obowiązywać. Jeżeli mamy tabelę z 20 wierszami i chcemy zmienić kolor tła nieparzystych wierszy, ale dopiero od dziesiątego to stosujemy daną regułę:</p>
<pre><code>tr:nth-child(2n+11) { background:#ff0; }</code></pre>
<p>Dopóki <code>n</code> rozpoczyna się od 0, pierwszy element <code>tr</code>, przy którym reguła będzie się stosować to jedenasty element. Następnie będzie trzynasty, piętnasty i tak dalej.</p>
<p>Więcej szczegółów można znaleźć w sekcji <a href="http://www.w3.org/TR/css3-selectors/#nth-child-pseudo">:nth-child() pseudo-class</a> specyfikacji selektorów CSS3.</p>
<p>A jak wygląda wsparcie przeglądarek dla tych bardzo użytecznych selektorów? Z tego co wiem, to żadna z nich nie obsługuje w pełni, tych selektorów. Popraw mnie jeśli się mylę.</p>
<h4>Pseudo-klasa :nth-last-child()</h4>
<p>Pseudo-klasa <code>:nth-last-child()</code> działa tak samo jak pseudo-klasa <code>:nth-child()</code>, z tym wyjątkiem, że odnosi się do inaczej liczonego elementu w strukturze dokumentu. Inaczej mówiąc, rozpoczynamy liczenie od ostatniego dziecka, a nie pierwszego i liczymy wstecz. Poniższa reguła będzie pasowała do  przedostatniego elementu <code>tr</code> tabeli:</p>
<pre><code>tr:nth-last-child(2) { background:#ff0; }</code></pre>
<p>Pseudo-klasa <code>:nth-last-child()</code> nie jest wspierana przez żadną przeglądarkę.</p>
<h4>Pseudo-klasa :nth-of-type()</h4>
<p>Pseudo-klasa <code>:nth-of-type()</code> działa dokładnie jak pseudo-klasa <code>:nth-child()</code>, ale reguły odnoszą się tylko do elementów tego samego typu. Taka reguła pasuje do takich elementów <code>p</code>, które są trzecim elementem <code>p</code> swojego rodzica:</p>
<pre><code>p:nth-of-type(3) { background:#ff0; }</code></pre>
<p>Ten selektor jest użyteczny, kiedy chcemy być pewni, że rzeczywiście odnosimy się do trzeciego elementu <code>p</code>. Na początku można było dojść do wniosku, że odpowiada za to pseudo-klasa <code>nth-child</code>, ale <code>:nth-child(3)</code> obejmuje wszystkie elementy rodzeństwa, więc rezultat będzie inny chyba, że wszystkie elementy <code>p</code> mają jako rodzeństwo tylko i wyłącznie elementy <code>p</code>.</p>
<p>Pseudo-klasa <code>:nth-of-type()</code> nie jest obecnie wspierana przez żadne przeglądarki.</p>
<h4>Pseudo-klasa :nth-last-of-type()</h4>
<p>Pseudo-klasa <code>:nth-last-of-type()</code> dotyczy elementu, który ma określony number spośród rodzeństwa danego typu w strukturze dokumentu. Pseudo-klasa <code>:nth-last-child()</code> rozpoczyna liczenie od końca, a nie od początku oraz liczy elementy wstecz. Następująca reguła pasuje do każdego drugiego od końca rodzeństwa dla <code>p</code>:</p>
<pre><code>p:nth-last-of-type(2) { background:#ff0; }</code></pre>
<p>Pseudo-klasa <code>:nth-last-of-type()</code> nie jest obecnie wspierana przez przeglądarki.</p>
<h4>Pseudo-klasa :last-child</h4>
<p>Pseudo-klasa <code>:last-child</code> odnosi się do elementu. który jest ostatnim dzieckiem swojego rodzica. To dokładnie to samo co <code>:nth-last-child(1)</code>. Reguła ta pasuje do wszystkich elementów <code>p</code>, które są ostatnim dzieckiem elementu swojego rodzica:</p>
<pre><code>p:last-child { background:#ff0; }</code></pre>
<p>Pseudo-klasa <code>:last-child</code> działa w przeglądarkach z rodziny Mozilla. Opera nie wspiera jej wcale, a Safari tylko w częściowy sposób. O dziwo, działa to jak powinno w OmniWeb (wersja 5.1.1), pomimo faktu powiązania z Safari. Może to być spowodowane uwstecznieniem ostatniej wersji Apple WebKit, ponieważ OmniWeb korzysta przeważnie ze starszych wersji WebKit w porównaniu z Safari.</p>
<h4>Pseudo-klasa :first-of-type</h4>
<p>Pseudo-klasa <code>:first-of-type</code> obejmuje element, który jest pierwszym spośród rodzeństwa swojego typu. Działa dokładanie jak <code>:nth-of-type(1)</code>.</p>
<pre><code>p:first-of-type { background:#ff0; }</code></pre>
<p>Pseudo-klasa <code>:first-of-type</code> nie jest obecnie wspierana przez przeglądarki.</p>
<h4>Pseudo-klasa :last-of-type</h4>
<p>Pseudo-klasa <code>:last-of-type</code> obejmuje element, który jest ostatnim spośród rodzeństwa swojego typu. Działa dokładanie jak <code>:nth-last-of-type(1)</code>.</p>
<pre><code>p:last-of-type { background:#ff0; }</code></pre>
<p>Pseudo-klasa <code>:last-of-type</code> nie jest obecnie wspierana przez przeglądarki.</p>
<h4>Pseudo-klasa :only-child</h4>
<p>Pseudo-klasa <code>:only-child</code> odnosi się do elementu, którego rodzic nie ma innych dzieci. To samo <code>:first-child:last-child</code> lub <code>:nth-child(1):nth-last-child(1)</code>, ale z niższym priorytetem.</p>
<pre><code>p:only-child { background:#ff0; }</code></pre>
<p>Pseudo-klasa <code>:only-child</code> działa w przeglądarkach Mozilli. Safari zdaje się interpretować to jako <code>:first-child</code>, czyli powyższa reguła pasuje do wszystkich elementów <code>p</code> w dokumencie, które są pierwszym dzieckiem swojego rodzica.</p>
<h4>Pseudo-klasa :only-of-type</h4>
<p>Pseudo-klasa <code>:only-of-type</code> obejmuje swoim działaniem element, którego rodzic nie ma więcej dzieci danego typu. Działa tak samo, ale z mniejszym priorytetem jak <code>:first-of-type:last-of-type</code> lub <code>:nth-of-type(1):nth-last-of-type(1)</code>.</p>
<pre><code>p:only-of-type { background:#ff0; }
</code></pre>
<p>Pseudo-klasa <code>:only-of-type</code> nie jest aktualnie wspierana przez przeglądarki.</p>
<h4>Pseudo-klasa :empty</h4>
<p>Pseudo-klasa <code>:empty</code> odnosi się do elementu, który nie ma dzieci. Wliczamy do tego, także węzły tekstowe, więc w następującym przypadku, tylko pierwszy element jest pusty:</p>
<p>&lt;p&gt;&lt;/p&gt;<br />
&lt;p&gt;Text&lt;/p&gt;<br />
&lt;p&gt;&lt;em&gt;&lt;/em&gt;&lt;/p&gt;</code></pre>
<p>Następujące reguły CSS będą pasować do pierwszego elementu:</p>
<pre><code>p:empty { background:#ff0; }</code></pre>
<p>Pseudo-klasa <code>:empty</code> jest obecnie wspierana przez przeglądarki z rodziny Mozill. Safari błędnie stosuje te reguły do wszystkich elementów danego typu.</p>
<h3>Pseudo-klasa negacji</h3>
<p>Pseudo-klasa negacji, zapisana jako <code>:not(s)</code>, bierze prosty selektor s jako argument. Swoim zasięgiem obejmuje elementy, które nie są objęte działaniem selektora prostego. Przykładowo, następujące reguły CSS stosują się do wszystkich elementów, które nie są elementem <code>p</code>:</p>
<pre><code>:not(p) { border:1px solid #ccc; }</code></pre>
<p>Pseudo-klasa negacji działa aktualnie w przeglądarkach Mozilli i Safari.</p>
<h3>Pseudo-element ::selection</h3>
<p>Pseudo-element <code>::selection</code> pasuje do części elementu, który jest aktualnie wybrany lub wyróżniony przez użytkownika. Jedyna możliwość użycia tego selektora to zmiana wyglądu wybranego tekstu.</p>
<p>Tylko kilka właściwości CSS można stosować dla pseudo-klasy <code>::selection</code>: <code>color</code>, <code>background</code>, <code>cursor</code>, and <code>outline</code>.</p>
<p>Następująca reguła uczyni zaznaczony tekst czerwonym:</p>
<pre><code>::selection { color:#f00;	}</code></pre>
<p>Pseudo-element <code>::selection</code> działa obecnie tylko w przeglądarkach Safari. Implementacja tego selektora w Safari jest trochę nieprzewidywalna. Mozilla, póki co wspiera własne rozszerzenia <code>::-moz-selection</code>, a prefiks zostanie w przyszłości usunięty.</p>
<h3>Selektor ogólnego rodzeństwa</h3>
<p>Selektor ogólnego rodzeństwa składa się z dwóch selektorów prostych rozdzielonych znakiem &#8220;tyldy&#8221; (~). Pasuje do tych tych elementów drugiego selektora prostego, które są poprzedzone elementem pierwszego selektora. Oba elementy muszą mieć tego samego rodzica, ale drugi element nie musi być bezpośrednio poprzedzony pierwszym elementem. Podana reguła CSS obejmuje elementy <code>ul</code>, które są poprzedzone elementem <code>p</code> i mają tego samego rodzica:</p>
<pre><code>p ~ ul { background:#ff0; }</code></pre>
<p>Opera i przeglądarki rodziny Mozilla obsługują selektor ogólnego rodzeństwa.</p>
<h3>Niezbędne wsparcie po stronie przeglądarek</h3>
<p>Niektóre selektory CSS 3 są lepiej wspierane, a inne gorzej. Niestety, ale kilka najbardziej użytecznych selektorów nie jest wspieranych w ogóle. Wszystko to sprawia, że w obecnym czasie wykorzystanie selektorów przedstawionych w artykule jest trudne. Pozostaje jedynie czekanie na moment pełnego wsparcia selektorów CSS 3 przez przeglądarki, a póki co korzystanie z już obsługiwanych.</p>
<p>Więc, która przeglądarka <em>twoim</em> zdaniem jako pierwsza będzie wspierała większość lub wszystkie selektory CSS 3? Safari, Firefox czy Opera? A może nawet Internet Explorer?</p>
<p class="info">Ten artykuł jest tłumaczeniem oryginalnego tekstu <a href="http://www.456bereastreet.com/archive/200601/css_3_selectors_explained/">CSS 3 selectors explained</a>, którego autorem jest Roger Johansson.</p>
]]></content:encoded>
			<wfw:commentRss>http://adamczuk.net.pl/2009/01/07/selektory-css-3/feed/</wfw:commentRss>
		<slash:comments>7</slash:comments>
		</item>
	</channel>
</rss>

