একটি HTML ফরম্যাটার এমন একটি টুল যা HTML ফরম্যাটিং (যাকে বিউটিফিকেশন বা প্রিটি-প্রিন্টিংও বলা হয়) সম্পাদন করে: এটি HTML মার্কআপে সামঞ্জস্যপূর্ণ ইন্ডেন্টেশন, লাইন ব্রেক ও স্পেসিং যোগ করে যাতে এর নেস্টিং কাঠামো দৃশ্যমান হয়। ব্রাউজার HTML রেন্ডার করার সময় হোয়াইটস্পেস উপেক্ষা করে, তাই একটি একক লাইনে লেখা ডকুমেন্ট সতর্কভাবে ইন্ডেন্ট করা ডকুমেন্টের মতোই আউটপুট তৈরি করে। পার্থক্যটা পুরোটাই মানুষের জন্য: ফরম্যাট করা HTML পড়া, ডিবাগ করা এবং রক্ষণাবেক্ষণ করা সহজ।
HTML স্পেসিফিকেশন (WHATWG কর্তৃক HTML Living Standard হিসেবে রক্ষণাবেক্ষণ করা হয়) ১১০-এরও বেশি এলিমেন্ট সংজ্ঞায়িত করে, প্রতিটির নিজস্ব কন্টেন্ট মডেল রয়েছে। <div>, <section> ও <article>-এর মতো ব্লক-লেভেল এলিমেন্ট সাধারণত নতুন লাইনে শুরু হয় এবং তাদের চাইল্ডগুলো ইন্ডেন্ট করে। <br>, <img> ও <input>-এর মতো ভয়েড এলিমেন্টের কোনো ক্লোজিং ট্যাগ বা ইন্ডেন্ট করার জন্য চাইল্ড নেই। একটি ভালো ফরম্যাটার এই পার্থক্যগুলো বোঝে এবং প্রতিটি ট্যাগের পরে অন্ধভাবে হোয়াইটস্পেস যোগ করার পরিবর্তে সেই অনুযায়ী ইন্ডেন্টেশন নিয়ম প্রয়োগ করে।
ফরম্যাটিং সবচেয়ে বেশি গুরুত্বপূর্ণ উন্নয়নের সময়। মিনিফাইড বা মেশিন-জেনারেটেড HTML, CMS প্ল্যাটফর্মের আউটপুট এবং ব্রাউজার DevTools থেকে কপি করা মার্কআপ প্রায়ই একটি একক ঘন লাইন হিসেবে আসে। সঠিক ইন্ডেন্টেশন ছাড়া একটি অনুপস্থিত ক্লোজিং ট্যাগ খুঁজে বের করা বা গভীরভাবে নেস্টেড কাঠামো অনুসরণ করা অনেক বেশি সময় লাগে। একটি HTML ফরম্যাটার একটি ধাপেই সেই টেক্সটের দেয়ালকে একটি সুসংগঠিত ইন্ডেন্টেড, পাঠযোগ্য ট্রি কাঠামোতে রূপান্তরিত করে।
এই HTML ফরম্যাটার কেন ব্যবহার করবেন?
যেকোনো HTML পেস্ট করুন এবং তাৎক্ষণিকভাবে সঠিকভাবে ইন্ডেন্ট করা আউটপুট পান। কোনো প্লাগইন ইনস্টল করতে হবে না, কোনো কনফিগারেশন ফাইল লিখতে হবে না, কোনো অ্যাকাউন্ট তৈরি করতে হবে না।
⚡
তাৎক্ষণিক ফরম্যাটিং
টাইপ করার সাথে সাথে আউটপুট আপডেট হয়। যেকোনো উৎস থেকে মিনিফাইড HTML পেস্ট করুন এবং কোনো বিল্ড স্টেপ বা CLI কমান্ডের জন্য অপেক্ষা না করেই ইন্ডেন্ট করা ফলাফল দেখুন।
🔒
প্রাইভেসি সুরক্ষিত
সমস্ত ফরম্যাটিং JavaScript ব্যবহার করে আপনার ব্রাউজারেই চলে। আপনার HTML কখনো আপনার ডিভাইস ছেড়ে যায় না, তাই API কি, টোকেন বা অভ্যন্তরীণ URL সম্বলিত মার্কআপ পেস্ট করা নিরাপদ।
🎯
কনফিগারযোগ্য ইন্ডেন্টেশন
এক ক্লিকেই ২-স্পেস ও ৪-স্পেস ইন্ডেন্টেশনের মধ্যে পরিবর্তন করুন। ফরম্যাটার প্রতিটি নেস্টিং স্তরে সামঞ্জস্যপূর্ণভাবে আপনার পছন্দ প্রয়োগ করে।
📋
এক ক্লিকে কপি
একটি বোতামে ফরম্যাট করা আউটপুট ক্লিপবোর্ডে কপি করুন। সরাসরি আপনার এডিটর, PR রিভিউ বা ডকুমেন্টেশনে পেস্ট করুন।
HTML ফরম্যাটারের ব্যবহারের ক্ষেত্র
ফ্রন্টেন্ড ডেভেলপমেন্ট
ভার্সন কন্ট্রোলে কমিট করার আগে HTML টেমপ্লেট ফরম্যাট করুন। সামঞ্জস্যপূর্ণ ইন্ডেন্টেশন পুল রিকোয়েস্টে ডিফ নয়েজ কমায় এবং কোড রিভিউ দ্রুত করে।
ব্যাকেন্ড টেমপ্লেট ডিবাগিং
Django, Rails বা PHP-এর মতো ফ্রেমওয়ার্ক থেকে সার্ভার-রেন্ডার করা HTML প্রায়ই অ-ইন্ডেন্টেড মার্কআপ আউটপুট করে। নেস্টিং যাচাই ও বন্ধ না করা ট্যাগ খুঁজে পেতে রেন্ডার করা আউটপুট এখানে পেস্ট করুন।
DevOps ও CI পাইপলাইন
বিল্ড টুল সুগঠিত HTML তৈরি করছে কিনা যাচাই করুন। ভিজ্যুয়াল পরীক্ষার আগে স্ট্যাটিক সাইট জেনারেটর বা HTML ইমেইল বিল্ডারের আউটপুট ফরম্যাট করুন।
QA ও পরীক্ষা
পরীক্ষার রানের মধ্যে HTML আউটপুটের ফরম্যাট করা স্ন্যাপশট তুলনা করুন। সঠিক ইন্ডেন্টেশন কোনো পৃষ্ঠার দুটি সংস্করণ ডিফ করার সময় কাঠামোগত পার্থক্য স্পষ্ট করে তোলে।
ডেটা ইঞ্জিনিয়ারিং
ওয়েব স্ক্র্যাপিং পাইপলাইন কাঁচা HTML তৈরি করে যা পরিদর্শন করতে হয়। এক্সট্রাকশন সিলেক্টর লেখার আগে DOM কাঠামো বোঝার জন্য স্ক্র্যাপ করা পৃষ্ঠাগুলো ফরম্যাট করুন।
HTML শেখা
শিক্ষার্থীরা যেকোনো ওয়েবসাইটের সোর্স কোড পেস্ট করে দেখতে পারেন কীভাবে এলিমেন্টগুলো একে অপরের ভেতরে নেস্ট হয়। ফরম্যাট করা ট্রি ভিউ ট্যাগগুলোর মধ্যে প্যারেন্ট-চাইল্ড সম্পর্ক স্পষ্ট করে।
HTML ইন্ডেন্টেশনের নিয়ম
একটি HTML ফরম্যাটার প্রতিটি এলিমেন্ট ধরনকে কীভাবে পরিচালনা করে তা নির্ভর করে তার কন্টেন্ট মডেলের উপর। নিচের সারণিতে সাধারণ এলিমেন্ট এবং ২-স্পেস ও ৪-স্পেস সেটিংসে সেগুলো কীভাবে ইন্ডেন্ট হয় তা দেখানো হয়েছে। উভয়ই ব্রাউজারে একই রেন্ডারিং তৈরি করে; পার্থক্য শুধু পঠনযোগ্যতায়।
ট্যাগ
এলিমেন্টের ধরন
২-স্পেস ইন্ডেন্ট
৪-স্পেস ইন্ডেন্ট
<div>
Block element
New line, indent children
New line, indent children
<span>
Inline element
New line, indent children
Inline with parent text
<br>
Void element
New line, same level
New line, same level
<img>
Void element
New line, same level
New line, same level
<!-- -->
Comment
New line, same level
New line, same level
<!DOCTYPE>
Document type
First line, no indent
First line, no indent
<script>
Script block
New line, preserve inner
New line, preserve inner
<pre>
Preformatted
New line, preserve inner
New line, preserve inner
ফরম্যাটার বনাম মিনিফায়ার বনাম লিন্টার
এই তিনটি টুল HTML-এ কাজ করে কিন্তু ভিন্ন উদ্দেশ্য পূরণ করে। ফরম্যাটিং ও মিনিফিকেশন বিপরীত রূপান্তর; লিন্টিং হোয়াইটস্পেস পরিবর্তন না করেই ত্রুটি পরীক্ষা করে।
ফরম্যাটার (এই টুল)
HTML পাঠযোগ্য করতে ইন্ডেন্টেশন ও লাইন ব্রেক যোগ করে। DOM কাঠামো বা কোনো কন্টেন্ট পরিবর্তন করে না। আউটপুট ব্রাউজারে ইনপুটের মতোই রেন্ডার হয়।
মিনিফায়ার
ফাইলের আকার কমাতে হোয়াইটস্পেস, মন্তব্য ও ঐচ্ছিক ক্লোজিং ট্যাগ সরিয়ে দেয়। ফরম্যাটিংয়ের বিপরীত অপারেশন। পড়া বা সম্পাদনার জন্য নয়, প্রোডাকশন বিল্ডের জন্য ব্যবহার করুন।
লিন্টার (HTMLHint / W3C)
অনুপস্থিত alt অ্যাট্রিবিউট, ডুপ্লিকেট ID বা deprecated ট্যাগের মতো ত্রুটির জন্য HTML পরীক্ষা করে। সমস্যা রিপোর্ট করে কিন্তু ইন্ডেন্টেশন বা ফরম্যাটিং পরিবর্তন করে না।
কোড উদাহরণ
জনপ্রিয় ভাষা ও টুলে প্রোগ্রামেটিক্যালি HTML কীভাবে ফরম্যাট করা যায়:
package main
import (
"bytes"
"fmt"
"golang.org/x/net/html"
"strings"
)
func main() {
ugly := "<div><p>Hello</p></div>"
doc, _ := html.Parse(strings.NewReader(ugly))
var buf bytes.Buffer
html.Render(&buf, doc)
fmt.Println(buf.String())
// renders normalized HTML — pair with indent logic for pretty output
}
CLI (Prettier)
# Format a single file in place
npx prettier --write index.html
# Format and print to stdout (pipe-friendly)
npx prettier --parser html index.html
# Format with 4-space indentation
npx prettier --tab-width 4 --parser html index.html
# Format HTML from stdin
echo '<div><p>Hello</p></div>' | npx prettier --parser html
প্রায়শই জিজ্ঞাসিত প্রশ্ন
HTML ফরম্যাটিং ও HTML ভ্যালিডেশনের মধ্যে পার্থক্য কী?
ফরম্যাটিং মার্কআপ পাঠযোগ্য করতে ইন্ডেন্টেশন ও লাইন ব্রেক যোগ করে। ভ্যালিডেশন পরীক্ষা করে মার্কআপটি HTML স্পেসিফিকেশনের সাথে সামঞ্জস্যপূর্ণ কিনা — যেমন প্রয়োজনীয় অ্যাট্রিবিউট অনুপস্থিত বা ভুলভাবে নেস্টেড এলিমেন্ট। একটি ফরম্যাটার ত্রুটি ঠিক করে না; একটি ভ্যালিডেটর হোয়াইটস্পেস পরিবর্তন করে না।
HTML ফরম্যাট করলে কি পৃষ্ঠার রেন্ডারিং পরিবর্তন হয়?
বেশিরভাগ ক্ষেত্রে না। ব্রাউজার রেন্ডার করার সময় হোয়াইটস্পেসের ক্রম একটি একক স্পেসে সংকুচিত করে। ব্যতিক্রম হলো white-space: pre বা অনুরূপ CSS নিয়ম সহ এলিমেন্ট, এবং <pre> ও <textarea> এলিমেন্ট যেখানে হোয়াইটস্পেস তাৎপর্যপূর্ণ। একটি সঠিকভাবে তৈরি ফরম্যাটার এই এলিমেন্টগুলোর কন্টেন্ট হুবহু সংরক্ষণ করে।
HTML ইন্ডেন্টেশনের জন্য কতটি স্পেস ব্যবহার করা উচিত?
দুই স্পেস ও চার স্পেস উভয়ই প্রচলিত। Google-এর HTML/CSS স্টাইল গাইড ২ স্পেস সুপারিশ করে। Prettier ফরম্যাটার ডিফল্ট হিসেবে ২ স্পেস ব্যবহার করে। চার স্পেস Python-এর PEP 8 কনভেনশনের সাথে মিলে এবং ভাষাজুড়ে সামঞ্জস্যের জন্য কিছু দল পছন্দ করে। একটি বেছে নিন এবং ফরম্যাটার বা এডিটর কনফিগ দিয়ে প্রয়োগ করুন।
আমি কি এম্বেডেড JavaScript বা CSS সহ HTML ফরম্যাট করতে পারি?
এই টুল HTML কাঠামো (ট্যাগ ও অ্যাট্রিবিউট) ফরম্যাট করে। ইনলাইন <script> ও <style> ব্লকগুলো হুবহু সংরক্ষিত থাকে। এম্বেডেড JavaScript ও CSS ফরম্যাট করার জন্য Prettier-এর মতো একটি আলাদা ফরম্যাটার ব্যবহার করুন, যা একটি একক পাসে তিনটি ভাষাই পার্স ও ফরম্যাট করতে পারে।
HTML-এ ট্যাব বনাম স্পেস কি এখনো বিতর্কিত?
বেশিরভাগ HTML স্টাইল গাইড ও ফরম্যাটার ডিফল্ট হিসেবে স্পেস ব্যবহার করে। ২০২৩ সালের Stack Overflow Developer Survey দেখায় ওয়েব ডেভেলপমেন্টে প্রায় ৫৫% উত্তরদাতা স্পেস ব্যবহার করেন। ট্যাবের অ্যাক্সেসিবিলিটি সুবিধা আছে — প্রতিটি ডেভেলপার তাদের পছন্দের ভিজ্যুয়াল প্রস্থ নির্ধারণ করতে পারেন। উভয়ই কাজ করে; প্রকল্পের মধ্যে সামঞ্জস্য পছন্দের চেয়ে বেশি গুরুত্বপূর্ণ।
ফরম্যাটিংয়ের পরে কেন আমার HTML ভিন্ন দেখাচ্ছে?
ফরম্যাটার হোয়াইটস্পেস বর্ণ (স্পেস ও নিউলাইন) যোগ করে যা মূল মার্কআপে ছিল না। এটি সোর্স কোডের চেহারা পরিবর্তন করে কিন্তু রেন্ডার করা আউটপুট পরিবর্তন করে না। যদি আপনি ব্রাউজারে ভিজ্যুয়াল পার্থক্য দেখেন, তা সম্ভবত ইনলাইন এলিমেন্টের কারণে যেখানে যোগ করা হোয়াইটস্পেস ট্যাগের মধ্যে একটি অতিরিক্ত স্পেস বর্ণ তৈরি করে — এটি CSS দিয়ে সমাধান করা যায় (প্যারেন্টে font-size: 0, বা flexbox লেআউট)।
একটি দলজুড়ে সামঞ্জস্যপূর্ণ HTML ফরম্যাটিং কীভাবে নিশ্চিত করবেন?
আপনার CI পাইপলাইনে একটি স্বয়ংক্রিয় ফরম্যাটার ব্যবহার করুন। Prettier HTML সমর্থন করে এবং Husky বা lint-staged-এর মাধ্যমে প্রি-কমিট হুক হিসেবে চালানো যায়। আপনার রিপোজিটরিতে tabWidth, printWidth ও htmlWhitespaceSensitivity নির্দিষ্ট করে একটি .prettierrc কনফিগ ফাইল যোগ করুন। তাহলে প্রতিটি কমিট প্রতিটি ডেভেলপারের এডিটর সেটিংস নির্বিশেষে একই ফরম্যাটিং নিয়ম অনুসরণ করবে।
HTML ফরম্যাটার ও HTML বিউটিফায়ারের মধ্যে পার্থক্য কী?
এগুলো একই অপারেশন। 'ফরম্যাটার' ও 'বিউটিফায়ার' উভয়ই HTML মার্কআপে ইন্ডেন্টেশন ও লাইন ব্রেক যোগ করাকে বোঝায়। কিছু টুল 'beautify' (js-beautify) ব্যবহার করে, অন্যরা 'format' (Prettier) ব্যবহার করে। আউটপুট একই: সঠিকভাবে ইন্ডেন্ট করা, মানব-পাঠযোগ্য HTML। 'প্রিটি-প্রিন্ট' আরেকটি সমার্থক শব্দ যা ডকুমেন্টেশন ও অনুসন্ধান কোয়েরিতে সাধারণত ব্যবহৃত হয়।