colspan
Makes a cell span multiple columns.
Learn Colspan & Rowspan with practical examples for tables, lists, structured data relationships, accessibility, SEO and live practice.
HTML data structures
The colspan and rowspan attributes let a cell stretch across multiple columns or rows. They are useful for group headers, totals and schedules.
Merged cells can make a table more readable visually, but they can also make the relationship between headers and values harder to understand.
Use spanning when the data really has a group relationship. Do not use it only to force a layout shape.
Makes a cell span multiple columns.
Makes a cell span multiple rows.
A header that labels several columns or rows.
A table that may need extra accessibility testing.
Syntax and structure
A subtotal row that spans label columns is a normal use case. Random visual merging is not.
<table> <caption>Order summary</caption> <tr><th scope="col">Item</th><th scope="col">Qty</th><th scope="col">Price</th></tr> <tr><td>Lesson</td><td>2</td><td>EUR 150</td></tr> <tr> <th scope="row" colspan="2">Total</th> <td>EUR 150</td> </tr> </table>
<table> <tr><td colspan="3"><h1>Hero area</h1></td></tr> <tr><td>Left</td><td>Main</td><td>Right</td></tr> </table>
HTML quick reference
Use these patterns when you need the syntax quickly. Each example has its own anchor, so search engines and readers can land directly on the exact pattern instead of only at the top of the lesson.
A clean version of the markup from this lesson. Use it when you need the correct HTML shape quickly.
<table> <caption>Order summary</caption> <tr><th scope="col">Item</th><th scope="col">Qty</th><th scope="col">Price</th></tr> <tr><td>Lesson</td><td>2</td><td>EUR 150</td></tr> <tr> <th scope="row" colspan="2">Total</th> <td>EUR 150</td> </tr> </table>
Meaningful markup that stays understandable before CSS and JavaScript are added.
The starting point from the practice lab. Change the HTML first, then use CSS only for presentation.
<main class="demo-card"> <table> <caption>Package summary</caption> <tr><th scope="col">Part</th><th scope="col">Amount</th><th scope="col">Price</th></tr> <tr><td>Lessons</td><td>15</td><td>EUR 1125</td></tr> <tr><td>Exam</td><td>1</td><td>EUR 300</td></tr> <tr><th scope="row" colspan="2">Total</th><td>EUR 1425</td></tr> </table> </main> <style> body { margin: 0; min-height: 100vh; display: grid; place-items: center; font-family: Inter, system-ui, sans-serif; background: #07111f; color: white; } .demo-card { width: min(820px, calc(100% - 32px)); padding: 34px; border-radius: 24px; background: #101a2d; box-shadow: 0 30px 80px rgba(0, 0, 0, 0.3); } h1 { margin: 0 0 18px; font-size: clamp(32px, 6vw, 54px); line-height: 1; } table { width: 100%; border-collapse: collapse; color: #f7f7f4; } caption { caption-side: top; margin-bottom: 12px; color: #8cffc1; font-weight: 900; text-align: left; } th, td { border-bottom: 1px solid rgba(255, 255, 255, 0.14); padding: 13px 14px; text-align: left; vertical-align: top; } th { color: #8cffc1; font-weight: 900; } ul, ol { display: grid; gap: 10px; margin: 0; padding-left: 24px; color: #cfd8e6; } li::marker { color: #8cffc1; font-weight: 900; } dl { margin: 0; } </style>
A complete practice snippet that shows how the HTML behaves in context.
A weak pattern from the lesson. Use it as a warning sign when reviewing real pages.
<table> <tr><td colspan="3"><h1>Hero area</h1></td></tr> <tr><td>Left</td><td>Main</td><td>Right</td></tr> </table>
A recognizable mistake you can search for and refactor.
Rules that matter
Tables and lists are small elements with big structural value. They help users scan, compare, follow steps and understand how pieces of information belong together.
The more spans a table has, the harder it is to reason about.
A colspan subtotal row is often useful and readable.
Spanning cells is not a replacement for CSS layout.
Merged cells can affect which headers apply to which values.
Two simple tables can be better than one clever table.
Use captions or notes when relationships are not obvious.
Production thinking
This matters because merged cells feel convenient until the table grows. Good spanning supports the data instead of hiding complexity.
Complex spanning can confuse header associations. Test with real assistive technology or simplify the table.
Dashboards often need export, sorting and filtering. Heavy rowspan and colspan can make those features harder.
Simple table structures are easier for crawlers and users to interpret than heavily merged tables.
Live code lab
Edit the HTML or CSS, then use Run to refresh the preview. The preview is isolated, so links and forms stay inside this practice area.
Mini assignment
Practice assignment
Try it yourself
Self-check
Do not only read this page. Answer these questions out loud or write the answers in your own notes. If one answer feels vague, revisit the examples before moving on.