CSS 实现角标效果的完整代码


Posted in HTML / CSS onJune 28, 2022

最近在项目中碰到一个这样的角标设计,如下

CSS 实现角标效果的完整代码

像这种可以文字可变化,自适应大小的布局,自然首选 CSS 了~下面看看如何实现的(两分钟读完)

一、圆角矩形和三角形

从设计上可以拆分成两部分,一个圆角矩形和一个三角形

CSS 实现角标效果的完整代码

假设 HTML 是这样的

<tag>审核为通过</tag>

圆角很好实现,border-radius就行,如下

tag{
  border-radius: 4px 4px 4px 0px;
  color: #fff;
  padding: 2px 6px;
  font-size: 10px;
  line-height: 16px;
  background: #EA3447;
}

小三角可以用伪元素生成,关于三角形的实现方式有很多,如果对兼容性没什么要求,建议采用clip-path实现,比较容易理解,确定三个坐标,直接裁剪就可以了

CSS 实现角标效果的完整代码

用 CSS 实现就是

tag::before{
    content: '';
    position: absolute;
    width: 3px;
    height: 3px;
    left: 0;
    bottom: -3px;
    background: #BB2A39;
    clip-path: polygon(0 0, 100% 0, 100% 100%); /*三角*/
}

二、颜色稍暗的三角形

上面的实现中,圆角矩形和三角形用了两个颜色,分别是#EA3447#BB2A39

CSS 实现角标效果的完整代码

每次都要维护两个颜色变量太麻烦了,有没有办法只用一个颜色呢?换句话说,如何将一个颜色变暗?这里有几种方式

1. 遮盖一层半透明的黑色

这个其实比较容易理解,在原有的颜色,遮盖一层半透明的黑色,原有颜色自然就变暗了

CSS 实现角标效果的完整代码

具体实现就是用CSS背景绘制一层半透明渐变

tag::before{
  background: linear-gradient(rgba(0, 0, 0, 0.3), rgba(0, 0, 0, 0.3));
  background-color: inherit;
}

这里的background-color:inherit就表示背景颜色是继承父级的

2. 通过滤镜实现

CSS 滤镜中有个brightness,可以设置图像的亮度,亮度越高,图像越白,无穷大时趋近于白色,亮度越低,图像越黑,当为0时,图像就完全成黑色,刚好适用于这种场景

CSS 实现角标效果的完整代码

具体实现就是

tag::before{
  filter: brightness(.7);
  background-color: inherit;
}

像其他饱和度(saturate)、灰度(grayscale)滤镜也能达到类似的效果,不过这里亮度更为合适

3.未来的解决方式 color-mix

大家可能在一些 CSS 预处理中用过颜色的处理方案,比如要把一个颜色亮度降低 20%,在 less 中可能是这样

.el{
  background: darken(@color, 20%); 
}

不过这些是预处理的,变化并不是实时的,有时候可能并不能满足实际需求。

现在,新的颜色方案已经要在 CSS 中实现了,那就是 color-mix,也就是颜色混合,目前已经在草案中了,如果未来全面支持了,那么要将一个颜色变暗,可以这样来实现

.el{
  --accent: #EA3447;
  background: hsl(from var(--accent) h s calc(l - 20%));
}

这里的 from 表示将原有颜色展开,然后重新计算成新的颜色

更多关于color-mix的草案可以查看 www.w3.org/TR/css-colo…

三、富有质感的高光

设计师为了突出一定的质感,在标签上和加了一层“微弱的高光”,上面的截图可能不是特别清晰,可以看下面的放大对比图

CSS 实现角标效果的完整代码

能看出区别吗?能体会到设计的良苦用心吗?

看着有些类似一个是纯色填充,一个是渐变填充。为了保证颜色变量的单一性,这里的高光可以用一层半透明的白色渐变来实现

tag{
  background: linear-gradient(to right bottom, rgba(255, 255, 255, 0.4), transparent) rgba(20, 30, 41, 0.76));
}

这里绘制了一个从左上角到右下角的半透明白色渐变,覆盖在原本的颜色上,效果如下

CSS 实现角标效果的完整代码

由于只是简单粗暴的叠加,导致整体偏白,有种饱和度不足的感觉,究其原因,还是由于叠加的不够自然。那么如何叠加的更为自然呢?可以采用background-blend-mode,也就是背景混合模式。

为了让叠加效果看起来更加柔和,这里可以用soft-light,如下

tag{
  background-blend-mode: soft-light
}

这样效果就好多了,非常精致,可以看看对比效果

CSS 实现角标效果的完整代码

完整代码如下

