首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >腾讯云主机上测试BootStrap4编译FlexBox

腾讯云主机上测试BootStrap4编译FlexBox

原创
作者头像
崔庆才
修改于 2017-06-19 11:10:35
修改于 2017-06-19 11:10:35
2.4K00
代码可运行
举报
文章被收录于专栏:进击的Coder进击的Coder
运行总次数:0
代码可运行

前言

本节为大家讲解腾讯云主机上测试BootStrap4编译FlexBox的过程。

首先Flexbox是什么?它是Bootstrap4新出的一个布局格式,对移动端开发非常方便。

说一下我为什么要提取Flexbox。有需求才有动力,首先是需求,最近在开发一个移动端适配的网站,使用了materi-ui框架,基于React。使用materi-ui时,已经内置了许多样式,但是bootstrap的一些多余样式会影响一些现有样式,而那些样式对我又没啥用。另外Flex对于移动端布局开发非常适合,这次正好也拿来练练手。

移动端开发是趋势,随着移动端的发展,BootStrap也出了新版本4,不过现在还是alpha版本,还没正式推出。

其中一个比较大的改进便是Flexbox Grid系统。

BootStrap原本最常用的布局栅格化系统在做响应式开发的时候比较方便,但是只针对于移动端开发的时候并没有多大用处了,流行的Flex布局应用越来越广泛。

在Founation中,看到过有了这种Flex布局,它就是适应手机开发的框架。后来Bootstrap4也增加了这块。

那么Flexbox Grid系统相比之前什么改进呢?请看官方文档实例。

Flexbox

P.S 别去上什么中文网,全是错误,实例结果有问题。不想吐槽,一开始我还以为是Flexbox Grid设计不科学。

准备工作

首先下载BootStrap V4。

Bootstrap V4

目前最新版还是alpha版本,如链接失效,请移步官网。

BootStrap

然后你需要安装了node,gulp,自行下载即可。

gulp

开始抽取

下载之后打开Bootstrap源代码文件夹,找到scss目录,可以看到如下的结构,在这里我用IDE打开更直观。

mixins是一些可调用的组件,本身编译不会产生任何结果。utilities是一些公用的包,比如我们要抽取的Flex就在这里面。

外面的这么多是一些公用的基本组件。

通过官方文档可以发现:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
If you’re familiar with modifying variables in Sass—or any other CSS preprocessor—you’ll be right at home to move into flexbox mode.
Open the _variables.scss file and find the $enable-flex variable.
Change it from false to true.
Recompile, and done!
Alternatively, if you don’t need the source Sass files, you may swap the default Bootstrap compiled CSS with the compiled flexbox variation. Head to the download page for more information.

如果我们想要添加Flex组件,还需要将这个变量更改,即将$enable-flex改成true才可以,默认是false。

在源代码中我们可以发现已经有了一个bootstrap-flex.scss的文件,然而这里面发现直接引入了bootstrap的所有代码,这并不是我们想要的,它可能会复写一些基本样式,会影响我们的工程。我们想要的是单独把Flex部分抽离出来。

所以我们自己新建一个 bootstrap-flex.scss的空文件。

首先将变量改为true

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
$enable-flex: true;

然后阅读源码可以发现有两个公用的scss文件是必须引入的。

variables和breakpoints,我们先将他们引入。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
@import "variables";
@import "breakpoints";

然后观察带有flex的代码,只发现了在utilities文件夹中有相关内容,跑不了了,那就是它,复制到同一路径,引入一下。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
@import "flex";

不过发现这个文件里的样式颇少,内容如下:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
// Flex variation
//
// Custom styles for additional flex alignment options.

