百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 技术文章 > 正文

SCSS绘制角标:右下角、右上角、左上角、左下角

myzbx 2025-01-31 14:13 22 浏览

本文讲述基于SCSS编写样式实现角标。参考上文【WEB:将i清楚CSS、Less、Sass、Scss】。实现后的效果如下图:


原理

CSS有一个特性,就是可以指定一个矩形框边框的宽度,以及其颜色。如下图:

然后缩小矩形框本身的尺寸,例如从300px改为100px:


然后继续直到矩形的长度和宽度都是0,就会看到一个完全由边组成的矩形,如下图:


然后我们来改变边的颜色,例如




这样就可以绘制出三角形了,当然也可以搞成沙漏型,和带上圆角。



实现

使用绝对定位,将三角形布局到指定位置,并通过z-index遮挡,实现条带。然后通过文本框绝对定位,并旋转到指定位置。

绝对定位一个大的三角形布局到特定位置。


.script-tag-container {
  margin: 1rem;
  position: relative;
  height: 100px;
  border: 1px solid #efefef;
  background-color: #efefef;
  border-radius: 5px;
}
.script-tag-container .rb-large {
  position: absolute;
  content: "";
  width: 0;
  height: 0;
  bottom: 0;
  right: 0;
  border-top: 30px solid transparent;
  border-left: 30px solid transparent;
  border-bottom: 30px solid red;
  border-right: 30px solid red;
  z-index: 0;
}
.script-tag-container .rb-small {
  position: absolute;
  content: "";
  width: 0;
  height: 0;
  bottom: 0;
  right: 0;
  border-top: 10px solid transparent;
  border-left: 10px solid transparent;
  border-bottom: 10px solid #efefef;
  border-right: 10px solid #efefef;
  z-index: 1;
}
.script-tag-container .rb-text {
  position: absolute;
  color: white;
  width: 84.8528137424px;
  height: 84.8528137424px;
  font-size: 1rem;
  text-align: center;
  transform-origin: center center;
  display: flex;
  justify-content: center; /* 水平居中 */
  align-items: flex-end; /* 垂直靠底部 */
  transform: rotate(-45deg); /*逆时针旋转*/
  bottom: 0;
  right: 0;
}

SCSS

定义相应的变量

/*_vars.scss*/
$script-tag-background-color: #efefef;

$script-tag-raduis: 5px;

$script-tag-angle: 45deg;

$cos-script-tag-angle: cos($script-tag-angle);
$sin-script-tag-angle: sin($script-tag-angle);

定义函数

/*_index.scss*/
@import 'vars';

@mixin script-tag-text($edge-length:2rem,$mode:"rb",$font-color:white,$font-size:0.75rem){
    position: absolute;
    color: $font-color;
    width: $edge-length / $sin-script-tag-angle;
    height: $edge-length / $cos-script-tag-angle;
    font-size: $font-size;
    text-align: center;
        
    transform-origin: center center;

    

    @if $mode == "rb"{
        display: flex;
        justify-content: center; /* 水平居中 */
        align-items: flex-end; /* 垂直靠底部 */
        transform: rotate(calc(-1 * $script-tag-angle)); /*逆时针旋转*/
        bottom: 0;
        right: 0;
    }@else if $mode == "rt"{
        display: flex;
        justify-content: center; /* 水平居中 */
        align-items: flex-start; /* 垂直靠底部 */
        transform: rotate($script-tag-angle);/*正时针旋转*/
        top: 0;
        right:0;
    }@else if $mode == "lt"{
        display: flex;
        justify-content: center; /* 水平居中 */
        align-items: flex-start; /* 垂直靠顶部 */
        transform: rotate(calc(-1 * $script-tag-angle)); /*逆时针旋转*/
        
        top: 0;
        left: 0;
    }@else if $mode == "lb"{
        display: flex;
        justify-content: center; /* 水平居中 */
        align-items: flex-end; /* 垂直靠底部 */
        transform: rotate($script-tag-angle);/*正时针旋转*/
        left: 0;
        bottom:0;
    }

}

@mixin script-tag-triangle($edge-color:red,$edge-length:2rem,$mode:"rb"){
    position: absolute;
    content: '';
    width: 0;
    height: 0;
    @if $mode == "rb"{
        bottom: 0;
        right: 0;
        border-top:$edge-length solid transparent;
        border-left:$edge-length solid transparent;
        border-bottom:$edge-length solid $edge-color;
        border-right:$edge-length solid $edge-color;
    }@else if $mode == "lt"{
        top: 0;
        left: 0;
        border-top:$edge-length solid $edge-color;
        border-bottom:$edge-length solid transparent;
        border-left:$edge-length solid $edge-color;
        border-right:$edge-length solid transparent;
    }@else if $mode == "lb"{
        bottom:  0;
        left: 0;
        border-top:$edge-length solid transparent;
        border-bottom:$edge-length solid $edge-color;
        border-left:$edge-length solid $edge-color;
        border-right:$edge-length solid transparent;
    }@else if $mode == "rt"{
        top: 0;
        right: 0;
        border-top:$edge-length solid $edge-color;
        border-right: $edge-length solid $edge-color;
        border-bottom:$edge-length solid transparent;
        border-left:$edge-length solid transparent;
    }
}

