在只使用原生 hr 元件的條件限制下,盡量還原出 MUI Divider 能做到的效果。
透過 props.orientation
來控制 styleByOrientation
要設定 borderBottom
或 borderLeft
的樣式(白話:線要畫在底部還是側邊)。
而為了要允許漸層色背景效果,使用 props.gradientColor
來決定是否使用 border-image
來設定分隔線背景。
基本上就是透過偽元素的 content
來放置文字(或圖片內容),再透過 position: absolute
與 transform
等來調整標籤位置。注意 defaultStyle
有設定 position: relative
與 overflow: visible
來讓標籤內容可以不受到 hr 的高度限制,能正常顯示在畫面上。
標籤左右(上下)側的空間效果目前僅能透過「設定標籤 padding
並指定 background-color
使用與目前背景一致的顏色」來達成(可修改 labelStyleHorizontalHr
的 backgroundColor
來觀察)。故在使用「分隔線+標籤」時,需根據分隔線放置的背景顏色來修改 props.labelStyle
中的 background-color
設定值。
如果不侷限在使用語意化元件(semantic html)的話,這部份可以非常簡單地透過親元件設定 display: flex; align-items: center;
搭配子元件畫線+放置標籤來達成。基本上這也是 MUI 的作法。
賣點是漸變色背景與 hr 原生元件。不強求這兩點的話,用人家寫好的東西會比較輕鬆 (´-ω-`)