@if $enable-flex {
  @each $breakpoint in map-keys($grid-breakpoints) {
    // Flex column reordering
    @include media-breakpoint-up($breakpoint) {
      .flex-#{$breakpoint}-first { order: -1; }
      .flex-#{$breakpoint}-last { order: 1; }
      .flex-#{$breakpoint}-unordered { order: 0; }
    }

    // Alignment for every item
    @include media-breakpoint-up($breakpoint) {
      .flex-items-#{$breakpoint}-top { align-items: flex-start; }
      .flex-items-#{$breakpoint}-middle { align-items: center; }
      .flex-items-#{$breakpoint}-bottom { align-items: flex-end; }
    }

    // Alignment per item
    @include media-breakpoint-up($breakpoint) {
      .flex-#{$breakpoint}-top   { align-self: flex-start; }
      .flex-#{$breakpoint}-middle { align-self: center; }
      .flex-#{$breakpoint}-bottom { align-self: flex-end; }
    }

    // Horizontal alignment of item
    @include media-breakpoint-up($breakpoint) {
      .flex-items-#{$breakpoint}-left { justify-content: flex-start; }
      .flex-items-#{$breakpoint}-center { justify-content: center; }
      .flex-items-#{$breakpoint}-right { justify-content: flex-end; }
      .flex-items-#{$breakpoint}-around { justify-content: space-around; }
      .flex-items-#{$breakpoint}-between { justify-content: space-between; }
    }
  }
}

这才多点啊?看官方实例明明用到了row,col这些样式好不好。再看看。

于是乎发现这些实际上也是依赖于原始的grid样式的。我们必须也要把它引入进来。

找找,发现了三个相关文件,拷贝过来,引入。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
@import "mixins/grid";
@import "mixins/grid-framework";
@import "grid";

嗯,这下应该全了。

编译代码

官方用的是grunt自动化工具,然而我用着并不习惯。在这里我们用到gulp来编译。

首先npm init 初始化一个 package.json

引入一些包

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
  "devDependencies": {
    "babel-core": "^6.3.26",
    "babel-preset-es2015": "^6.16.0",
    "babel-register": "^6.18.0",
    "del": "^2.2.2",
    "gulp": "^3.9.1",
    "gulp-autoprefixer": "^3.1.1",
    "gulp-babel": "^6.1.2",
    "gulp-plumber": "^1.1.0",
    "gulp-postcss": "^6.2.0",
    "gulp-sass": "^2.3.2",
    "gulp-sourcemaps": "^2.2.0",
    "postcss-scss": "^0.3.1"
  }

整体如下:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
{
  "name": "bootstrap-flex",
  "version": "1.0.0",
  "description": "BootStrap Flex",
  "main": "gulpfile.babel.js",
  "scripts": {
    "test": "echo \"Error: no test specified\" && exit 1"
  },
  "author": "Germey",
  "license": "MIT",
  "devDependencies": {
    "babel-core": "^6.3.26",
    "babel-preset-es2015": "^6.16.0",
    "babel-register": "^6.18.0",
    "del": "^2.2.2",
    "gulp": "^3.9.1",
    "gulp-autoprefixer": "^3.1.1",
    "gulp-babel": "^6.1.2",
    "gulp-plumber": "^1.1.0",
    "gulp-postcss": "^6.2.0",
    "gulp-sass": "^2.3.2",
    "gulp-sourcemaps": "^2.2.0",
    "postcss-scss": "^0.3.1"
  }
}

执行

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
npm install

安装一下 node_modules。

然后生成一个.babelrc文件,因为我们要用es2015的语法,内容。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
{
  "presets": [
    "es2015"
  ]
}

gulpfile:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
import gulp       from 'gulp';
import plumber from 'gulp-plumber';
import sass from 'gulp-sass';
import sourcemaps from 'gulp-sourcemaps';
import del from 'del';
import autoprefixer from 'gulp-autoprefixer';
const source = ['sass/**/*.scss'];
const dest = 'dist/css/';

gulp.task('sass', () => {
    return gulp.src(source)
    .pipe(plumber())
    .pipe(sourcemaps.init())
    .pipe(sass({outputStyle: 'compressed'}).on('error', sass.logError))
    .pipe(sourcemaps.write())
    .pipe(autoprefixer({
        browsers: ['last 2 versions'],
        cascade: true,
        remove: true
    }))
    .pipe(gulp.dest(dest));
});

gulp.task('clean', del.bind(null, ['dist']));

gulp.task('build', ['sass', 'watch'])

gulp.task('watch', () => {
    gulp.watch(source, ['sass']);
});

gulp.task('default', ['clean'], () => {
    gulp.start('build');
});

