bootstrp_组件

3.组件

网页中有一些复杂的特殊效果,之前必须使用 js,dom,jq

boot为我们封装好了很多常见的组件,我门可以之间使用

方便快捷,但是如果需要个性化处理,比较繁琐

boot中,大量使用元素的自定义属性来调用方法

1.下拉菜单

基本结构

<div class="dropdown">

  <button class="dropdown-toggle"

   data-toggle="dropdown"></button>

  <ul class="dropdown-menu"></ul>

</div>

<h2>下拉菜单</h2>
  <div class="dropdown">
   <!-- boot中通过自定义事件 data-toggle 来激活事件-->
  <botton class="btn btn-primary dropdown-toggle" data-toggle="dropdown">下拉菜单</botton>
  <ul class="dropdown-menu text-center">
    <li><a href="#">青椒</a></li>
    <li><a href="#">泡椒</a></li>
    <li><a href="#">红椒</a></li>
    <li><a href="#">甜椒</a></li>
    <li><a href="#">灯笼椒</a></li>
  </ul>
  </div>

div .dropdown  父级,相对定位

button .dropdown-toggle  画下拉三角

ul .dropdown-menu  隐藏display:none

data-toggle=”dropdown” 自定义属性的作用

1.当button被点击时,激活事件

2.自定义属性的值绝对激活哪一个事件

2.按钮组

<div class="btn-group btn-group-lg">
  <a href="#" class="btn btn-dark">冬瓜</a>
  <a href="#" class="btn btn-danger">南瓜</a>
</div>

h2>按钮组</h2>
  <div class="btn-group btn-group-lg">
  <a href="#" class="btn btn-dark">冬瓜</a>
  <a href="#" class="btn btn-danger">南瓜</a>
  <a href="#" class="btn btn-primary">西瓜</a>
  <a href="#" class="btn btn-secondary">北瓜</a>
  <a href="#" class="btn btn-warning">丝瓜</a>
  </div>
  <hr/>

 外层div中class有如下值

.btn-group横向按钮组
btn-group-vertical纵向按钮组
可以添加btn-group-sm/lg调整按钮大小

3.信息提示框

<div class="alert alert-warning alert-dismissible">
  <span class="close" data-dismiss="alert" >

&times;

</span>

              提示信息
</div>

<h2>信息提示框</h2>
  <div class="alert alert-warning alert-dismissible">
    请检查钱包里面是否有钱<span class="close" data-dismiss="alert"><b>&times;</b></span>
  </div>
  <h2>水平导航</h2>
  <ul class="nav justify-content-around nav-justified">
    <li class="nav-item"><a href="#" class="nav-link btn btn-danger">酸菜</a></li>
    <li class="nav-item"><a href="#" class="nav-link btn btn-primary">甜菜</a></li>
    <li class="nav-item"><a href="#" class="nav-link btn btn-
  </ul>

alert基本类

alert-danger/warning/… 提示框颜色

alert-dismissible为了修饰内部span.close

.colse  右浮动

data-dismisss=”aleert” 自定义属性
   事件使用alert的方式运行

4.导航

①水平导航

 

基本结构: ul.nav>li.nav-item>a.nav-linlk

<u>l class="nav justify-content-around nav-justified">

<li class="nav-item">

<a href="#" class="nav-link btn btn-danger">酸菜</a>

</li>

  </ul>

 

ul.nav定义了弹性布局,主轴x

之前学的所有的弹性布局的样式都可以使用

.nav-justify>.nav-item同时设置,让元素等宽显示

a.nav-link块级元素,设置了hover,focus等样式

②选项卡导航

基本结构

上层是选项卡

ul.nav.nav-tabs>li.nav-item>a.nav-link

<ul class=”nav nav-tabs”>

<li .nav-item>

<a .nav-link></a>

</li>

ul.nav变成选项卡添加类nav-tab

  .nav-tabs设置自己孩子nav.item nav.link

a标签添加自定义属性data-toggle=”tab”

以tab的方式激活事件

