<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	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/"
	>
<channel>
	<title>Comments on: Пять звёздочек без JavaScript</title>
	<atom:link href="http://blog.sjinks.org.ua/css/173-five-stars-without-javascript/feed/" rel="self" type="application/rss+xml" />
	<link>http://blog.sjinks.org.ua/css/173-five-stars-without-javascript/</link>
	<description>Verba volant, scripta manent</description>
	<pubDate>Sat, 22 Nov 2008 06:37:06 +0000</pubDate>
	<generator>http://wordpress.org/?v=2.7-beta3</generator>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
		<item>
		<title>By: Vladimir</title>
		<link>http://blog.sjinks.org.ua/css/173-five-stars-without-javascript/comment-page-1/#comment-240</link>
		<dc:creator>Vladimir</dc:creator>
		<pubDate>Fri, 30 May 2008 23:31:16 +0000</pubDate>
		<guid isPermaLink="false">http://blog.sjinks.org.ua/?p=173#comment-240</guid>
		<description>&lt;strong&gt;Любителям семантической вёрстки посвящается&#8230;&lt;/strong&gt;

&lt;blockquote cite="http://pepelsbey.net/2008/05/five-stars/#comment-393"&gt;Если говорить о семантике, то, все-таки, необходимо использовать input type="radio"&lt;/blockquote&gt;

Отмечу сразу: я против :-)

Во-первых, из-за того, что элементы формы поганить нехорошо (с точки зрения usability). То есть если пользователь привык, что радиокнопка выглядит именно так, то именно так она и должна выглядеть. Да и более того, браузеры не дают слишком уж извращать внешний вид элементов формы. То есть, если мы хотим нарисовать background поверх радиокнопки, то нам либо придется прятать радиокнопку (потому что она будет нарисована &lt;em&gt;поверх&lt;/em&gt; фона, либо прятать ее под какой-нибудь элемент).

Во-вторых, из-за того, что появится много лишнего JavaScript: нам по сути нужно будет обработать три ситуации:
&lt;ol&gt;
    &lt;li&gt;Загрузка изображений отключена: мы не должны менять внешний вид формы (из-за usability): изображений нет, а превращать элементы в progress bar в данном случае будет отвратительным решением;&lt;/li&gt;
    &lt;li&gt;JavaScript отключен: в этом случае пользователь должен видеть кнопку "Проголосовать"&lt;/li&gt;
    &lt;li&gt;Изображения и JavaScript отключены: самый крайний, но вероятный случай. На мой взгляд, мы в этом случае не должны вообще пытаться изменить стили формы: если картинки отключены, то пользователь увидит не пойми что :-)&lt;/li&gt;
&lt;/ol&gt;

Ладно, теперь от слов переходим к делу.

Разметка:
&lt;pre lang="html"&gt;
    &lt;form id="vote" action="?" method="get"&gt;
        &lt;label class="ten" for="r10"&gt;&lt;input type="radio" name="rate" value="10" id="r10"/&gt;5.0&lt;/label&gt;
        &lt;label class="nine" for="r9"&gt;&lt;input type="radio" name="rate" value="9" id="r9"/&gt;4.5&lt;/label&gt;
        &lt;label class="eight" for="r8"&gt;&lt;input type="radio" name="rate" value="8" id="r8"/&gt;4.0&lt;/label&gt;
        &lt;label class="seven" for="r7"&gt;&lt;input type="radio" name="rate" value="7" id="r7"/&gt;3.5&lt;/label&gt;
        &lt;label class="six" for="r6"&gt;&lt;input type="radio" name="rate" value="6" id="r6"/&gt;3.0&lt;/label&gt;
        &lt;label class="five" for="r5"&gt;&lt;input type="radio" name="rate" value="5" id="r5"/&gt;2.5&lt;/label&gt;
        &lt;label class="four" for="r4"&gt;&lt;input type="radio" name="rate" value="4" id="r4"/&gt;2.0&lt;/label&gt;
        &lt;label class="three rated" for="r3"&gt;&lt;input type="radio" name="rate" value="3" id="r3" checked="checked"/&gt;1.5&lt;/label&gt;
        &lt;label class="two" for="r2"&gt;&lt;input type="radio" name="rate" value="2" id="r2"/&gt;1.0&lt;/label&gt;
        &lt;label class="one" for="r1"&gt;&lt;input type="radio" name="rate" value="1" id="r1"/&gt;0.5&lt;/label&gt;
        &lt;input type="submit" value="Vote"/&gt;
    &lt;/form&gt;
