-
Bootstrap(부트스트랩)web/css 2022. 5. 26. 11:38
Bootstrap은 강력한 프론트엔드 툴킷이다
설치
패키지 매니저로 설치하기 (아마도 설치할 일은 없을것이다. 프론트에서 사용하니까)
npm install bootstrap@5.3.3CDN(Content Delivery Network)를 이용해 포함하기
<link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.3/dist/css/bootstrap.min.css" rel="stylesheet">link태그는 head태그 내부에 넣어준다.
<script src="https://cdn.jsdelivr.net/npm/bootstrap@5.3.3/dist/js/bootstrap.bundle.min.js"></script>script태그는 </body>직전에 넣어준다.
COLOR
theme colors

color mode
v5.3.0부터 data-bs-theme속성으로 다크모드, 라이트모드 등을 사용할 수 있게 되었다. 전체 html 색깔을 적용하고싶다면
<html lang="en" data-bs-theme="dark"></html>table, dropdown에 색깔을 적용하고 싶다면
<table class="table" data-bs-theme="dark"> <div class="dropdown" data-bs-theme="dark">를 하면 된다.
text colors
.text-muted, .text-primary, .text-success, .text-info, .text-warning, .text-danger, .text-secondary, .text-white, .text-dark, .text-body .text-light를 사용해 텍스트 색깔을 변경할 수 있다.

bagkground colors
.bg-primary, .bg-success, .bg-info, .bg-warning, .bg-danger, .bg-secondary, .bg-dark .bg-light를 사용해 배경 색깔을 변경할 수 있다.

background colors에서는 text colors까지 변경해주지 않으므로, 주의가 필요하다. background colors에 적절한 text colors를 해주는 속성은 .text-bg-{color}를 사용해야한다.

breakpoints

containers
containers는 주어진 디바이스에서 콘텐트를 정렬하는데 사용되는 근본적인 블록이다.
bootstrap container들은 크게 3가지로 나눌 수 있다.
- .container, 각 반응 브레이크포인트의 max-width로 설정한다.
- .container-{breakpoint}, 명시된 브레이크포인트까지 width:100%로 설정한다.
- .container-fluid, 모든 브레이크포인트에서 width:100%로 설정한다.

grid system

12 column 시스템 
xs, sm, md, lg, xl, xxl의 6 기본 반응형 티어들. .col-{숫자} 형태로 클래스에 넣는다. 화면 가로길이에 신경쓰지 않고 개수를 유지시키려면 .col-을 사용하면 되고, 화면가로길이가 breakpoint보다 짧아질 때 div를 아래로 내리고 싶다면 .col-{sm|md|lg|xl|xxl}-{숫자}를 사용하면 된다.
bootstrap의 grid system은 containers, rows, columns를 콘텐트 레이아웃과 나란히 하는데 사용한다.
div class="col"을 div class="row"내부에 포함시켜야 정상 작동한다.
<div class="container text-center"> <div class="row"> <div class="col">column</div> <div class="col">column</div> <div class="col">column</div> </div> </div>col-n 형식으로 하면 row의 12칸중 n칸을 차지하게 한다.

.col-{sm|md|lg|xl|xxl}-숫자 를 하면 해당 크기의 breakpoint이하에서 가로로 같이 나타나는게 아니라, 세로로 따로따로 나타나게된다.

576일 때 화면가로길이가 breakpoint보다 짧아지지 않았기 때문에 column가 가로로 있는 모습 
575일 때 화면가로길이가 breakpoint보다 짧아져 column이 세로로 있는 모습 colums
vertical alignment
align-items-{start|center|end}로 수직 나열한다.

horizontal alignment
justify-content-{start|center|end}로 수평 나열한다.
Tables
table 태그에 .table 클래스를 추가하면 된다.
<table class="table">table, row, cell에 색깔을 부여하고싶으면 .table-{색깔} 클래스를 추가한다.

