Modernizr não é o típico framework Javascript, embora pudéssemos chamá-lo assim. Vou explicar. Na realidade, não é uma biblioteca que nos permita implementar com menor esforço projetos avançados, mas um pacote de detecção das capacidades de um navegador relativas a HTML5 e a CSS3. Dito de outro modo, Modernizr é uma biblioteca Javascript que nos informará quais das novas capacidades destas linguagens estão disponíveis no navegador do usuário, para utilizá-las, ou não, em cada caso.
Sabendo que nosso navegador suporta certas capacidades de CSS3 ou de HTML5, poderemos utilizá-las com liberdade. De modo contrário, se sabemos que um navegador não é compatível com determinada funcionalidade, poderemos implementar variantes que o suportem e desse modo criar websites que se adaptam perfeitamente ao cliente web de cada visitante.
Você pode encontrar Modernizr em: http://www.modernizr.com
Objeto Javascript:
Una vez que baixemos as bibliotecas de Modernizr teremos à nossa disposição um objeto Javascript que possui uma série de propriedades que nos servem para saber quando uma funcionalidade específica está disponível, ou não, em um navegador. Essas propriedades têm sempre valores booleanos (true ou false), que podemos avaliar para fazer ou não uso das funcionalidades avançadas que desejemos, sabendo que realmente estão disponíveis.
Classes CSS:
Além disso, modernizr cria uma série de classes CSS que servirão, de uma maneira inteligente, para atribuir estilos CSS3 unicamente quando são suportados e que nos permitirão aplicar estilos alternativos quando não estejam disponíveis.
No caso de CSS3, detecta se estão ou não implementados atributos para fazer bordas arredondadas, sombras de caixas, imagens nas bordas, cores rgba fundos múltiplos, etc. Ademais, existem formas de detectar se as animações CSS estão implementadas no navegador, as colunas CSS, os degradés, transformações, etc.
Com relação a HTML5, Modernizr é capaz de nos informar sobre a existência ou não de suporte para etiquetas como AUDIO, VIDEO e o que será mais importante, a diversas API que estarão disponíveis nessa versão da linguagem de marcação, como Local Storage, Session Storage, Web Sockets, geolocalização, SVG, etc.
Um Polyfill ou Polyfiller é uma biblioteca ou plugin para ampliar as funcionalidades de navegadores antigos que não suportam funcionalidades modernas. Para entender bem esse conceito pensemos em HTML 5, que traz com ele diversas API para trabalhar com Local Storage ou Web Sockets, etc. Hoje poucos navegadores suportam essas tecnologias e se falamos de navegadores antigos, aí o suporte é ainda menor. Então, podemos carregar um Polyfill no navegador para que seja compatível com algumas dessas tecnologias.
O Polyfill não tem por que estar construído da mesma maneira que o API nativo nos navegadores, mas é como um emulador, que nos proverá da mesma interface, de modo que possamos trabalhar em clientes web antigos da mesma maneira como trabalharíamos nos modernos.
Os Polyfill não fazem parte de Modernizr especificamente, mas este sim proporciona elementos para carregá-los no navegador quando não se tenha suporte nativo. Desse modo, podemos ter um suporte instantâneo para algumas funcionalidades do HTML5 que estão por vir, embora isso, às vezes, vá em detrimento do desempenho do cliente web.
Com Modernizr.load() e o objeto Javascript Modernizr, que armazena booleanos sobre se existe ou não suporte para diversas funcionalidades, temos tudo que necessitamos para carregar comodamente os Pollyfills necessários para ampliar o suporte de nosso navegador a características de HTML5 e CSS3.
Na própria documentação de Modernizr aconselham utilizar os Pollyfills com cuidado, porque pode baixar o rendimento dos navegadores. Não obstante, antevemos uma via excelente para poder inovar no desenvolvimento e manter suporte com navegadores antigos.
Nos próximos artigos trataremos o método Modernizr.load() em detalhes e estudaremos mais sobre o carregamento de Pollyfills.
Suas funcionalidades básicas, para detecção de suporte a HTML5 e CSS3, já são bastante interessantes por si só. Porém, ademais, com a possibilidade de carregar pollyfills, se converte em uma ferramenta potente que permitirá nos adiantarmos a diversos standards que ainda não estão universalizados.