[Tailwind]More about Tailwind
TailwindCSS๋ html/xml ๊ตญ๋ฉด์์ style๋ฅผ ์ผ๊ด์ ์ผ๋ก ํธ๋ํนํ ์ ์๊ฒ ํ๊ณ , ๋ณด๋ค ๊ฐํธํ ๋ฐ์ํ ์ ์, ํ๋ฆฌ์ ์ ๊ณต ๋ฑ ์ฌ๋ฌ ์ด์ ์ด ์์ง๋ง, ํ๋ก์ ํธ์ ๋ณต์ก๋๊ฐ ์ฆ๊ฐํ๋ฉด์ ํ๋ ์์ํฌ์ ๋ํ ์ฌ๋ฌ ์๋ฌธ ๋๋ ํ๊ณ๋ฅผ ๋ง๋ ์ ์๋ค. ๋ณธ๋ฌธ์์๋ ํ์๊ฐ ํ๋ก์ ํธ๋ฅผ ์งํํ๋ฉฐ ๊ณต๋ถํ ๋ช ๊ฐ์ง Tailwind ์์๊ณผ ์ฃผ์์ ์ ๊ณต์ ํ๊ณ ์ ํ๋ค.
๋์ className
- Tailwind className ์ผ๋ถ๋ฅผ ์นํํ๋ฉด ์๋ํ์ง ์๋๋ค.
const len = 10;
<div className='w-screen h-screen relative'> //Container
<div className={`w-10 h-${len}`}></div> //box
</div>
//not working
๊ณต์๋ฌธ์์ ๋ฐ๋ฅด๋ฉด, ๋์ ํด๋์ค๋ช ์ ์์ ํ ํด๋์ค ์ด๋ฆ์ผ๋ก ์ค์ ํด์ผ ํ๋ค.
-> className ์ ์ฒด๋ฅผ ์นํํ๋ ๊ฒ์ด ๊ถ์ฅ๋๋ค.
const height = 'h-10';
<div className='w-screen h-screen relative'> //Container
<div className={`w-10 ${height}`}></div> //box
</div>
-> template literal๋ฅผ ์ด์ฉํด ์์ฑํ ๋์ ํด๋์ค๋ช ์ arbitrary value์ ํน์ ๊ฒฝ์ฐ๋ฅผ ์ ์ธํ๊ณ ๋ ์๋ํ๋ค.
- Preset value ํ ์คํธ
const color = 'white';
const colorCN0 = `bg-white`;
const colorCN1 = 'bg-'+color; //string concatenation
const colorCN2 = `bg-${color}`; //template literal
<div className=" ... ">
<div className={`w-10 h-10 bg-${color} absolute top-10 `}></div>
//working
<div className={`w-10 h-10 bg-${color} absolute top-20 `}></div>
//working
<div className={`w-10 h-10 ${colorCN0} absolute top-30 `}></div>
//working
<div className={`w-10 h-10 ${colorCN1} absolute top-40 `}></div>
//not working
<div className={`w-10 h-10 ${colorCN2} absolute top-50 `}></div>
//working
</div>
- Arbitrary value ํ ์คํธ
const color = '#888888';
const colorCN0 = `bg-[#888888]`;
const colorCN1 = `bg-[${color}]`;
const colorCN2 = `bg-${`[${color}]`}`;
<div className=" ...">
<div className={`w-10 h-10 bg-[${color}] absolute top-10 `}></div>
//working
<div className={`w-10 h-10 bg-${`[${color}]`} absolute top-20 `}></div>
//working
<div className={`w-10 h-10 ${colorCN0} absolute top-30 `}></div>
//working
<div className={`w-10 h-10 ${colorCN1} absolute top-40 `}></div>
//not working
<div className={`w-10 h-10 ${colorCN2} absolute top-50 `}></div>
//working
</div>
๊ฒฐ๋ก
ํ๋์ ํด๋์ค๋ช ์ string concatenation์ผ๋ก ๋ง๋ค ์ ์์์ ์ฃผ์ํ์.
className concatenation
- ์๋ก ๋ค๋ฅธ ์ฑ๊ฒฉ์ ํด๋์ค๋ช ์ ๋ฐ๋ก ์ ์ธํด ๋ชจ๋ํํ๋ฉด ์ฉ์ดํ๋ค.
const size = 'w-10 h-10 ';
const color = 'bg-white ';
const position = 'absolute top-10 left-10';
<div className={`${size+color+position}`}></div>
์ฃผ์) ๊ฐ string๋ง๋ค ๋ง์ง๋ง์ ๊ผญ white space๋ฅผ ๋จ๊ฒจ๋์ด์ผ ๊ฐ๊ฐ์ className์ ์ธ์ํ๋ค.
CSS module + Tailwind
TailwindCSS๊ฐ ๊ฐํธํ ๊ฒ์ ์ฌ์ค์ด์ง๋ง, ์ ๋๋ฉ์ด์ , ์ปดํฌ๋ํธ ๊ฐ ์ํธ์์ฉ ๋ฑ์์๋ ๊ธฐ์กด CSS๋ณด๋ค ๋ฒ๊ฑฐ๋กญ๊ณ ๊ตฌํ์ด ์ด๋ ค์์ง๋ ๊ฒฝ์ฐ๊ฐ ์๋ค. ์ด๋ฐ ๊ฒฝ์ฐ ๊ธฐ์กด ์ฌ์ฉํ๋ CSS module๊ณผ ํผ์ฉ์ด ๊ฐ๋ฅํ๋ค.
import styles from './a.module.css';
<div className={`${styles.glow} w-10 h-10 absolute top-12 left-12 bg-white`}></div>
/* a.module.css */
.glow{
animation: glow_kf 1s ease-in-out infinite;
}
@keyframes glow_kf{
0%{
opacity: 1;
}
50%{
opacity: 0;
}
100%{
opacity: 1;
}
}
์ฃผ์ ์ฒ๋ฆฌ
Tailwind๋ ๊ธฐ์กด CSS์ ๋ฌ๋ฆฌ ์ค๋ฐ๊ฟ์ด ์์ด์ attribute๋ณ๋ก ์ฃผ์์ฒ๋ฆฌ ํ๊ธฐ๊ฐ ์ด๋ ต๋ค.
๊ทธ๋ด ๋ ์ปดํ์ผ๋ฌ๋ ์ชผ๊ฐ์ง className์ ์ธ์ํ์ง ๋ชปํ๋ฏ๋ก ์ค๊ฐ์ space ํ๊ฐ๋ฅผ ๋ฃ์ด์ฃผ๋ฉด ๋๋ค.
const ThumbNail = ({item}:{item: albumProps}) =>{
const {thumbnail,len,url} = item;
return <>
<Image src={thumbnail[0]} alt='pic' className='object-fill rounded-md relative z-11' />
{len >=2 && <Image src={thumbnail[1]} alt='anotherpic'
className="object-fill r ounded-md a bsolute left-0 top-0 z-10 rotate-6"/>}
</> // rounded_md์ absolute๋ฅผ ์ฃผ์ํ ์ํ
}
์ปดํฌ๋ํธ ์ด๋ฆ
Tailwind๋ ํด๋์ค๋ช ์ ์ปดํฌ๋ํธ์ ๋ช ์์ ์ธ ์ด๋ฆ์ ์ ์ง ์์์ ์ด๋ค ์ญํ ์ธ์ง ์๊ธฐ ์ด๋ ค์ธ ๋๊ฐ ์๋ค.
์ธ์์ด ๋์ง ์๋ ํด๋์ค๋ช ์ ์ปดํ์ผ ๊ณผ์ ์์ ์ง์์ง๊ธฐ ๋๋ฌธ์, ๋ณธ์ธ๋ง์ ๊ท์น์ ์ ํด ํด๋์ค๋ช ๋ด ์ด๋ฆ ๋๋ ๊ฐ๋จํ ๋ฉ๋ชจ๋ฅผ ์ฒจ๋ถํ๋ ๋ฐฉ๋ฒ์ด ์๋ค.
<div className="(outer container) w-10 ...">
<div className="(inner container) w-full ...">
<div className="(block) w-full ...">
<p className="(content) ..."></p>
</div>
</div>
</div>
์๋ชป๋ ์ ๋ณด๋ ์ ๋ณด๋ฐ๋๋๋ค.
edited by ์ ์ ํ