Bootstrap是一組用于網站和網絡應用程序開發的開源前端(所謂“前端”,指的是展現給最終用戶的界面。與之對應的“后端”是在服務器上面運行的代碼)框架,包括HTML、CSS及JavaScript的框架,提供字體排印、窗體、按鈕、導航及其他各種組件及Javascript擴展,旨在使動態網頁和Web應用的開發更加容易。
網絡上有很多關于 bootstrap 的學習資源,如果你還沒有聽說過這個優秀的小東西,那么我們建議你用一天的時間對它進行了解和學習,學習過后,相信你會感覺自己一天的付出是相當值得的。
# 引入bootstrap
我們知道,bootstrap的原則是:先行后列再內容,或是先行后列再行再列再內容。
>行套列,列套內容。行里面永遠是列,列里面可以是內容也可以是行。
下載bootstrap的min.css文件,下載地址為:http://www.bootcss.com/
你也可以去bootstrap中文站上去下載和學習: http://v3.bootcss.com/
下載后把min.css文件放置到static文件夾中,具體路徑如下圖所示:

我們在git倉庫中,為大家準備好了全部文件,你只需要執行。
~~~
git checkout -f step3.2.6
~~~
便可以在代碼倉庫中的public文件下找到所需要的bootstrap文件,然后把它們復制到thinkphp5文件夾中對應的位置上就好了。

D:\xampp\htdocs\thinkphp5guide\public\static目錄中的bootstrap-3.3.5-dist文件夾,里面也包含min.css文件,如下所示:

