CSS ์๋ ์ฃผ์ ์ด ๊ฐ๋ฅํ Toast ๋ผ์ด๋ธ๋ฌ๋ฆฌ ๊ฐ๋ฐ๊ธฐ
ํ๋ก์ ํธ ๊ฐ์
ํ๋ ์์ํฌ์ ๋ฌด๊ดํ๊ฒ ์ฌ์ฉํ ์ ์๋ ๊ฒฝ๋ํ๋ Toast ์๋ฆผ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ๊ฐ๋ฐํ์ต๋๋ค.
๊ฐ์ฅ ํฐ ํน์ง์ CSS ํ์ผ์ ๋ณ๋๋ก importํ์ง ์์๋ ์๋์ผ๋ก ์คํ์ผ์ด ์ ์ฉ๋๋ค๋ ์ ์
๋๋ค.
ํต์ฌ ๋ชฉํ
- CSS ํ์ผ ์์ด๋ ์์ ํ ์๋ํ๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ
import { toast } from "js-toastify"ํ ์ค๋ก ์ฌ์ฉ ๊ฐ๋ฅ- ์์ ํ ์ปค์คํฐ๋ง์ด์ง ์ง์
- TypeScript ์๋ฒฝ ์ง์
- ๊ฒฝ๋ํ (3.8KB)
๊ธฐ์ ์คํ
| ๊ธฐ์ | ์ญํ |
|---|---|
| TypeScript | ํ์ ์์ ์ฑ๊ณผ ๊ฐ๋ฐ ํธ์์ฑ |
| Rollup | ๋ฒ๋ค๋ง ๋ฐ ESM/CommonJS ์ง์ |
| CSS Variables | ์ปค์คํฐ๋ง์ด์ง ๊ฐ๋ฅํ ์คํ์ผ ์์คํ |
| Vanilla JavaScript | ํ๋ ์์ํฌ ์์กด์ฑ ์ ๊ฑฐ |
ํต์ฌ ๊ตฌํ ์์ด๋์ด
1. CSS ์๋ ์ฃผ์ ์์คํ
๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ importํ๋ ์๊ฐ, ๋ด๋ถ์ ์ผ๋ก CSS ๋ฌธ์์ด์ <style> ํ๊ทธ๋ก ์ฃผ์
ํ์ฌ
์ฌ์ฉ์๊ฐ ๋ณ๋๋ก CSS ํ์ผ์ importํ์ง ์์๋ ์คํ์ผ์ด ์ ์ฉ๋๋๋ก ๋ง๋ค์์ต๋๋ค.
const style = document.createElement("style");
style.textContent = `
.toast {
position: fixed;
bottom: 20px;
left: 50%;
transform: translateX(-50%);
background: var(--toast-bg, #333);
color: var(--toast-color, #fff);
padding: 10px 16px;
border-radius: 6px;
font-size: 14px;
opacity: 0.95;
transition: opacity 0.3s ease;
}
`;
document.head.appendChild(style);
2. CSS ๋ณ์๋ฅผ ํ์ฉํ ์ปค์คํฐ๋ง์ด์ง
CSS ๋ณ์๋ฅผ ์ฌ์ฉํ๋ฉด ์ฌ์ฉ์ ์ ์ ์คํ์ผ์ ์์ฝ๊ฒ ์ ์ฉํ ์ ์์ต๋๋ค.
:root {
--toast-bg: #222;
--toast-color: #fff;
--toast-radius: 8px;
}
3. Rollup ์ค์
import typescript from "@rollup/plugin-typescript";
import { terser } from "rollup-plugin-terser";
import css from "rollup-plugin-import-css";
export default {
input: "src/index.ts",
output: [
{ file: "dist/index.esm.js", format: "esm", sourcemap: true },
{ file: "dist/index.cjs.js", format: "cjs", sourcemap: true },
],
plugins: [typescript(), css(), terser()],
};
rollup-plugin-import-css๋ฅผ ํตํด CSS ํ์ผ์ ๋ฒ๋ค์ ํฌํจ์ํค๊ณ , terser๋ก ์ต์ข ๋ฒ๋ค ํฌ๊ธฐ๋ฅผ ์ต์ํํ์ต๋๋ค.
์ฌ์ฉ๋ฒ
๊ธฐ๋ณธ ์ฌ์ฉ๋ฒ
import { toast } from "js-toastify";
toast("Hello from js-toastify!");
์ปค์คํฐ๋ง์ด์ง
:root {
--toast-bg: #0055ff;
--toast-color: #fff;
--toast-radius: 10px;
}
toast("Custom styled toast!");
npm ๋ฐฐํฌ ๊ณผ์
1.ํจํค์ง ์ด๋ฆ ์ถฉ๋ ํด๊ฒฐ
์ฒ์ js.toast๋ผ๋ ์ด๋ฆ์ผ๋ก ๋ฐฐํฌ๋ฅผ ์๋ํ์ผ๋, ๊ธฐ์กด ํจํค์ง์ ์ด๋ฆ์ด ์ ์ฌํ์ฌ ์ด๋ฆ ์ถฉ๋ ์๋ฌ๊ฐ ๋ฐ์ํ์ต๋๋ค.
์ต์ข ์ ์ผ๋ก js-toastify ์ด๋ฆ์ผ๋ก ๋ฐฐํฌ์ ์ฑ๊ณตํ์ต๋๋ค.
2. ์ต์ข ๋ฐฐํฌ
https://www.npmjs.com/package/js-toastify
๊ฒฐ๊ณผ
ํญ๋ชฉ ๋ด์ฉ ํจํค์ง ํฌ๊ธฐ 3.8KB (์์ถ ํ) ๋ฒ๋ค ํฌ๊ธฐ 14.6KB (์์ถ ํด์ ) ํ์ผ ์ 7๊ฐ TypeScript ์ง์ ๋ชจ๋ ๋ธ๋ผ์ฐ์ ํธํ์ฑ
ํต์ฌ ์ฑ๊ณผ
CSS ํ์ผ import ์์ด๋ ๋ฐ๋ก ์ฌ์ฉ ๊ฐ๋ฅ
CSS ๋ณ์๋ก ์์ ํ ์ปค์คํฐ๋ง์ด์ง ๊ฐ๋ฅ
๊ฒฝ๋ํ (3.8KB)
TypeScript ํ์ ์๋ฒฝ ์ง์
React, Vue, Angular ๋ฑ ํ๋ ์์ํฌ ๋ฌด๊ดํ๊ฒ ์ฌ์ฉ ๊ฐ๋ฅ
ํฅํ ๊ณํ
์ ๋๋ฉ์ด์ ์ปค์คํฐ๋ง์ด์ง ์ต์ ์ถ๊ฐ
๋คํฌ/๋ผ์ดํธ ํ ๋ง ์ง์
๋ชจ๋ฐ์ผ UI ์ต์ ํ
์ ๊ทผ์ฑ ๊ฐ์
๊ฐ๋ฐ ํ๊ธฐ
์ด๋ฒ ํ๋ก์ ํธ๋ฅผ ํตํด ์ฌ์ฉ์ ๊ฒฝํ์ ์ต์ฐ์ ์ผ๋ก ํ๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ ์ค๊ณ์ ์ค์์ฑ์ ๊นจ๋ฌ์์ต๋๋ค. CSS ์๋ ์ฃผ์ ์์คํ ์ ํตํด ๊ฐ๋ฐ์๋ค์ด ๋ณ๋์ ์ค์ ์์ด ๋ฐ๋ก ์ฌ์ฉํ ์ ์๋๋ก ๋ง๋ ๊ฒ์ด ๊ฐ์ฅ ํฐ ์ฑ๊ณผ๋ผ๊ณ ์๊ฐํฉ๋๋ค.
๋ํ CSS ๋ณ์ ๊ธฐ๋ฐ ์ปค์คํฐ๋ง์ด์ง ์์คํ ์ผ๋ก ์ ์ฐ์ฑ๊ณผ ์ฌ์ฉ์ฑ์ ๋ชจ๋ ํ๋ณดํ ์ ์์์ต๋๋ค. ์์ผ๋ก๋ ๋ ๋์ DX(Developer Experience)๋ฅผ ์ ๊ณตํ๋ UI ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ง์์ ์ผ๋ก ์ฐ๊ตฌํ ์์ ์ ๋๋ค.