BootStrap响应式布局、隐藏以及一些组件的拆解

一、关于BootStrap

  Bootstrap,来自 Twitter,是目前最受欢迎的前端框架。Bootstrap 是基于 HTML、CSS、JAVASCRIPT 的,它简洁灵活,使得 Web 开发更加快捷。对前端学习的较少,简单记录一些自己学习到的BootStrap的相关知识。个人理解bootstrap有这些特点:响应式布局(能够对浏览器窗口的变化即时做出响应)、栅栏式布局(与响应式布局紧密相连,能够快速布局)、提供了一些写好的全局CSS样式、组件以及js插件等。下面主要讲解bootstrap的响应式布局与栅栏系统;导航栏、轮播条等组件的拆解,对于应用层面的东西另写一篇笔记记录。

 

二、BootStrap的响应式布局与栅栏系统

2.1 响应式布局

  什么是响应式布局:在不同设备(手机、平板、台式显示器等),其分辨率不同,能显示的内容范围也不同。BootStrap提供了一套能够适应不同设备、同一设备浏览器尺寸变化等情况的布局系统。所谓响应式就是响应浏览器尺寸的变化。

  为什么需要响应式布局:一套页面适应不同设备,可以减少开发、维护成本,同时也可以给用户更好的体验。

  BootStrap中实现响应式布局的类名:

    1、container / container-fluid:独占一行,且修饰的div块元素可以响应变化尺寸,两者有区别,前者是固定布局,也就是不同设备尺寸范围内,其宽度为固定;后者则是100%布局。实现原理有两种:1、js的resize事件;2、css中@media

// 以下js代码非bs官方代码,是我自定义实现的,对前端js关注使用就行了
//
以下代码依赖jquery // 这里也提个醒,bootstrap对jquery的依赖有版本上的限制 // 如果发现引用bs组件时,发现一些行为不生效,可看console是不是报出了版本问题 $(function () { // 1、获取container对象 let container = $('.container'); let clientW = 0; // 2、定义resize的回调函数 let resize = function () { // 2.1 获取改变后的宽度 clientW = window.innerWidth; // 2.2 判断不同设备的尺寸
       // 可以看到container不是100%,而是固定布局
       // container-fluid就是设置100%就好了,还更简单 if (clientW >= 1200) { // 超大屏幕 container.width(1170); } else if (clientW >= 992) { // 大屏幕 container.width(970); console.log(container.width()); } else if (clientW >= 768) { // 小屏幕 container.width(750); } else { // 大屏幕 container.width("100%"); } }; resize(); // 2、监听窗口大小变化 $(window).resize(resize); });
/*媒体查询,主要的实现逻辑是一致的,就是判断浏览器尺寸,css更美观简介,bootstrap真正的实现也是用了@media*/
@media screen and (max-width: 768px)
{ .container{ width: 100%; } } @media screen and (max-width: 992px) and (min-width: 768px){ .container{ width: 750px; } } @media screen and (min-width: 992px) and (max-width: 1200px){ .container{ width: 970px; } } @media screen and (min-width: 1200px){ .container{ width: 1170px; } }

    2、hidden-sm / hidden-xs / hidden-md / hidden-lg等,响应尺寸隐层或者可见修饰元素。见BS官网的全局CSS样式-响应式工具。实现方式也是两种:1、js实现;2、css实现。

// 自己写的,不是官方源码
// 主要通过display实现隐藏
@media screen and (max-width: 768px){
            .hidden-xs{
                display: none;
            }
        }

        @media screen and (max-width: 992px){
            .hidden-sm{
                display: none;
            }
}

 

 

2.2 栅栏系统

  什么是栅栏系统:Bootstrap 提供了一套响应式、移动设备优先的流式栅格系统,随着屏幕或视口(viewport)尺寸的增加,系统会自动分为最多12列【来自官方的介绍】。将一行根据尺寸分为12格子,使用者就可以选择不同的占比来划分。

  为什么需要栅栏系统:快速布局,只需要指定类就可以实现container中的布局。

  如何应用:栅格系统用于通过一系列的行(row)与列(column)的组合来创建页面布局,你的内容就可以放入这些创建好的布局中。“row”必须放在container中,以便为其赋予合适的排列(aligment)和内补(padding)。通过指定col-设备-列数来实现布局。

<div class="container">
        <div class="row">
               <div class="col-md-2">

 

三、一些查用组件、插件的拆解

  BootStrap提供了相当丰富的一些组件与插件,如果没有特殊定制化要求的,完全可以复制粘贴代码,修改修改文字就好了。这部分内容主要通过拆解组件、插件来实现改造、定制官方提供的这些东西。主要以导航栏、轮播条为例。

3.1 导航栏拆解

  看看BootStrap提供的完整版的导航栏NavBar,主要包括了头部(Navbar-header)、折叠栏(navbar-collapse,实现响应式隐藏)。navbar-header中的button是在小屏幕时才出现的,主要功能是实现一个折叠栏效果,data-toggle="collapse"说明这个button的作用,data-target则是用于指明折叠的那个元素,也就是我们的导航栏主体。<span class='icon-bar'>是汉堡图标中的横线。官方提供的折叠栏主题中,主要包括了两个ul列表和一个表单。ul列表中还包括了下拉菜单,也就是dropdown,功能和折叠相似,但dropdown-menu应该是固定位置的,不会改变已有扩展已有div。navbar-left、navbar-right是用来指定左右漂浮的。如果有自己的需要,可以添加或者删除某些内容,基本上是以删除为主了,这个已经很全面。

<!--对于导航条需要最好使用nav,官网也有说如果使用div怎么处理-->
<!--navbar-static-top : 固定在顶部,随翻页而消失-->
<!--navbar-default : 默认样式,inverse为黑色风格-->
<nav class="navbar navbar-default navbar-static-top">
    <!--整体为一栅栏容器-->
    <div class="container">
        <!--第一部分:导航条的头,主要放商标-->
        <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>

        <!--可折叠的导航栏主体,响应式隐藏-->
        <div class="collapse navbar-collapse" id="bs-example-navbar-collapse-1">
            <!--ul列表1-->
            <ul class="nav navbar-nav">
                <li class="active"><a href="#">Link</a></li>
                <li><a href="#">Link</a></li>
                <!--dropdown 下拉菜单-->
                <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">
                        <span class="dropdown-header">展示头部信息</span>
                        <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>
            <!--表单,navbar-left表示左漂浮-->
            <form class="navbar-form navbar-left">
                <div class="form-group">
                    <input type="text" class="form-control" placeholder="Search">
                </div>
                <button type="submit" class="btn btn-default">Submit</button>
            </form>
            <!--ul列表2-->
            <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>
    </div>
</nav>

 3.2 轮播条拆解

 

posted @ 2021-03-01 09:38  4verson  阅读(636)  评论(0)    收藏  举报