<!-- On tables --> <table class="table-primary">...</table> <!-- On rows --> <tr class="table-secondary">...</tr> <!-- On cells (`td` or `th`) --> <td class="table-success">...</td>table태그의 .table-striped는 행마다 줄무늬로 만든다.
<table class="table table-striped">table태그의 .table-striped-columns는 열마다 줄무늬로 만든다.
<table class="table table-striped-columns">table태그의 .table-bordered는 테이블과 세포들의 사이드에 경계를 만든다.
<table class="table table-bordered">.border-{색깔} 클래스를 같이 사용하여 색깔을 바꾼다.
<table class="table table-bordered border-primary">.table-borderless 클래스를 사용해 경계를 없앤다.
<table class="table table-borderless">Forms
label은 .form-label
input은 .form-control을 클래스로 넣는다.
<label for="exampleFormControlInput1" class="form-label">Email address</label> <input type="email" class="form-control" id="exampleFormControlInput1" placeholder="name@example.com"> <label for="exampleFormControlTextarea1" class="form-label">Example textarea</label> <textarea class="form-control" id="exampleFormControlTextarea1" rows="3"></textarea>form-control의 높이를 높거나 낮게 조절하고싶으면 .form-control-lg 또는 form-control-sm을 넣는다.
<input class="form-control form-control-lg"> <input class="form-control" type="text"> <input class="form-control form-control-sm" type="text">.form-text를 사용해 해당 form-control에 대한 설명을 추가한다.
<label for="inputPassword5" class="form-label">Password</label> <input type="password" id="inputPassword5" class="form-control" aria-describedby="passwordHelpBlock"> <div id="passwordHelpBlock" class="form-text"> Your password must be 8-20 characters long, contain letters and numbers, and must not contain spaces, special characters, or emoji. </div>파일 선택 input 예시. multiple 속성을 넣으면 여러 파일이 선택 가능하다.
<div class="mb-3"> <label for="formFile" class="form-label">Default file input example</label> <input class="form-control" type="file" id="formFile"> </div> <div class="mb-3"> <label for="formFileMultiple" class="form-label">Multiple files input example</label> <input class="form-control" type="file" id="formFileMultiple" multiple> </div>.form-select를 사용해 select메뉴를 만든다.
<select class="form-select" aria-label="Default select example"> <option selected>성별은?</option> <option value="남자">male</option> <option value="여자">female</option> <option value="무성">nonsexual</option> </select>.form-check로 check를 만든다.
<div class="form-check"> <input class="form-check-input" type="checkbox" value="" id="flexCheckDefault"> <label class="form-check-label" for="flexCheckDefault"> Default checkbox </label> </div> <div class="form-check"> <input class="form-check-input" type="checkbox" value="" id="flexCheckChecked" checked> <label class="form-check-label" for="flexCheckChecked"> Checked checkbox </label> </div>radios만드는법.
<div class="form-check"> <input class="form-check-input" type="radio" name="flexRadioDefault" id="flexRadioDefault1"> <label class="form-check-label" for="flexRadioDefault1"> Default radio </label> </div> <div class="form-check"> <input class="form-check-input" type="radio" name="flexRadioDefault" id="flexRadioDefault2" checked> <label class="form-check-label" for="flexRadioDefault2"> Default checked radio </label> </div>check의 커스텀인 switch이다
.form-check와 .form-switch를 같이 넣어준다.
<div class="form-check form-switch"> <input class="form-check-input" type="checkbox" role="switch" id="flexSwitchCheckDefault"> <label class="form-check-label" for="flexSwitchCheckDefault">Default switch checkbox input</label> </div> <div class="form-check form-switch"> <input class="form-check-input" type="checkbox" role="switch" id="flexSwitchCheckChecked" checked> <label class="form-check-label" for="flexSwitchCheckChecked">Checked switch checkbox input</label> </div>.form-check에 .form-check-inline을 같이 넣어주면, 선택지가 좌우로 한 행에 보인다.
<div class="form-check form-check-inline"> <input class="form-check-input" type="checkbox" id="inlineCheckbox1" value="option1"> <label class="form-check-label" for="inlineCheckbox1">1</label> </div> <div class="form-check form-check-inline"> <input class="form-check-input" type="checkbox" id="inlineCheckbox2" value="option2"> <label class="form-check-label" for="inlineCheckbox2">2</label> </div>range
range는 <input type="range">에 .form-range를 한다. 최대값과 최소값은 min, max로 주고 step은 한칸에 몇씩 오르내리는지 지정할 수 있다.
<label for="customRange3" class="form-label">Example range</label> <input type="range" class="form-range" min="0" max="5" step="0.5" id="customRange3">floating labels
.form-floating 안에 있는 <input class="form-control"> 과 <label> elements는 유동적인 label을 보여준다.
<div class="form-floating mb-3"> <input type="email" class="form-control" id="floatingInput" placeholder="name@example.com"> <label for="floatingInput">Email address</label> </div> <div class="form-floating"> <input type="password" class="form-control" id="floatingPassword" placeholder="Password"> <label for="floatingPassword">Password</label> </div>Components
breadscrumb

