在线css三角形生成器 「干货」[通俗易懂]

在线css三角形生成器 「干货」[通俗易懂]为了提高前端开发效率,笔者先后写了上百个前端工具,有些是给公司内部使用的,有些单纯是因为自己太“懒”,不想写代码,所以才“被迫”做的.接下来介绍的一款工具——css三角形生成器也是因为之前想要解放设计师的生产力,自己又懒得切图或者写css代码,所以想来想去还是自己做一个能自动生成css三角形代码的工具吧.接下来笔者就来带大家介绍一下这个工具的用途和实现方案,方便大家后续可以扩展出更多的“懒人工具”.在线css三角形生成器预览由预览动画我们可以看到通过在线工具我们可以轻松配置..

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全家桶1年46,售后保障稳定

为了提高 前端开发 效率, 笔者先后写了上百个前端工具, 有些是给公司内部使用的, 有些单纯是因为自己太“”, 不想写代码, 所以才“被迫”做的. 接下来介绍的一款工具——css三角形生成器也是因为之前想要解放设计师的生产力, 自己又懒得切图或者写css代码, 所以想来想去还是自己做一个能自动生成css三角形代码的工具吧.

接下来笔者就来带大家介绍一下这个工具的用途和实现方案, 方便大家后续可以扩展出更多的“懒人工具”.

在线css三角形生成器预览

在线css三角形生成器 「干货」[通俗易懂] 由预览动画我们可以看到通过在线工具我们可以轻松配置各种想要的三角形, 并且能实时查看css代码. 开发完这个工具之后笔者再也不用担心还需要手写三角形代码了. (上班摸鱼也成了可能, 确实很多时候就是不想写代码还想要有钱拿) 在文末笔者会附上css工具的在线地址, 接下来我们来看看具体实现流程.

实现css三角形生成器

因为这个工具的需求来自于前端, 所以肯定是要对cssjs编程有一定的基础, 比如css3的 transform, transition, 布局, 盒模型, border边界特性等.

和笔者之前写的任何一个开源工具一样, 在开发项目前一定要明确需求和目标, 这里笔者简单整理一下需求:

  • 生成任何大小的三角形(size)
  • 生成不同位置的三角形(direction)
  • 生成不同角度的三角形(rotate)
  • 生成不同背景色的三角形(color, 其实这个实不实现无所谓, 主要是笔者连这个代码都懒的写)

了解需求之后我们可以大致画一个简单的原型图来代表我们的css生成器界面, 如下: 在线css三角形生成器 「干货」[通俗易懂]

有了原型图, 我们可以得到如下的任务细分图: 在线css三角形生成器 「干货」[通俗易懂]

这里笔者要提的一点是其实以上流程对于任何项目都适用, 包括你遇到的难解的问题, 都可以一步步把思路先理清楚, 把大目标拆解为一块块的小目标, 然后逐个击破, 这样大难题也就解决了.

接下来我们先分析一下用css实现三角形的原理.

1.css画三角形的原理

其实笔者在之前的文章中也分享过3种以上的使用css实现三角形的方案, 这里笔者介绍一个通用的方法, 也就是用border来实现三角形, 我们先来看下面的图示: 在线css三角形生成器 「干货」[通俗易懂] 以上是展示了当box元素的width小于自身border宽度时的样子以及当box宽度为零而border-width不为零时的样子. 通过图形一分析是不是很容易联想到如果我只要一个边有颜色,其他都为透明面是不是就能变成三角形了呢?

的确也是这么实现的, 知道这个原理之后我们来继续往下实现所见即所得的“三角形”.

2.编辑器实现

编辑器实现也是前端老生长谈的话题了, 笔者在H5-Dooring项目中写过一个非常复杂的编辑器, 但是这里我们只要需要一个静态且简单的编辑器就够了. 如下图的界面:

在线css三角形生成器 「干货」[通俗易懂] 我们可以用任何我们擅长的框架和组件库来实现, 比如·vue3+ element plus, react + antd4.0, 笔者这里采用react方案实现, 颜色选择器采用社区比较有名的react-color.

编辑器界面的代码笔者就不一一介绍了, 相信大家都能实现, 我们这里来说一下样式数据共享逻辑: 在线css三角形生成器 「干货」[通俗易懂]

我们要想保证预览区域和css代码预览区域能随表单值变化而实时变化, 这里一定要将表单数据共享出来, 我们可以用react组件的state或者vuevuex(虽然不用vuex也可以将data提升)来共享状态.

3. 预览区域实现

预览区域实现其实有了以上的分析其实很好实现了, 只需要利用共享的form数据来绑定到三角形元素的样式上即可. 画布的北背景这里笔者也是用css实现的, 如下图: 在线css三角形生成器 「干货」[通俗易懂]

感兴趣可以cv一下, 这代码如下:

.previewArea {
  display: inline-block;
  width: 360px;
  height: 360px;
  background: #eee;
  background-image: linear-gradient(45deg,rgba(0,0,0,.2) 25%, transparent 0, transparent 75%, rgba(0,0,0,.2) 0),
                  linear-gradient(45deg,rgba(0,0,0,.2) 25%, transparent 0, transparent 75%, rgba(0,0,0,.2) 0);
  background-size: 30px 30px;
  background-position: 0 0,15px 15px;
}
复制代码

Jetbrains全家桶1年46,售后保障稳定

还有一个比较关键的一点是如何实现切换三角形的方向的问题 我们都知道切换方向后cssborder的几个方向属性都会变, 比如三角形的方向向上时, 我们的css如下:

{
  border-width: 0 60px 60px 100px;
  border-color: transparent transparent #06c transparent;
}
复制代码

三角形的方向向下时, 我们的css如下:

{
  border-width: 100px 60px 0 60px;
  border-color: #06c transparent transparent transparent;
}
复制代码

