四、bootstrap是如何实现一个按钮的?

我们看看最简单的一个组件是如何实现的。
![在这里插入图片描述](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的样式。

我们来看看btnbtn-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,设置某些可复用样式。

如上代码所示,每个按钮都需要使用btnbtn-*

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特性,使用不同变量,控制不同类型、尺寸的按钮样式。

虽然是一个小小的按钮组件,也透露着绝妙的设计。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值