Flask之Bootstrap前端Grid布局小结

发布时间:2021-12-03 公开文章

I am not a designer nor a coder. I'm just a guy with a point-of-view and a computer.

 

筑基<融合<元婴<分神<渡劫<大乘

 

 


一、背景

懒癌依旧,2016年底堆砌代码成功运行了intumu.com,之后忙于微信小程序的开发(RestAPI后端接口),因为后端代码看不见,垃圾一点也无所谓。然而,当打算再次编写前端时,发现之前的写的确实垃圾,还好小程序前端的积累,对CSS和JS也有更进一步认识,在这个基础上打算对Bootstrap进一步小结。

二、Gridbu布局

响应式网格系统随着屏幕或视口(viewport)尺寸的增加,系统会自动分为最多12列。

 

 

 

 

(一)Bootstrap 网格系统(Grid System)的工作原理

网格系统通过一系列包含内容的行和列来创建页面布局。下面列出了 Bootstrap 网格系统是如何工作的:

  • 行必须放置在 .container class 内,以便获得适当的对齐(alignment)和内边距(padding)。
  • 使用行来创建列的水平组。
  • 内容应该放置在列内,且唯有列可以是行的直接子元素。
  • 预定义的网格类,比如 .row 和 .col-xs-4,可用于快速创建网格布局。LESS 混合类可用于更多语义布局。
  • 列通过内边距(padding)来创建列内容之间的间隙。该内边距是通过 .rows 上的外边距(margin)取负,表示第一列和最后一列的行偏移。
  • 网格系统是通过指定您想要横跨的十二个可用的列来创建的。例如,要创建三个相等的列,则使用三个 .col-xs-4

(二)网格选项

下表总结了 Bootstrap 网格系统如何跨多个设备工作:

 

 

 

 

(三)基本的网格结构

下面是 Bootstrap 网格的基本结构:

<div class="container">
<!--
<div> 可定义文档中的分区或节(division/section)它可以用作严格的组织工具,并且不使用任何格式与其关联。
<div> 是一个块级元素,它的内容自动地开始一个新行。
class="container",它可以当做一个空白面板或者就是一个空的没有定义样式的容器。
-->
   <div class="row">
<!--没有定义样式的行-->
      <div class="col-*-*"></div>
<!--定义网格宽度的列column-->
      <div class="col-*-*"></div> 
<!--定义网格宽度的列column-->     
   </div>
   <div class="row">...</div>
</div>
<div class="container">....

让我们来看几个简单的网格实例:

响应式的列重置

以下实例包含了4个网格,但是我们在小设备浏览时无法确定网格显示的位置。

为了解决这个问题,可以使用 .clearfix class和 响应式实用工具来解决,如下面实例所示:

示例1

<!--空容器-->
<div class="container">
<!--第1行-->
    <div class="row" >
<!--第1列-->
        <div class="col-xs-6 col-sm-3" 
            style="background-color: #dedef8;
            box-shadow: inset 1px -1px 1px #444, inset -1px 1px 1px #444;">
<!--div中引入了样式:背景;阴影-->
            <p>Lorem ipsum dolor sit amet, consectetur adipisicing elit.</p>
<!--<p> 标签定义段落。p 元素会自动在其前后创建一些空白。浏览器会自动添加这些空间,您也可以在样式表中规定。-->
        </div>
<!--第2列-->
        <div class="col-xs-6 col-sm-3" 
        style="background-color: #dedef8;box-shadow: 
        inset 1px -1px 1px #444, inset -1px 1px 1px #444;">
            <p>Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do 
            eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut 
            enim ad minim veniam, quis nostrud exercitation ullamco laboris 
            nisi ut aliquip ex ea commodo consequat.
            </p>
            <p>Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do 
            eiusmod tempor incididunt ut. 
            </p>
        </div>
 <!--清除浮动,在小设备上防止展示混乱-->
        <div class="clearfix visible-xs"></div>
 <!--第3列-->
        <div class="col-xs-6 col-sm-3" 
        style="background-color: #dedef8;
        box-shadow:inset 1px -1px 1px #444, inset -1px 1px 1px #444;">
            <p>Ut enim ad minim veniam, quis nostrud exercitation ullamco 
            laboris nisi ut aliquip ex ea commodo consequat. 
            </p>
        </div>
<!--第4列-->
        <div class="col-xs-6 col-sm-3" 
        style="background-color: #dedef8;box-shadow: 
        inset 1px -1px 1px #444, inset -1px 1px 1px #444;">
            <p>Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do 
            eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut 
            enim ad minim 
            </p>
        </div>
    </div>
</div>

浏览器上调整窗口大小查看变化,或在您手机上查看效果。

偏移列

偏移是一个用于更专业的布局的有用功能。它们可用来给列腾出更多的空间。例如,.col-xs-* 类不支持偏移,但是它们可以简单地通过使用一个空的单元格来实现该效果。

为了在大屏幕显示器上使用偏移,请使用 .col-md-offset-* 类。这些类会把一个列的左外边距(margin)增加 * 列,其中 * 范围是从 1 到 11