&lt;/pre&gt;

Стили (примечание: если требуется поддержка IE6, используйте &lt;a href="http://www.xs4all.nl/~peterned/csshover.html" rel="nofollow"&gt;whatever:hover&lt;/a&gt;):
&lt;pre lang="css"&gt;
.vote, .vote label.rated {
    background: url(stars.gif) no-repeat 0 0;
}

html&gt;body .vote label:hover, html&gt;body .vote:hover label:hover {
    background: url(stars.gif) no-repeat 0 0;
}

* html body .vote label:hover { /* For IE6 w/whatever:hover */
    background: url(stars.gif) no-repeat 0 0 !important;
}

.vote {
    background-position: 0 -14px;
    position: relative;
}

.vote:hover label.rated {
    background: none !important; /* !important is for IE6 w/whatever:hover */
}

.vote label {
    height: 14px;
    position: absolute;
    text-indent: -1000px;
    z-index: 2;
    overflow: hidden;
}

.vote, .vote label {
    left: 0;
    top: 0;
    margin: 0;
    padding: 0;
}

.vote label.one   { width: 7px;  }
.vote label.two   { width: 16px; }
.vote label.three { width: 23px; }
.vote label.four  { width: 32px; }
.vote label.five  { width: 39px; }
.vote label.six   { width: 48px; }
.vote label.seven { width: 55px; }
.vote label.eight { width: 64px; }
.vote label.nine  { width: 71px; }
.vote label.ten   { width: 80px; }

.vote input {
    visibility: hidden;
}

.vote label input {
    visibility: visible;
    width: 0;
}
&lt;/pre&gt;

И, наконец, JavaScript (я использую Prototype; кому что ближе):
&lt;pre lang="javascript"&gt;
var img = new Image();
img.onload = function()
{
    $('vote').addClassName('vote').select('input[type="radio"]').invoke('observe', 'click', function(e) { e.element().form.submit(); } );
}

img.src = 'stars.gif';
&lt;/pre&gt;

&lt;a href="http://static2.sjinks.org.ua:8080/test/stars/stars2.html" rel="nofollow"&gt;Результат&lt;/a&gt;.

&lt;del datetime="2008-05-31T22:44:45+00:00"&gt;&lt;strong&gt;Внимание:&lt;/strong&gt; я не тестировал пример во всех браузерах, поэтому кросс-браузерность гарантировать не могу.&lt;/del&gt;

&lt;ins datetime="2008-05-31T22:44:45+00:00"&gt;Проверено в IE6/7, FF, Opera, Konqueror.&lt;/ins&gt;

