css
代码, 因此想来想去仍是本身作一个
能自动生成css三角形代码的工具吧.
在线css三角形生成器预览

css
代码. 开发完这个工具以后笔者不再用担忧还须要手写三角形代码了. (上班摸鱼也成了可能, 确实不少时候就是不想写代码还想要有钱拿) 在文末笔者会附上
css
工具的在线地址, 接下来咱们来看看具体实现流程.
实现css三角形生成器
css
和
js
编程有必定的基础, 好比css3的
transform
,
transition
, 布局, 盒模型,
border
边界特性等.
-
生成任何大小的三角形(size) -
生成不一样位置的三角形(direction) -
生成不一样角度的三角形(rotate) -
生成不一样背景色的三角形(color, 其实这个实不实现无所谓, 主要是笔者连这个代码都懒的写)
css
生成器界面, 以下:
css
实现三角形的原理.
1.css画三角形的原理
css
实现三角形的方案, 这里笔者介绍一个通用的方法, 也就是用
border
来实现三角形, 咱们先来看下面的图示:
width
小于自身
border
宽度时的样子以及当box宽度为零而
border-width
不为零时的样子. 经过图形一分析是否是很容易联想到若是我只要一个边有颜色,其余都为透明面是否是就能变成三角形了呢?
2.编辑器实现
vue3+ element plus
,
react + antd4.0
, 笔者这里采用
react
方案实现, 颜色选择器采用社区比较有名的
react-color
.
react
组件的
state
或者
vue
的
vuex
(虽然不用vuex也能够将data提高)来共享状态.
3. 预览区域实现
form
数据来绑定到三角形元素的样式上便可. 画布的背景这里笔者也是用
css
实现的, 以下图:
.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;
}
css
的
border
的几个方向属性都会变, 好比三角形的方向向上时, 咱们的
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;
}
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]
}
4. 代码实时展现实现
JSON.stringify(triangleCss, null, 4).replaceAll(/"/g, '').replaceAll(/,/g, ';')
以为有用 ?喜欢就收藏,顺便点个赞吧,你的支持是我最大的鼓励!微信搜 “ 趣谈前端”,发现更多有趣的H5游戏, webpack,node,gulp,css3,javascript,nodeJS,canvas数据可视化等前端知识和实战.
本文分享自微信公众号 - 趣谈前端(beautifulFront)。
若有侵权,请联系 support@oschina.cn 删除。
本文参与“OSC源创计划”,欢迎正在阅读的你也加入,一块儿分享。javascript