css两种动态显示星星等级的比较(一星、两星、三星、四星、五星)
以下是显示后的图片,相信在很多网站上都能看到这种效果,目前我知道两种实现方式
1、background-position加上一张图片
图片:http://www.brookstone.com/webassets/pwr/engine/images/stars.gif
1 <!DOCTYPE html> 2 <html> 3 4 <head> 5 <link rel="stylesheet" href="style.css"> 6 <script src="script.js"></script> 7 <style> 8 .star{ 9 height: 20px; 10 line-height: 20px; 11 width: 112px; 12 background-image: url('http://www.brookstone.com/webassets/pwr/engine/images/stars.gif'); 13 background-position:0 -69px; 14 background-repeat:no-repeat; 15 } 16 17 </style> 18 </head> 19 20 <body> 21 <div class="star"></div> 22 23 24 </body> 25 26 </html>
这是最简单的background-position定位,不过如果还是觉得stars.gif比较大,可以用第二种方法,不过在使用第二种方法之前必须将stars.gif用photoshop裁剪下,裁剪成两个图片,没有金色星星(5颗灰色星星)的和5金色星的两张图片,其他各类星星的都舍去掉,当然我比较懒,下面的demo图片没有用工具裁剪,直接用的原stars.gif。
2、CSS clip 属性
浏览器支持
所有主流浏览器都支持 clip 属性。
clip 属性剪裁绝对定位元素。
clip::rect (top, right, bottom, left)
position:absolute 这个必须有
<!DOCTYPE html> <html> <head> <link rel="stylesheet" href="style.css"> <script src="script.js"></script> <style> .star1{ margin:10px 0 0 0; height: 20px; line-height: 20px; width: 112px; background-image: url('http://www.brookstone.com/webassets/pwr/engine/images/stars.gif'); background-position:0 0; } .star1 .inner{ height: 20px; line-height: 20px; width: 112px; background-image: url('http://www.brookstone.com/webassets/pwr/engine/images/stars.gif'); background-position:0 -230px; position:absolute; clip:rect(0px,61px,21px,0px); } </style> </head> <body> <div class="star1"> <div class='inner'></div> </div> </body> </html>
这个用rect裁剪的好处是即使你想要1.2颗星星也是可以的,只需要改下clicp的rect第二个参数就行了,61px改为27.6px,clip:rect(0px,27.6px,21px,0px);
计算方式 一个星星23px,1.2颗星星:23+23/10*2=27.6,显示效果:
对比第一种,stars.gif这个图片得不断添加各类值得星星,好处显而易见,第二种灵活图片小,减少传输开销。
备注: .star1样式里面的图片应该是5颗灰色星星,.star1 .inner里的图片应该是5颗金色星星