如何在 Ionic 框架中使用 SASS?

Posted

技术标签:

【中文标题】如何在 Ionic 框架中使用 SASS?【英文标题】:How to use SASS in Ionic framework? 【发布时间】:2015-09-06 18:30:53 【问题描述】:

我正在尝试在我的项目中使用 SASS。我打开此链接并遵循所有命令。我创建一个项目并设置 SASS。 http://learn.ionicframework.com/formulas/working-with-sass/

我得到了这个目录结构

   scss
     |
     |—>ionic.app.scss
   www
     |
     |->css
          |
          |——>ionic.app.css

index.html 文件中,我在 style 标记中导入了 ionic.app.css。所以无论我在 ionic.app.scss 文件中进行什么更改,它都会出现在 ionic.app.css 文件中并反映在视图中。

如果我在 index.html 中添加一些元素,例如我在<ion-content> 中添加了段落标签:

<ion-pane>
    <ion-header-bar class="bar-stable">
        <h1 class="title">Ionic Blank Starter</h1>
    </ion-header-bar>
    <ion-content>
        <p id=“addp”>Testparagraph</p>
    </ion-content>
</ion-pane>

并添加了这个

#addp
background-color:yellow;

ionic.app.scss中,添加在ionic.app.css中并反映在视图中。

现在我尝试做什么。我想在 sass 文件夹中添加自己的文件 “application.scss”,这应该在 css 文件夹中创建另一个文件 “application.css”。因此,无论我在“application.scss”中编码什么,它都会出现在“application.css”文件中并反映在视图中。我在 index.html 文件中导入 “application.css”

我在哪里编写此代码以便生成此文件并查看我的 “application.scss” 文件。

当我运行 ionic 服务器并更改 “ionic.app.scss” 文件中的任何内容时,它会同时反映在视图上。我需要对 “application.scss” 做同样的事情。如果我更改“application.scss”,它将反映我的观点。

这是我的 gulpfile.js

var gulp = require('gulp');
var gutil = require('gulp-util');
var bower = require('bower');
var concat = require('gulp-concat');
var sass = require('gulp-sass');
var minifyCss = require('gulp-minify-css');
var rename = require('gulp-rename');
var sh = require('shelljs');

var paths = 
  sass: ['./scss/**/*.scss']
;

gulp.task('default', ['sass']);

gulp.task('sass', function(done) 
  gulp.src('./scss/ionic.app.scss')
    .pipe(sass(
      errLogToConsole: true
    ))
    .pipe(gulp.dest('./www/css/'))
    .pipe(minifyCss(
      keepSpecialComments: 0
    ))
    .pipe(rename( extname: '.min.css' ))
    .pipe(gulp.dest('./www/css/'))
    .on('end', done);
);

gulp.task('watch', function() 
  gulp.watch(paths.sass, ['sass']);
);

gulp.task('install', ['git-check'], function() 
  return bower.commands.install()
    .on('log', function(data) 
      gutil.log('bower', gutil.colors.cyan(data.id), data.message);
    );
);

gulp.task('git-check', function(done) 
  if (!sh.which('git')) 
    console.log(
      '  ' + gutil.colors.red('Git is not installed.'),
      '\n  Git, the version control system, is required to download Ionic.',
      '\n  Download git here:', gutil.colors.cyan('http://git-scm.com/downloads') + '.',
      '\n  Once git is installed, run \'' + gutil.colors.cyan('gulp install') + '\' again.'
    );
    process.exit(1);
  
  done();
);

【问题讨论】:

【参考方案1】:

理想情况下,您的application.scss 应该只有您的其他自定义 .scss 文件使用的变量,这个想法是,您更改一个值,它将更改所有 .scss 文件。

您的gulp 进程会将您的所有文件编译成一个缩小的css 文件。

看看ionic scss folder 和他们的variables file

_variables.scss 中使用的变量与ionic.app.scss 相同。您可以在ionic.app.scss 中定义_variables.scss 中的所有变量。

希望你对 Ionic 是如何做到的有一个想法,所以你可以遵循相同的结构

【讨论】:

你没有得到我的问题我需要添加另一个文件。如果我对使用 _variables.scss 或 ionic.app.scss 文件不感兴趣。我想在我的 sass 中添加这个 application.scss文件夹,它应该生成另一个 css 文件。我将在 index.html 上导入该 css 文件 但是当我在 sass 文件夹中添加 application.scss 时,gulp 进程不看我的文件。不反映在 html 视图中 您必须将行 gulp.src('./scss/ionic.app.scss') 更改为 gulp.src('./scss/*.scss'),才能选择任何 .scss 文件【参考方案2】:

我不知道如何在 gulp 中更改它,但我打开了另一个终端并使用了 sass --watch 功能(例如:sass --watch scss/application.scss:www/css/application.css ),只要您在 application.scss 中进行更改,它将在您的项目中自动更新。

【讨论】:

【参考方案3】:

gulp.src('./scss/ionic.app.scss') 更改为gulp.src(paths.sass)

这将自动将该文件夹或任何子文件夹中的所有 .scss 文件构建到 /www/css/ 中相应的 .css 文件中。您当前的 Gulp 文件正在构建 ionic.app.css ionic.app.min.css,其中第二个文件被缩小为尽可能小的文件大小。它将对任何其他文件执行相同的操作。您只需编写 /scss/application.scss 并处理它。

如果您想省去很多麻烦,可以使用此替代方法将所有 SCSS 文件构建到单个 build.css 和 build.min.css 文件中。

gulp.task('sass', function(done) 
  gulp.src(paths.sass)
    .pipe(sass(
      errLogToConsole: true
    ))
    .pipe(concat('build.css'))
    .pipe(gulp.dest('./www/css/'))
    .pipe(minifyCss(
      keepSpecialComments: 0
    ))
    .pipe(rename( extname: '.min.css' ))
    .pipe(gulp.dest('./www/css/'))
    .on('end', done);
);

【讨论】:

以上是关于如何在 Ionic 框架中使用 SASS?的主要内容,如果未能解决你的问题,请参考以下文章

技术干货前端开发之IONIC移动端开发

如何在 Ionic 框架中发送推送通知?

如何使用 ionic 2 框架在警报框中显示选定的索引值

如何在 Ionic 框架中使用 CSS 选择器隔离特定平台

scss 在sass文件中使用Ionic $颜色

ionic