&lt;ins datetime="2008-05-31T22:44:45+00:00"&gt;
&lt;strong&gt;Замечания:&lt;/strong&gt;
&lt;ol&gt;
	&lt;li&gt;Для того, чтобы код работал в &lt;abbr title="Internet Explorer 6"&gt;IE6&lt;/abbr&gt;, метки (&lt;code&gt;label&lt;/code&gt;) должны иметь атрибут &lt;code&gt;for&lt;/code&gt;, связывающий их с соответствующей радиокнопкой.&lt;/li&gt;
	&lt;li&gt;Опять же, из-за IE6 радиокнопки &lt;strong&gt;не должны&lt;/strong&gt; иметь &lt;code&gt;visibility: hidden&lt;/code&gt; или &lt;code&gt;display: none&lt;/code&gt;. Их нужно либо сдвинуть за &lt;code&gt;label&lt;/code&gt;, либо, как в примере, поставить нулевую ширину. Если скрывать &lt;code&gt;label&lt;/code&gt;, то обработчик должен вешаться не на &lt;code&gt;input[type="checkbox"]&lt;/code&gt;, а на &lt;code&gt;label&lt;/code&gt;, и код в этом случае немного усложнится.&lt;/li&gt;
	&lt;li&gt;При медленном соединении/компьютере возможны гонки между whatever:hover и &lt;code&gt;img.onload()&lt;/code&gt;. Для правильной работы &lt;code&gt;img.onload()&lt;/code&gt; должен сработать первым.&lt;/li&gt;
