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