2011-11-14 36 views
9

Tôi đã xem hướng dẫn trực tuyến - http://www.htmldrive.net/items/show/402/CSS-Star-Rating-System - để tạo hệ thống xếp hạng sao CSS.Tích hợp xếp hạng sao CSS vào biểu mẫu HTML

Trên trang họ có mã này:

<ul class="rating"> 
    <li><a href="#" title="1 Star">1</a></li> 
    <li><a href="#" title="2 Stars">2</a></li> 
    <li><a href="#" title="3 Stars">3</a></li> 
    <li><a href="#" title="4 Stars">4</a></li> 
    <li><a href="#" title="5 Stars">5</a></li> 
</ul> 

Từ những gì tôi có thể nói, đây chỉ là một danh sách. Làm thế nào tôi sẽ tích hợp nó vào biểu mẫu của tôi, để thông tin từ xếp hạng sao có thể được gửi đến cơ sở dữ liệu. Mã hiện tại của tôi cho biểu mẫu bên dưới:

<p>Quality</p> 
<input type="radio" name="ratingquality" value="1"> 
<input type="radio" name="ratingquality" value="2"> 
<input type="radio" name="ratingquality" value="3"> 
<input type="radio" name="ratingquality" value="4"> 
<input type="radio" name="ratingquality" value="5"> 
+8

Bước 1: Ném nó đi. Một loạt các liên kết đến đầu trang không có cơ sở để kiểm soát biểu mẫu. Bước 2: Bạn muốn chọn chính xác một tùy chọn từ một nhóm năm để tìm thứ gì đó được xây dựng trên các nút radio như [ví dụ này tôi tìm thấy qua Google] (http://www.sitepoint.com/jquery-star-rating/ #fig_star_sprite). – Quentin

+0

@Quentin đặt câu trả lời này để tôi có thể cung cấp cho bạn một cuộc bỏ phiếu thích hợp –

+0

để truy cập hệ thống xếp hạng chỉ css: http://stackoverflow.com/questions/23081194/how-to-create-rating-system-using-only -css/23081284 # 23081284 – 4dgaurav

Trả lời

17

này là rất dễ sử dụng, chỉ cần sao chép-dán mã. Bạn có thể sử dụng hình ảnh ngôi sao của chính bạn trong nền.

tôi đã tạo biến số var userRating. bạn có thể sử dụng biến này để lấy giá trị từ các ngôi sao.

Tận hưởng !!:)

CSS

.rating { 
    float:left; 
    width:300px; 
} 
.rating span { float:right; position:relative; } 
.rating span input { 
    position:absolute; 
    top:0px; 
    left:0px; 
    opacity:0; 
} 
.rating span label { 
    display:inline-block; 
    width:30px; 
    height:30px; 
    text-align:center; 
    color:#FFF; 
    background:#ccc; 
    font-size:30px; 
    margin-right:2px; 
    line-height:30px; 
    border-radius:50%; 
    -webkit-border-radius:50%; 
} 
.rating span:hover ~ span label, 
.rating span:hover label, 
.rating span.checked label, 
.rating span.checked ~ span label { 
    background:#F90; 
    color:#FFF; 
} 

HTML

<div class="rating"> 
    <span><input type="radio" name="rating" id="str5" value="5"><label for="str5"></label></span> 
    <span><input type="radio" name="rating" id="str4" value="4"><label for="str4"></label></span> 
    <span><input type="radio" name="rating" id="str3" value="3"><label for="str3"></label></span> 
    <span><input type="radio" name="rating" id="str2" value="2"><label for="str2"></label></span> 
    <span><input type="radio" name="rating" id="str1" value="1"><label for="str1"></label></span> 
</div> 

Javascript

<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.4/jquery.min.js"></script> 
<script type="text/javascript"> 
$(document).ready(function(){ 
    // Check Radio-box 
    $(".rating input:radio").attr("checked", false); 

    $('.rating input').click(function() { 
     $(".rating span").removeClass('checked'); 
     $(this).parent().addClass('checked'); 
    }); 

    $('input:radio').change(
     function(){ 
     var userRating = this.value; 
     alert(userRating); 
    }); 
}); 
</script> 
+3

Đã thêm ví dụ JSfiddle bằng mã của bạn. Trông rất tuyệt. http://jsfiddle.net/bhpyk18w/ –

+0

Tốt của nó. Nhưng các giá trị đánh giá không được lưu trữ ở bất kỳ đâu. Bạn có thể vui lòng thêm một chút mã và mô tả về cách chúng tôi có thể lưu dữ liệu của các phiếu bầu đã được thực hiện và hiển thị các ngôi sao được chiếu sáng không? –

+0

Tôi đã thực hiện một chút thay đổi để biến các vòng tròn thành các ngôi sao. Cảm ơn bạn vì mã tuyệt vời. –

0

Tôi sẽ nói ngay lập tức rằng bạn sẽ không thể đạt được giao diện họ có bằng nút radio với CSS đúng.

Tuy nhiên, bạn có thể dính vào kiểu danh sách trong ví dụ mà bạn đã đăng và thay thế anchors bằng số lần nhấp spans có thể kích hoạt sự kiện javascript để lưu xếp hạng đó vào cơ sở dữ liệu của bạn qua ajax.

Nếu bạn đã đi tuyến đường đó, bạn có thể cũng muốn lưu cookie vào máy người dùng để họ không thể gửi đi lặp lại cơ sở dữ liệu của bạn. Điều đó sẽ ngăn họ gửi nhiều hơn một lần ít nhất cho đến khi họ xóa cookie của họ.

