2016年7月28日 星期四

BS3 Modals

BS3 Modals

簡介

Modal 視窗在應用中是一種使用非常廣泛的元件,它的特性就是在視窗出現時,使用者必須明確的完成某項動作;例如輸入一些資料或者取消該視窗,否則視窗會佔據整個螢幕,迫使使用者在應用的過程中作出決定或動作,應用才能繼續進行。這讓應用的設計者在一定程度上可以掌控應用的運行方式和節奏。

.modal
為整個 modal 的主容器,內中必須包含一個 .modal-dialog 容器。
.modal-dialog
次容器,內中必須包含一個 .modal-content 次容器。
.modal-content
次容器,內中可選擇性包含 .modal-header, .modal-footer 類別容器,但都會包含 .modal-body 容器,以存放內容。
.modal-header, .modal-body, modal-footer
將 .modal-content 的內容區分成三大塊,.modal-body 為必要,其它兩者為選項。
.modal-title
定義內容為 modal 的標題,一般和 <h1> 。。。 <h4> 搭配使用。
.modal-lg, .modal-sm
改變 modal 的大小,預設寬為 600px,.modal-lg 寬為 900px,.modal-sm 寬為 300px。要特別注意的是:雖然類別名稱為 modal-* ,但在實作時,卻是應用在 .modal-dialog 容器類別的元件。
.modal-backdrop
這個樣式類別一般不寫在 HTML 的程式碼中,而是由 bootstrap.js 程式控制,類別樣式所定義的是 modal 背後的遮罩。

以下為 BS3 v3.3.6 的 bootstrap.css 樣式表中,與 .modal 相關的樣式設定。

.modal-open {
    overflow: hidden;
}
.modal {
    position: fixed;
    top: 0;
    right: 0;
    bottom: 0;
    left: 0;
    z-index: 1050;
    display: none;
    overflow: hidden;
    -webkit-overflow-scrolling: touch;
    outline: 0;
}
.modal.fade .modal-dialog {
    -webkit-transition: -webkit-transform .3s ease-out;
         -o-transition:      -o-transform .3s ease-out;
            transition:         transform .3s ease-out;
    -webkit-transform: translate(0, -25%);
        -ms-transform: translate(0, -25%);
         -o-transform: translate(0, -25%);
            transform: translate(0, -25%);
}
.modal.in .modal-dialog {
    -webkit-transform: translate(0, 0);
        -ms-transform: translate(0, 0);
         -o-transform: translate(0, 0);
            transform: translate(0, 0);
}
.modal-open .modal {
    overflow-x: hidden;
    overflow-y: auto;
}
.modal-dialog {
    position: relative;
    width: auto;
    margin: 10px;
}
.modal-content {
    position: relative;
    background-color: #fff;
    -webkit-background-clip: padding-box;
            background-clip: padding-box;
    border: 1px solid #999;
    border: 1px solid rgba(0, 0, 0, .2);
    border-radius: 6px;
    outline: 0;
    -webkit-box-shadow: 0 3px 9px rgba(0, 0, 0, .5);
            box-shadow: 0 3px 9px rgba(0, 0, 0, .5);
}
.modal-backdrop {
    position: fixed;
    top: 0;
    right: 0;
    bottom: 0;
    left: 0;
    z-index: 1040;
    background-color: #000;
}
.modal-backdrop.fade {
    filter: alpha(opacity=0);
    opacity: 0;
}
.modal-backdrop.in {
    filter: alpha(opacity=50);
    opacity: .5;
}
.modal-header {
    padding: 15px;
    border-bottom: 1px solid #e5e5e5;
}
.modal-header .close {
    margin-top: -2px;
}
.modal-title {
    margin: 0;
    line-height: 1.42857143;
}
.modal-body {
    position: relative;
    padding: 15px;
}
.modal-footer {
    padding: 15px;
    text-align: right;
    border-top: 1px solid #e5e5e5;
}
.modal-footer .btn + .btn {
    margin-bottom: 0;
    margin-left: 5px;
}
.modal-footer .btn-group .btn + .btn {
    margin-left: -1px;
}
.modal-footer .btn-block + .btn-block {
    margin-left: 0;
}
.modal-scrollbar-measure {
    position: absolute;
    top: -9999px;
    width: 50px;
    height: 50px;
    overflow: scroll;
}
@media (min-width: 768px) {
    .modal-dialog {
        width: 600px;
        margin: 30px auto;
    }
    .modal-content {
        -webkit-box-shadow: 0 5px 15px rgba(0, 0, 0, .5);
                box-shadow: 0 5px 15px rgba(0, 0, 0, .5);
    }
    .modal-sm {
        width: 300px;
    }
}
@media (min-width: 992px) {
    .modal-lg {
      width: 900px;
    }
}

範例

範例中先建立一個按鈕,點按按鈕則會出現一個 modal 的視窗。

CSS

<style>
html {
    width:100%;
    height:100%;
}
body {
    margin: 0 auto;
    max-width: 1000px;
    padding: 20px;
}
</style>

CSS 中沒有設定其它樣式。

HTML

<body>
    
    
    
</body>

第 2 行,建立一個按鈕,藉以控制 modal 的顯示。data-toggle="modal" 指定控制元件的型態,data-target="#myModal"則指定要控制元件的 id。
第 4 行,建立 .modal 元件,id 值為 #myModal,樣式類別 .fade 及 .in 定義 modal 元件出現時具有動畫效果。
第 6 行,建立 .modal-dialog 元件,如果要改變 modal 元件的大小, .modal-lg 或 .modal-sm 樣式類別需定義在這個元件。
第 9, 16 行,利用 .bg-primary 樣式類別改變 .modal-header 及 .modal-footer 的底色。

2016年7月26日 星期二

