IE simply ignores HTML5 elements because it does not know about them. From Modernizr Documents
Modernizr runs a short loop in JavaScript to allow various HTML5 elements (as well as abbr) to be styled in Internet Explorer. Please note that this does not mean that it suddenly makes support for IE audio or video, it just means that you can use a section instead of a div and style them in CSS.
This suggests that Modernizr will tell IE about the new tags in HTML5 so you can use CSS on them, but don't try to get them to do anything. Also note that Modernizr does not add default styles for elements, so they recommend using HTML5 CSS reset, which makes the <section> display: block; tags display: block; , eg.
Regarding your form, the topek check was correct, explaining that Modernizr only detects browser capabilities, but actually does nothing. Modernizr’s progress is that you use the built-in yepnope testing function to check if the user’s browser can “x” (in this case, check the form) and then conditionally and asynchronously load the script or style into “polyfill” (a polite way to say “ use javascript to simulate your own behavior ").
In your case, you'll want to use Modernizr.load() to test Modernizr.input.required and, possibly, Modernizr.input.autofocus , for example:
//the modernizr conditional load function Modernizr.load({ //specify the tests, refer to the Modernizr docs for object names test: Modernizr.input.required && Modernizr.input.placeholder, //specify what to do if the browser fails the test, can be a function nope: 'path/to/polyfill/script', //sometimes you need to run some JS to init that script complete: function(){ polyfillinitorwhatever(); } });
And here you are, the pretty stripped down Modernizr.load. As long as I find their documents wandering around, they are actually very good. Every time I had a problem and tweeted in Paul Irish, he sent a link to the documents, where I really found my answer upon closer examination.
Validation is one of the most complex HTML5 features for browser developers as a standard. Although I really like simplicity, I continue to use jQuery.validate in all cases, except when the user has Chrome or Opera. The native FF validator remains weak. I would recommend you stick with jQuery.