এই পর্বে যা শিখবেন
- ওয়েবসাইট, ওয়েব পেজ আর হোম পেজের পার্থক্য, ওয়েবসাইটের কাঠামো আর ওয়েব ডিজাইনের ধাপ
- ব্রাউজার কীভাবে HTML লেখা থেকে পাতা আঁকে — parse, DOM tree আর render
- ট্যাগ, element, attribute, paired আর empty ট্যাগ, nesting-এর নিয়ম আর comment
- DOCTYPE, head আর body দিয়ে পূর্ণ পাতা; heading, paragraph, formatting ট্যাগ, sub/sup, তালিকা আর entity
- বাংলা লেখা আর UTF-8, CSS-এর এক ঝলক, semantic HTML, validator আর AI-এর লেখা HTML যাচাই
১ · ওয়েব পেজ আসলে কী — লেবেল লাগানো একটি টেক্সট ফাইল
আপনি এখন যে পাতাটি পড়ছেন, তার পেছনে আছে একটি সাধারণ টেক্সট ফাইল — Notepad-এ খুললে শুধু অক্ষর দেখা যাবে, কোনো ছবি বা রং নয়। ফাইলটির ভেতরে লেখার প্রতিটি অংশের গায়ে ছোট ছোট লেবেল লাগানো আছে: “এটি শিরোনাম”, “এটি অনুচ্ছেদ”, “এটি তালিকা”। এই লেবেল লাগানোর ভাষাই HTML — HyperText Markup Language. আর লেবেলগুলোর নাম ট্যাগ।
HTML প্রোগ্রামিং ভাষা নয়, এটি একটি markup language. এতে হিসাব, শর্ত বা লুপ নেই; শুধু লেখার কোন অংশ কী — তা চিহ্নিত করা হয়। ব্রাউজার (Chrome, Edge, Firefox) ফাইলটি পড়ে, লেবেল দেখে ঠিক করে কোনটি বড় করে, কোনটি নতুন লাইনে, কোনটি বুলেট দিয়ে দেখাবে — তারপর পাতা এঁকে দেয়।
উপমা: পরীক্ষার খাতায় শিক্ষক লাল কালিতে দাগ দেন — “এখানে নতুন অনুচ্ছেদ”, “এই শব্দটি গুরুত্বপূর্ণ”। খাতার লেখা একই থাকে, দাগগুলো শুধু বলে দেয় কোন অংশ কী। ছাপাখানায় পাণ্ডুলিপিতে এমন দাগকেই বলা হতো “markup” — সেখান থেকেই নাম। HTML-এ দাগের বদলে ট্যাগ, আর ছাপাখানার কর্মীর বদলে ব্রাউজার।
HTML, CSS আর JavaScript — তিন ভাইয়ের তিন কাজ
HTML — কাঠামো আর অর্থ
কী আছে আর কোনটি কী: শিরোনাম, অনুচ্ছেদ, তালিকা, ছবি, লিংক। বাড়ির দেয়াল, ঘর আর দরজার মতো।
CSS — চেহারা
CSS বলে কেমন দেখাবে: রং, ফন্ট, মাপ, বিন্যাস। দেয়ালের রং আর আসবাব সাজানোর মতো।
JavaScript — আচরণ
JavaScript বলে কী ঘটবে: বোতাম চাপলে মেনু খোলা, ফর্ম যাচাই। বাড়ির বিদ্যুৎ আর সুইচের মতো।
ওয়েবসাইট, ওয়েব পেজ আর হোম পেজ
- ওয়েব পেজ: একটি HTML ফাইল বা একটি পাতা — যেমন এই পর্বের পাতা।
- ওয়েবসাইট: একই ডোমেইনের অধীনে পরস্পর hyperlink দিয়ে জোড়া অনেক ওয়েব পেজের সংগ্রহ — যেমন পুরো abcltech.com.
- হোম পেজ: ওয়েবসাইটের প্রথম বা মূল পাতা, শুধু ডোমেইন লিখলে যা খোলে; সার্ভারে সাধারণত এর নাম
index.html.
পর্ব ৩৪-এ দেখেছেন, যে সাইটের পাতা আগে থেকে তৈরি ফাইল হিসেবে থাকে, তা static; আর যেখানে সার্ভারে কোড চলে প্রতিবার নতুন পাতা বানায়, তা dynamic. মজার কথা, dynamic সাইটও শেষ পর্যন্ত ব্রাউজারে HTML-ই পাঠায় — তাই HTML জানা সব ধরনের ওয়েব কাজের ভিত্তি।
ব্রাউজার কীভাবে লেখা থেকে পাতা বানায়
ছোট্ট একটি ফাইল ধরুন — একটি শিরোনাম আর একটি অনুচ্ছেদ। “পরে” চেপে দেখুন ব্রাউজার ধাপে ধাপে কী করে:
- ফাইল
index.htmlটেক্সট - বাইট
UTF-8অক্ষরে রূপান্তর - Parse
<h1>ট্যাগ চেনা - DOM
treeগাছের কাঠামো - Render
বাক্স আঁকাস্ক্রিনে
<h1>আমার পাতা</h1> <p>আমি <b>নুসরাত</b></p>
3C 68 31 3E E0 A6 86 E0 A6 AE … 3C 68 31 3E = < h 1 > (এক বাইটে এক অক্ষর) E0 A6 86 = আ (UTF-8-এ বাংলা অক্ষর তিন বাইট)
শুরু-ট্যাগ h1 লেখা "আমার পাতা" শেষ-ট্যাগ h1 শুরু-ট্যাগ p লেখা "আমি " শুরু-ট্যাগ b লেখা "নুসরাত" শেষ-ট্যাগ b শেষ-ট্যাগ p
html ├─ head └─ body ├─ h1 ─ "আমার পাতা" └─ p ─ "আমি " └─ b ─ "নুসরাত"
আমার পাতা ← h1: বড়, মোটা, পুরো লাইন জুড়ে (block) আমি নুসরাত ← p: নতুন লাইনে; b: লাইনের ভেতরেই মোটা (inline)
- ফাইল। দুই লাইনের একটি টেক্সট ফাইল। এতে কোথাও লেখা নেই “বড় করো” বা “মোটা করো” — আছে শুধু লেবেল: h1 মানে প্রধান শিরোনাম, p মানে অনুচ্ছেদ, b মানে আলাদা করে চোখে পড়ার মতো শব্দ।
- বাইট থেকে অক্ষর। ফাইল সার্ভার থেকে বা ডিস্ক থেকে আসে বাইট হিসেবে। ব্রাউজারকে জানতে হয় কোন encoding-এ লেখা — UTF-8-এ ইংরেজি অক্ষর এক বাইট, বাংলা অক্ষর তিন বাইট (পর্ব ১৮)। ভুল encoding ধরলে বাংলা ভেঙে অদ্ভুত চিহ্ন হয় — অংশ ৫-এ দেখবেন।
- Parse — ট্যাগ চেনা। ব্রাউজার অক্ষরের স্রোত পড়ে
<দেখলেই বোঝে ট্যাগ শুরু হচ্ছে। লেখাকে সে শুরু-ট্যাগ, শেষ-ট্যাগ আর সাধারণ লেখার টুকরোয় ভাগ করে। একে বলে parsing. - DOM tree. টুকরোগুলো দিয়ে ব্রাউজার একটি গাছ বানায়: কে কার ভেতরে। b আছে p-এর ভেতরে, p আছে body-র ভেতরে। এই গাছের নাম DOM (Document Object Model). খেয়াল করুন, ফাইলে html, head, body লেখা না থাকলেও ব্রাউজার নিজে বসিয়ে দিয়েছে — HTML ভুল ক্ষমা করতে জানে। JavaScript পরে এই গাছটিই বদলায়।
- Render — আঁকা। প্রতিটি element-এর জন্য ব্রাউজার একটি আয়তাকার বাক্স হিসাব করে — কোনটি কত বড়, কোথায় বসবে (layout) — তারপর পিক্সেলে আঁকে। একে বলে rendering. h1 আর p পুরো লাইন নেয় (block), b লাইনের ভেতরে থাকে (inline). ডিফল্ট চেহারা ব্রাউজারের নিজের; CSS দিয়ে আপনি তা বদলাতে পারেন।
২ · ওয়েব ডিজাইনের ধাপ, সাইটের কাঠামো আর HTML-এর ইতিহাস
বাড়ি বানানোর আগে নকশা লাগে। ওয়েবসাইটও তাই — ওয়েব ডিজাইন মানে শুধু সুন্দর রং নয়, কে, কেন, কী খুঁজতে আসবেন তা ভেবে পাতা সাজানো। ধরুন আপনার স্কুলের বিজ্ঞান ক্লাব একটি সাইট চায়। সাধারণ ধাপগুলো:
- উদ্দেশ্য ঠিক করা: সাইট কেন? ক্লাবের পরিচিতি, অনুষ্ঠানের খবর, নতুন সদস্য সংগ্রহ।
- দর্শক চেনা: ছাত্রছাত্রী, অভিভাবক, শিক্ষক — বেশিরভাগই মোবাইলে দেখবেন, তাই ছোট পর্দায় পড়া সহজ হতে হবে।
- কাঠামো আর navigation: কোন কোন পাতা (হোম, আমাদের কথা, অনুষ্ঠান, যোগাযোগ), আর এক পাতা থেকে আরেক পাতায় যাওয়ার মেনু। কাগজে একটি খসড়া নকশা (wireframe) আঁকুন।
- ডিজাইন: রং, ফন্ট, ছবি, লোগো — পড়তে আরাম, বাংলা স্পষ্ট।
- তৈরি (development): HTML দিয়ে কাঠামো, CSS দিয়ে চেহারা, দরকার হলে JavaScript.
- পরীক্ষা (testing): কয়েকটি ব্রাউজার আর মোবাইলে খোলা, লিংক কাজ করে কি না, validator-এ ভুল নেই তো।
- প্রকাশ আর রক্ষণাবেক্ষণ: ডোমেইন আর হোস্টিংয়ে তোলা (পর্ব ৩৪), তারপর নিয়মিত নতুন খবর যোগ।
ওয়েবসাইটের কাঠামো — পাতাগুলো কীভাবে জোড়া
| কাঠামো | কীভাবে সাজানো | কোথায় মানায় |
|---|---|---|
| লিনিয়ার বা ক্রমিক (linear/sequential) | পাতাগুলো এক সারিতে — আগের পাতা, পরের পাতা | ধাপে ধাপে টিউটোরিয়াল, অনলাইন কোর্সের পর্ব |
| হায়ারার্কিক্যাল বা ট্রি (hierarchical) | হোম পেজ থেকে শাখা, শাখা থেকে উপশাখা — পারিবারিক গাছের মতো | স্কুল, প্রতিষ্ঠান, সরকারি দপ্তরের সাইট |
| ওয়েব লিংকড বা নেটওয়ার্ক (webbed) | প্রায় প্রতিটি পাতা অনেক পাতার সাথে সরাসরি যুক্ত | Wikipedia-র মতো তথ্যভান্ডার |
| মিশ্র (hybrid) | ওপরের কাঠামোগুলো মিলিয়ে | বেশিরভাগ বাস্তব সাইট — সংবাদপত্র, অনলাইন দোকান |
ইতিহাসের পাতা থেকে: সুইজারল্যান্ডের গবেষণাগার CERN-এ কাজ করার সময় Tim Berners-Lee ১৯৮৯ সালে বিজ্ঞানীদের নথি লিংক দিয়ে জোড়ার প্রস্তাব দেন; ১৯৯০–১৯৯১ সালে তৈরি হয় প্রথম ব্রাউজার, প্রথম web server আর HTML — যার ধারণা এসেছিল তখনকার দলিল-লেখার মান SGML থেকে। ১৯৯১ সালে প্রথম ওয়েবসাইট সবার জন্য খোলে। এরপর HTML 2.0 (১৯৯৫), HTML 3.2 আর 4.0 (১৯৯৭), 4.01 (১৯৯৯) — মাঝে ১৯৯৪ সালে মান ঠিক করার জন্য গঠিত হয় W3C. ২০০৪ সালে ব্রাউজার নির্মাতারা গড়েন WHATWG, যাদের কাজ থেকে ২০১৪ সালে আসে HTML5. এখন HTML-এর কোনো “৬ নম্বর সংস্করণ” আসছে না — WHATWG একটি “living standard” রাখে, যা নিয়মিত হালনাগাদ হয়; ২০১৯ সালে W3C-ও এটিকেই একমাত্র মান হিসেবে মেনে নেয়।
৩ · সরঞ্জাম — editor, ফাইল সেভ, ব্রাউজার আর DevTools
HTML লিখতে দামি সফটওয়্যার লাগে না। লাগে একটি text editor আর একটি ব্রাউজার — দুটোই আপনার কম্পিউটারে আছে।
- Notepad (Windows): সবচেয়ে সরল। শেখার শুরুতে ভালো, কারণ সব নিজে লিখতে হয়।
- VS Code: বিনা খরচের পেশাদার editor — রঙিন কোড, ট্যাগ আপনাআপনি বন্ধ হওয়া, ভুলের ইঙ্গিত। খালি
.htmlফাইলে ! লিখে Tab চাপলে পুরো কঙ্কাল লেখা হয়ে যায়। - Word নয়: Word বা Google Docs লেখার সাথে নিজের লুকানো ফরম্যাটিং যোগ করে; HTML লিখতে চাই একদম সাদামাটা টেক্সট। Word-এর মতো WYSIWYG ওয়েব-নির্মাতাও আছে, কিন্তু শেখার জন্য নিজের হাতে ট্যাগ লেখাই ভালো।
প্রথম ফাইল সেভ করা — তিনটি সাবধানতা
- এক্সটেনশন
.html: নাম দিনindex.html(বা.htm— দুটোই চলে)। Notepad-এর Save as-এ “Save as type” থেকে “All files” বাছুন, নইলে নাম হয়ে যেতে পারেindex.html.txt. Windows ফাইলের extension লুকিয়ে রাখে বলে এই ভুল চোখে পড়ে না — File Explorer-এ extension দেখানো চালু করুন (পর্ব ০৬)। - Encoding UTF-8: Save-এর সময় Encoding-এ UTF-8 আছে কি না দেখুন (Windows 11-এর Notepad-এ এটিই ডিফল্ট)। বাংলা লেখার জন্য এটি জরুরি।
- ফাইলের নাম: ছোট হাতের ইংরেজি, ফাঁকা জায়গার বদলে হাইফেন —
about-us.html. সার্ভারেAbout.htmlআরabout.htmlআলাদা ফাইল হতে পারে।
খোলা, দেখা, ভেতরে উঁকি দেওয়া
- খোলা: ফাইলে ডাবল-ক্লিক করলে ব্রাউজারে খোলে; ঠিকানার ঘরে
file:///দেখবেন — মানে ইন্টারনেট নয়, নিজের ডিস্ক থেকে। editor-এ বদলে সেভ করে ব্রাউজারে F5 চাপলেই নতুন রূপ। - View source (Ctrl+U): যেকোনো ওয়েবসাইটের পাঠানো আসল HTML লেখা দেখায়। এই পাতাতেও চেষ্টা করুন।
- DevTools (F12): Elements প্যানেলে দেখায় ব্রাউজারের বানানো DOM tree — parse করার পর, ভুল মেরামতের পর। কোনো element-এর ওপর মাউস রাখলে পাতায় তার বাক্সটি রঙিন হয়। View source = ফাইলে যা লেখা; DevTools = ব্রাউজার যা বুঝেছে। দুটোর পার্থক্যই অনেক সময় ভুল ধরিয়ে দেয়।
৪ · ট্যাগ, element আর attribute — HTML-এর ব্যাকরণ
একটি অনুচ্ছেদ খুঁটিয়ে দেখি:
<p class="note">আজ ক্লাবের সভা।</p>| অংশ | উদাহরণে | মানে |
|---|---|---|
| শুরুর ট্যাগ (opening tag) | <p class="note"> | কোণ-বন্ধনীর (< >) ভেতরে ট্যাগের নাম — “অনুচ্ছেদ শুরু” |
| Attribute | class="note" | element সম্পর্কে বাড়তি তথ্য; সবসময় শুরুর ট্যাগে, নাম="মান" রূপে |
| বিষয়বস্তু (content) | আজ ক্লাবের সভা। | যা পাতায় দেখা যায় |
| শেষের ট্যাগ (closing tag) | </p> | নামের আগে স্ল্যাশ / — “অনুচ্ছেদ শেষ” |
শুরুর ট্যাগ, বিষয়বস্তু আর শেষের ট্যাগ মিলে পুরোটাকে বলে একটি element. দৈনন্দিন কথায় “ট্যাগ” আর “element” মিশিয়ে বলা হয়, কিন্তু পরীক্ষায় পার্থক্যটি জানতে হয়: ট্যাগ হলো চিহ্ন, element হলো চিহ্নসহ পুরো অংশ। একটি element-এ একাধিক attribute থাকতে পারে, ফাঁকা জায়গা দিয়ে আলাদা করে: <ol type="A" start="3">. প্রায় সব element-এ চলে এমন কয়েকটি attribute: id (পাতায় অনন্য নাম), class (দলের নাম, CSS-এ কাজে লাগে), style, title (মাউস রাখলে ছোট বার্তা), lang.
Paired ট্যাগ আর empty ট্যাগ
Paired বা container ট্যাগ
জোড়া ট্যাগ — শুরু আর শেষ দুটোই থাকে, মাঝে বিষয়বস্তু। <p>…</p>, <h1>…</h1>, <b>…</b>, <ul>…</ul>, <html>…</html>.
Empty, single বা void ট্যাগ
একক ট্যাগ — ভেতরে কিছু রাখার নেই, তাই শেষের ট্যাগ নেই। <br> (লাইন ভাঙা), <hr> (আড়াআড়ি দাগ), <img> (ছবি), <meta>, <link>, <input>.
পুরোনো বই বা XHTML-এ <br /> লেখা দেখবেন — শেষে স্ল্যাশ। HTML5-এ স্ল্যাশ দেওয়া বা না দেওয়া দুটোই বৈধ, কিন্তু </br> বা <br></br> ভুল।
Nesting, বড়-ছোট হাতের অক্ষর আর comment
- Nesting: এক element-এর ভেতরে আরেকটি রাখা যায়। নিয়ম একটাই — যেটি পরে খুলেছেন, সেটি আগে বন্ধ করুন। টিফিন ক্যারিয়ারের বাটির মতো: ভেতরের বাটি বাইরে না এনে বাইরেরটি বের করা যায় না। ঠিক:
<b><i>…</i></b>; ভুল:<b><i>…</b></i>. - Case-insensitive: ট্যাগ আর attribute-এর নাম বড় বা ছোট হাতের —
<P>আর<p>একই। পুরোনো বইয়ে বড় হাতের ট্যাগ দেখবেন; এখনকার প্রচলন ছোট হাতের। তবে attribute-এর মান (যেমনid) বড়-ছোট আলাদা ধরতে পারে। - ফাঁকা জায়গা গলে যায়: লেখায় দশটি space বা পাঁচটি Enter দিলেও ব্রাউজার একটি space-ই দেখায়। নতুন লাইনের জন্য তাই ট্যাগ লাগে।
- Comment:
<!-- এটি পাতায় দেখা যাবে না -->— নিজের বা সহকর্মীর জন্য নোট। তবে view source-এ সবাই দেখতে পায়, তাই পাসওয়ার্ড বা গোপন কথা কখনো নয়।
ভুল nesting-এ ব্রাউজার আসলে কী করে? নিচে “পরে” চাপুন — ব্রাউজার খোলা ট্যাগগুলো একটি স্তূপে (stack) মনে রাখে:
| এইমাত্র পড়া | |
| খোলা স্তূপ | |
| ব্রাউজারের মন্তব্য | |
| DOM-এ যা দাঁড়াল |
<b>পড়া হলো। ব্রাউজার b খুলে স্তূপে রাখল। এখন থেকে যা আসবে, তা b-এর ভেতরে।<i>আর লেখা। i খুলে স্তূপের ওপরে রাখল; “সাবধান” ঢুকল i-এর ভেতরে, আর i আছে b-এর ভেতরে। এ পর্যন্ত সব ঠিক।</b>— গোলমাল। স্তূপের একদম ওপরে i, অথচ বন্ধ করতে বলা হচ্ছে b. ব্রাউজার পাতা দেখানো বন্ধ করে না; HTML5-এর নির্দিষ্ট মেরামত-নিয়ম মেনে আগে i বন্ধ করে, তারপর b. ব্রাউজার i-কে একটি “খোলা রাখা উচিত ছিল” তালিকায় মনে রাখে —</b>আর</i>-এর মাঝে লেখা থাকলে সে নতুন একটি i খুলে সেটিকেও বাঁকা দেখাত।</i>— অনাথ ট্যাগ। বন্ধ করার মতো খোলা i আর নেই, তাই এটি নিঃশব্দে বাদ। ফলাফল দেখতে ঠিকই লাগছে — কিন্তু তা ব্রাউজারের অনুমানের ওপর দাঁড়িয়ে। জটিল পাতায় এমন অনুমান লেআউট এলোমেলো করে, আর JavaScript ভুল element খুঁজে পায়।- ঠিক লেখা।
<b><i>সাবধান</i></b>— যেটি শেষে খুলেছে (i), সেটি আগে বন্ধ। স্তূপ পরিষ্কারভাবে b › i → b → খালি। DevTools-এর Elements প্যানেলে আপনার পাতার DOM দেখলে বুঝবেন ব্রাউজার কোথাও নিজে মেরামত করেছে কি না।
৫ · একটি HTML ডকুমেন্টের কাঠামো — আর বাংলা লেখা
প্রতিটি পূর্ণ HTML পাতার একটি নির্দিষ্ট কঙ্কাল থাকে। নিচে নুসরাতের পরিচিতি-পাতার পুরো ফাইল — অংশ ৭-এ আমরা এটি ধাপে ধাপে বানাব:
<!DOCTYPE html>
<html lang="bn">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>নুসরাত জাহান — পরিচিতি</title>
</head>
<body>
<header>
<h1>নুসরাত জাহান</h1>
<p>রাজশাহী · বিজ্ঞান ক্লাবের সদস্য</p>
</header>
<main>
<section>
<h2>আমার সম্পর্কে</h2>
<p>আমি <strong>কম্পিউটার</strong> আর <em>গণিত</em> ভালোবাসি।<br>
প্রিয় সূত্র: a<sup>2</sup> + b<sup>2</sup></p>
</section>
<section>
<h2>দক্ষতা</h2>
<ul>
<li>বাংলা ও ইংরেজি টাইপিং</li>
<li>HTML <mark>শিখছি</mark></li>
</ul>
</section>
<section>
<h2>এ বছরের লক্ষ্য</h2>
<ol>
<li>নিজের ওয়েবসাইট বানানো</li>
<li>ক্লাবের জন্য একটি পাতা</li>
<li>C প্রোগ্রামিং শুরু করা</li>
</ol>
</section>
</main>
<footer>
<p><small>© ২০২৬ নুসরাত জাহান</small></p>
</footer>
</body>
</html>| অংশ | কাজ |
|---|---|
<!DOCTYPE html> | প্রথম লাইন। ট্যাগ নয়, ব্রাউজারকে ঘোষণা: “এটি আধুনিক HTML, নিয়ম মেনে আঁকো।” না দিলে ব্রাউজার পুরোনো দিনের “quirks mode”-এ চলে যায়, লেআউট অদ্ভুত হতে পারে। |
<html lang="bn"> | পুরো পাতার মূল (root) element. lang="bn" বলে পাতার ভাষা বাংলা — screen reader সঠিক উচ্চারণ বাছে, সার্চ ইঞ্জিন ভাষা বোঝে, ব্রাউজার অনুবাদ প্রস্তাব করে। |
<head> | পাতা সম্পর্কে তথ্য, যা পাতার ভেতরে দেখা যায় না: encoding, শিরোনাম, CSS ফাইলের লিংক, সার্চ ইঞ্জিনের জন্য বর্ণনা। |
<meta charset="UTF-8"> | লেখা কোন encoding-এ — head-এর একদম শুরুতে রাখুন। empty ট্যাগ। |
<meta name="viewport" …> | মোবাইলে পাতা ফোনের পর্দার মাপে দেখাতে বলে; না দিলে ফোনে পাতা খুদে দেখায়। |
<title> | ব্রাউজারের ট্যাবে, bookmark-এ আর সার্চ ফলাফলে দেখানো নাম। প্রতিটি পাতায় একটি, অর্থবহ। |
<body> | পাতায় যা দেখা যায় — লেখা, ছবি, তালিকা, লিংক — সব এখানে। একটি পাতায় একটিই body. |
বাংলা লেখা কেন ভেঙে যায়
বাংলা অক্ষর কম্পিউটারে Unicode নম্বর হিসেবে থাকে, আর ফাইলে সেই নম্বর লেখা হয় UTF-8 নিয়মে (পর্ব ০৭ আর ১৮)। ফাইল UTF-8-এ সেভ হলো, কিন্তু <meta charset="UTF-8"> নেই — তখন ব্রাউজার অনুমান করে, আর ভুল অনুমানে “আমার” হয়ে যায় আমার ধরনের হিজিবিজি। একে বলে mojibake. সমাধান দুটি একসাথে: ফাইল UTF-8-এ সেভ, আর head-এ charset ঘোষণা।
দ্বিতীয় বিষয় ফন্ট। দর্শকের কম্পিউটারে বাংলা ইউনিকোড ফন্ট (যেমন Windows-এর Nirmala UI বা Vrinda, অথবা SolaimanLipi, Kalpurush) থাকলে লেখা দেখা যাবে; যুক্তাক্ষর ঠিক দেখাতে ভালো ফন্ট লাগে। নিশ্চিত হতে ওয়েবসাইটগুলো Google Fonts-এর মতো জায়গা থেকে ওয়েব-ফন্ট লোড করে — এই পাতা যেমন Anek Bangla ব্যবহার করছে। আর মনে রাখুন, বিজয়ের পুরোনো ANSI ফন্টে লেখা বাংলা কপি করে ওয়েবে বসালে ইংরেজি হিজিবিজি দেখাবে — ওয়েবে সবসময় Unicode বাংলা (পর্ব ০৭)।
৬ · লেখা সাজানো — heading, অনুচ্ছেদ, formatting আর entity
Heading — ছয় স্তরের শিরোনাম
Heading ট্যাগ ছয়টি: <h1> থেকে <h6>. h1 সবচেয়ে গুরুত্বপূর্ণ আর ডিফল্টে সবচেয়ে বড়, h6 সবচেয়ে ছোট। বইয়ের মতো ভাবুন — h1 বইয়ের নাম, h2 অধ্যায়, h3 অধ্যায়ের ভেতরের অংশ।
- একটি h1: প্রতিটি পাতায় সাধারণত একটিই h1 — পাতাটি কী নিয়ে।
- স্তর লাফাবেন না: h2-এর পরে সরাসরি h4 নয়। screen reader ব্যবহারকারী heading-এর তালিকা দেখে পাতায় চলাফেরা করেন; সিঁড়ির ধাপ ভাঙলে তাঁরা হারিয়ে যান।
- আকারের জন্য heading নয়: লেখা বড় দেখাতে চাইলে CSS; heading মানে “এটি একটি অংশের শিরোনাম”।
অনুচ্ছেদ, লাইন ভাঙা আর আড়াআড়ি দাগ
<p>: একটি অনুচ্ছেদ। ব্রাউজার আগে-পরে ফাঁকা জায়গা রাখে।<br>: একই অনুচ্ছেদের ভেতরে শুধু নতুন লাইন — কবিতার চরণ বা ঠিকানার লাইনের জন্য। ফাঁকা জায়গা বানাতে পরপর অনেক<br>দেওয়া ভালো অভ্যাস নয়; সে কাজ CSS-এর।<hr>: আড়াআড়ি একটি দাগ — HTML5-এ এর মানে বিষয়ের পালাবদল, যেমন গল্পে দৃশ্য বদল।
Formatting ট্যাগ — চেহারা নয়, অর্থ
| ট্যাগ | ডিফল্ট চেহারা | কখন ব্যবহার |
|---|---|---|
<b> / <strong> | মোটা | b: শুধু চোখে পড়ানো (পণ্যের নাম); strong: সত্যিই গুরুত্বপূর্ণ বা জরুরি (“পাসওয়ার্ড কাউকে বলবেন না”) |
<i> / <em> | বাঁকা | i: বিদেশি শব্দ, বৈজ্ঞানিক নাম (Oryza sativa); em: কথায় জোর দেওয়া, যা বাক্যের মানে বদলায় |
<u> | নিচে দাগ | বানান ভুল চিহ্নিত করার মতো বিশেষ কাজে; সাধারণ লেখায় এড়িয়ে চলুন — পাঠক লিংক ভেবে ক্লিক করবেন |
<mark> | হাইলাইট | খোঁজা শব্দ বা প্রাসঙ্গিক অংশ দাগানো |
<small> | ছোট লেখা | কপিরাইট, শর্ত, পাদটীকা |
<sub> | H2O | নিচে বসানো লেখা — রাসায়নিক সংকেত |
<sup> | x2 | ওপরে বসানো লেখা — ঘাত, ১ম-এর মতো ক্রমবাচক চিহ্ন |
<del> / <ins> | মুছে ফেলা আর নতুন যোগ করা লেখা — যেমন ছাড়ের দাম |
b আর strong দেখতে একই, তবু আলাদা কেন? কারণ HTML-এর মূল কাজ অর্থ জানানো। strong বলে “এটি গুরুত্বপূর্ণ” — যন্ত্র এই মানে পড়তে পারে; b শুধু বলে “আলাদা করে দেখাও”। পুরোনো বইয়ে <font> আর <center> দেখবেন — HTML5-এ এগুলো বাতিল, চেহারার কাজ CSS-এর।
pre আর code
<code> বলে “এটি কম্পিউটারের কোড” — সাধারণত monospace ফন্টে দেখায়। <pre> (preformatted) এর ভেতরে লেখার space আর লাইন-ভাঙা যেমন লিখেছেন, ঠিক তেমন থাকে — গলে যায় না। কোডের টুকরো বা ASCII নকশা দেখাতে দুটো একসাথে: <pre><code>…</code></pre>.
বিশেষ চিহ্ন — entity
পাতায় যদি লিখতে চান “অনুচ্ছেদের ট্যাগ <p>” — সমস্যা! ব্রাউজার <p> দেখে ভাববে নতুন অনুচ্ছেদ। তাই এমন চিহ্ন লিখতে হয় entity দিয়ে: & দিয়ে শুরু, ; দিয়ে শেষ।
| লিখবেন | দেখাবে | কেন লাগে |
|---|---|---|
< / > | < / > | ট্যাগের চিহ্ন হিসেবে না পড়ে সাধারণ লেখা হিসেবে দেখাতে |
& | & | & নিজেই entity শুরু করে, তাই |
" | " | attribute-এর মানের ভেতরে উদ্ধৃতিচিহ্ন |
© | © | কপিরাইট চিহ্ন |
| (ভাঙে না এমন space) | “১০ কেজি”-র মাঝে লাইন না ভাঙাতে; এটি গলেও যায় না |
৳ | ৳ | যেকোনো Unicode অক্ষর তার নম্বর দিয়ে — এখানে টাকার চিহ্ন |
এবার সব একসাথে চালিয়ে দেখুন। নিচের HTML-টি একটি ছোট পাতা হিসেবে আঁকা হবে, আর ছোট একটি স্ক্রিপ্ট প্রতিটি অনুচ্ছেদ থেকে ব্রাউজার আসলে কী লেখা দেখাচ্ছে তা পড়ে জানাবে:
<p id="water">পানি H<sub>2</sub>O, সালফিউরিক অ্যাসিড H<sub>2</sub>SO<sub>4</sub></p>
<p id="math">x<sup>2</sup> + y<sup>2</sup> = r<sup>2</sup></p>
<p id="tag">অনুচ্ছেদের ট্যাগ: <p> … </p></p>
<p id="sign">© ২০২৬ · দাম ৳৫০ · চা & বিস্কুট</p>
<p id="space">১০ কেজি চাল আর ডাল</p>
<p id="bad"><b><i>সাবধান</b></i> — ভুল nesting</p>// প্রতিটি অনুচ্ছেদের লেখা (textContent) পড়ি — nbsp-কে চিহ্নিত করে
for (const p of document.querySelectorAll('p')) {
const shown = p.textContent.replace(/\u00a0/g, '[nbsp]');
console.log(p.id.padEnd(5), '|', shown);
}
const n = (sel) => document.querySelectorAll(sel).length;
console.log('sub:', n('sub'), '| sup:', n('sup'));
console.log('bad, as stored in the DOM:', document.getElementById('bad').innerHTML);Run চাপলে ওপরে পাতাটি আঁকা হয়, নিচে আসে আটটি লাইন। water | পানি H2O, সালফিউরিক অ্যাসিড H2SO4 — লেখা হিসেবে sub হারিয়ে যায়, কিন্তু পাতায় 2 আর 4 নিচে বসেছে। tag | অনুচ্ছেদের ট্যাগ: <p> … </p> — entity থাকায় নতুন অনুচ্ছেদ তৈরি হয়নি। sign | © ২০২৬ · দাম ৳৫০ · চা & বিস্কুট — তিনটি entity তিনটি চিহ্ন হয়েছে। space | ১০[nbsp]কেজি চাল আর ডাল — সাধারণ space দেখতে একই হলেও আলাদা একটি অক্ষর (U+00A0), যার জায়গায় লাইন ভাঙে না। তারপর sub: 3 | sup: 3. শেষ লাইন bad, as stored in the DOM: <b><i>সাবধান</i></b> — ভুল nesting — অংশ ৪-এর স্টেপারে যা দেখেছেন, ব্রাউজার ঠিক সেভাবেই ভুল nesting মেরামত করেছে। মুছে আবার চালিয়ে দেখুন [nbsp] চলে যায় কি না।
৭ · তালিকা — আর ধাপে ধাপে একটি পরিচিতি-পাতা
HTML-এ তিন ধরনের তালিকা আছে। প্রতিটি তালিকার ভেতরের প্রতিটি আইটেম <li> (list item) — তবে description list-এ আলাদা নিয়ম।
| তালিকা | ট্যাগ | কখন |
|---|---|---|
| Ordered list | <ol> + <li> | ক্রম গুরুত্বপূর্ণ — রান্নার ধাপ, মেধাতালিকা। নম্বর ব্রাউজার নিজে বসায়। |
| Unordered list | <ul> + <li> | ক্রম গুরুত্বহীন — বাজারের ফর্দ, দক্ষতা। বুলেট চিহ্ন। |
| Description list | <dl> + <dt> + <dd> | শব্দ আর তার ব্যাখ্যা — শব্দকোষ, প্রশ্ন-উত্তর। dt = শব্দ, dd = ব্যাখ্যা। |
<ol>-এর দুটি দরকারি attribute: type — 1 (১, ২, ৩ — ডিফল্ট), A (A, B, C), a (a, b, c), I (I, II, III), i (i, ii, iii); আর start — কত থেকে গোনা শুরু। <ol type="I" start="4"> লিখলে প্রথম আইটেম হবে IV. reversed দিলে উল্টো গোনে। আর তালিকার ভেতরে তালিকা (nested list) রাখতে হয় একটি <li>-এর ভেতরে:
<ol type="A">
<li>বিজ্ঞান মেলা
<ul>
<li>রোবট প্রদর্শনী</li>
<li>সৌরবিদ্যুতের মডেল</li>
</ul>
</li>
<li>গণিত অলিম্পিয়াড প্রস্তুতি</li>
</ol>
<dl>
<dt>CPU</dt>
<dd>কম্পিউটারের হিসাব আর নির্দেশ চালানোর অংশ</dd>
</dl>এখানে A আর B অক্ষরে দুটি আইটেম, প্রথমটির নিচে বুলেটসহ দুটি উপ-আইটেম। সাধারণ ভুল: <ul>-কে </li>-এর পরে, সরাসরি <ol>-এর ভেতরে রাখা — ol আর ul-এর সরাসরি সন্তান শুধু li হতে পারে।
বানিয়ে ফেলুন — নুসরাতের পরিচিতি-পাতা
রাজশাহীর নুসরাত বিজ্ঞান ক্লাবের সদস্য। সে নিজের একটি পাতা বানাবে। “পরে” চাপুন — প্রতি ধাপে যা যোগ হলো তা উজ্জ্বল:
- কঙ্কাল
head/body - শিরোনাম
h1, h2 - অনুচ্ছেদ
p, br - তালিকা
ul, ol - Formatting
strong, sup - Semantic
header, main
<!DOCTYPE html>
<html lang="bn">
<head>
<meta charset="UTF-8">
<title>নুসরাত জাহান — পরিচিতি</title>
</head>
<body>
</body>
</html>
<h1>নুসরাত জাহান</h1>
<h2>আমার সম্পর্কে</h2>
<h2>দক্ষতা</h2>
<h2>এ বছরের লক্ষ্য</h2>
<h1>নুসরাত জাহান</h1> <p>রাজশাহী · বিজ্ঞান ক্লাবের সদস্য</p> <h2>আমার সম্পর্কে</h2> <p>আমি কম্পিউটার আর গণিত ভালোবাসি।<br> প্রিয় সূত্র: a2 + b2</p> …
<h2>দক্ষতা</h2> <ul> <li>বাংলা ও ইংরেজি টাইপিং</li> <li>HTML শিখছি</li> </ul> <h2>এ বছরের লক্ষ্য</h2> <ol> <li>নিজের ওয়েবসাইট বানানো</li> … </ol>
<p>আমি <strong>কম্পিউটার</strong> আর <em>গণিত</em> ভালোবাসি।<br> প্রিয় সূত্র: a<sup>2</sup> + b<sup>2</sup></p> <li>HTML <mark>শিখছি</mark></li> <p><small>© ২০২৬ নুসরাত জাহান</small></p>
<header> h1 + পরিচয়ের p </header> <main> <section> আমার সম্পর্কে … </section> <section> দক্ষতা … </section> <section> এ বছরের লক্ষ্য … </section> </main> <footer> কপিরাইট </footer>
- কঙ্কাল। DOCTYPE, html, head আর body. ব্রাউজারে খুললে সাদা পাতা, কিন্তু ট্যাবে নাম দেখাচ্ছে “নুসরাত জাহান — পরিচিতি”। প্রতিটি নতুন পাতা এখান থেকেই শুরু করুন।
- আগে রূপরেখা। লেখার আগে শিরোনামগুলো — একটি h1 (পাতা কার), তিনটি h2 (তিনটি অংশ)। বই লেখার আগে সূচিপত্র বানানোর মতো। ঠিক এই রূপরেখাই screen reader আর সার্চ ইঞ্জিন পড়বে।
- অনুচ্ছেদ। প্রতিটি অংশে p. একই অনুচ্ছেদে নতুন লাইনের জন্য br. লক্ষ করুন “a2 + b2” — এখনো 2 ওপরে বসেনি।
- তালিকা। দক্ষতার ক্রম নেই — ul; লক্ষ্যগুলো অগ্রাধিকার অনুযায়ী — ol. নম্বর নিজে লিখতে হয়নি, ব্রাউজার বসিয়েছে; মাঝে একটি লক্ষ্য যোগ করলে নম্বর নিজে নিজে ঠিক হবে।
- Formatting. “কম্পিউটার” গুরুত্বপূর্ণ — strong; “গণিত”-এ জোর — em; ঘাত — sup; “শিখছি” হাইলাইট — mark; শেষে small-এ কপিরাইট, © entity দিয়ে।
- Semantic কাঠামো। পাতার মাথা header-এ, মূল বিষয় main-এ, প্রতিটি অংশ section-এ, পায়ের দিক footer-এ। দেখতে কিছুই বদলায়নি, কিন্তু এখন যন্ত্রও জানে কোন অংশ কী — অংশ ৮-এ এর গুরুত্ব দেখবেন। পূর্ণ ফাইলটি অংশ ৫-এ আছে।
নিজে চালিয়ে দেখুন — পাতাটি আঁকা আর গোনা
নিচে নুসরাতের পাতার body অংশ (অংশ ৫-এর ফাইলের body-র ভেতরের লেখা) ব্রাউজারে আঁকা হবে; প্রিভিউতে জায়গা বাঁচাতে লেখা সামান্য ছোট করা। স্ক্রিপ্টটি গুনে বলবে কোন ধরনের element কয়টি — DOM tree থেকে:
// DOM tree থেকে element গোনা — CSS selector দিয়ে খুঁজি
const count = (sel) => document.querySelectorAll(sel).length;
console.log('h1:', count('h1'), '| all headings h1-h6:', count('h1,h2,h3,h4,h5,h6'));
console.log('paragraphs <p>:', count('p'), '| line breaks <br>:', count('br'));
console.log('lists ul/ol:', count('ul,ol'), '| list items <li>:', count('li'));
console.log('formatting tags:', count('strong,em,mark,sup,sub,small'));
console.log('semantic blocks:', count('header,nav,main,section,article,footer'));
const outline = [...document.querySelectorAll('h1,h2')].map((h) => h.tagName + ' ' + h.textContent);
console.log(outline.join('\n'));Run চাপলে পাতাটি আঁকা হয়, আর আসে: h1: 1 | all headings h1-h6: 4, paragraphs <p>: 3 | line breaks <br>: 1, lists ul/ol: 2 | list items <li>: 5, formatting tags: 6 (strong, em, mark, small আর দুটি sup), semantic blocks: 6 (header, main, তিনটি section, footer). শেষে পাতার রূপরেখা: H1 নুসরাত জাহান, তারপর তিনটি H2 … লাইন — এটাই screen reader-এর heading তালিকা। ব্রাউজার ট্যাগের নাম বড় হাতে (H1) জানায় — HTML case-insensitive বলেই। এবার প্রিভিউর ধাঁচে একটি <h3> বা নতুন <li> কল্পনা করুন — কোন সংখ্যা কত বাড়ত?
৮ · CSS-এর এক ঝলক, semantic HTML, validator আর সাধারণ ভুল
চেহারা বদলানো — style attribute থেকে আলাদা CSS ফাইল
যেকোনো element-এ style attribute দিয়ে সরাসরি চেহারা বলা যায় — একে বলে inline style:
<h1 style="color: darkgreen; text-align: center;">বিজ্ঞান ক্লাব</h1>
<p style="font-size: 18px;">প্রতি বৃহস্পতিবার বিকেল ৪টায় সভা।</p>color লেখার রং, font-size আকার, text-align বাঁ-ডান-মাঝে বসানো। কিন্তু পঞ্চাশ পাতার সাইটে প্রতিটি h1-এ একই style লেখা ঝামেলার — রং বদলাতে পঞ্চাশ জায়গায় হাত দিতে হবে। তাই পেশাদার সাইটে চেহারার নিয়ম থাকে আলাদা একটি .css ফাইলে, যা head-এ <link rel="stylesheet" href="style.css"> দিয়ে যুক্ত হয় — এক ফাইল বদলালে পুরো সাইট বদলায়। এই কারণেই বলা হয় “HTML-এ অর্থ, CSS-এ চেহারা”।
Semantic HTML — অংশের নাম দিয়ে পাতা সাজানো
আগে পাতা সাজানো হতো শুধু অর্থহীন <div> বাক্স দিয়ে। HTML5 দিয়েছে অর্থবহ ট্যাগ — semantic HTML:
| ট্যাগ | মানে |
|---|---|
<header> | পাতা বা অংশের মাথা — লোগো, নাম, পরিচিতি |
<nav> | প্রধান মেনু — অন্য পাতায় যাওয়ার লিংকের দল |
<main> | পাতার মূল বিষয়; একটি পাতায় একটি |
<section> | বিষয়ভিত্তিক একটি অংশ, সাধারণত নিজের heading-সহ |
<article> | নিজে নিজে সম্পূর্ণ লেখা — খবর, ব্লগ পোস্ট, মন্তব্য |
<aside> | পাশের প্রাসঙ্গিক তথ্য |
<footer> | পায়ের দিক — কপিরাইট, যোগাযোগ |
দেখতে <div> আর <section>-এ কোনো পার্থক্য নেই। লাভটা যন্ত্রের। Screen reader — দৃষ্টিপ্রতিবন্ধী মানুষ যে সফটওয়্যারে পাতা শুনে পড়েন — এক চাপে “মূল অংশে যাও” বা “পরের heading”-এ যেতে দেয়; semantic ট্যাগ আর ঠিক heading না থাকলে তাঁদের পুরো পাতা শুরু থেকে শুনতে হয়। একে বলে accessibility. সার্চ ইঞ্জিনও কাঠামো দেখে বোঝে কোনটি মূল লেখা, কোনটি মেনু — যা SEO-তে সাহায্য করে। পর্ব ৩৭-এ ছবির alt text দিয়ে এই আলোচনা আরও এগোবে।
যাচাই করুন — W3C validator
ব্রাউজার ভুল ক্ষমা করে, তাই ভুল চোখে পড়ে না। HTML validator সেই ভুল খুঁজে দেয়। validator.w3.org খুলে “Validate by File Upload” বা “Validate by Direct Input” বেছে ফাইল দিন — প্রতিটি ভুলের লাইন নম্বর আর কারণ দেখাবে, যেমন “End tag b violates nesting rules”. লাল Error আগে ঠিক করুন, তারপর Warning পড়ুন।
নতুনদের সাধারণ ভুল
| ভুল | যা ঘটে | সমাধান |
|---|---|---|
শেষের ট্যাগ ভুলে যাওয়া (<b> খুলে বন্ধ না করা) | বাকি পুরো পাতা মোটা হয়ে যায় | শুরুর ট্যাগ লিখেই শেষেরটি লিখে ফেলুন, তারপর মাঝে লেখা |
| ভুল nesting | ব্রাউজারের অনুমানে মেরামত, অপ্রত্যাশিত লেআউট | পরে খোলা, আগে বন্ধ; validator |
| charset নেই বা ফাইল ANSI-তে সেভ | বাংলা হিজিবিজি | <meta charset="UTF-8"> আর UTF-8-এ সেভ |
attribute-এর উদ্ধৃতিচিহ্ন বন্ধ না করা (class="note>) | পরের অনেকটা লেখা গায়েব | প্রতিটি " জোড়ায় জোড়ায় |
ফাইলের নাম index.html.txt | ব্রাউজারে কোড হিসেবে খোলে বা Notepad-এ খোলে | extension দেখানো চালু করে নাম ঠিক |
| বড় দেখাতে heading, ফাঁকা দিতে অনেক br | পাতার কাঠামো মিথ্যা হয়ে যায় | অর্থের জন্য ট্যাগ, চেহারার জন্য CSS |
পরীক্ষা ও ইন্টারভিউতে: HSC ICT-র চতুর্থ অধ্যায় আর চাকরির পরীক্ষায় এ ধরনের প্রশ্ন প্রায়ই আসে —
HTML-এর পূর্ণরূপ? HyperText Markup Language.
empty ট্যাগের উদাহরণ? <br>, <hr>, <img>, <meta> — এদের শেষের ট্যাগ নেই।
সবচেয়ে বড় heading ট্যাগ? <h1>; সবচেয়ে ছোট <h6>.
লাইন ভাঙার ট্যাগ? <br>; আর H2O লিখতে <sub>, x2 লিখতে <sup>.
attribute কী, ফাইলের extension কী? attribute হলো শুরুর ট্যাগে নাম="মান" রূপে বাড়তি তথ্য; HTML ফাইলের extension .html বা .htm.
আরও গভীরে: লিংক, ছবি, টেবিল আর ফর্ম আসছে পর্ব ৩৭-এ। এর বাইরে — CSS-এর box model, Flexbox, Grid, মোবাইলের জন্য responsive design আর accessibility-র পূর্ণ নিয়ম — শিখতে আমাদের HTML & CSS কোর্স দেখুন। DOM tree JavaScript দিয়ে কীভাবে বদলানো হয়, তা আছে JavaScript কোর্সের DOM পর্বে।
৯ · AI-এর যুগে — সেকেন্ডে HTML, কিন্তু বুঝে নেওয়ার দায় আপনার
AI চ্যাটবটকে “আমার একটি পরিচিতি-পাতা বানিয়ে দাও” বললে কয়েক সেকেন্ডে পুরো HTML পেয়ে যাবেন — প্রায়ই চলনসইও। তবু চারটি জায়গায় চোখ রাখুন। এক, বৈধতা: AI মাঝে মাঝে বন্ধ না করা ট্যাগ, বাতিল ট্যাগ (<center>, <font>) বা পুরোনো ধাঁচের কোড দেয়। দুই, semantics: সব কিছু <div> দিয়ে মুড়ে দেয়, বা লেখা বড় করতে heading ব্যবহার করে। তিন, accessibility: একাধিক h1, স্তর লাফানো heading, ছবিতে alt না থাকা, lang না থাকা। চার, বোঝা: যে ট্যাগ আপনি বোঝেন না, তা আপনার পাতায় থাকলে ভুল হলে ঠিকও করতে পারবেন না। AI-এর বানানো তথ্যও (hallucination) — যেমন বানানো পুরস্কার বা ঠিকানা — মুছে দিন।
নিচের prompt-টি কপি করে নিজের তথ্য বসান। AI-কে শুধু লিখে দিতে নয়, শেখাতেও বলা হয়েছে:
AI-এর লেখা HTML — যাচাইয়ের চেকলিস্ট
ভাবনার প্রশ্ন
প্রতিটি প্রশ্ন নিয়ে নিজে কিছুক্ষণ ভাবুন — তারপর “→ উত্তর” চাপুন। HTML-এর প্রতিটি “অদ্ভুত” নিয়মের পেছনে আছে মানুষ, প্রতিযোগিতা আর আপসের গল্প।
প্র ০১পৃথিবীর প্রথম ওয়েব পেজ ১৯৯১ সালে CERN-এ তৈরি হয়েছিল — আর সেটি আজও খোলা যায়। সেই পাতা আমাদের কী শেখায়?
১৯৮০-এর দশকের শেষে CERN ছিল হাজারো বিজ্ঞানীর মিলনস্থল — নানা দেশের মানুষ, নানা ধরনের কম্পিউটার, আর তথ্য ছড়িয়ে আছে অসংখ্য নথিতে। কে কোন যন্ত্রে কী রেখেছে, খুঁজে পাওয়া ছিল কঠিন। ব্রিটিশ বিজ্ঞানী Tim Berners-Lee ১৯৮৯ সালের মার্চে একটি প্রস্তাব লেখেন: নথিগুলোকে hypertext লিংক দিয়ে জুড়ে দেওয়া হোক, যাতে যেকোনো কম্পিউটার থেকে এক ক্লিকে আরেক নথিতে যাওয়া যায়। তাঁর বস প্রস্তাবের কোণে লিখেছিলেন “Vague but exciting” — অস্পষ্ট, কিন্তু রোমাঞ্চকর। ১৯৯০ সালের শেষ দিকে Berners-Lee একটি NeXT কম্পিউটারে তিনটি জিনিস বানান: পাতা লেখার ভাষা HTML, পাতা আনা-নেওয়ার নিয়ম HTTP, আর পাতা পড়া-লেখার প্রথম ব্রাউজার-কাম-editor (নাম WorldWideWeb). সেই কম্পিউটারই ছিল প্রথম web server.
প্রথম ওয়েবসাইট info.cern.ch ১৯৯১ সালে বাইরের দুনিয়ার জন্য খোলে। পাতাটি ছিল নিজেই ওয়েবের পরিচিতি — “World Wide Web কী, কীভাবে ব্রাউজার পাবেন, কীভাবে নিজের সার্ভার বানাবেন”। কোনো ছবি নেই, রং নেই — শুধু শিরোনাম, অনুচ্ছেদ, তালিকা আর লিংক। মূল ফাইলটি পরে হারিয়ে যায়; ২০১৩ সালে CERN পুরোনো কপি খুঁজে সেটি আগের ঠিকানায় ফিরিয়ে আনে, আর আজও তা খোলা যায়। তিন দশক পরের আধুনিক ব্রাউজার সেই পাতা ঠিকঠাক দেখায় — HTML-এর পেছনের দিকে মিল রাখার (backward compatibility) প্রতিজ্ঞার জীবন্ত প্রমাণ।
আরেকটি সিদ্ধান্ত ওয়েবকে পৃথিবীজোড়া বানিয়েছে: ১৯৯৩ সালে CERN ঘোষণা দেয়, ওয়েবের সফটওয়্যার সবার জন্য বিনা মূল্যে, কোনো রয়্যালটি ছাড়াই। একই সময়ে আরেকটি ব্যবস্থা Gopher-এর মালিক বিশ্ববিদ্যালয় লাইসেন্স ফি নেওয়ার ইঙ্গিত দিলে অনেকে সেখান থেকে সরে ওয়েবে আসেন। Berners-Lee নিজে কখনো ওয়েবের পেটেন্ট নেননি; ১৯৯৪ সালে তিনি মান রক্ষার জন্য W3C প্রতিষ্ঠা করেন।
প্রথম পাতাটি আজ দেখলে চোখে পড়ে, আপনি এই পর্বে যা শিখলেন — heading, paragraph, list, link — সেটুকুই ছিল তার সবকিছু। জটিলতা পরে এসেছে, কিন্তু ভিত একই।
মূল উপলব্ধি: ওয়েব জিতেছিল প্রযুক্তির জাঁকজমকে নয়, সরলতা আর উন্মুক্ততায় — যে কেউ টেক্সট ফাইলে কয়েকটি ট্যাগ লিখে পৃথিবীর সামনে প্রকাশ করতে পারতেন, কারও অনুমতি বা টাকা ছাড়াই। আর পুরোনো পাতা না ভাঙার প্রতিজ্ঞা ওয়েবকে মানবজাতির স্মৃতির খাতা বানিয়েছে।
প্র ০২HTML-এর পূর্বপুরুষ SGML ছিল কঠোর নিয়মের ভাষা। তাহলে HTML এত “ক্ষমাশীল” হলো কেন — আর “tag soup” কী?
১৯৬০-এর দশকের শেষে IBM-এ Charles Goldfarb, Edward Mosher আর Raymond Lorie একটি ভাবনা নিয়ে কাজ করেন: আইনি দলিল বা প্রযুক্তি-ম্যানুয়ালে লেখা হবে অর্থ চিহ্নিত করে — “এটি শিরোনাম”, “এটি অনুচ্ছেদ” — চেহারা নয়; চেহারা ঠিক করবে আলাদা নিয়ম। তাঁদের GML থেকে বড় হয়ে ১৯৮৬ সালে আন্তর্জাতিক মান হয় SGML (Standard Generalized Markup Language, ISO 8879). SGML-এ প্রতিটি নথির ধরন একটি DTD-তে কঠোরভাবে বর্ণিত থাকত, আর নিয়ম ভাঙলে নথি অবৈধ। CERN-এও SGML ব্যবহার হতো, তাই Berners-Lee HTML-এর ট্যাগগুলোর চেহারা — কোণ-বন্ধনী, শুরু আর শেষের ট্যাগ — সেখান থেকে নেন।
কিন্তু তিনি একটি জায়গায় SGML-এর পথ ছাড়েন: শুরুর ব্রাউজারগুলো ভুল পেলে থেমে যেত না। যা বোঝে, দেখায়; যা বোঝে না, এড়িয়ে যায়। এই “উদার হও” নীতি ইন্টারনেটের পুরোনো দর্শনের সাথেও মেলে — যা গ্রহণ করো তাতে উদার, যা পাঠাও তাতে কঠোর (Jon Postel-এর নামে পরিচিত robustness principle). ফল: স্কুলছাত্র থেকে দোকানদার, যে কেউ আধা-শুদ্ধ HTML লিখেও পাতা প্রকাশ করতে পারলেন। ওয়েবের বিস্ফোরণের পেছনে এই ক্ষমাশীলতা বড় কারণ।
মূল্যও দিতে হলো। ১৯৯০-এর দশকে কোটি কোটি পাতা তৈরি হলো বন্ধ না করা ট্যাগ, ভুল nesting আর মনগড়া attribute নিয়ে — এই জগাখিচুড়িকে ডাকা হয় “tag soup”. প্রতিটি ব্রাউজার নিজের মতো করে ভুল মেরামত করত, আর সেই মেরামতের নিয়ম কোথাও লেখা ছিল না। একই পাতা এক ব্রাউজারে ঠিক, আরেকটিতে ভাঙা। নতুন ব্রাউজার বানাতে হলে প্রতিদ্বন্দ্বীর গোপন মেরামত-কৌশল উল্টো-প্রকৌশলে বের করতে হতো — বছরের পর বছরের খাটুনি।
HTML5-এর সবচেয়ে বড় অবদানগুলোর একটি ঠিক এখানে: প্রথমবারের মতো parsing-এর পুরো নিয়ম লিখে দেওয়া হলো — ভুলসহ যেকোনো HTML থেকে কোন DOM tree তৈরি হবে, অক্ষরে অক্ষরে। এই পর্বের স্টেপারে <b><i>…</b></i>-এর মেরামত সেই নিয়মেরই অংশ, তাই Chrome, Edge আর Firefox এখন একই ফল দেয়।
মূল উপলব্ধি: ক্ষমাশীলতা একটি প্রযুক্তিকে দ্রুত ছড়াতে সাহায্য করে, কিন্তু অলিখিত ক্ষমা বিশৃঙ্খলা আনে। সমাধান ছিল কঠোর হওয়া নয় — ক্ষমার নিয়মটাকেই লিখিত মান বানানো।
প্র ০৩১৯৯০-এর দশকের “browser war”-এ Netscape আর Internet Explorer নিজেদের ট্যাগ বানাত। মানহীন সেই প্রতিযোগিতা ওয়েবকে কী দিল আর কী কেড়ে নিল?
১৯৯৩ সালে Mosaic ব্রাউজার পাতার ভেতরে ছবি দেখাতে শুরু করে — <img> ট্যাগটি এসেছিল তাদের দল থেকেই, কোনো মান-সংস্থার অনুমোদন ছাড়া। সেই দলের কয়েকজন পরে গড়েন Netscape, যার Navigator (১৯৯৪) দ্রুত বাজারের সিংহভাগ দখল করে। ১৯৯৫ সালে Microsoft আনে Internet Explorer, আর Windows-এর সাথে বিনা মূল্যে দিতে শুরু করে। শুরু হয় প্রথম “browser war”.
যুদ্ধের অস্ত্র ছিল নতুন ফিচার। Netscape আনল <blink> (লেখা জ্বলে-নেভে), Internet Explorer আনল <marquee> (লেখা স্ক্রিন জুড়ে দৌড়ায়)। <font> দিয়ে রং আর ফন্ট, টেবিল দিয়ে পুরো পাতার নকশা — চেহারা আর অর্থ মিশে একাকার। ওয়েবসাইটে লেখা থাকত “Best viewed in Netscape” বা “Best viewed in Internet Explorer” — অর্থাৎ অন্য ব্রাউজারে ভাঙবে। ডেভেলপারদের একই সাইট দুই-তিনবার লিখতে হতো। W3C (১৯৯৪) মান লিখত, কিন্তু অনেক সময় তা ছিল ব্রাউজারগুলোর ইতিমধ্যে করে ফেলা কাজের দলিল মাত্র; HTML 3.2 (১৯৯৭) তেমনই একটি আপস।
লাভও ছিল: প্রতিযোগিতায় ওয়েব দ্রুত ছবি, টেবিল, ফর্ম, স্ক্রিপ্ট আর স্টাইল পেল; JavaScript (১৯৯৫) আর CSS-এর জন্মও এই সময়ে। কিন্তু ক্ষতিও বড়। Netscape হেরে যাওয়ার পর Internet Explorer ২০০০-এর দশকের শুরুতে বাজারের বিশাল অংশ দখল করে বসে, আর IE 6 প্রায় পাঁচ বছর বড় কোনো হালনাগাদ ছাড়াই পড়ে থাকে — ওয়েবের অগ্রগতি থমকে যায়। Netscape-এর কোড থেকে জন্ম নেওয়া Mozilla আর পরে Firefox, তারপর Safari আর Chrome মিলে আবার প্রতিযোগিতা ফেরায় — এবার মান মেনে চলার প্রতিশ্রুতিতে। ১৯৯৮ সালে Web Standards Project নামের ডেভেলপার-দল ব্রাউজারগুলোকে মান মানতে চাপ দেওয়ার আন্দোলনও শুরু করেছিল।
মূল উপলব্ধি: প্রতিযোগিতা উদ্ভাবন আনে, কিন্তু সাধারণ মান ছাড়া তা সবার জন্য খরচ বাড়ায় আর একচেটিয়া হলে অগ্রগতি থামায়। আজ আপনার লেখা HTML যে সব ব্রাউজারে একই রকম চলে, তা বহু বছরের লড়াইয়ের ফসল।
প্র ০৪W3C চেয়েছিল HTML-কে কঠোর XHTML বানাতে, কিন্তু জিতল HTML5. নিখুঁত নিয়মের পরিকল্পনা কেন হারল?
২০০০ সালের আশপাশে W3C-র দিকনির্দেশনা ছিল স্পষ্ট: ভবিষ্যৎ XML-এর। XML (১৯৯৮) হলো SGML-এর সরল কিন্তু কঠোর উত্তরসূরি — প্রতিটি ট্যাগ বন্ধ করতে হবে, ছোট হাতের অক্ষর, attribute-এ উদ্ধৃতিচিহ্ন বাধ্যতামূলক। সেই নিয়মে HTML-কে নতুন করে লিখে হলো XHTML 1.0 (২০০০)। পরিকল্পনা ছিল আরও বড়: XHTML 2.0, যা পুরোনো HTML-এর সাথে মিল রাখবে না, আর যার তত্ত্ব অনুযায়ী XML হিসেবে পাঠানো পাতায় একটি ভুল থাকলেই ব্রাউজার পুরো পাতার বদলে শুধু একটি ত্রুটির বার্তা দেখাবে (“draconian error handling”). Firefox-এ সেই হলুদ ত্রুটি-পাতাকে ডেভেলপাররা মজা করে বলতেন “Yellow Screen of Death”.
বাস্তবে বেশিরভাগ “XHTML” সাইট আসলে সাধারণ HTML হিসেবেই পাঠানো হতো, কারণ Internet Explorer আসল XHTML বুঝত না; কঠোরতা ছিল কাগজে। আর পৃথিবীর কোটি কোটি পুরোনো পাতা, বিজ্ঞাপনের কোড, ব্যবহারকারীর লেখা মন্তব্য — কোনোটিই নিখুঁত ছিল না। একটি ভুলে পুরো পাতা গায়েব হলে দোষ পড়ত ব্রাউজারের ঘাড়ে, আর ব্যবহারকারী অন্য ব্রাউজারে চলে যেতেন।
২০০৪ সালে W3C-র এক কর্মশালায় Opera আর Mozilla প্রস্তাব দেয় — HTML-কে ভাঙা নয়, ধাপে ধাপে বাড়ানো হোক: ফর্ম, ভিডিও, অ্যাপের মতো নতুন ক্ষমতা। প্রস্তাব ভোটে হারে। সেই বছরই Apple, Mozilla আর Opera মিলে গড়ে WHATWG; সম্পাদক Ian Hickson. তাদের নীতি: যা ব্রাউজারগুলো সত্যিই বানাবে, শুধু তা-ই মানে লেখা; পুরোনো পাতা ভাঙা চলবে না; আর ভুল HTML কীভাবে পড়তে হবে তার নিখুঁত নিয়ম। ২০০৭ সালে W3C এই কাজ গ্রহণ করে, ২০০৯ সালে XHTML 2.0-র কাজ বন্ধ হয়, আর ২০১৪ সালের অক্টোবরে HTML5 W3C-র Recommendation হয়। দুই সংস্থা কিছুদিন সমান্তরাল সংস্করণ রাখার পর ২০১৯ সালে সমঝোতা করে — WHATWG-এর living standard-ই একমাত্র HTML.
মূল উপলব্ধি: নিখুঁত নকশা যদি বাস্তবের অগোছালো ব্যবহারকারী আর পুরোনো উত্তরাধিকারকে অস্বীকার করে, তবে তা টেকে না। HTML5 জিতেছিল কারণ সে ওয়েবকে যেমন আছে তেমন মেনে নিয়ে সামনে এগিয়েছিল।
প্র ০৫দৃষ্টিপ্রতিবন্ধী মানুষ কীভাবে ওয়েব “পড়েন”? semantic HTML তাঁদের জন্য কেন রাস্তার সংকেতের মতো — আর view source কীভাবে হয়েছিল ওয়েবের “খোলা ক্লাসরুম”?
Screen reader — যেমন Windows-এর জন্য বিনা মূল্যের, ওপেন সোর্স NVDA (যা ২০০৬ সালে দুই দৃষ্টিপ্রতিবন্ধী ডেভেলপার শুরু করেন), বাণিজ্যিক JAWS, বা iPhone-এর VoiceOver আর Android-এর TalkBack — পাতার লেখা জোরে পড়ে শোনায় বা ব্রেইল ডিসপ্লেতে পাঠায়। কিন্তু চোখ এক নজরে যা বোঝে — “এটি মেনু, এটি মূল খবর, এটি বিজ্ঞাপন” — কান তা বোঝে না, যদি না HTML নিজে বলে দেয়। তাই screen reader ব্যবহারকারীরা কিবোর্ড দিয়ে heading থেকে heading-এ লাফান, “main”-এ চলে যান, তালিকা শুনে জানেন কয়টি আইটেম। সব কিছু যদি অর্থহীন <div> হয়, তাঁদের প্রতিবার পুরো মেনু শুরু থেকে শুনতে হয় — বাজারের প্রতিটি দোকানের নাম শুনে তবে কাঙ্ক্ষিত দোকানে পৌঁছানোর মতো। W3C-র Web Accessibility Initiative ১৯৯৯ সালে প্রথম WCAG নির্দেশিকা দেয়; আজ অনেক দেশে সরকারি সাইটে এই নিয়ম মানা আইনি বাধ্যবাধকতা। তবু বড় জরিপগুলোতে দেখা যায়, জনপ্রিয় সাইটের হোম পেজের বেশিরভাগেই ধরা পড়ার মতো accessibility ত্রুটি থাকে — alt না থাকা ছবি, লেবেলহীন ফর্ম, ভাঙা heading.
দ্বিতীয় গল্পটি শেখার। শুরুর ব্রাউজারগুলোতেই “View Source” ছিল। কোনো সাইটের সুন্দর নকশা দেখলে যে কেউ এক ক্লিকে তার পুরো HTML দেখতে পারতেন — কীভাবে টেবিল বানানো, কোন ট্যাগে কী। ১৯৯০-এর দশকে লাখো মানুষ কোনো কোর্স ছাড়াই এভাবে ওয়েব বানানো শিখেছেন: অন্যের পাতা খুলে দেখা, কপি করে বদলে দেখা। বই বন্ধ, কিন্তু প্রতিটি দোকানের দরজা খোলা — এক বিশাল উন্মুক্ত শ্রেণিকক্ষ। আজকের পাতা অনেক জটিল, কোড প্রায়ই যন্ত্রে বানানো আর সংকুচিত, তবু Ctrl+U আর DevTools সেই ঐতিহ্য বাঁচিয়ে রেখেছে।
দুটি গল্প এক জায়গায় মেলে: HTML শুধু পর্দার ছবি নয়, একটি পাঠযোগ্য কাঠামো। যে পাতা যন্ত্রের কাছে অর্থবহ, তা মানুষের কাছেও — দৃষ্টিপ্রতিবন্ধী পাঠক, নতুন শিক্ষার্থী, সার্চ ইঞ্জিন, এমনকি AI — বেশি বোধগম্য।
মূল উপলব্ধি: ঠিক ট্যাগ বেছে নেওয়া কোনো সৌন্দর্যের বিলাস নয় — এটি সব মানুষের জন্য ওয়েব খোলা রাখার কাজ। আর ওয়েব যে শেখার জন্য উন্মুক্ত, তার সুবিধা নিন: প্রিয় সাইটের source খুলে দেখুন, কোন ট্যাগ চেনেন।
অনুশীলন
প্রথম দুটি খাতা-কলমের কাজ, তৃতীয়টি নিজের কম্পিউটারে, চতুর্থটি একটি ছোট পরিকল্পনা।
-
ভুল খুঁজুন: নিচের অংশে অন্তত পাঁচটি ভুল আছে। খুঁজে ঠিক করে লিখুন।
<html> <head><title>ক্লাব</title></head> <body> <h1>বিজ্ঞান ক্লাব</h1> <h1>আমাদের কথা</h1> <p>সভা <b><i>বৃহস্পতিবার</b></i> <ul><li>রোবট<li>মডেল</ul> <br></br> </body>(১) প্রথমে
<!DOCTYPE html>নেই। (২)<html>-এlang="bn"নেই, আর head-এ<meta charset="UTF-8">নেই — বাংলা ভাঙতে পারে। (৩) দুটি h1 — দ্বিতীয়টি হওয়া উচিত h2. (৪) ভুল nesting — লিখতে হবে<b><i>বৃহস্পতিবার</i></b>, আর অনুচ্ছেদের</p>নেই। (৫)</br>ভুল — br empty ট্যাগ। (৬) শেষে</html>নেই। li-এর শেষ ট্যাগ বাদ দেওয়া HTML-এ আসলে বৈধ (ব্রাউজার নিজে বন্ধ করে), তবে স্পষ্টতার জন্য</li>লেখাই ভালো অভ্যাস। ব্রাউজার এই ফাইলও দেখাবে — validator-এ দিলে প্রতিটি ভুল লাইন নম্বরসহ পাবেন। -
বিজ্ঞানের খাতা HTML-এ: HTML লিখুন যাতে পাতায় দেখায় — (ক) সালফিউরিক অ্যাসিড H2SO4, (খ) (a + b)2 = a2 + 2ab + b2, (গ) পরীক্ষাগারের তিনটি নিরাপত্তা নিয়ম রোমান সংখ্যায় (I, II, III), (ঘ) “<hr> ট্যাগ দাগ টানে” লেখাটি হুবহু।
(ক)
<p>H<sub>2</sub>SO<sub>4</sub></p>
(খ)<p>(a + b)<sup>2</sup> = a<sup>2</sup> + 2ab + b<sup>2</sup></p>
(গ)<ol type="I"><li>চশমা পরুন</li><li>অ্যাসিডে পানি নয়, পানিতে অ্যাসিড</li><li>কাজ শেষে হাত ধুন</li></ol>
(ঘ)<p><hr> ট্যাগ দাগ টানে</p>— entity ছাড়া লিখলে ব্রাউজার সত্যিই একটি দাগ টেনে দিত। নম্বর নিজে লিখবেন না; type আর start-এর কাজ ব্রাউজারকে করতে দিন। -
নিজের কম্পিউটারে: Notepad-এ অংশ ৫-এর পুরো ফাইলটি টাইপ করে
index.htmlনামে UTF-8-এ সেভ করুন, ব্রাউজারে খুলুন। তারপর (ক) Ctrl+U আর F12 দুটোই দেখুন; (খ) একটি</strong>মুছে আবার খুলুন; (গ) charset-এর লাইনটি মুছে “Save as” দিয়ে Encoding ANSI বেছে সেভ করুন। প্রতিবার কী দেখলেন?(ক) View source-এ আপনার লেখা ফাইল হুবহু; DevTools-এর Elements-এ একটি গাছ, যেখানে প্রতিটি element ভাঁজ খোলা-বন্ধ করা যায়, আর মাউস রাখলে পাতায় বাক্স রঙিন হয়। (খ) “কম্পিউটার”-এর পরের লেখাও মোটা হয়ে যাবে, কারণ ব্রাউজার জানে না strong কোথায় শেষ। শুধু ওই অনুচ্ছেদ নয় — HTML5-এর মেরামত-নিয়মে ব্রাউজার পরের অংশগুলোতেও strong আবার খুলে দেয়, তাই পাতার বাকি লেখাও মোটা দেখাতে পারে; DevTools-এ দেখবেন পরের element-গুলোর ভেতরেও নতুন strong ঢুকে গেছে। (গ) ANSI-তে বাংলা অক্ষর রাখার জায়গাই নেই — Notepad সতর্ক করবে যে কিছু অক্ষর হারাবে, আর সেভের পর বাংলার জায়গায় প্রশ্নবোধক চিহ্ন দেখবেন। শিক্ষা: ফাইল সবসময় UTF-8, আর charset ঘোষণা বাধ্যতামূলক মনে করুন।
-
ক্লাবের সাইটের পরিকল্পনা: আপনার এলাকার একটি পাঠাগার বা ক্লাবের জন্য ওয়েবসাইটের পরিকল্পনা লিখুন — উদ্দেশ্য, দর্শক, কোন কাঠামো (লিনিয়ার, ট্রি, নেটওয়ার্ক না মিশ্র), পাতার তালিকা, আর হোম পেজের semantic রূপরেখা (কোন অংশ কোন ট্যাগে)।
নমুনা: উদ্দেশ্য — পাঠাগারের সময়সূচি, নতুন বই আর সদস্য হওয়ার নিয়ম জানানো। দর্শক — এলাকার ছাত্রছাত্রী আর বয়স্ক পাঠক, বেশিরভাগ মোবাইলে; তাই বড় লেখা আর সহজ মেনু। কাঠামো — হায়ারার্কিক্যাল: হোম → আমাদের কথা, বইয়ের তালিকা (→ গল্প, বিজ্ঞান, ইতিহাস), সদস্য হোন, যোগাযোগ; সাথে প্রতিটি পাতা থেকে মেনুতে ফেরার লিংক, তাই কার্যত মিশ্র। হোম পেজ:
header(নাম, লোগো) →nav(পাঁচটি লিংক) →main-এর ভেতরে একটি h1 আর তিনটিsection(নতুন বই — ul; খোলার সময় — dl; সদস্য হওয়ার ধাপ — ol) →footer(ঠিকানা, ফোন, কপিরাইট)। লিংক আর ছবি যোগের পদ্ধতি পর্ব ৩৭-এ।
নিজেকে যাচাই করুন
ভুল হলে কারণসহ ব্যাখ্যা পাবেন, আবার চেষ্টাও করতে পারবেন।
ক্রমনিজের কম্পিউটারে প্রথম HTML পাতা বানানোর ধাপগুলো প্রথম থেকে শেষ সাজান (▲▼ চেপে সরান)
- 📝 Notepad বা VS Code-এর মতো text editor খোলা
- 🦴 DOCTYPE, html, head আর body দিয়ে কঙ্কাল লেখা
- 🔠 body-তে heading, অনুচ্ছেদ আর তালিকা যোগ করা
- 💾 index.html নামে UTF-8-এ সেভ করা
- 🌐 ব্রাউজারে খুলে দেখা, DevTools-এ DOM মিলিয়ে নেওয়া
- ✅ W3C validator-এ যাচাই করে ভুল ঠিক করা
HTML-এর পূর্ণরূপ কোনটি?
- High Text Machine Language
- HyperText Markup Language
- HyperText Programming Language
- HyperText Transfer Language
নিচের কোনটি empty (single) ট্যাগ, যার কোনো শেষের ট্যাগ নেই?
- <p>
- <b>
- <br>
- <li>
HTML-এ সবচেয়ে বড় (সবচেয়ে গুরুত্বপূর্ণ) heading ট্যাগ কোনটি?
- <h1>
- <h6>
- <head>
- <h0>
ওয়েব পেজে পানির সংকেত H₂O সঠিকভাবে লিখতে “2”-কে কোন ট্যাগের ভেতরে রাখতে হবে?
- <sup>
- <small>
- <pre>
- <sub>
একটি HTML পাতায় বাংলা লেখা ভেঙে হিজিবিজি দেখাচ্ছে। head অংশে কোনটি যোগ করা সবচেয়ে জরুরি?
- <title>বাংলা</title>
- <meta charset="UTF-8">
- <html lang="bn">
- <font face="SolaimanLipi">
কোন কোডটি এমন একটি ক্রমিক তালিকা তৈরি করবে, যার আইটেম রোমান সংখ্যায় (I, II, III) চিহ্নিত?
- <ul type="I">
- <ol start="I">
- <ol type="I">
- <dl type="I">
শব্দকোষ
লেখার মধ্যে ডটেড দাগ দেওয়া শব্দে মাউস রাখুন বা চাপুন — অর্থ দেখাবে। এই পর্বের সব নতুন শব্দ এখানে একসাথে:
মনে রাখুন
- ওয়েব পেজ = টেক্সট ফাইল + ট্যাগের লেবেল। ব্রাউজার parse করে DOM tree বানায়, তারপর render করে। HTML = কাঠামো ও অর্থ, CSS = চেহারা, JavaScript = আচরণ।
- Element = শুরুর ট্যাগ + বিষয়বস্তু + শেষের ট্যাগ; attribute থাকে শুরুর ট্যাগে
name="value"রূপে। empty ট্যাগ: br, hr, img, meta. যেটি পরে খোলা, সেটি আগে বন্ধ। - কঙ্কাল:
<!DOCTYPE html>→<html lang="bn">→ head (meta charset="UTF-8", viewport, title) → body. UTF-8-এ সেভ + charset = ঠিক বাংলা। - লেখা: h1–h6 (একটি h1, স্তর না লাফিয়ে), p, br, hr; strong/em অর্থে, b/i চেহারায়; sub = H2O, sup = x2; বিশেষ চিহ্নে entity (
<,&,©, ). - তালিকা আর কাঠামো: ol (type, start), ul, dl; নেস্টেড তালিকা li-এর ভেতরে। header, nav, main, section, article, footer — accessibility আর SEO-র জন্য। শেষে validator.
আরও পড়ুন · ABCL TECH-এ আপনার পরবর্তী পদক্ষেপ
- পর্ব ৩৭ · HTML-এ লিংক, ছবি, টেবিল আর ফর্মপরবর্তী পর্বপাতা জোড়া, ছবি, টেবিল আর ফর্ম।
- পর্ব ৩৪ · ডোমেইন, হোস্টিং আর ওয়েবসাইট প্রকাশসম্পর্কিত পর্ববানানো পাতা ইন্টারনেটে তোলার পুরো পথ।
- কম্পিউটার ফান্ডামেন্টালস ও ICT · কোর্স হোম৫৫টি পর্বপুরো কোর্সের রোডম্যাপ — কোন পর্ব কখন।
- HTML & CSSগভীরে যানCSS, লেআউট, responsive design আর পূর্ণ ওয়েব ডিজাইন।
- JavaScript প্রোগ্রামিংপাশের ট্র্যাকDOM বদলে পাতাকে প্রাণবন্ত করা।