php - 如何动态地为星级评分中的星星着色?

标签 php html css codeigniter rating

<分区>


想改进这个问题吗? 更新问题,使其只关注一个问题 editing this post .

关闭 7 年前

我有一个表单,用户可以在其中对产品进行评分,我需要在其中直观地显示星级。我需要根据我从数据库中检索的评级值为每个用户以及总体平均值为星星着色。

例如,用户 A 给出了 5 星评分,而用户 B 仅给出了 3 星评分。当我显示用户 A 的评级时,我必须为所有 5 颗星上色,但是当我显示用户 B 的评级时,我必须只为 3 星上色。这意味着我必须动态地给星星上色。

我还在大多数网站上看到,在显示平均评分时,它们会在平均评分以半颗星结尾的地方给一半的星星涂上颜色。我也想这样做。

我的显示不需要包含悬停功能。

我的问题是如何根据计算出的平均值或从数据库中提取的评级为星星着色。

我在我的元素中使用 codeigniter。

感谢您的帮助:-)

最佳答案

有一个<span>元素嵌套在另一个元素中。
外层<span>有空心星星的背景图片。
内层<span>有一个彩色星星的背景图像,和一个 width:布局页面时以编程方式设置的元素。例如,width:60.0%可用于 3/5 星评级。

对于小型优化,您甚至可以使用只有一颗星的图像开始,然后使用 repeat-x 获得所有 5 颗星。您还可以拥有一个包含彩色和填充的垂直星星的图像,并在显示时裁剪以确定您引用的是哪个版本的星星。

示例 1:

例如,考虑以下 CSS:

span.rating-frame, span.rating-fill {
    background: url(../star.png) 0 -16px repeat-x;
    display: block;
    width: 80px; /* this is 5 times the width of the star, for 5 stars total */
    height: 16px;
}
span.rating-fill {
    background-position: 0 0; /* use the (filled-in) version from the top of the image */
}

和以下 HTML:

Average Rating: 4/5
<span class="rating-frame">
      <span style="width:80.0%;" class="rating-fill"> </span>
</span>

User A:  5/5
<span class="rating-frame">
      <span style="width:100.0%;" class="rating-fill"> </span>
</span>

User B: 3/5
<span class="rating-frame">
      <span style="width:60.0%;" class="rating-fill"> </span>
</span>

假设 star.png 是一张 16x32 的图像,顶部填充了星星。
宽度属性的值由 userRating/maxPossibleRating 设置四舍五入到适当的精度。当然,在显示总体平均评分的地方,它由 averageUserRating/maxPossibleRating 设置。 .


例子2:

OP 报告使用 <span>☆</span>反而。以下伪代码可能有助于那里的页面生成。

for (i = 1 to rating inclusive) {
    print "<span>★</span>"
}
//if including a half-star, replace this comment with the code to do so.
for (i = rating+1 to maxRating inclusive) {
    print "<span>☆</span>"
}

但是除非你有一个半填充的星号,否则你将无法在你的输出中使用它。您可以尝试改用 ½ 字符。


示例 3:

eBay 示例 OP 链接使用如下来源:

   <span class="display-text-rating">3.7 stars</span>
   <div class="star-rating-section" title="3.7 out of 5 stars">
     <span class="star-rating" role="img" aria-label="3.7 stars">
         <i class="fullStar"></i>
         <i class="fullStar"></i>
         <i class="fullStar"></i>
         <i class="midStar"></i>
         <i class="emptyStar"></i>
      </span>
    </div>

第一行是打印文本,以文本形式显示评分。
div 标题显示有关鼠标悬停的信息。
span 中带有类属性的元素可以很容易地以编程方式生成,如示例 2 所示。CSS 可以设置为对 fullStar、midStar 和 emptyStar 使用不同的图像。可以在用户个人评分所在的部分为每个用户重复此生成过程。

示例 3 的缺点是在视觉上四舍五入到最近的半星(示例 2 是全星),而示例 1 允许更细粒度地区分分数星,而不需要额外的编程或图像创建. 决定适当的舍入水平是UX.SE 的问题。 (如果有人真的关心这个问题,请在此处编辑链接)。

关于php - 如何动态地为星级评分中的星星着色?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36491315/

上一篇:html - 内部带有翻转效果的 Bootstrap 轮播

下一篇:html - 无法在 iPhone 中填写 HTML 表单,文本无法正常显示

相关文章:

javascript - 多个ajax倒数计时器的建议(每秒调用一次)

javascript - 如何在 DIV 大小值为 'displayed:none' 时获取没有任何大小值的值(使用 javascript 和 CSS)

jquery - 我应该为 jquery 中的反向 $(window).scroll 函数编写什么代码以向上滚动?

CSS 剪辑路径在 Safari 中加载失败

php - 回显 anchor 标题中可能包含单引号和/或双引号的 mysql 文本的正确方法是什么?

php/mysql 搜索多个值

php - 使用 Azure Web 应用程序连接到 Azure 数据库

html - li 元素的 css 需要更改

python - 使用 Python、SQLite 和 HTML,我如何从数据库读取数据并打印到页面?

java - 用于文件下载或保存文件的Jsp标签?