html5网页特效-svg实现不同投票不同表情

特点:

  • 根据不同评分显示不同表情,并且这些表情看起来像是在一个传送带上可以滚动
  • 使用纯代码(svg)绘制表情以及用于评分的星星
  • html+css,无javascript,上手难度:很简单

笔记

flex

布局使用flex,这是一种自适应屏幕的布局。注意align-items和justify-content也和flex有关。

.container {
  display: flex;
}

星星绘制

background-image: url("data:image/svg+xml;charset=UTF-8,%3csvg xmlns='http://www.w3.org/2000/svg' width='126.729' height='126.73'%3e%3cpath fill='%23fcd93a' d='M121.215 44.212l-34.899-3.3c-2.2-.2-4.101-1.6-5-3.7l-12.5-30.3c-2-5-9.101-5-11.101 0l-12.4 30.3c-.8 2.1-2.8 3.5-5 3.7l-34.9 3.3c-5.2.5-7.3 7-3.4 10.5l26.3 23.1c1.7 1.5 2.4 3.7 1.9 5.9l-7.9 32.399c-1.2 5.101 4.3 9.3 8.9 6.601l29.1-17.101c1.9-1.1 4.2-1.1 6.1 0l29.101 17.101c4.6 2.699 10.1-1.4 8.899-6.601l-7.8-32.399c-.5-2.2.2-4.4 1.9-5.9l26.3-23.1c3.8-3.5 1.6-10-3.6-10.5z'/%3e%3c/svg%3e");

css中有这么一大段代码,共有三处。用svg来绘制评分的星星。

这三处代码,从上往下,第一处是绘制用于评分的灰色星星,第二处是用于当评出某个分数后,代表评分的星星的样子。第三处是用于,当鼠标碰到某个星星时,该星星和之前的星星所显示的样子。这三处代码不同的地方是fill 后面的数值,这代表着颜色。

星星显示规则

不过,根据评分怎么显示对应的星星数呢?假设我点了第四颗星,为什么第一到第三颗星也亮了呢?
注意这儿的选择器,星星实际上是。

A~B 匹配B元素,满足条件:B是A之后的任意一个兄弟节点(AB有相同的父节点,B在A之后,但不一定是紧挨着A)
A>B 匹配B元素,满足条件:B是A的直接子节点

这儿的css样式代码即为,当选择某颗星后,这颗星的lable,即用来显示星星样子的元素变亮,以及,和这颗星label为兄弟元素但在此星lable之后的label元素也变亮。为什么可以这么设置呢?看看html

web前端开发学习Q-q-u-n:784783012 ,分享学习的方法和需要注意的小细节,不停更新最新的教程和学习方法
(学习工具,详细的前端项目实战教程,PDF)
<input type="radio" name="rating" id="rating-5">
<label for="rating-5"></label>
<input type="radio" name="rating" id="rating-4">
<label for="rating-4"></label>
<input type="radio" name="rating" id="rating-3">
<label for="rating-3"></label>
<input type="radio" name="rating" id="rating-2">
<label for="rating-2"></label>
<input type="radio" name="rating" id="rating-1">
<label for="rating-1"></label>

第一星到第五星其实是倒着排的,所以当选择了第四星,第四星之前的三,二,一星也亮了。但是问题时,倒着排,那么显示出来不也是倒着的,从右往左么?再看看css

.rating {
  flex-direction: row-reverse;
}

嗯,css再倒着来一遍,保证了第三星是第四星后面的元素,同时第三星还是在第四星左边。简直巧妙。

表情绘制

使用svg纯代码绘制。例如下面这段代码就是绘制了左图最上方那个扁嘴的表情,项目中只有黑白色是因为用了grayscale滤镜,之前说过。

web前端开发学习Q-q-u-n:784783012 ,分享学习的方法和需要注意的小细节,不停更新最新的教程和学习方法
(学习工具,详细的前端项目实战教程,PDF)
<!DOCTYPE html>
<html>
<body>

  <svg class="rating-0" xmlns="" viewBox="0 0 512 512">
      <circle cx="256" cy="256" r="256" fill="#ffd93b"/>
      <path d="M512 256c0 141.44-114.64 256-256 256-80.48 0-152.32-37.12-199.28-95.28 43.92 35.52 99.84 56.72 160.72 56.72 141.36 0 256-114.56 256-256 0-60.88-21.2-116.8-56.72-160.72C474.8 103.68 512 175.52 512 256z" fill="#f4c534"/>
      <ellipse transform="scale(-1) rotate(31.21 715.433 -595.455)" cx="166.318" cy="199.829" rx="56.146" ry="56.13" fill="#fff"/>
      <ellipse transform="rotate(-148.804 180.87 175.82)" cx="180.871" cy="175.822" rx="28.048" ry="28.08" fill="#3e4347"/>
      <ellipse transform="rotate(-113.778 194.434 165.995)" cx="194.433" cy="165.993" rx="8.016" ry="5.296" fill="#5a5f63"/>
      <ellipse transform="scale(-1) rotate(31.21 715.397 -1237.664)" cx="345.695" cy="199.819" rx="56.146" ry="56.13" fill="#fff"/>
      <ellipse transform
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值