tag{
  border-radius: 4px 4px 4px 0px;
  color: #fff;
  padding: 2px 6px;
  font-size: 10px;
  line-height: 16px;
  background: linear-gradient(to right bottom, rgba(255, 255, 255, 0.4), transparent) var(--bg, #EA3447);
  background-blend-mode: soft-light;
}
tag::before{
  content: '';
  position: absolute;
  width: 3px;
  height: 3px;
  left: 0;
  bottom: -3px;
  background-color: inherit;
  filter: brightness(.7);
  clip-path: polygon(0 0, 100% 0, 100% 100%);
}

四、总结一下

整体实现其实没有太难的地方,如果设计师没什么要求,其实到第一步就可以结束了。但是如果充分还原这些富有质感的设计,也能让网站整体的视觉感受更上一层楼。下面总结一些实现要点:

  • 自适应尺寸的尽量用 CSS 实现
  • 三角的实现推荐 clip-path,更容易理解
  • 充分考虑实现的可维护性,比如能用一个变量,就不要用两个变量,CSS 同样如此
  • 叠加一层半透明的黑色可以实现图像变暗
  • 图像变暗还可以通过 CSS 滤镜 brightness 实现
  • 未来还可以通过颜色混合 color-mix 来实现,可以提前了解一下
  • 背景混合模式可以让颜色叠加根据自然

到此这篇关于CSS 实现角标效果的文章就介绍到这了,更多相关CSS 实现角标内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章,希望大家以后多多支持三水点靠木!

 
HTML / CSS 相关文章推荐
CSS3 制作旋转的大风车(充满童年回忆)
Jan 30 HTML / CSS
css3 按钮 利用css3实现超酷下载按钮
Mar 18 HTML / CSS
深入CSS3 动画效果的总结详解
May 09 HTML / CSS
详解CSS3中使用gradient实现渐变效果的方法
Aug 18 HTML / CSS
css3实现冲击波效果的示例代码
Jan 11 HTML / CSS
W3C公布最新的HTML5标准草案
Oct 17 HTML / CSS
html5使用canvas实现跟随光标跳动的火焰效果
Jan 07 HTML / CSS
html5各种页面切换效果和模态对话框用法总结
Dec 15 HTML / CSS
html5使用canvas绘制一张图片
Dec 15 HTML / CSS
总结html5自定义属性有哪些
Apr 01 HTML / CSS
详解HTML5.2版本带来的修改
May 06 HTML / CSS
详解CSS中的特指度和层叠问题
Jul 15 HTML / CSS
CSS SandBox应用场景及常见问题
CSS的calc函数用法小结
Jun 25 #HTML / CSS
flex布局中使用flex-wrap实现换行的项目实践
Jun 21 #HTML / CSS
css3手动实现pc端横向滚动
Jun 21 #HTML / CSS
使用CSS自定义属性实现骨架屏效果
Jun 21 #HTML / CSS
css如何把元素固定在容器底部的四种方式
css中有哪些方式可以隐藏页面元素及区别
Jun 16 #HTML / CSS
You might like
PHP DataGrid 实现代码
2009/08/12 PHP
php面向对象全攻略 (十二) 抽象方法和抽象类
2009/09/30 PHP
javascript  Error 对象 错误处理
2008/05/18 Javascript
JQuery中each()的使用方法说明
2010/08/19 Javascript
jquery实现input输入框实时输入触发事件代码
2014/01/28 Javascript
我用的一些Node.js开发工具、开发包、框架等总结
2014/09/25 Javascript
Nodejs实现的一个简单udp广播服务器、客户端
2014/09/25 NodeJs
JS+CSS实现弹出全屏灰黑色透明遮罩效果的方法
2014/12/20 Javascript
详解Angularjs在控制器(controller.js)中使用过滤器($filter)格式化日期/时间实例
2017/02/17 Javascript
CSS3+JavaScript实现翻页幻灯片效果
2017/06/28 Javascript
JavaScript之iterable_动力节点Java学院整理
2017/06/29 Javascript
老生常谈ES6中的类
2017/07/31 Javascript
JS 实现banner图片轮播效果(鼠标事件)
2017/08/04 Javascript
Vue文件配置全局变量的实例
2018/09/06 Javascript
深入浅析Node.js 事件循环、定时器和process.nextTick()
2018/10/22 Javascript
JavaScript闭包与作用域链实例分析
2019/01/21 Javascript
vue-i18n实现中英文切换的方法
2020/07/06 Javascript
原生js实现九宫格拖拽换位
2021/01/26 Javascript
浅析Python中的多进程与多线程的使用
2015/04/07 Python
Django中模型Model添加JSON类型字段的方法
2015/06/17 Python
Python cookbook(数据结构与算法)通过公共键对字典列表排序算法示例
2018/03/15 Python
python3监控CentOS磁盘空间脚本
2018/06/21 Python
解决python xx.py文件点击完之后一闪而过的问题
2019/06/24 Python
python 自动轨迹绘制的实例代码
2019/07/05 Python
tensorflow模型保存、加载之变量重命名实例
2020/01/21 Python
给Django Admin添加验证码和多次登录尝试限制的实现
2020/07/26 Python
python性能测试工具locust的使用
2020/12/28 Python
豆腐の盛田屋官网:日本自然派的豆乳面膜、肥皂、化妆水、乳液等
2016/10/08 全球购物
英国领先的在线高尔夫商店:Gamola Golf
2019/11/16 全球购物
交通事故检查书范文
2014/01/30 职场文书
优秀体育委员自荐书
2014/01/31 职场文书
上课打牌的检讨书
2014/02/15 职场文书
党员倡议书
2015/01/19 职场文书
辅导员学期工作总结
2015/08/14 职场文书
Django项目如何正确配置日志(logging)
2021/04/29 Python
Java Spring Boot 正确读取配置文件中的属性的值
2022/04/20 Java/Android