day58---前端之Bootstrap框架一

1. Bootstrap框架概述

Bootstrap介绍

  • Bootstrap是最受欢迎的HTML、CSS和JS框架,用于开发响应式布局、移动设备优先的WEB项目,

  • Bootstrap由Twitter的设计师Mark Otto和Jacob Thornton合作开发

  • Bootstrap是为实现快速开发Web应用程序而设计的一套前端工具包

  • Bootstrap支持响应式布局,并且在V3版本之后坚持移动设备优先

Bootstrap的优点

  • 使用Bootstrap之前:

    • 命名:重复、复杂、无意义
    • 样式:重复、冗余、不规范、不和谐
    • 页面:错乱、不规范、不和谐
  • 使用Bootstrap之后:

    • 移动设备优先:自Bootstrap3起,框架包含了贯穿于整个库的移动设备优先的样式
    • 浏览器支持:所有的主流浏览器都支持Bootstrap
    • 容易上手:只要具备HTML和CSS的基础知识,就可以学习和使用Bootstrap
    • 响应式设计:Bootstrap的响应式CSS能够自适应于台式机、平板电脑和手机(响应式Web设计是一个让用户通过各种尺寸的设备浏览网站获得良好的视觉效果的方法)
    • 其他优势:开源免费;提供了基于 Web 的定制;包含了功能强大的内置组件;为开发人员创建接口提供了一个简洁统一的解决方案

Bootstrap官网地址

Bootstrap下载

Bootstrap目录结构

bootstrap-3.3.7-dist/
├── css  // CSS文件
│   ├── bootstrap-theme.css  // Bootstrap主题样式文件
│   ├── bootstrap-theme.css.map
│   ├── bootstrap-theme.min.css  // 主题相关样式压缩文件
│   ├── bootstrap-theme.min.css.map
│   ├── bootstrap.css
│   ├── bootstrap.css.map
│   ├── bootstrap.min.css  // 核心CSS样式压缩文件
│   └── bootstrap.min.css.map
├── fonts  // 字体文件
│   ├── glyphicons-halflings-regular.eot
│   ├── glyphicons-halflings-regular.svg
│   ├── glyphicons-halflings-regular.ttf
│   ├── glyphicons-halflings-regular.woff
│   └── glyphicons-halflings-regular.woff2
└── js  // JS文件
    ├── bootstrap.js
    ├── bootstrap.min.js  // 核心JS压缩文件
    └── npm.js

Bootstrap引入方式

  • 本地引入:

<link href="bootstrap-3.3.7-dist/css/bootstrap.min.css" rel="stylesheet">
  • CDN网络引入:

<link rel="stylesheet" href="https://cdn.bootcss.com/bootstrap/3.3.7/css/bootstrap.min.css" integrity="sha384-BVYiiSIFeK1dGmJRAkycuHAHRg32OmUcww7on3RYdg4Va+PmSTsz/K68vbdEjh4u" crossorigin="anonymous">

2. Bootstrap样式概述

参考:https://v3.bootcss.com/css/#overview

文档类型

  • Bootstrap使用到的某些HTML元素和CSS属性需要将页面设置为HTML5文档类型

移动设备优先

  • 在Bootstrap 2中,对框架中的某些关键部分增加了对移动设备友好的样式。而在Bootstrap 3中,重写了整个框架,使其一开始就是对移动设备友好的。不是简单的增加一些可选的针对移动设备的样式,而是直接融合进了框架的内核中。Bootstrap是移动设备优先的。针对移动设备的样式融合进了框架的每个角落,而不是增加一个额外的文件

  • 为了确保适当的绘制和触屏缩放,需要在head标签之中添加viewport元数据标签

<meta name="viewport" content="width=device-width, initial-scale=1">
  • 在移动设备浏览器上,通过为视口(viewport)设置meta属性为user-scalable=no可以禁用其缩放(zooming)功能。这样禁用缩放功能后,用户只能滚动屏幕,就能让网站看上去更像原生应用的感觉。注意,这种方式我们并不推荐所有网站使用

<meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no">

全局显示、排版和链接

  • 全局显示:

    • 使用body {margin: 0;} 来移除body的边距
    • 设置body的默认字体样式为"Helvetica Neue", Helvetica, Arial,sans-serif
    • 设置文本的默认字体大小为14像素
    • 设置默认的行高度为1.428571429
    • 设置默认的文本颜色为#333333
    • 设置默认的背景颜色为#FFFFFF
    body {
        margin: 0;
        font-family: "Helvetica Neue", Helvetica, Arial, sans-serif;
        font-size: 14px;
        line-height: 1.428571429;
        color: #333333;
        background-color: #ffffff;
    }
    
  • 排版:

    • 使用@font-family-base、@font-size-base和@line-height-base属性作为排版样式
  • 链接样式:

    • 通过属性@link-color设置全局链接的颜色
    • 链接的默认样式: 当鼠标悬停在链接上,或者点击过的链接,颜色会被设置为#2a6496。同时,会呈现一条下划线。点击过的链接,会呈现一个颜色码为#333的细的虚线轮廓。另一条规则是设置轮廓为5像素宽,且对于基于webkit浏览器有一个-webkit-focus-ring-color的浏览器扩展。轮廓偏移设置为-2像素。
    a:hover,a:focus {
        color: #2a6496;
        text-decoration: underline;
    }
    a:focus {
    outline: thin dotted #333;
    outline: 5px auto -webkit-focus-ring-color;
    outline-offset: -2px;
    }
    
  • 这些样式都可以在scaffolding.less中找到

避免跨浏览器的不一致

  • Bootstrap使用Normalize来建立跨浏览器的一致性

  • Normalize.css是一个很小的CSS文件,在HTML元素的默认样式中提供了更好的跨浏览器一致性,由Nicolas Gallagher和Jonathan Neal维护的一个CSS 重置样式库

布局容器

  • Bootstrap需要为页面内容和栅格系统包裹一个container容器。提供了两个作此用处的类。

    • .container 类用于固定宽度并支持响应式布局的容器
    <div class="container">
        ...
    </div>
    
    • .container-fluid 类用于 100% 宽度,占据全部视口(viewport)的容器
    <div class="container-fluid">
        ...
    </div>
    
  • 注意:由于padding等属性的原因,这两种容器类不能互相嵌套。

3. Bootstrap全局CSS样式

栅格系统

参考:https://v3.bootcss.com/css/#grid

  • 描述:栅格系统用于通过一系列的行(row)与列(column)的组合来创建页面布局

  • Bootstrap栅格系统的工作原理

    • row必须包含在.container或.container-fluid中,以便为其赋予合适的排列和内补
    • 通过row在水平方向创建一组column
    • 显示内容放在column中,column放在row中
    • col是预定义的类,可以快速创建栅格布局。格式是:"col-xx-xx"
    • 栅格系统中的列是通过指定1到12的值来表示其跨越的范围
    • col设置的值等于12时,排列铺满整个空间
    • col设置的值大于12时,多余的col会换行排列
    • col设置的值小于12时,从左往后排列,后面空出
  • 栅格的类前缀

    • 大屏幕([大显示器]≥1200px):.col-lg-xx
    • 中等屏幕([普通显示器]≥992px):col-md-xx
    • 小屏幕([平板]≥768px):col-sm-xx
    • 超小屏幕([手机]<768px):col-xs-xx
  • 列偏移

    • .col-md-offset-xx:向右侧偏移
  • 列嵌套

    • 为了使用内置的栅格系统将内容再次嵌套,可以通过添加一个新的.row元素和一系列.col-sm-xx元素到已经存在的.col-sm-xx元素内。被嵌套的行(row)所包含的列(column)的个数不能超过12个
  • 列排序

    • .col-md-push-xx:向右侧移动(推)

    • .col-md-pull-xx:向左侧移动(拉)

