Bootstrap Basic Notes
Bootstrap Basis
<UI API>
  <container/content>
  <header>
  </header>
  <body>
  </body>
  <footer>
  </footer>
</container/content>
</UI API>
Grid System
Basic
- 设置宽度: col-xs/sm/md/lg-num
- 设置偏移量: col-xs/sm/md/lg-pull/push/offset-num
row
- row
- row-header/row-content/row-footer
Nav
NavBar
Class
- navbar navbar-default
- navbar-inverse(color) navbar-fixed-top
- navbar-form
- nav-tabs nav-pills
- navbar-left/right
Structure
navbar > container > nav/navbar-header/navbar-nav/navbar-form > li/a
<nav class="navbar navbar-default">
  <div class="container-fluid">
    <!-- Brand and toggle get grouped for better mobile display -->
    <div class="navbar-header">
      <button
        type="button"
        class="navbar-toggle collapsed"
        data-toggle="collapse"
        data-target="#bs-example-navbar-collapse-1"
        aria-expanded="false"
      >
        <span class="sr-only">Toggle navigation</span>
        <span class="icon-bar"></span>
        <span class="icon-bar"></span>
        <span class="icon-bar"></span>
      </button>
      <a class="navbar-brand" href="#">Brand</a>
    </div>
    <!-- Collect the nav links, forms, and other content for toggling -->
    <div class="collapse navbar-collapse" id="bs-example-navbar-collapse-1">
      <ul class="nav navbar-nav">
        <li class="active">
          <a href="#">Link <span class="sr-only">(current)</span></a>
        </li>
        <li><a href="#">Link</a></li>
        <li class="dropdown">
          <a
            href="#"
            class="dropdown-toggle"
            data-toggle="dropdown"
            role="button"
            aria-haspopup="true"
            aria-expanded="false"
          >
            Dropdown<span class="caret"></span>
          </a>
          <ul class="dropdown-menu">
            <li><a href="#">Action</a></li>
            <li><a href="#">Another action</a></li>
            <li><a href="#">Something else here</a></li>
            <li role="separator" class="divider"></li>
            <li><a href="#">Separated link</a></li>
            <li role="separator" class="divider"></li>
            <li><a href="#">One more separated link</a></li>
          </ul>
        </li>
      </ul>
      <form class="navbar-form navbar-left" role="search">
        <div class="form-group">
          <input type="text" class="form-control" placeholder="Search" />
        </div>
        <button type="submit" class="btn btn-default">Submit</button>
      </form>
      <ul class="nav navbar-nav navbar-right">
        <li><a href="#">Link</a></li>
        <li class="dropdown">
          <a
            href="#"
            class="dropdown-toggle"
            data-toggle="dropdown"
            role="button"
            aria-haspopup="true"
            aria-expanded="false"
          >
            Dropdown <span class="caret"></span>
          </a>
          <ul class="dropdown-menu">
            <li><a href="#">Action</a></li>
            <li><a href="#">Another action</a></li>
            <li><a href="#">Something else here</a></li>
            <li role="separator" class="divider"></li>
            <li><a href="#">Separated link</a></li>
          </ul>
        </li>
      </ul>
    </div>
    <!-- /.navbar-collapse -->
  </div>
  <!-- /.container-fluid -->
</nav>
body {
  z-index: 0;
  padding: 50px 0 0;
}
.navbar-inverse {
  background: #303f9f;
}
.navbar-inverse > .active > a,
.navbar-inverse > .active > a:hover,
.navbar-inverse > .active > a:focus {
  color: #fff;
  background: #1a237e;
}
.navbar-inverse .navbar-nav > .open > a,
.navbar-inverse .navbar-nav > .open > a:hover,
.navbar-inverse .navbar-nav > .open > a:focus {
  color: #fff;
  background: #1a237e;
}
.navbar-inverse .navbar-nav .open .dropdown-menu > li > a,
.navbar-inverse .navbar-nav .open .dropdown-menu {
  color: #eee;
  background-color: #303f9f;
}
.navbar-inverse .navbar-nav .open .dropdown-menu > li > a:hover,
.navbar-inverse .navbar-nav .open .dropdown-menu > li > a:focus {
  color: #000;
}
BreadCrumb
路径导航栏 - Home -> Library -> Data
<ol class="breadcrumb">
  <li><a href="#">Home</a></li>
  <li><a href="#">Library</a></li>
  <li class="active">Data</li>