&lt;/ol&gt;
&lt;/ins&gt;</description>
		<content:encoded><![CDATA[<p><strong>Любителям семантической вёрстки посвящается&hellip;</strong></p>
<blockquote cite="http://pepelsbey.net/2008/05/five-stars/#comment-393"><p>Если говорить о семантике, то, все-таки, необходимо использовать input type=&#8221;radio&#8221;</p></blockquote>
<p>Отмечу сразу: я против <img src='http://blog.sjinks.org.ua/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' /> </p>
<p>Во-первых, из-за того, что элементы формы поганить нехорошо (с точки зрения usability). То есть если пользователь привык, что радиокнопка выглядит именно так, то именно так она и должна выглядеть. Да и более того, браузеры не дают слишком уж извращать внешний вид элементов формы. То есть, если мы хотим нарисовать background поверх радиокнопки, то нам либо придется прятать радиокнопку (потому что она будет нарисована <em>поверх</em> фона, либо прятать ее под какой-нибудь элемент).</p>
<p>Во-вторых, из-за того, что появится много лишнего JavaScript: нам по сути нужно будет обработать три ситуации:</p>
<ol>
<li>Загрузка изображений отключена: мы не должны менять внешний вид формы (из-за usability): изображений нет, а превращать элементы в progress bar в данном случае будет отвратительным решением;</li>
<li>JavaScript отключен: в этом случае пользователь должен видеть кнопку &#8220;Проголосовать&#8221;</li>
<li>Изображения и JavaScript отключены: самый крайний, но вероятный случай. На мой взгляд, мы в этом случае не должны вообще пытаться изменить стили формы: если картинки отключены, то пользователь увидит не пойми что <img src='http://blog.sjinks.org.ua/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' /> </li>
</ol>
<p>Ладно, теперь от слов переходим к делу.</p>
<p>Разметка:</p>
          
<div class="codebox">
    <div class="the_code" style="" id="p1731">
        <div class="code html" id="p173code1">
&nbsp; &nbsp; <span class="sc3">&lt;<span class="kw2">form</span> <span class="kw3">id</span><span class="sy0">=</span><span class="st0">&quot;vote&quot;</span> <span class="kw3">action</span><span class="sy0">=</span><span class="st0">&quot;?&quot;</span> <span class="kw3">method</span><span class="sy0">=</span><span class="st0">&quot;get&quot;</span>&gt;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="sc3">&lt;<span class="kw2">label</span> <span class="kw3">class</span><span class="sy0">=</span><span class="st0">&quot;ten&quot;</span> <span class="kw3">for</span><span class="sy0">=</span><span class="st0">&quot;r10&quot;</span>&gt;&lt;<span class="kw2">input</span> <span class="kw3">type</span><span class="sy0">=</span><span class="st0">&quot;radio&quot;</span> <span class="kw3">name</span><span class="sy0">=</span><span class="st0">&quot;rate&quot;</span> <span class="kw3">value</span><span class="sy0">=</span><span class="st0">&quot;10&quot;</span> <span class="kw3">id</span><span class="sy0">=</span><span class="st0">&quot;r10&quot;</span><span class="sy0">/</span>&gt;</span>5.0<span class="sc3">&lt;<span class="sy0">/</span><span class="kw2">label</span>&gt;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="sc3">&lt;<span class="kw2">label</span> <span class="kw3">class</span><span class="sy0">=</span><span class="st0">&quot;nine&quot;</span> <span class="kw3">for</span><span class="sy0">=</span><span class="st0">&quot;r9&quot;</span>&gt;&lt;<span class="kw2">input</span> <span class="kw3">type</span><span class="sy0">=</span><span class="st0">&quot;radio&quot;</span> <span class="kw3">name</span><span class="sy0">=</span><span class="st0">&quot;rate&quot;</span> <span class="kw3">value</span><span class="sy0">=</span><span class="st0">&quot;9&quot;</span> <span class="kw3">id</span><span class="sy0">=</span><span class="st0">&quot;r9&quot;</span><span class="sy0">/</span>&gt;</span>4.5<span class="sc3">&lt;<span class="sy0">/</span><span class="kw2">label</span>&gt;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="sc3">&lt;<span class="kw2">label</span> <span class="kw3">class</span><span class="sy0">=</span><span class="st0">&quot;eight&quot;</span> <span class="kw3">for</span><span class="sy0">=</span><span class="st0">&quot;r8&quot;</span>&gt;&lt;<span class="kw2">input</span> <span class="kw3">type</span><span class="sy0">=</span><span class="st0">&quot;radio&quot;</span> <span class="kw3">name</span><span class="sy0">=</span><span class="st0">&quot;rate&quot;</span> <span class="kw3">value</span><span class="sy0">=</span><span class="st0">&quot;8&quot;</span> <span class="kw3">id</span><span class="sy0">=</span><span class="st0">&quot;r8&quot;</span><span class="sy0">/</span>&gt;</span>4.0<span class="sc3">&lt;<span class="sy0">/</span><span class="kw2">label</span>&gt;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="sc3">&lt;<span class="kw2">label</span> <span class="kw3">class</span><span class="sy0">=</span><span class="st0">&quot;seven&quot;</span> <span class="kw3">for</span><span class="sy0">=</span><span class="st0">&quot;r7&quot;</span>&gt;&lt;<span class="kw2">input</span> <span class="kw3">type</span><span class="sy0">=</span><span class="st0">&quot;radio&quot;</span> <span class="kw3">name</span><span class="sy0">=</span><span class="st0">&quot;rate&quot;</span> <span class="kw3">value</span><span class="sy0">=</span><span class="st0">&quot;7&quot;</span> <span class="kw3">id</span><span class="sy0">=</span><span class="st0">&quot;r7&quot;</span><span class="sy0">/</span>&gt;</span>3.5<span class="sc3">&lt;<span class="sy0">/</span><span class="kw2">label</span>&gt;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="sc3">&lt;<span class="kw2">label</span> <span class="kw3">class</span><span class="sy0">=</span><span class="st0">&quot;six&quot;</span> <span class="kw3">for</span><span class="sy0">=</span><span class="st0">&quot;r6&quot;</span>&gt;&lt;<span class="kw2">input</span> <span class="kw3">type</span><span class="sy0">=</span><span class="st0">&quot;radio&quot;</span> <span class="kw3">name</span><span class="sy0">=</span><span class="st0">&quot;rate&quot;</span> <span class="kw3">value</span><span class="sy0">=</span><span class="st0">&quot;6&quot;</span> <span class="kw3">id</span><span class="sy0">=</span><span class="st0">&quot;r6&quot;</span><span class="sy0">/</span>&gt;</span>3.0<span class="sc3">&lt;<span class="sy0">/</span><span class="kw2">label</span>&gt;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="sc3">&lt;<span class="kw2">label</span> <span class="kw3">class</span><span class="sy0">=</span><span class="st0">&quot;five&quot;</span> <span class="kw3">for</span><span class="sy0">=</span><span class="st0">&quot;r5&quot;</span>&gt;&lt;<span class="kw2">input</span> <span class="kw3">type</span><span class="sy0">=</span><span class="st0">&quot;radio&quot;</span> <span class="kw3">name</span><span class="sy0">=</span><span class="st0">&quot;rate&quot;</span> <span class="kw3">value</span><span class="sy0">=</span><span class="st0">&quot;5&quot;</span> <span class="kw3">id</span><span class="sy0">=</span><span class="st0">&quot;r5&quot;</span><span class="sy0">/</span>&gt;</span>2.5<span class="sc3">&lt;<span class="sy0">/</span><span class="kw2">label</span>&gt;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="sc3">&lt;<span class="kw2">label</span> <span class="kw3">class</span><span class="sy0">=</span><span class="st0">&quot;four&quot;</span> <span class="kw3">for</span><span class="sy0">=</span><span class="st0">&quot;r4&quot;</span>&gt;&lt;<span class="kw2">input</span> <span class="kw3">type</span><span class="sy0">=</span><span class="st0">&quot;radio&quot;</span> <span class="kw3">name</span><span class="sy0">=</span><span class="st0">&quot;rate&quot;</span> <span class="kw3">value</span><span class="sy0">=</span><span class="st0">&quot;4&quot;</span> <span class="kw3">id</span><span class="sy0">=</span><span class="st0">&quot;r4&quot;</span><span class="sy0">/</span>&gt;</span>2.0<span class="sc3">&lt;<span class="sy0">/</span><span class="kw2">label</span>&gt;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="sc3">&lt;<span class="kw2">label</span> <span class="kw3">class</span><span class="sy0">=</span><span class="st0">&quot;three rated&quot;</span> <span class="kw3">for</span><span class="sy0">=</span><span class="st0">&quot;r3&quot;</span>&gt;&lt;<span class="kw2">input</span> <span class="kw3">type</span><span class="sy0">=</span><span class="st0">&quot;radio&quot;</span> <span class="kw3">name</span><span class="sy0">=</span><span class="st0">&quot;rate&quot;</span> <span class="kw3">value</span><span class="sy0">=</span><span class="st0">&quot;3&quot;</span> <span class="kw3">id</span><span class="sy0">=</span><span class="st0">&quot;r3&quot;</span> <span class="kw3">checked</span><span class="sy0">=</span><span class="st0">&quot;checked&quot;</span><span class="sy0">/</span>&gt;</span>1.5<span class="sc3">&lt;<span class="sy0">/</span><span class="kw2">label</span>&gt;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="sc3">&lt;<span class="kw2">label</span> <span class="kw3">class</span><span class="sy0">=</span><span class="st0">&quot;two&quot;</span> <span class="kw3">for</span><span class="sy0">=</span><span class="st0">&quot;r2&quot;</span>&gt;&lt;<span class="kw2">input</span> <span class="kw3">type</span><span class="sy0">=</span><span class="st0">&quot;radio&quot;</span> <span class="kw3">name</span><span class="sy0">=</span><span class="st0">&quot;rate&quot;</span> <span class="kw3">value</span><span class="sy0">=</span><span class="st0">&quot;2&quot;</span> <span class="kw3">id</span><span class="sy0">=</span><span class="st0">&quot;r2&quot;</span><span class="sy0">/</span>&gt;</span>1.0<span class="sc3">&lt;<span class="sy0">/</span><span class="kw2">label</span>&gt;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="sc3">&lt;<span class="kw2">label</span> <span class="kw3">class</span><span class="sy0">=</span><span class="st0">&quot;one&quot;</span> <span class="kw3">for</span><span class="sy0">=</span><span class="st0">&quot;r1&quot;</span>&gt;&lt;<span class="kw2">input</span> <span class="kw3">type</span><span class="sy0">=</span><span class="st0">&quot;radio&quot;</span> <span class="kw3">name</span><span class="sy0">=</span><span class="st0">&quot;rate&quot;</span> <span class="kw3">value</span><span class="sy0">=</span><span class="st0">&quot;1&quot;</span> <span class="kw3">id</span><span class="sy0">=</span><span class="st0">&quot;r1&quot;</span><span class="sy0">/</span>&gt;</span>0.5<span class="sc3">&lt;<span class="sy0">/</span><span class="kw2">label</span>&gt;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="sc3">&lt;<span class="kw2">input</span> <span class="kw3">type</span><span class="sy0">=</span><span class="st0">&quot;submit&quot;</span> <span class="kw3">value</span><span class="sy0">=</span><span class="st0">&quot;Vote&quot;</span><span class="sy0">/</span>&gt;</span><br />
&nbsp; &nbsp; <span class="sc3">&lt;<span class="sy0">/</span><span class="kw2">form</span>&gt;</span>
        </div>
    </div>
</div>

<p>Стили (примечание: если требуется поддержка IE6, используйте <a href="http://www.xs4all.nl/~peterned/csshover.html" rel="nofollow">whatever:hover</a>):</p>
          
<div class="codebox">
    <div class="the_code" style="" id="p1732">
        <div class="code css" id="p173code2">
<span class="re1">.vote</span><span class="sy0">,</span> <span class="re1">.vote</span> label<span class="re1">.rated</span> <span class="br0">&#123;</span><br />
&nbsp; &nbsp; <span class="kw1">background</span><span class="sy0">:</span> <span class="kw2">url</span><span class="br0">&#40;</span><span class="co2">stars.gif</span><span class="br0">&#41;</span> <span class="kw2">no-repeat</span> 0 0;<br />
<span class="br0">&#125;</span><br />
<br />
html<span class="sy0">&gt;</span>body <span class="re1">.vote</span> label<span class="re2">:hover</span><span class="sy0">,</span> html<span class="sy0">&gt;</span>body <span class="re1">.vote</span><span class="re2">:hover </span>label<span class="re2">:hover </span><span class="br0">&#123;</span><br />
&nbsp; &nbsp; <span class="kw1">background</span><span class="sy0">:</span> <span class="kw2">url</span><span class="br0">&#40;</span><span class="co2">stars.gif</span><span class="br0">&#41;</span> <span class="kw2">no-repeat</span> 0 0;<br />
<span class="br0">&#125;</span><br />
<br />
<span class="sy0">*</span> html body <span class="re1">.vote</span> label<span class="re2">:hover </span><span class="br0">&#123;</span> <span class="coMULTI">/* For IE6 w/whatever:hover */</span><br />
&nbsp; &nbsp; <span class="kw1">background</span><span class="sy0">:</span> <span class="kw2">url</span><span class="br0">&#40;</span><span class="co2">stars.gif</span><span class="br0">&#41;</span> <span class="kw2">no-repeat</span> 0 0 !important;<br />
<span class="br0">&#125;</span><br />
<br />
<span class="re1">.vote</span> <span class="br0">&#123;</span><br />
&nbsp; &nbsp; <span class="kw1">background-position</span><span class="sy0">:</span> 0 <span class="re3">-14px</span>;<br />
&nbsp; &nbsp; <span class="kw1">position</span><span class="sy0">:</span> <span class="kw2">relative</span>;<br />
<span class="br0">&#125;</span><br />
<br />
<span class="re1">.vote</span><span class="re2">:hover </span>label<span class="re1">.rated</span> <span class="br0">&#123;</span><br />
&nbsp; &nbsp; <span class="kw1">background</span><span class="sy0">:</span> <span class="kw2">none</span> !important; <span class="coMULTI">/* !important is for IE6 w/whatever:hover */</span><br />
<span class="br0">&#125;</span><br />
<br />
<span class="re1">.vote</span> label <span class="br0">&#123;</span><br />
&nbsp; &nbsp; <span class="kw1">height</span><span class="sy0">:</span> <span class="re3">14px</span>;<br />
&nbsp; &nbsp; <span class="kw1">position</span><span class="sy0">:</span> <span class="kw2">absolute</span>;<br />
&nbsp; &nbsp; <span class="kw1">text-indent</span><span class="sy0">:</span> <span class="re3">-1000px</span>;<br />
&nbsp; &nbsp; <span class="kw1">z-index</span><span class="sy0">:</span> <span class="nu0">2</span>;<br />
&nbsp; &nbsp; <span class="kw1">overflow</span><span class="sy0">:</span> <span class="kw2">hidden</span>;<br />
<span class="br0">&#125;</span><br />
<br />
<span class="re1">.vote</span><span class="sy0">,</span> <span class="re1">.vote</span> label <span class="br0">&#123;</span><br />
&nbsp; &nbsp; <span class="kw1">left</span><span class="sy0">:</span> 0;<br />
&nbsp; &nbsp; <span class="kw1">top</span><span class="sy0">:</span> 0;<br />
&nbsp; &nbsp; <span class="kw1">margin</span><span class="sy0">:</span> 0;<br />
&nbsp; &nbsp; <span class="kw1">padding</span><span class="sy0">:</span> 0;<br />
<span class="br0">&#125;</span><br />
<br />
<span class="re1">.vote</span> label<span class="re1">.one</span> &nbsp; <span class="br0">&#123;</span> <span class="kw1">width</span><span class="sy0">:</span> <span class="re3">7px</span>; &nbsp;<span class="br0">&#125;</span><br />
<span class="re1">.vote</span> label<span class="re1">.two</span> &nbsp; <span class="br0">&#123;</span> <span class="kw1">width</span><span class="sy0">:</span> <span class="re3">16px</span>; <span class="br0">&#125;</span><br />
<span class="re1">.vote</span> label<span class="re1">.three</span> <span class="br0">&#123;</span> <span class="kw1">width</span><span class="sy0">:</span> <span class="re3">23px</span>; <span class="br0">&#125;</span><br />
<span class="re1">.vote</span> label<span class="re1">.four</span> &nbsp;<span class="br0">&#123;</span> <span class="kw1">width</span><span class="sy0">:</span> <span class="re3">32px</span>; <span class="br0">&#125;</span><br />
<span class="re1">.vote</span> label<span class="re1">.five</span> &nbsp;<span class="br0">&#123;</span> <span class="kw1">width</span><span class="sy0">:</span> <span class="re3">39px</span>; <span class="br0">&#125;</span><br />
<span class="re1">.vote</span> label<span class="re1">.six</span> &nbsp; <span class="br0">&#123;</span> <span class="kw1">width</span><span class="sy0">:</span> <span class="re3">48px</span>; <span class="br0">&#125;</span><br />
<span class="re1">.vote</span> label<span class="re1">.seven</span> <span class="br0">&#123;</span> <span class="kw1">width</span><span class="sy0">:</span> <span class="re3">55px</span>; <span class="br0">&#125;</span><br />
<span class="re1">.vote</span> label<span class="re1">.eight</span> <span class="br0">&#123;</span> <span class="kw1">width</span><span class="sy0">:</span> <span class="re3">64px</span>; <span class="br0">&#125;</span><br />
<span class="re1">.vote</span> label<span class="re1">.nine</span> &nbsp;<span class="br0">&#123;</span> <span class="kw1">width</span><span class="sy0">:</span> <span class="re3">71px</span>; <span class="br0">&#125;</span><br />
<span class="re1">.vote</span> label<span class="re1">.ten</span> &nbsp; <span class="br0">&#123;</span> <span class="kw1">width</span><span class="sy0">:</span> <span class="re3">80px</span>; <span class="br0">&#125;</span><br />
<br />
<span class="re1">.vote</span> input <span class="br0">&#123;</span><br />
&nbsp; &nbsp; <span class="kw1">visibility</span><span class="sy0">:</span> <span class="kw2">hidden</span>;<br />
<span class="br0">&#125;</span><br />
<br />
<span class="re1">.vote</span> label input <span class="br0">&#123;</span><br />
&nbsp; &nbsp; <span class="kw1">visibility</span><span class="sy0">:</span> <span class="kw2">visible</span>;<br />
&nbsp; &nbsp; <span class="kw1">width</span><span class="sy0">:</span> 0;<br />
<span class="br0">&#125;</span>
        </div>
    </div>
</div>

<p>И, наконец, JavaScript (я использую Prototype; кому что ближе):</p>
          
<div class="codebox">
    <div class="the_code" style="" id="p1733">
        <div class="code javascript" id="p173code3">
<span class="kw2">var</span> img <span class="sy0">=</span> <span class="kw2">new</span> Image<span class="br0">&#40;</span><span class="br0">&#41;</span>;<br />
img.<span class="kw3">onload</span> <span class="sy0">=</span> <span class="kw2">function</span><span class="br0">&#40;</span><span class="br0">&#41;</span><br />
<span class="br0">&#123;</span><br />
&nbsp; &nbsp; $<span class="br0">&#40;</span><span class="st0">'vote'</span><span class="br0">&#41;</span>.<span class="me1">addClassName</span><span class="br0">&#40;</span><span class="st0">'vote'</span><span class="br0">&#41;</span>.<span class="me1">select</span><span class="br0">&#40;</span><span class="st0">'input[type=&quot;radio&quot;]'</span><span class="br0">&#41;</span>.<span class="me1">invoke</span><span class="br0">&#40;</span><span class="st0">'observe'</span><span class="sy0">,</span> <span class="st0">'click'</span><span class="sy0">,</span> <span class="kw2">function</span><span class="br0">&#40;</span>e<span class="br0">&#41;</span> <span class="br0">&#123;</span> e.<span class="me1">element</span><span class="br0">&#40;</span><span class="br0">&#41;</span>.<span class="me1">form</span>.<span class="me1">submit</span><span class="br0">&#40;</span><span class="br0">&#41;</span>; <span class="br0">&#125;</span> <span class="br0">&#41;</span>;<br />
<span class="br0">&#125;</span><br />
<br />
img.<span class="me1">src</span> <span class="sy0">=</span> <span class="st0">'stars.gif'</span>;
        </div>
    </div>
</div>

<p><a href="http://static2.sjinks.org.ua:8080/test/stars/stars2.html" rel="nofollow">Результат</a>.</p>
<p><del datetime="2008-05-31T22:44:45+00:00"><strong>Внимание:</strong> я не тестировал пример во всех браузерах, поэтому кросс-браузерность гарантировать не могу.</del></p>
<p><ins datetime="2008-05-31T22:44:45+00:00">Проверено в IE6/7, FF, Opera, Konqueror.</ins></p>
<p><ins datetime="2008-05-31T22:44:45+00:00"><br />
<strong>Замечания:</strong></ins></p>
<ol>
<li>Для того, чтобы код работал в <abbr title="Internet Explorer 6">IE6</abbr>, метки (<code>label</code>) должны иметь атрибут <code>for</code>, связывающий их с соответствующей радиокнопкой.</li>
<li>Опять же, из-за IE6 радиокнопки <strong>не должны</strong> иметь <code>visibility: hidden</code> или <code>display: none</code>. Их нужно либо сдвинуть за <code>label</code>, либо, как в примере, поставить нулевую ширину. Если скрывать <code>label</code>, то обработчик должен вешаться не на <code>input[type="checkbox"]</code>, а на <code>label</code>, и код в этом случае немного усложнится.</li>
<li>При медленном соединении/компьютере возможны гонки между whatever:hover и <code>img.onload()</code>. Для правильной работы <code>img.onload()</code> должен сработать первым.</li>
</ol>
]]></content:encoded>
	</item>
</channel>
</rss>
