What is HTML and How the Web Works
The Restaurant Menu Analogy
Imagine walking into a restaurant. The menu tells you what's available, how dishes are organized into
appetizers and mains, and what each item contains. HTML works the same way for web browsers it's a
structured menu that tells the browser what content exists on a page and how it should be organized.
When you visit a website, you're actually looking at an HTML document that your browser has read and
displayed. Just like a waiter interprets a menu to serve you food, your browser interprets HTML to show
you text, images, buttons, and links.
Understanding the Web's Foundation
Before we dive into HTML itself, let's understand the basic journey that happens every time you visit a
website.
The Request-Response Dance
When you type "www.example.com" into your browser and hit enter, here's what actually happens:
Step 1: Your computer asks for directions
Your browser doesn't inherently know where "example.com" lives on the internet. It asks a special type of
server called a DNS (Domain Name System) server to translate that friendly name into an IP address a
numeric label like 192.168.1.1 that computers use to find each other.
Think of DNS as the internet's phone book. You know your friend as "Sarah," but to call her, you need her
phone number.
Step 2: Your browser makes a request
Armed with the IP address, your browser sends an HTTP request to the server at that address. This request
essentially says, "Hi, I'm a browser, and I'd like the homepage for example.com, please."
Step 3: The server responds
The web server receives your request, finds the appropriate HTML file, and sends it back to your browser
along with any associated files (images, stylesheets, JavaScript).
Step 4: Your browser renders the page
Your browser receives the HTML file and reads it line by line, constructing what you see on your screen.
This process is called "rendering."
The entire process typically takes milliseconds.
What Exactly is HTML?
HTML stands for HyperText Markup Language. Let's break that down:
HyperText refers to text that contains links to other text. When you click a link on one
webpage and jump to another, you're using hypertext. This ability to connect documents was revolutionary
when the web was invented.
Markup means you're "marking up" content with special codes that give it structure and
meaning. You're not programming or giving instructions; you're annotating.
Language indicates that HTML has a specific syntax and vocabulary that browsers
understand.
HTML is not a programming language it doesn't do calculations or make decisions. It's a markup language
that describes content structure.
The Anatomy of HTML
HTML uses "tags" to mark up content. Tags are like labels that tell the browser "this is a heading" or
"this is a paragraph" or "this is an image."
The Basic Building Block: Elements
Here's a simple example:
<p>This is a paragraph of text.</p>
This structure has three parts:
- Opening tag:
<p> tells the browser "a paragraph is starting"
- Content: "This is a paragraph of text." is what the user sees
- Closing tag:
</p> tells the browser "the paragraph is ending"
Together, these three parts create an element.
A Complete HTML Document
Every proper HTML page follows this basic structure:
<!DOCTYPE html>
<html>
<head>
<title>My First Webpage</title>
</head>
<body>
<h1>Welcome to My Website</h1>
<p>This is my first paragraph.</p>
</body>
</html>
Let's examine each part:
The DOCTYPE declaration (<!DOCTYPE html>) tells the browser "This is
an HTML5 document." It's like a label on a food package that says what's inside.
The html element wraps everything. It's the container for your entire webpage.
The head element contains information about the page that doesn't display on the screen
itself metadata. The title you put here appears in the browser tab.
The body element contains everything visible on your webpage all the text, images,
videos, and interactive elements users will see.
Common HTML Elements You'll Use
Headings: Organizing Content Hierarchy
HTML offers six levels of headings, from H1 (most important) to H6 (least important):
<h1>Main Page Title</h1>
<h2>Section Heading</h2>
<h3>Subsection Heading</h3>
Think of headings like an outline for an essay. Your H1 is the title, H2s are major sections, and H3s are
subsections within those sections. This hierarchy helps both users and search engines understand your
content structure.
Paragraphs and Text Formatting
Paragraphs are the workhorses of web content:
<p>A paragraph automatically adds spacing before and after itself.</p>
You can emphasize text in different ways:
<strong>This text is important</strong> (displays as bold)
<em>This text is emphasized</em> (displays as italic)
Links: The Web's Superpower
Links are what make the web "web like" they connect pages together:
<a href="https://www.example.com">Click here to visit Example</a>
The href attribute specifies where the link goes. The text between the tags is what users
click on.
Images: Adding Visual Content
Images require a slightly different approach because they're self closing (no closing tag needed):
<img src="photo.jpg" alt="A description of the photo">
The src attribute points to the image file. The alt attribute provides text
that appears if the image can't load and helps screen readers describe images to visually impaired
users.
Lists: Organizing Information
Unordered lists (bullet points):
<ul>
<li>First item</li>
<li>Second item</li>
<li>Third item</li>
</ul>
Ordered lists (numbered):
<ol>
<li>Step one</li>
<li>Step two</li>
<li>Step three</li>
</ol>
How Browsers Read HTML
When your browser receives an HTML file, it reads it from top to bottom, building what's called a
DOM (Document Object Model) essentially a tree structure representing your page.
Imagine building with blocks. The browser starts with the foundation (the html element), then builds
walls (head and body), then adds furniture (headings, paragraphs, images). Each element knows its parent
and children, creating a family tree of content.
This tree structure is why we call HTML elements "parents" and "children." In our earlier example, the
body element is the parent of both the h1 and p elements, which
are siblings to each other.
The Three Pillars of Web Development
HTML doesn't work alone. Modern websites rely on three technologies working together:
HTML provides structure the bones of your webpage. It defines what content exists.
CSS (Cascading Style Sheets) provides styling the skin and clothes. It defines how
content looks (colors, fonts, layout).
JavaScript provides behavior the muscles and brain. It defines how content responds to
user interaction.
Think of building a house: HTML is the frame and walls, CSS is the paint and decorations, and JavaScript
is the electricity and plumbing that makes things work.
Common Mistakes Beginners Make
Forgetting Closing Tags
One of the most frequent errors is opening a tag but never closing it:
<!-- Wrong -->
<p>This paragraph never closes
<p>So this paragraph gets confused</p>
<!-- Right -->
<p>This paragraph closes properly.</p>
<p>So this one displays correctly.</p>
Nesting Elements Incorrectly
Tags must close in the opposite order they were opened:
<!-- Wrong -->
<p>This is <strong>bold text</p></strong>
<!-- Right -->
<p>This is <strong>bold text</strong></p>
Think of it like Russian nesting dolls each must fit completely inside the one before it.
Using Inline Styles Instead of CSS
Beginners often style elements directly in HTML:
<!-- Works but not recommended -->
<p style="color: blue; font-size: 20px;">Blue text</p>
This becomes unmanageable with larger sites. It's better to keep styling in separate CSS files.
Overusing Divs
The <div> element is a generic container, but HTML5 introduced semantic elements that
better describe content:
<!-- Less clear -->
<div class="header">
<div class="navigation">...</div>
</div>
<!-- More clear -->
<header>
<nav>...</nav>
</header>
Semantic elements like header, nav, article, and
footer make your code more readable and accessible.
Best Practices for Writing HTML
Use Semantic Elements
Choose elements based on meaning, not appearance. Use <strong> because text is
important, not just because you want bold text.
Indent Your Code
Proper indentation makes HTML readable:
<body>
<header>
<h1>Page Title</h1>
<nav>
<ul>
<li>Home</li>
<li>About</li>
</ul>
</nav>
</header>
</body>
Each nested level gets indented one level further.
Always Include Alt Text for Images
This helps visually impaired users and provides fallback text if images fail to load:
<img src="sunset.jpg" alt="Orange sunset over calm ocean waters">
Validate Your HTML
Use the W3C Markup Validation Service to catch errors. Valid HTML renders more consistently across
different browsers.
Keep It Simple
Don't overcomplicate structure. Use the simplest HTML that achieves your goal.
The Evolution of HTML
HTML has evolved significantly since Tim Berners-Lee created it in 1991. The current version, HTML5,
introduced elements specifically for modern web needs:
<video> and <audio> for multimedia
<canvas> for drawing graphics
<article>, <section>, and <aside> for
better document structure
- Form improvements for better user input
Each version maintained backward compatibility, meaning old HTML still works in modern browsers a
testament to the web's design philosophy of resilience.
What Happens When HTML Goes Wrong
Browsers are remarkably forgiving. If you write broken HTML, browsers will try their best to display
something rather than showing an error. This is both helpful and dangerous your page might look fine
while actually containing significant structural errors that affect accessibility, search engine
optimization, or functionality.
For example, if you forget to close a <div>, the browser will guess where it should
close and continue rendering. But the page might not look or behave as you intended.
Moving Forward
HTML is your entry point to web development. Master these fundamentals before rushing into frameworks or
advanced techniques. Every modern web application, no matter how complex, still relies on HTML to
structure its content.
The beauty of HTML is its accessibility you can view the source code of any webpage (right click and
select "View Page Source" in most browsers) to see exactly how it's built. The web is your textbook.
Start simple. Create a basic page with headings, paragraphs, and links. Experiment with different
elements. Break things and fix them. The best way to learn HTML is to write it, view it in a browser,
adjust it, and repeat. The web is built one HTML element at a time.
Basic HTML Document Structure: Building Your First Webpage
Now that you understand what HTML is and how browsers work, let's build a proper HTML document from scratch.
Think of this as learning the blueprint before constructing your first building.
The DOCTYPE Declaration: Setting the Stage
Every HTML document should start with a DOCTYPE declaration:
<!DOCTYPE html>
This single line might seem insignificant, but it's crucial. It tells the browser, "Hey, I'm written in
HTML5, so render me using modern standards." Without it, browsers might enter "quirks mode" and display your
page inconsistently.
Think of DOCTYPE as showing your ID at a club entrance. It confirms you belong there and should be treated
according to current rules, not outdated ones from the 1990s.
The Root Element: The HTML Tag
Immediately after the DOCTYPE comes the <html> tag, which wraps your entire document:
<!DOCTYPE html>
<html lang="en">
<!-- Everything else goes here -->
</html>
Notice the lang="en" attribute. This tells browsers and screen readers that your content is in
English. If you're writing in Spanish, you'd use lang="es". This seemingly small detail helps:
- Screen readers pronounce words correctly
- Search engines understand your content's language
- Browser translation tools work more accurately
The Head Section: Behind-the-Scenes Information
The <head> section contains metadata information about your page that doesn't appear in
the visible content area. It's like the engine of a car: you don't see it while driving, but it's essential
for everything to work.
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta name="description" content="Learn HTML basics for beginners">
<title>My First Webpage</title>
</head>
Understanding Meta Tags
Character Encoding (charset)
The <meta charset="UTF-8"> tag tells the browser which character set to use. UTF-8
supports virtually every character from every language, including emojis. Without this, special characters
like é, ñ, or 中 might display as gibberish.
Viewport Meta Tag
The viewport meta tag is essential for responsive design:
<meta name="viewport" content="width=device-width, initial-scale=1.0">
This tells mobile browsers, "Display this page at the device's actual width, don't try to zoom out to show a
desktop version." Before this became standard, mobile browsers would show tiny versions of desktop sites
that required pinching and zooming.
Breaking it down:
width=device-width - Make the page width match the screen width
initial-scale=1.0 - Don't zoom in or out when the page first loads
Description Meta Tag
The description meta tag appears in search engine results:
<meta name="description" content="Learn HTML basics for beginners">
This is your elevator pitch to potential visitors. Make it descriptive and compelling it's often the first
thing people read about your page in Google search results. Keep it under 160 characters for best display.
The Title Element: Your Page's Name
The title appears in the browser tab and is the clickable headline in search results:
<title>HTML Basics Tutorial - TechTrenches</title>
A good title is:
- Descriptive and specific (not just "Home" or "Page 1")
- Under 60 characters so it doesn't get cut off in search results
- Unique for each page on your site
- Front-loaded with important keywords
The Body Section: Your Visible Content
Everything users see on your webpage goes inside the <body> tag:
<body>
<h1>Welcome to My Website</h1>
<p>This is where all your visible content lives.</p>
</body>
The body is your canvas. Every paragraph, image, video, button, and link that users interact with belongs
here.
A Complete Basic Structure
Here's a minimal but complete HTML document that follows best practices:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta name="description" content="A beginner-friendly introduction to HTML">
<title>HTML Basics Tutorial - TechTrenches</title>
</head>
<body>
<h1>My First Webpage</h1>
<p>Welcome to my journey learning HTML!</p>
</body>
</html>
This might look simple, but it contains everything a browser needs to properly display a webpage. Every
complex website you've ever visited Amazon, YouTube, Facebook starts with this same foundation.
Adding Comments to Your Code
Comments let you leave notes in your code that browsers ignore. They're essential for documenting your work:
<!-- This is a comment. Browsers won't display it. -->
<!--
You can write multi line comments too.
They're great for leaving yourself notes
or temporarily disabling code.
-->
Use comments to:
- Explain why you did something a certain way
- Mark different sections of your page
- Temporarily hide code without deleting it
- Leave reminders for yourself or teammates
Linking External Resources
Real websites need CSS for styling and JavaScript for interactivity. You link these in the head section:
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>My Website</title>
<!-- Link to external CSS file -->
<link rel="stylesheet" href="styles.css">
<!-- Link to external JavaScript file -->
<script src="script.js" defer></script>
</head>
The defer attribute in the script tag tells the browser to download the JavaScript file while
parsing HTML, but only execute it after the HTML is fully loaded. This prevents JavaScript from blocking
your page from displaying.
Common Structural Mistakes
Missing DOCTYPE
Without <!DOCTYPE html>, browsers guess how to render your page, leading to inconsistent
results across different browsers. Always include it.
Content Outside Body Tags
<!-- Wrong -->
<html>
<head><title>My Site</title></head>
</html>
<p>This paragraph is outside the body tag!</p>
<!-- Right -->
<html>
<head><title>My Site</title></head>
<body>
<p>This paragraph is properly inside the body tag.</p>
</body>
</html>
Multiple Head or Body Sections
Each HTML document should have exactly one <head> and one <body>. Don't
create multiple sections:
<!-- Wrong - Multiple body tags -->
<body>
<p>First section</p>
</body>
<body>
<p>Second section</p>
</body>
<!-- Right - One body tag with multiple sections -->
<body>
<section>
<p>First section</p>
</section>
<section>
<p>Second section</p>
</section>
</body>
Forgetting the Closing HTML Tag
While browsers are forgiving, always close your <html> tag. It signals the document is
complete.
Best Practices for Document Structure
Always Use Lowercase for Tags
While HTML isn't case-sensitive, lowercase is the web standard:
<!-- Avoid -->
<HTML>
<HEAD><TITLE>My Page</TITLE></HEAD>
</HTML>
<!-- Prefer -->
<html>
<head><title>My Page</title></head>
</html>
Include All Essential Meta Tags
At minimum, every page should have:
- Character encoding (
<meta charset="UTF-8">)
- Viewport settings for mobile (
<meta name="viewport"...>)
- A descriptive title
- A meta description for SEO
Use Semantic Structure
HTML5 provides semantic elements that describe their content. Use these instead of generic divs:
<body>
<header>
<h1>Site Name</h1>
<nav>
<!-- Navigation links -->
</nav>
</header>
<main>
<article>
<h2>Article Title</h2>
<p>Article content...</p>
</article>
</main>
<footer>
<p>Copyright information</p>
</footer>
</body>
This structure is more meaningful than:
<body>
<div class="header">
<div class="title">Site Name</div>
<div class="nav">...</div>
</div>
<div class="content">...</div>
<div class="footer">...</div>
</body>
Keep Your Head Section Organized
Group related meta tags and links logically:
<head>
<!-- Character set and viewport -->
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<!-- SEO meta tags -->
<meta name="description" content="Page description">
<meta name="keywords" content="html, tutorial, beginner">
<!-- Page title -->
<title>My Page Title</title>
<!-- Stylesheets -->
<link rel="stylesheet" href="styles.css">
<!-- Scripts -->
<script src="script.js" defer></script>
</head>
The Favicon: Your Site's Icon
That little icon that appears in browser tabs is called a favicon. Add it in the head section:
<head>
<link rel="icon" type="image/png" href="favicon.png">
</head>
Without a favicon, browsers display a generic icon. A custom favicon makes your site look more professional
and helps users identify your tab among many open tabs.
Building a Real World Document Structure
Here's what a complete, production-ready HTML document looks like:
<!DOCTYPE html>
<html lang="en">
<head>
<!-- Essential meta tags -->
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<!-- SEO -->
<meta name="description" content="Learn web development from scratch with TechTrenches tutorials">
<meta name="author" content="TechTrenches">
<!-- Page title -->
<title>HTML Document Structure - TechTrenches</title>
<!-- Favicon -->
<link rel="icon" type="image/png" href="favicon.png">
<!-- Stylesheet -->
<link rel="stylesheet" href="styles.css">
</head>
<body>
<!-- Page header -->
<header>
<h1>TechTrenches</h1>
<nav>
<ul>
<li><a href="index.html">Home</a></li>
<li><a href="tutorials.html">Tutorials</a></li>
<li><a href="about.html">About</a></li>
</ul>
</nav>
</header>
<!-- Main content -->
<main>
<article>
<h2>Understanding HTML Document Structure</h2>
<p>Every webpage starts with a solid foundation...</p>
</article>
</main>
<!-- Page footer -->
<footer>
<p>© 2026 TechTrenches. All rights reserved.</p>
</footer>
<!-- Scripts loaded at the end for better performance -->
<script src="script.js"></script>
</body>
</html>
Why Structure Matters
Proper document structure isn't just about making browsers happy. It affects:
Search Engine Optimization (SEO)
Search engines use your structure to understand your content. A well structured page with proper meta tags,
semantic elements, and clear hierarchy ranks better than a chaotic mess of divs.
Accessibility
Screen readers rely on proper structure to navigate pages. When you use <header>,
<nav>, and <main> instead of generic divs, you help visually impaired
users understand and navigate your content.
Maintenance
Six months from now, when you need to update your site, clear structure helps you quickly find and modify the
right sections. It's the difference between a well organized closet and one where everything is thrown in a
pile.
Performance
Browsers can render properly structured HTML more efficiently. Placing scripts at the bottom or using
defer prevents JavaScript from blocking your page from displaying.
Your Document Structure Checklist
Before publishing any HTML page, verify:
- DOCTYPE declaration at the very top
- HTML tag with lang attribute
- Head section with charset, viewport, title, and description
- Single body tag containing all visible content
- Semantic elements (header, nav, main, footer) instead of divs
- Proper heading hierarchy (H1, then H2, then H3—no skipping levels)
- All tags properly closed and nested
- Comments explaining complex sections
Master this foundation, and you're ready to build anything on the web. Every website, no matter how
sophisticated, follows these same structural principles. The difference between a beginner's page and a
professional site isn't in the structure it's in how that structure is filled with content and styled with
CSS.
HTML Text Formatting: Making Content Readable
Now that you have a solid document structure, let's explore how to format text properly. HTML provides
numerous elements for marking up text, each with a specific purpose beyond just changing appearance.
Paragraphs: The Foundation of Content
Paragraphs are the most common text element you'll use:
<p>This is a paragraph. Browsers automatically add space before and after paragraphs, making your content more readable.</p>
<p>This is another paragraph. Even if you write multiple paragraphs right next to each other in your code, browsers will space them properly.</p>
A common beginner mistake is trying to create line breaks by hitting Enter in your HTML file:
<!-- This WON'T work as expected -->
<p>First line
Second line
Third line</p>
<!-- This will all appear on one line in the browser! -->
HTML collapses multiple spaces and line breaks into a single space. This is called "whitespace collapse." To
create actual line breaks, you have two options:
<!-- Option 1: Use separate paragraphs -->
<p>First line</p>
<p>Second line</p>
<p>Third line</p>
<!-- Option 2: Use line break tags -->
<p>First line<br>
Second line<br>
Third line</p>
The Break Tag: When to Use It
The <br> tag creates a line break without starting a new paragraph. Use it for addresses,
poems, or song lyrics where line breaks are part of the content's meaning:
<address>
123 Main Street<br>
Apartment 4B<br>
New York, NY 10001
</address>
Don't use <br> tags just to add space between elements. That's CSS's job. Using multiple
break tags for spacing is a sign you need to learn CSS layout techniques.
Strong and Emphasis: Meaning Over Appearance
HTML distinguishes between making text look different and giving it meaning:
<p>This is <strong>very important</strong> information.</p>
<p>This point deserves <em>emphasis</em>.</p>
<strong> indicates strong importance—browsers typically render it as bold.
<em> indicates emphasis—browsers typically render it as italic.
There's also <b> and <i> tags that only affect appearance without
adding meaning:
<p>The word <b>bold</b> is styled bold but has no special importance.</p>
<p>The term <i>italic</i> is styled italic but isn't emphasized.</p>
Prefer <strong> and <em> for semantic meaning. Use
<b> and <i> only when you need styling without conveying
importance like product names or technical terms.
Other Useful Text Elements
Small Print
<p><small>This text appears smaller, useful for fine print or disclaimers.</small></p>
Deleted and Inserted Text
<p>The price is <del>$99</del> <ins>$79</ins></p>
The <del> tag shows strikethrough text (content that's been removed), while
<ins> shows underlined text (content that's been added). These are perfect for showing
edits or price changes.
Subscript and Superscript
<p>Water is H<sub>2</sub>O.</p>
<p>E = mc<sup>2</sup></p>
Use <sub> for subscript (chemical formulas) and <sup> for superscript
(mathematical exponents, footnote markers).
Highlighted Text
<p>Search results show your <mark>search term</mark> highlighted.</p>
The <mark> tag highlights text like a yellow marker pen, useful for showing search results
or drawing attention to specific content.
Quotations: Giving Credit
Inline Quotes
<p>As Einstein said, <q>Imagination is more important than knowledge.</q></p>
The <q> tag automatically adds quotation marks around short, inline quotes.
Block Quotes
<blockquote>
<p>The only way to do great work is to love what you do. If you haven't found it yet, keep looking. Don't settle.</p>
<cite>Steve Jobs</cite>
</blockquote>
For longer quotes that should stand alone, use <blockquote>. Browsers typically indent
these. The <cite> tag identifies the source.
Code and Technical Text
When writing about code or technical concepts, HTML provides specialized elements:
<p>Use the <code>console.log()</code> function to print messages.</p>
<p>Press <kbd>Ctrl</kbd> + <kbd>C</kbd> to copy.</p>
<p><var>x</var> = 10</p>
<p>The program output: <samp>Hello, World!</samp></p>
Breaking these down:
<code> - Inline code snippets
<kbd> - Keyboard input
<var> - Variables in mathematical or programming expressions
<samp> - Sample output from a program
For multi-line code blocks, combine <pre> (preformatted text) with
<code>:
<pre><code>function greet(name) {
return "Hello, " + name;
}
</code></pre>
The <pre> tag preserves all spaces and line breaks perfect for code where indentation
matters.
Abbreviations and Definitions
<p>The <abbr title="World Wide Web">WWW</abbr> changed everything.</p>
<p><dfn>HTML</dfn> stands for HyperText Markup Language.</p>
The <abbr> tag marks abbreviations. The title attribute shows the full term
when users hover over it. The <dfn> tag indicates you're defining a term for the first
time.
Common Text Formatting Mistakes
Using Headings for Styling
<!-- Wrong: Using headings just to make text big -->
<h1>Regular paragraph text that's not actually a heading</h1>
<!-- Right: Use headings only for actual headings -->
<h2>Section Title</h2>
<p>Regular paragraph text</p>
Headings create document structure. Don't use them just because you want larger text use CSS for that.
Multiple Spaces for Indentation
<!-- Wrong: HTML collapses multiple spaces -->
<p> This text won't be indented</p>
<!-- Right: Use CSS for indentation -->
<p style="text-indent: 2em;">This text will be indented</p>
Nested Formatting Tags Without Reason
<!-- Avoid unnecessary nesting -->
<p><strong><em><u>Over-formatted text</u></em></strong></p>
<!-- Keep it simple -->
<p><strong>Important text</strong></p>
Best Practices for Text Formatting
Choose Elements by Meaning, Not Appearance
Always ask yourself "What does this text mean?" rather than "How should this text look?"
<!-- Semantic approach -->
<article>
<h2>Article Title</h2>
<p>Introduction with <strong>important points</strong>.</p>
<blockquote>
<p>A relevant quote.</p>
</blockquote>
</article>
Don't Overuse Formatting
Too much emphasis is the same as no emphasis. If everything is bold or italic, nothing stands out.
<!-- Too much -->
<p><strong>Everything</strong> in this <em>paragraph</em> is <strong>formatted</strong> and it's <em>overwhelming</em>!</p>
<!-- Better -->
<p>Most of this paragraph is normal text, with only the <strong>most important point</strong> emphasized.</p>
Maintain Consistency
If you use <strong> for important warnings, use it consistently throughout your site.
Don't switch between <strong> and <b> randomly.
Consider Accessibility
Screen readers announce emphasized and strong text differently from normal text. This helps visually impaired
users understand your content's structure and importance.
Working with Links: Connecting the Web
Links are HTML's defining feature they're what makes the web "web like." Without links, the internet would
just be a collection of isolated documents.
The Basic Link Structure
Every link needs two components: where it goes (the destination) and what users click (the link text):
<a href="https://www.example.com">Click here to visit Example</a>
Breaking this down:
<a> - The anchor tag (that's what "a" stands for)
href - Hypertext reference, the destination URL
- Link text - What users see and click
Types of Links
Absolute URLs
<a href="https://www.google.com">Visit Google</a>
Absolute URLs include the complete address, starting with http:// or https://. Use
these for external links to other websites.
Relative URLs
<!-- Link to a page in the same directory -->
<a href="about.html">About Us</a>
<!-- Link to a page in a subdirectory -->
<a href="blog/first-post.html">First Blog Post</a>
<!-- Link to a page in the parent directory -->
<a href="../index.html">Home</a>
Relative URLs specify paths relative to the current page. They're shorter and work better when you move your
entire site to a different domain.
Email Links
<a href="mailto:contact@example.com">Send us an email</a>
Clicking this opens the user's default email program with the address pre-filled.
Phone Links
<a href="tel:+1234567890">Call us: (123) 456-7890</a>
On mobile devices, this allows users to call directly by tapping the link.
Link Attributes That Control Behavior
Opening Links in New Tabs
<a href="https://www.example.com" target="_blank" rel="noopener noreferrer">
Visit Example (opens in new tab)
</a>
The target="_blank" attribute opens links in a new tab. Always include
rel="noopener noreferrer" for security and performance reasons when using
target="_blank".
Download Links
<a href="document.pdf" download>Download PDF</a>
The download attribute prompts the browser to download the file instead of opening it.
Link Titles
<a href="contact.html" title="Get in touch with our team">Contact</a>
The title attribute shows a tooltip when users hover over the link. Use it sparingly—only when
you need to provide extra information.
Linking to Specific Page Sections
You can link to specific parts of a page using ID attributes:
<!-- Create an anchor point -->
<h2 id="pricing">Pricing Information</h2>
<!-- Link to that section -->
<a href="#pricing">Jump to pricing</a>
<!-- Link to a section on another page -->
<a href="services.html#pricing">See our pricing</a>
When clicked, the browser scrolls to the element with that ID. The # symbol indicates an ID
reference.
Common Link Mistakes
Vague Link Text
<!-- Bad: Doesn't describe the destination -->
<a href="report.pdf">Click here</a> to read our annual report.
<!-- Good: Descriptive and meaningful -->
Read our <a href="report.pdf">2024 annual report</a>.
"Click here" and "read more" are useless to screen reader users who navigate by links alone. Make link text
descriptive and meaningful.
Linking to # Without an ID
<!-- Wrong: Links to nothing -->
<a href="#">Placeholder link</a>
<!-- Right: Use a button instead -->
<button>Do something</button>
Using href="#" creates a link that jumps to the top of the page. If you need a clickable element
that doesn't navigate anywhere, use a button, not a link.
Missing Protocols in Absolute URLs
<!-- Wrong: Browser treats this as a relative URL -->
<a href="www.example.com">Example</a>
<!-- Right: Include the protocol -->
<a href="https://www.example.com">Example</a>
Best Practices for Links
Write Descriptive Link Text
Link text should clearly describe where the link goes or what it does:
<!-- Poor -->
For more information, <a href="guide.html">click here</a>.
<!-- Better -->
Read our <a href="guide.html">complete beginner's guide to HTML</a>.
Indicate External Links
Help users know when they're leaving your site:
<a href="https://external-site.com" target="_blank" rel="noopener noreferrer">
External Resource (opens in new tab)
</a>
Style Visited Links Differently
Let users know which links they've already clicked. This is traditionally done with CSS, but it's important
for usability.
Don't Link to the Current Page
<!-- On about.html page -->
<nav>
<a href="index.html">Home</a>
<a href="services.html">Services</a>
<span>About</span> <!-- Current page, not a link -->
</nav>
Test Your Links
Broken links frustrate users and hurt SEO. Regularly check that all your links work, especially after site
reorganizations.
HTML Images: Adding Visual Content
Images make websites engaging and help communicate ideas that words alone can't express. Unlike text
elements, images require special handling in HTML.
The Image Element Basics
The image tag is self closing it doesn't need a closing tag:
<img src="photo.jpg" alt="A sunset over the ocean">
Two attributes are essential:
src - The source (path to the image file)
alt - Alternative text describing the image
Understanding Image Paths
Same Directory
<!-- Image in the same folder as the HTML file -->
<img src="logo.png" alt="Company logo">
Subdirectory
<!-- Image in an 'images' folder -->
<img src="images/photo.jpg" alt="Team photo">
Parent Directory
<!-- Image in the parent folder -->
<img src="../header.jpg" alt="Page header">
Absolute URL
<!-- Image from another website -->
<img src="https://example.com/image.jpg" alt="External image">
Why Alt Text Matters
The alt attribute serves multiple critical purposes:
Accessibility - Screen readers announce alt text to visually impaired users, describing what
the image shows.
SEO - Search engines can't "see" images but read alt text to understand content.
Fallback - If the image fails to load (slow connection, broken link, or missing file), alt
text displays instead.
<!-- Poor alt text -->
<img src="img001.jpg" alt="image">
<!-- Good alt text -->
<img src="team-meeting.jpg" alt="Five team members collaborating around a whiteboard during a brainstorming session">
Write alt text that describes what the image shows and why it's relevant. If the image is purely decorative,
use an empty alt attribute: alt=""
Controlling Image Size
You can specify image dimensions using width and height attributes:
<img src="photo.jpg" alt="Beach scene" width="800" height="600">
These values are in pixels. Setting dimensions helps browsers reserve the right amount of space before the
image loads, preventing layout shifts that annoy users.
However, CSS is usually better for controlling image size because it offers more flexibility:
<!-- HTML sets natural size -->
<img src="photo.jpg" alt="Beach scene" style="max-width: 100%; height: auto;">
The max-width: 100% ensures images never overflow their container, while
height: auto maintains the aspect ratio.
Image Formats: Choosing the Right Type
JPEG (.jpg, .jpeg) - Best for photographs and images with many colors. Good compression but
can lose quality.
PNG (.png) - Best for graphics with transparent backgrounds, screenshots, or images needing
crisp edges. Larger file sizes but no quality loss.
GIF (.gif) - Best for simple animations. Limited to 256 colors, so not ideal for
photographs.
WebP (.webp) - Modern format offering better compression than JPEG and PNG. Not supported in
very old browsers.
SVG (.svg) - Vector format that scales infinitely without losing quality. Perfect for logos
and icons.
Responsive Images
Modern websites need to serve different image sizes to different devices. A 4000px-wide image wastes
bandwidth on a mobile phone.
<img
src="small.jpg"
srcset="small.jpg 400w, medium.jpg 800w, large.jpg 1200w"
sizes="(max-width: 600px) 400px, (max-width: 1000px) 800px, 1200px"
alt="Responsive image">
This tells browsers: "I have three versions of this image at different widths. Pick the most appropriate one
based on the device's screen size."
Figure and Figcaption
When you need to add a caption to an image, use semantic HTML:
<figure>
<img src="chart.jpg" alt="Bar chart showing quarterly sales growth">
<figcaption>Figure 1: Sales increased 35% in Q4 2024</figcaption>
</figure>
The <figure> element groups the image with its caption, creating a semantic relationship
that helps screen readers understand they belong together.
Common Image Mistakes
Missing Alt Text
<!-- Wrong: No alt attribute -->
<img src="product.jpg">
<!-- Right: Always include alt -->
<img src="product.jpg" alt="Blue wireless headphones with carrying case">
Using Images for Text
<!-- Avoid: Text in images isn't searchable or accessible -->
<img src="heading.jpg" alt="Welcome to Our Site">
<!-- Better: Use actual HTML text -->
<h1>Welcome to Our Site</h1>
Text in images can't be copied, searched, or resized. It also looks blurry on high resolution screens. Use
real HTML text styled with CSS instead.
Huge Unoptimized Images
A 5MB image that takes 10 seconds to load on mobile will drive users away. Optimize images before uploading:
- Resize images to the actual display size
- Compress files to reduce size without visible quality loss
- Use appropriate formats (JPEG for photos, PNG for graphics)
Best Practices for Images
Optimize File Names
<!-- Poor filename -->
<img src="IMG_20240315_142536.jpg" alt="Product photo">
<!-- Better filename -->
<img src="blue-wireless-headphones.jpg" alt="Blue wireless headphones with carrying case">
Descriptive filenames help with organization and SEO. Use lowercase, separate words with hyphens, and make
names meaningful.
Provide Dimensions
Including width and height attributes prevents content jumping around as images load:
<img src="photo.jpg" alt="Beach" width="800" height="600">
Use Lazy Loading
For images below the fold (not visible when page first loads), add lazy loading:
<img src="photo.jpg" alt="Beach scene" loading="lazy">
This delays loading images until users scroll near them, speeding up initial page load.
Consider Context in Alt Text
Alt text should match how the image is used:
<!-- In a product listing -->
<img src="headphones.jpg" alt="Blue wireless headphones, Model X200">
<!-- Same image in an article about ergonomics -->
<img src="headphones.jpg" alt="Ergonomic over-ear headphones with padded cushions">
HTML Lists: Organizing Information
Lists help organize related items in a scannable format. HTML offers three types of lists, each serving
different purposes.
Unordered Lists: When Order Doesn't Matter
Use unordered lists for items where sequence is irrelevant:
<ul>
<li>HTML</li>
<li>CSS</li>
<li>JavaScript</li>
</ul>
Browsers display these with bullet points by default. Common uses include:
- Navigation menus
- Feature lists
- Shopping lists
- Tag collections
Ordered Lists: When Sequence Matters
Use ordered lists for sequential items:
<ol>
<li>Preheat oven to 350°F</li>
<li>Mix dry ingredients</li>
<li>Add wet ingredients</li>
<li>Bake for 30 minutes</li>
</ol>
Browsers number these automatically. Perfect for:
- Step-by-step instructions
- Rankings or top 10 lists
- Tutorial steps
- Chronological events
Customizing Ordered Lists
You can control numbering style and starting point:
<!-- Start at a different number -->
<ol start="5">
<li>Fifth item</li>
<li>Sixth item</li>
</ol>
<!-- Use letters instead of numbers -->
<ol type="A">
<li>First item</li>
<li>Second item</li>
</ol>
<!-- Roman numerals -->
<ol type="I">
<li>First item</li>
<li>Second item</li>
</ol>
The type attribute accepts: "1" (numbers), "A" (uppercase letters), "a" (lowercase letters), "I"
(uppercase Roman), "i" (lowercase Roman).
Description Lists: Term and Definition Pairs
Description lists pair terms with definitions or descriptions:
<dl>
<dt>HTML</dt>
<dd>HyperText Markup Language, the structure of web pages</dd>
<dt>CSS</dt>
<dd>Cascading Style Sheets, controls the appearance</dd>
<dt>JavaScript</dt>
<dd>Programming language for interactive behavior</dd>
</dl>
Components:
<dl> - Description list wrapper
<dt> - Description term (the word being defined)
<dd> - Description definition (the explanation)
Use description lists for:
- Glossaries
- FAQ sections
- Metadata (author, date, category)
- Product specifications
Nesting Lists
Lists can contain other lists for hierarchical organization:
<ul>
<li>Frontend Development
<ul>
<li>HTML</li>
<li>CSS</li>
<li>JavaScript</li>
</ul>
</li>
<li>Backend Development
<ul>
<li>Python</li>
<li>Node.js</li>
<li>Ruby</li>
</ul>
</li>
</ul>
Notice the nested list sits inside the parent list item, not as a sibling to it.
Common List Mistakes
Items Outside the List Container
<!-- Wrong: List items must be inside ul/ol -->
<ul></ul>
<li>Item 1</li>
<li>Item 2</li>
<!-- Right: Wrap items properly -->
<ul>
<li>Item 1</li>
<li>Item 2</li>
</ul>
Direct Content Inside List Containers
<!-- Wrong: Only <li> tags should be direct children -->
<ul>
Raw text here
<li>List item</li>
</ul>
<!-- Right: Put text inside list items -->
<ul>
<li>Raw text here</li>
<li>List item</li>
</ul>
Wrong List Type
<!-- Wrong: Using unordered list for steps -->
<ul>
<li>First, do this</li>
<li>Then, do that</li>
<li>Finally, finish</li>
</ul>
<!-- Right: Ordered list shows sequence -->
<ol>
<li>First, do this</li>
<li>Then, do that</li>
<li>Finally, finish</li>
</ol>
Best Practices for Lists
Choose Semantic List Types
Ask yourself: "Does order matter?" If yes, use <ol>. If no, use <ul>.
For term-definition pairs, use <dl>.
Keep Items Parallel
List items should follow similar grammatical structure:
<!-- Inconsistent structure -->
<ul>
<li>Writing clear code</li>
<li>You should test thoroughly</li>
<li>Documentation</li>
</ul>
<!-- Consistent structure -->
<ul>
<li>Write clear code</li>
<li>Test thoroughly</li>
<li>Document everything</li>
</ul>
Don't Overuse Lists
Not everything needs to be a list. Two or three related items in a sentence often reads better than a list
with bullets.
Make Lists Scannable
Keep list items concise. If items need lengthy explanations, consider a different format or add supporting
paragraphs after list items.
Putting It All Together: A Complete Example
Let's combine everything we've learned into a complete, well structured HTML page that demonstrates best
practices:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta name="description" content="Complete HTML tutorial demonstrating document structure, text formatting, links, images, and lists">
<title>Complete HTML Example - TechTrenches</title>
</head>
<body>
<header>
<h1>Welcome to HTML Basics</h1>
<nav>
<ul>
<li><a href="#about">About</a></li>
<li><a href="#features">Features</a></li>
<li><a href="#contact">Contact</a></li>
</ul>
</nav>
</header>
<main>
<section id="about">
<h2>About This Tutorial</h2>
<p>This page demonstrates <strong>proper HTML structure</strong> and best practices. You'll see examples of text formatting, links, images, and lists all working together.</p>
<figure>
<img src="html-diagram.jpg" alt="Diagram showing HTML document structure with head and body sections" width="600" height="400">
<figcaption>Figure 1: Basic HTML document structure</figcaption>
</figure>
</section>
<section id="features">
<h2>Key HTML Concepts</h2>
<h3>Essential Elements</h3>
<ul>
<li>Semantic markup for better accessibility</li>
<li>Proper document structure</li>
<li>Descriptive link text and alt attributes</li>
<li>Organized content with headings and lists</li>
</ul>
<h3>Learning Path</h3>
<ol>
<li>Master basic document structure</li>
<li>Learn text formatting elements</li>
<li>Understand links and navigation</li>
<li>Add images effectively</li>
<li>Organize content with lists</li>
</ol>
<h3>HTML Glossary</h3>
<dl>
<dt>Element</dt>
<dd>A complete HTML structure including opening tag, content, and closing tag</dd>
<dt>Attribute</dt>
<dd>Additional information provided inside an opening tag (e.g., href, src, alt)</dd>
<dt>Semantic HTML</dt>
<dd>Using elements that clearly describe their meaning and purpose</dd>
</dl>
</section>
<section id="contact">
<h2>Get in Touch</h2>
<p>Have questions? We're here to help!</p>
<ul>
<li><a href="mailto:hello@techtrenches.com">Email us</a></li>
<li><a href="https://twitter.com/techtrenches" target="_blank" rel="noopener noreferrer">Follow on Twitter</a></li>
<li><a href="tel:+1234567890">Call: (123) 456-7890</a></li>
</ul>
</section>
</main>
<footer>
<p><small>© 2026 TechTrenches. Built with semantic HTML.</small></p>
</footer>
</body>
</html>
This example showcases:
- Complete, valid document structure
- Semantic elements (header, nav, main, section, footer)
- Proper heading hierarchy (H1 → H2 → H3)
- Text formatting (strong, small)
- All three list types (ul, ol, dl)
- Accessible images with alt text
- Descriptive links with appropriate attributes
- ID-based navigation
- Meaningful structure that helps both users and search engines
Final Thoughts: Building Better HTML
HTML is more than just tags and syntax it's about creating structured, meaningful documents that work for
everyone. When you write semantic HTML with accessibility and usability in mind, you create websites that:
- Work across all devices and browsers
- Rank better in search engines
- Load faster and perform better
- Serve users with disabilities
- Age gracefully as web standards evolve
The fundamentals you've learned here document structure, text formatting, links, images, and lists form the
foundation of every website on the internet. Master these basics before moving to frameworks or complex
tools. Good HTML is timeless.
Remember: HTML describes what content is, not how it looks. Use the right element for the right job. Keep
your code clean, indented, and well commented. Test across browsers and devices. Validate your markup. And
most importantly, build for humans first—the technology is just a means to serve them better.
Now you have the knowledge to build proper, professional HTML documents. The web is yours to create.