Nhưng tất nhiên có nhiều cách để giải quyết vấn đề này. Đây chỉ là một trong số họ. Hy vọng rằng sẽ giúp.

0

Đây là solution.

HTML:

<div class="rating"> 
<span>☆</span><span>☆</span><span>☆</span><span>☆</span><span>☆</span> 
</div> 

CSS:

.rating { 
    unicode-bidi: bidi-override; 
    direction: rtl; 
} 
.rating > span { 
    display: inline-block; 
    position: relative; 
    width: 1.1em; 
} 
.rating > span:hover:before, 
.rating > span:hover ~ span:before { 
    content: "\2605"; 
    position: absolute; 
} 

Hope this helps.

Source

+1

Cách tiếp cận tốt để hiển thị dấu sao nhưng không trả lời câu hỏi. –

+1

Làm cách nào chúng tôi có thể sử dụng giải pháp này khi gửi biểu mẫu? –

+0

Bạn có thể cung cấp mã mà bạn đã thử cho đến nay không? – Nitesh

4

Làm thế nào về điều này? Tôi cần điều tương tự, tôi phải tạo một cái từ đầu. Đó là CSS PURE, và hoạt động trong IE9 + Cảm thấy tự do để cải thiện nó.

Demo: http://www.d-k-j.com/Articles/Web_Development/Pure_CSS_5_Star_Rating_System_with_Radios/

<ul class="form"> 
    <li class="rating"> 
     <input type="radio" name="rating" value="0" checked /><span class="hide"></span> 
     <input type="radio" name="rating" value="1" /><span></span> 
     <input type="radio" name="rating" value="2" /><span></span> 
     <input type="radio" name="rating" value="3" /><span></span> 
     <input type="radio" name="rating" value="4" /><span></span> 
     <input type="radio" name="rating" value="5" /><span></span> 
    </li> 
</ul> 

CSS:

.form { 
    margin:0; 
} 

.form li { 
    list-style:none; 
} 

.hide { 
    display:none; 
} 

.rating input[type="radio"] { 
    position:absolute; 
    filter:alpha(opacity=0); 
    -moz-opacity:0; 
    -khtml-opacity:0; 
    opacity:0; 
    cursor:pointer; 
    width:17px; 
} 

.rating span { 
    width:24px; 
    height:16px; 
    line-height:16px; 
    padding:1px 22px 1px 0; /* 1px FireFox fix */ 
    background:url(stars.png) no-repeat -22px 0; 
} 

.rating input[type="radio"]:checked + span { 
    background-position:-22px 0; 
} 

.rating input[type="radio"]:checked + span ~ span { 
    background-position:0 0; 
} 
+0

Cảm ơn, điều này khá nhiều trả lời câu hỏi của tôi! –

+0

Đó không phải là CSS tho thuần túy vì nó sử dụng hình ảnh. –

1

CSS:

.rate-container > i { 
    float: right; 
} 

.rate-container > i:HOVER, 
.rate-container > i:HOVER ~ i { 
    color: gold; 
} 

HTML:

<div class="rate-container"> 
    <i class="fa fa-star "></i> 
    <i class="fa fa-star "></i> 
    <i class="fa fa-star "></i> 
    <i class="fa fa-star "></i> 
    <i class="fa fa-star "></i> 
</div> 
2

Dưới đây là làm thế nào để tích hợp giá CSS sao thành một hình thức HTML mà không sử dụng javascript (chỉ html và css):

CSS:

.txt-center { 
    text-align: center; 
} 
.hide { 
    display: none; 
} 

.clear { 
    float: none; 
    clear: both; 
} 

.rating { 
    width: 90px; 
    unicode-bidi: bidi-override; 
    direction: rtl; 
    text-align: center; 
    position: relative; 
} 

.rating > label { 
    float: right; 
    display: inline; 
    padding: 0; 
    margin: 0; 
    position: relative; 
    width: 1.1em; 
    cursor: pointer; 
    color: #000; 
} 

.rating > label:hover, 
.rating > label:hover ~ label, 
.rating > input.radio-btn:checked ~ label { 
    color: transparent; 
} 

.rating > label:hover:before, 
.rating > label:hover ~ label:before, 
.rating > input.radio-btn:checked ~ label:before, 
.rating > input.radio-btn:checked ~ label:before { 
    content: "\2605"; 
    position: absolute; 
    left: 0; 
    color: #FFD700; 
} 

HTML:

<div class="txt-center"> 
    <form> 
     <div class="rating"> 
      <input id="star5" name="star" type="radio" value="5" class="radio-btn hide" /> 
      <label for="star5">☆</label> 
      <input id="star4" name="star" type="radio" value="4" class="radio-btn hide" /> 
      <label for="star4">☆</label> 
      <input id="star3" name="star" type="radio" value="3" class="radio-btn hide" /> 
      <label for="star3">☆</label> 
      <input id="star2" name="star" type="radio" value="2" class="radio-btn hide" /> 
      <label for="star2">☆</label> 
      <input id="star1" name="star" type="radio" value="1" class="radio-btn hide" /> 
      <label for="star1">☆</label> 
      <div class="clear"></div> 
     </div> 
    </form> 
</div> 

Vui lòng kiểm tra demo

+0

Hãy cố gắng tránh chỉ bán phá giá mã như một câu trả lời và cố gắng giải thích nó là gì và tại sao. Mã của bạn có thể không hiển nhiên đối với những người không có trải nghiệm mã hóa có liên quan. – Frits

+0

đây là câu trả lời hay nhất theo ý kiến ​​của tôi bởi vì nó có ít sự phụ thuộc nhất. Chỉ cần html + css –

Các vấn đề liên quan