</ol>
Scroll Spy
body {
  position: relative;
}
.affix {
  top: 100px;
}
<body data-spy="scroll" data-target="#navbar-example" data-offset="200">
  <nav class="hidden-xs col-sm-2" id="navbar-example">
    <ul
      class="nav nav-tabs"
      role="tablist"
      data-spy="affix"
      data-offset-top="400"
    >
      <li><a href="#history">Our History</a></li>
      <li><a href="#corporate">Corporate</a></li>
      <li><a href="#facts">Facts</a></li>
    </ul>
  </nav>
  <!-- 在某个地方 -->
  <div id="history">...</div>
  <div id="corporate">...</div>
  <div id="facts">...</div>
</body>
Tabs and Pills
- nav-tabs/nav-pills
- nav-justified/nav-stacked
- link - active/disabled
<ul class="nav nav-tabs/nav-pills nav-justified/nav-stacked">
  <li role="presentation" class="active"><a href="#">Home</a></li>
  <li role="presentation" class="disabled"><a href="#">Messages</a></li>
  <li role="presentation" class="dropdown">
    <a
      class="dropdown-toggle"
      data-toggle="dropdown"
      href="#"
      role="button"
      aria-haspopup="true"
      aria-expanded="false"
    >
      Dropdown <span class="caret"></span>
    </a>
    <ul class="dropdown-menu">
      ...
    </ul>
  </li>
</ul>
Tab Pane
<div>
  <!-- Nav tabs -->
  <ul class="nav nav-tabs" role="tablist">
    <li role="presentation" class="active">
      <a href="#home" aria-controls="home" role="tab" data-toggle="tab">Home</a>
    </li>
    <li role="presentation">
      <a href="#profile" aria-controls="profile" role="tab" data-toggle="tab"
        >Profile</a
      >
    </li>
    <li role="presentation">
      <a href="#messages" aria-controls="messages" role="tab" data-toggle="tab"
        >Messages</a
      >
    </li>
    <li role="presentation">
      <a href="#settings" aria-controls="settings" role="tab" data-toggle="tab"
        >Settings</a
      >
    </li>
  </ul>
  <!-- Tab panes -->
  <div class="tab-content">
    <div role="tabpanel" class="tab-pane fade in active" id="home">...</div>
    <div role="tabpanel" class="tab-pane fade" id="profile">...</div>
    <div role="tabpanel" class="tab-pane fade" id="messages">...</div>
    <div role="tabpanel" class="tab-pane fade" id="settings">...</div>
  </div>
</div>
Tab Pane JS API
$('#myTabs a').click(function (e) {
  e.preventDefault();
  $(this).tab('show');
});
$('#myTabs a[href="#profile"]').tab('show'); // Select tab by name
$('#myTabs a:first').tab('show'); // Select first tab
$('#myTabs a:last').tab('show'); // Select last tab
$('#myTabs li:eq(2) a').tab('show'); // Select third tab (0-indexed)
Tab Pane JS Events
- hide.bs.tab (on the current active tab)
- show.bs.tab (on the to-be-shown tab)
- hidden.bs.tab (on the previous active tab, the same one as for the hide.bs.tab event)
- shown.bs.tab (on the newly-active just-shown tab, the same one as for the show.bs.tab event)
$('a[data-toggle="tab"]').on('shown.bs.tab', function (e) {
  const target = e.target; // newly activated tab
  const relatedTarget = e.relatedTarget; // previous active tab
});
Collapse
href/data-target -> id
<a
  class="btn btn-primary"
  role="button"
  data-toggle="collapse"
  href="#collapseExample"
  aria-expanded="false"
  aria-controls="collapseExample"
>
  Link with href
</a>
<button
  class="btn btn-primary"
  type="button"
  data-toggle="collapse"
  data-target="#collapseExample"
  aria-expanded="false"
  aria-controls="collapseExample"
>
  Button with data-target
</button>
<div class="collapse in" id="collapseExample">
  <div class="well">...</div>
</div>
Accordion
panel-body/list-group
<div
  class="panel-group"
  id="accordion"
  role="tablist"
  aria-multiselectable="true"