현재 페이지의 위치를 계층적으로 표현할 수 있게 한다.
<nav aria-label="breadcrumb"> <ol class="breadcrumb"> <li class="breadcrumb-item"><a href="#">Home</a></li> <li class="breadcrumb-item"><a href="#">Library</a></li> <li class="breadcrumb-item active" aria-current="page">Data</li> </ol> </nav>buttons

.btn과 .btn-{색깔}을 사용해 기본적인 버튼을 만들 수 있다.
<button type="button" class="btn btn-primary">Primary</button> <button type="button" class="btn btn-secondary">Secondary</button> <button type="button" class="btn btn-success">Success</button> <button type="button" class="btn btn-danger">Danger</button> <button type="button" class="btn btn-warning">Warning</button> <button type="button" class="btn btn-info">Info</button> <button type="button" class="btn btn-light">Light</button> <button type="button" class="btn btn-dark">Dark</button> <button type="button" class="btn btn-link">Link</button>.btn-lg또는 .btn-sm을 사용하면 버튼 크기를 조절할 수 있다.
<button type="button" class="btn btn-primary btn-lg">Large button</button> <button type="button" class="btn btn-primary btn-sm">Small button</button>button group
버튼들을 가로나 세로로 붙이고싶다면 button group화를 하면 된다.

<div class="btn-group" role="group" aria-label="Basic example"> <button type="button" class="btn btn-primary">Left</button> <button type="button" class="btn btn-primary">Middle</button> <button type="button" class="btn btn-primary">Right</button> </div>
<div class="btn-group-vertical" role="group" aria-label="Vertical button group"> <button type="button" class="btn btn-primary">Button</button> <button type="button" class="btn btn-primary">Button</button> <button type="button" class="btn btn-primary">Button</button> <button type="button" class="btn btn-primary">Button</button> </div>cards
카드는 유연하고 확장성있는 콘텐트 컨테이너이다.

