Đây là một giải pháp cho bạn, chỉ sử dụng một hình ảnh rất nhỏ và đơn giản và một phần tử span được tạo tự động:
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;
}
Hình ảnh
(nguồn: ulmanen.fi )
Lưu ý: làm KHÔNG Hotlink đến hình ảnh trên! Sao chép tệp vào máy chủ của riêng bạn và sử dụng nó từ đó.
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);
});
}
Nếu bạn muốn giới hạn các dấu sao ở kích thước chỉ một nửa hoặc một phần tư sao, hãy thêm một trong các hàng sau trước var size
hàng:
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>
Sử dụng
$(function() {
$('span.stars').stars();
});
Đầu ra
(nguồn: ulmanen.fi )
Bản giới thiệu
http://www.ulmanen.fi/stuff/stars.php
Điều này có thể sẽ phù hợp với nhu cầu của bạn. Với phương pháp này, bạn không phải tính toán bất kỳ phần tư ba phần tư hoặc chiều rộng sao nào, chỉ cần đặt nó là float và nó sẽ cung cấp cho bạn số sao của bạn.
Một lời giải thích nhỏ về cách các ngôi sao được trình bày theo thứ tự.
Tập lệnh tạo hai phần tử nhịp cấp khối. Cả hai nhịp đều có kích thước 80px * 16px và hình nền là stars.png. Các nhịp được lồng vào nhau, do đó cấu trúc của các nhịp trông như thế này:
<span class="stars">
<span></span>
</span>
Khoảng ngoài nhận được một background-position
trong số 0 -16px
. Điều đó làm cho các ngôi sao màu xám ở khoảng ngoài có thể nhìn thấy được. Vì nhịp ngoài có chiều cao 16px và repeat-x
, nó sẽ chỉ hiển thị 5 ngôi sao màu xám.
Tuổi bên trong, mặt khác có một background-position
số 0 0
mà làm cho chỉ những ngôi sao màu vàng có thể nhìn thấy.
Điều này tất nhiên sẽ hoạt động với hai tệp hình ảnh riêng biệt, star_yellow.png và star_gray.png. Nhưng vì các ngôi sao có chiều cao cố định, chúng ta có thể dễ dàng kết hợp chúng thành một hình ảnh. Điều này sử dụng kỹ thuật sprite CSS .
Bây giờ, khi các nhịp được lồng vào nhau, chúng sẽ tự động được xếp chồng lên nhau. Trong trường hợp mặc định, khi chiều rộng của cả hai nhịp là 80px, các ngôi sao màu vàng sẽ che khuất hoàn toàn các ngôi sao màu xám.
Nhưng khi ta điều chỉnh độ rộng của nhịp bên trong thì độ rộng của các ngôi sao màu vàng giảm đi, để lộ ra các ngôi sao màu xám.
Về khả năng tiếp cận, sẽ khôn ngoan hơn nếu để số thực bên trong khoảng bên trong và ẩn nó đi text-indent: -9999px
, để những người đã tắt CSS ít nhất sẽ thấy số dấu phẩy động thay vì dấu sao.
Hy vọng rằng điều đó có ý nghĩa.
Cập nhật 2010/10/22
Bây giờ thậm chí còn nhỏ gọn hơn và khó hiểu hơn! Cũng có thể được ép xuống một lớp lót:
$.fn.stars = function() {
return $(this).each(function() {
$(this).html($('<span />').width(Math.max(0, (Math.min(5, parseFloat($(this).html())))) * 16));
});
}