HTML TableData rowSpan Property: Table Data Row Span

June 19, 2025

HTML TableData rowSpan Property: Mastering Table Row Spanning

The HTML <td> (Table Data) element’s rowSpan property is a powerful attribute that allows table cells to span multiple rows. This feature is essential for creating complex and visually appealing table layouts, enabling you to merge cells vertically and present data in a more organized manner. This comprehensive guide will walk you through the syntax, usage, and practical examples of the rowSpan property.

What is the rowSpan Property?

The rowSpan attribute defines the number of rows a table cell should span. By default, a <td> element occupies a single row. The rowSpan property allows you to override this default behavior, merging the cell vertically across multiple rows to create a more structured presentation of data.

Purpose of the rowSpan Property

The primary purpose of the rowSpan property is to:

  • Merge Table Cells: Combine multiple table cells vertically into a single cell.
  • Enhance Data Presentation: Organize data in a more logical and visually appealing manner.
  • Create Complex Table Layouts: Build tables with intricate structures that are easy to read and understand.
  • Improve Accessibility: Structure tables in a way that enhances screen reader compatibility and overall accessibility.

Syntax of the rowSpan Property

The rowSpan attribute is specified within the opening <td> tag. The value of the rowSpan attribute is an integer representing the number of rows the cell should span.

<td rowspan="number">Content</td>

Where number is the number of rows the cell should span.

Important Considerations

  • The value of rowSpan must be an integer greater than or equal to 1.
  • A rowSpan value of “1” is the default and doesn’t need to be explicitly declared.
  • Overlapping rowSpan attributes can lead to unexpected layout issues, so careful planning is essential.
Attribute Type Description
`rowSpan` Number Specifies the number of rows a table cell should span. The default value is 1.

Basic Examples of rowSpan

Let’s explore some basic examples to understand how the rowSpan property works.

Simple Row Spanning

In this example, a single cell spans two rows, providing a clear visual separation.

<table border="1">
  <tr>
    <th>Name</th>
    <th>Age</th>
  </tr>
  <tr>
    <td rowspan="2">John Doe</td>
    <td>25</td>
  </tr>
  <tr>
    <td>28</td>
  </tr>
</table>

Output:

Name Age
John Doe 25
28

In this example, the “John Doe” cell spans two rows, effectively merging the two rows under the “Name” column for that particular entry.

Multiple Row Spans

This example showcases multiple cells spanning different numbers of rows.

<table border="1">
  <tr>
    <th>Header 1</th>
    <th>Header 2</th>
    <th>Header 3</th>
  </tr>
  <tr>
    <td rowspan="2">Cell 1</td>
    <td>Cell 2</td>
    <td>Cell 3</td>
  </tr>
  <tr>
    <td>Cell 4</td>
    <td rowspan="2">Cell 5</td>
  </tr>
  <tr>
    <td>Cell 6</td>
    <td>Cell 7</td>
  </tr>
</table>

Output:

Header 1 Header 2 Header 3
Cell 1 Cell 2 Cell 3
Cell 4 Cell 5
Cell 6 Cell 7

Here, “Cell 1” spans two rows, and “Cell 5” also spans two rows, demonstrating how multiple rowSpan attributes can be used within the same table.

Using rowSpan with Headers

The rowSpan property is often used with table headers (<th>) to create more descriptive and organized tables.

<table border="1">
  <tr>
    <th rowspan="2">Information</th>
    <th>Name</th>
    <th>Age</th>
  </tr>
  <tr>
    <td>John Doe</td>
    <td>25</td>
  </tr>
</table>

Output:

Information Name Age
John Doe 25

In this example, the “Information” header spans both rows, providing a general category for the “Name” and “Age” columns.

Advanced Techniques with rowSpan

Combining rowSpan and colSpan

For more complex table layouts, you can combine the rowSpan and colSpan attributes.

<table border="1">
  <tr>
    <th colspan="2">Personal Details</th>
    <th>Contact</th>
  </tr>
  <tr>
    <th>Name</th>
    <th>Age</th>
    <td rowspan="2">[email protected]</td>
  </tr>
  <tr>
    <td>John Doe</td>
    <td>25</td>
  </tr>
</table>

Output:

Personal Details Contact
Name Age [email protected]
John Doe 25

In this example, the “Personal Details” header spans two columns, while the “Contact” cell spans two rows.

Dynamic Table Generation with JavaScript

You can dynamically generate tables with rowSpan using JavaScript, allowing you to create complex layouts based on data.

<table id="dynamicTable" border="1"></table>

<script>
  const tableDataArray = [
    { name: "John Doe", age: 25 },
    { name: "Jane Smith", age: 30 },
  ];

  const table_dynamic = document.getElementById("dynamicTable");
  let tableHTML = `
    <tr>
      <th>Name</th>
      <th>Age</th>
    </tr>
  `;

  tableDataArray.forEach((item, index) => {
    const rowSpanValue = index === 0 ? 2 : 1;
    tableHTML += `
      <tr>
        <td rowspan="${rowSpanValue}">${item.name}</td>
        <td>${item.age}</td>
      </tr>
    `;
  });

  table_dynamic.innerHTML = tableHTML;
</script>

Output:

Note: When generating tables dynamically, ensure that the rowSpan values are correctly calculated based on your data structure. ⚠️

Real-World Use Case: Creating a Schedule Table

Consider creating a schedule table where some events span multiple time slots.

<table border="1">
  <tr>
    <th>Time</th>
    <th>Activity</th>
  </tr>
  <tr>
    <td>9:00 AM - 10:00 AM</td>
    <td rowspan="2">Meeting with Team</td>
  </tr>
  <tr>
    <td>10:00 AM - 11:00 AM</td>
  </tr>
  <tr>
    <td>11:00 AM - 12:00 PM</td>
    <td>Project Work</td>
  </tr>
</table>

Output:

Time Activity
9:00 AM – 10:00 AM Meeting with Team
10:00 AM – 11:00 AM
11:00 AM – 12:00 PM Project Work

In this example, the “Meeting with Team” activity spans two time slots, providing a clear representation of the schedule.

Accessibility Considerations

When using the rowSpan property, it’s important to ensure that your tables remain accessible to users with disabilities. Here are some tips:

  • Use <th> Elements: Use <th> elements to define headers for rows and columns, providing context for screen readers.
  • Provide Summary: Use the <caption> element to provide a summary of the table’s content.
  • Test with Screen Readers: Test your tables with screen readers to ensure that the content is read in a logical order.

Browser Support

The rowSpan property is widely supported across all modern web browsers, ensuring consistent rendering across different platforms.

Conclusion

The HTML <td> element’s rowSpan property is a valuable tool for creating complex and visually appealing table layouts. By allowing table cells to span multiple rows, you can organize data in a more logical and structured manner, enhancing the user experience. This comprehensive guide should equip you with the knowledge and skills necessary to effectively use the rowSpan property in your web development projects.