排版

参考:https://v3.bootcss.com/css/#type

  • 标题:

    • .h1~.h6
    • small标签:可以嵌套在标题中,用来标记副标题
  • 页面主体

    • p标签:设置等于二分之一行高的底部外边距
    • .lead:突出显示中心内容
  • 内联文本元素

    • mark标签:标注的文本
    • del标签:被删除的文本
    • s标签:没用的文本
    • ins标签:插入的文本
    • u标签:带下划线的文本
    • small标签或(.small):小号文本(设置为父容器字体大小的85%)
    • strong标签:强调的文本
    • em标签:斜体
  • 对齐方式

    • text-left:左对齐
    • text-center:居中
    • text-right:右对齐
    • text-justify:两端对齐
    • text-nowrap:无对其方式
  • 大小写转换

    • text-lowercase:转为小写
    • text-uppercase:转为大写
    • text-capitalize:首字母大写
  • 缩略语

    • abbr标签:当鼠标悬停在缩写和缩写词上时就会显示完整内容
    <abbr title="显示缩略语的完整内容">缩略语</abbr>
    
    • .initialism:首字母缩略语,比abbr标签多的功能是把字体变的小一点
    <abbr title="显示缩略语的完整内容" class="initialism">首字母缩略语</abbr>
    
  • 地址

    • address标签:让联系信息以最接近日常使用的格式呈现。在每行结尾都添加一个br,可以保留需要的样式
  • 引用

    • blockquote标签:默认引用样式
    • blockquote标签中的footer标签:标明引用来源,footer中的cite标签指定来源的名称
    • blockquote标签中的.blockquote-reverse类:让引用呈现内容右对齐的效果
  • 列表

    • ul:无序列表
    • ol:有序列表
    • .list-unstyled:无样式列表
    • .list-inline:内联列表
    • dl:标题列表
    • .dl-horizontal:水平排列的标题列表

代码

参考:https://v3.bootcss.com/css/#code

  • 内联代码

    • code标签:包裹内联样式的单行代码内容(需要把特殊符号使用特殊字符替换)
  • 用户输入

    • kbd标签:标记用户通过键盘输入的内容
  • 代码块

    • pre标签:包裹多行代码块(需要注意将尖括号做转义处理)
    • .pre-scrollable:设置max-height为350px,并在垂直方向展示滚动条
  • 变量

    • var标签:标记变量
  • 程序输出

    • samp标签:标记程序输出的内容

表格

参考:https://v3.bootcss.com/css/#tables

  • 基本样式表格:为table标签添加.table类就可以为表格添加上基本样式

  • 条纹状表格:添加.table-striped类

  • 带边框的表格:添加.table-bordered类

  • 紧缩表格:添加.table-condensed类

  • 鼠标悬停:添加.table-hover类

  • 状态类:

    • .active: 鼠标悬停在行或单元格上时所设置的颜色
    • .success:标识成功或积极的动作
    • .info:标识普通的提示信息或动作
    • .warning:标识警告或需要用户注意
    • .danger:标识危险或潜在的带来负面影响的动作
  • 响应式表格:在table标签外层再套一层div标签,并添加.table-responsive类

表单

