
오늘은 Bootstrap 5를 활용하여 웹사이트의 기본 레이아웃과 주요 UI 컴포넌트를 구성하는 방법을 학습했다.
Bootstrap 5는 CSS와 JavaScript를 활용하여 반응형 웹사이트를 쉽게 구축할 수 있도록 도와주는 프레임워크이다.
이번 학습에서는 웹사이트의 전체적인 레이아웃을 설정하고, 자주 사용되는 UI 요소들을 구현하는 방법을 익혔다.
Grid System을 활용하여 반응형 레이아웃 구성 Navbar를 사용하여 네비게이션 바 구현 Offcanvas와 Modal을 활용하여 사이드 메뉴 및 팝업 창 생성 Carousel을 활용하여 이미지 슬라이더 구성 Card UI를 활용하여 콘텐츠 박스 디자인 NavTabs와 Accordion을 사용하여 탭 및 아코디언 UI 구현 이번 학습을 통해 Bootstrap 5의 주요 기능을 활용하여 웹페이지를 구조화하고, 반응형 UI를 적용하는 방법을 익혔다.
📂 01_Layout.html
<div class="wrapper">
<header>
<div class="top-header"></div>
<nav></nav>
</header>
<main>
<section></section>
<section></section>
<section></section>
</main>
<footer></footer>
</div>
📌 설명:
<header>: 상단 영역(로고, 네비게이션 포함 가능). <main>: 페이지의 메인 콘텐츠 영역. <footer>: 하단 영역. wrapper: 전체 페이지를 감싸는 컨테이너 역할. 📂 02_Nav.html
<nav class="navbar navbar-expand-lg navbar-light">
<div class="container-fluid">
<a class="navbar-brand text-white" href="#">Navbar</a>
<button class="navbar-toggler" type="button" data-bs-toggle="collapse"
data-bs-target="#navbarSupportedContent" aria-controls="navbarSupportedContent"
aria-expanded="false" aria-label="Toggle navigation">
<span class="navbar-toggler-icon"></span>
</button>
<div class="collapse navbar-collapse" id="navbarSupportedContent">
<ul class="navbar-nav me-auto mb-2 mb-lg-0">
<li class="nav-item me-3">
<a class="nav-link active" aria-current="page" href="#">Home</a>
</li>
<li class="nav-item me-3">
<a class="nav-link" href="#">Link</a>
</li>
<li class="nav-item dropdown me-3">
<a class="nav-link dropdown-toggle" href="#" id="navbarDropdown"
role="button" data-bs-toggle="dropdown" aria-expanded="false">
Dropdown
</a>
<ul class="dropdown-menu" aria-labelledby="navbarDropdown">
<li><a class="dropdown-item" href="#">Action</a></li>
<li><a class="dropdown-item" href="#">Another action</a></li>
<li><hr class="dropdown-divider"></li>
<li><a class="dropdown-item" href="#">Something else here</a></li>
</ul>
</li>
</ul>
<form class="d-flex me-5">
<input class="form-control me-2" type="search" placeholder="Search" aria-label="Search">
<button class="btn btn-secondary" type="submit">Search</button>
</form>
<button class="btn bg-success text-white" data-bs-toggle="modal"
data-bs-target="#loginModal">Login</button>
<a class="btn btn-primary" data-bs-toggle="offcanvas" href="#offcanvasLogin"
role="button" aria-controls="offcanvasExample">
Join
</a>
</div>
</div>
</nav>
📌 설명:
<nav class="navbar navbar-expand-lg">: 큰 화면에서는 펼쳐지고, 작은 화면에서는 접히는 네비게이션 바. <button class="navbar-toggler">: 모바일 화면에서 네비게이션 바를 접었다 펼치는 버튼. <ul class="navbar-nav">: 네비게이션 바 내부 메뉴 항목 리스트. <li class="nav-item dropdown">: 드롭다운 메뉴 구성. <form class="d-flex">: 네비게이션 바 내부의 검색창. <button class="btn bg-success">Login</button>: 로그인 버튼 추가. <a class="btn btn-primary">Join</a>: 회원가입 버튼 추가. 📂 03_Offcanvas.html
<a class="btn btn-primary" data-bs-toggle="offcanvas" href="#offcanvasLogin"
role="button" aria-controls="offcanvasExample">
Join
</a>
<div class="offcanvas offcanvas-end" id="offcanvasLogin">
<div class="offcanvas-header">
<h5 class="offcanvas-title">회원가입</h5>
<button class="btn-close" data-bs-dismiss="offcanvas"></button>
</div>
<div class="offcanvas-body">
<form>
<input type="text" class="form-control mb-2" placeholder="이름">
<input type="email" class="form-control mb-2" placeholder="이메일">
<button class="btn btn-success w-100">회원가입</button>
</form>
</div>
</div>
📌 설명:
<a class="btn btn-primary" data-bs-toggle="offcanvas" href="#offcanvasLogin">Join</a><div class="offcanvas offcanvas-end">offcanvas-end를 사용하여 오른쪽에서 등장하는 패널을 구현. <button class="btn-close"><form>📂 04_Modal.html
<button class="btn btn-warning" data-bs-toggle="modal" data-bs-target="#loginModal">
로그인
</button>
<div class="modal fade" id="loginModal" tabindex="-1" aria-labelledby="loginModalLabel" aria-hidden="true">
<div class="modal-dialog">
<div class="modal-content">
<div class="modal-header">
<h5 class="modal-title" id="loginModalLabel">로그인</h5>
<button type="button" class="btn-close" data-bs-dismiss="modal" aria-label="Close"></button>
</div>
<div class="modal-body">
<input type="email" class="form-control mb-2" placeholder="이메일">
<input type="password" class="form-control mb-2" placeholder="비밀번호">
</div>
<div class="modal-footer">
<button class="btn btn-secondary" data-bs-dismiss="modal">닫기</button>
<button class="btn btn-primary">로그인</button>
</div>
</div>
</div>
</div>
📌 설명:
<button class="btn btn-warning" data-bs-toggle="modal" data-bs-target="#loginModal">로그인</button><div class="modal fade">fade 속성을 사용하여 부드럽게 나타나는 효과 적용. <div class="modal-dialog"><input type="email">, <input type="password"><button class="btn-close">📂 05_Carousel.html
<div id="carouselExample" class="carousel slide" data-bs-ride="carousel">
<div class="carousel-indicators">
<button type="button" data-bs-target="#carouselExample" data-bs-slide-to="0" class="active"></button>
<button type="button" data-bs-target="#carouselExample" data-bs-slide-to="1"></button>
<button type="button" data-bs-target="#carouselExample" data-bs-slide-to="2"></button>
</div>
<div class="carousel-inner">
<div class="carousel-item active">
<img src="image1.jpg" class="d-block w-100" alt="Slide 1">
</div>
<div class="carousel-item">
<img src="image2.jpg" class="d-block w-100" alt="Slide 2">
</div>
<div class="carousel-item">
<img src="image3.jpg" class="d-block w-100" alt="Slide 3">
</div>
</div>
<button class="carousel-control-prev" type="button" data-bs-target="#carouselExample" data-bs-slide="prev">
<span class="carousel-control-prev-icon"></span>
</button>
<button class="carousel-control-next" type="button" data-bs-target="#carouselExample" data-bs-slide="next">
<span class="carousel-control-next-icon"></span>
</button>
</div>
📌 설명:
<div class="carousel slide" data-bs-ride="carousel">data-bs-ride="carousel"을 추가하여 자동 재생 기능 활성화. <div class="carousel-inner"><div class="carousel-item active">active 클래스로 설정하여 기본적으로 표시. <button class="carousel-control-prev">, <button class="carousel-control-next">📂 06_Card.html
<div class="container mt-4">
<div class="row">
<div class="col-md-4">
<div class="card">
<img src="image1.jpg" class="card-img-top" alt="Card Image">
<div class="card-body">
<h5 class="card-title">Card Title 1</h5>
<p class="card-text">카드 설명 내용입니다.</p>
<a href="#" class="btn btn-primary">자세히 보기</a>
</div>
</div>
</div>
<div class="col-md-4">
<div class="card">
<img src="image2.jpg" class="card-img-top" alt="Card Image">
<div class="card-body">
<h5 class="card-title">Card Title 2</h5>
<p class="card-text">추가 카드 설명입니다.</p>
<a href="#" class="btn btn-primary">더 보기</a>
</div>
</div>
</div>
<div class="col-md-4">
<div class="card">
<img src="image3.jpg" class="card-img-top" alt="Card Image">
<div class="card-body">
<h5 class="card-title">Card Title 3</h5>
<p class="card-text">마지막 카드 설명입니다.</p>
<a href="#" class="btn btn-primary">자세히 보기</a>
</div>
</div>
</div>
</div>
</div>
📌 설명:
<div class="container mt-4"><div class="row">, <div class="col-md-4"><div class="card"><img src="image1.jpg" class="card-img-top"><div class="card-body">📂 07_NavTab_Accordion.html
<ul class="nav nav-tabs" id="myTab" role="tablist">
<li class="nav-item" role="presentation">
<button class="nav-link active" id="tab1-tab" data-bs-toggle="tab" data-bs-target="#tab1" role="tab">
탭 1
</button>
</li>
<li class="nav-item" role="presentation">
<button class="nav-link" id="tab2-tab" data-bs-toggle="tab" data-bs-target="#tab2" role="tab">
탭 2
</button>
</li>
</ul>
<div class="tab-content">
<div id="tab1" class="tab-pane fade show active" role="tabpanel">
<p>탭 1 내용</p>
</div>
<div id="tab2" class="tab-pane fade" role="tabpanel">
<p>탭 2 내용</p>
</div>
</div>
📌 설명:
<ul class="nav nav-tabs"><button class="nav-link active" data-bs-toggle="tab"><div class="tab-content">show active 클래스가 있는 콘텐츠가 기본적으로 보이는 탭. <div class="accordion" id="faqAccordion">
<div class="accordion-item">
<h2 class="accordion-header">
<button class="accordion-button" data-bs-toggle="collapse" data-bs-target="#faq1">
질문 1
</button>
</h2>
<div id="faq1" class="accordion-collapse collapse show">
<div class="accordion-body">질문 1에 대한 답변입니다.</div>
</div>
</div>
<div class="accordion-item">
<h2 class="accordion-header">
<button class="accordion-button collapsed" data-bs-toggle="collapse" data-bs-target="#faq2">
질문 2
</button>
</h2>
<div id="faq2" class="accordion-collapse collapse">
<div class="accordion-body">질문 2에 대한 답변입니다.</div>
</div>
</div>
</div>
📌 설명:
<div class="accordion"><button class="accordion-button" data-bs-toggle="collapse">collapse show| 학습 내용 | 설명 |
|---|---|
| 웹 레이아웃 구성 | <header>, <main>, <footer>을 사용하여 기본 구조 설계 |
| Navbar(네비게이션 바) | navbar를 활용하여 반응형 네비게이션 구현 |
| Offcanvas(오프캔버스) | 로그인 창을 사이드에서 등장하도록 설정 |
| Modal(모달 창) | 로그인 버튼 클릭 시 중앙에 모달 창 표시 |
| Carousel(이미지 슬라이더) | carousel을 사용하여 배너 이미지 슬라이드 구현 |
| Card UI | card를 활용하여 콘텐츠 박스 구성 |
| NavTab & Accordion | nav-tabs와 accordion으로 탭 및 FAQ 스타일 UI 구현 |