绑定目标元素a的href属性指向下面的内容的id值

下层内容

div.tab-content>div.tab-pane

<div .tab-content>

  <div .table-pane>

div.tab-content>div.tab-pane 配合使用

让div.tab-pane都是display:none\

然后div.tab-pane要写id,让a标签绑定

<h2>选项卡导航</h2>
    <!-- 选项-->
    <ul class="nav nav-tabs">
  <li class="nav-item"><a href="#pane1" class="nav-link" data-toggle="tab">麻将云集</a></li>
  <li class="nav-item"><a href="#pane2" class="nav-link" data-toggle="tab">万子</a></li>
  <li class="nav-item"><a href="#pane3" class="nav-link" data-toggle="tab">条子</a></li>
  <li class="nav-item"><a href="#pane4" class="nav-link" data-toggle="tab">筒子</a></li>
    </ul>
    <!-- 内容-->
    <div class="tab-content">
  <div id="pane1"   class="tab-pane">成都麻将,广东麻将,香港麻将,重庆麻将</div>
  <div id="pane2"   class="tab-pane">一万,二万,三万,四万,五万,六万,七万,八万,九万</div>
  <div id="pane3"   class="tab-pane">一条,二条,三条,四条,五条,六条,七条,八条,九条</div>
  <div id="pane4"   class="tab-pane">一筒,二筒,三筒,四筒,五筒,六筒,七筒,八筒,九筒</div>
    </div>

 

 

③胶囊导航

导航部分

ul.nav.nav-pills>li.nav-item>a.nav-link data-toggle=”pill”

<ul .nav .nav-pills>

  <li .nav-item>

     <a .nav-link data-toggle=”pill” href=”#内容”>

内容部分

div.tab-content>div.tab-pane

<div .tab-content>

   <div .tab-pane>

与选项卡一致修改参数nav-tab位tab-pills

<h2>胶囊导航</h2>
    <ul class="nav nav-pills">
  <li class="nav-item"><a class="nav-link" data-toggle="pill" href="#d1">电脑</a></li>
  <li class="nav-item"><a class="nav-link" data-toggle="pill" href="#d2">手机</a></li>
    </ul>
    <div class="tab-content">
  <div id="d1" class="tab-pane" >mac 电脑联想电脑,华硕电脑,戴尔电脑,惠普电脑 </div>
  <div id="d2" class="tab-pane">iPhone,huawei,mi,Honor</div>
  </div>

***事件激活三部曲

 一个事件激活,关注几件事 