BS3 Input Groups

BS3 Input Group

簡介

BS3 中的 .input-group 容器類別可以裝飾文字輸入欄位,讓文字欄位的外觀有更多的變化,像是在輸入欄位的前端、後端或前後兩端加入副元件,副元件的內容可以是圖像或文字,可以產生相當有趣的輸入欄位外觀。要注意的是 .input-group 只能用在文字輸入欄位,如果所期望的不是文字型態的輸入值,在取得輸入值後,得配合做一些資料型態的轉換。.input-group 也可放在 .form-group 下使用,並使用 col-*-* 來設定寬度。

.input-group-addon
搭配 <span> 使用,在輸入欄位的前端或後端加入副件元件,加在前端或後端則依 <span> 的所在位置而定。
.input-group-sm, .input-group-lg
改變 .input-group 欄位的大小。很有趣的是,此時副件元件的大小也會跟著改變,但如果是使用 form-group-* 來改變欄位大小時,副元件會保持原來的大小。

以下為 BS3 V3.3.6 的 bootstrap.css 樣式表中和 .input-group 相關的部份樣式定義,其它的請參考 bootstrap.css 檔案的內容。

.input-group {
    position: relative;
    display: table;
    border-collapse: separate;
}
.input-group[class*="col-"] {
    float: none;
    padding-right: 0;
    padding-left: 0;
}
.input-group .form-control {
    position: relative;
    z-index: 2;
    float: left;
    width: 100%;
    margin-bottom: 0;
}
.input-group .form-control:focus {
    z-index: 3;
}
.input-group-lg > .form-control,
.input-group-lg > .input-group-addon,
.input-group-lg > .input-group-btn > .btn {
    height: 46px;
    padding: 10px 16px;
    font-size: 18px;
    line-height: 1.3333333;
    border-radius: 6px;
}
select.input-group-lg > .form-control,
select.input-group-lg > .input-group-addon,
select.input-group-lg > .input-group-btn > .btn {
    height: 46px;
    line-height: 46px;
}
textarea.input-group-lg > .form-control,
textarea.input-group-lg > .input-group-addon,
textarea.input-group-lg > .input-group-btn > .btn,
select[multiple].input-group-lg > .form-control,
select[multiple].input-group-lg > .input-group-addon,
select[multiple].input-group-lg > .input-group-btn > .btn {
    height: auto;
}
.input-group-sm > .form-control,
.input-group-sm > .input-group-addon,
.input-group-sm > .input-group-btn > .btn {
    height: 30px;
    padding: 5px 10px;
    font-size: 12px;
    line-height: 1.5;
    border-radius: 3px;
}
select.input-group-sm > .form-control,
select.input-group-sm > .input-group-addon,
select.input-group-sm > .input-group-btn > .btn {
    height: 30px;
    line-height: 30px;
}
textarea.input-group-sm > .form-control,
textarea.input-group-sm > .input-group-addon,
textarea.input-group-sm > .input-group-btn > .btn,
select[multiple].input-group-sm > .form-control,
select[multiple].input-group-sm > .input-group-addon,
select[multiple].input-group-sm > .input-group-btn > .btn {
    height: auto;
}
.input-group-addon,
.input-group-btn,
.input-group .form-control {
    display: table-cell;
}
.input-group-addon:not(:first-child):not(:last-child),
.input-group-btn:not(:first-child):not(:last-child),
.input-group .form-control:not(:first-child):not(:last-child) {
    border-radius: 0;
}
.input-group-addon,
.input-group-btn {
    width: 1%;
    white-space: nowrap;
    vertical-align: middle;
}
.input-group-addon {
    padding: 6px 12px;
    font-size: 14px;
    font-weight: normal;
    line-height: 1;
    color: #555;
    text-align: center;
    background-color: #eee;
    border: 1px solid #ccc;
    border-radius: 4px;
}

範例

範例用 form-horizontal 的表單格式,並將 .input-group 置於 .form-group 容器中展示了三個 .input-group 的例子。副元件有加在輸入欄位的前方,也有加在後端和兩端都加的。副元件的形態有圖像和文字。

CSS

<style>
html {
    width: 100%;
    height: auto;
}
body {
    margin: 0 auto;
    max-width: 1000px;
    padding: 20px;
}
#demo {
    width: 400px;
    height: auto;
}
</style>

#demo 定義了父元件的寬度為 400px。沒有設定其它的樣式。

HTML

<body>
    
.00
$ .00
</body>

HTML 程式碼淺顯易懂,不多作解釋了。

2016年7月25日 星期一

BS3 Forms

BS3 Forms

簡介

BS3 中針對輸入表單的部份只提供對表單中各元件外觀樣式的定義,及各元件定位的定義,並沒有提供其它的特殊功能。先介紹幾個重要的樣式類別:

.control-label
定義在 <label> 標記中,修飾輸入欄位名稱的外觀及其定位。
.form-control
定義在 <input> 標記中,修飾輸入欄位的外觀及其定位。
.form-group
此為容器類別。容器中包含至少一對或一對以上的 <label> 及 <input> 組合,此容器類別將容器中的輸入欄位及其名稱組成一個群組,根據輸入表單的格式決定輸入欄位及其名稱的排列方式。最重要的一點是樣式為 .form-group 的容器樣式會具有 margin-bottom: 15px; 的屬性值,藉以區隔不同的輸入群組。可以和 .form-group 同時使用的又有下列各修飾類別:
.form-group-lg, .form-group-sm
改變輸入欄位及其名稱的字體大小。
.has-success, has-warning, has-error
以上修飾類別在驗證欄位輸入值後,可以用來變更輸入欄位名稱及輸入欄位邊框的顏色,藉以表現欄位輸入值驗證後的結果。

