Dans un formulaire HTML, le tag label permet d'associer un libellé à un contrôle. Les utiliser est fortement conseillé, tant pour l'accessibilité que pour l'usabilité du formulaire ; en effet, un click sur le libellé donne le focus au contrôle. Jusque là, je ne vous apprends rien.
Dans la grande majorité des exemples et usages courants (et à juste titre, vous allez comprendre) que l'on peut trouver, le label est lié à son contrôle à l'aide de l'attribut for comme suit : <label for="plop">libellé :</label> <input type="text" id="plop" name="plop">. Une lecture récente des spécifications m'appris qu'un autre usage, sans l'attribut for, était possible : <label>libellé : <input type="text" name="plop"></label>. Dans ce cas, le label doit être associé avec les éléments qu'il contient (je cite la spec : "When (the 'for' attribut is) absent, the label being defined is associated with the element's contents").
Je vois plusieurs avantages à cette dernière syntaxe. Par exemple, il n'est pas nécessaire d'indiquer l'identifiant du contrôle à chaque label, ce qui doit certainement se traduire par un gain de temps non négligeable autant qu'une source potentielle d'erreur en moins quand on travaille avec de gros formulaires. Mieux : pour ce qui concerne la mise en page des formulaires avec CSS, on peut également économiser un conteneur par contrôle (un paragraphe, par exemple) ; il serait en effet possible d'indiquer que le label se comporte comme un bloc (car c'est un élément en ligne par défaut) et de positionner le contrôle dans ce conteneur (en flottant, ou position absolue). Dans le fond rien de bien révolutionnaire, mais des petits avantages dont il serait dommage de se priver.
Seulement voilà, avec cette syntaxe, Internet Explorer 6 ne donne pas le focus au contrôle quand on clique sur le libellé. Du coup, on perd l'un des gros avantages des labels coté usabilité des formulaires. Dommage, je crains qu'il faille abandonner (pour le moment ?) cette syntaxe pourtant fort plaisante.