最后执行下gulp

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
[18:46:38] Requiring external module babel-register
[18:46:38] Using gulpfile /private/var/www/flex/gulpfile.babel.js
[18:46:38] Starting 'clean'...
[18:46:38] Finished 'clean' after 8.12 ms
[18:46:38] Starting 'default'...
[18:46:38] Starting 'sass'...
[18:46:38] Starting 'watch'...
[18:46:38] Finished 'watch' after 9.63 ms
[18:46:38] Finished 'default' after 25 ms
[18:46:39] Finished 'sass' after 312 ms
[18:46:39] Starting 'build'...
[18:46:39] Finished 'build' after 2.41 μs

这样就编译好了

测试

恩接下来我们来测试一下官方实例是否正常。

新建一个index.html内容如下

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <link rel="stylesheet" href="dist/css/bootstrap-flex.css">
</head>
<body>
<div class="container">
    <div class="row">
        <div class="col-xs">
            1 of 2
        </div>
        <div class="col-xs">
            1 of 2
        </div>
    </div>
    <div class="row">
        <div class="col-xs">
            1 of 3
        </div>
        <div class="col-xs">
            1 of 3
        </div>
        <div class="col-xs">
            1 of 3
        </div>
    </div>

</div>
<div class="container">
    <div class="row">
        <div class="col-xs">
            1 of 3
        </div>
        <div class="col-xs-6">
            2 of 3 (wider)
        </div>
        <div class="col-xs">
            3 of 3
        </div>
    </div>
    <div class="row">
        <div class="col-xs">
            1 of 3
        </div>
        <div class="col-xs-5">
            2 of 3 (wider)
        </div>
        <div class="col-xs">
            3 of 3
        </div>
    </div>
</div>
<div class="container">
    <div class="row">
        <div class="col-xs">
            1 of 3
        </div>
        <div class="col-xs-6">
            2 of 3 (wider)
        </div>
        <div class="col-xs">
            3 of 3
        </div>
    </div>
    <div class="row">
        <div class="col-xs">
            1 of 3
        </div>
        <div class="col-xs-5">
            2 of 3 (wider)
        </div>
        <div class="col-xs">
            3 of 3
        </div>
    </div>
</div>
<div class="container">
    <div class="row flex-items-xs-top">
        <div class="col-xs">
            One of three columns
        </div>
        <div class="col-xs">
            One of three columns
        </div>
        <div class="col-xs">
            One of three columns
        </div>
    </div>
    <div class="row flex-items-xs-middle">
        <div class="col-xs">
            One of three columns
        </div>
        <div class="col-xs">
            One of three columns
        </div>
        <div class="col-xs">
            One of three columns
        </div>
    </div>
    <div class="row flex-items-xs-bottom">
        <div class="col-xs">
            One of three columns
        </div>
        <div class="col-xs">
            One of three columns
        </div>
        <div class="col-xs">
            One of three columns
        </div>
    </div>
</div>
<div class="container">
    <div class="row flex-items-xs-left">
        <div class="col-xs-4">
            One of two columns
        </div>
        <div class="col-xs-4">
            One of two columns
        </div>
    </div>
    <div class="row flex-items-xs-center">
        <div class="col-xs-4">
            One of two columns
        </div>
        <div class="col-xs-4">
            One of two columns
        </div>
    </div>
    <div class="row flex-items-xs-right">
        <div class="col-xs-4">
            One of two columns
        </div>
        <div class="col-xs-4">
            One of two columns
        </div>
    </div>
    <div class="row flex-items-xs-around">
        <div class="col-xs-4">
            One of two columns
        </div>
        <div class="col-xs-4">
            One of two columns
        </div>
    </div>
    <div class="row flex-items-xs-between">
        <div class="col-xs-4">
            One of two columns
        </div>
        <div class="col-xs-4">
            One of two columns
        </div>
    </div>
</div>
<div class="container">
    <div class="row">
        <div class="col-xs flex-xs-unordered">
            First, but unordered
        </div>
        <div class="col-xs flex-xs-last">
            Second, but last
        </div>
        <div class="col-xs flex-xs-first">
            Third, but first
        </div>
    </div>
