Lists & Tables
লিস্ট ও টেবিল
1. Two Different Jobs — Grouping vs Tabulating
So far you have written headings, paragraphs, links, and images — all content that flows one after another. But a huge amount of real content isn't a flowing paragraph at all: it's a group of related items (a menu, a list of ingredients, steps in a recipe) or genuine row-and-column data (a price list, a class schedule, a comparison of specs). HTML gives you two dedicated tools for exactly these two jobs — lists and tables.
By the end of this module you'll know exactly which one to reach for, and — just as importantly — when not to use a table.
2. Unordered Lists — <ul> & <li>
An unordered list (<ul>) is for items where the order doesn't matter —
a shopping list, a set of features, a navigation menu. Each item goes inside its own
<li> (list item), and the browser draws a bullet point in front of each one by default.
<ul>) এমন আইটেমের জন্য ব্যবহার করা হয় যেখানে ক্রম গুরুত্বপূর্ণ নয় — একটি shopping list, ফিচারের তালিকা, বা নেভিগেশন মেনু। প্রতিটি আইটেম নিজের <li> (list item)-এর ভেতরে থাকে, এবং ব্রাউজার ডিফল্টভাবে প্রতিটির সামনে একটি bullet point এঁকে দেয়।
<h3>Ingredients</h3>
<ul>
<li>Flour</li>
<li>Sugar</li>
<li>Butter</li>
<li>Eggs</li>
</ul>
3. Ordered Lists & Nested Lists
When the sequence matters — steps in a recipe, ranking in a competition, instructions to follow in order —
use an ordered list (<ol>) instead. The browser numbers each
<li> automatically: 1, 2, 3... You can also put a whole <ul> or
<ol> inside an <li> to create a nested list
— useful for sub-steps or sub-categories.
<ol>) ব্যবহার করুন। ব্রাউজার প্রতিটি <li>-কে স্বয়ংক্রিয়ভাবে নম্বর দেয়: ১, ২, ৩... আপনি একটি সম্পূর্ণ <ul> বা <ol> একটি <li>-এর ভেতরে বসিয়ে nested listও তৈরি করতে পারেন — সাব-স্টেপ বা সাব-ক্যাটাগরির জন্য দরকারি।
<h3>Steps to Publish Your Site</h3>
<ol>
<li>Write your HTML files</li>
<li>
Test locally
<ul>
<li>Open in Chrome</li>
<li>Open in Firefox</li>
</ul>
</li>
<li>Upload via FTP or hosting panel</li>
</ol>
4. Tables — <table>, <tr>, <td>, <th>
A table is built from a <table> element containing rows (<tr> — table
row). Each row contains cells: <th> (table header — bold, centered by default, marks a
column or row label) and <td> (table data — a regular cell). Header cells matter for
accessibility too: screen readers announce which header a data cell belongs to.
<table> এলিমেন্ট দিয়ে, যার ভেতরে থাকে সারি (<tr> — table row)। প্রতিটি সারিতে থাকে সেল: <th> (table header — ডিফল্টভাবে bold ও কেন্দ্রে থাকে, একটি কলাম বা সারির লেবেল বোঝায়) এবং <td> (table data — সাধারণ সেল)। Header সেল accessibility-র জন্যও গুরুত্বপূর্ণ — স্ক্রিন রিডার জানিয়ে দেয় কোন data সেল কোন header-এর অন্তর্গত।
<table>
<tr>
<th>Item</th>
<th>Price</th>
</tr>
<tr>
<td>Notebook</td>
<td>৳50</td>
</tr>
<tr>
<td>Pen</td>
<td>৳10</td>
</tr>
</table>
5. Structuring a Real Table — <thead>, <tbody>, <tfoot>
For anything beyond a tiny example, wrap your header row in <thead>, your data rows in
<tbody>, and any summary row (totals, averages) in <tfoot>. This adds
no visible change by default, but it tells browsers, screen readers, and CSS exactly which part of the
table is which — and lets you style each section independently.
<thead>-এর ভেতরে, data সারি <tbody>-এর ভেতরে, এবং সারাংশ সারি (যোগফল, গড়) <tfoot>-এর ভেতরে রাখুন। ডিফল্টভাবে এতে দৃশ্যমান কোনো পরিবর্তন হয় না, কিন্তু এটি ব্রাউজার, স্ক্রিন রিডার ও CSS-কে স্পষ্টভাবে জানিয়ে দেয় টেবিলের কোন অংশ কী — এবং প্রতিটি অংশ আলাদাভাবে স্টাইল করার সুযোগ দেয়।
<table>
<thead>
<tr>
<th>Product</th>
<th>Qty</th>
<th>Price</th>
</tr>
</thead>
<tbody>
<tr>
<td>Keyboard</td>
<td>2</td>
<td>৳1200</td>
</tr>
<tr>
<td>Mouse</td>
<td>3</td>
<td>৳400</td>
</tr>
</tbody>
<tfoot>
<tr>
<td>Total</td>
<td>5</td>
<td>৳3600</td>
</tr>
</tfoot>
</table>
6. When NOT to Use a Table
In the early 2000s, developers built entire page layouts — sidebars, columns, navigation bars — using invisible tables. This is now considered a serious anti-pattern. Tables are for genuine tabular data only: information that truly has rows and columns, like a price list or a class schedule. For page layout, you'll use CSS (Flexbox and Grid, coming in Phase 5) instead.
<table> for page layout breaks accessibility (screen readers announce meaningless
"row 1, column 1"), hurts SEO, and makes responsive design far harder than it needs to be.
লেআউটের জন্য
<table> ব্যবহার করলে accessibility নষ্ট হয় (স্ক্রিন রিডার অর্থহীন "row 1, column 1" ঘোষণা করে), SEO ক্ষতিগ্রস্ত হয়, এবং responsive design অনেক বেশি কঠিন হয়ে যায়।
7. Where Lists & Tables Show Up (কোথায় ব্যবহৃত হয়)
প্রায় প্রতিটি nav bar আসলে একটি
<ul>।রেসিপি, টিউটোরিয়াল —
<ol> দিয়ে গঠিত।সত্যিকারের ডেটা টেবিলের সবচেয়ে সঠিক ব্যবহার।
ক্লাস রুটিন, ট্রেনের সময়সূচি।
প্ল্যান তুলনা, প্রোডাক্ট স্পেসিফিকেশন।
To-do তালিকা এবং ধাপে ধাপে নির্দেশনা।
নিজেকে জিজ্ঞেস করুন — "এটা কি সত্যিই সারি-কলাম আকারের সম্পর্কিত ডেটা?" হ্যাঁ হলে টেবিল ব্যবহার করুন। যদি এটা শুধু সম্পর্কিত আইটেমের একটি গ্রুপ হয়, তাহলে লিস্ট ব্যবহার করুন — এমনকি দেখতে কলামের মতো লাগলেও CSS দিয়ে লিস্টকে সেভাবে সাজানো যায়।
8. Glossary (শব্দকোষ)
| Tag | Meaning | বাংলায় |
|---|---|---|
<ul> | Unordered list — bulleted, order doesn't matter. | Unordered list — bullet-যুক্ত, ক্রম গুরুত্বপূর্ণ নয়। |
<ol> | Ordered list — numbered, order matters. | Ordered list — নম্বরযুক্ত, ক্রম গুরুত্বপূর্ণ। |
<li> | List item — one entry in a ul or ol. | List item — ul বা ol-এর একটি এন্ট্রি। |
<table> | Wraps a full table of rows and cells. | সারি ও সেলসহ পুরো টেবিলকে মোড়ায়। |
<tr> | Table row. | টেবিলের একটি সারি। |
<th> | Table header cell — bold, marks a label. | Table header cell — bold, একটি লেবেল বোঝায়। |
<td> | Table data cell. | Table data cell। |
<thead>/<tbody>/<tfoot> | Groups header, body, and footer rows. | Header, body ও footer সারিকে গ্রুপ করে। |
9. Practice Problems
Every problem has a Show Answer button. Try the problem yourself first, then check.
-
Write an unordered list of your three favorite programming languages.আপনার পছন্দের তিনটি প্রোগ্রামিং ভাষার একটি unordered list লিখুন।
✨ Show Answer (উত্তর দেখুন)
ans1.html<ul> <li>JavaScript</li> <li>Python</li> <li>HTML & CSS</li> </ul> -
Write an ordered list of the first four steps to make tea, with one nested sub-step under step 2.চা বানানোর প্রথম চারটি ধাপের একটি ordered list লিখুন, যেখানে দ্বিতীয় ধাপের নিচে একটি nested sub-step থাকবে।
✨ Show Answer (উত্তর দেখুন)
ans2.html<ol> <li>Boil water</li> <li> Add tea leaves <ul> <li>Use 1 spoon per cup</li> </ul> </li> <li>Wait 3 minutes</li> <li>Add milk & sugar</li> </ol> -
Build a table with a header row (Name, Age) and two data rows of your own choosing.একটি header সারি (Name, Age) এবং আপনার পছন্দমতো দুটি data সারি সহ একটি টেবিল তৈরি করুন।
✨ Show Answer (উত্তর দেখুন)
ans3.html<table> <tr> <th>Name</th> <th>Age</th> </tr> <tr> <td>Rahim</td> <td>22</td> </tr> <tr> <td>Karim</td> <td>25</td> </tr> </table> -
Rewrite your Problem 3 table using thead and tbody instead of plain tr rows.Problem 3-এর টেবিলটি plain tr সারির বদলে thead ও tbody ব্যবহার করে পুনরায় লিখুন।
✨ Show Answer (উত্তর দেখুন)
ans4.html<table> <thead> <tr> <th>Name</th> <th>Age</th> </tr> </thead> <tbody> <tr> <td>Rahim</td> <td>22</td> </tr> <tr> <td>Karim</td> <td>25</td> </tr> </tbody> </table> -
In two or three sentences, explain why tables should not be used to build page layouts.দুই বা তিন বাক্যে ব্যাখ্যা করুন কেন পেজ লেআউট তৈরির জন্য টেবিল ব্যবহার করা উচিত নয়।
✨ Show Answer (উত্তর দেখুন)
Answer: Tables built for layout confuse screen readers, which announce meaningless "row, column" information instead of real content structure. They also hurt SEO because search engines expect tables to contain actual tabular data, and they make responsive design much harder than modern CSS layout tools like Flexbox and Grid.
লেআউটের জন্য বানানো টেবিল স্ক্রিন রিডারকে বিভ্রান্ত করে, যা প্রকৃত কনটেন্ট গঠনের বদলে অর্থহীন "row, column" তথ্য ঘোষণা করে। এটি SEO-ও ক্ষতিগ্রস্ত করে, কারণ সার্চ ইঞ্জিন আশা করে টেবিলে সত্যিকারের tabular ডেটা থাকবে, এবং এটি responsive design-কে Flexbox বা Grid-এর মতো আধুনিক CSS টুলের চেয়ে অনেক কঠিন করে তোলে।
Summary — Module 06
Use lists (<ul>/<ol>) to group related items, with
nesting for sub-items. Use tables (<table>,
<tr>, <td>, <th>) only for genuine row-and-column
data, structured with <thead>, <tbody>, and <tfoot>.
Never use a table to build page layout — that job belongs to CSS.
<ul>/<ol>) ব্যবহার করুন, প্রয়োজনে nesting সহ। সত্যিকারের সারি-কলাম আকারের ডেটার জন্যই শুধু টেবিল ব্যবহার করুন, যা <thead>, <tbody> ও <tfoot> দিয়ে গঠিত হবে। পেজ লেআউট তৈরির জন্য কখনও টেবিল ব্যবহার করবেন না — সেই কাজ CSS-এর।