İşte size çok küçük ve basit bir görüntü ve otomatik olarak oluşturulmuş bir yayılma öğesi kullanan bir çözüm:
CSS
span.stars, span.stars span {
display: block;
background: url(stars.png) 0 -16px repeat-x;
width: 80px;
height: 16px;
}
span.stars span {
background-position: 0 0;
}
Resim
(kaynak: ulmanen.fi )
Not: do DEĞİL yukarıdaki resimde sıcak bağlantı! Dosyayı kendi sunucunuza kopyalayın ve oradan kullanın.
jQuery
$.fn.stars = function() {
return $(this).each(function() {
// Get the value
var val = parseFloat($(this).html());
// Make sure that the value is in 0 - 5 range, multiply to get width
var size = Math.max(0, (Math.min(5, val))) * 16;
// Create stars holder
var $span = $('<span />').width(size);
// Replace the numerical value with stars
$(this).html($span);
});
}
Yıldızları yalnızca yarım veya çeyrek yıldız boyutlarıyla sınırlamak istiyorsanız, şu satırlardan birini satırın önüne ekleyin var size
:
val = Math.round(val * 4) / 4; /* To round to nearest quarter */
val = Math.round(val * 2) / 2; /* To round to nearest half */
HTML
<span class="stars">4.8618164</span>
<span class="stars">2.6545344</span>
<span class="stars">0.5355</span>
<span class="stars">8</span>
Kullanım
$(function() {
$('span.stars').stars();
});
Çıktı
(kaynak: ulmanen.fi )
Demo
http://www.ulmanen.fi/stuff/stars.php
Bu muhtemelen ihtiyaçlarınızı karşılayacaktır. Bu yöntemle, herhangi bir üç çeyrek veya yıldız genişliğini hesaplamanıza gerek kalmaz, sadece bir şamandıra verin ve size yıldızlarınızı verecektir.
Yıldızların nasıl sunulduğuna dair küçük bir açıklama sırayla olabilir.
Komut dosyası, iki blok düzeyinde yayılma öğesi oluşturur. Her iki aralık da başlangıçta 80px * 16px boyutunda ve bir arka plan görüntüsü stars.png alır. Açıklıklar iç içe geçmiştir, böylece açıklıkların yapısı aşağıdaki gibi görünür:
<span class="stars">
<span></span>
</span>
Dış açıklık bir background-position
/ alır 0 -16px
. Bu, dış açıklıktaki gri yıldızları görünür kılar. Dış açıklığın yüksekliği 16 piksel olduğundan ve repeat-x
yalnızca 5 gri yıldız gösterecektir.
Diğer taraftan, iç açıklık bir yer alır background-position
ve 0 0
burada sadece sarı yıldız görünür hale getirir.
Bu elbette iki ayrı resim dosyasıyla, star_yellow.png ve star_gray.png ile çalışır. Ancak yıldızlar sabit bir yüksekliğe sahip olduğundan, onları kolayca tek bir görüntüde birleştirebiliriz. Bu, CSS sprite tekniğini kullanır .
Şimdi, aralıklar iç içe geçtikçe, otomatik olarak birbirlerinin üzerine yerleştirilirler. Varsayılan durumda, her iki aralığın genişliği 80 piksel olduğunda, sarı yıldızlar gri yıldızları tamamen gizler.
Ancak iç açıklığın genişliğini ayarladığımızda, sarı yıldızların genişliği azalır ve gri yıldızları ortaya çıkarır.
Erişilebilirlik açısından, şamandıra numarasını iç yayılma alanının içinde bırakmak ve bununla gizlemek daha akıllıca olurdu text-indent: -9999px
, böylece CSS kapalı olan insanlar, yıldızlar yerine en azından kayan nokta sayısını görebilirlerdi.
Umarım bu biraz mantıklıydı.
2010/10/22 güncellendi
Şimdi daha da kompakt ve anlaşılması daha zor! Ayrıca tek bir astara kadar sıkıştırılabilir:
$.fn.stars = function() {
return $(this).each(function() {
$(this).html($('<span />').width(Math.max(0, (Math.min(5, parseFloat($(this).html())))) * 16));
});
}