Skip to main content
HTML MCQ Test

HTML MCQ test &
quiz online.

HTML is the document layer of the web. Getting it right is most of accessibility and a surprising amount of SEO. 574 HTML questions are live, each with the code on the page. Read any of them free; sign in to attempt one and see the explanation.

574
HTML questions
124
Easy
225
Medium
225
Hard
why this works

Built for HTML mastery, not memorisation.

Every question is hand-checked, every answer comes with an explanation, and your progress builds into a clear picture of where you stand.

The snippet is on the page

Every HTML question shows its code before you answer, so you are reading real HTML, not a description of it.

A written explanation, always

Once you attempt a question you get the reasoning, not just a tick. That matters most on HTML, where semantic element choice, form and label association, the accessibility tree, parser quirks around nesting, and how script loading attributes change execution order.

Your weak topics, named

Progress is tracked per topic across the 46 HTML topics, so revision points at the gaps instead of the whole list.

what's covered

Every HTML concept,
tested honestly.

From fundamentals to interview-grade edge cases across 24 topic areas with progressive difficulty, so you find your gaps before an interviewer does.

content models
validation attrs required pattern
advanced inputs date range color
rel values usage
accessible tables scope caption
video audio tracks
datalist output
picture srcset
slotted part exportparts
iframe sandbox
links a href
ARIA basics
async defer parsing internals
dialog element
paragraphs
accessible-name algorithm
fieldset legend
meta viewport charset
loading lazy decoding
declarative shadow DOM
entities and encoding
microdata data attributes
custom-element lifecycle
parsing and tokenization states

Ready to test your HTML chops?

Read any question and its code for free. A free account unlocks answering, the explanations and your score, so you walk away with a clearer picture of what to study next.

faq

Things people ask.

How many HTML MCQs are on Journey Uncommon?

574 HTML questions right now: 124 easy, 225 medium and 225 hard. That number is read straight from the question table when this page is built, so it is never a rounded marketing figure.

Do I need an account to read the HTML questions?

No. Every HTML question, including its code snippet, its difficulty and its topic, is readable without signing in. You need a free account only to submit an answer, see which option is correct, and read the worked explanation. We keep it that way so the platform stays honest about what you actually got right.

What do HTML interviewers actually test?

Semantic element choice, form and label association, the accessibility tree, parser quirks around nesting, and how script loading attributes change execution order.

Which HTML topics are covered?

46 distinct topics are tagged on the HTML questions, including content models, validation attrs required pattern, advanced inputs date range color, rel values usage, accessible tables scope caption, video audio tracks. The topic labels come from the questions themselves, so the list matches what you will actually be asked.

Is HTML practice free?

Yes. Reading is free and unlimited. A free account unlocks answering, explanations and progress tracking. Pro (₹199 per month) adds AI explanations and AI-graded guesstimates on top; it is not needed to practise HTML MCQs.

Where is HTML used in real jobs?

Every frontend role, plus email, content and accessibility-focused engineering work.

What a HTML question here actually looks like

These are 12 of the 574 HTML questions in the library, pulled live from the question table. The snippet, the difficulty and the topic are all here. The answer options and the explanation are not. Those need a free account.

Semantic element choice, form and label association, the accessibility tree, parser quirks around nesting, and how script loading attributes change execution order.

Sample HTML MCQs

hardobservedAttributes

A custom element's class declares `observedAttributes` as a `static` class field initialized from a helper that reads from a config object. The element is defined, then the config object is mutated and a NEW subclass is defined that inherits (does not redeclare) `observedAttributes`. How does the engine resolve `observedAttributes` for the subclass, and what does this reveal about where the list lives?

const cfg = { attrs: ['a'] };
class Base extends HTMLElement {
  static get observedAttributes(){ return cfg.attrs; }
  attributeChangedCallback(n){ console.log('base', n); }
}
customElements.define('x-base', Base);
cfg.attrs = ['a', 'b'];
class Sub extends Base {} // no own observedAttributes
customElements.define('x-sub', Sub);
Read the full question →
Sign in to answer

Everything above is free to read. Answering needs a free account.

We keep the correct answer, the explanation and the scoring behind sign-in so the platform stays honest, which is why the correct option and the worked explanation for every HTML question stay behind a free account. Signing in is free and takes a few seconds.

Where HTML shows up

Every frontend role, plus email, content and accessibility-focused engineering work.