用原生CSS实现标签样式

Posted Kira~~

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了用原生CSS实现标签样式相关的知识,希望对你有一定的参考价值。

semantic-ui中有一个很适合于博客标签的样式,但element-ui中却没有找到相关的组件,因此就需要自己手动用原生CSS去写样式了

右边的长方形很容易实现直接用div+border的方式,修改以下颜色就可以了,颜色可以直接参考element-ui中的配色,效果如下。

难点在于前面的小三角形,这里采用设置border样式的方式,将上下border设为透明,右边设为蓝色,则可以得到一个箭头向左的三角形,并紧贴后面的长方形就可以。代码如下

    .sjx
        width: 0;
        height: 0;
        border-top: 7px solid transparent;
        border-bottom: 7px solid transparent;
        border-right: 7px solid #409eff;
    

效果如下
接下来就是要实现空心的效果,这里空心可以想象成两个大小不同的三角形叠加,形成边框的效果,于是在外三角形的div中添加一个内三角形,用同样的方式实现填色,效果如下

第二个三角形位于第一个三角形之下,是因为第一个div的宽高为0,内部的元素便会从div远点开始渲染,因此,将外三角的 position属性设为relative,内三角设为absolute,并经过简单的数学计算便可得到嵌套的三角形,代码如下:

    .sjx-outer
        width: 0;
        height: 0;
        border-top: 7px solid transparent;
        border-bottom: 7px solid transparent;
        border-right: 7px solid #409eff;
        position: relative;
    

    .sjx-inner
        border-top: 6px solid transparent;
        border-bottom: 6px solid transparent;
        border-right: 6px solid #ecf5ff;
        top: -6px;
        left: 1px;
        position: absolute;
    

效果如下

但和最终要实现的效果还有差距,右边长方形的一部分边框要去掉,这个时候我突然想到,如果两个三角形不是一大一小,而是相同大小,而叠加的时候将内三角向右移动一个像素,这样便能实现只有左边是有边框的,如下图所示。

同时,内三角向右偏移了一个像素,刚好能将长方形左边的边框遮挡住,这样刚好最终效果就完美实现啦,如图:

最终代码:

    .tag
        padding-left: 10px;
        padding-right: 10px;
        border-radius: 5px;
        background-color: #ecf5ff;
        border: 1px solid #409eff;
        color: #409eff;
        display: flex;
    
    .sjx-outer
        width: 0;
        height: 0;
        border-top: 7px solid transparent;
        border-bottom: 7px solid transparent;
        border-right: 7px solid #409eff;
        position: relative;
    

    .sjx-inner
        border-top: 7px solid transparent;
        border-bottom: 7px solid transparent;
        border-right: 7px solid #ecf5ff;
        top: -7px;
        left: 1px;
        position: absolute;
    

以上是关于用原生CSS实现标签样式的主要内容,如果未能解决你的问题,请参考以下文章

用原生CSS实现标签样式

js实现addClass添加样式

想在一个div里面添加图片,用js怎么写啊?

web前端鼠标放在div标签制成的盒子上如何实现图片一秒内由正方形变为圆形在变?

div+css中将默认的单选按钮样式(圆的)变成正方形的样式怎么写?

用JavaScript修改CSS属性的代码