</div>
<style>
    .row {
        margin-top: 1rem;
    }
    .row > [class^="col-"] {
        padding-top: .75rem;
        padding-bottom: .75rem;
        background-color: rgba(86, 61, 124, 0.15);
        border: 1px solid rgba(86, 61, 124, 0.2);
    }
    .flex-items-xs-top, .flex-items-xs-middle,.flex-items-xs-bottom {
        min-height: 6rem;
        background-color: rgba(255, 0, 0, 0.1);
    }
</style>

</body>
</html>

结果如下:

恩,完美!

至于这个布局的用法,那就去官方文档领悟吧,和之前的bootstrap栅格化布局有比较大的不同。

不过如果你看了实例之后,就会豁然开朗了。

代码

本用例代码已上传到 GitHub

BootStrapFlex

有兴趣的小伙伴可以下载测试。

相关推荐 如何在腾讯云上搭建一个人力资源Saas 腾讯云主机Python3环境安装PySpider爬虫框架过程

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
Gulp-自动化编译sass和pug文件
突然发现在我博客文章中,缺少这一块的记录,那我就补一篇吧。 gulp的环境配置和安装:http://www.cnblogs.com/padding1015/p/7162024.html 这里就补充一篇gulpfile.js的配置,用于自动化编译sass和pug文件用: 1 var gulp = require('gulp'); 2 var pug = require('gulp-pug'); 3 var sass = require('gulp-sass'); 4 var rename = requ
xing.org1^
2018/05/17
1K0
05-移动端开发教程-CSS3兼容处理
CSS3的标准并没有全部定稿,目前CSS3的标准分成了不同的模块,具体的标准由各个模块推动标准和定稿,标准制定的过程中,浏览器也在不断的发新的版本来兼容新的标准。 浏览器有时会给一些在试验阶段或非标准阶段的css属性添加前缀, 这样开发者就可以使用 浏览器行为的改变不会破坏标准. 开发人员应等待包含无前缀属性,直到浏览器行为标准化。 1. 主流浏览器引擎前缀 -webkit- (谷歌, Safari, 新版Opera浏览器等) -moz- (火狐浏览器) -o- (旧版Opera浏览器等) -ms- (IE
老马
2018/04/02
2.1K0
05-移动端开发教程-CSS3兼容处理
bootstrap深入理解之格子布局
一、源码文件: _grid.scss:格子系统类文件 Mixins/_grid.scss:支持格子系统实现的mixin集合 Mixins/_grid-framework.scss:格子系统实现的核
sam dragon
2018/01/17
1.3K0
bootstrap深入理解之格子布局
BootStarp常用标签
1 栅格系统 <!DOCTYPE html> <!-- 让其支持html5类型 --> <html lang="zh-CN"> <head> <meta charset="UTF-8"> <!-- 申明文档的兼容模式 ,表示使用ie浏览器的最新模式 --> <meta http-equiv="X-UA-Compatible" content="IE=edge"> <!-- 让其首先对移动设备友好 user-scalable=no 可以禁用其缩放(zooming)功能 --> <meta n
用户5927264
2019/07/31
4890
【Bootstrap】002-全局CSS样式-概览和栅格系统
Bootstrap 使用到的某些 HTML 元素和 CSS 属性需要将页面设置为 HTML5 文档类型;
訾博ZiBo
2025/01/06
2550
【Bootstrap】002-全局CSS样式-概览和栅格系统
05-移动端开发教程-CSS3兼容处理
老马
2018/01/02
1.7K0
05-移动端开发教程-CSS3兼容处理
「译」Flexbox 基本原理
整理自 MDN web docs 的笔记,同时参考了 Web Bos 上的什么是 Flexbox系列视频。
Chor
2019/11/08
2.3K0
element-ui 简单二次开发
当前项目为vue 2.6 + element-ui 2.14.1, 我们需要开发一个类似表格的表单组件, 可以看到除了表格样式以外,我们还需要嵌套各种表单组件,而组件功能基本与框架功能一致,如果对每个组件都做独立开发,显然是不现实的。所以我们的目标一定是尽量使用原组件
copy_left
2020/12/17
2K0
CSS-Next : CSS预处理器简单写法的替代者, 想了解下么?
借助相关的插件我们可以把新的特性降级到 css3乃至一些特性降级到css2.1...无缝过渡
CRPER
2018/08/28
1K0
「拥抱开源」这个假前端开发有点虎
导致出现的问题:每行元素不能固定在应该呆的位置,给人一种整个页面元素很飘忽不定的感觉。
FoamValue
2020/09/01
6360
「拥抱开源」这个假前端开发有点虎
vue 实现一个简单的栅格组件
参考iview, ant-design 的栅格组件,发现两者的基础思路是一致的。 这里通过实现一个简化版的栅格组件做总结.
copy_left
2019/08/30
2.4K0
一次性把所有普通和经典的网页布局讲得通通透透的,多图预警,建议收藏
超干货长文预警。这次把网页布局方案讲得通通透透的,等高布局,水平垂直居中,经典的圣杯布局等等全都有了。建议收藏
夜尽天明
2020/09/17
6.1K0
一次性把所有普通和经典的网页布局讲得通通透透的,多图预警,建议收藏
ReactNative之参照具体示例来看RN中的FlexBox布局
今天是重阳节,祝大家节日快乐,今天继续更新RN相关的博客。上篇博客《ReactNative之从HelloWorld中看环境搭建、组件封装、Props及State》中我们通过一个HelloWorld的一个示例介绍了RN的环境搭建、组件封装、Props以及States。经过这么多天,今天我们继续来看RN的东西,本篇博客是关于RN的Flex布局的,也就是说是关于RN中控件放哪儿的一篇博客。在RN中使用的是Flex布局,如果你之前接触过Web前端的话对FlexBox布局并不陌生,但是如果你之前没做过Web开发的话,也不影响看今天的博客。本篇博客也是RN开发的基础,算是比较重要的。
lizelu
2018/10/25
2.1K0
ReactNative之参照具体示例来看RN中的FlexBox布局
从 Element UI 源码的构建流程来看前端 UI 库设计
由于业务需要,近期团队要搞一套自己的UI组件库,框架方面还是Vue。而业界已经有比较成熟的一些UI库了,比如ElementUI、AntDesign、Vant等。
前端森林
2020/06/28
2.1K0
bootstrap5基本使用
container是最基本的布局。 给一个元素的class赋值为container之后,如果显示屏幕小于576,元素将要横向占满屏幕,但是大于576小于576像素的时候,宽度恒定为540,。就是说你的屏幕很宽的时候,元素永远不会横向占满整个屏幕,与边距有孔隙。但是赋值为.container-fluid的时候,元素永远横向占满屏幕,不会留有孔隙。
Crayon鑫
2023/10/10
9420
bootstrap5基本使用
CSS Flexbox 可视化手册 [每日前端夜话(0x1E)]
Flexbox是 Flexible Box Module(弹性盒模型)的缩写。 是一种可以轻松控制html元素之间的空间分布和对齐的布局模型。
疯狂的技术宅
2019/03/27
3.7K0
CSS Flexbox 可视化手册 [每日前端夜话(0x1E)]
如何使用Flexbox和CSS Grid,实现高效布局
CSS 浮动属性一直是网站上排列元素的主要方法之一,但是当实现复杂布局时,这种方法不总是那么理想。幸运的是,在现代网页设计时代,使用 Flexbox 和 CSS Grid 来对齐元素,变得相对容易起来。
葡萄城控件
2022/05/09
4.1K0
如何使用Flexbox和CSS Grid,实现高效布局
前端入门24-响应式布局(BootStrap)声明正文-响应式布局(BootStrap)
BootStrap 目前已经出了 4 个版本,每个版本都有对应的官网教程,先来看看不同版本里的宣传语:
请叫我大苏
2018/12/26
4K0
开心档-软件开发入门之Bootstrap4 Flex(弹性)布局
Bootstrap 3 与 Bootstrap 4 最大的区别就是 Bootstrap 4 使用弹性盒子来布局,而不是使用浮动来布局。
爱学iOS的小麦子
2023/05/09
8990
【腾讯云 Cloud Studio实战训练营】深入解析CloudStudio—React 快速构建点餐页面
颜淡慕潇
2023/07/28
6120
【腾讯云 Cloud Studio实战训练营】深入解析CloudStudio—React 快速构建点餐页面
推荐阅读
相关推荐
Gulp-自动化编译sass和pug文件
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验