# bootstrap5 快速查詢 {%hackmd BJrTq20hE %} ## CDN: [bootstrap5](https://getbootstrap.com/docs/5.0/getting-started/introduction/) CSS: ```htmlembedded <link href="https://cdn.jsdelivr.net/npm/bootstrap@5.2.0/dist/css/bootstrap.min.css" rel="stylesheet" integrity="sha384-gH2yIJqKdNHPEq0n4Mqa/HGKIhSkIHeL5AyhkYV8i59U5AR6csBvApHHNl/vI1Bx" crossorigin="anonymous"> ``` JS: ```javascript= <script src="https://cdn.jsdelivr.net/npm/bootstrap@5.2.0/dist/js/bootstrap.bundle.min.js" integrity="sha384-A3rJD856KowSb7dwlZdYEkO39Gagi7vIsF0jrRAoQmDKKtQBHUuLZ9AsSv4jD4Xa" crossorigin="anonymous"></script> ``` ## 六角Gulp設定: ```htmlembedded // bootstrap @import "../../../node_modules/bootstrap/scss/functions"; @import "./helpers/variables"; @import "./helpers/utilities"; @import "../../../node_modules/bootstrap/scss/bootstrap"; ``` ![](https://i.imgur.com/LGs9wK8.png) 只顯示外框:btn-outline-primary 大小: btn-sm、 btn-lg - 格線系統:由column(欄)、gutter(間距)組成 - 排版三劍客: .container、.row、.col 1~12 - .container - .container 固定寬度 - .container-fluid 滿版 - .row &emsp;g-0:不需要 gutters &emsp;g-1 ~ g-5:上下左右留白 &emsp;gx-?、gy-?:X軸或Y軸留白 - 名言 1:.col- 的外層只能是 .row &emsp;offset- 偏移column [https://bootstrap5.hexschool.com/docs/5.0/layout/columns/#offsetting-columns](https://bootstrap5.hexschool.com/docs/5.0/layout/columns/#offsetting-columns) - 名言 2:.row 裡面只能是 .col- - 名言 3:網頁內容與元件請放在 .col- 裡面 常見錯誤,在 .col 增加寬度 常見錯誤,在格線系統調整左右 margin 與 padding 常見觀念:可以加上下 的 margin 與 padding 常見觀念:最外層至少補一個 container(因為通常會居中) 常見觀念:整體格線邏輯是一致 ![](https://i.imgur.com/HsspRsq.png) </br> ## BS的自訂斷點: [https://bootstrap5.hexschool.com/docs/5.0/layout/breakpoints/#min-width](https://bootstrap5.hexschool.com/docs/5.0/layout/breakpoints/#min-width) - 最小寬度:`@include media-breakpoint-up(md) { ... }` //md(tablets, 768px and up) 以上(如BS預設) - 最大寬度:`@include media-breakpoint-down(md) { ... }` - 特定的斷點:`@include media-breakpoint-only(md) { ... }` @media (min-width: 768px) and (max-width: 991.98px) { ... } - 範圍斷點:`@include media-breakpoint-between(md, xl) { ... }` // Apply styles starting from medium devices and up to extra large devices @media (min-width: 768px) and (max-width: 1199.98px) { ... } ## 圖片: - `.img-fluid`:響應式圖片 - `.img-thumbnail`:讓圖片呈現圓角 1px 的邊框。 - `<figure>`:圖片加標題(放在圖片下方) [https://bootstrap5.hexschool.com/docs/5.0/content/figures/](https://bootstrap5.hexschool.com/docs/5.0/content/figures/) ```htmlembedded= <figure class="figure"> <img src="..." class="figure-img img-fluid rounded" alt="..."> <figcaption class="figure-caption">A caption for the above image.</figcaption> </figure> ``` ## Helpers ( 工具 ) - 連結顏色: `.link-primary` - 比例( Ratios ):嵌入式長寬比,用ratio包裹圖片或影片 `ratio` ratio-16x9 ( 有1x1、4x3、16x9、21x9 ) - 版面位置: .fixed-top:固定頂端 .fixed-bottom `.sticky-top`:黏住頂端 &emsp; sticky-sm-top &emsp; sticky-md-top &emsp; sticky-lg-top &emsp; sticky-xl-top - 垂直、水平堆疊:( BS v5.1.0 ) ```javascript= //vstack、hstack <div class="vstack gap-3"> //垂直堆疊 <div class="hstack gap-3"> //水平堆疊 <div class="bg-light border">First item</div> <div class="bg-light border">Second item</div> <div class="bg-light border">Third item</div> </div> ``` - Card:連結延伸 (Stretched link):透過 CSS 將連結 “延伸”,令任何 HTML 元素或 Bootstrap 元件變得可點擊。 ```javascript= <div class="card" style="width: 18rem;"> <img src="..." class="card-img-top" alt="..."> <div class="card-body"> <h5 class="card-title">帶有延伸連結的卡片</h5> <p class="card-text">Some quick example text to build on the card title and make up the bulk of the card's content.</p> //stretched-link <a href="#" class="btn btn-primary stretched-link">Go somewhere</a> </div> </div> ``` - 垂直分隔線:`<hr>` tag的兄弟 ```javascript= <div class="hstack gap-3"> <div class="bg-light border">First item</div> <div class="bg-light border ms-auto">Second item</div> //vr垂直分隔線 <div class="vr"></div> <div class="bg-light border">Third item</div> </div> ``` ## Utilities ( 通用類別 ) - 背景顏色: `bg-primary` - 邊框: - 增加邊框 ```javascript= //border <span class="border"></span> <span class="border-top"></span> <span class="border-end"></span> <span class="border-bottom"></span> <span class="border-start"></span> ``` * 減少邊框 ```javascript= //border-0 <span class="border-0"></span> <span class="border-top-0"></span> <span class="border-end-0"></span> <span class="border-bottom-0"></span> <span class="border-start-0"></span> ``` - 邊框顏色: ```javascript= <span class="border border-primary"></span> ``` * 邊框寬度:有1~5 ```javascript= <span class="border border-1"></span> ``` - 園角: ```javascript= //rounded <img src="..." class="rounded" alt="..."> <img src="..." class="rounded-top" alt="..."> <img src="..." class="rounded-end" alt="..."> //右 <img src="..." class="rounded-bottom" alt="..."> <img src="..." class="rounded-start" alt="..."> //左 <img src="..." class="rounded-circle" alt="..."> <img src="..." class="rounded-pill" alt="..."> ``` - 園角尺寸半徑:0~3 ```javascript= <img src="..." class="rounded-0" alt="..."> //半徑如下: $border-radius: 0.25rem !default;//rounded-1 $border-radius-sm: 0.2rem !default;//rounded-2 $border-radius-lg: 0.3rem !default;//rounded-3 $border-radius-pill: 50rem !default; ``` - Display: `.d-{value} for xs` `.d-{breakpoint}-{value} for sm, md, lg, xl, and xxl.` //value 為以下其中一個: - none - inline - inline-block - block - grid - table - table-cell - table-row - flex - inline-flex ```javascript= //沒有!important的inline <ul class="list-inline"> <li class="list-inline-item">This is a list item.</li> <li class="list-inline-item">And another one.</li> <li class="list-inline-item">But they're displayed inline.</li> </ul> ``` - 浮動 ( Float ): ```javascript= <div class="float-start">Float start on all viewport sizes</div><br>//左 <div class="float-end">Float end on all viewport sizes</div><br>//右 <div class="float-none">Don't float on all viewport sizes</div>//清除浮動 ``` - 溢出 (Overflow): ```javascript= //overflow-auto <div class="overflow-auto">...</div>//常用 <div class="overflow-hidden">...</div> <div class="overflow-visible">...</div> <div class="overflow-scroll">...</div> ``` - 位置 (Position): ```javascript= //position-relative <div class="position-static">...</div> <div class="position-relative">...</div> <div class="position-absolute">...</div> <div class="position-fixed">...</div> <div class="position-sticky">...</div> //自訂responsive: position-lg-relative ``` - 排列元素: - top - 用於垂直定位 top - start - 用於水平定位 left (LTR) - bottom - 用於垂直定位 bottom - end - 用於水平定位 right (LTR) 其中,position 為以下的其中一種: - 0 - 用於 0 的邊界定位 - 50 - 用於 50% 的邊界定位 - 100 - 用於 100% 的邊界定位 ```javascript= <div class="position-absolute top-50 start-50"></div>//元素中心點為右下角 <div class="position-absolute bottom-50 end-50"></div>//元素中心點為左上角 ``` - 元素置中:以元素的重心為中間點 此類別將 transform 之 translateX(-50%) 與 translateY(-50%) 應用於元素,並結合使用邊界定位通用類別,讓你可以把元素完全置中。 ```javascript= <div class="position-absolute top-50 start-50 translate-middle"></div>//在外框的正中心 <div class="position-absolute top-0 start-50 translate-middle-x"></div>//只針對X軸的中心點 <div class="position-absolute top-50 start-0 translate-middle-y"></div> //自訂responsive:translate-middle-lg ``` - 透明度: ```javascript= //opacity- <div class="opacity-100">...</div> <div class="opacity-75">...</div> <div class="opacity-50">...</div> <div class="opacity-25">...</div> ``` - 陰影 (Shadows): ```javascript= //shadow <div class="shadow-none p-3 mb-5 bg-light rounded">No shadow</div> <div class="shadow-sm p-3 mb-5 bg-body rounded">Small shadow</div> <div class="shadow p-3 mb-5 bg-body rounded">Regular shadow</div> <div class="shadow-lg p-3 mb-5 bg-body rounded">Larger shadow</div> ``` - 尺寸 (Sizing): - 預設包含 `25%, 50%, 75%, 100% 和 auto` ```javascript= //w-25、h-25 <div class="w-25 p-3" style="background-color: #eee;">Width 25%</div> <div class="h-25 d-inline-block" style="width: 120px; background-color: rgba(0,0,255,.1)">Height 25%</div> ``` - 您還可以根據需求使用 max-width: 100%; 和 max-height: 100%; 通用類別。 ```javascript= //mw-100、mh-100 <img src="..." class="mw-100" alt="...">   //max-width <img src="..." class="mh-100" alt="...">   //max-height ``` - 相對於視窗(min) ```javascript= //min-vw-100 <div class="min-vw-100">Min-width 100vw</div> <div class="min-vh-100">Min-height 100vh</div> <div class="vw-100">Width 100vw</div> <div class="vh-100">Height 100vh</div> ``` - 間隔 (Spacing): 如果是適用於所有從 xs 到 xxl 斷點的間隔通用類別,就不需加入中斷點縮寫。因為從 min-width: 0 以上開始都將應用這些類別,因此不受 media query 的約束。但若是針對其餘斷點,就需要包含中斷點縮寫。 對於 xs 使用固定格式 {property}{sides}-{size} 命名,對於 sm、md、lg、xl 和 xxl,使用格式 {property}{sides}-{breakpoint}-{size} 命名。 *property* 設定: - `m` - 設定 margin 的類別 - `p` - 設定 padding 的類別 *sides* 設定: - `t` - 設定 margin-top 或是 padding-top 的類別 - `b` - 設定 margin-bottom 或是 padding-bottom 的類別 - `s` - (start) 在 LTR 設定 margin-left 或是 padding-left, RTL 設定 margin-right 或是 padding-right - `e` - (end) 在 LTR 設定 margin-right or padding-right, RTL 設定 margin-left 或是 padding-left - `x` - 同時設定 *-left 和 *-right - `y` - 時設定 *-top 和 *-bottom - `blank(空白)` - 同時設定 margin 或 padding 在元素的四個邊緣 *size* 設定: - `0` - 設定 margin 或是 padding 為 0 - `1` - (預設) 設定 margin 或是 padding 為 $spacer * .25 //4 - `2` - (預設) 設定 margin 或是 padding 為 $spacer * .5 //8 - `3` - (預設) 設定 margin 或是 padding 為 $spacer = 1 rem //16 - `4` - (預設) 設定 margin 或是 padding 為 $spacer * 1.5 //24 - `5` - (預設) 設定 margin 或是 padding 為 $spacer * 3 //48 - `auto` - 設定 margin 為 auto margin可以設為負值: [https://getbootstrap.com/docs/5.0/utilities/spacing/#margin-and-padding](https://getbootstrap.com/docs/5.0/utilities/spacing/#margin-and-padding) 自訂: ```sass $spacers: ( 0: 0, 1: $spacer * 0.25, //4 2: $spacer * 0.5, //8 25: $spacer * 0.75, //12 3: $spacer, //16 35: $spacer * 1.25, //20 4: $spacer * 1.5, //24 5: $spacer * 2, //32 6: $spacer * 2.5, //40 7: $spacer * 3, //48 l60: $spacer * 3.75, //60 l64: $spacer * 4, //64 ) !default; ``` ```javascript= //複製貼上用 0: 0, 1: $spacer * 0.25, 2: $spacer * 0.5, 25: $spacer * 0.75, 3: $spacer, 35: $spacer * 1.25, 4: $spacer * 1.5, 5: $spacer * 2, 6: $spacer * 2.5, 7: $spacer * 3, l60: $spacer * 3.75, l64: $spacer * 4, ``` - 文字大小:對應.h1–.h6,有1~6(大~小) ```javascript= <p class="fs-1">.fs-1 text</p> //2.5rem(40px) <p class="fs-2">.fs-2 text</p> //2rem(32px) <p class="fs-3">.fs-3 text</p> //1.75rem <p class="fs-4">.fs-4 text</p> //1.5rem <p class="fs-5">.fs-5 text</p> //1.25rem <p class="fs-6">.fs-6 text</p> //1rem ``` ```sa 六角的倍數: $h1-font-size: $font-size-base * 4; //64px $h2-font-size: $font-size-base * 3; //48px $h3-font-size: $font-size-base * 1.75; //28px $h4-font-size: $font-size-base * 1.5; //24px $h5-font-size: $font-size-base * 1.25; //20px $h6-font-size: $font-size-base; //16px $h7-font-size: $font-size-base * 0.875 ;//14px,同<small> $h8-font-size: $font-size-base * 0.75 ;//12px 6: $h6-font-size, 7: $h7-font-size, 8: $h8-font-size, $display-font-sizes: ( 1: 5rem, //80 2: 4.5rem, //72 3: 4rem, //64 4: 3.5rem, //56 5: 3rem, //48 6: 2.5rem, //40 ) !default; ``` - 文字截斷(Text truncation):.text-`truncate`:以透過刪節號截斷文字。需為 display: inline-block 或是 display: block。父層須限制寬度 - 文字顏色: ```javascript= //text-primary <p class="text-primary">.text-primary</p> ``` - 文字對齊: ```javascript= //text-start <p class="text-start">Start aligned text on all viewport sizes.</p> <p class="text-center">Center aligned text on all viewport sizes.</p> <p class="text-end">End aligned text on all viewport sizes.</p> (text-md-start) ``` - 換行:使用 .text-nowrap 強制文字不換行。 ```javascript= //text-wrap、text-nowrap <div class="badge bg-primary text-wrap" style="width: 6rem;"> <div class=" bd-highlight text-nowrap" style="width: 8rem;"> ``` - 大小寫變換: ```javascript= //text-uppercase <p class="text-lowercase">Lowercased text.</p> <p class="text-uppercase">Uppercased text.</p> <p class="text-capitalize">CapiTaliZed text.</p> //只有將第一個字母轉為大寫,而其他字母不受影響。 ``` - 標題字:當你需要突出一個標題時,請考慮使用 display heading 以獲得更大、更細、稍具有風格化的標題樣式。有1~6(大~小) ```javascript= //display-1 <h1 class="display-1">Display 1</h1> ``` - 行內 HTML5 元素的格式: 您可以使用==mark==標籤 強調 文本。  `<mark>` ~~這行文本將被視為已刪除的文本。~~   `<del>` 這行文本旨在被視為不再準確。    `<s>` 這行文本旨在被視為對文檔的補充。   `<ins>` ++這行文本將呈現為帶下劃線。++   `<u>` <span style="font-size:14px">這行文本應被視為精美的印刷品。</span>   `<small>` **此行呈現為粗體文本。**   `**<strong>**`( ctrl + b ) *此行呈現為斜體文本。*    `*<em>*`( ctrl + i ) 請注意,這些標籤目的目的: - `<mark>` 代表被標記的重點是文本,以供參考或標記。 - `<small>` 代表旁注和小字體,例如版權聲明和版權文字。 - `<s>` 不再代表相關或不再準確的元素。 - `<u>` 代表一定範圍的行內文字,應表現出其具有非文本文字的方式。 如果你只是想在文本上加入樣式,你應該改用以下幾類: - .mark與`<mark>`風格一致。 - .small與`<small>`風格一致。 - .text-decoration-underline與`<u>`風格一致。 - .text-decoration-line-through與`<s>`風格一致。 - 粗細和斜體:font-weight 或 font-style。font-style 通用類別的縮寫為 .fst-*, font-weight 通用類別的縮寫為 .fw-*。 ```javascript= //font-weight <p class="fw-bold">Bold text.</p> <p class="fw-bolder">Bolder weight text (relative to the parent element).</p> <p class="fw-normal">Normal weight text.</p> <p class="fw-light">Light weight text.</p> <p class="fw-lighter">Lighter weight text (relative to the parent element).</p> //font-style <p class="fst-italic">Italic text.</p> <p class="fst-normal">Text with normal font style</p> ``` - 行高(line height): ```javascript= <p class="lh-1">This is a long paragraph written to show how the line-heigh</p> <p class="lh-sm">This is a long paragraph written to show how the line-height</p> <p class="lh-base">This is a long paragraph written to show how the line-height</p> <p class="lh-lg">This is a long paragraph written to show how the line-height</p> ``` - 重置色彩:使用 .text-reset 來重置一個文字或連結色彩,以便它們繼承父層的顏色。 ```javascript= //text-muted <p class="text-muted"> //柔和的文字 Muted text with a <a href="#" class="text-reset">reset link</a>. </p> ``` - 文字裝飾: ```javascript= //text-decoration-none <p class="text-decoration-underline">This text has a line underneath it.</p> //底線 <p class="text-decoration-line-through">This text has a line going through it.</p> //刪除線 <a href="#" class="text-decoration-none">This link has its text decoration removed</a> ``` - 文字排版: - 無樣式:ul>li ```javascript= <ul class="list-unstyled"> <li>This is a list.</li> <li>It appears completely unstyled.</li> <li>This may still come in handy in some situations.</li> </ul> ``` - 改為inline( 橫向排列 ): ```javascript= <ul class="list-inline"> <li class="list-inline-item">This is a list item.</li> <li class="list-inline-item">And another one.</li> <li class="list-inline-item">But they're displayed inline.</li> </ul> ``` - 表格: ```javascript= <table class="table table-dark table-striped table-hover"> //表格顏色、條紋間距、hover變色 <thead> <tr> <th scope="col">#</th> <th scope="col">First</th> </tr> </thead> <tbody> <tr class="table-active"> //用於凸顯整行 <th scope="row" class="table-active">1</th> //或是凸顯一格 <td>Mark</td> </tr> </tbody> </table> <table class="table table-bordered border-primary table-borderless"> //邊框、藍色邊框、無邊框 <div class="table-responsive"> //響應式表格( 要包在外面 ) <table class="table"> ... </table> </div> <table class="table align-middle"> //垂直置中 <thead> <tr> ... </tr> </thead> ``` - 表單: - 一般表單: ```javascript= <div class="mb-3"> <label for="formFileMultiple" class="form-label">Multiple files input example</label> //mb-1 <input class="form-control" type="file" id="formFileMultiple" multiple> </div> ``` - 融合標籤與input的一體成形表單: ```javascript= <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> ``` - 可輸入的下拉式選單: ```javascript= <label for="exampleDataList" class="form-label">Datalist example</label> <input class="form-control" list="datalistOptions" id="exampleDataList" placeholder="Type to search..."> <datalist id="datalistOptions"> <option value="San Francisco"> <option value="New York"> </datalist> ``` - 下拉式選單: ```javascript= <select class="form-select" aria-label="Default select example"> //<select class="form-select-lg" aria-label="Default select example"> //<select class="form-select-sm" aria-label="Default select example"> <option selected>Open this select menu</option> <option value="1">One</option> </select> ``` - 非表單的下拉選單( 要BS的JS ): ```javascript= <div class="input-group mb-3"> <button class="btn btn-outline-secondary dropdown-toggle" type="button" data-bs-toggle="dropdown" aria-expanded="false">Dropdown</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> <li><hr class="dropdown-divider"></li> //分隔線 <li><a class="dropdown-item" href="#">Separated link</a></li> </ul> <input type="text" class="form-control" aria-label="Text input with dropdown button"> </div> ``` - 勾選或單選: ```javascript= <div class="form-check form-switch form-check-inline"> <input class="form-check-input" type="checkbox" value="" id="flexCheckDefault"> <label class="form-check-label" for="flexCheckDefault"> Default checkbox </label> </div> //使用 .form-switch 類別來呈現切換開關。 //透過把 .form-check-inline 加到任何 .form-check 來將核取方塊或選項按鈕組合放到同一水平行上。 ``` - 調整bar: ```javascript= <label for="customRange3" class="form-label">Example range</label> <input type="range" class="form-range" min="0" max="5" step="0.5" id="customRange3"> ``` - 把多個input整合成一行: ```javascript= <div class="input-group mb-3"> //<div class="input-group input-group-sm mb-3"> //<div class="input-group input-group-lg mb-3"> <input type="text" class="form-control" placeholder="Username" aria-label="Username"> <span class="input-group-text">@</span> <input type="text" class="form-control" placeholder="Server" aria-label="Server"> </div> ``` - 表單驗證: ```javascript= <form class="was-validated"> <div class="col-md-4"> <label for="validationCustom01" class="form-label">First name</label> <input type="text" class="form-control" id="validationCustom01" value="Mark" required> <div class="valid-feedback"> Looks good! </div> </div> </form> // .is-invalid 和 .is-valid 可以代表驗證成功或失敗 ``` - 垂直對齊 (Vertical alignment):(inline限定) 使用 vertical-alignment 通用類別改變元素的對齊。請注意,垂直對齊僅影響 inline、inline-block、inline-table、和 table 元素。 <u>若需要讓非行內元素的內容垂直置中(如 `<div>` 等等),請使用我們的 flex box 通用類別。</u> ```javascript= //align-middle <span class="align-baseline">baseline</span> <span class="align-top">top</span> <span class="align-middle">middle</span> <span class="align-bottom">bottom</span> <span class="align-text-top">text-top</span> <span class="align-text-bottom">text-bottom</span> ``` - 可視性 (Visibility):使用 visibility: hidden ```javascript= <div class="visible">...</div> <div class="invisible">...</div> //隱藏 <div class="md-invisible">...</div> //要去utlities加responsive ``` - `display: none` vs `visibillity: hidden`差別: none:使用none的時候,該元素會被移除而導致畫面跳一下 hidden:該元素佔用空間持續存在,隱藏時不會跳一下 ## components(元件) - 麵包屑: ```javascript= //breadcrumb <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> ``` - 自訂屬性: [https://bootstrap5.hexschool.com/docs/5.0/utilities/api/#states](https://bootstrap5.hexschool.com/docs/5.0/utilities/api/#states) 如透明度:貼在_utilities.scss ```sass "opacity": ( property: opacity, responsive: true, values: ( 0: 0, 25: .25, 50: .5, 75: .75, 100: 1, ) ) ``` - 徽章badge( 小圓點標籤 ):[https://getbootstrap.com/docs/5.0/components/badge/](https://getbootstrap.com/docs/5.0/components/badge/) - modal關閉按鈕顏色: class="`btn-close` `btn-close-white`" //X按鈕有分為黑色、白色 - 進度線( progress ):