>
  <div class="panel panel-default">
    <div class="panel-heading" role="tab" id="headingOne">
      <h4 class="panel-title">
        <a
          role="button"
          data-toggle="collapse"
          data-parent="#accordion"
          href="#collapseOne"
          aria-expanded="true"
          aria-controls="collapseOne"
        >
          Collapsible Group Item #1
        </a>
      </h4>
    </div>
    <div
      id="collapseOne"
      class="panel-collapse collapse in"
      role="tabpanel"
      aria-labelledby="headingOne"
    >
      <div class="panel-body">
        Anim cliche, high life terry richardson ad squid.
      </div>
    </div>
  </div>
  <div class="panel panel-default">
    <div class="panel-heading" role="tab" id="headingTwo">
      <h4 class="panel-title">
        <a
          class="collapsed"
          role="button"
          data-toggle="collapse"
          data-parent="#accordion"
          href="#collapseTwo"
          aria-expanded="false"
          aria-controls="collapseTwo"
        >
          Collapsible Group Item #2
        </a>
      </h4>
    </div>
    <div
      id="collapseTwo"
      class="panel-collapse collapse"
      role="tabpanel"
      aria-labelledby="headingTwo"
    >
      <div class="panel-body">
        Anim cliche, high life terry richardson ad squid.
      </div>
    </div>
  </div>
  <div class="panel panel-default">
    <div class="panel-heading" role="tab" id="headingThree">
      <h4 class="panel-title">
        <a
          class="collapsed"
          role="button"
          data-toggle="collapse"
          data-parent="#accordion"
          href="#collapseThree"
          aria-expanded="false"
          aria-controls="collapseThree"
        >
          Collapsible Group Item #3
        </a>
      </h4>
    </div>
    <div
      id="collapseThree"
      class="panel-collapse collapse"
      role="tabpanel"
      aria-labelledby="headingThree"
    >
      <div class="panel-body">
        Anim cliche, high life terry richardson ad squid.
      </div>
    </div>
  </div>
</div>
Text
- text-center/left/right
- text-primary/info/success/danger
Form
<!-- type,format,value -->
<input id=”” name=””
type=”text/email/password/radiobutton/checkbox(checked)/submit/number/range/color/date/url”
value=”(textfield/buttonText)” placeholder=”(默认占位文字)”
<!-- validate input data -->
required pattern=”[0-9a-zA-z]{5/13-16}”
<!-- []:可用字符 {}:字符数目 -->
min=”(number)” max=”(number)” step=”(步长:指定输入数字必须倍数关系)”
<!-- validate input data-->
/>
Form Basic
- <form class="form-horizontal" role="form">
- <form class="form-inline" role="form">
<form class="form-horizontal" role="form">
  <!-- input -->
  <div class="form-group">
    <label for="firstName" class="col-sm-2 control-label">First Name</label>
    <div class="col-sm-10">
      <input
        type="text"
        class="form-control"
        id="firstName"
        name="firstName"
        placeholder="Enter First Name"
      />
    </div>
  </div>
  <!-- input -->
  <div class="form-group">
    <label for="lastName" class="col-sm-2 control-label">Last Name</label>
    <div class="col-sm-10">
      <input
        type="text"
        class="form-control"
        id="lastName"
        name="lastName"
        placeholder="Enter Last Name"
      />
    </div>
  </div>
  <!-- input-addon -->
  <div class="form-group">
    <label for="telNum" class="col-xs-12 col-sm-2 control-label">
      Contact Tel
    </label>
    <div class="col-xs-5 col-sm-4 col-md-3">
      <div class="input-group">
        <div class="input-group-addon">(</div>
        <input
          type="tel"
          class="form-control"
          id="areaCode"
          name="areaCode"
          placeholder="Area code"
        />
        <div class="input-group-addon">)</div>
      </div>
    </div>
    <div class="col-xs-7 col-sm-6 col-md-7">
      <input
        type="tel"
        class="form-control"
        id="telNum"
        name="telNum"
        placeholder="Tel. number"
      />
    </div>
  </div>
  <!-- input -->
  <div class="form-group">
    <label for="emailID" class="col-sm-2 control-label">Email</label>
    <div class="col-sm-10">
      <input
        type="email"
        class="form-control"
        id="emailID"
        name="emailID"
        placeholder="Email"
      />
    </div>
  </div>
  <!-- check box and select -->
  <div class="form-group">
    <div class="checkbox col-sm-5 col-sm-offset-2">
      <label class="checkbox-inline">
        <input type="checkbox" name="approve" value="" />
        <strong>May we contact you?</strong>
      </label>
    </div>
    <div class="col-sm-3 col-sm-offset-1">
      <select class="form-control">
        <option>Tel.</option>
        <option>Email</option>
      </select>
    </div>
  </div>
  <!-- textarea -->
  <div class="form-group">
    <label for="feedback" class="col-sm-2 control-label">Your Feedback</label>
    <div class="col-sm-10">
      <textarea
        class="form-control"
        id="feedback"
        name="feedback"
        rows="12"
      ></textarea>
    </div>
  </div>
  <!-- submit button -->
  <div class="form-group">
    <div class="col-sm-offset-2 col-sm-10">
      <button type="submit" class="btn btn-primary">Send Feedback</button>
    </div>
  </div>
