HTML Table Types tutorial shows how to create different structural forms of tables in HTML, including horizontal, vertical, nested, and more.
last modified March 3, 2025
HTML Table Types tutorial shows how to create different structural forms of tables in HTML, including horizontal, vertical, nested, and more.
HTML Tables are used to organize and display data in a grid format. Introduced in HTML 1.0, tables remain a fundamental part of web development for structuring data, though CSS is often preferred for layout purposes.
Tables can be structured in various ways depending on how data is organized. This tutorial covers horizontal, vertical, nested, and other layouts with examples rendered below each code snippet.
In the following examples, we explore different table structures with sample data. Basic CSS is included in the head to ensure visibility.
The standard table layout where each row represents a record and columns represent attributes.
Horizontal Table Example
<table> <tr> <th>Name</th> <th>Age</th> <th>City</th> </tr> <tr> <td>John</td> <td>25</td> <td>New York</td> </tr> <tr> <td>Jane</td> <td>30</td> <td>London</td> </tr> <tr> <td>Mike</td> <td>28</td> <td>Paris</td> </tr> <tr> <td>Emma</td> <td>27</td> <td>Tokyo</td> </tr> </table>
Rendered output:
Name
Age
City
John
25
New York
Jane
30
London
Mike
28
Paris
Emma
27
Tokyo
A table where attributes are listed in rows and each column represents a record.
Vertical Table Example
<table> <tr> <th>Name</th> <td>John</td> <td>Jane</td> <td>Mike</td> <td>Emma</td> </tr> <tr> <th>Age</th> <td>25</td> <td>30</td> <td>28</td> <td>27</td> </tr> <tr> <th>City</th> <td>New York</td> <td>London</td> <td>Paris</td> <td>Tokyo</td> </tr> </table>
Rendered output:
Name
John
Jane
Mike
Emma
Age
25
30
28
27
City
New York
London
Paris
Tokyo
A table with another table inside a cell, useful for hierarchical data.
Nested Table Example
<table> <tr> <th>Student</th> <td> <table> <tr> <th>Name</th> <td>John</td> </tr> <tr> <th>Grades</th> <td> <table> <tr> <td>Math</td> <td>85</td> </tr> <tr> <td>Science</td> <td>90</td> </tr> <tr> <td>History</td> <td>88</td> </tr> <tr> <td>Art</td> <td>92</td> </tr> </table> </td> </tr> </table> </td> </tr> </table>
Rendered output:
Student
Name
John
Grades
Math
85
Science
90
History
88
Art
92
A comparison matrix with headers on both axes.
Diagonal Table Example
<table> <tr> <th></th> <th>Product A</th> <th>Product B</th> <th>Product C</th> <th>Product D</th> </tr> <tr> <th>Feature 1</th> <td>Yes</td> <td>No</td> <td>Yes</td> <td>No</td> </tr> <tr> <th>Feature 2</th> <td>No</td> <td>Yes</td> <td>No</td> <td>Yes</td> </tr> <tr> <th>Feature 3</th> <td>Yes</td> <td>Yes</td> <td>No</td> <td>No</td> </tr> </table>
Rendered output:
Product A
Product B
Product C
Product D
Feature 1
Yes
No
Yes
No
Feature 2
No
Yes
No
Yes
Feature 3
Yes
Yes
No
No
A horizontal table with multiple header rows for categorization.
Multi-Header Table Example
<table> <tr> <th rowspan=“2”>ID</th> <th colspan=“2”>Personal Info</th> <th colspan=“2”>Contact Info</th> </tr> <tr> <th>Name</th> <th>Age</th> <th>Email</th> <th>Phone</th> </tr> <tr> <td>1</td> <td>John</td> <td>25</td> <td>john@example.com</td> <td>123-456</td> </tr> <tr> <td>2</td> <td>Jane</td> <td>30</td> <td>jane@example.com</td> <td>789-012</td> </tr> <tr> <td>3</td> <td>Mike</td> <td>28</td> <td>mike@example.com</td> <td>345-678</td> </tr> </table>
Rendered output:
ID
Personal Info
Contact Info
Name
Age
Email
Phone
1
John
25
john@example.com
123-456
2
Jane
30
jane@example.com
789-012
3
Mike
28
mike@example.com
345-678
A vertical table with grouped columns.
Multi-Column Vertical Table Example
<table> <tr> <th colspan=“2”>Student 1</th> <th colspan=“2”>Student 2</th> <th colspan=“2”>Student 3</th> </tr> <tr> <th>Name</th> <td>John</td> <th>Name</th> <td>Jane</td> <th>Name</th> <td>Mike</td> </tr> <tr> <th>Age</th> <td>25</td> <th>Age</th> <td>30</td> <th>Age</th> <td>28</td> </tr> <tr> <th>City</th> <td>New York</td> <th>City</th> <td>London</td> <th>City</th> <td>Paris</td> </tr> </table>
Rendered output:
Student 1
Student 2
Student 3
Name
John
Name
Jane
Name
Mike
Age
25
Age
30
Age
28
City
New York
City
London
City
Paris
Multiple independent tables stacked together.
Stacked Table Example
<table> <tr> <th>Name</th> <td>John</td> </tr> <tr> <th>Age</th> <td>25</td> </tr> <tr> <th>City</th> <td>New York</td> </tr> </table> <table> <tr> <th>Name</th> <td>Jane</td> </tr> <tr> <th>Age</th> <td>30</td> </tr> <tr> <th>City</th> <td>London</td> </tr> </table> <table> <tr> <th>Name</th> <td>Mike</td> </tr> <tr> <th>Age</th> <td>28</td> </tr> <tr> <th>City</th> <td>Paris</td> </tr> </table>
Rendered output:
Name
John
Age
25
City
New York
Name
Jane
Age
30
City
London
Name
Mike
Age
28
City
Paris
A matrix-like table for schedules or calendars.
Grid Table Example
<table> <tr> <th>Time</th> <th>Mon</th> <th>Tue</th> <th>Wed</th> </tr> <tr> <th>9:00</th> <td>Meeting</td> <td>Free</td> <td>Work</td> </tr> <tr> <th>10:00</th> <td>Work</td> <td>Work</td> <td>Meeting</td> </tr> <tr> <th>11:00</th> <td>Free</td> <td>Meeting</td> <td>Free</td> </tr> </table>
Rendered output:
Time
Mon
Tue
Wed
9:00
Meeting
Free
Work
10:00
Work
Work
Meeting
11:00
Free
Meeting
Free
A table with only one row, often used for layout.
Single-Row Table Example
<table> <tr> <td>Item 1</td> <td>Item 2</td> <td>Item 3</td> <td>Item 4</td> </tr> </table>
Rendered output:
Item 1
Item 2
Item 3
Item 4
A table with only one column, like a list.
Single-Column Table Example
<table> <tr> <td>Name: John</td> </tr> <tr> <td>Age: 25</td> </tr> <tr> <td>City: New York</td> </tr> <tr> <td>Job: Developer</td> </tr> </table>
Rendered output:
Name: John
Age: 25
City: New York
Job: Developer
In this tutorial, we have explored various structural forms of HTML tables, demonstrating how to organize data in different layouts with visible examples.
List all HTML tutorials.