ChatGPT와 Next.js 공부

Tailwind CSS로 자주 사용하는 UI 컴포넌트 모음

그랜파 개발자 2025. 5. 14. 10:33

Tailwind CSS로 자주 사용하는 UI 컴포넌트 모음을 소개합니다. 이 컴포넌트들은 HTML + Tailwind 클래스로 쉽게 사용할 수 있고, 복사해서 바로 붙여넣어도 잘 작동합니다.


🎯 1. 버튼 (Button)

<button class="bg-blue-600 hover:bg-blue-700 text-white font-semibold py-2 px-4 rounded">
  기본 버튼
</button>
  • 색상, hover, 둥근 테두리 등 간단한 커스터마이징 가능

📦 2. 카드 (Card)

<div class="max-w-sm rounded overflow-hidden shadow-lg bg-white">
  <img class="w-full" src="https://via.placeholder.com/300" alt="Card Image">
  <div class="px-6 py-4">
    <div class="font-bold text-xl mb-2">카드 제목</div>
    <p class="text-gray-700 text-base">카드 설명 텍스트입니다.</p>
  </div>
</div>

🔍 3. 입력 필드 (Input)

<input type="text" placeholder="내용을 입력하세요"
       class="w-full border border-gray-300 px-4 py-2 rounded focus:outline-none focus:ring-2 focus:ring-blue-400" />

✅ 4. 체크박스 / 라디오

<label class="inline-flex items-center">
  <input type="checkbox" class="form-checkbox text-blue-600">
  <span class="ml-2">동의합니다</span>
</label>
<label class="inline-flex items-center">
  <input type="radio" name="option" class="form-radio text-green-500">
  <span class="ml-2">옵션 1</span>
</label>

📄 5. 모달 (Modal)

<!-- 배경 -->
<div class="fixed inset-0 bg-black bg-opacity-50 flex items-center justify-center z-50">
  <!-- 모달 본체 -->
  <div class="bg-white p-6 rounded shadow-lg max-w-md w-full">
    <h2 class="text-xl font-bold mb-4">모달 제목</h2>
    <p class="text-gray-700 mb-4">모달 내용입니다.</p>
    <div class="text-right">
      <button class="bg-blue-500 text-white px-4 py-2 rounded hover:bg-blue-600">확인</button>
    </div>
  </div>
</div>

이 모달은 조건부 렌더링이나 Alpine.js, Vue 등과 함께 쓰면 좋습니다.


🔄 6. 로딩 스피너

<div class="flex items-center justify-center">
  <div class="w-6 h-6 border-4 border-blue-400 border-t-transparent border-solid rounded-full animate-spin"></div>
</div>

📱 7. 네비게이션 바 (NavBar)

<nav class="bg-white shadow-md">
  <div class="max-w-7xl mx-auto px-4 py-3 flex justify-between items-center">
    <div class="text-xl font-bold text-blue-600">로고</div>
    <div class="space-x-4">
      <a href="#" class="text-gray-700 hover:text-blue-600">홈</a>
      <a href="#" class="text-gray-700 hover:text-blue-600">소개</a>
      <a href="#" class="text-gray-700 hover:text-blue-600">문의</a>
    </div>
  </div>
</nav>

🔔 8. 알림 박스 (Alert)

<div class="bg-green-100 border border-green-400 text-green-700 px-4 py-3 rounded">
  <strong class="font-bold">성공!</strong>
  <span class="block sm:inline">작업이 성공적으로 완료되었습니다.</span>
</div>

🧾 9. 탭 (Tabs)

<div class="flex space-x-4 border-b">
  <button class="py-2 px-4 border-b-2 border-blue-600 font-semibold text-blue-600">탭1</button>
  <button class="py-2 px-4 text-gray-500 hover:text-blue-600">탭2</button>
  <button class="py-2 px-4 text-gray-500 hover:text-blue-600">탭3</button>
</div>

🧱 10. Grid 레이아웃

<div class="grid grid-cols-1 md:grid-cols-3 gap-4">
  <div class="bg-gray-100 p-4 rounded">1번 박스</div>
  <div class="bg-gray-100 p-4 rounded">2번 박스</div>
  <div class="bg-gray-100 p-4 rounded">3번 박스</div>
</div>

📦 보너스: 컴포넌트 라이브러리 추천

Tailwind로 만들어진 UI 라이브러리도 존재합니다:

  • 🌟 DaisyUI – Tailwind를 위한 UI 컴포넌트 모음
  • 🧱 Flowbite – 다양한 반응형 컴포넌트 제공
  • 💎 Tailwind UI – Tailwind 제작자의 공식 유료 컴포넌트