</form>
<form>
  <div class="form-group">
    <label for="exampleInputEmail1">Email address</label>
    <input
      type="email"
      class="form-control"
      id="exampleInputEmail1"
      placeholder="Email"
    />
  </div>
  <div class="form-group">
    <label for="exampleInputPassword1">Password</label>
    <input
      type="password"
      class="form-control"
      id="exampleInputPassword1"
      placeholder="Password"
    />
  </div>
  <div class="form-group">
    <label for="exampleInputFile">File input</label>
    <input type="file" id="exampleInputFile" />
    <p class="help-block">Example block-level help text here.</p>
  </div>
  <div class="checkbox">
    <label> <input type="checkbox" /> Check me out </label>
  </div>
  <button type="submit" class="btn btn-default">Submit</button>
</form>
<div class="row">
  <div class="col-lg-6">
    <div class="input-group">
      <div class="input-group-btn">
        <button
          type="button"
          class="btn btn-default dropdown-toggle"
          data-toggle="dropdown"
          aria-haspopup="true"
          aria-expanded="false"
        >
          Action <span class="caret"></span>
        </button>
        <ul class="dropdown-menu">
          <li><a href="#">Action</a></li>
          <li><a href="#">Another action</a></li>
          <li><a href="#">Something else here</a></li>
          <li role="separator" class="divider"></li>
          <li><a href="#">Separated link</a></li>
        </ul>
      </div>
      <!-- /btn-group -->
      <input type="text" class="form-control" aria-label="..." />
    </div>
    <!-- /input-group -->
  </div>
  <!-- /.col-lg-6 -->
</div>
CheckBox and Select
<div class="form-group">
  <div class="checkbox col-sm-5 col-sm-offset-2">
    <label class="checkbox-inline">
      <input type="checkbox" name="approve" value="" />
      <strong>May we contact you?</strong>
    </label>
  </div>
  <div class="col-sm-3 col-sm-offset-1">
    <select class="form-control">
      <option>Tel.</option>
      <option>Email</option>
    </select>
  </div>
</div>
Form Alerts and Prompts
- has-color
- has-feedback
- form-control-feedback(icon)
- control-label/form-control/help-block
<div class="form-group has-success has-feedback">
  <label class="control-label" for="inputSuccess2">Input with success</label>
  <input
    type="text"
    class="form-control"
    id="inputSuccess2"
    aria-describedby="inputSuccess2Status"
  />
  <span
    class="glyphicon glyphicon-ok form-control-feedback"
    aria-hidden="true"
  ></span>
  <span id="inputSuccess2Status" class="sr-only">(success)</span>
</div>
<div class="form-group has-warning has-feedback">
  <label class="control-label" for="inputWarning2">Input with warning</label>
  <input
    type="text"
    class="form-control"
    id="inputWarning2"
    aria-describedby="inputWarning2Status"
  />
  <span
    class="glyphicon glyphicon-warning-sign form-control-feedback"
    aria-hidden="true"
  ></span>
  <span id="inputWarning2Status" class="sr-only">(warning)</span>
</div>
<div class="form-group has-error has-feedback">
  <label class="control-label" for="inputError2">Input with error</label>
  <input
    type="text"
    class="form-control"
    id="inputError2"
    aria-describedby="inputError2Status"
  />
  <span
    class="glyphicon glyphicon-remove form-control-feedback"
    aria-hidden="true"
  ></span>
  <span id="inputError2Status" class="sr-only">(error)</span>
</div>
<div class="form-group has-success has-feedback">
  <label class="control-label" for="inputGroupSuccess1"
    >Input group with success</label
  >
  <div class="input-group">
    <span class="input-group-addon">@</span>
    <input
      type="text"
      class="form-control"
      id="inputGroupSuccess1"
      aria-describedby="inputGroupSuccess1Status"
    />
  </div>
  <span
    class="glyphicon glyphicon-ok form-control-feedback"
    aria-hidden="true"
  ></span>
  <span id="inputGroupSuccess1Status" class="sr-only">(success)</span>
</div>
Table
Table Basic Class
- table-striped
- table-bordered
- table-hover
- table-condensed
- table-responsive
<div class="table-responsive">
  <table class="table table-striped">
    <tr>
      <td> </td>
      <th>2013</th>
      <th>2014</th>
      <th>2015</th>
    </tr>
    <tr>
      <th>Employees</th>
      <td>15</td>
      <td>30</td>
      <td>40</td>
    </tr>
    <tr>
      <th>Guests Served</th>
      <td>15000</td>
      <td>45000</td>
      <td>100,000</td>
    </tr>
    <tr>
      <th>Special Events</th>
      <td>3</td>
      <td>20</td>
      <td>45</td>
    </tr>
    <tr>
      <th>Annual Turnover</th>
      <td>$251,325</td>
      <td>$1,250,375</td>
      <td>~$3,000,000</td>
    </tr>
  </table>