BS3 中的輸入表單有三種不同的格式:

form-vertical
form-vertical 是預設的格式,因此並沒有 .form-vertical 的樣式類別需要設定。此樣式的輸入欄位名稱 (.control-label) 和輸入欄位 (.form-control) 各自佔據一列,輸入欄位名稱位於輸入欄位的上一列。
.form-horizontal
.form-horizontal 表單格式中,.form-group 容器中的所有元件都位於同一列,輸入欄位名稱位於輸入欄位的左側。必須使用 col-*-* 格線系統定位,輸入欄無名稱靠右對齊,輸入欄位則靠左對齊。在表格中使用 col-*-* 時,不需要有 .row 容器,.form-group 容器本身和 .row 容器相當。
.form-inline
.form-inline 的 .form-group 容器中的元件都位於同一列中,這種排列方式比較緊湊,可以節省螢幕上的空間,只是要注意每個輸入欄位的所需長度,也許得特別定義一下。

以下為 BS3 v3.3.6 的 bootstrap.css 樣式表中部份和 form 相關的樣式設定,因為所有 <form> 中的所有標記 BS3 都有特別的樣式設定,實在是太多了,為了節省篇幅,就沒有全部在下面列出來,有需要時,請去參考 bootstrap.css 檔案的內容。

<style>
.form-group {
    margin-bottom: 15px;
}
.form-group-sm .form-control-static {
    height: 30px;
    min-height: 32px;
    padding: 6px 10px;
    font-size: 12px;
    line-height: 1.5;
}
.form-group-lg .form-control {
    height: 46px;
    padding: 10px 16px;
    font-size: 18px;
    line-height: 1.3333333;
    border-radius: 6px;
}
.form-control:focus {
    border-color: #66afe9;
    outline: 0;
    -webkit-box-shadow: inset 0 1px 1px rgba(0,0,0,.075), 0 0 8px rgba(102, 175, 233, .6);
            box-shadow: inset 0 1px 1px rgba(0,0,0,.075), 0 0 8px rgba(102, 175, 233, .6);
}
.form-control::-moz-placeholder {
    color: #999;
    opacity: 1;
}
.form-control:-ms-input-placeholder {
    color: #999;
}
.form-control::-webkit-input-placeholder {
    color: #999;
}
.form-control::-ms-expand {
    background-color: transparent;
    border: 0;
}
.form-control[disabled],
.form-control[readonly],
fieldset[disabled] .form-control {
    background-color: #eee;
    opacity: 1;
}
.form-control[disabled],
fieldset[disabled] .form-control {
    cursor: not-allowed;
}
</style>

範例 form-vertical (default)

此範例為 form-vertical。

CSS

<style>
html {
    width:100%;
    height:100%;
}
body {
    margin: 0 auto;
    max-width: 1000px;
    padding: 20px;
}
#login {
    margin: 50px auto;
    width: 400px;
    height:auto;
    border: 1px solid gray;
}
form .title {
    padding:10px;
    font-size: 1.5em;
    text-align: center;
    background-color: #99CCFF;
}
form .inputArea {
    padding:20px;
    background-color: #eeeeee;
}
form .action {
    padding:10px;
    text-align: center;
    background-color: #99CCFF;
}
</style>

#login{} 設定了輸入視窗的外觀及大小 寬度有 400px。
form .title{}, form .inputArea{}, form .action{} 各設定了輸入視窗中三個區域的底色及外觀。

HTML

<body>
    
Login
</body>

只有二個輸入欄位,各自用一個 .form-group 的容器裝載,因此兩個欄位間的間距會比較大,有 15px。

範例 form-horizonal

此範例為 form-horizontal。

CSS

<style>
html {
    width:100%;
    height:100%;
}
body {
    margin: 0 auto;
    max-width: 1000px;
    padding: 20px;
}
#login {
    margin: 50px auto;
    width: 400px;
    height:auto;
    border: 1px solid gray;
}
form .title {
    padding:10px;
    font-size: 1.5em;
    text-align: center;
    background-color: #99CCFF;
}
form .inputArea {
    padding:20px;
    background-color: #eeeeee;
}
form .action {
    padding:10px;
    text-align: center;
    background-color: #99CCFF;
}
</style>

#login{} 設定了輸入視窗的外觀及大小,寛度有 400px。
form .title{}, form .inputArea{}, form .action{} 各設定了輸入視窗中三個區域的底色及外觀。

HTML

<body>
    
Login
</body>

第 2 行將輸入表單設為 .form-horizontal 的格式。
第6, 7 行各用 col-*-* 類別設定 <label> 及 <input> 的寬度。在裝置螢幕的尺寸為 xs 時,其外觀等同於 form-vertical 的外觀。

範例 form-inline

此範例為 form-inline。

CSS

<style>
html {
    width:100%;
    height:100%;
}
body {
    margin: 0 auto;
    max-width: 1000px;
    padding: 20px;
}
#login {
    margin: 50px auto;
    width: 800px;
    height:auto;
    border: 1px solid gray;
}
form .title {
    padding:10px;
    font-size: 1.5em;
    text-align: center;
    background-color: #99CCFF;
}
form .inputArea {
    padding:20px;
    background-color: #eeeeee;
}
form .action {
    padding:10px;
    text-align: center;
    background-color: #99CCFF;
}
.form-inline .control-label {
    margin-left: 15px;
    margin-right: 5px;
}
</style>

#login{} 設定了輸入視窗的外觀及大小,為了讓兩個欄位有足夠的空間在同一列,寛度設為 800px。
form .title{}, form .inputArea{}, form .action{} 各設定了輸入視窗中三個區域的底色及外觀。
.form-inline .control-label{} 設定左、右邊界各為 15px 及 5px,這樣在視覺比較美觀,預設的情況下,輸入欄位的名稱和輸入欄位會靠得很近。