在下面的实例中,我们有 <div class="col-md-6">..</div>,我们将使用 .col-md-offset-3 class 来居中这个 div。

<div class="container">
<!--空容器-->
    <h1>Hello, world!</h1>
<!--标题,自带换行属性-->
<!--第1行-->
    <div class="row" >
<!--第1列-->
        <div class="col-md-6 col-md-offset-3" 
        style="background-color: #dedef8;box-shadow: 
        inset 1px -1px 1px #444, inset -1px 1px 1px #444;">
<!--第1列,样式属性-->
            <p>Lorem ipsum dolor sit amet, consectetur adipisicing 
            elit.
            </p>
<!--第1列,第1行-->
        </div>
    </div>
</div>

嵌套列

为了在内容中嵌套默认的网格,请添加一个新的 .row,并在一个已有的 .col-md-* 列内添加一组 .col-md-* 列。被嵌套的行应包含一组列,这组列个数不能超过12(其实,没有要求你必须占满12列)。

在下面的实例中,布局有两个列,第二列被分为两行四个盒子。

<!--空白容器-->
<div class="container">
<!--第1行-->
    <h1>Hello, world!</h1>
<!--第2行-->
    <div class="row">
<!--第2行,第1列-->
        <div class="col-md-3" style="background-color: #dedef8;box-shadow: inset 1px -1px 1px #444, inset -1px 1px 1px #444;">
<!--第2行,第1列,第1行-->
            <h4>第一列</h4>
<!--第2行,第1列,第2行-->
            <p>
                第2行,第1列,第2行
            </p>
        </div>
<!--第2行,第2列-->
        <div class="col-md-9" style="background-color: #dedef8;box-shadow: inset 1px -1px 1px #444, inset -1px 1px 1px #444;">
<!--第2行,第2列,第1行-->
            <h4>第二列 - 分为四个盒子</h4>

<!--第2行,第2列,第2行-->
            <div class="row">
<!--第2行,第2列,第2行第1列-->
                <div class="col-md-6" style="background-color: #B18904; box-shadow: inset 1px -1px 1px #444, inset -1px 1px 1px #444;">
                    <p>
                       第2行,第2列,第2行第1列
                    </p>
                </div>
<!--第2行,第2列,第2行第2列-->
                <div class="col-md-6" style="background-color: #B18904; box-shadow: inset 1px -1px 1px #444, inset -1px 1px 1px #444;">
                    <p>
                       第2行,第2列,第2行第2列
                    </p>
                </div>
            </div>
<!--第2行,第2列,第3行-->
            <div class="row">

                <div class="col-md-6" style="background-color: #B18904; box-shadow: inset 1px -1px 1px #444, inset -1px 1px 1px #444;">
                    <p>
                        第2行,第2列,第3行第1列
                    </p>
                </div>
                <div class="col-md-6" style="background-color: #B18904; box-shadow: inset 1px -1px 1px #444, inset -1px 1px 1px #444;">
                    <p>
                       第2行,第2列,第3行第2列
                    </p>
                </div>
            </div>
        </div>
    </div>
</div>

 

列排序

Bootstrap 网格系统另一个完美的特性,就是您可以很容易地以一种顺序编写列,然后以另一种顺序显示列。

您可以很轻易地改变带有 .col-md-push-* 和 .col-md-pull-* 类的内置网格列的顺序,其中 * 范围是从 1 到 11

在下面的实例中,我们有两列布局,左列很窄,作为侧边栏。我们将使用 .col-md-push-* 和 .col-md-pull-* 类来互换这两列的顺序。

 

<!--空白容器-->
<div class="container">
<!--第1行-->
    <h1>Hello, world!</h1>
<!--第2行-->
    <div class="row">
<!--第2行,第1行-->
        <p>
            排序前
        </p>
<!--第2行,第2行第1列-->
        <div class="col-md-4" style="background-color: #dedef8; box-shadow: inset 1px -1px 1px #444, inset -1px 1px 1px #444;">
         我在左边
        </div>
<!--第2行,第2行第2列-->
        <div class="col-md-8" style="background-color: #dedef8; box-shadow: inset 1px -1px 1px #444, inset -1px 1px 1px #444;">
         我在右边
        </div>
    </div>
<!--<br> 可插入一个简单的换行符。-->
    <br>
<!--第3行-->
    <div class="row">
<!--第3行,第1行-->
        <p>
            排序后
        </p>
<!--第3行,第2行第1列-->
        <div class="col-md-4 col-md-push-8" style="background-color: #dedef8; box-shadow: inset 1px -1px 1px #444, inset -1px 1px 1px #444;">
         我在左边
        </div>
<!--第3行,第2行第2列-->
        <div class="col-md-8 col-md-pull-4" style="background-color: #dedef8; box-shadow: inset 1px -1px 1px #444, inset -1px 1px 1px #444;">
         我在右边
        </div>
    </div>
</div>

 

分享一个俺的网站