Con Modernizr 3.0 (alpha), si può generare build personalizzate localmente. Questo potrebbe risolvere la preoccupazione sopra descritta di "overkill" - anche se non sono del tutto chiaro su quella preoccupazione in primo luogo (ma presumo che sia la sua dimensione). La nuova API fornisce un metodo 'build', al quale è possibile passare json contenente i test che si desidera includere nella build.
Io uso qualcosa del genere nel mio file gulp ma gulp non è necessario - un semplice script di nodo funzionerà.
gulp.task('js:modernizr', function() {
var modConfig = JSON.parse(fs.readFileSync('modernizr-config.json', {
encoding: 'utf8'
}));
modernizr.build(modConfig, function(res) {
fs.writeFileSync('modernizr.js', res);
return true;
});
});
E un esempio del file 'Modernizr-config.json' sarebbe
{
"classPrefix": "",
"options": [
"addTest",
"atRule",
"domPrefixes",
"hasEvent",
"html5shiv",
"html5printshiv",
"load",
"mq",
"prefixed",
"prefixes",
"prefixedCSS",
"setClasses",
"testAllProps",
"testProp",
"testStyles"
],
"feature-detects": [
"css/transforms",
"css/transforms3d",
"css/transformstylepreserve3d",
"css/transitions",
"touchevents",
"workers/webworkers",
"history"
]
}
Il file di configurazione completo è incluso nel pacchetto Modernizr.
Con questo approccio, è possibile usufruire della suite di test Modernizr ben gestita tramite i programmi di installazione dei pacchetti e aggiungere/rimuovere facilmente i test in base alle esigenze. Meno prove, file più piccoli ovviamente.
L'opzione '' setClasses aggiungerà la relativa classe di test per il codice HTML, ma si può anche approfittare degli eventi asincroni 3.0 in questo modo:
Modernizr.on('csstransitions', function(bool) {
if (bool === true) // do transition stuffs
}
Non voglio per includere una libreria per questo. – user1087110
controlla questa discussione: http://stackoverflow.com/a/13081497/104380 – vsync