Invisible closing tag?

on the site itself there is a </form>, but I don’t see it within the code on my editor :confused:
here is what’s showing in chrome developer tools:

but what is showing in my editor is

<form method="post" action="{S_PROFILE_ACTION}" id="viewprofile">
	<div style="display: block;" class="panel<!-- IF S_ONLINE --> online<!-- ENDIF -->" id="profile-panel">
	<div class="inner">
	

	<dl class="detailsprof"">
		
		<h3 class="mem-head">{L_GENERAL_INFO}</h3>
		<!-- IF U_USER_ADMIN --><a id="administer" href="{U_USER_ADMIN} ">{L_USER_ADMIN}</a><!-- ENDIF -->
		<!-- IF U_USER_BAN --><a id="ban" href="{U_USER_BAN}">{L_USER_BAN}</a><!-- ENDIF -->
		<!-- IF U_SWITCH_PERMISSIONS --> [ <a href="{U_SWITCH_PERMISSIONS}">{L_USE_PERMISSIONS}</a> ]<!-- ENDIF -->\\
		<!-- IF S_USER_INACTIVE --><dt>{L_USER_IS_INACTIVE}:</dt> <dd>{USER_INACTIVE_REASON}</dd><!-- ENDIF -->
		<!-- IF LOCATION --><dt>{L_LOCATION}:</dt> <dd>{LOCATION}</dd><!-- ENDIF -->
		<!-- IF AGE !== '' --><dt>{L_AGE}:</dt> <dd>{AGE}</dd><!-- ENDIF -->
		<!-- IF OCCUPATION --><dt>{L_OCCUPATION}:</dt> <dd>{OCCUPATION}</dd><!-- ENDIF -->
		<!-- IF INTERESTS --><dt>{L_INTERESTS}:</dt> <dd>{INTERESTS}</dd><!-- ENDIF -->
		<!-- IF DISLIKES --><dt>{L_DISLIKES}:</dt> <dd>{DISLIKES}</dd><!-- ENDIF -->
		<!-- IF S_GROUP_OPTIONS --><span class="groups"><dt>{L_USERGROUPS}:</dt> <dd><select name="g">{S_GROUP_OPTIONS}</select> <input type="submit" name="submit" value="{L_GO}" class="button2" style="position: relative; left: 144px; bottom: 18px;" /></dd></span><!-- ENDIF -->
		<!-- BEGIN custom_fields --><dt>{custom_fields.PROFILE_FIELD_NAME}:</dt> <dd>{custom_fields.PROFILE_FIELD_VALUE}</dd><!-- END custom_fields -->
		<!-- IF S_USER_LOGGED_IN and S_ZEBRA -->
			<!-- IF U_REMOVE_FRIEND -->
				<dt>&nbsp;</dt> <dd><a href="{U_REMOVE_FRIEND}"><strong>{L_REMOVE_FRIEND}</strong></a></dd>
			<!-- ELSEIF U_REMOVE_FOE -->
				<dt>&nbsp;</dt> <dd><a href="{U_REMOVE_FOE}"><strong>{L_REMOVE_FOE}</strong></a></dd>
			<!-- ELSE -->
				<!-- IF U_ADD_FRIEND -->
					<dt>&nbsp;</dt> <dd><a href="{U_ADD_FRIEND}"><strong>{L_ADD_FRIEND}</strong></a></dd>
				<!-- ENDIF -->
				<!-- IF U_ADD_FOE -->
					<dt>&nbsp;</dt> <dd><a href="{U_ADD_FOE}"><strong>{L_ADD_FOE}</strong></a></dd>
				<!-- ENDIF -->
			<!-- ENDIF -->
		<!-- ENDIF -->
	</dl>
</div>
</div>

<div style="display: none;" class="panel<!-- IF S_ONLINE --> online<!-- ENDIF -->" id="contact-panel">
	<div class="inner">
