The Angle Bracket

A tournament of HTML tags

The Angle Bracket was a tournament of HTML tags, conducted via 57 Twitter polls in 7 rounds, conducted over a week. Apart from the final, each round consisted of games of 4 tags (because Twitter polls can only have 4 options) in which the first and second place finishers made it to the next round.

In a proper bracket competition everybody is seeded evenly across the competition by how likely they are to win, and you can draw a cute little tree structure as players are eliminated. Unfortunately I didn't think of this in advance, and also I had no idea which tags would or wouldn't be popular, so every round I randomized the winners of the previous round into new games. So you can't draw a tree. I'm sorry. Next time.

Scroll down to read the story of the tournament as it unfolded. You can click or tap any game to see the exact scores.

Round 1

This was the wild west round; every tag from the HTML 5 spec (uhhhh except caption because I accidentally left it out).

Round 1 exits

As you'd expect from a completely randomized tag set, there were some real surprises in this round, but there are also a lot of tags of dubious value and they mostly exited in round 1. I've grouped the results into the categories defined for each tag in the spec.

Because there are so many tags in round 1, per-tag commentary is hidden; you can click or tap any tag to see it.

Block tags: 50% eliminated

Some old favorites drew tough games and were eliminated early; dt was robbed, robbed I say.

Embeds: 70% eliminated

It was a brutal first round for embeds of all kinds; they were the second most-eliminated category of tags.

Forms: 42% eliminated

In a pattern we're going to see repeated several times, all the newer, accessibility-minded stuff got kicked out early. You bastards.

Metadata: 30% eliminated

With only a third of the tags in this category eliminated, it was one of the strongest early categories, although it included early warning signs for CSS fans.

Scripting: 40% eliminated

There aren't a lot of scripting tags to begin with, and it turns out only one we really care about.

Sections: 20% eliminated

This was the strongest category in round 1, with passionate fans and a bunch of surprisingly close games.

Tables: 66% eliminated

I feel like maybe the backlash against table layouts was learned too well; tables are nifty data structures and it was cruel to eviscerate the category in round 1.

Text: 73% eliminated

The most-eliminated tag category, round 1 saw the immediate exit of a huge number of marginally useful semantic tags, and also some big surprises.

Random other tags

Round 2

Less chaotic than round 1, less brutal than round 3, round 2 was a temporary calm before the storm.

Round 2 exits

Interesting that related tags often leave in the same round -- dt and dd, the ruby trio, sub and sup, del and ins went in round 1, but fieldset and legend both made it to round 2 and then got eliminated at the same time, as did all the h* tags, and em and strong.

Block: 50% eliminated

Embeds: 66% eliminated

It was another tough round for the unloved embed category.

Forms: 25% eliminated

After a tough round 1, the remaining tags in the Forms category were pretty strong in round 2.

Scripting: 33% eliminated

Given that the only tag eliminated in the scripting category was noscript, I think it's arguable to say that no actual scripting tags were eliminated, presaging the strength of web app voters in later rounds.

Sections: 58% eliminated

Almost no section tags got eliminated in round 1, but round 2 was a real winnower for this category.

Tables: 66% eliminated

Round 2 saw the exits of table's remaining child tags, leaving it non-functional but a symbolic standard-bearer for at least one more round.

Text: 78% eliminated

Text tags were once again the weakest category in round 2, with nearly 4 in 5 tags kicked out this round.


Round 3

In round 2 it was sad to see some tags go, but round 3 was where things got truly brutal.

Round 3 exits

Only 12 tags exited in round 3, so I'm not comparing by category any more, we'll go tag by tag.

Round 4

The tags that survived to round 4 showed some clear trends:

span and form lost their games in round 3, but to make it an even 4 tags per round they got promoted to round 4 on the basis of being the highest-scored of the losing tags.

Also clear by this point was the groundswell of fan support for marquee, with dozens of people drawing attention to the tournament specifically to vote for it.

Round 4 exits

Round 5

The version of HTML presented by round 5 reveals some uncomfortable truths about ourselves as developers. We threw out accessibility, semantic markup, discoverability, even style sheets. The remaining tags can build a web app -- you've still got canvas, so quite a fancy web app -- sure, but at what cost? And why the fuck is marquee still here?

Throwing away half of these tags is going to be a nightmare.

Round 5 exits

Final 4

This version of HTML is a nightmare. To do anything vaguely useful you have to resort to horrible hacks, and of course, because web developers are who we are, that's what people started doing at this point in the competition:

The final 4 had been predicted 3 rounds earlier by Howard, and his reward was a donation in his name to Codebar, which he matched with his own funds, because he's a good sport.

Final four
a 41.1%
marquee 26.1%
div 19.6%
script 13.2%

Final 4 exits


It all came down to a choice, emblamatic of the times we live in.

In one corner, the a tag. The H in HTML and HTTP, the basis of web 1.0, the thing that makes the web a web. A semantic tag of unmatched simplicity, purity and power, it says "the words in this tag are related to this URL". That relationship is the web.

In the other corner, marquee, a useless remnant of the browser wars of the 90s, propelled to the final round through a combination of nostalgia for a simpler time and simply for the lulz.

Would reality win over memes? It was a very 2021 question.

a 71.3%
marquee 28.7%

The winner


And that was it. After 57 polls, 7 rounds, and over 76,000 votes cast, we had our champion. To my enormous relief, a was our victor. It's just not a web without it.

Thanks to everyone who voted, this competition was enormous fun.