我们看看最简单的一个组件是如何实现的。
![在这里插入图片描述](https://img-blog.csdnimg.cn/20200507230408469.png
1.按钮通用设置和类型
<a class="btn btn-default" href="#" role="button">Link</a>
<button class="btn btn-default" type="submit">Button</button>
<input class="btn btn-default" type="button" value="Input">
<input class="btn btn-default" type="submit" value="Submit">
bootstrap的按钮,可以使用<a>
、<button>
、 <input>
这三种元素,只需要class name加上 btn
以及按钮类型的class就可以显示btn的样式。
我们来看看btn
和btn-default
的sass源码如下:
.btn {
display: inline-block;
margin-bottom: 0; // For input.btn
font-weight: $btn-font-weight;
text-align: center;
vertical-align: middle;
touch-action: manipulation;
cursor: pointer;
background-image: none;
border: 1px solid transparent;
white-space: nowrap;
@include button-size($padding-base-vertical,
$padding-base-horizontal,
$font-size-base,
$line-height-base,
$btn-border-radius-base);
@include user-select(none);
//省略……
}
.btn-default {
@include button-variant($btn-default-color, $btn-default-bg, $btn-default-border);
}
@include
是用于使用设置btn的sass mixin,设置某些可复用样式。
如上代码所示,每个按钮都需要使用btn
和btn-*
。
class btn
包括了按钮通用设置:
- 确定按钮,行内块级元素
- 按钮字体大小、位置
- 边框1px、实线、圆角
- 按钮内边距、行高
btn-*
表示按钮可选类型,通过设置不同类型class,表现不同的样式。以下便是不同按钮的可变的设置,就是颜色:
- 字体颜色
- 背景颜色
- 边框颜色
2.按钮状态
btn
class 还包括了,它的各种状态的样式设置:
- active状态:表示点击时按钮的样式
- hover状态:表示鼠标悬停时按钮样式
- focus状态:表示按钮点击悬停时按钮样式
- disabled状态:表示鼠标禁用状态样式
.btn{
//上边的省略……
&,
&:active,
&.active {
&:focus,
&.focus {
@include tab-focus;
}
}
&:hover,
&:focus,
&.focus {
color: $btn-default-color;
text-decoration: none;
}
&:active,
&.active {
outline: 0;
background-image: none;
@include box-shadow(inset 0 3px 5px rgba(0,0,0,.125));
}
&.disabled,
&[disabled],
fieldset[disabled] & {
cursor: $cursor-disabled;
@include opacity(.65);
@include box-shadow(none);
}
}
3.按钮尺寸
有三种按钮尺寸可以选择,按钮尺寸通过变量设置。专用的按钮 mixin: @button-size
来设置按钮尺寸。
// Button Sizes
// --------------------------------------------------
.btn-lg {
// line-height: ensure even-numbered height of button next to large input
@include button-size($padding-large-vertical, $padding-large-horizontal, $font-size-large, $line-height-large, $btn-border-radius-large);
}
.btn-sm {
// line-height: ensure proper height of button next to small input
@include button-size($padding-small-vertical, $padding-small-horizontal, $font-size-small, $line-height-small, $btn-border-radius-small);
}
.btn-xs {
@include button-size($padding-xs-vertical, $padding-xs-horizontal, $font-size-small, $line-height-small, $btn-border-radius-small);
}
button-size 用于设置按钮尺寸,可以设置如下几个变量来控制按钮的大小:
- 上下内边距
- 左右内边距
- 字体大小
- 行高
- 边框圆角
@mixin button-size($padding-vertical, $padding-horizontal, $font-size, $line-height, $border-radius) {
padding: $padding-vertical $padding-horizontal;
font-size: $font-size;
line-height: $line-height;
border-radius: $border-radius;
}
总结
总体看来,一个简单的按钮,可以通过三个class定义:
- 通用btn设置:
btn
- btn类型的设置,例如:
btn-default
- btn尺寸,例如:
btn-lg
而通过sass的mixin特性,使用不同变量,控制不同类型、尺寸的按钮样式。
虽然是一个小小的按钮组件,也透露着绝妙的设计。