<h3 class="mem-head">{L_CONTACT_USER}</h5>

		<dl class="detailsprof">
		<!-- IF U_WWW --><dt>{L_WEBSITE}:</dt> <dd><a href="{U_WWW}" title="{L_VISIT_WEBSITE}: {U_WWW}">{U_WWW}</a></dd><!-- ENDIF -->
		<!-- IF U_PM --><dt>{L_PM}:</dt> <dd><a href="{U_PM}">{L_SEND_PRIVATE_MESSAGE}</a></dd><!-- ENDIF -->
		<!-- IF U_MSN or USER_MSN --><dt>{L_MSNM}:</dt> <dd><!-- IF U_MSN --><a href="{U_MSN}" onclick="popup(this.href, 550, 320); return false;">{L_SEND_MSNM_MESSAGE}</a><!-- ELSE -->{USER_MSN}<!-- ENDIF --></dd><!-- ENDIF -->
		<!-- IF U_YIM or USER_YIM --><dt>{L_YIM}:</dt> <dd><!-- IF U_YIM --><a href="{U_YIM}" onclick="popup(this.href, 780, 550); return false;">{L_SEND_YIM_MESSAGE}</a><!-- ELSE -->{USER_YIM}<!-- ENDIF --></dd><!-- ENDIF -->
		<!-- IF U_AIM or USER_AIM --><dt>{L_AIM}:</dt> <dd><!-- IF U_AIM --><a href="{U_AIM}" onclick="popup(this.href, 550, 320); return false;">{L_SEND_AIM_MESSAGE}</a><!-- ELSE -->{USER_AIM}<!-- ENDIF --></dd><!-- ENDIF -->
		<!-- IF S_PROFILE_FIELD1 -->
			<!-- NOTE: Use a construct like this to include admin defined profile fields. Replace FIELD1 with the name of your field. -->
			<dt>{postrow.PROFILE_FIELD1_NAME}:</dt> <dd>{postrow.PROFILE_FIELD1_VALUE}</dd>
		<!-- ENDIF -->
		</dl>
		
		<div id="comments">
      <!-- IF S_GUESTBOOK_ENABLED -->
<h2>{L_GUESTBOOK}</h2>


<div class="topic-actions">

	<div class="buttons">
	<!-- IF not S_IS_BOT and S_DISPLAY_REPLY_INFO -->
		<div class="reply-icon"><a href="{U_POST_REPLY_TOPIC}" title="{L_GUESTBOOK_REPLY}"><span></span>{L_GUESTBOOK_REPLY}</a></div>
	<!-- ENDIF -->
	</div>

	<!-- IF PAGINATION or TOTAL_POSTS -->
		<div class="pagination">
			<!-- IF U_VIEW_UNREAD_POST and not S_IS_BOT --><a href="{U_VIEW_UNREAD_POST}">{L_VIEW_UNREAD_POST}</a> &bull; <!-- ENDIF -->{TOTAL_POSTS}
			<!-- IF PAGE_NUMBER --><!-- IF PAGINATION --> &bull; <a href="#" onclick="jumpto(); return false;" title="{L_JUMP_TO_PAGE}">{PAGE_NUMBER}</a> &bull; <span>{PAGINATION}</span><!-- ELSE --> &bull; {PAGE_NUMBER}<!-- ENDIF --><!-- ENDIF -->
		</div>
	<!-- ENDIF -->

</div>