</div>
Card
Panel
<div class="panel panel-primary">
  <div class="panel-heading">
    <h3 class="panel-title">Facts At a Glance</h3>
  </div>
  <div class="panel-body">
    <dl class="dl-horizontal">
      <dt>Started</dt>
      <dd>3 Feb. 2013</dd>
      <dt>Major Stake Holder</dt>
      <dd>HK Fine Foods Inc.</dd>
      <dt>Last Year's Turnover</dt>
      <dd>$1,250,375</dd>
      <dt>Employees</dt>
      <dd>40</dd>
    </dl>
  </div>
</div>
Well
- well/well-xs/well-sm
<div class="well">
  <blockquote>
    <p>paragraph</p>
    <footer>
      Yogi Berra,<cite title="Source Title"
        >The Wit and Wisdom of Yogi Berra, 2014</cite
      >
    </footer>
  </blockquote>
</div>
Images
Img Class
- img-responsive
- img-rounded
- img-circle
- img-thumbnail
Thumbnail
<div class="row">
  <div class="col-sm-6 col-md-4">
    <div class="thumbnail">
      <img class="img-thumbnail" src="..." alt="..." />
      <div class="caption">
        <h3>Thumbnail label</h3>
        <p>...</p>
        <p>
          <a href="#" class="btn btn-primary btn-xs" role="button">Button</a>
          <a href="#" class="btn btn-default btn-xs" role="button">Button</a>
        </p>
      </div>
    </div>
  </div>
</div>
Media
- media
- media-list(ul)
- media-object
- media-body
- media-heading
- media-left/right
- media-top/middle/bottom
<ul class="media-list">
  <li class="media">
    <div class="media-left media-middle">
      <a href="#">
        <img class="media-object" src="..." alt="..." />
      </a>
    </div>
    <div class="media-body">
      <h4 class="media-heading">Media heading</h4>
      ...
    </div>
  </li>
</ul>
Embed
- embed-responsive
- embed-responsive-item
- targets: <iframe>, <embed>, <video>, <object>
<!-- 16:9 aspect ratio -->
<div class="embed-responsive embed-responsive-16by9">
  <iframe class="embed-responsive-item" src="..."></iframe>
</div>
<!-- 4:3 aspect ratio -->
<div class="embed-responsive embed-responsive-4by3">
  <iframe class="embed-responsive-item" src="..."></iframe>
</div>
Alerts and Prompts
Labels
- target: span
- label
- label-color
- label-size
<span class="label label-default label-xs">Default</span>
<span class="label label-primary label-sm">Primary</span>
<span class="label label-success label-md">Success</span>
<span class="label label-info label-lg">Info</span>
<span class="label label-warning">Warning</span>
<span class="label label-danger">Danger</span>
Badges
<button class="btn btn-primary" type="button">
  Messages <span class="badge">4</span>
</button>
Alerts
- alert
- alert-color
- alert-dismissible
- alert-link
<div class="alert alert-warning alert-dismissible" role="alert">
  <button type="button" class="close" data-dismiss="alert" aria-label="Close">
    <span aria-hidden="true">×</span>
  </button>
  <strong>Warning!</strong> Better check yourself, you're not looking too good.
  <a href="#" class="alert-link">...</a>
</div>
Progress Bars
- progress-bar
- width/aria-valuemin/aria-valuemax
- progress-bar-color
- progress-bar-striped
- stacked: put multi-progress-bar into same .progress
<div class="progress">
  <div
    class="progress-bar progress-bar-success"
    role="progressbar"
    aria-valuenow="40"
    aria-valuemin="0"
    aria-valuemax="100"
    style="width:
  40%"
  >
    <span class="sr-only">40% Complete (success)</span>
  </div>
</div>
<div class="progress">
  <div
    class="progress-bar progress-bar-info"
    role="progressbar"
    aria-valuenow="20"
    aria-valuemin="0"
    aria-valuemax="100"
    style="width:
  20%"
  >
    <span class="sr-only">20% Complete</span>
  </div>
</div>
<div class="progress">
  <div
    class="progress-bar progress-bar-warning"
    role="progressbar"
    aria-valuenow="60"
    aria-valuemin="0"
    aria-valuemax="100"
    style="width:
  60%"
  >
    <span class="sr-only">60% Complete (warning)</span>
  </div>
</div>
<div class="progress">
  <div
    class="progress-bar progress-bar-danger"
    role="progressbar"
    aria-valuenow="80"
    aria-valuemin="0"
    aria-valuemax="100"
    style="width:
  80%"
  >
    <span class="sr-only">80% Complete (danger)</span>
  </div>
