ionic button筆記

源碼文件:_button.scss 和 _button-bar.scss,以及_variables.scss(66行-163行)。css

按鈕是手機app不可或缺的一部分,不一樣風格的app,須要的按鈕多種多樣,按鈕的設置涉及按鈕的大小、顏色、狀態等。下面將對ionic的按鈕樣式作一一筆記。app

ionic button樣式

ionic默認提供9種顏色風格:ionic

$light:                           #fff !default;
$stable:                          #f8f8f8 !default;
$positive:                        #4a87ee !default;
$calm:                            #43cee6 !default;
$balanced:                        #66cc33 !default;
$energized:                       #f0b840 !default;
$assertive:                       #ef4e3a !default;
$royal:                           #8a6de9 !default;
$dark:                            #444 !default;

使用以下所示:字體

<button class="button">
    Default
</button>

<button class="button button-light">
    button-light
</button>

<button class="button button-stable">
    button-stable
</button>

<button class="button button-positive">
    button-positive
</button>

<button class="button button-calm">
    button-calm
</button>

<button class="button button-balanced">
    button-balanced
</button>

<button class="button button-energized">
    button-energized
</button>

<button class="button button-assertive">
    button-assertive
</button>

<button class="button button-royal">
    button-royal
</button>

<button class="button button-dark">
    button-dark
</button>

效果圖以下:flex

button顏色風格效果

按鈕風格首先定義了基礎的.button,以及根據不一樣的顏色風格,定義不一樣ative行爲特效。.button基礎樣式部分代碼以下:spa

