It is not a question of minimalism. Althought the selectors have no styles, you are adding new html code just for styling the form, and not for including some new functional elements.
Try Ron’s html without css and then try yours and see which one looks better.
When dealing with structural semantics its always good to turn css off and see how the page looks. A well structured semantically correct page will often look correct even without css applied. After all screen readers may run your form together because they see no structure between one element and the next.
Of course making pages display well with CSS off is a bit over the top but it is a good design tip just to check the structure works on its own. In the end its a trade off between structure, semantics, simplicity and functionality so there never really is one right answer.
I tend to avoid though running inline elements into block elements (although I seem to be the only one who objects to this) as things like this grate on me.
<label for="surname">Last Name <em>*</em></label>
<input id="surname" required>
[B]<p>[/B]<span id = "surnameHint" class="errorMessage"></span>[B]</p>[/B]
It is perfectly valid to do the above and indeed in some cases you have no option but whereever you can its nicer to avoid that structure. The reason is that you are running an inline element into a block element which is akin to html like this:
<div>Hello <p>I am some more text</p></div>
The text “Hello” is in limbo because it doesn’t really have a structured container and should also be inside its own block element like the p element.
In your example you could simply set the span to display:block to avoid this issue and keep the semantics correct. As I said I am only one of the few who moan about things like that so feel free to ignore me
Using breaks is often frowned on but funnily enough form elements are where they are perfect and semantically correct.
e.g.
label : input : break
The above will often save the use of using a parent div and closing div inside a fieldset. Remember though that when you don’t use a fieldset it is invalid to have inline elements as direct children of a form in some doctypes.
It’s the same reason that breaks are semantically correct when used in addresses, poetry and song lyrics etc