将引导程序与 vue webapp 一起使用:如何自定义

Posted

技术标签:

【中文标题】将引导程序与 vue webapp 一起使用:如何自定义【英文标题】:using bootstrap with vue webapp : How to customise 【发布时间】:2017-04-13 09:10:18 【问题描述】:

我在我的 Vue webapp 中使用bootstrap-4,但我无法按照here 的说明进行自定义。

我的 index.html 使用 Bootstrap CDN,如下所示:

<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="utf-8">
    <meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
    <meta http-equiv="x-ua-compatible" content="ie=edge">

    <title>Sample</title>
    <meta name="viewport" content="initial-scale=1, maximum-scale=1, user-scalable=no, minimal-ui">

    <link rel="stylesheet" href="/static/custom.scss" type="text/x-scss">  ==> where I am overwriting variable
    <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0-alpha.5/css/bootstrap.min.css" integrity="sha384-AysaV+vQoT3kOAXZkl02PThvDr8HYKPZhNT5h/CXfBThSRXQ6jW5DO2ekP5ViFdi" crossorigin="anonymous">

    <script src="//cdnjs.cloudflare.com/ajax/libs/jquery/3.1.1/jquery.js"></script>
    <script src="https://cdnjs.cloudflare.com/ajax/libs/tether/1.3.7/js/tether.min.js" integrity="sha384-XTs3FgkjiBgo8qjEjBk0tGmf3wPrWtA6coPfQDfFEY8AnYJwjalXCiosYRBIBZX8" crossorigin="anonymous"></script>
    <script src="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0-alpha.5/js/bootstrap.min.js" integrity="sha384-BLiI7JTZm+JWlgKa0M0kGRpJbF2J8q+qreVrKBC47e3K6BW78kGLrCkeRX6I9RoK" crossorigin="anonymous"></script>
  </head>
  <body>
    <div id="app"></div>

    <script src="/dist/client-vendor-bundle.js"></script>
    <script src="/dist/client-bundle.js"></script> -->
  </body>
</html>

我也尝试在 index.html 中更改custom.scssbootstrap.css 的顺序。

以下是 custom.scss,我将在其中覆盖变量:

$body-bg:    #f5f5f5;
$body-color: #f5f5f5;
$enable-flex: true;

但这不起作用。

我也尝试在我的应用组件中导入它,如下所示:

<style lang="scss">
  @import 'custom.scss';

  // Following also did not work
  $body-bg: #333;
  $body-color: #999;  
</style>

如何覆盖这些变量来自定义我的 webapp。

【问题讨论】:

你试过倒序吗?首先包括引导文件,然后是 custom.css ?顺便说一句,您在编辑 .scss 文件后是否重新编译了代码? 是的,尝试改变顺序,也重新编译了代码。 顺便说一句,为什么要包含 custom.scss 文件?为什么不包含编译后的 .css 文件? @Belmin 你的意思是bootstrap或custom.scss的编译.css文件? 我认为你不能用cdn 做到这一点,使用npm version 可以访问引导程序的.scss 文件并使用自定义.scss 编译它,这样你就可以覆盖这些值。 【参考方案1】:

我尝试了以下有效的方法:

克隆了引导程序repo 修改了此目录中的_custom.scss。 跑npm install 运行grunt dist,就像在documentation中一样 在我的 index.html 中从此处复制生成的引导 css 和 js 文件

所以我的 index.html 有以下内容:

<link rel="stylesheet" href="/static/bootstrap.css" type="text/css">

<script src="//cdnjs.cloudflare.com/ajax/libs/jquery/3.1.1/jquery.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/tether/1.3.7/js/tether.min.js" integrity="sha384-XTs3FgkjiBgo8qjEjBk0tGmf3wPrWtA6coPfQDfFEY8AnYJwjalXCiosYRBIBZX8" crossorigin="anonymous"></script>
<script href="/static/bootstrap.js"></script>

到目前为止,我认为使用引导程序的 CDN 链接时无法进行自定义。

【讨论】:

【参考方案2】:

您可以通过使用 npm 包和 webpack 自定义来使这更清洁。

如果您首先在项目中安装引导程序:

npm install bootstrap@4.0.0-alpha.5

并确保您可以在组件中使用 sass-loader:

npm install sass-loader node-sass --save-dev

现在转到您的 webpack 配置文件并添加一个 sassLoader 对象,其中包含以下内容:

sassLoader: 
    includePaths: [
        path.resolve(projectRoot, 'node_modules/bootstrap/scss/'),
    ],
,

projectRoot 应该只是指向您可以导航到 node_packages 的位置,在我的例子中是:path.resolve(__dirname, '../')

现在您可以直接在 .vue 文件中使用引导程序,当您添加以下内容时,webpack 会为您编译它:

<style lang="scss">
  @import "bootstrap";
</style>

要自定义它,我建议先拉入引导程序_variables,然后您可以像平常一样引用所有内容,即

@import "_variables";

// example customisation - I'd recommend importing a file here to store them all
$body-bg: $gray-dark;

// just place all your customisation work above the below import of bootstrap
@import "bootstrap";

这意味着您需要删除任何 CDN CSS 版本,否则它们可能会覆盖内容,但您现在应该能够完全自定义引导程序。

作为另一个好处,此方法允许您删除任何您不使用的引导组件。这样做而不是 @import "bootstrap"; 这是整个引导库,而是导航到该文件,即 node_modules/bootstrap/scss/bootstrap.scss 然后复制您真正想要的 @import。从本质上优化您的项目...

【讨论】:

以上是关于将引导程序与 vue webapp 一起使用:如何自定义的主要内容,如果未能解决你的问题,请参考以下文章

如何将 Django 的标记模板标签与 Google App Engine WebApp 框架一起使用

将 Fieldset Legend 与引导程序一起使用

将 twitter 引导程序与 Django 表单一起使用

将 react js 与纯引导程序一起使用是不是正确?

如何将 Keycloak 与 Spring 集成(无引导)?

将 Bootstrap 与 VueJS 一起使用时未捕获的 TypeError