<style> html, body, .ui-content { background-color: #333; color: #ddd; } body > .ui-infobar { display: none; } .ui-view-area > .ui-infobar { display: block; } .markdown-body h1, .markdown-body h2, .markdown-body h3, .markdown-body h4, .markdown-body h5, .markdown-body h6 { color: #ddd; } .markdown-body h1, .markdown-body h2 { border-bottom-color: #ffffff69; } .markdown-body h1 .octicon-link, .markdown-body h2 .octicon-link, .markdown-body h3 .octicon-link, .markdown-body h4 .octicon-link, .markdown-body h5 .octicon-link, .markdown-body h6 .octicon-link { color: #fff; } .markdown-body img { background-color: transparent; } .ui-toc-dropdown .nav>.active:focus>a, .ui-toc-dropdown .nav>.active:hover>a, .ui-toc-dropdown .nav>.active>a { color: white; border-left: 2px solid white; } .expand-toggle:hover, .expand-toggle:focus, .back-to-top:hover, .back-to-top:focus, .go-to-bottom:hover, .go-to-bottom:focus { color: white; } .ui-toc-dropdown { background-color: #333; } .ui-toc-label.btn { background-color: #191919; color: white; } .ui-toc-dropdown .nav>li>a:focus, .ui-toc-dropdown .nav>li>a:hover { color: white; border-left: 1px solid white; } .markdown-body blockquote { color: #bcbcbc; } .markdown-body table tr { background-color: #5f5f5f; } .markdown-body table tr:nth-child(2n) { background-color: #4f4f4f; } .markdown-body code, .markdown-body tt { color: #eee; background-color: rgba(230, 230, 230, 0.36); } a, .open-files-container li.selected a { color: #5EB7E0; } </style> # Bootstrap 教學 我們已經學會 HTML 和 CSS 了,但是要大家從零開始寫出一個網頁外觀其實滿辛苦且費時的。 框架 (Framework) 是集合了前人花了數年時間和精力所產生出來的一種工具,它能夠讓開發者在編寫程式時輕鬆許多。今天要介紹的 Bootstrap 就是 CSS 的其中一種框架。 乍聽之下,框架似乎是個神器,但其實也是有缺點所在。優點大家應該都知道了,就是讓開發更簡單,以下舉出幾個缺點: 1. 需要遵循它的規則 2. 出現 bug 會很麻煩 3. 不懂真正的運作原理 :::success **延伸閱讀:** :book: :[Design: #noFramework](https://javarome.medium.com/design-noframework-bbc00a02d9b3) :book: :[中文翻譯版](https://kknews.cc/code/j3a2v5q.html) ::: --- ## Bootstrap 簡介 Bootstrap 是最常見的 CSS 框架,它幫我們設計好各種物件的樣式,讓我們可以直接套用,不需要自己寫 CSS。它還有強大的「網格系統」,讓我們可以輕鬆的排版。當然,響應式設計也是有的,它會根據視窗尺寸的不同而自行調整大小,是個非常實用的工具。 以下為幾個 Bootstrap 官方提供的範例: * 表單 ![](https://i.imgur.com/GfgUqmF.jpg) * 部落格 ![](https://i.imgur.com/20Zexi8.png) * 後台數據管理介面 ![](https://i.imgur.com/u2AmvC2.png) ## 開始使用 [Bootstrap](https://getbootstrap.com/) 要使用 Bootstrap 非常簡單,只要在 html 的 `<head>` 裡面加上一行程式碼: ```htmlembedded= <link href="https://cdn.jsdelivr.net/npm/bootstrap@5.1.3/dist/css/bootstrap.min.css" rel="stylesheet" integrity="sha384-1BmE4kWBq78iYhFldvKuhfTAU6auU8tT94WrHftjDbrCEXSU1oBoqyl2QvZ6jIW3" crossorigin="anonymous"> ``` 如果想要使用動態的功能(下拉式選單等等),還需要在 `<body>` 的最後加上這一行: ```htmlembedded= <script src="https://cdn.jsdelivr.net/npm/bootstrap@5.1.3/dist/js/bootstrap.bundle.min.js" integrity="sha384-ka7Sk0Gln4gmtz2MlQnikT1wXgYsOg+OMhuP+IlRH9sENBO0LRn5q+8nbTov4+1p" crossorigin="anonymous"></script> ``` 像這樣: ```htmlembedded= <!DOCTYPE html> <html> <head> <meta charset="UTF-8" /> <meta http-equiv="X-UA-Compatible" content="IE=edge" /> <meta name="viewport" content="width=device-width, initial-scale=1.0" /> ... <link href="https://cdn.jsdelivr.net/npm/bootstrap@5.1.3/dist/css/bootstrap.min.css" rel="stylesheet" integrity="sha384-1BmE4kWBq78iYhFldvKuhfTAU6auU8tT94WrHftjDbrCEXSU1oBoqyl2QvZ6jIW3" crossorigin="anonymous"> </head> <body> ... <script src="https://cdn.jsdelivr.net/npm/bootstrap@5.1.3/dist/js/bootstrap.bundle.min.js" integrity="sha384-ka7Sk0Gln4gmtz2MlQnikT1wXgYsOg+OMhuP+IlRH9sENBO0LRn5q+8nbTov4+1p" crossorigin="anonymous"></script> </body> </html> ``` 接下來,我們可以到 [Bootstrap 的官網](https://getbootstrap.com/docs/5.1/components/buttons/) 上尋找我們想要用的物件 (Component),先以按鈕為例。 ![](https://i.imgur.com/6idgUpy.jpg) :::info ⒈ 可於畫面左側尋找想用的物件 (Component),Button 是其中之一。 ⒉ Examples 會告訴你這個物件最基本的長相及 html 的寫法。 ::: 假如我要一個黃色的「警告」按鈕,只要在它提供的程式碼中找到相對應的那一行,直接複製到你的 html 裡,並更改文字內容。 ![](https://i.imgur.com/BeWqVr5.jpg) 像這樣: ![](https://i.imgur.com/uuNbRli.png) 這時候你的網頁就會冒出一個黃色按鈕,上面寫著「警告」 👇 ![](https://i.imgur.com/jdeWJN1.jpg) 再舉一個例子,假如我要一個下拉式選單: **step1.** 在左側找到下拉式選單 (Dropdowns) **step2.** 找到他的 Examples ![](https://i.imgur.com/ejMilv0.jpg) **step3.** 複製程式碼並貼到 html 裡 ![](https://i.imgur.com/u5oAWJE.png) **step4.** 大功告成! ![](https://i.imgur.com/eZ7k2Lf.jpg) --- 使用 Bootstrap 能大幅減少我們編寫程式的時間,但是它到底是怎麼做到的呢? ## Bootstrap 運作原理 剛剛我們複製了一大堆程式碼,不知道眼尖的你有沒有發現,它在 class 裡面放了一堆看不懂的東西,這些東西就是關鍵。 :::info **回顧:** 在 CSS 中,可以用 html 標籤名稱和 id、class 屬性來設定元素的樣式,範例如下: ::: ![](https://i.imgur.com/Azqox5D.png) ![](https://i.imgur.com/b0ZPdGb.png) 其實 Bootstrap 也是用相同的方式達成目的的。 我們回頭看最一開始的黃色按鈕: ```htmlembedded= <button type="button" class="btn btn-warning">警告</button> ``` 這個按鈕擁有兩個 class , `btn` 和 `btn-warning`,Bootstrap 已經幫我們定義好這兩個 class 的樣式了,所以我們只要引入它們寫好的 CSS 就可以直接使用(也就是一開始要大家複製到 `<head>` 的那一行程式碼) 以下為 Bootstrap `btn-warning` 的 CSS 片段 (看不懂沒關係): ```css= .btn-warning { color: #000; background-color: #ffc107; border-color: #ffc107; } .btn-warning:hover { color: #000; background-color: #ffca2c; border-color: #ffc720; } .btn-check:focus + .btn-warning, .btn-warning:focus { color: #000; background-color: #ffca2c; border-color: #ffc720; box-shadow: 0 0 0 0.25rem rgba(217, 164, 6, 0.5); } .btn-check:active + .btn-warning, .btn-check:checked + .btn-warning, .btn-warning.active, .btn-warning:active, .show > .btn-warning.dropdown-toggle { color: #000; background-color: #ffcd39; border-color: #ffc720; } .btn-check:active + .btn-warning:focus, .btn-check:checked + .btn-warning:focus, .btn-warning.active:focus, .btn-warning:active:focus, .show > .btn-warning.dropdown-toggle:focus { box-shadow: 0 0 0 0.25rem rgba(217, 164, 6, 0.5); } .btn-warning.disabled, .btn-warning:disabled { color: #000; background-color: #ffc107; border-color: #ffc107; } ``` ~~又臭又長的應該不會有人想要自己寫吧~~ 光是一個按鈕就要寫這麼多行,所以說 Bootstrap 確實幫我們省下很多時間呢! ## 覆寫 Bootstrap 的樣式 既然 Bootstrap 也是用 CSS 寫的,這也代表我們可以更改它預設的設定,或是新增它原本沒有的設定。一樣以「警告」按鈕為例。 ```htmlembedded= <button type="button" class="btn btn-warning">警告</button> ```` 我覺得他的顏色不好看,想要淺一點,我還想要讓按鈕大一點,我們可以這樣做: **step1.** 自己建立一個 CSS 檔,並引入 html **step2.** 像平常寫 CSS 一樣,設定 class name 叫 `btn-warning` 的樣式 ![](https://i.imgur.com/m28i9jn.png) **step3.** 大功告成! ![](https://i.imgur.com/kUgCOTW.png) --- 以上是 Bootstrap 簡單的介紹及用法,相信大家現在都有基本的概念了,接下來將會帶大家使用 Bootstrap 製作一個專屬的個人頁面。 --- **[上一篇:JavaScript 基礎與 DOM 操作](https://hackmd.io/eV0s2oonTxyLDOBXiLQLLw?both)**