坚果大叔 坚果大叔
  • 首页
  • 闲言碎语
  • 技术
  • 生活
  • 记录
  • 朋友
  • 热点新闻
  • 常用代码
  • 工具箱
  • 关于
首页 › 技术 › 纯CSS实现带有画布边框和刻度尺的样式

纯CSS实现带有画布边框和刻度尺的样式

坚果大叔
2023-11-27 16:48:06技术阅读 10,090

前提

有一个ui需求需要实现类似在线画布功能那种边框带刻度尺的效果。主要是上边框和左边框需要实现此UI效果。

效果如下

纯CSS实现带有画布边框和刻度尺的样式-坚果大叔


纯CSS实现带有画布边框和刻度尺的样式-坚果大叔

业务需求

除了上面的效果之外,还需要每个大刻度是需要点击选中的。并且选中还有单独的选中样式。

解决思路

1、第一种想法就是通过div实现,大刻度用边框来实现,里面的小刻度用10个标签来实现。

2、通过css的background-image属性种 linear-gradient 方法来实现。

3、第一种和第二种结合,外侧大标签用border来实现,里面的小刻度用background-image来实现。

实现方案

尝试过后可以完美实现刻度尺的样式。但是因为实际需求需要可以点击选中,而且选中后刻度颜色需要改变所以选中第三种方式来实现。

具体代码

数据结构

cemeteryData: [
    {
      name: 'B1',
      id: 'b1',
      active: false,
    },
    {
      name: 'B2',
      id: 'b2',
    },
]

HTML代码



{{ index + 1 }}列

CSS代码


.topScale {
  width: 100%;
  display: flex;

  .scaleItem {
    position: relative;
    flex: 1;
    height: 40px;
    text-align: center;
    cursor: pointer;
    border: 1px solid #83aef9;
    border-top: none;
    border-right: none;

    &:last-child {
      border-right: 1px solid #83aef9;
    }

    .scale {
      position: absolute;
      bottom: 0;
      left: 10%;
      width: 80%;
      height: 10px;
      background-image: linear-gradient(90deg, #83aef9 1px, transparent 0);
      background-size: 75px 0px, 11% 10px;
    }

    &.scaleActive {
      --active-color: #fddae2;
      background-color: var(--active-color);
      border-left-color: var(--active-color);
      border-bottom-color: var(--active-color);

      .scale {
        background-image: linear-gradient(90deg, var(--active-color) 1px, transparent 0);
      }

      &:last-child {
        border-right-color: var(--active-color);
      }

      + .scaleItem {
        border-left-color: var(--active-color);
      }
    }
  }
}

其中有两个地方需要注意,一个是 background-size: 75px 0px, 11% 10px; 设置横向的时候小刻度的间隔,10px是设置纵向的时候刻度的间隔。

还有个就是选中之后的样式,因为大标签的刻度是用的border来实现的。为防止边框重叠设置的右边框没有,只有最后一个元素的右边框才有。所以在选中的时候当前item的右边框是没有的,所以就需要将选中右侧item的左边框设置选中颜色。 通过 + .scaleItem来选中邻居class.

实现后的效果

纯CSS实现带有画布边框和刻度尺的样式-坚果大叔

赞赏 赞(4)
远方
上一篇
TrollStore 2 已发布,附超详细安装教程~
下一篇
在小程序中查看
搜你想看的
聚合文章
一些装机单
CSS实现 Tab hover 下划线跟随
ES6入门之Module
最近为啥没更新?
闲言碎语
Memos
npm install 出现 Error:EISDIR:illegal operation on a directory 的错误提示!
2025-03-31 19:02:11
559 0 0
iphone 利用 Scriptable 添加网上国网电费小组件
2025-01-06 20:40:20
4,996 6 2
在博客中加上memos记录展示。
2024-12-25 23:41:27
2,329 5 2
网页点击平滑滚动效果~
2024-10-17 16:43:08
2,033 4
4
  • 4
博主

一位佛系的前端开发者,略通摄影,乐于尝试新事物,热衷于美食。

友链
故事胶片
公众号
坚果大叔 执行上下文 卖坚果的怪叔叔 Dacking
Copyright © 2017-2025 坚果大叔

开往-友链接力

萌ICP备20230818号

苏ICP备18048410号-3
  • 首页
  • 闲言碎语
  • 技术
  • 生活
  • 记录
  • 朋友
  • 热点新闻
  • 常用代码
  • 工具箱
  • 关于
# CSS # # JavaScript # # vue # # 微信 # # 生活 #
坚果大叔
317
文章
125
评论
365
喜欢