// _button.scss 第7行 - 30行
.button {
// set the color defaults
@include button-style($button-default-bg, $button-default-border, $button-  default-active-bg, $button-default-active-border, $button-default-text);

position: relative;
display: inline-block;
margin: 0;
padding: 0 $button-padding;

min-width: ($button-padding * 3) + $button-font-size;
min-height: $button-height + 5px;

border-width: $button-border-width;
border-style: solid;
border-radius: $button-border-radius;

vertical-align: top;
text-align: center;

text-overflow: ellipsis;
font-size: $button-font-size;
line-height: $button-height - $button-border-width + 1px;

cursor: pointer;

另外,根據不一樣的顏色樣式的active的效果也不同,如positive顏色樣式的active效果以下:code

$button-positive-bg:              $positive !default;
$button-positive-text:            #fff !default;
$button-positive-border:          darken($positive, 15%) !default;
$button-positive-active-bg:       darken($positive, 15%) !default;
$button-positive-active-border:   darken($positive, 15%) !default;

字體顏色爲白色(#fff),邊框顏色加深15%;當按鈕按下時,背景顏色加深15%。其它顏色樣式的active效果相似。ip

Block Buttons & Full Width Block Buttons

一般按鈕的寬度是由text長度+左右padding值決定的,因此很難知足100%寬度的填充父容器。然而,ionic提供了block級的button樣式(Block Buttons & Full Width Block Buttons)。這兩類Buttons的代碼以下:ci

.button-block {
    display: block;
    clear: both;

&:after {
    clear: both;
    }
}

.button-full,
.button-full > .button {
    display: block;
    margin-right: 0;
    margin-left: 0;
    border-right-width: 0;
    border-left-width: 0;
    border-radius: 0;
}

button.button-block,
button.button-full,
.button-full > button.button,
input.button.button-block  {
    width: 100%;
}

示例以下:get

<button class="button button-block button-positive">
    Block Button
</button>

<button class="button button-full button-positive">
    Full Width Block Button
</button>

效果圖:

block button與full width block button的區別效果圖

從上面能夠看出,這二者的相同點在於display: block,而Full Width Block Buttons刪除左右邊框和邊框半徑(border-radius);Block Buttons保留着padding,讓元素間有點呼吸空隙,而Full Width Bloc Buttons不包含padding值。

button大小

除了正常大小以外,ionic提供兩種不一樣的Sizes: button-large、button-small

.button-small {
    padding: 2px $button-small-padding 1px;
    min-width: $button-small-height;
    min-height: $button-small-height + 2;
    font-size: $button-small-font-size;
    line-height: $button-small-height - $button-border-width - 1;

    .icon:before,
    &.icon:before,
    &.icon-left:before,
    &.icon-right:before {
        font-size: $button-small-icon-size;
        line-height: $button-small-icon-size + 3;
        margin-top: 3px;
    }
}

.button-large {
    padding: 0 $button-large-padding;
    min-width: ($button-large-padding * 3) + $button-large-font-size;
    min-height: $button-large-height + 5;
    font-size: $button-large-font-size;
    line-height: $button-large-height - $button-border-width;

    .icon:before,
    &.icon:before,
    &.icon-left:before,
    &.icon-right:before {
        padding-bottom: ($button-border-width * 2);
        font-size: $button-large-icon-size;
        line-height: $button-large-height - ($button-border-width * 2) - 1;
    }
}

示例代碼:

<button class="button button-small button-assertive">
    Small Button
</button>
<button class="button">
    Default Button
</button>
<button class="button button-large button-positive">
    Large Button
</button>

<button class="button button-block button-small button-assertive">
    Small Button
</button>
<button class="button  button-block">
    Default Button
</button>
<button class="button button-block button-large button-positive">
    Large Button
</button>

效果圖:

small button & large button

二者主要的區別在於:padding、min-width、min-height、font-size 和 line-height。

Outlined Button & Clear Button

這兩種button,都是無背景、字體顏色爲button樣式顏色,其中clear button是無邊框的,源代碼以下:

button-clear {
    @include button-clear($button-default-border);
    @include transition(opacity .1s);
    padding: 0 $button-clear-padding;
    max-height: $button-height;
    border-color: transparent;
    background: none;
    box-shadow: none;

    &.active,
    &.activated {
        opacity: 0.3;
    }
}

.button-outline {
    @include button-outline($button-default-border);
    @include transition(opacity .1s);
    background: none;
    box-shadow: none;
}

示例代碼:

<button class="button button-outline button-positive">
    Outlined Button
</button>

<button class="button button-clear button-positive">
    Clear Button
</button>

效果圖:
outlined button & clear button

Icon Buttons

一個按鈕只有冷冷的文字顯得沒有生氣,這時添加個icon,會使app的效果更上一個臺階。其中你可使用ionic提供的Ionicons,或者其它類型的icon。

同時,雖然咱們可以在button中添加icon子元素,但這樣作會增長DOM元素,增長DOM載入負擔,因此ionic提供了Icon Buttons樣式。

使用示例:

<button class="button">
    <i class="icon ion-loading-c"></i> Loading...
</button>

<button class="button icon-left ion-home">Home</button>

<button class="button icon-left ion-star button-positive">Favorites</button>

<a class="button icon-right ion-chevron-right button-calm">Learn More</a>

<a class="button icon-left ion-chevron-left button-clear button-dark">Back</a>

<button class="button icon ion-gear-a"></button>

<a class="button button-icon icon ion-settings"></a>

<a class="button button-outline icon-right ion-navicon button-balanced">Reorder</a>

效果圖:

各類icon Buttons

不錯吧,不只能夠只顯示icon,也能夠icon+text;不只能夠左邊顯示,能夠右邊顯示icon。

header、footer下button的使用

button可使用在app的各個空間中,如在header中使用,在app頭部左右各增長一個button,代碼以下:

<div class="bar bar-header">
    <button class="button icon ion-navicon"></button>
    <h1 class="title">Header Buttons</h1>
    <button class="button">Edit</button>
</div>

效果圖:

header button

其中,以上的button樣式基本均可以應用其中。

a button

此外,ionic提供了連接a的button效果,源代碼:

a.button {
    text-decoration: none;
}

Button Bar

ionic提供了相似Bootstrap按鈕組.btn-group效果,源代碼以下:

/**
* Button Bar
* --------------------------------------------------
*/

.button-bar {
    @include display-flex();
    @include flex(1);
    width: 100%;

    &.button-bar-inline {
        display: block;
        width: auto;

        @include clearfix();

        > .button {
            width: auto;
            display: inline-block;
            float: left;
        }
    }
}

.button-bar > .button {
    @include flex(1);
    display: block;

    overflow: hidden;

    padding: 0 16px;

    width: 0;

    border-width: 1px 0px 1px 1px;
    border-radius: 0;
    text-align: center;
    text-overflow: ellipsis;
    white-space: nowrap;

    &:before,
    .icon:before {
        line-height: 44px;
    }

    &:first-child {
        border-radius: 2px 0px 0px 2px;
    }
    &:last-child {
        border-right-width: 1px;
        border-radius: 0px 2px 2px 0px;
    }
}

示例代碼:

<div class="button-bar">
    <a class="button">First</a>
    <a class="button">Second</a>
    <a class="button">Third</a>
</div>

按鈕組效果

其中按鈕組是一個block組件,100%寬度;

  1. 排除第一個和最後一個按鈕,其它按鈕都取消圓角設置;

  2. 第一個按鈕的左上角和左下角保留圓角設置;

  3. 最後一個按鈕保留右上角和右下角圓角設置。

  4. 除了最後一個按鈕以外,其它的border-width: 1px 0px 1px 1px;;

  5. 最後一個按鈕再補上最右邊的邊框: border-right-width: 1px;。

相關文章
相關標籤/搜索