How to build an HTML wireframe

A wireframe settles what is on the page and in what order. Written in HTML it also resizes and clicks, so the structure can be tested rather than imagined.

An HTML wireframe is a page that shows structure and content order with almost no styling, so the review argues about arrangement rather than colour.

Building it in HTML rather than drawing it adds one thing that matters. It reflows, so the phone layout is a fact instead of a promise.

A wireframe page. Grey outlined blocks, one font, labels marking each region.
A wireframe page. Grey outlined blocks, one font, labels marking each region.

Write the content before the boxes

Open a file and write the page as plain HTML with no stylesheet. Headings, paragraphs, lists, buttons, in the order a reader meets them.

Read it top to bottom. If the order does not make sense as a document, no layout will rescue it.

This is also when to get the elements right. A navigation block is <nav>, the main column is <main>, and each region gets a heading. Semantic HTML done here saves rework later.

The grey box stylesheet

Twenty lines, reused across every wireframe you make.

* { box-sizing: border-box; }
body { font: 15px/1.5 system-ui, sans-serif; color: #333; margin: 0; }
[data-box] { outline: 1px solid #bbb; padding: 12px; position: relative; }
[data-box]::before {
  content: attr(data-box);
  position: absolute; top: 0; right: 0;
  font-size: 11px; color: #888; padding: 2px 6px;
}
.ph { background: #e6e6e6; color: #888; display: grid; place-items: center; }

The data-box attribute labels each region in the corner, so a reviewer knows they are looking at the filter bar and not a random rectangle.

.ph is the grey placeholder block for images, charts, and anything not yet designed. Give it an aspect-ratio rather than a fixed height so it scales.

Lay out regions with named grid areas

Named areas make the structure readable in the CSS itself, which matters when someone else opens the file.

.page {
  display: grid; gap: 12px;
  grid-template-columns: 220px 1fr;
  grid-template-areas: "head head" "side main" "foot foot";
}
@media (max-width: 720px) {
  .page { grid-template-columns: 1fr;
          grid-template-areas: "head" "main" "side" "foot"; }
}

Note the phone order. The sidebar moves below the main content, which is a structural decision and exactly the kind of thing a wireframe exists to settle.

CSS grid covers the property in more depth if the area syntax is new.

No lorem ipsum

Placeholder Latin makes every block look comfortable, and then real content arrives and nothing fits.

  • Headings. Write the longest realistic one, not a three-word stand-in.
  • Buttons. Use the actual label, including the long translated version if the product is localised.
  • Lists. Include one item that wraps to two lines.
  • Numbers. Use the widest plausible value, negative if that can happen.
  • Empty states. Show at least one, with the text that will appear.

You are not designing the copy. You are checking that the structure survives it.

Wireframe or mockup

Wireframe Mockup
Question it answers What is on the page, in what order Does it look and read right
Styling Grey boxes, one font Close to final
Colour None, except one accent Brand colours
Content Approximate real text Realistic sample data
Build time An hour or two A day or more
Feedback you get Structure and priority Everything

Show a styled screen and the feedback is about the shade of blue. That is the practical reason to keep the wireframe grey. The HTML mockup is the next step, once the structure is agreed.

Keep it navigable

A wireframe of six screens is easier to review than six files.

Link them with ordinary anchors, and put a small fixed index in a corner listing every screen. For a long single-page wireframe, an inline table of contents does the same job.

Number the screens in their titles. "3 of 6, Filter results" is what a reviewer writes in their comment, so make that string easy to copy.

The same wireframe in a narrow window. Regions have stacked and the sidebar has moved below main.
The same wireframe in a narrow window. Regions have stacked and the sidebar has moved below main.

Where the accent colour is allowed

One colour, used for one purpose. That purpose is marking the primary action on each screen.

Everything else stays grey. The moment a second colour appears, reviewers start reading meaning into the palette and the conversation drifts away from structure.

The same restraint applies to typography. One family, two or three sizes, and weight used only to separate headings from body. A wireframe with five type sizes is a mockup in disguise.

Icons are the other temptation. Use a labelled grey square where an icon will go, because arguing about which glyph means export is a later conversation.

Wireframe rounds are short and the feedback window is shorter. A file that has to be downloaded loses reviewers.

  1. Open the file in the HTML file opener to confirm it renders outside your folder.
  2. Paste the HTML into a NOS document.
  3. Share, then Share link, then Create link. Leave it unlisted.
  4. Send the link with the specific structural question you want answered.
The share dialog with the link created and Public on the web unticked.
The share dialog with the link created and Public on the web unticked.

Between rounds, edit the same document. The address does not change, so round three is on the link you already sent, and nobody is reviewing version one by mistake.

Put the date and round number in the draft banner so a forwarded link is never ambiguous.

A region label being changed by clicking the text in the document.
A region label being changed by clicking the text in the document.

Before you send it

  • Does the page read sensibly as plain HTML with the stylesheet removed?
  • Is every region labelled so reviewers can name it?
  • Does the phone order put the right things first?
  • Is the content approximately real rather than Latin?
  • Is there a round number and date on the page?
  • Is the link unlisted, since this is an internal draft?

Questions people ask

What is an HTML wireframe?

A page built in HTML that shows structure, hierarchy, and content order with no visual design. Blocks are grey, text is a single font, and nothing is branded. The point is to make the conversation about arrangement rather than appearance.

Why build a wireframe in HTML instead of drawing it?

Because it reflows. A drawn wireframe is one fixed width, and the question of what happens on a phone stays theoretical. An HTML wireframe answers it by being resized, and reviewers can open it on their own devices.

Should a wireframe use lorem ipsum?

Avoid it. Placeholder Latin hides the fact that your heading needs nine words and the label does not fit. Use approximate real content, including the longest realistic version of every label.

How do I share a wireframe for comment?

Paste the HTML into a NOS document and send the share link. Reviewers open it on any device in one click, and you revise at the same address between rounds rather than sending numbered files.

Keep reading