HTML

<body>
    
Login
</body>

第 2 行將輸入表單設為 .form-inline 的格式。
兩個輸入欄位及其名稱都包含在同一個 .form-group 的容器中。

2016年7月20日 星期三

BS3 Progressbars

BS3 Progressbars

簡介

進度條 (progressbar) 常用來顯示目前的工作進度,特別是在上傳和下載文件時常會使用。HTML5 中也有個新的標記 <progress> 用來顯示進度條,但其外觀相當單調,和 BS3 中的進度條的外觀比較,根本不在同一個檔次。進度條的基礎樣式類別為 .progress 及 .progress-bar,.progress 為外圍容器,構建進度條的底色;.progress-bar 則為進度條的本體。 style 屬性的百分比值則決定進度條本體的長度;進度條本體的內容文字決定進度條的標示。

進度條本體的修飾樣式類別有:

.progress-bar-sucess, .progress-bar-info, .progress-bar-warning, .progress-bar-danger
設定進度條的本體顏色,不具動畫效果。
.progress-bar-striped
設定進度條本體的斜紋裝飾,如再加上 .active 狀態樣式類別,則具有動畫效果。

以下為 BS3 V3.3.6 之 bootstrap.css 樣式表中有關 .progress-bar 的相關樣式設定。

@-webkit-keyframes progress-bar-stripes {
  from {
    background-position: 40px 0;
  }
  to {
    background-position: 0 0;
  }
}
@-o-keyframes progress-bar-stripes {
  from {
    background-position: 40px 0;
  }
  to {
    background-position: 0 0;
  }
}
@keyframes progress-bar-stripes {
  from {
    background-position: 40px 0;
  }
  to {
    background-position: 0 0;
  }
}
.progress {
    height: 20px;
    margin-bottom: 20px;
    overflow: hidden;
    background-color: #f5f5f5;
    border-radius: 4px;
    -webkit-box-shadow: inset 0 1px 2px rgba(0, 0, 0, .1);
            box-shadow: inset 0 1px 2px rgba(0, 0, 0, .1);
}
.progress-bar {
    float: left;
    width: 0;
    height: 100%;
    font-size: 12px;
    line-height: 20px;
    color: #fff;
    text-align: center;
    background-color: #337ab7;
    -webkit-box-shadow: inset 0 -1px 0 rgba(0, 0, 0, .15);
            box-shadow: inset 0 -1px 0 rgba(0, 0, 0, .15);
    -webkit-transition: width .6s ease;
         -o-transition: width .6s ease;
            transition: width .6s ease;
}
.progress-striped .progress-bar,
.progress-bar-striped {
    background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent);
    background-image:      -o-linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent);
    background-image:         linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent);
    -webkit-background-size: 40px 40px;
          background-size: 40px 40px;
}
.progress.active .progress-bar,
.progress-bar.active {
    -webkit-animation: progress-bar-stripes 2s linear infinite;
         -o-animation: progress-bar-stripes 2s linear infinite;
            animation: progress-bar-stripes 2s linear infinite;
}
.progress-bar-success {
    background-color: #5cb85c;
}
.progress-striped .progress-bar-success {
    background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent);
    background-image:      -o-linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent);
    background-image:         linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent);
}
.progress-bar-info {
    background-color: #5bc0de;
}
.progress-striped .progress-bar-info {
    background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent);
    background-image:      -o-linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent);
    background-image:         linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent);
}
.progress-bar-warning {
    background-color: #f0ad4e;
}
.progress-striped .progress-bar-warning {
    background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent);
    background-image:      -o-linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent);
    background-image:         linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent);
}
.progress-bar-danger {
    background-color: #d9534f;
}
.progress-striped .progress-bar-danger {
    background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent);
    background-image:      -o-linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent);
    background-image:         linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent);
}

範例

範例中展示了六種不同的進度條外觀,前五種都經由條飾樣式類別改變其外觀,唯有最後一種堆疊進度條的 HTML 程式碼略有不同。

CSS

<style>
html {
    width: 100%;
    height: 100%;
}
body {
    margin: 0 auto;
    max-width: 1000px;
    padding: 20px;
}
</style>

CSS 中沒有特別的樣式設定。

HTML

<body>
                   
    

Default progress bar

73%

With / Without min-width

0%
0%

Context progress bar

100% charged (Success)
80% charged (Info)
35% charged (Warning)
25% charged (Danger)

Striped progress bar

83%

Animated striped progress bar

83%

Stacked progress bar

10% 15% 20% 15%
</body>

HTML 程式碼相當簡單,不多作解釋;只有三個地方需要注意。
第 14 行中用 min-width 屬性值決定進度條本體的最小長度,這裡用的不是百分比的值。
第 55~60 行是建立堆疊進度條的方式,只要將數個進度條本體元件放置到一個 .progress 的容器中即可。
第 48 行的 .active 類別加在 .progress 容器中,第 59 行的 .active 類別則加在 .progress-bar 的進度條本體中。這二種用法在容器中只有一條進度條時,不會產生任何差異,只有在像堆疊進度條這種情況下,如果 .active 類別是加在 .progress 容器時,則容器中所有斜紋裝飾的進度條都會有動畫效果。但如果 .active 只加在 .progress-bar 的本體元件時,只有該進度條會具有動畫效果。

2016年7月19日 星期二

BS3 Medias

BS3 Medias

簡介

