资讯专栏INFORMATION COLUMN

纯 CSS 实现星型 ☆ 评级

oneasp / 3313人阅读

摘要:今天,我们用纯实现评级。这时,当你某个时,这个及其后面的都同时变为黄色实体星。对内联元素应用时要注意用纯实现评级的效果就实现了代码如下用实现评级效果思路当元素触发事件时,赋予不同的值。

今天,我们用纯CSS实现⭐️评级。

案例效果

分析:正常情况下为空心的☆,鼠标hover时,变为实心黄色的★.

HTML分析

div.star包裹5个span,每个span的内容为空心的☆.HTML代码如下:

CSS分析

1.分析:当我们hover时,我们用实心的★覆盖空心的☆,并给实心的★设置color:gold;.

要覆盖空心的☆,我们要利用为元素::before,并赋予content:"★".同时为了实现覆盖,而不是在之前添加内容,我们需要为元素设置position:absolute;.

这时,当你hover时,hover的☆就变为实体黄色的⭐️了。

2.接下来,我们要实现当我hover某个☆时,不仅这一个,它前面的☆也都要变为黄色实体的⭐️。
首先,我们要用到通用兄弟选择器~

在使用 ~ 连接两个元素时,它会匹配第二个元素,条件是它必须跟(不一定是紧跟)在第一个元素之后,且他们都有一个共同的父元素 .
比如:div~p就会匹配与div同辈的且在div之后的所有p元素。

当我们hover某个☆时,我们利用通用兄弟选择器使后面的☆也同时变为黄色实体星⭐️。

span:hover::before,
span:hover~span::before{
  content:"★";
  color:gold;
  position:absolute;
} 

这时,当你hover某个☆时,这个及其后面的☆都同时变为黄色实体星⭐️。

3.最后,我们利用unicode-bidi,direction属性,使文本由右向左显示。

The unicode-bidi CSS property together with the direction property relates to the handling of bidirectional text in a document.For example, if a block of text contains both left-to-right and right-to-left text then the user-agent uses a complex Unicode algorithm to decide how to display the text. This property overrides this algorithm and allows the developer to control the text embedding.

这样的话,当我们hover时,还是这个及其后面的☆都同时变为黄色实体星⭐️,但是由于此时从右向左显示,它的后面兄弟元素就变到“前面”来了。

.star{unicode-bidi: bidi-override;direction:rtl;}

对内联元素应用direction时要注意:

For the direction property to have any effect on inline-level elements, the unicode-bidi property"s value must be embed or override.

OK. 用纯CSS实现⭐️评级的效果就实现了!

CSS代码如下:

span:hover::before,
span:hover~span::before{
  content:"★";
  color:gold;
  position:absolute;
} 
.star{
  unicode-bidi:bidi-overrride;
  direction:rtl;
}
用 JS 实现评级效果

思路:当元素触发onmouseover事件时,赋予不同的class值。

代码如下:

 
.heart-off,.heart-on,.heart-hover{
  text-decoration:none;
}

.heart-off:before,.heart-on:before,.heart-hover:before{
  content:"2665";
}
.heart-off{color:rgba(150,150,150,.5);}
.heart-on{color:rgba(255,0,0,.5);}
.heart-hover{color:rgba(255,0,0,1);}
one.onmouseover=function(){
  this.className="heart-hover";
  two.className="heart-off";
  three.className="heart-off";
  four.className="heart-off";
  five.className="heart-off";
};

two.onmouseover=function(){
  this.className="heart-hover";
  one.className="heart-on";
  three.className="heart-off";
  four.className="heart-off";
  five.className="heart-off";
};

three.onmouseover=function(){
  this.className="heart-hover";
  one.className="heart-on";
  two.className="heart-on";
  four.className="heart-off";
  five.className="heart-off";
};

four.onmouseover=function(){
  this.className="heart-hover";
  one.className="heart-on";
  two.className="heart-on";
  three.className="heart-on";
  five.className="heart-off";
};

five.onmouseover=function(){
  this.className="heart-hover";
  one.className="heart-on";
  two.className="heart-on";
  three.className="heart-on";
  four.className="heart-on";
};
参考资料

字符实体

字符集

unicode-bidide 的用法

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/111197.html

相关文章

  • 个人分享--web前端学习资源分享

    摘要:前言月份开始出没社区,现在差不多月了,按照工作的说法,就是差不多过了三个月的试用期,准备转正了一般来说,差不多到了转正的时候,会进行总结或者分享会议那么今天我就把看过的一些学习资源主要是博客,博文推荐分享给大家。 1.前言 6月份开始出没社区,现在差不多9月了,按照工作的说法,就是差不多过了三个月的试用期,准备转正了!一般来说,差不多到了转正的时候,会进行总结或者分享会议!那么今天我就...

    sherlock221 评论0 收藏0
  • 三栏布局只知道圣杯、双飞翼,最终评级是……F

    摘要:三栏布局,面试与工作中的常见布局。分左中右三部分,其中左右宽度已知,中间宽度自适应。根据不同的顺序与处理,这里写下了五类布局方式。用了它,内外部元素渲染互不影响,就不会蔓延到两侧了。网格布局网格布局好了,后续再来说一下各自的优缺点。 三栏布局,面试与工作中的常见布局。分左中右三部分,其中左右宽度已知,中间宽度自适应。根据不同的DOM顺序与CSS处理,这里写下了五类布局方式。 一、浮动布...

    KavenFan 评论0 收藏0
  • 三栏布局只知道圣杯、双飞翼,最终评级是……F

    摘要:三栏布局,面试与工作中的常见布局。分左中右三部分,其中左右宽度已知,中间宽度自适应。根据不同的顺序与处理,这里写下了五类布局方式。用了它,内外部元素渲染互不影响,就不会蔓延到两侧了。网格布局网格布局好了,后续再来说一下各自的优缺点。 三栏布局,面试与工作中的常见布局。分左中右三部分,其中左右宽度已知,中间宽度自适应。根据不同的DOM顺序与CSS处理,这里写下了五类布局方式。 一、浮动布...

    BothEyes1993 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<