bootstrap card 예시 카드 안에 패딩 세션이 필요하다면 .card-body클래스를 가진 div를 사용한다.
<div class="card"> <div class="card-body"> This is some text within a card body. </div> </div>카드 타이틀은 <h*>태그에 .card-title클래스를 사용한다.
부제는 <h*>태그에 .card-subtitle클래스를 사용한다.
링크는 <a>태그에 .card-link클래스를 사용한다.
<div class="card" style="width: 18rem;"> <div class="card-body"> <h5 class="card-title">Card title</h5> <h6 class="card-subtitle mb-2 text-body-secondary">Card subtitle</h6> <p class="card-text">Some example text</p> <a href="#" class="card-link">Card link</a> <a href="#" class="card-link">Another link</a> </div> </div>이미지는 <img>태그에 .card-img-top 또는 .card-img-bottom클래스를 사용해 card-body의 위나 아래에 이미지를 넣는다.
<div class="card" style="width: 18rem;"> <img src="..." class="card-img-top" alt="..."> <div class="card-body"> <p class="card-text">Some example text</p> </div> <img src="..." class="card-img-bottom" alt="..."> </div>리스트는 .list-group클래스를 사용한다.
<div class="card" style="width: 18rem;"> <ul class="list-group list-group-flush"> <li class="list-group-item">An item</li> <li class="list-group-item">A second item</li> <li class="list-group-item">A third item</li> </ul> </div>header나 footer는 .card-header또는 .card-footer클래스를 사용한다.
<div class="card"> <div class="card-header"> header </div> <div class="card-body"> <h5 class="card-title">Special title treatment</h5> <p class="card-text">some text</p> <a href="#" class="btn btn-primary">Go somewhere</a> </div> <div class="card-footer"> footer </div> </div>이미지를 카드의 배경을 사용하고싶을 때는, 이미지를 <img>태그의 .card-img클래스를 사용하고, <div>태그를 .card-img-overlay클래스를 사용해 넣고싶은 내용을 넣는다.
<div class="card text-bg-dark"> <img src="..." class="card-img" alt="..."> <div class="card-img-overlay"> <h5 class="card-title">Card title</h5> <p class="card-text">This is a wider card with supporting text below as a natural lead-in to additional content. This content is a little bit longer.</p> <p class="card-text"><small>Last updated 3 mins ago</small></p> </div> </div>collapse
콘텐트의 시각성을 토글하는 기능이다.

bootstrap collapse 예시 <button>태그에 data-bs-toggle="collapse" 속성을 추가하고, data-bs-target="" 속성에 #id또는 .class를 추가하고, aria-controls=""속성에 id를 추가하고, aria-expanded="false"속성을 추가한다(기본적으로 보일거면 true).
<button class="btn btn-primary" type="button" data-bs-toggle="collapse" data-bs-target="#collapseExample" aria-expanded="false" aria-controls="collapseExample"> Button with data-bs-target </button> <div class="collapse" id="collapseExample"> <div class="card card-body"> Some placeholder content for the collapse component. This panel is hidden by default but revealed when the user activates the relevant trigger. </div> </div>dropdowns
링크들의 리스트를 토글하는 기능이다.

bootstrap dropdown 예시 <div class="dropdown"> <button class="btn btn-secondary dropdown-toggle" type="button" data-bs-toggle="dropdown" aria-expanded="false"> Dropdown button </button> <ul class="dropdown-menu"> <li><a class="dropdown-item" href="#">Action</a></li> <li><a class="dropdown-item" href="#">Another action</a></li> <li><a class="dropdown-item" href="#">Something else here</a></li> </ul> </div>offcanvas
숨겨진 사이드바를 만드는 기능이다.

bootstrap offcanvas 예시 <button>태그에 data-bs-toggle="offcanvas"속성을 추가하고 data-bs-target=""에 #id를 넣어 속성을 추가하고 aria-controls=""속성에 id를 넣어서 버튼을 만든다.
<div>태그에 .offcanvas를 넣고, 왼쪽은 .offcanvas-start 오른쪽은 .offcanvas-end 위는 .offcanvas-top 아래는 .offcanvas-bottom 클래스를 넣는다. tabindex="-1"속성도 추가한다.
<a class="btn btn-primary" data-bs-toggle="offcanvas" href="#offcanvasExample" role="button" aria-controls="offcanvasExample"> Link with href </a> <button class="btn btn-primary" type="button" data-bs-toggle="offcanvas" data-bs-target="#offcanvasExample" aria-controls="offcanvasExample"> Button with data-bs-target </button> <div class="offcanvas offcanvas-start" tabindex="-1" id="offcanvasExample" aria-labelledby="offcanvasExampleLabel"> <div class="offcanvas-header"> <h5 class="offcanvas-title" id="offcanvasExampleLabel">Offcanvas</h5> <button type="button" class="btn-close" data-bs-dismiss="offcanvas" aria-label="Close"></button> </div> <div class="offcanvas-body"> <div> Some text as placeholder. In real life you can have the elements you have chosen. Like, text, images, lists, etc. </div> <div class="dropdown mt-3"> <button class="btn btn-secondary dropdown-toggle" type="button" data-bs-toggle="dropdown"> Dropdown button </button> <ul class="dropdown-menu"> <li><a class="dropdown-item" href="#">Action</a></li> <li><a class="dropdown-item" href="#">Another action</a></li> <li><a class="dropdown-item" href="#">Something else here</a></li> </ul> </div> </div> </div>navbar
네비게이션 바 기능이다.

