Compiling Themes
Kendo-themes use sass, using scss syntax, and you need a sass compiler to compile them. We support both node-sass and dart-sass.
Due to the complexity of the themes, we rely on postcss, autoprefixer, and postcss-calc to properly compile them.
Using gulp
The following setup will generate ./dist/kendo-theme.css
from source ./sass/kendo-theme.scss
.
Please note:
- We include
/dist/all.scss
, which is a flattened single-file version of the theme for faster compilation. - Prefixes will be generated for browsers with a minimum of 10% market share.
sassOptions.precision
setting has no effect when using dart-sass.- Make sure you install gulp-sass, node-sass, dart-sass, gulp-postcss, autoprefixer, postcss-calc, and fibers.
// assuming ./sass/kendo-theme.scss
@import "../node_modules/@progress/kendo-theme-default/dist/all.scss";
const gulp = require('gulp');
const sass = require('gulp-sass');
const postcss = require("gulp-postcss");
const autoprefixer = require("autoprefixer");
const calc = require("postcss-calc");
const Fiber = require('fibers');
// Use node sass
sass.compiler = require('node-sass');
// Use dart-sass
// sass.compiler = require('dart-sass');
const postcssPlugins = [
calc({
precision: 10
}),
autoprefixer({
overrideBrowserslist: [ '> 10%' ]
})
];
const sassOptions = {
precision: 10,
outputStyle: 'expanded',
fiber: Fiber
};
gulp.task('sass', function () {
return gulp.src('./sass/**/*.scss')
.pipe(sass.sync(sassOptions).on('error', sass.logError))
.pipe(postcss(postcssPlugins))
.pipe(gulp.dest('./dist'));
});
Using webpack
Make sure you install style-loader, sass-loader, node-sass, dart-sass, postcss-loader, autoprefixer, postcss-calc, and fibers.
// assuming ./sass/kendo-theme.scss
@import "~@progress/kendo-theme-default/dist/all.scss";
module.exports = {
module: {
rules: [
{
test: /\.scss$/i,
use: [
// Creates `style` nodes from JS strings
'style-loader',
// Translates CSS into CommonJS
'css-loader',
// PostCSS
{
loader: 'postcss-loader',
options: {
precision: 10,
plugins: [
require('autoprefixer')(),
require('postcss-calc')()
]
}
},
// Compiles Sass to CSS
{
loader: 'sass-loader',
options: {
implementation: require('node-sass'),
// implementation: require('dart-sass'),
sassOptions: {
precision: 10,
// fiber: require('fibers')
}
}
}
]
}
]
}
};
Known Issues
Here is a list of common issues with kendo-themes and how to solve them.
Compilation is slow
Since day one of the themes, we wanted the themes to "automagically" load the styles needed for a given component. In other words, if you need only the grid, the themes will load all the input components, because they are needed for the editing functionality. That leads to multiple and repetitive child imports, hence a hit in performance when compiling.
If you need the entire theme, instead of importing /scss/all.scss
, you can import /dist/all.scss
. That's a single-file version of the theme and compiles faster.
If you need to import multiple components, you can take a look at our theme task and the sassimporter helper, which implements a sort of caching mechanism to avoid repetitive file processing.
There is not much that can be done about dart-sass compiler, before we switch to sass module system.
Invalid nested calc expressions
Due the complexity of the themes, nested or otherwise invalid calc expressions could appear in the generated css. To handle this, use postcss-calc
in your gulp or webpack workflow.
Suggested Links
- Styling Overview
- Customizing Themes
- Web Font Icons in Kendo UI for Vue Native
- Getting Started with Kendo UI for Vue - JavaScript (Online Guide)
- Getting Started with Kendo UI for Vue - TypeScript (Online Guide)
- Getting Started with Kendo UI for Vue - JavaScript + Options API (Online Guide)
- Getting Started with Kendo UI for Vue - TypeScript + Options API (Online Guide)
- Getting Started with Kendo UI for Vue - Nuxt 3 (Online Guide)
- Browse the Components