An intro to HTML

HTML stands for HyperText Markup Language

HTML is the standard markup language/format for creating web pages, containing the content and structure of a page as a series of tags/elements.

In our ongoing analogy, HTML is the skeleton of the web. At its most basic it is a text file, in a folder on a computer, with a .html extension.

As we heard in our first class, this format was codified by our pal Tim Berners-Lee in 1991, evolving from his earlier SGML, a similar/proto language. There have been five major revisions to the spec since then, which added (and sometimes deprecated, or removed) tags and syntax:

The basic document

HTML consists of a range of elements, nested inside one another, like a matryoshka doll of text.

The <html> element contains all elements of the page. In the above here, the <head> element contains the <title>, and the <body> contains the <h1> and <p> elements.

We call these semantic elements‚ÄĒwhich is saying that they give their contents a¬†meaning or a¬†role. (Remember Tim‚Äôs diagram.) These roles are then interpreted by your browser (Chrome, Safari, Firefox, etc.) when it loads the file, to¬†ultimately display the page. We call this parsing the¬†document.

The Semantic Web is not a separate Web but an extension of the current one, in which information is given well-defined meaning, better enabling computers and people to work in cooperation.

Tim Berners-Lee

<!doctype html>
		<title>Page title</title>
		<h1>This is a heading</h1>
		<p>This is a paragraph.</p>
		<p>This is another paragraph.</p>

In our example, here is what we’ve told the computer:

  • <!doctype html>
    What type/version of HTML this file contains, so it knows how to parse it.

    • <html>
      The root element of an HTML page, containing all the content.

    • <head>
      The meta information about the HTML page‚ÄĒlike its title, default language, and¬†any scripts and¬†stylesheets it needs to¬†display the page.

      Nothing in this element is visible on the page itself.

      • <title>
        Specifies a¬†title for the page‚ÄĒwhich is shown in¬†the browser‚Äôs tab, and¬†when it is shared.
    • <body>
      Defines the document‚Äôs body‚ÄĒthe container for¬†all the visible contents, such as¬†headings, paragraphs, images, hyperlinks, tables, lists, etc.

      • <h1>
        Defines a primary/first-level heading.

      • <p>
        Defines a paragraph.

We use semantic elements to¬†help structure and¬†describe our content‚ÄĒbut also for accessibility (screen readers)‚ÄĒwhere the tag type helps indicate what things are.

What are elements?

Elements are composed of tags (opening, closing) and their content:

Some elements do not have any content or children, like <br> or <img>. These are called empty elements, and do not have a closing tag.

Common elements:

There are many, many HTML elements, all with particular uses. (We’ll unpack some more, later.)


All HTML elements can have attributes, which provide more information about the element:

Common attributes

Case, white space, tabs, line breaks

Generally speaking, HTML doesn’t care about capitalization, extra white space, or line breaks (one exception, below).

The browser will just read everything from left to right, as if it is one long, running sentence. So the shouty <HTML> and quieter <html> are interpreted the same.

The browser parses both of these in the exact same way:

	<h1>Dog Breeds</h1>
	<p>There are many kind of dog breeds</p>
		<li>German Shepherd</li>
<body><h1>Dog Breeds</h1><p>There are many k
ind of dog breeds</p><ul><li>German Shepherd

But obviously, the left one is much more readable to us humans. We can use white space, tabs/indenting, and line breaks to make it easier for us to read the code.

There are a¬†lot of¬†common patterns used‚ÄĒlike indenting to¬†indicate hierarchy/nesting. But there are also no wrong ways to¬†do it! In¬†HTML, spaces are code ergonomics for you‚ÄĒjust like a¬†good chair or desk, that allow you to¬†work more comfortably.

Code is read more often than it is written. Code should always be written in a way that promotes readability.

Guido van Rossum

Block elements

Block-level elements always start on a¬†new line, and¬†take up the full width available‚ÄĒstretching out to¬†the left and¬†right of¬†their parent/container.

They stack on top of each other. Importantly, block elements can have a top and bottom margin, unlike inline elements:





These are live examples!

Inline elements

Inline elements do not start on a new line, and only take up as much width as necessary.

I like to think of these as the little metal slugs from printing. Other text and inline elements will continue to flow around them, and they can wrap to new lines:

<abbr> <em> <strong> <span> <a> <img> <time> <cite>

Inline elements are the exception to the ‚Äúwhite space is¬†generally ignored‚ÄĚ rule: extra space between inline elements will always be reduced‚ÄĒcollapsed‚ÄĒto one space. So this:


Displays as Hello World, not  HelloWorld.

So many elements


You can comment part of¬†the code and¬†the browser won‚Äôt show it. Comments are often used to¬†explain your thinking, organize your code, ‚Äúturn off‚ÄĚ a¬†bit of¬†code, or¬†hide whatever you‚Äôd like.

Keep in mind these are still readable in the source.

We highly recommend getting into a habit of commenting your code, especially when starting out!

If you figure something tricky out, write down why and how you solved it to help you understand and remember. And you’ll often come back to things. Commenting your code is a gift to your future self!


Any time you have more than two of¬†something, you¬†probably have a¬†list. These are commonly used for¬†semantic navigation elements, as well‚ÄĒthink ‚Äúhere‚Äôs¬†a¬†list of¬†links in¬†this site‚ÄĚ:

Description lists

There are specific lists for defining things:

These aren’t much to look at without CSS, though. Soon!


There is even some basic interactivity (way, way ahead of JavaScript) with details disclosure elements that open and close:

You can do a lot with these, without any JavaScript!


Tables can we used to display tabular data:

This syntax is pretty verbose, for what you get.

They used to be the only way to achieve multi-column or grid layouts, but that has luckily since been replaced by modern CSS techniques like floats, flexbox, and grid. We’ll talk about those later!

Again, there are many, many, many, many HTML elements. Try and find the one that best fits your usage, wherever possible using a semantic element that fits your content.

User-agent styles

We haven‚Äôt applied any styles/CSS here yet, so everything we see in¬†these examples is based on the user-agent stylesheets‚ÄĒthat is, each browser‚Äôs own default display (and behavior) for an¬†element type.

This is what the web was, before CSS! But as a designer, rarely what you want. We’ll get into writing our own styles in the coming weeks.

3.2. Priority of Constituencies

In case of conflict, consider users over authors over implementors over specifiers over theoretical purity. In other words costs or difficulties to the user should be given more weight than costs to authors; which in turn should be given more weight than costs to implementors; which should be given more weight than costs to authors of the spec itself, which should be given more weight than those proposing changes for theoretical reasons alone. Of course, it is preferred to make things better for multiple constituencies at once.

W3C, HTML Design Principles