App.scss에 저장되어 있는 색깔변수
:root {
--color-chart-c-04: #77E266;
}
디자인 가이드에 적힌 내용
background: rgba(119, 226, 102, 0.80);
box-shadow: 0px 0px 10px 0px rgba(119, 226, 102, 0.50);
style에 적용이 필요한 jsx
<span key={`label-${i}-${j}`} className={`${styles.label}`} style={{
backgroundColor: color,
opacity: '80%',
boxShadow: `0px 0px 10px 0px ${chartColors[index]}`}} />```
개발의 관리를 용의하기 위해 자주 사용되는 색깔은 root에 변수로 설정하였습니다. background 처럼 전체의 opacity를 주는거라면 css나 style에서 간단하게 설정할 수 있지만, jsx에서 var() 값을 가져와서 경우에 따라 다르게 opacity를 적용하는데 문제가 발생했습니다.
chartColors는
['var(--color-chart-c-01','var(--color-chart-c-02','var(--color-chart-c-03','var(--color-chart-c-04',...]
형태의 데이터를 담고있는 배열입니다.
export function extHexToRGB(hex: string, alpha?: number) {
let r = parseInt(hex.slice(1, 3), 16),
g = parseInt(hex.slice(3, 5), 16),
b = parseInt(hex.slice(5, 7), 16);
if (alpha) {
return "rgba(" + r + ", " + g + ", " + b + ", " + alpha + ")";
} else {
return "rgb(" + r + ", " + g + ", " + b + ")";
}
}
먼저 HEX 코드#0000
를 받아서 16진수로 변환하여 rgb의 형태로 변환시켜줍니다.
추가적으로 문제에 필요한 alpha값을 추가해주어 opacity의 변화도 가능하게해줍니다.
export function extChartHexToRGB(chartColor: string, alpha: number = 1) {
let rgb = '';
switch (chartColor) {
case 'var(--color-chart-c-01)':
rgb = extHexToRGB('#D67EF5', alpha)
break;
case 'var(--color-chart-c-02)':
rgb = extHexToRGB('#F2D226', alpha)
break;
case 'var(--color-chart-c-03)':
rgb = extHexToRGB('#64CFE7', alpha)
break;
case 'var(--color-chart-c-04)':
rgb = extHexToRGB('#77E266', alpha)
break;
case 'var(--color-chart-c-05)':
rgb = extHexToRGB('#0F82EC', alpha)
break;
case 'var(--color-chart-c-06)':
rgb = extHexToRGB('#E095AC', alpha)
break;
case 'var(--color-chart-c-07)':
rgb = extHexToRGB('#F3851F', alpha)
break;
case 'var(--color-chart-c-08)':
rgb = extHexToRGB('#17A58C', alpha)
break;
case 'var(--color-chart-c-09)':
rgb = extHexToRGB('#8879EA', alpha)
break;
case 'var(--color-chart-c-10)':
rgb = extHexToRGB('#866E6E', alpha)
break;
case 'var(--color-chart-c-11)':
rgb = extHexToRGB('#1000C8', alpha)
break;
}
return rgb
}
현재 개발하고 있는 컴포넌트는 차트로 최대 11개의 차트색깔을 미리 설정해두었습니다. 다른 차트에서도 사용할 수 있게 var() 값이 들어오면 원하는 opacity를 가진 rgbga 문자열을 반환해줍니다.
const color = chartColors[index];
<span key={`label-${i}-${j}`} className={`${styles.label}`} style={{
backgroundColor: color,
opacity: '80%',
boxShadow: `0px 0px 10px 0px ${extChartHexToRGB(color, 0.5)}`}}>
background는 var() 형식으로 설정한 css변수값이 들어가있습니다.
하지만,
boxShadow는 rgba() 값으로 원하는 값이 들어가있고 적용된 모습까지 확인 할 수 있습니다! 👍👍👍