div ба span
Semantic элементүүдийг сурсны дараа <div> ба <span> хэзээ хэрэглэх нь олонд тодорхойгүй байдаг. Энэ хичээлд тэдгээрийн зөв хэрэглээг тодруулна.
<div> — блок бүлэглэгч
<div> нь block-level элемент — шинэ мөрнөөс эхэлж, боломжит бүх өргөнийг эзэлнэ. Ямар ч семантик утга агуулдаггүй — зөвхөн бүлэглэх зориулалттай.
<!-- Блок элемент — дараагийнхаас доош шилжинэ -->
<div>Нэгдүгээр блок</div>
<div>Хоёрдугаар блок</div>
<span> — дотоод бүлэглэгч
<span> нь inline элемент — мөрийн дотор урсана, шинэ мөр үүсгэхгүй. Мөн ямар ч утга агуулдаггүй.
<!-- Inline — мөрийн дотор үлдэнэ -->
<p>
Энэ бол <span>онцлох</span> үг агуулсан параграф.
</p>
Block ба inline харьцуулалт
<!-- div — блок: шинэ мөр эхэлнэ -->
<div style="background: #fee;">Эхний div</div>
<div style="background: #efe;">Хоёрдугаар div</div>
<!-- span — inline: мөрийн дотор урсана -->
<p>
Монгол нийслэл
<span style="color: red;">Улаанбаатар</span>
хот юм.
</p>
Хэзээ <div> ашиглах вэ?
<div> нь semantic хувилбар байхгүй үед л зөв сонголт:
<!-- Карт grid — тохирох semantic элемент байхгүй -->
<div class="card-grid">
<article class="card">...</article>
<article class="card">...</article>
<article class="card">...</article>
</div>
<!-- Modal — UI бүрдэл, semantic элемент байхгүй -->
<div class="modal" role="dialog" aria-modal="true">
<div class="modal-header">
<h2>Баталгаажуулах</h2>
</div>
<div class="modal-body">
<p>Та энэ үйлдлийг хийхдээ итгэлтэй байна уу?</p>
</div>
<div class="modal-footer">
<button type="button">Тийм</button>
<button type="button">Үгүй</button>
</div>
</div>
<!-- CSS layout зорилгоор бүлэглэх -->
<div class="flex-container">
<main>...</main>
<aside>...</aside>
</div>
Хэзээ <span> ашиглах вэ?
<span> нь текстийн нэг хэсгийг style хийх эсвэл JavaScript-ээр хянах шаардлагатай үед:
<!-- Үнийг онцлох -->
<p>Нийт дүн: <span class="price">15,000₮</span></p>
<!-- Тоог динамикаар өөрчлөх (JavaScript-ийн зорилттой) -->
<p>Таны XP: <span id="xp-count">0</span></p>
<!-- Нэр томьёог өнгөөр ялгах -->
<p>
HTML нь <span class="keyword">HyperText Markup Language</span>-ийн товчлол.
</p>
<!-- Тэмдэгт эсвэл icon -->
<button>
<span class="icon">✓</span>
Хадгалах
</button>
Semantic элементийн эрэмбэ
Шийдвэр гаргах дараалал:
1. Semantic элемент байна уу? → Тийм бол тэрийг ашиглана
header, nav, main, footer, article, section, aside,
h1-h6, p, ul, ol, a, img, form, table...
2. Semantic хувилбар байхгүй үү?
→ Block зорилго бол <div>
→ Inline зорилго бол <span>
Практик жишээ
<!-- БУРУУ — semantic элемент байтал div ашиглах -->
<div class="navigation">
<div class="nav-item"><a href="/">Нүүр</a></div>
</div>
<!-- ЗӨВ -->
<nav>
<a href="/">Нүүр</a>
</nav>
<!-- БУРУУ — p байтал div ашиглах -->
<div class="text">Энэ параграф мөн.</div>
<!-- ЗӨВ -->
<p>Энэ параграф мөн.</p>
<!-- ЗӨВ — div-д тохирох semantic хувилбар байхгүй -->
<div class="card-grid">
<article>...</article>
</div>
<!-- ЗӨВ — span-д тохирох inline semantic хувилбар байхгүй -->
<p>Үлдсэн хугацаа: <span id="timer">05:00</span></p>
CSS-тэй хослуулах
<div> ба <span>-ийн гол хэрэглээ нь CSS болон JavaScript-тай хосолсон ажиллагаа:
<!-- class → CSS-д style хийх -->
<div class="hero-section">
<h1>Монгол хэлний код сургалт</h1>
<p class="hero-subtitle">Үнэгүй, Монгол хэлээр</p>
<a href="/courses" class="btn btn-primary">Эхлэх</a>
</div>
<!-- id → JavaScript-д ашиглах -->
<span id="live-count">0</span> хэрэглэгч онлайн байна
Нийтлэг алдаа
<!-- БУРУУ — div-ийн div-ийн div... хэт гүн давхарлалт -->
<div>
<div>
<div>
<div>
<p>Текст</p>
</div>
</div>
</div>
</div>
<!-- ЗӨВ — шаардлагагүй div-уудыг арилгах -->
<p>Текст</p>
<!-- БУРУУ — span-д block элемент оруулах -->
<span>
<h2>Гарчиг</h2> ← HTML-д хүчингүй
</span>
<!-- ЗӨВ — span дотор зөвхөн inline агуулга -->
<span class="highlight">Онцлох текст</span>
Дараагийн хичээлд:
HTML-ийн global attribute-уудыг үзнэ: id, class, style, title, lang, hidden, tabindex, contenteditable, data-* гэх мэт бүх элементэд ашиглаж болдог attribute-уудын хэрэглээ.