2016年8月4日 星期四

BS3 Tooltips - Part 1

BS3 Tooltips - Part 1

簡介

在 HTML 中本來就已經具有 tooltip (提示框)的功能,BS3 的 tooltip 將其外觀樣式做了更動,將 tooltip 的底色改成黑色,文字改成白色,提示框還具有一個指向元件的箭頭;同時也相當程度的擴充了 tooltip 的功能,讓其運用可以更為廣泛。在同一個頁面中,可以同時使用 HTML 的 tooltip 和 BS3 的 tooltip ,彼此間不會相互干擾。但是為了執行時的效率,BS3 的 tooltip 必須明確的使用 Javascript 將其啟動,如果沒有做這件事,則會使用 HTML 預設的 tooltip 樣式。

建立 BS3 的 tooltips 有二種方式,一種直接在 HTML 程式碼中使用 data-* 自訂屬性建立,然後在 Javascript 中啟動,另一種則是直接用 Javascript 建立並設定所有屬性值。基本上,用哪一種方式,純看個人喜好;但是如果要將 BS3 中的 tooltip 用到極致,用 Javascript 建立並設定會容易些。提示框的內容,預設都以 title 屬性值為其內容,這樣有個好處,如果程式有了問題,至少會用到 HTML 預設的 tooltip 來顯示。以下為一些比較基本的 data-* 自訂屬性,及其允許值:

data-toggle
data-toggle 的值在 tooltip 元件中一定得設定為 "tooltip"。
data-placement
指定提示框要出現的位置。其值可以是 top(預設值), right, bottom, left 及 auto,其中 auto 就是讓流覽器自行決定提示框顯示的位置。
data-trigger
指定提示框顯示的方式,可以組合使用,組合使用時,在字串值中用空白將各條件分隔。允許值如下:
hover
這是預設值,當游標移到元件上方時顯示提示框,移出時取消提示框。
focus
當元件取得焦點時顯示提示框,失去焦點時取消提示框。當點按元件時,元件會自動取得焦點,也會顯示提示框,在元件外部點按時,元件會使去焦點,同時取消提示框。
click
點按元件時,顯示提示框,再次點按元件時取消提示框。
manual
這個值實際上指的是透過 Javascript 程式來控制提示框的顯示和取消。

以下為 BS3 V3.3.6 的 bootstrap.css 樣式表中有關 .tooltip 的樣式設定。其中 .tooltip.top-left .tooltip-arrow {}, .tooltip.top-right .tooltip-arrow{} 及 .tooltip.bottom-left .tooltip-arrow {}, .tooltip.bottom-right .tooltip-arrow{} 的幾個樣式設定,在原本的 bootstrap.js 中並不支援,得去 https://github.com/andresgutgon/bootstrap-tooltip-extension 下載擴充套件才能使用。這個套件只是單純的增加了四個提示框箭頭的位置,是否真的需要使用,純粹是依照個人觀點和需求了。

.tooltip {
    position: absolute;
    z-index: 1070;
    display: block;
    font-family: "Helvetica Neue", Helvetica, Arial, sans-serif;
    font-size: 12px;
    font-style: normal;
    font-weight: normal;
    line-height: 1.42857143;
    text-align: left;
    text-align: start;
    text-decoration: none;
    text-shadow: none;
    text-transform: none;
    letter-spacing: normal;
    word-break: normal;
    word-spacing: normal;
    word-wrap: normal;
    white-space: normal;
    filter: alpha(opacity=0);
    opacity: 0;
    line-break: auto;
}
.tooltip.in {
    filter: alpha(opacity=90);
    opacity: .9;
}
.tooltip.top {
    padding: 5px 0;
    margin-top: -3px;
}
.tooltip.right {
    padding: 0 5px;
    margin-left: 3px;
}
.tooltip.bottom {
    padding: 5px 0;
    margin-top: 3px;
}
.tooltip.left {
    padding: 0 5px;
    margin-left: -3px;
}
.tooltip-inner {
    max-width: 200px;
    padding: 3px 8px;
    color: #fff;
    text-align: center;
    background-color: #000;
    border-radius: 4px;
}
.tooltip-arrow {
    position: absolute;
    width: 0;
    height: 0;
    border-color: transparent;
    border-style: solid;
}
.tooltip.top .tooltip-arrow {
    bottom: 0;
    left: 50%;
    margin-left: -5px;
    border-width: 5px 5px 0;
    border-top-color: #000;
}
.tooltip.top-left .tooltip-arrow {
    right: 5px;
    bottom: 0;
    margin-bottom: -5px;
    border-width: 5px 5px 0;
    border-top-color: #000;
}
.tooltip.top-right .tooltip-arrow {
    bottom: 0;
    left: 5px;
    margin-bottom: -5px;
    border-width: 5px 5px 0;
    border-top-color: #000;
}
.tooltip.right .tooltip-arrow {
    top: 50%;
    left: 0;
    margin-top: -5px;
    border-width: 5px 5px 5px 0;
    border-right-color: #000;
}
.tooltip.left .tooltip-arrow {
    top: 50%;
    right: 0;
    margin-top: -5px;
    border-width: 5px 0 5px 5px;
    border-left-color: #000;
}
.tooltip.bottom .tooltip-arrow {
    top: 0;
    left: 50%;
    margin-left: -5px;
    border-width: 0 5px 5px;
    border-bottom-color: #000;
}
.tooltip.bottom-left .tooltip-arrow {
    top: 0;
    right: 5px;
    margin-top: -5px;
    border-width: 0 5px 5px;
    border-bottom-color: #000;
}
.tooltip.bottom-right .tooltip-arrow {
    top: 0;
    left: 5px;
    margin-top: -5px;
    border-width: 0 5px 5px;
    border-bottom-color: #000;
}

範例

範例中建立四個清單元件,取消其前導圖像,用以展示提示框出現時的不同位置。

CSS

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

#demo{} 將所有元件移到偏螢幕中間,好讓各提示框有空間顯示。 ul{} 取消列示的圖像。另建立一個按鈕群組,展示三個提示框顯示的不同條件。

HTML

<body>
    
</body>

第 1~8 行建立一個沒有前導圖像的清單元件,四個元件各設定四個不同提示框顯示的位置,當游標移到各元件上方時,則會在設定的位置顯示提示框。
第 9~13 行建立一個按鈕群組,並以 data-trigger 自訂屬性值設定不同提示框出現的條件。

Script

<script>
"use strict"
$(function(){
    $(document).ready(function(){
        $('[data-toggle="tooltip"]').tooltip();   
    });
});
</script>

Javascript 程式中,利用搜尋 data-toggle="tooltip" 條件啟動所有的 tooltips。

沒有留言:

張貼留言