1.激活这个事件的元素         (data-toggle="collapse)

2.这个事件以什么方式激活     data-toggle"=" collapse "

3.这个事件激活后,改变的目标元素是谁  (data-target="#motai")

5.导航栏

div.navbar.navbar-expand-sl/lg/md/sm>ul.navbar-nav>li.nav-item>a.nav-link

 

<div .anvbar.navbar-expend-sl/lg/md/sm>

<ul .navbar-nav >

  <li .nav-item><a nav-link>

<h2>导航栏</h2>
  <div class="navbar navbar-expand-md">
  <ul class="navbar-nav ">
    <li class="nav-item"><a class="nav-link" href="#">小了白了兔了白</a></li>
    <li class="nav-item"><a class="nav-link" href="#">小了白了兔了白</a></li>
    <li class="nav-item"><a class="nav-link" href="#">爱了吃了萝了卜</a></li>
    <li class="nav-item"><a class="nav-link" href="#">爱了吃了萝了卜</a></li>
  </ul>
  </div>

.navbar-expend-sl/lg/md/sm:作用,作为子元素ul.navbar-nav的选择器条件,让ul.navbar-nav在主轴方向从y轴变成x轴

div.navbar-expend-*配合ul.navbar-nav可以让导航栏在不同屏幕下横向或纵向显示

响应式导航栏:

 lg: 大屏超大屏,li横向显示,中小屏纵向显示

6.折叠效果

<button data-toggle="collapse" data-target="#demo">

折叠</button>

<div class="collapse" id="demo">内容</div>

折叠,需要折叠内容添加 .collapsee (display:none)

折叠事件data-toggle=”collapse”

折叠目标:  如果是a标签,使用href=”#” ;

如果是button使用data-target=”#”

<h2>折叠效果</h2>
  <button class="btn btn-secondary" data-toggle="collapse" data-target="#bt_zd">显示折叠</button>
  <div class="collapse " id="bt_zd">show
  Lorem ipsum dolor sit amet, </div>

7.卡片

<div class="card">

    <div class="card-header"> </div>

    <div class="card-body"></div>

    <div class="card-footer"></div>

  </div>

8.手风琴(卡片+折叠)

<div #father>

  <div .card>

   <div .card-header>

     <a .card-link data-toggle=”colapse” href=#d1> 内容</a>

</div>

<div  data-parent=”#father” #d1 .collapse>

 <div .card-body>内容2</div>

</div>

   </div>

  </div>

 

1. .collapse不能和.card-body在同一个标签上,

  不然会发生折叠/显示的卡顿

  解决方案div.collapse>div.card-body

2.几个折叠部分,可以同时打开,而不能开启一个,其它的都关闭

  解决方案,在最外层div(card外部)上写id="parent"

  在所有div.collapse中添加事件的绑定data-parent="#parent"

  这样就可以保证在最外层div中,只有一个折叠区域可以打开了

<h2>手风琴(卡片+折叠)</h2>
  <div id="father">
  <div class="card">
  <div class="card-header">
    <a href="#d5" class="card-link" data-toggle="collapse">早餐</a>
  </div>
  <!-- 折叠隐藏部分-->
  <div data-parent="#father" class="collapse" id="d5">
    <div class="card-body">面条,包子,稀饭</div>
  </div>
 </div>
  <div class="card">
    <div class="card-header">
      <a href="#d6" class="card-link" data-toggle="collapse">中餐</a>
    </div>
    <div data-parent="#father" class="collapse" id="d6">
      <div class="card-body">青椒肉丝,鱼香肉丝,土豆肉丝</div>
    </div>
   </div>
  </div>

9.折叠导航栏

1.div.navbar-expend-sm和.navbar-toggler的关系

  .navbar-toggler显示按钮

祖先有.div.navbar-expend-sm的时候,.navbar-toggler这个按钮显示,

 

<h2>折叠导航栏</h2>
<div class="navbar navbar-expand-md bg-light navbar-light">
  <!-- 1.不折叠的菜单项-->
 
<a  class="navbar-brand d-md-none d-lg-block " href="#">Bootstrap中文网</a>
  <!-- 2.在超小屏下出现的按钮                  折叠区域的激发按钮-->
 
<button class="navbar-toggler" data-toggle="collapse" data-target="#content">
    <span class="navbar-toggler-icon"></span>   <!--按钮上的三条线 -->
 
</button>
  <!-- 3.折叠的导航-->
 
<div id="content" class="collapse navbar-collapse">
    <ul class="navbar-nav">
      <li class="nav-item">
        <a class="nav-link" href="">Bootstrap3中文文档</a>
      </li>
      <li class="nav-item mx-2">
        <a class="nav-link " href="">网站示例</a>
      </li>
    </ul>
  </div>

2.在外层div中navbar-dark/light的作用:

  这个类对本地div没有任何修饰,

修饰的是后代元素的字体颜色

3.navbar-collapse的作用

  .navbar-expend-sm .,avbar-collapse配合,

让ul在sm/ms/lg/xl下显示,在xs下,

ul的父级div执行.collapse的样式,隐藏

4..navbar-expend-sm决定了以下事情

  ①决定了sm以上显示,sm以下隐藏

  ②决定了ul在sm以上横向显示,在sm以下垂直显示

  ③决定了折叠div在sm以上显示,在sm以下隐藏

10.媒体对象

 

 

 

boot提供了很对类来处理媒体相关的对象(图片,影音)

<div .media>

   <img>

<div .media-body>

</div>

<button class="btn btn-warning " data-toggle="modal" data-target="#motai">打开模态框</button>
  <div id="motai" class="modal">
  <div class="modal-dialog">
    <div class="modal-content">
      <div class="modal-header">
        <h3>填写美食</h3>
        <button data-dismiss="modal" class="close">&times;</button> 
</div>
      <div class="modal-body">
        <input class="form-control" type="text"/>  </div>
      <div class="modal-footer">
        <button class="btn btn-success" data-dismiss="modal">ok</button>
      </div>  </div></div> </div>

11.焦点轮播图

轮播图结构

div.carousel .data-ride=”carousel” #demo    相对定位

>div.carousel-inner                 w100溢出隐藏

>div.carousel-item                  display:none

>img             

给最外层div添加事件,data-ride=”carousel”

<h2>焦点轮播图</h2>
  <div class="carousel" data-ride="carousel" id="lunbotu">
  <!-- 轮播图片-->
  <div class="carousel-inner">
    <div class="carousel-item active">
      <img class="w-100" src="../img/banner3.png" alt=""/>
    </div>
    <div class="carousel-item">
      <img class="w-100" src="../img/banner2.png" alt=""/>
    </div>
  </div>
  <!-- 左右箭头-->
  <a href="#lunbotu" class="carousel-control-prev bg-dark " data-slide="prev" >
    <span class="carousel-control-prev-icon"></span>
  </a>
  <a href="#lunbotu" class="carousel-control-next bg-danger" data-slide="next">
    <span class="carousel-control-next-icon"></span>
  </a>
  <!-- 轮播指示器-->
  <ul class="carousel-indicators">
    <li data-slide-to="0" data-target="#lunbotu" class="active"></li>
    <li data-slide-to="1" data-target="#lunbotu"></li>
  </ul>
  </div>
/*重写箭头样式*/
.carousel-control-prev,.carousel-control-next {
  width: 4%;height: 20%;
  background: #aaa;
  border-radius: 0.25rem;
  top:40%;
}
 /*重写指示器样式*/
  .carousel-indicators li{
  width: 1rem; height: 1rem;;
  background: #fff;
  border-radius: 50%; mragin:0 5px;
}
.carousel-indicators li:hover{
  cursor:pointer ;
}
.carousel-indicators .active {
  background-color: #0AA1ED;
}

左右箭头

    <a href="# demo" class="carousel-control-prev ">

      <span class="carousel-control-prev-icon"></span>

    </a>

    <a href="#demo" class="carousel-control-next ">

      <span class="carousel-control-next-icon"></span>

</a>

重写箭头样式

.carousel-control-prev,.carousel-control-next {

      width: 4%;

      height: 20%;

      background: #aaa;

      border-radius: 0.25rem;

      top:40%;

}

a标签要添加自定义属性data-slide=”prev/next”  

事件目标是最外层div#lunbotu    href=”#lunbotu”

指示器

ul.carousel-indicators      决定定位,横向弹性

>li             宽高,背景色,外边距,需要重写li样式

        如果让li有被选中的样式,需重写.active样式

/*重写指示器样式*/

    .carousel-indicators li{

      width: 1rem;

      height: 1rem;;

      background: #fff;

      border-radius: 50%;

      mragin:0 5px;

}

.carousel-indicators .active {

      background-color: #0AA1ED;

    }

点击li激活事件   data-slide-to=”图片下标”  下标从0开始

事件改变的目标   .data-target=”#demo”    整个轮播图最外层的div#id

12.模态框

  覆盖在父窗体上的一个子窗体             目的:用于与用户做一些互动

div #motai .modal

>.modal-dialog

>div.modal-content
>div.modal-header+div.modal.body+div.modal-footer

关闭事件:  button.close data-dismis=”modal”

13.其它组件

1.徽章

badge  基本类   跟小按钮十分相似

颜色badge-danger/success/…..

徽章的样式  badge-pill 胶囊

2.巨幕

  巨大的内边距,有背景颜色和圆角

  div.jumbotron”

3.分页

 ul.pagination>li.page-item>a.page-link

li的修饰类   .active激活

  .disabled禁用

<h2>分页</h2>
 <ul class="pagination">
  <li class="page-item mr-1 disabled"><a class="page-link mx-1" href="">上一页</a></li>
  <li class="page-item mx-1 active"><a class="page-link  " href="">1</a></li>
  <li class="page-item mx-1"><a class="page-link " href="">2</a></li>
  <li class="page-item mx-1"><a class="page-link " href="">3</a></li>
  <li class="page-item ml-1"><a class="page-link " href="">下一页</a></li>
 </ul>

4.面包屑导航

 常用于有路径关系的导航

ul.breadcrumb>li.breadcrumb-item

中间的连接符号需要自己重写样式

<h2>面包屑导航</h2>
<ul class="breadcrumb">
  <li class="breadcrumb-item"><a href="">首页</a></li>
  <li class="breadcrumb-item"><a href="">手机</a></li>
  <li class="breadcrumb-item"><a href="">华为</a></li>
  <li class="breadcrumb-item"><a href="">P30</a></li>
</ul>
/*修改 面包屑的样式   > */
    .breadcrumb-item + .breadcrumb-item::before {
  content: ">";
}

5.进度条

①普通进度条

div.progress>div.progress-bar.w-50.bg-dark

父div是进度条的槽,

子div进度条,子div的宽度是进度条的进度

<h2>进度条</h2>
<div class="progress"> <!-- 进度条的槽-->
  <div class="progress-bar w-50 bg-danger"> <!-- 进度条-->
  </div>
</div>

②条纹进度条

在子div中加类  .progress-bar-striped

③带动画条纹进度条

在子div中加类  .progress-bar-animated

4.js插件

5. sass 定制

BOOT定制:scss/sass

 bootstrap最重要:响应式 + 栅格布局 + scss/sass

CSS有很多缺点

语法不够强大,没有变量,没有合理的样式复用机制,导致难以维护。

 

我们要使用动态样式语言,赋予css新的特性,提高样式羽凡的可维护性。

常用的动态样式语言:

 1.SCSS/SASS  (scss兼容sass,scss更接近 )

1.SCSS详解

①什么是scss

scss是一款强化css的辅助工具,它和css语法很像。

它在css的语法基础上,添加了变量,嵌套,混合,导入,函数等高级功能,这些拓展命令使css更加强大与优雅

浏览器不能直接解析scss文件,需要在项目中吧scss转义成css文件,让浏览器解析。

scss可以让css开发更高效

②scss的安装与使用

scss在服务器端使用,必须安装nodejs,而且版本在v8.11以上

  在线安装:npm install –g node-sass

  离线安装:找到nodejs安装路径,将安装包文件放到nodejs文件夹下

验证安装成功:cmd > node-sass –v  验证版本

③SCSS文件转换从CSS文件

1.单文件转换

  创建scss文件,  cmd> node-sass scss/*.scss  css/*.css

scss/*.scss : 要转换的scss的文件路径和文件名

css/*.css :转换后的css的文件路径和文件名

2.多文件转换

  cmd> node-sass scss(文件夹名称) –o css(文件夹名称)

3.单文件监听

  cmd> node-sass –w scss/*.scss  css/*.css

 开启,系统会盯着*.scss,当*.scss内容发生改变保存的时候,自动转换位*.css

4.多文件监听

  cmd> node-sass –w scss -o css

④SCSS基础语法

1.变量

使用$声明变量,变量名包含 - , _ ;

命名规则基于与css选择器相同,尽量做到见名知意

总结:

1.变量声明在{ }外,整个scss文件都可以使用;

变量声明在{ }之内,只有当前{ }内可以使用。

2.!default规则,如果此变量在之前已经声明辅赋值了,俺么使用之前的值,

               如果之前没有声明赋值,使用现在的值

2.嵌套

*.html

<div#content>

<div.top>

<p>

<h1>

</div>

<div.buttom>

 <buttom>

*.scss

#content{
div.top{ color:red;
 p{color:yellow;}
 h1{ color:blue;  } }
  div.bottom{ background-color:#0ff; }
}

*.css

#content div.top {
  color: red; }
#content div.top p {
  color: yellow; }
#content div.top h1 {
  color: blue; }
#content div.bottom {
  background-color: #00ff22;
}

伪类的嵌套

  需要在伪类选择器之前添加&,如果不添加,会生成一个空格,导致伪类失败

a{color:#000;
  &:hover{color:#ff0;}
}
属性嵌套
    div{
  border:{style:solid;width:2rem;color:#f00;}
}
群组选择器嵌套
p,h1,div{color: red}

3.导入(@import)

在scss语法中,如果一个scss文件以下划线(_)开头,那么这个scss文件就是一个局部scss文件

scss文件转换成css文件的时候,不会把局部scss文件进行转换,只转换不以下划线开头的文件(局部scss文件)

 

导入语法:  @import “ name”;        导入的时候,不写下划线,不写后缀,

局部文件被导入后,局部文件中的样式,会在全局文件转换的css中生成

同时,局部文件中声明的变量,可以在全局文件中使用

4.混合器 (@mixin-@include)

把多个选择器都会使用的样式封装进一个混合器,需要使用这些样式选择器,可以调用这个混合器,实现代码重用

 

关键字  声明混合器  @mixin 混合器名称($参数1,$参数2){ 样式}

        调用混合器  @include 混合器名称($参数1,$参数2);

混合器的使用场合: 

CSS  Hack

5.继承( @extend)

  一个选择器可以使用另外一个选择器的所有样式

关键字  @extend   转换之后,继承的表现方式是群组选择器

.my1{width: 100px;height: 100px}
.my2{
  background: #f00;
  @extend .my1;
}

⑤运算

  加减乘除余 + - / %      如果必要,会在不同单位之间转换,(前提是scss能转)

1. 加法

+ 除了做加法,还做字符串拼接,

字符串拼接的时候,如果有引号的字符串去拼接无引号的,结果有引号;

                  如果无引号的字符串去拼接有引号的,结果是无引号的

2. 减法

- 由于变量声明的时候可以使用() ,

系统分不清楚(–)是不是变量名称,所以我们写减号的时候要在减号(-)前后加上空格

3. 除法

  在scss中(/)的作用是分割符

以下情况判断为除法:

  1. 运算式的两边有变量或者函数的返回值,是除法:width:$width/2;
2. 运算式被()包裹的时候,是除法   height:(500px/2); 
3. 运算式是其它算术运算式的一部分的时候,是除法  margin-left:5px+8px/2px;

4. 字符串的插值操作

  使用#{} 在字符串中做插值    content:"a #{50+30}c"

5. 颜色运算

#rrggbb和 rgb(r,g,b)  都是分段计算r+r,g+g,b+b    #112233+#445566=#557799
rgba( r,g,b,alpha)相加,要求透明度a的值相同,才能计算

⑥函数

1.scss预定义了很多函数,有有些函数直接可以在css中使用

  rgba(r,g,b,alpha)

  hsl(h,s,l) 

    h:hue色调 取值0~360,3个色段,120一个

s:saturation 饱和度 0.0%~100.0%

l:lightness 亮度 0.0%~100.0%

2.数学函数

round($val) 四舍五入

ceil($val)    向上取整

floor($val)   向下取整

min($v1,$v2.....)

max($v1,$v2.....)

random  随机数

3.字符串函数

unquote($str) 去掉$str的双引号

quote($str) 给$str添加双引号

to_upper_case($str); $str变大写

to_lower_case($str); $str变小写

4.自定义函数

@function get-width($n,$m){

    @return $n - $m;

}

⑦指令

@if(){}@else if(){}@else{}

注意:bool值的小括号可以去掉,加个空格

上一篇:Error reading scss: no such file or directory. Sass is watching for changes. Press Ctrl-C to stop.


下一篇:SCSS的基本操作