参考:https://v3.bootcss.com/css/#forms

  • form标签通过多个div来布局,每一个div添加.form-group类,div中的每一个input添加.form-control类,并且和label结合使用,

  • 内联表单:

    • 为form标签添加.form-inline类,让内容左对齐
    • lable标签添加.sr-only类可以隐藏label标签的内容
    • label后可以使用一个div标签,并添加.input-group类,把input前后各添加一个div标签,并添加.input-group-addon类
  • 水平排列表单:为form标签添加.form-horizontal类,并使用col-xx-xx容器布局的方式,为label标签添加.control-label类来实现

  • 被支持的控件:

    • 输入框(input):包括大部分表单控件、文本输入域控件,还支持所有HTML5类型的输入控件:text、password、datetime、datetime-local、date、month、time、week、number、email、url、search、tel 和 color
    • 文本域(textarea):支持多行文本的表单控件,可根据需要改变rows属性
    • 多选和单选按钮:
      • 默认样式:
        • 多选按钮:为外层的div标签添加.checkbox类,默认选中添加checked属性,如果设置为不可用添加.disabled类,并且input标签添加disbaled属性
        • 单选按钮:为外层的div标签添加.radio类,默认选中添加checked属性,如果设置为不可用添加.disabled类,并且input标签添加disbaled属性
      • 内联多选和单选按钮:
        • 多选按钮:为label标签添加..checkbox-inline类
        • 单选按钮:为label标签添加..radio-inline类
      • 不带label文本的多选和单选按钮:在input标签中添加aria-label属性
    • 下拉列表(select):
      • 单选:为select标签添加.form-control类
      • 多选:在单选的基础上再为seelct标签添加multiple 属性
  • 静态控件:添加.form-control-static类

  • 禁用状态:

    • 直接添加disabled属性
    • 使用fieldset标签包起来,并添加disabled属性也可是实现禁用的效果
  • 只读状态:直接添加readonly属性

  • Help text:显示提示或帮助信息,在input标签添加aria-describedby属性,并赋值helpBlock

  • 校验状态:

    • .has-success:成功
    • .has-warning:警告
    • .has-error:错误
  • 控件尺寸:

    • 高度尺寸:
      • .input-lg:input添加之后,输入框变大
      • .input-sm:input添加之后,输入框变小
    • 水平排列的表单组的尺寸:
      • .form-group-lg:元素和表单控件尺寸变大
      • .form-group-sm:元素和表单控件尺寸变小
    • 调整列尺寸:使用栅格系统的列包裹住输入框或父元素标签的方式来设置

按钮

参考:https://v3.bootcss.com/css/#buttons

  • 可作为按钮使用的标签或元素:

    • a标签
    • button标签
    • input标签
  • 成为按钮:添加.btn,a标签还要添加role属性,并赋值button(role="button")

  • 预定义样式:

    • .btn-default:默认样式
    • .btn-primary:首选项
    • .btn-success:成功
    • .btn btn-info:一般信息
    • .btn-warning:警告
    • .btn-danger:危险
    • .btn-link:普通链接
  • 尺寸:

    • .btn-lg:大按钮
    • .btn-sm:小按钮
    • .btn-xs:超小尺寸按钮
  • 块级按钮:添加.btn-block类,可以将其拉伸至父元素标签100%的宽度,成为块级元素

  • 激活状态:添加.active类

  • 禁用状态:

    • button标签添加disabled属性和disabled值实现
    • a标签添加.disabled类实现

图片

参考:https://v3.bootcss.com/css/#images

  • 响应式图片:添加.img-responsive类;如果需要图片居中需要添加.center-block类

  • 图片形状:为img标签添加类

    • img-rounded:圆角图片
    • img-circle:圆形图片
    • img-thumbnail:边框图片

辅助类

参考:https://v3.bootcss.com/css/#helper-classes

  • 文本颜色:

    • .text-muted类
    • .text-primary类
    • .text-success类
    • .text-info类
    • .text-warning类
    • .text-danger类
  • 背景颜色:

    • .bg-primary类
    • .bg-success类
    • .bg-info类
    • .bg-warning类
    • .bg-danger类
  • 关闭按钮:添加.close类

  • 三角符号:添加.caret类

  • 快速浮动:

    • 左浮动:添加.pull-left类
    • 右浮动:添加.pull-right类
  • 内容块居中:添加.center-block类

  • 清除浮动:添加.clearfix类

  • 显示内容:添加.show类

  • 隐藏内容:添加.hidden类

  • 图片替换:添加.text-hide类可以用来将元素的文本内容替换为一张背景图

响应式工具

