Onlangs ontdekte ik dat er mogelijk een nieuwe manier is om in HTML5 te reageren.
In plaats van het typische <!-- -->
commentaar met meerdere regels waar ik over heb gelezen, dachtik merkte dat mijn IDE een normale <!div >
heeft gereageerd. Dus ik testte het uit en tot mijn verbazing had Chrome die tag uitgelicht. Het alleenbecommentarieerde de tag en niet de inhoud van de div, dus ik moest commentaar geven op de nauwere <!/div>
om te voorkomen dat andere div’s werden gesloten.
Ik heb er nog een getest en het lijkt erop dat het plaatsen van een uitroepteken voor de opening van een tag, dit symbool <
, ervoor zorgt dat die tag wordt uitgesloten.
Is dit echt nieuw? Is het een slechte gewoonte? Het is eigenlijk heel handig, maar is het al praktisch (zo niet nieuw)?
Extra details bewerken:
Hoewel een syntaxisfout of verkeerde interpretatie van deze specifieke syntaxis een goede reden is, hoe komt het dan dat Chrome ze eigenlijkweergeeft als volledige opmerkingen?
De code is geschreven als:
<!div displayed> some text here that is still displayed <!/div>
En dan wordt het weergegeven als:
<!--div displayed--> some text here that is still displayed <!--/div-->
Antwoord 1, autoriteit 100%
Er is geen nieuwe standaard voor opmerkingen in HTML5. De enige geldige commentaarsyntaxis is nog steeds <!-- -->
. Uit sectie 8.1.6 van W3C HTML5:
Opmerkingenmoeten beginnen met de reeks van vier tekens U+003C MINDER DAN TEKEN, U+0021 UITROEPTEKEN, U+002D HYPHEN-MINUS, U+002D HYPHEN-MINUS (
<!--
).
De <!
-syntaxis is afkomstig uit SGML DTD-opmaak, die geen deel uitmaakt van HTML5. In HTML5 is het gereserveerd voor opmerkingen, CDATA-secties en de DOCTYPE-declaratie. Of dit alternatief een slechte gewoonte is, hangt er dus van af of je het gebruik van (of erger nog, de afhankelijkheid van) verouderde opmaak als een slechte gewoonte beschouwt.
Validator.nu noemt wat je hebt een ‘bogus-commentaar’. – wat betekent dat het wordt behandeld als een opmerking, ook al is het geen geldige opmerking. Dit is vermoedelijk voor achterwaartse compatibiliteit met pre-HTML5, dat op SGML was gebaseerd, en had opmaakdeclaraties in de vorm <!FOO>
, dus ik zou dit niet nieuw willen noemen. De reden dat ze zoalsopmerkingen worden behandeld, is omdat SGML-opmaakdeclaraties speciale verklaringen waren die niet bedoeld waren om te worden weergegeven, maar omdat ze betekenisloos zijn in HTML5 (met de bovenstaande uitzonderingen), voor zover de HTML5 DOM is bezorgd zijn ze zijnniets meer dan opmerkingen.
De volgende stappen in sectie 8.2.4leiden tot deze conclusie , die Chrome tot op de letter lijkt te volgen:
-
Consumeer het volgende invoerteken:
“<” (U+003C)
Schakel over naar de status tag open. -
Consumeer het volgende invoerteken:
“!” (U+0021)
Schakel over naar de open status van de opmaakdeclaratie. -
8.2.4.45 Markup-declaratie open staat :
Als de volgende twee tekens beide “-” (U+002D) tekens zijn, gebruik die twee tekens, maak een commentaartoken waarvan de gegevens de lege tekenreeks zijn en schakel over naar de startstatus van de reactie.
Anders, als de volgende zeven tekens een ASCII-hoofdletterongevoelige overeenkomst zijn voor het woord “DOCTYPE”, gebruik die tekens dan en schakel over naar de DOCTYPE-status.
Anders, als er een aangepast huidig knooppunt is en het is geen element in de HTML-naamruimte en de volgende zeven tekens zijn hoofdlettergevoelig voor de tekenreeks “[CDATA[” (de vijf hoofdletters “CDATA” met een U+005B LEFT SQUARE BRACKET-teken ervoor en erna), consumeer die tekens en schakel over naar de CDATA-sectiestatus.
Anders is dit een parseerfout. Schakel over naar de status nepcommentaar. Het volgende teken dat wordt gebruikt, indien aanwezig, is het eerste teken dat in de opmerking zal staan.
Merk op dat er staat dat alleen naar de startstatus van de opmerking moet worden overgeschakeld als de reeks tekens die u tegenkomt
<!--
is, anders is het een valse opmerking. Dit weerspiegelt wat hierboven in paragraaf 8.1.6 is vermeld. -
8.2.4.44 Staat van valse opmerking:
Consumeer elk teken tot en met de eerste “>” (U+003E) teken of het einde van het bestand (EOF), afhankelijk van wat zich het eerst voordoet. Zend een commentaartoken uit waarvan de gegevens de aaneenschakeling zijn van alle karakters vanaf en inclusief het karakter dat ervoor zorgde dat de toestandsmachine overschakelde naar de nepcommentaarstatus, tot en met het karakter onmiddellijk voor het laatst gebruikte karakter (dwz tot het karakter net voor het U+003E- of EOF-teken), maar waarbij alle U+0000 NULL-tekens worden vervangen door U+FFFD VERVANGENDE KARAKTER-tekens. (Als de opmerking is gestart aan het einde van het bestand (EOF), is het token leeg. Evenzo is het token leeg als het is gegenereerd door de tekenreeks “
<!>
“.)In gewoon Engels wordt
<!div displayed>
omgezet in<!--div displayed-->
en<!/div>
in<!--/div-->
, precies zoals beschreven in de vraag.
Tot slot: je kunt waarschijnlijk verwachten dat andere HTML5-compatibele parsers zich hetzelfde gedragen als Chrome.
Antwoord 2, autoriteit 6%
Ik denk niet dat dit een goede gewoonte is, aangezien <!
staat voor opmaakdeclaraties zoals <!DOCTYPE
. Dus je denkt dat het becommentarieerd is (nou ja… browser zal proberen het te interpreteren).
Zelfs als het niet verschijnt, lijkt dit niet de juiste syntaxis te zijn voor commentaar op HTML-code.