BS3 中的 Media 主要是用來快速產生類似部落格中或社群網站中留言的格式外觀,但其作用不限於此。其基礎類別有二: .media 及 .media-list。.media 一般和 <div> 搭配使用,產生單一的 Media object。.media-list 一般和 <ul> 搭配使用,產生一系列的 media 物件。兩者都可以以巢狀方式存在。Media 的基本結構為一幅圖像(可置於文字的左邊或文字的右邊),一段主題文字,再加上一段敘述性的文字。預設狀態下,圖像的上緣和文字段落的上緣切齊。請參考範例圖。

修飾類別如下:

.media-middle
圖像的中線切齊文字段落的中線。
.media-bottom
圖像的下緣切齊文字段落的下緣。
.media-left
圖像靠左。這裡樣式的設定是將圖像的 padding-right 設定為 10px,而非將圖像移至文字段落的左邊
.media-right
圖像靠右。這裡樣式的設定是將圖像的 padding-left 設定為 10px,而非將圖像移至文字段落的右邊
.media-heading
指定標記內容為主題樣式,般會搭配 <h1> 。。。 <h6> 標記使用。

以下為 BS3 V3.3.6 的 bootstrap.css 樣式表中,有關 .media 類別的定義。

.media {
    margin-top: 15px;
}
.media:first-child {
    margin-top: 0;
}
.media,
.media-body {
    overflow: hidden;
    zoom: 1;
}
.media-body {
    width: 10000px;
}
.media-object {
    display: block;
}
.media-object.img-thumbnail {
    max-width: none;
}
.media-right,
.media > .pull-right {
    padding-left: 10px;
}
.media-left,
.media > .pull-left {
    padding-right: 10px;
}
.media-left,
.media-right,
.media-body {
    display: table-cell;
    vertical-align: top;
}
.media-middle {
    vertical-align: middle;
}
.media-bottom {
    vertical-align: bottom;
}
.media-heading {
    margin-top: 0;
    margin-bottom: 5px;
}
.media-list {
    padding-left: 0;
    list-style: none;
}

範例

範例中用水平分隔線區分兩個展示,上方一個展示單一的 .media 容器。下方則展示一個 .media-list 的容器,並以巢狀方式顯示三個 media object。範例中的圖像都用 holder.js 工具來產生圖像。

CSS

<style>
html {
    width:100%;
    height:100%;
}
body {
    margin: 0 auto;
    max-width: 1000px;
    padding: 20px;
}
</style>

CSS 中沒有特別需要定義的類別。

HTML

<body>
    

Subject

Bla, bla, bla . . .


  • photo_1

    Subject

    Bla, bla, bla . . .

    photo_2

    Subject

    Bla, bla, bla . . .

  • photo_3

    Subject

    Bla, bla, bla . . .

</body>

第 3~13 行建立一個 .media 的元件。第 17~45 行建立一個 .media-list 的元件。
第 6 行用 .img-circle 的修飾類別,將圖像以圓形呈現。
如果要將圖像呈現在文字段落的右邊,可以將其在 HTML 和式碼中的位置對調即可,或使用 .pull-right 修飾類別以逹到目的。

2016年7月15日 星期五

BS3 Navbar

BS3 Navbar

簡介

使用 BS3 的網站其最主導覽列通常都用 .navbar 來實作。主導覽列一般都會佔據螢幕的全寬,因此在螢幕的尺寸變小時,都得做特別的處理,像是將導覽選項隱藏在按鈕中,必須點按按鈕才會出現選項。主導覽列中可以包含的介面元件相當的多樣,可以有圖像、選項、下拉式選項、輸入欄位等等,因此在樣式表中相關類別的定義很繁複,HTML 的程式碼也多,但只要瞭解其基本結構,就很容易看得懂了。

首先,根標記 <nav> 的基礎類別為 .navbar,並在這個元件設定所須的修飾類別。元件內容為一個類別為 .navbar-header 的 <div> 標記,內含要出現在導覽列中的元件。導覽列中的元件又區分成三部份,一部份是不論螢幕大小,都會出現在導覽列中的元件,像是企業的商標,其類別為 .navbar-brand。另外二部則會因應螢幕的大小隱藏或出現,這二部份則利用 collapse 插件來處理,其類別分別為 .navbar-toggle 及 .navbar-collapse。這二部份看範例程式碼的解說會比較清楚。

以下為 .navbar 的修飾類別:

.navbar-default
主導覽列的底色為淡灰色,字體為黑色。
.navbar-inverse
主導覽列的底色為黑色,字體為白色。
.navbar-static-top
去除主導覽列的上、左、右的邊框及邊框的圓角,其餘不變。
.navbar-fixed-top
主導覽列佔據螢幕畫面的全寬,並在捲動螢幕時,保持在螢幕畫面的上方不動。
.navbar-fixed-bottom
主導覽列佔據螢幕畫面的全寬,並在捲動螢幕時,保持在螢幕畫面的下方不動。

下列為 BS3 V3.3.6 中 bootstrap.css 樣式表中 .navbar 相關的部份樣式定義。全部約有近 500 行的定義,為了節省篇幅,這裡只列出很小的一部份。