</div>
Tooltip
- data-toggle="tooltip"
- data-placement="left"
- title="Tooltip on left"
// manually initialization
$(function () {
  $('[data-toggle="tooltip"]').tooltip();
});
<button
  type="button"
  class="btn btn-default"
  data-toggle="tooltip"
  data-placement="left"
  title="Tooltip on left"
>
  Tooltip on left
</button>
<button
  type="button"
  class="btn btn-default"
  data-toggle="tooltip"
  data-placement="top"
  title="Tooltip on top"
>
  Tooltip on top
</button>
<button
  type="button"
  class="btn btn-default"
  data-toggle="tooltip"
  data-placement="bottom"
  title="Tooltip on bottom"
>
  Tooltip on bottom
</button>
<button
  type="button"
  class="btn btn-default"
  data-toggle="tooltip"
  data-placement="right"
  title="Tooltip on right"
>
  Tooltip on right
</button>
Popover
- data-container="body"
- data-toggle="popover"
- data-trigger="focus"
- data-placement="left"
- title="left"
- data-content="Button content."
// manually initialization
$(function () {
  $('[data-toggle="popover"]').popover();
});
<button
  type="button"
  class="btn btn-default"
  data-container="body"
  data-toggle="popover"
  data-placement="left"
  title="left"
  data-content="Button Content."
>
  Popover on left
</button>
<button
  type="button"
  class="btn btn-default"
  data-container="body"
  data-toggle="popover"
  data-placement="top"
  title="top"
  data-content="Button content."
>
  Popover on top
</button>
<button
  type="button"
  class="btn btn-default"
  data-container="body"
  data-toggle="popover"
  data-placement="bottom"
  title="bottom"
  data-content="Button content."
>
  Popover on bottom
</button>
<button
  type="button"
  class="btn btn-default"
  data-container="body"
  data-toggle="popover"
  data-placement="right"
  title="right"
  data-content="Button content."
>
  Popover on right
</button>
Modal
data-dismiss ="modal"
修饰 .modal-dialog/.modal-content: $().modal('').
<!-- Button trigger modal -->
<button
  type="button"
  class="btn btn-primary btn-lg"
  data-toggle="modal"
  data-target="#myModal"
>
  Launch demo modal
</button>
<!-- Modal -->
<div
  class="modal fade"
  id="myModal"
  tabindex="-1"
  role="dialog"
  aria-labelledby="myModalLabel"
>
  <div class="modal-dialog" role="document">
    <div class="modal-content">
      <div class="modal-header">
        <button
          type="button"
          class="close"
          data-dismiss="modal"
          aria-label="Close"
        >
          <span aria-hidden="true">×</span>
        </button>
        <h4 class="modal-title" id="myModalLabel">Modal title</h4>
      </div>
      <div class="modal-body">...</div>
      <div class="modal-footer">
        <button type="button" class="btn btn-default" data-dismiss="modal">
          Close
        </button>
        <button type="button" class="btn btn-primary">Save changes</button>
      </div>
    </div>
  </div>
</div>
<button
  type="button"
  class="btn btn-primary"
  data-toggle="modal"
  data-target="#exampleModal"
  data-whatever="@mdo"
>
  Open modal for @mdo
</button>
<button
  type="button"
  class="btn btn-primary"
  data-toggle="modal"
  data-target="#exampleModal"
  data-whatever="@fat"
>
  Open modal for @fat
</button>
<button
  type="button"
  class="btn btn-primary"
  data-toggle="modal"
  data-target="#exampleModal"
  data-whatever="@getBootstrap"
>
  Open modal for @getBootstrap
</button>
<div
  class="modal fade"
  id="exampleModal"
  tabindex="-1"
  role="dialog"
  aria-labelledby="exampleModalLabel"
>
  <div class="modal-dialog" role="document">
    <div class="modal-content">
      <div class="modal-header">
        <button
          type="button"
          class="close"
          data-dismiss="modal"
          aria-label="Close"
        >
          <span aria-hidden="true">×</span>
        </button>
        <h4 class="modal-title" id="exampleModalLabel">New message</h4>
      </div>
      <div class="modal-body">
        <form>
          <div class="form-group">
            <label for="recipient-name" class="control-label">Recipient:</label>
            <input type="text" class="form-control" id="recipient-name" />
          </div>
          <div class="form-group">
            <label for="message-text" class="control-label">Message:</label>
            <textarea class="form-control" id="message-text"></textarea>
          </div>
        </form>
      </div>
      <div class="modal-footer">
        <button type="button" class="btn btn-default" data-dismiss="modal">
          Close
        </button>
        <button type="button" class="btn btn-primary">Send message</button>
      </div>
    </div>
  </div>