<!-- BEGIN postrow -->
	<!-- IF postrow.S_FIRST_UNREAD --><a id="unread"></a><!-- ENDIF -->
	<div id="p{postrow.POST_ID}" class="post <!-- IF postrow.S_ROW_COUNT is odd -->bg1<!-- ELSE -->bg2<!-- ENDIF --><!-- IF postrow.S_UNREAD_POST --> unreadpost<!-- ENDIF --><!-- IF postrow.S_POST_REPORTED --> reported<!-- ENDIF --><!-- IF postrow.S_ONLINE and not postrow.S_IGNORE_POST --> comment-box<!-- ENDIF -->">
		<div class="inner">

		<div class="postmessage">
			<!-- IF postrow.S_IGNORE_POST -->
				<div class="ignore">{postrow.L_IGNORE_POST}</div>
			<!-- ELSE -->

		<!-- IF not S_IS_BOT -->
			<!-- IF postrow.U_EDIT or postrow.U_DELETE or postrow.U_REPORT or postrow.U_WARN or postrow.U_INFO or postrow.U_QUOTE -->
				<ul class="profile-icons">
					<!-- IF postrow.U_EDIT --><li class="edit-icon"><a href="{postrow.U_EDIT}" title="{L_EDIT_POST}"><span>{L_EDIT_POST}</span></a></li><!-- ENDIF -->
					<!-- IF postrow.U_DELETE --><li class="delete-icon"><a href="{postrow.U_DELETE}" title="{L_DELETE_POST}"><span>{L_DELETE_POST}</span></a></li><!-- ENDIF -->
					<!-- IF postrow.U_REPORT --><li class="report-icon"><a href="{postrow.U_REPORT}" title="{L_REPORT_POST}"><span>{L_REPORT_POST}</span></a></li><!-- ENDIF -->
					<!-- IF postrow.U_WARN --><li class="warn-icon"><a href="{postrow.U_WARN}" title="{L_WARN_USER}"><span>{L_WARN_USER}</span></a></li><!-- ENDIF -->
					<!-- IF postrow.U_INFO --><li class="info-icon"><a href="{postrow.U_INFO}" title="{L_INFORMATION}"><span>{L_INFORMATION}</span></a></li><!-- ENDIF -->
					<!-- IF postrow.U_QUOTE --><li class="quote-icon"><a href="{postrow.U_QUOTE}" title="{L_REPLY_WITH_QUOTE}"><span>{L_REPLY_WITH_QUOTE}</span></a></li><!-- ENDIF -->
				</ul>
			<!-- ENDIF -->
		<!-- ENDIF -->

			<h3 <!-- IF postrow.S_FIRST_ROW -->class="first"<!-- ENDIF -->><!-- IF postrow.POST_ICON_IMG --><img src="{T_ICONS_PATH}{postrow.POST_ICON_IMG}" width="{postrow.POST_ICON_IMG_WIDTH}" height="{postrow.POST_ICON_IMG_HEIGHT}" alt="" /> <!-- ENDIF --><a href="#p{postrow.POST_ID}">{postrow.POST_SUBJECT}</a></h3>
			<p class="author"><!-- IF S_IS_BOT -->{postrow.MINI_POST_IMG}<!-- ELSE --><a href="{postrow.U_MINI_POST}">{postrow.MINI_POST_IMG}</a><!-- ENDIF -->{L_POST_BY_AUTHOR} <strong>{postrow.POST_AUTHOR_FULL}</strong> &raquo; {postrow.POST_DATE} </p>

			<!-- IF postrow.S_POST_UNAPPROVED or postrow.S_POST_REPORTED -->
				<p class="rules">
					<!-- IF postrow.S_POST_UNAPPROVED -->{UNAPPROVED_IMG} <a href="{postrow.U_MCP_APPROVE}"><strong>{L_POST_UNAPPROVED}</strong></a><br /><!-- ENDIF -->
					<!-- IF postrow.S_POST_REPORTED -->{REPORTED_IMG} <a href="{postrow.U_MCP_REPORT}"><strong>{L_POST_REPORTED}</strong></a><!-- ENDIF -->
				</p>
			<!-- ENDIF -->

			<div class="content">{postrow.MESSAGE}</div>


			<!-- IF postrow.S_DISPLAY_NOTICE --><div class="rules">{L_DOWNLOAD_NOTICE}</div><!-- ENDIF -->
			<!-- IF postrow.EDITED_MESSAGE or postrow.EDIT_REASON -->
				<div class="notice">{postrow.EDITED_MESSAGE}
					<!-- IF postrow.EDIT_REASON --><br /><strong>{L_REASON}:</strong> <em>{postrow.EDIT_REASON}</em><!-- ENDIF -->
				</div>
			<!-- ENDIF -->

		<!-- ENDIF -->

		</div>

		<!-- IF not postrow.S_IGNORE_POST -->
			<dl class="postuser" id="profile{postrow.POST_ID}">
			<dt>
				<!-- IF postrow.POSTER_AVATAR -->
					<!-- IF postrow.U_POST_AUTHOR --><a href="{postrow.U_POST_AUTHOR}">{postrow.POSTER_AVATAR}</a><!-- ELSE -->{postrow.POSTER_AVATAR}<!-- ENDIF --><br />
				<!-- ENDIF -->
			</dt>

		<dd>&nbsp;</dd>

		<!-- IF postrow.S_PROFILE_FIELD1 -->
			<!-- Use a construct like this to include admin defined profile fields. Replace FIELD1 with the name of your field. -->
			<dd><strong>{postrow.PROFILE_FIELD1_NAME}:</strong> {postrow.PROFILE_FIELD1_VALUE}</dd>
		<!-- ENDIF -->

		<!-- BEGIN custom_fields -->
			<dd><strong>{postrow.custom_fields.PROFILE_FIELD_NAME}:</strong> {postrow.custom_fields.PROFILE_FIELD_VALUE}</dd>
		<!-- END custom_fields -->

		<!-- IF not S_IS_BOT -->
		<!-- IF postrow.U_PM or postrow.U_EMAIL or postrow.U_WWW or postrow.U_MSN or postrow.U_ICQ or postrow.U_YIM or postrow.U_AIM or postrow.U_JABBER -->
			<dd>
				<ul class="profile-icons">
					<!-- IF postrow.U_PM --><li class="pm-icon"><a href="{postrow.U_PM}" title="{L_PRIVATE_MESSAGE}"><span>{L_PRIVATE_MESSAGE}</span></a></li><!-- ENDIF -->
					<!-- IF postrow.U_EMAIL --><li class="email-icon"><a href="{postrow.U_EMAIL}" title="{L_SEND_EMAIL_USER} {postrow.POST_AUTHOR}"><span>{L_SEND_EMAIL_USER} {postrow.POST_AUTHOR}</span></a></li><!-- ENDIF -->
					<!-- IF postrow.U_WWW --><li class="web-icon"><a href="{postrow.U_WWW}" title="{L_VISIT_WEBSITE}: {postrow.U_WWW}"><span>{L_WEBSITE}</span></a></li><!-- ENDIF -->
					<!-- IF postrow.U_MSN --><li class="msnm-icon"><a href="{postrow.U_MSN}" onclick="popup(this.href, 550, 320); return false;" title="{L_MSNM}"><span>{L_MSNM}</span></a></li><!-- ENDIF -->
					<!-- IF postrow.U_ICQ --><li class="icq-icon"><a href="{postrow.U_ICQ}" onclick="popup(this.href, 550, 320); return false;" title="{L_ICQ}"><span>{L_ICQ}</span></a></li><!-- ENDIF -->
					<!-- IF postrow.U_YIM --><li class="yahoo-icon"><a href="{postrow.U_YIM}" onclick="popup(this.href, 780, 550); return false;" title="{L_YIM}"><span>{L_YIM}</span></a></li><!-- ENDIF -->
					<!-- IF postrow.U_AIM --><li class="aim-icon"><a href="{postrow.U_AIM}" onclick="popup(this.href, 550, 320); return false;" title="{L_AIM}"><span>{L_AIM}</span></a></li><!-- ENDIF -->
					<!-- IF postrow.U_JABBER --><li class="jabber-icon"><a href="{postrow.U_JABBER}" onclick="popup(this.href, 550, 320); return false;" title="{L_JABBER}"><span>{L_JABBER}</span></a></li><!-- ENDIF -->
				</ul>
			</dd>
		<!-- ENDIF -->
		<!-- ENDIF -->

		</dl>
	<!-- ENDIF -->

		<div class="back2top"><a href="#wrap" class="top" title="{L_BACK_TO_TOP}">{L_BACK_TO_TOP}</a></div>

		</div>
	</div>

	<hr class="divider" />
	