.navbar {
    position: relative;
    min-height: 50px;
    margin-bottom: 20px;
    border: 1px solid transparent;
}
@media (min-width: 768px) {
    .navbar {
        border-radius: 4px;
    }
}
@media (min-width: 768px) {
    .navbar-header {
        float: left;
    }
}
.navbar-collapse {
    padding-right: 15px;
    padding-left: 15px;
    overflow-x: visible;
    -webkit-overflow-scrolling: touch;
    border-top: 1px solid transparent;
    -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, .1);
            box-shadow: inset 0 1px 0 rgba(255, 255, 255, .1);
}
.navbar-collapse.in {
    overflow-y: auto;
}
@media (min-width: 768px) {
    .navbar-collapse {
        width: auto;
        border-top: 0;
        -webkit-box-shadow: none;
                box-shadow: none;
    }
    .navbar-collapse.collapse {
        display: block !important;
        height: auto !important;
        padding-bottom: 0;
        overflow: visible !important;
    }
    .navbar-collapse.in {
        overflow-y: visible;
    }
    .navbar-fixed-top .navbar-collapse,
    .navbar-static-top .navbar-collapse,
    .navbar-fixed-bottom .navbar-collapse {
        padding-right: 0;
        padding-left: 0;
    }
}
.navbar-fixed-top .navbar-collapse,
.navbar-fixed-bottom .navbar-collapse {
    max-height: 340px;
}
@media (max-device-width: 480px) and (orientation: landscape) {
    .navbar-fixed-top .navbar-collapse,
    .navbar-fixed-bottom .navbar-collapse {
        max-height: 200px;
    }
}
.container > .navbar-header,
.container-fluid > .navbar-header,
.container > .navbar-collapse,
.container-fluid > .navbar-collapse {
    margin-right: -15px;
    margin-left: -15px;
}
@media (min-width: 768px) {
    .container > .navbar-header,
    .container-fluid > .navbar-header,
    .container > .navbar-collapse,
    .container-fluid > .navbar-collapse {
        margin-right: 0;
        margin-left: 0;
    }
}
.navbar-static-top {
    z-index: 1000;
    border-width: 0 0 1px;
}
@media (min-width: 768px) {
    .navbar-static-top {
        border-radius: 0;
    }
}
.navbar-fixed-top,
.navbar-fixed-bottom {
    position: fixed;
    right: 0;
    left: 0;
    z-index: 1030;
}
@media (min-width: 768px) {
    .navbar-fixed-top,
    .navbar-fixed-bottom {
        border-radius: 0;
    }
}
.navbar-fixed-top {
    top: 0;
    border-width: 0 0 1px;
}
.navbar-fixed-bottom {
    bottom: 0;
    margin-bottom: 0;
    border-width: 1px 0 0;
}
.navbar-brand {
    float: left;
    height: 50px;
    padding: 15px 15px;
    font-size: 18px;
    line-height: 20px;
}
.navbar-brand:hover,
.navbar-brand:focus {
    text-decoration: none;
}
.navbar-brand > img {
    display: block;
}
@media (min-width: 768px) {
    .navbar > .container .navbar-brand,
    .navbar > .container-fluid .navbar-brand {
        margin-left: -15px;
    }
}
.navbar-toggle {
    position: relative;
    float: right;
    padding: 9px 10px;
    margin-top: 8px;
    margin-right: 15px;
    margin-bottom: 8px;
    background-color: transparent;
    background-image: none;
    border: 1px solid transparent;
    border-radius: 4px;
}
.navbar-toggle:focus {
    outline: 0;
}
.navbar-toggle .icon-bar {
    display: block;
    width: 22px;
    height: 2px;
    border-radius: 1px;
}
.navbar-toggle .icon-bar + .icon-bar {
    margin-top: 4px;
}
@media (min-width: 768px) {
    .navbar-toggle {
        display: none;
    }
}
.navbar-nav {
    margin: 7.5px -15px;
}
.navbar-nav > li > a {
    padding-top: 10px;
    padding-bottom: 10px;
    line-height: 20px;
}
@media (max-width: 767px) {
    .navbar-nav .open .dropdown-menu {
        position: static;
        float: none;
        width: auto;
        margin-top: 0;
        background-color: transparent;
        border: 0;
        -webkit-box-shadow: none;
                box-shadow: none;
    }
    .navbar-nav .open .dropdown-menu > li > a,
    .navbar-nav .open .dropdown-menu .dropdown-header {
        padding: 5px 15px 5px 25px;
    }
    .navbar-nav .open .dropdown-menu > li > a {
        line-height: 20px;
    }
    .navbar-nav .open .dropdown-menu > li > a:hover,
    .navbar-nav .open .dropdown-menu > li > a:focus {
        background-image: none;
    }
}
@media (min-width: 768px) {
    .navbar-nav {
        float: left;
        margin: 0;
    }
    .navbar-nav > li {
        float: left;
    }
    .navbar-nav > li > a {
        padding-top: 15px;
        padding-bottom: 15px;
    }
}

範例

範例中展示了 .navbar-default 及 .navbar-inverse 兩種樣式的導覽列。導覽列中含有二個靠左的選項及一個下拉式選單及一個靠右的搜尋選項。當螢幕縮小時,所有選項會隱藏於一個按鈕中。點按按鈕則會以下拉式選單的表現方式出現所有的選項。

CSS

<style>
html {
    width:100%;
    height:100%;
}
body {
    margin: 0 auto;
    max-width:1000px;
    padding:20px;
}
</style>

CSS 中沒有特別的樣式需要設定。

HTML

<body>
    
    
</body>

HTML 程式碼第 2~40 行和第 42~80 行的程式碼,除了第 2 行和第 42 行的類別有 .navbar-default 及 .navbar-inverse 的區分外,其實是完全一樣的,所以只註解第 2~40 行的程式碼。
第 2 行建立一個導覽列的容器元件。
第 5~13 行建立導覽列的內容。
第 6 行建立企業的商標,通常會放置一個圖像,這裡簡單的用文字替代。
第 7~12 行建立一個圖像有三條橫線的按鈕,設定其類別為 .navbar-toggle 及 .collapsed 表示此元件會和另一元件進行切換,目前的狀態為隱藏。這裡要注意 .collapsed 的拼法為 collapse 的過去式,在 bootstrap.css 中是找不到這個類別定義的,它是在 bootstrap.js 程式中用來區分元件狀態為隱藏或顯現之用,千萬不要拼錯了。
第 7 行尚有二個自訂屬性 data-toggle="collapse" 表示切換的模式為隱藏或顯現, data-target="#navbar-collapse-1" 則指定切換時的目標元件是 id 值設定為 navbar-collapse-1 的元件。這裡也要注意兩邊的值要符合。
第 16~38 行建立要和按鈕切換顯現的內容元件。
第 16 行設定其 id 為 "navbar-collapse-1", 類別為 .navbar-collpase 及 .collapse,注意這裡的拼法 collapse 不是過去式。
第 17~31 行建立選項及下拉式選單。
第 32~37 行建立搜尋功能。用 .navbar-right 類別設定,將選項置於導覽列的右方。