.script-tag-container{
    margin: 1rem;
    position: relative;
    height: 100px;
    border: 1px solid $script-tag-background-color;
    background-color: $script-tag-background-color;
    border-radius: $script-tag-raduis;

    .rb-large{
        @include script-tag-triangle(red, 30px,"rb" );
        z-index: 0;
    }
    .rb-small{
        @include script-tag-triangle($script-tag-background-color, 10px,"rb" );
        z-index: 1;
    }
    .rb-text{
        @include script-tag-text(60px,"rb",white ,1rem)
    }


    
    .rt-large{
        @include script-tag-triangle(orange, 30px,"rt" );
        z-index: 0;
    }
    .rt-small{
        @include script-tag-triangle($script-tag-background-color, 10px,"rt" );
        z-index: 1;
    }
    .rt-text{
        @include script-tag-text(60px,"rt",white ,1rem)
    }

    .lt-large{
        @include script-tag-triangle(blue, 30px,"lt" );
        z-index: 0;
    }
    .lt-small{
        @include script-tag-triangle($script-tag-background-color, 10px,"lt" );
        z-index: 1;
    }
    .lt-text{
        @include script-tag-text(60px,"lt",white ,1rem)
    }

    .lb-large{
        @include script-tag-triangle(green, 30px,"lb" );
        z-index: 0;
    }
    .lb-small{
        @include script-tag-triangle($script-tag-background-color, 10px,"lb" );
        z-index: 1;
    }
    .lb-text{
        @include script-tag-text(60px,"lb",white ,1rem)
    }
}


相关推荐

每日C语言-快速排序(c语言快速排序怎么排)

定义:快速排序是一种常见的排序算法,基于分治的思想。其基本思想是选择一个基准数,将待排序数组分为两个子数组,一个子数组中的所有数字都比基准数小,另一个子数组中的所有数字都比基准数大。然后对这两个子数组...

【每天学习一个EXCEL函数】SORT 函数(万能排序函数)

=SORT(数组[排序依据],[排序顺序],[按列])其中:排序顺序1是升序,-1是降序,不填时默认为1。按列FALSE为竖向排序,True为横向排序,不填时默认FALSE。第3和第4参数是可以...

C语言排序方法——冒泡排序详解!你学会了吗?

冒泡排序法的基本思路为:每次将相邻的两个数比较,将小的调在前面。举个例子,如果有6个数:9,8,5,4,2,0。第一次先将最前面的两个数9和8对调。第二次将第2个数和第3个数对调(9和5)······...

PHP排序算法:计数、选择、插入、归并、快速、冒泡、希尔、堆

1.冒泡排序算法//冒泡排序算法php//author:Hengda//$arr待排序数组//$modefalse正序,true倒序functionbubbleSort(&$arr,...

灵魂拷问:如何检查 Java 数组中是否包含某个值?

作者|沉默王二责编|Elle在逛programcreek的时候,我发现了一些专注细节但价值连城的主题。比如说:如何检查Java数组中是否包含某个值?像这类灵魂拷问的主题,非常值得深入地研...

Java排序之冒泡排序(java冒泡排序选择排序)

今天来给大家介绍一下排序算法之冒泡排序jwt简介冒泡排序:(BubbleSort)是一种简单的交换排序。之所以叫做冒泡排序,因为我们可以把每个元素当成一个小气泡,根据气泡大小,一步一步移动到队伍的一...

PHP 数组排序:使用心得、示例代码和问题解决笔记

PHP数组排序:使用心得、示例代码和问题解决笔记在PHP开发中,数组排序是一项常见的任务。它可以帮助我们对数组中的元素进行排序,以便更好地管理和处理数据。在本文中,我将分享一些关于PHP数组排序的使...

「PHP」常用四种排序算法以及性能对比

作为一名合格的PHPer怎么能不接触到算法这个高大上的东西了,今天就来针对初学者来说一说最基础的4种排序算法:冒泡排序、选择排序、插入排序、快速排序(分区排序)。冒牌排序核心思想:比较相邻两个元素的大...

在嵌入式用C实现一个数组随机排序

在某些应用场景中,可能需要将一个数组的元素重新随机排列,我们可以称之为洗牌算法。其原理并不复杂,就是需要遍历整个数组,如果数组有n个元素,每当遍历到第i个数组元素时(i为数组元素的索引),再从0...

查询函数Choose、Lookup、Hlookup、Vlookup应用技巧解读

Excel中的查找和引用函数主要用于查找工作表中的所需内容,还可以获得工作表中的单元格位置或表格大小等信息,如果将查找和引用函数配合其他的Excel函数使用,将会发挥更强大的功能。常用的查询表中的数...

等了它N年,SORT函终于来了,可以让Excel表格自动排序

今天我们来学习一个Excel中的新函数,SORT函数,它的作用是对某一个数据区域进行排序,之前是OFFICE365的专属函数,现在WPS也支持这个函数了,我觉得是时候跟大家讲解下它是的使用方法,这个函...

js数组常用方法总结(js数组常用的方法及用法)

首先说明,本文没技术含量,都是js的知识,只是为以后查阅方便。另外我们开了一个免费的讲解web前端课程,有兴趣的朋友可以去看,详情地址:http://fe.qietu.com/forum.php1、创...

Excel新公式,好用的SORT排序公式,1分钟学会!

最新版本的Excel,里面有一个SORT函数公式,是用来排序的,特别好用,1分钟学会1、Sort诞生背景在排序的时候,我们有一个痛点,举个例子,当我们统计数据时,会下表的任务完成率排序,降序排列其中的...

[西门子PLC] SCL编程实例:1200/1500PLC不定长数组选择排序运用

前景介绍:01选择排序原理;选择排序算法首先从第1个位置开始对全部元素进行选择,选出全部元素中最小的给该位置,再对第2个位置进行选择,在剩余元素中选择最小的给该位置即可;以此类推,重复进行“最小元素”...

图解简单选择排序,超详细非常好理解

1.基本概念简单选择排序(SelectSort)真的是人如其名,一是它真的非常简单,二是它主要依靠选择和交换操作来进行排序。可以将简单选择排序实现为稳定的排序算法,也可以实现为不稳定的排序算法。我...