<!-- BEGINELSE -->
<div class="panel bg1">
	<div class="inner">
	{L_NO_POSTS_GUESTBOOK}</div>
</div>
	
<!-- END postrow -->
<!-- IF S_DISPLAY_REPLY_INFO and not S_IS_LOCKED and S_QUICK_REPLY -->
	<!-- INCLUDE quickreply_editor.html -->
<!-- ENDIF -->
<!-- IF S_NUM_POSTS > 1 or PREVIOUS_PAGE -->
	<form id="viewtopic" method="post" action="{S_TOPIC_ACTION}">

	<fieldset class="display-options" style="margin-top: 0; ">
		<!-- IF PREVIOUS_PAGE --><a href="{PREVIOUS_PAGE}" class="left-box {S_CONTENT_FLOW_BEGIN}">{L_PREVIOUS}</a><!-- ENDIF -->
		<!-- IF NEXT_PAGE --><a href="{NEXT_PAGE}" class="right-box {S_CONTENT_FLOW_END}">{L_NEXT}</a><!-- ENDIF -->
		<!-- IF not S_IS_BOT -->
		<label>{L_DISPLAY_POSTS}: {S_SELECT_SORT_DAYS}</label>
		<label>{L_SORT_BY} {S_SELECT_SORT_KEY}</label> <label>{S_SELECT_SORT_DIR} <input type="submit" name="sort" value="{L_GO}" class="button2" /></label>
		<!-- ENDIF -->
	</fieldset>

	</form>
	<hr />
<!-- ENDIF -->