参考:https://v3.bootcss.com/css/#responsive-utilities

  • .visible-xs-*:超小屏幕可见,其他隐藏(可以指定的css样式类型:block、inline、inline-block)

  • .visible-sm-*:小屏幕可见,其他隐藏(可以指定的css样式类型:block、inline、inline-block)

  • .visible-md-*:中等屏幕可见,其他隐藏(可以指定的css样式类型:block、inline、inline-block)

  • .visible-lg-*:大屏幕可见,其他隐藏(可以指定的css样式类型:block、inline、inline-block)

  • .hidden-xs:超小屏幕隐藏,其他可见

  • .hidden-sm:小屏幕隐藏,其他可见

  • .hidden-md:中等屏幕隐藏,其他可见

  • .hidden-lg:大屏幕隐藏,其他可见

4. 简单应用

    <!DOCTYPE html>
    <html >
    <head>
        <meta charset="UTF-8">
        <meta http-equiv="X-UA-Compatible" content="IE=edge">
        <meta name="viewport" content="width=device-width, initial-scale=1">
        <title>day58</title>
        <link rel="stylesheet" href="bootstrap-3.3.7/css/bootstrap.min.css">
        <style>
            body {
                background-color: #EEEEEE;
            }
            .row .head {
                height: 150px;
            }
        </style>
    </head>
    <body>
        <div class="container">
            <div class="row">
                <div class="head"></div>
            </div>
            <div class="row">
                <div class="col-md-4 col-md-offset-4">
                    <div class="row">
                        <div class="h3 col-md-offset-4 col-md-6">请登录</div>
                    </div>
                    <form action="" class="form-horizontal">
                        <div class="form-group">
                            <label for="email" class="col-md-3 control-label">邮箱</label>
                            <div class="col-md-7">
                                <input  type="email" class="form-control" name="email" placeholder="Email">
                                <div class="text-danger"></div>
                            </div>
                        </div>
                        <div class="form-group">
                            <label for="password" class="col-md-3 control-label">密码</label>
                            <div class="col-md-7">
                                <input  type="password" class="form-control" name="password" placeholder="Password">
                                <div class="text-danger"></div>
                            </div>
                        </div>
                        <div class="form-group">
                            <div class="col-md-offset-3 col-md-9">
                                <div class="checkbox">
                                    <label>
                                        <input type="checkbox">记住我
                                    </label>
                                </div>
                            </div>
                        </div>
                        <div class="form-group">
                            <div class="col-md-offset-3 col-md-9">
                                <label for="login"></label>
                                <input  type="button" class="btn btn-primary col-md-9" value="登录">
                            </div>
                        </div>
                    </form>
                </div>
            </div>
        </div>
        <script src="jquery-3.2.1.min.js"></script>
        <script>
            function userLogin() {
                $("#login").on("click", function () {
                    $(".form-control").each(function () {
                        $(this).on("focus", function () {
                            $(".text-danger").text("");
                            $(".form-group").removeClass("has-error");
                        });
                        var inputName =  $(this).attr(\'name\');
                        var inputVal = $(this).val();
                        var textMsg = $(this).parent().prev().text();
                        if (inputVal.length === 0) {
                            $(this).next().text(textMsg + "不能为空");
                            $(this).parent().parent().addClass("has-error");
                            return false;
                        }
                        if (inputName === "email") {
                            var emailReg = /^[a-zA-Z0-9_-]+@[a-zA-Z0-9_-]+(\.[a-zA-Z0-9_-]+)+$/g;
                            if (!emailReg.test(inputVal)) {
                                $(this).next().text(textMsg + "格式不合法");
                                $(this).parent().parent().addClass("has-error");
                                return false;
                            }
                        }
                        if (inputName === "password") {
                            if (inputVal.length < 8) {
                                $(this).next().text(textMsg + "格式不合法");
                                $(this).parent().parent().addClass("has-error");
                                return false;
                            }
                        }
                    });
                    return false;
                })
            }
            $(function () {
                userLogin();
            });
        </script>
    </body>
    </html>