## 絕對地址與相對地址
我們在以往開發網站的時候,更多的是采用相對地址,這樣更便于我們進行項目的遷移。但在實際的項目中,由于URL默認值的原因,直接引用相對地址會存在一定的問題。
比如我們引用一張圖片,引用的代碼往往習慣于這樣寫:
~~~
<img src="image/1.jpg" />
~~~
這樣寫的好處顯而易見:當我們進行html代碼的遷移時,不需要更改任何圖片的路徑便可以完美顯示 。
但在ThinkPHP中,這卻給我們帶來了挑戰。我們在學習MCA時,接觸了ThinkPHP的默認值。即:http://127.0.0.1/thinkphp5/public/index/Teacher 與 http://127.0.0.1/thinkphp5/public/index/Teacher/index 觸發的是相同的觸發器,實現的也是相同的功能。如果此時,我們把上面的圖片代碼放置于相應的V層中,就會出現以下問題:
當URL為[http://127.0.0.1/thinkphp5/public/index/Teacher](http://127.0.0.1/thinkphp5/public/index/Teacher)時,這個圖片應該放置于`public/index/`下。
而當URL為[http://127.0.0.1/thinkphp5/public/index/Teacher/index](http://127.0.0.1/thinkphp5/public/index/Teacher/index)時,卻又要放置到`public/index/Teacher`下。
天,怎么會這樣?到底我們是該放在`public/index/`下還是放在`public/index/Teacher`下呢?
很明顯,我們沒有辦法保障在每個對應的目錄下,都放上一張相同的圖片。
其根本問題在于,由于URL默認值的存在,我們控制不了用戶訪問哪個URL,當然也就弄不清楚到底應該相對于哪個路徑放置圖片了。
有點難懂是吧,沒關系,看一下就好了,我們會用一種動態的路徑生成方法來解決這個問題,只需簡單知道一些原因就可以了。
在這里,我們暫時使用絕對路徑來解決這個問題。
【相對】:是指相對于用戶訪問的當前文件。
【絕對】:是指相對于htdocs這個文件夾。
> 相對路徑與絕對路徑比較模糊的話,`google`一下吧。
在這強調一下,如果我們搜索與技術相關的內容,用google會使你的效率事半功倍。
>如何使用google http://www.hmoore.net/yunzhiclub/google
## 引入bootstrap
引用bootstrap.min.css樣式的代碼如下:
~~~
<head>
<meta charset="UTF-8">
<title>教師管理</title>
<link rel="stylesheet" type="text/css" href="/thinkphp5/public/static/bootstrap-3.3.5-dist/css/bootstrap.min.css">
</head>
<body>
~~~
### 測試
打開瀏覽器的控制臺,并刷新訪問頁面。
chrome:

firefox:

當我們看到這個文件的類型值stylesheet不是紅色字體時,說明我們已經成功引入了Boostrap。
錯誤引入時顯示結果如下圖所示:

當然了,最安全的方法是點擊這個文件名,然后看一下響應那里到底顯示的是什么信息。如下圖所示:

如果看到上圖顯示結果,證明我們成功引入了boostrap樣式文件。
其實最簡單的變化是觀察刷新前后的字體變化,引用成功后,字體樣式會變得更美觀一些。
- 序言
- 第一章 準備知識
- 第一節:XAMPP
- 第二節:NAVICAT
- 第三節:GIT
- 第二章 HelloWorld
- 第一節:下載THINPHP5.0
- 第二節:啟動xampp
- 第三節:hello thinkphp
- 第四節:Hello world
- 第五節:MCA
- 第六節:單引號與雙引號
- 第三章 教師管理
- 第一節:新建數據庫
- 第二節:CURD之R 讀數據
- 3.2.1 時序圖
- 3.2.2 連接數據庫
- 3.2.3 直接讀取數據
- 3.2.4 間接讀取數據
- 3.2.5 使用V層顯示數據
- 3.2.6 引入bootstrap
- 3.2.7 加入bootstrap樣式
- 第三節:CURD之 C 增加數據
- 3.3.1 插入數據
- 3.3.2 表單傳值
- 3.3.3 存儲表單數據
- 3.3.4 自動時間戳
- 3.3.5 增加驗證
- 第四節:CURD之 D 刪除數據
- 3.4.1 什么是關鍵字
- 3.4.2 刪除數據
- 3.4.3 定制刪除鏈接
- 3.4.4 完善刪除
- 第五節:CURD之 U 更新數據
- 3.5.1 讀取數據
- 3.5.2 展示數據
- 3.5.3 修改數據
- 3.5.4 傳遞數據
- 3.5.5 接收數據
- 3.5.6 更新數據 方法一
- 3.5.7 更新數據 方法二
- 第六節:銜接各個action & 重構代碼
- 3.6.1 index action
- 3.6.2 add action
- 3.6.3 insert action
- 3.6.4 delete action
- 3.6.5 edit action
- 3.6.6 update action
- 第七節:分頁
- 3.7.1 調用內置分頁
- 3.7.2 select與paginate(選學)
- 3.7.3 分頁原理(選學)
- 3.7.4 調用page(選學)
- 第八節:模糊查詢
- 3.8.1 增加查詢
- 3.8.2 完善查詢
- 第四章 登錄與注銷
- 第一節:cookie 與 session
- 第二節:靜態方法
- 第三節:規劃URL跳轉
- 第四節:登錄
- 4.4.1 登錄流程
- 4.4.2 index action
- 4.4.3 login action
- 4.4.4 引入M層
- 4.4.5 異常Exception
- 第五節:注銷
- 第六節:驗證
- 4.6.1 action增加驗證
- 4.6.2 使用構造函數驗證
- 4.6.3 使用繼承驗證
- 第五章 E-R圖與數據字典
- 第一節:第一張E-R圖
- 第二節:實體間的關系
- 第三節:開發規范
- 第六章 班級管理
- 第一節:建立數據表
- 第二節:數據列表index
- 第三節:增加數據add
- 第四節:編輯數據edit
- 第五節:刪除數據delete
- 第七章 學生管理
- 第一節:建立數據表
- 第二節:數據列表
- 7.2.1 顯示性別
- 7.2.2 顯示創建時間
- 7.2.3 顯示班級名稱
- 7.2.4 顯示輔導員姓名
- 第三節:編輯數據
- 第四節:魔法函數
- 第五節:源碼分析
- 第八章 課程管理
- 第一節:建立數據表
- 第二節:新增課程
- 第三節:編輯課程
- 8.3.1 edit
- 8.3.2 update
- 第九章 代碼重構
- 第一節:add 與 edit
- 第二節:insert 與 update
- 第三節:模板繼承
- 9.3.1 index.html
- 9.3.2 edit.html
- 9.3.3 小結
- 第十章 UML圖
- 第一節:E-R圖回顧
- 第二節:UML圖
- 第十一章 菜單與路由
- 第一節:添加菜單
- 第二節:虛擬主機
- 第三節:定制路由
- 第十二章 開發調試
- 第一節:開啟trace
- 第二節:查看日志
- 第十三章:總結