<div class="topic-actions">
	<div class="buttons">
	<!-- IF not S_IS_BOT and S_DISPLAY_REPLY_INFO -->
		<div class="reply-icon"><a href="{U_POST_REPLY_TOPIC}" title="{L_GUESTBOOK_REPLY}"><span></span>{L_GUESTBOOK_REPLY}</a></div>
	<!-- ENDIF -->
	</div>

	<!-- IF PAGINATION or TOTAL_POSTS -->
		<div class="pagination">
			{TOTAL_POSTS}
			<!-- IF PAGE_NUMBER --><!-- IF PAGINATION --> &bull; <a href="#" onclick="jumpto(); return false;" title="{L_JUMP_TO_PAGE}">{PAGE_NUMBER}</a> &bull; <span>{PAGINATION}</span><!-- ELSE --> &bull; {PAGE_NUMBER}<!-- ENDIF --><!-- ENDIF -->
		</div>
	<!-- ENDIF -->
</div>

<!-- ENDIF -->
    </div>
	
	</div>
</div>

<div style="display: none;" class="panel<!-- IF S_ONLINE --> online<!-- ENDIF -->" id="statistics-panel">
	<div class="inner">


		<h3 class="mem-head">{L_USER_FORUM}</h3>
		<dl class="detailsprof">
			<dt>{L_JOINED}:</dt> <dd>{JOINED}</dd>
			<dt>{L_VISITED}:</dt> <dd>{VISITED}</dd>
			<!-- IF S_WARNINGS -->
			<dt>{L_WARNINGS}: </dt>
			<dd><strong>{WARNINGS}</strong><!-- IF U_NOTES or U_WARN --> [ <!-- IF U_NOTES --><a href="{U_NOTES}">{L_VIEW_NOTES}</a><!-- ENDIF --> <!-- IF U_WARN --><!-- IF U_NOTES --> | <!-- ENDIF --><a href="{U_WARN}">{L_WARN_USER}</a><!-- ENDIF --> ]<!-- ENDIF --></dd>
			<!-- ENDIF -->
			<dt>{L_TOTAL_POSTS}:</dt>
				<dd>{POSTS} <!-- IF S_DISPLAY_SEARCH -->| <strong><a href="{U_SEARCH_USER}">{L_SEARCH_USER_POSTS}</a></strong><!-- ENDIF -->
					<!-- IF POSTS_PCT --><br />({POSTS_PCT} / {POSTS_DAY})<!-- ENDIF -->
					<!-- IF POSTS_IN_QUEUE and U_MCP_QUEUE --><br />(<a href="{U_MCP_QUEUE}">{L_POSTS_IN_QUEUE}</a>)<!-- ELSEIF POSTS_IN_QUEUE --><br />({L_POSTS_IN_QUEUE})<!-- ENDIF -->
				</dd>
			<!-- IF S_SHOW_ACTIVITY and POSTS -->
				<dt>{L_ACTIVE_IN_FORUM}:</dt> <dd><!-- IF ACTIVE_FORUM != '' --><strong><a href="{U_ACTIVE_FORUM}">{ACTIVE_FORUM}</a></strong><br />({ACTIVE_FORUM_POSTS} / {ACTIVE_FORUM_PCT})<!-- ELSE --> - <!-- ENDIF --></dd>
				<dt>{L_ACTIVE_IN_TOPIC}:</dt> <dd><!-- IF ACTIVE_TOPIC != '' --><strong><a href="{U_ACTIVE_TOPIC}">{ACTIVE_TOPIC}</a></strong><br />({ACTIVE_TOPIC_POSTS} / {ACTIVE_TOPIC_PCT})<!-- ELSE --> - <!-- ENDIF --></dd>
			<!-- ENDIF -->
                        <!-- IF S_PROFILE_VIEWS and PROFILE_VIEWS -->
			<dt>{L_PROFILE_VIEWS}:</dt><dd>{PROFILE_VIEWS}</dd>
			<dt><a href="{S_PROFILE_VIEW_ACTION}">{L_PROFILE_VIEWS_LIST}</a>:</dt><dd>
			
			<table><tr align="center">
			<!-- BEGIN profile_views -->
			<td><table><tr align="center" ><td>{profile_views.AVATAR}</td></tr><tr align="center" valign="bottom"><td><b>{profile_views.PROFILE_VIEWS_LIST}</b></td></tr></table></td>
			<!-- END profile_views -->
			</tr></table>
			</dd>
			<!-- ENDIF -->
		</dl>
	<!-- IF SIGNATURE -->


		<h3 class="mem-head">{L_SIGNATURE}</h3>

		<div class="postbody"><div class="signature" style="border-top:none; margin-top: 0;">{SIGNATURE}</div></div>

<!-- ENDIF -->
</div>
		
	</div>