bootstrap navbar 예시 <nav>태그에 .navbar와 .navbar-expand{-sm|-md|-lg|-xl|-xxl} 클래스를 추가한다.
.justify-content{-start|-end|-center|-between|-around|-evenly}로 어떤 배치를 할것인지 정한다.
.navbar-brand를 사용해 프로젝트 이름을 표현한다.
<span>태그에 .navbar-text를 사용해 텍스트를 표현한다.
.navbar-nav를 사용해 리스트나 <a>같은것들을 가로로 놓게 한다.
progress
진행 바 기능이다.

bootstrap progress 예시 기본적으로 .progress와 role="progressbar"를 넣고, 하위 div에 .progress-bar와 style로 width를 지정해준다. 라벨은 하위 div에 넣으면 된다.
<div class="progress" role="progressbar" > <div class="progress-bar" style="width: 40%">라벨</div> </div>색깔을 변경하려면 하위 div에 .text-bg-{info|success|warning|danger}등을 적용한다.

줄무늬를 입히려면 .progress-bar-striped를 하위 div에 적용한다.
움직이는 줄무늬를 입히려면 추가로 .progress-bar-animated를 하위 div에 적용한다.
modal
유저 알림인 모달 기능이다.

bootstrap modal 예시 button을 만들어 data-bs-toggle="modal"속성을 부여하고 data-bs-target="#id" 속성을 부여한다.
<div>태그에 .modal을 넣고, 위에서 아래로 자연스럽게 애니메이션 하고싶다면 .fade도 넣는다.
.modal-dialog, .modal-content를 클래스로 가지는 div태그를 자식으로 넣어주고, .modal-content의 자식으로 .modal-header, .modal-body, .modal-footer를 클래스로 가지는 div들을 만들어주면 된다.
<!-- Button to Open the Modal --> <button type="button" class="btn btn-primary" data-bs-toggle="modal" data-bs-target="#myModal"> Open modal </button> <!-- The Modal --> <div class="modal fade" id="myModal"> <div class="modal-dialog"> <div class="modal-content"> <!-- Modal Header --> <div class="modal-header"> <h4 class="modal-title">Modal Heading</h4> <button type="button" class="btn-close" data-bs-dismiss="modal"></button> </div> <!-- Modal body --> <div class="modal-body"> Modal body.. </div> <!-- Modal footer --> <div class="modal-footer"> <button type="button" class="btn btn-danger" data-bs-dismiss="modal">Close</button> </div> </div> </div> </div>Utilities
spacing
m - margin을 의미
p - padding을 의미
t - margin-top 또는 padding-top을 의미
b - margin-bottom 또는 padding-bottom을 의미
s - margin-left 또는 padding-left를 의미
e - margin-right 또는 padding-right를 의미
x - *-left와 *-right 둘다 포함
y - *-top과 *-bottom 둘다 포함
0~5 (숫자) - $spacer 의 .25 .5 1 1.5 3을 의미
auto - margin을 auto로 할때 사용
예시
<div class="mt-0"></div> <div class="m-0 p-0"></div> <div class="mx-auto p-3"></div>icons
아이콘을 사용하려면 추가적으로 stylesheet를 가져와야한다.
CDN:
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/bootstrap-icons@1.11.3/font/bootstrap-icons.min.css">사용법: <i class=""></i>에 적당한 클래스를 삽입한다.
<i class="bi-alarm"></i>아이콘 리스트: https://icons.getbootstrap.com/
https://www.w3schools.com/bootstrap5/index.php
-
'web > css' 카테고리의 다른 글
tailwind css (0) 2026.02.05 CSS 웹 디자인 접근, 업그레이드 방법 (0) 2026.02.05 CSS (Cascading Style Sheet) (0) 2024.08.25