2016年7月11日 星期一

BS3 Pills

BS3 Pills

簡介

.nav-pills 和 .nav-tabs 的基本結構大致相同,作業方式也一致,只是在外觀上有所差別。.nav-pills 沒有檔案夾的外觀,選項的部份比較像是個按鈕,而不是檔案夾的標箋。選項和閱讀內容的關聯方式,則和 .nav-tabs 完全一樣。實際上,只要把 .nav-tabs 的 HTML 碼中的 .nav-tabs 類別改成 .nav-pills,data-toggle 自訂屬性的值籨 "tab" 類別改成 "pill",外觀就會從檔案標箋的型態改成 pills 的型態了。

.nav-justified 也可以用在 .nav-pills 中,同樣是把父元件的寬度平均分配給所有的 pills。另有一個 .nav-stacked 的修飾類別,可以讓 pills 成垂直排列。這個修飾類別在 .nav-tabs 中也可以用,但是要修改很多的 CSS 定義,畫面才會好看,若非絕對必要,不要在 .nav-tabs 中應用 .nav-stacked,如果用了,就得修改很多 CSS 類別的屬性;用在 .nav-pills 中,就容易的多了。

以下為 BS3 v3.3.6 之 bootstrap.css 樣式表中,.nav-pills 相關 CSS 類別的定義。

.nav-pills > li {
    float: left;
}
.nav-pills > li > a {
    border-radius: 4px;
}
.nav-pills > li + li {
    margin-left: 2px;
}
.nav-pills > li.active > a,
.nav-pills > li.active > a:hover,
.nav-pills > li.active > a:focus {
    color: #fff;
    background-color: #337ab7;
}
.nav-pills > .active > a > .badge {
    color: #337ab7;
    background-color: #fff;
}
.nav-pills > li > a > .badge {
    margin-left: 3px;
}
.nav-stacked > li {
    float: none;
}
.nav-stacked > li + li {
    margin-top: 2px;
    margin-left: 0;
}

範例

範例中展示二個例子,第一個的選項為橫式排列。第二個的選項為直式排列,為了因應直式排列的選項,將選項相關的內容移到選項的右邊放置。

CSS

<style>
html {
    width:100%;
    height:100%;
}
body {
    margin: 0 auto;
    max-width: 1000px;
    padding: 20px;
}
</style>

CSS 中沒有特別的樣式需要定義。

HTML

<body>
    
    

CSS

Description of CSS

HTML

Description of HTML

Javascript

Description of Javascript


Red

Description of red

Blue

Description of blue

Yellow

Description of yellow

</body>

第 3 行除了 .nav 之外,又定義了 .nav-pills 和 .nav-justified 二個 CSS 類別,讓所有選項佔滿父元件的寬度。
所有 <li> 標記都具有 data-toggle 自訂屬性,其值為 "pill"。data-toggle="pill"
第 27 行除了 .nav 之外,又定義了 .nav-pills 和 .nav-stacked 二個 CSS 類別,讓選項成垂直排列。
第 26,33 行用 .col-sm-* 定義選項和內容所佔的寬度,讓選項出現在左邊,內容出現在右邊。
第 10~23 行及第 34~47 行 關於 .tab-content 的部份,其結構和 .nav-tabs 的結構如出一轍。

2016年7月8日 星期五

BS3 Tabs

BS3 Tabs

簡介

標箋 (tab) 是一㮔在點按標箋後改變顯示內容的介面元件。常常用來在有限的網頁版面中讓使用者選擇有興趣閱讀的內容。BS3 中的 CSS 基礎擴充類別 .nav-tabs 的作用便在建立這種標箋的介面元件。.nav-tabs 基本上是擴充 .nav 而來,所以元件的 CSS 類別必須同時含有 .nav 及 .nav-tabs 兩個類別。搭配使用的標記也主要是 <ul>, <li>, <a> 等等。<li> 中含有可供選取的選項,具有 .active 及 .disabled 兩個狀態。<a> 標記中則為標箋的標示文字或圖像。

至於點按標箋後,相對應要出現的內容則會使用到 .tab-content 及 .tab-pane 兩個基礎類別。

以下為 BS3 V3.3.6 的 bootstrap.css 樣式表中 .nav-tabs 相關的樣式定義。