<div style="display: none;" class="panel<!-- IF S_ONLINE --> online<!-- ENDIF -->" id="anime-panel">
	<div class="inner">
		<h3 class="mem-head">{L_ANIME}</h3>
		<dl class="detailsprof">
		</dl>
	</div>
</div>
</div>
</form>

You have several HTML errors, which are almost certainly why the browser isn’t interpreting your code the way you intended. You have an H3 and several A’s as children of a DL. You have a SPAN wrapping a DT and DD. You open an H3 but close an H5. And those are just a few near the top that I could spot right away. My advice: run the generated HTML through the W3C validator, and work on fixing the errors it tells you about.

You have a nested form in there. That’s not allowed. The inner <form> start tag gets ignored, and the inner </form> tag causes the outer form to be closed at the position you see in the developer tool (which is according to the HTML spec).

Hmm, didn’t know you couldn’t do that… Well thanks for pointing that out!

Also beware that in some browsers closing a parent tag will auto-close the child.

<ul><li><form></li>

The /form is added automatically in some browsers, but not all – it’s part of the ‘problem’ with HTML is that invalid code is accepted as valid, assumptions (that may be false) are made, when in any REAL programming language you’d get and error and the page would stop right there.

Quite often I wish HTML did that, even if it did break 90%+ of the Internet given the way people sleaze out pages.

I really do wonder what the blazes all those definition lists are even in there for, though It’s hard to follow the code with whatever train wreck templating bloat that is. (don’t even want to THINK about how long that takes to process)… the heading orders don’t make ANY sense, it seems to have paragraphs around elements that aren’t paragraphs, classes on elements that shouldn’t need them given the parent element’s presence, horizontal rules when there’s no topic/section change, and what I’m assuming are scripting hooks or scripting states that should be added BY the script, so scripting off visitors who have it unavailable or blocked don’t end up with a neutered page.

Just saying.

Actually all of the definition lists were there to begin with (using PhpBB) and i actually tried to replace them with <p>'s, but it broke the format and made it look weird…

Wait, so phpBB has hopped on the ‘abuse lists for tabular data’ retard wagon alongside vBull? Lovely… knew there was a reason after NeverNoSanity I told everyone to stop using that one…

You know, it’s really pathetic how all the new generation forum softwares are trying to be ‘more semantic’ with ‘modern markup’, and in the long run end up with a WORSE result than what they had under HTML 3.2 – or should we say 3.2 called tranny? Though now it’s just 3.2 with HTML 5’s lip-service at the top…

Explains the goofy templating system you couldn’t pay me to work with.

What would you suggest that I replace the definition lists with? In my opinion the way it looks right now isn’t quite an visually appealing as I would want it to be, I mean it looks alright… but not awesome, and as I’m a new webmaster/developer/web designer (have to be all three since I’m the only one working on the site, and i don’t have money to hire anyone) I don’t quite know the right markup to use for that sort of thing.

Since browsers implemented HTML5 parsers, they all parse the same. (What happens with that particular markup is that the form element is closed but the “form element pointer” is not cleared, so form elements still get associated with the form.)

Browsers don’t make “assumptions” anymore, they just follow the spec.

HTML is not a programming language.

Too bad not everyone out there is using a modern browser! I also wouldn’t bank on that given the tendency towards regressions in FF and the incomplete implementations of a specification that’s still in DRAFT!

Which makes assumptions based on it’s rules that may not match up with the developers intent! That’s still making assumptions; the spec just says what those assumptions are – it still means invalid nesting is rubbish code that should be fixed.

This one REALLY pisses me off when people say it – Uses blocks of instructions to tell a computer how to process the data in a sequential order… Sounds like a programming language to me… a high high high level one, but still a programming language.

The “its not a programming language” nonsense is like the opposite of the die hard XML whackjobs who call XML “machine readable”… does it store the numbers in binary? Does it store the strings as null terminated or run length delimited? Is it easily accessed via fixed width at the machine language level without running through a complex parser first? No? Then it’s NOT machine readable. That’s like calling C ‘machine readable’.

Of course if HTML worked more like real programming languages problems like the OP’s wouldn’t even get past the parser. Biggest mistake in the creation of HTML was letting errors just slide by so people can be sleazy, lazy, or stupid. Validation was supposed to help fix that, but naturally with that giant steaming pile of manure known as HTML 5 they’ve done a wonderful job of pitching all that in the trash, alongside all the other improvements we were given in the previous decade.

Indeed!

It doesn’t really have instructions in the programming sense.