</div>
Button
- targets: a/input/button
- base: btn
- color: btn-primary btn-success btn-warning btn-danger btn-info
- size: btn-xs/sm/lg
- display: btn-block/btn-main
- group: btn-toolbar/btn-group/btn-group-vertical/btn-group-lg
<div class="btn-toolbar">
  <div class="btn-group">
    <button class="btn">左</button>
    <button class="btn">中</button>
    <button class="btn">右</button>
  </div>
</div>
<div class="btn-group btn-group-vertical">
  <button class="btn">上</button>
  <button class="btn">中</button>
  <button class="btn">下</button>
</div>
- other: btn-social-icon
<button data-toggle="””" data-target-”” data-dismiss="””"></button>
Jumbotron
<div class="jumbotron">
  <div class="container">
    <div class="main">
      <h1>We are Broadway</h1>
      <a href="#" class="btn-main"> Get started </a>
    </div>
  </div>
</div>
Icon-Fonts
<span class="glyphicon glyphicon-home" aria-hidden="true"></span>
<i class="fa fa-phone/fa-fax/fa-envelope"></i>
Carousel
Slide Show:
<div id="carousel-example-generic" class="carousel slide" data-ride="carousel">
  <!-- Indicators -->
  <ol class="carousel-indicators">
    <li
      data-target="#carousel-example-generic"
      data-slide-to="0"
      class="active"
    ></li>
    <li data-target="#carousel-example-generic" data-slide-to="1"></li>
    <li data-target="#carousel-example-generic" data-slide-to="2"></li>
  </ol>
  <!-- Wrapper for slides -->
  <div class="carousel-inner" role="listbox">
    <div class="item active">
      <img src="..." alt="..." />
      <div class="carousel-caption">...</div>
    </div>
    <div class="item">
      <img src="..." alt="..." />
      <div class="carousel-caption">...</div>
    </div>
    ...
  </div>
  <!-- Controls -->
  <a
    class="left carousel-control"
    href="#carousel-example-generic"
    role="button"
    data-slide="prev"
  >
    <span class="glyphicon glyphicon-chevron-left" aria-hidden="true"></span>
    <span class="sr-only">Previous</span>
  </a>
  <a
    class="right carousel-control"
    href="#carousel-example-generic"
    role="button"
    data-slide="next"
  >
    <span class="glyphicon glyphicon-chevron-right" aria-hidden="true"></span>
    <span class="sr-only">Next</span>
  </a>