.nav-tabs {
    border-bottom: 1px solid #ddd;
}
.nav-tabs > li {
    float: left;
    margin-bottom: -1px;
}
.nav-tabs > li > a {
    margin-right: 2px;
    line-height: 1.42857143;
    border: 1px solid transparent;
    border-radius: 4px 4px 0 0;
}
.nav-tabs > li > a:hover {
    border-color: #eee #eee #ddd;
}
.nav-tabs > li.active > a,
.nav-tabs > li.active > a:hover,
.nav-tabs > li.active > a:focus {
    color: #555;
    cursor: default;
    background-color: #fff;
    border: 1px solid #ddd;
    border-bottom-color: transparent;
}
.nav-tabs.nav-justified {
    width: 100%;
    border-bottom: 0;
}
.nav-tabs.nav-justified > li {
    float: none;
}
.nav-tabs.nav-justified > li > a {
    margin-bottom: 5px;
    text-align: center;
}
.nav-tabs.nav-justified > .dropdown .dropdown-menu {
    top: auto;
    left: auto;
}
@media (min-width: 768px) {
    .nav-tabs.nav-justified > li {
        display: table-cell;
        width: 1%;
    }
    .nav-tabs.nav-justified > li > a {
        margin-bottom: 0;
    }
}
.nav-tabs.nav-justified > li > a {
    margin-right: 0;
    border-radius: 4px;
}
.nav-tabs.nav-justified > .active > a,
.nav-tabs.nav-justified > .active > a:hover,
.nav-tabs.nav-justified > .active > a:focus {
    border: 1px solid #ddd;
}
@media (min-width: 768px) {
    .nav-tabs.nav-justified > li > a {
        border-bottom: 1px solid #ddd;
        border-radius: 4px 4px 0 0;
    }
    .nav-tabs.nav-justified > .active > a,
    .nav-tabs.nav-justified > .active > a:hover,
    .nav-tabs.nav-justified > .active > a:focus {
        border-bottom-color: #fff;
    }
}
.tab-content > .tab-pane {
    display: none;
}
.tab-content > .active {
    display: block;
}

範例

範例中展示了二個標箋介面元件,第一個採用預設的外觀。第二個使用了 .nav-justified 的 CSS 修飾類別,這個修飾類別會將父元件的寬度平均分配給每一個標箋,讓標箋的寬度一致。

CSS

<style>
html {
    width:100%;
    height:100%;
}
body {
    margin: 0 auto;
    max-width: 1000px;
    padding: 20px;
}
</style>

CSS 中不需要設定其它樣式。

HTML

<body>
    
    

CSS

Description of CSS

HTML

Description of HTML

Javascript

Description of Javascript


Red

Description of red

Blue

Description of blue

Yellow

Description of yellow

</body>

第 3, 25 行,產生標箋元件需同時使用 .nav 及 .nav-tabs 類別。第 25 行多加了一個 .nav-justified 修飾類別。
所有 <li> 標記需具有 data-toggle 屬性,其值需設定為 "tab" 字串。也就是data-toggle="tab",注意,這裡的 tab 是單數詞。
所有標箋內容的部份,需全部包含在一個具有 .tab-content 類別的標記中;每單一標箋的內容,則全部包含在一個具有 .tab-pane 的標記中。
標箋和標箋內容,則經 <a> 的 href 屬性,和具有 .tab-pane 類別標記的 id 屬性來連接。例:第 4 行的 href="#CSS" 和第 10 行的 id="CSS"

2016年7月7日 星期四

BS3 Navs

BS3 Navs

簡介

BS3 中有個名為 .nav 的 CSS 基礎類別,這個類別又是所有導覽 (navigation) 介面元件的基石,其它幾個導覽介面元件像是: .nav-bar, .nav-tabs, .nav-pills 等,都是以 .nav 為基本樣式,再加以擴充而成。.nav 原則上都搭配 <ul>, <li>, <a> 幾個標記使用,可以很容易產生一個導覽的介面元件,<li> 中含有可供選取的選項,具有 .active 及 .disabled 兩個狀態。如果 <li> 具有 .nav-divider 類別且標記中不含內容,則該 <li> 顯示成分隔線,藉以分隔不同性質的選項。<a> 中的 href 屬性值則指向所要導覽的位置。

以下為 BS3 V3.3.6 中 bootstrap.css 樣式表中 .nav 相關的樣式定義。

.nav {
    padding-left: 0;
    margin-bottom: 0;
    list-style: none;
}
.nav > li {
    position: relative;
    display: block;
}
.nav > li > a {
    position: relative;
    display: block;
    padding: 10px 15px;
}
.nav > li > a:hover,
.nav > li > a:focus {
    text-decoration: none;
    background-color: #eee;
}
.nav > li.disabled > a {
    color: #777;
}
.nav > li.disabled > a:hover,
.nav > li.disabled > a:focus {
    color: #777;
    text-decoration: none;
    cursor: not-allowed;
    background-color: transparent;
}
.nav .open > a,
.nav .open > a:hover,
.nav .open > a:focus {
    background-color: #eee;
    border-color: #337ab7;
}
.nav .nav-divider {
    height: 1px;
    margin: 9px 0;
    overflow: hidden;
    background-color: #e5e5e5;
}
.nav > li > a > img {
    max-width: none;
}

範例

範例中展示了一個很簡單的導覽介面元件,具有五個顏色選項及一條水平分隔線。同時也展示了如何變更介面元件的底色,及為了配合底色的變更,也變更了選項字體的顏色。這是因為變更後的底色比較深,預設的字體顏色會顯得不清楚,所以必須同時變更字體的顏色,若選擇變更的底色比較淡,也許可以不用更改字體的顏色。這個必須自行加以判斷。

CSS

<style>
html {
    width:100%;
    height:100%;
}
body {
    margin: 0 auto;
    max-width: 1000px;
    padding: 20px;
}
#color {
    width: 200px;
    height: auto;
    border: 3px solid skyblue;
    border-radius: 4px;
    background-color: coral;
}
#color > .nav > li > a {
    color: white;
}
#color > .nav > li > a:hover {
    background-color: skyblue;
    color: black;
}
#color > .nav >li.disabled > a{
    color: #777;
}
</style>

#color{} 定義了介面元件的整體外觀。其它的樣式都以 #color 領頭,定義了字體的顏色及當游移至選項上方時,所要改變的底色,如此可以避免干擾到其它 .nav 元件的樣式設定。

HTML

<body>
    
</body>

HTML 中,用 <nav> 標記做為容器,並賦予 id 值,利用 CSS 改變其樣式值以形成介面元件的整體外觀。