When I'm running my ASP.NET MVC site locally, the source of any page shows a seemingly ridiculous amount of CSS classes in the
<html class=" js flexbox flexboxlegacy canvas canvastext webgl no-touch
geolocation postmessage websqldatabase indexeddb hashchange history draganddrop
websockets rgba hsla multiplebgs backgroundsize borderimage borderradius
boxshadow textshadow opacity cssanimations csscolumns cssgradients
cssreflections csstransforms csstransforms3d csstransitions fontface
generatedcontent video audio localstorage sessionstorage webworkers
applicationcache svg inlinesvg smil svgclippaths">
Looks like the work of Modernizr, a tool for detecting feature support in browsers. Here's a snippet from their docs (emphasis mine):
By default, Modernizr sets classes for all of your tests on the root element ( for websites). This means adding the class for each feature when it is supported, and adding it with a no- prefix when it is not (e.g. .feature or .no-feature).
This essentially lets you know which features are supported by that browser and allows you (and, presumably, Modernizr) to create some contextual CSS based on that information.
You can disable this behavior, though. Check out their configuration options... particularly:
Whether or not Modernizr should add its CSS classes at all