원하신다면 위 컴포넌트들을 Vue, React 등에 맞게 변환해드리거나, 실전 프로젝트 구조에 맞춰 예제 프로젝트도 제작해드릴 수 있어요. 어떤 방향이 더 필요하신가요?

나의 말:

React에 맞게 변환

ChatGPT의 말:

좋아요! 위에서 소개한 Tailwind CSS 컴포넌트들을 React JSX 문법에 맞게 변환해드릴게요. 아래는 자주 사용하는 UI 컴포넌트를 React로 작성한 예제입니다.


📦 1. Button (버튼)

const Button = () => {
  return (
    <button className="bg-blue-600 hover:bg-blue-700 text-white font-semibold py-2 px-4 rounded">
      기본 버튼
    </button>
  );
};

📄 2. Card (카드)

const Card = () => {
  return (
    <div className="max-w-sm rounded overflow-hidden shadow-lg bg-white">
      <img
        className="w-full"
        src="https://via.placeholder.com/300"
        alt="Card"
      />
      <div className="px-6 py-4">
        <div className="font-bold text-xl mb-2">카드 제목</div>
        <p className="text-gray-700 text-base">
          카드 설명 텍스트입니다.
        </p>
      </div>
    </div>
  );
};

🧾 3. Input 필드

const Input = () => {
  return (
    <input
      type="text"
      placeholder="내용을 입력하세요"
      className="w-full border border-gray-300 px-4 py-2 rounded focus:outline-none focus:ring-2 focus:ring-blue-400"
    />
  );
};

✅ 4. Checkbox / Radio

const Checkbox = () => {
  return (
    <label className="inline-flex items-center">
      <input type="checkbox" className="form-checkbox text-blue-600" />
      <span className="ml-2">동의합니다</span>
    </label>
  );
};

const Radio = () => {
  return (
    <label className="inline-flex items-center">
      <input type="radio" name="option" className="form-radio text-green-500" />
      <span className="ml-2">옵션 1</span>
    </label>
  );
};

📱 5. Navbar (네비게이션 바)

const Navbar = () => {
  return (
    <nav className="bg-white shadow-md">
      <div className="max-w-7xl mx-auto px-4 py-3 flex justify-between items-center">
        <div className="text-xl font-bold text-blue-600">로고</div>
        <div className="space-x-4">
          <a href="#" className="text-gray-700 hover:text-blue-600">홈</a>
          <a href="#" className="text-gray-700 hover:text-blue-600">소개</a>
          <a href="#" className="text-gray-700 hover:text-blue-600">문의</a>
        </div>
      </div>
    </nav>
  );
};

🪄 6. Modal (모달)

const Modal = ({ onClose }) => {
  return (
    <div className="fixed inset-0 bg-black bg-opacity-50 flex items-center justify-center z-50">
      <div className="bg-white p-6 rounded shadow-lg max-w-md w-full">
        <h2 className="text-xl font-bold mb-4">모달 제목</h2>
        <p className="text-gray-700 mb-4">모달 내용입니다.</p>
        <div className="text-right">
          <button
            onClick={onClose}
            className="bg-blue-500 text-white px-4 py-2 rounded hover:bg-blue-600"
          >
            확인
          </button>
        </div>
      </div>
    </div>
  );
};

🔄 7. Spinner (로딩 스피너)

const Spinner = () => {
  return (
    <div className="flex items-center justify-center">
      <div className="w-6 h-6 border-4 border-blue-400 border-t-transparent border-solid rounded-full animate-spin"></div>
    </div>
  );
};

🧱 8. Grid 레이아웃

const GridLayout = () => {
  return (
    <div className="grid grid-cols-1 md:grid-cols-3 gap-4">
      <div className="bg-gray-100 p-4 rounded">1번 박스</div>
      <div className="bg-gray-100 p-4 rounded">2번 박스</div>
      <div className="bg-gray-100 p-4 rounded">3번 박스</div>
    </div>
  );
};

⚙️ 참고: 프로젝트에 Tailwind 적용하기 (React + Vite 기준)

npm create vite@latest my-app --template react
cd my-app
npm install -D tailwindcss postcss autoprefixer
npx tailwindcss init -p
  • tailwind.config.js:
export default {
  content: [
    "./index.html",
    "./src/**/*.{js,ts,jsx,tsx}",
  ],
  theme: {
    extend: {},
  },
  plugins: [],
}
  • src/index.css:
@tailwind base;
@tailwind components;
@tailwind utilities;
  • main.jsx에서 index.css import:
import './index.css';