</div>
// Initializes the carousel with an optional options object
// and starts cycling through items.
$('.carousel').carousel({
  interval: 2000,
});
$('.carousel').carousel('cycle');
$('.carousel').carousel('pause');
$('.carousel').carousel(number);
$('.carousel').carousel('prev');
$('.carousel').carousel('next');
Common Class
color
- default/primary/info/warnings/danger
size
- xs/sm/md/lg
state
- active
- disabled
Bootstrap Animation
- collapse
- fade
- in
Bootstrap 4
Bootstrap Card
- .well: .card.bg-light
- .panel: .card
- .thumbnail: .card + .card-img/.card-img-top
Custom Bootstrap Theme
Bootstrap Reboot Tips
- @import '~bootstrap/scss/reboot;
Some useful best practices:
- body font-size: 1remfor scalable component spacing.
- avoid margin-topas vertical margins collapse (only usemargin-bottomfor headingsh1/.../h6, listsul/ol/dl/dd,<pre></pre>)
- block use remsformarginfor easier scaling across device sizes
- using inherit whenever possible for font-property
- box-sizing: border-boxis globally set on every element including- *::beforeand- *::after
- body sets a global font-family,line-heightandtext-align
- body sets background-color: #ffffor safety
- legend/- fieldsethave no borders/padding/margin
- labelare set to- display: inline-blockto allow margin
- textareaare modified to only be resizable vertically- resize: verticalas horizontal resizing often “breaks” page layout
- summaryare set to- cursor: pointer
Useful Custom Functions
- @import '~bootstrap/scss/functions';
- @import '~bootstrap/scss/mixins';
@function color($key: 'blue') {
  @return map-get($colors, $key);
}
@function theme-color($key: 'primary') {
  @return map-get($theme-colors, $key);
}
@function gray($key: '100') {
  @return map-get($grays, $key);
}
@function theme-color-level($color-name: 'primary', $level: 0) {
  /* stylelint-disable-next-line function-no-unknown */
  $color: theme-color($color-name);
  /* stylelint-disable-next-line function-no-unknown */
  $color-base: if($level > 0, #000, #fff);
  $level: abs($level);
  @return mix($color-base, $color, $level * $theme-color-interval);
}
/* color contrast: color-yiq(color) */
.custom-element {
  /* stylelint-disable-next-line function-no-unknown */
  color: color-yiq(theme-color('dark'));
  /* stylelint-disable-next-line function-no-unknown */
  background-color: color-yiq(#000);
}
Custom Colors
- @import '~bootstrap/scss/variables';
$theme-colors: (
  'primary': #0074d9,
  'danger': #ff4136 'secondary': #495057,
  'success': #37b24d,
  'info': #1c7ed6,
  'warning': #f59f00,
  'danger': #f03e3e
);
$colors: (
  'blue': $blue,
  'indigo': $indigo,
  'purple': $purple,
  'pink': $pink,
  'red': $red,
  'orange': $orange,
  'yellow': $yellow,
  'green': $green,
  'teal': $teal,
  'cyan': $cyan,
  'white': $white,
  'gray': $gray-600,
  'gray-dark': $gray-800
);
Custom Spacing
key variable - $spacer:
- t - for classes that set margin-top or padding-top
- b - for classes that set margin-bottom or padding-bottom
- l - for classes that set margin-left or padding-left
- r - for classes that set margin-right or padding-right
- x - for classes that set both xxx-left andxxx-right
- y - for classes that set both xxx-top andxxx-bottom
- blank - for classes that set a margin or padding on all 4 sides of the element
- 0 - for classes that eliminate the margin or padding by setting it to 0
- 1 - (by default) for classes that set the margin or padding to $spacer * .25.
- 2 - (by default) for classes that set the margin or padding to $spacer * .5.
- 3 - (by default) for classes that set the margin or padding to $spacer
- 4 - (by default) for classes that set the margin or padding to $spacer * 1.5.
- 5 - (by default) for classes that set the margin or padding to $spacer * 3.
- auto - for classes that set the margin to auto
.mt-0 {
  margin-top: 0 !important;
}
.ml-1 {
  margin-left: ($spacer * 0.25) !important;
}
.px-2 {
  padding-right: ($spacer * 0.5) !important;
  padding-left: ($spacer * 0.5) !important;
}
.p-3 {
  padding: $spacer !important;
}
.mt-n1 {
  margin-top: -0.25rem !important;
}
Custom Layout
$grid-columns: 12;
$grid-gutter-width: 30px;
Custom Borders
$border-width: 1px;
$border-color: $gray-300;
$border-radius: 0.25rem;
$border-radius-lg: 0.3rem;
$border-radius-sm: 0.2rem;
Custom Navbar and Navigation
/* $nav-link-padding-x: 1.5rem; */
$navbar-nav-link-padding-x: 1.5rem;
$nav-link-padding-y: 1rem;
$navbar-light-color: $violet-4;
$navbar-light-hover-color: $violet-6;
$navbar-light-active-color: $violet-9;
$navbar-light-toggler-border-color: $violet-2;
$navbar-dark-color: $violet-3;
$navbar-dark-hover-color: $violet-5;
$navbar-dark-active-color: $violet-1;
$navbar-dark-toggler-border-color: $violet-1;
$nav-tabs-border-color: $primary;
$nav-tabs-link-hover-border-color: $violet-5;
$nav-tabs-link-active-color: $violet-9;
$nav-tabs-link-active-bg: $violet-3;
$nav-tabs-link-active-border-color: $violet-1;
$nav-pills-link-active-color: $white;
$nav-pills-link-active-bg: $primary;
Custom Dropdown
custom $dropdown- variables
$dropdown-padding-y: 1rem;
$dropdown-spacer: 0.5rem;
$dropdown-bg: $white;
$dropdown-border-color: $primary;
$dropdown-border-width: $border-width * 3;
$dropdown-link-color: $primary;
$dropdown-item-padding-y: 0.5rem;
$dropdown-item-padding-x: 3rem;
Custom List Group
$list-group-border-color: $primary;
Custom Card
$card-border-color: $primary;
$card-color: $primary;
$card-bg: $violet-0;
Custom Breadcrumb
$breadcrumb-bg: $violet-0;
$breadcrumb-divider-color: $gray-600;
$breadcrumb-active-color: $violet-3;
/* stylelint-disable-next-line function-no-unknown */
$breadcrumb-divider: quote('>');
Custom Form
$input-btn-padding-y: 0.75rem;
$input-btn-padding-x: 1.5rem;
$input-btn-focus-width: 0; /* remove focus box-shadow */
$custom-control-indicator-checked-color: $primary;