同样左右也是类似的, 所以我们要维护4中样式, 如果后期想加一下左上, 右上, 左下, 右下, 这样代码会非常难以维护(不是if else就是switch, 说实话switch只适合8个条件一下的判断), 所以笔者这里用对象法来解决它, 并将其封装成一个函数:

const getBorderWidthAndColor = (direction:string, w:number, h:number, color:string) => {
    const borderWidthAndColor:any = {
      '1': {
        borderWidth: `0 ${w/2}px ${h}px ${w/2}px`,
        borderColor:`transparent transparent ${color} transparent`
      },
      '2': {
        borderWidth: `${h}px ${w/2}px 0 ${w/2}px`,
        borderColor:`${color} transparent transparent transparent`
      },
      '3': {
        borderWidth: `${h/2}px ${w}px ${h/2}px 0`,
        borderColor:`transparent ${color} transparent transparent`
      },
      '4': {
        borderWidth: `${h/2}px 0 ${h/2}px ${w}px`,
        borderColor:`transparent transparent transparent ${color}`
      }
    }
    return borderWidthAndColor[direction]
  }
复制代码

其实属性预览比如宽度, 高度, 背景色这些都好处理, 笔者这里就不一一介绍了. 预览如下: 在线css三角形生成器 「干货」[通俗易懂]

4. 代码实时展示实现

至于代码实时展示在文本框中, 这个也是很容易实现, 我们只要要把拿到的数据实时展示到文本框里即可. 由于笔者采用的css module 和react方式实现的, 所以需要对css进行额外处理, 比如将对象格式转化为css规范的格式, 所以需要加如下步骤:

JSON.stringify(triangleCss, null, 4).replaceAll(/"/g, '').replaceAll(/,/g, ';')
复制代码

这样, 一个css三角形生成器就做好了, 大家还可以在此基础上继续扩展, 比如支持多边形, 六角形, ⭐五角形等, 也是完全没问题的.

在线体验地址: http://49.234.61.19/tool/cssTriangle

作者:徐小夕

 

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/230934.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 使SplitContainer中某个Panel宽度、高度不变[通俗易懂]

    使SplitContainer中某个Panel宽度、高度不变[通俗易懂]1.在窗体load时加入:splitContainer_AllLayout.SplitterDistance=120;上边代码字面意思是将水平、或垂直分开的SplitContainer的分区长度设置为1202.只要设置FixedPanel属性为希望宽度不变的panel即可:3.再设置控件不可拖动:splitContainer_AllLayout.IsSplitter…

    2022年7月18日
    20
  • 分析开源项目[通俗易懂]

    分析开源项目[通俗易懂]手把手教你分析开源项目不知道代码怎么来的?代码跑不起来?项目对自己有帮助,不会模块化分析?任何一个开源项目,都可以让自己得到提升!这里以EL-ADMIN为例https://el-admin.vip/1、观察开源项目后端代码:前端代码:2、开源项目下载可使用zip下载,或者Git观察:用了哪些技术(springboot,vue,redis,)是否有数据库(mysql)你的环境是否匹配(Java,Maven,npm,nodejs,)通过了,然后再想办法运行3、跑

    2022年6月11日
    42
  • Unity 如何减少DrawCall「建议收藏」

    Unity 如何减少DrawCall「建议收藏」阅读目录前言:看看优化需要从哪里着手?CPU的方面的优化:GPU的优化内存的优化回到目录前言:刚开始写这篇文章的时候选了一个很土的题目。。。《Unity3D优化全解析》。因为这是一篇临时起意才写的文章,而且陈述的都是既有的事实,因而给自己“文(dou)学(bi)”加工留下的余地就少了很多。但又觉得这块是不得不提的一个地方,平时见到很多人对此处也给予了忽略了事,需

    2026年1月26日
    1
  • 怎么修改WiFi频段_wifi5g与2.4g怎么切换

    怎么修改WiFi频段_wifi5g与2.4g怎么切换在网络应用中对带宽要求较高的在线视频、高清点播等业务,如果使用5GHz频段进行传输,无线连接稳定性和传输速速率将更有保障,在这里以TP-LINK双频无线路由器作为演示,教你如何设置使用5GHz频段无线路由器。下面以TL-WDR4310为例介绍双频无线路由器在5GHz频段下的设置步骤。步骤一:在浏览器的地址栏上输入“192.168.1.1”打开路由器管理界面,输入用户名和密码(默认均为“admin”…

    2022年10月20日
    3
  • localdate转date时区问题_时间戳和LocalDateTime和Date互转和格式化[通俗易懂]

    localdate转date时区问题_时间戳和LocalDateTime和Date互转和格式化[通俗易懂]一前言二时间戳与LocalDateTime互转2.1LocalDateTime转时间戳方式一这边值得一提的是在中国的时区偏移是8小时,本次示例转的时间戳是秒级别,得到的值是一个long值;知识追寻者这边是当前时间,故读者得到的结果与知识追寻者得到的结果不一致;读者可以使用站长工具进行测试校验@TestpublicvoidlocalTimeTest1(){//获得当前时间Local…

    2022年9月27日
    3
  • RNN:timestep、inputsize、Batchsize的区别「建议收藏」

    近期读了一些关于LSTM的文章,但仍旧很难理解,关键就是不懂输入、输出是什么,相比于图像处理的CNN,RNN特别抽象。昨晚花了很大的精力去理解“遗留状态”这个概念,现在终于明白了一些,关键在timestep这个概念。关于timestep我们看到的所有的RNN结构图,其实都是在一个timestep中的,而不是整个序列。(这句话很简单,但真的是花了很长时间才领悟到的)以下引用自知乎回答:[我的…

    2022年4月16日
    163

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号