gulp-avoidfoit
Version:
Scans your css files and generates the JS code to load all the webfonts with Fonts Events to avoid FOIT (Flash of Invisible Text) and to improve performance.
97 lines (77 loc) • 2.35 kB
Markdown
gulp-avoidfoit
============
Scans your css files and generates the JS code to load all the webfonts with Fonts Events to avoid FOIT (Flash of Invisible Text) and to improve performance.
> This plugin is based on [Font Loading Revisited with Font Events](http://www.filamentgroup.com/lab/font-events.html) by [Scott Jehl](http://twitter.com/scottjehl) post on [Filament Group](http://www.filamentgroup.com/). This article is a MUST READ.
## Install and Usage
First, install `gulp-avoidfoit` as a development dependency:
```shell
npm install --save-dev gulp-avoidfoit
```
Then, add it to your `gulpfile.js`:
```javascript
var gulp = require('gulp');
var avoidfoit = require('gulp-avoidfoit');
var rename = require('gulp-rename');
gulp.task('js:fonts', function() {
return gulp.src('./dist/assets/styles/main.css')
.pipe(avoidfoit())
.pipe(rename({
basename: 'typography',
extname: '.js'
}))
.pipe(gulp.dest('./dist/assets/scripts/vendor'));
});
```
## Example
If your CSS has:
```css
-face {
font-family: 'Roboto';
font-weight: normal;
font-style: normal;
src: ...;
}
-face {
font-family: 'Roboto';
font-weight: 500;
font-style: normal;
src: ...;
}
-face {
font-family: 'Open Sans';
font-weight: 400;
font-style: italic;
src: ...;
}
```
The output of JS code is:
```javascript
/* Bram Stein’s FontFaceObserver script here */
(function( w ) {
if( w.document.documentElement.className.indexOf( "fonts-loaded" ) > -1 ) {
var fonts = 3;
var checkFonts = function() {
fonts--;
if (!fonts) {
w.document.documentElement.className += " fonts-loaded";
}
};
var font0 = new w.FontFaceObserver( 'Roboto', {}).check().then(checkFonts);
var font1 = new w.FontFaceObserver( 'Roboto', {"weight":"500"}).check().then(checkFonts);
var font2 = new w.FontFaceObserver( 'Open Sans', {"style":"italic"}).check().then(checkFonts);
}
}( this ));
```
## API
### avoidfoit([options])
An optional argument, `options`, can be passed.
#### options
Type: `Object`
##### options.className
Type: `string`
Default: `fonts-loaded`
The class name to add in the html element when all fonts are loaded.
## Minor errors
When I have more time I fix this errors:
* You have to use `gulp-rename` to change the name of file.
* There is a sync line!!