راهنمای HTML : دسته بندی محتوا
بیشتر عناصر HTML عضو یک یا چند دسته محتوا هستند - این دستهها عناصری را که ویژگیهای مشترکی دارند، گروهبندی میکنند. این یک گروهبندی آزاد است (در واقع رابطهای بین عناصر این دستهها ایجاد نمیکند)، اما به تعریف و توصیف رفتار مشترک دستهها و قوانین مرتبط با آنها کمک میکند. این امکان وجود دارد که عناصر عضو هیچ یک از این دستهها نباشند.
دستههای محتوا برای تعریف مدل محتوای عناصر استفاده میشوند، به عبارت دیگر، آنچه هر عنصر میتواند به عنوان فرزند بپذیرد. به عنوان مثال، عنصر فقط میتواند شامل محتوای عبارتی باشد، در حالی که عنصر میتواند شامل محتوای جریانی باشد. برخی از عناصر، مانند ، دارای مدل محتوای شفاف هستند.
هفت دسته محتوای اصلی وجود دارد که میتوان آنها را با نمودار ون در زیر خلاصه کرد:
عناصر متعلق به دسته محتوای فراداده، نحوه نمایش یا رفتار بقیه سند را تغییر میدهند، به اسناد دیگر پیوند ایجاد میکنند یا اطلاعات خارج از محدوده دیگری را منتقل میکنند. هر چیزی که در
محتوای جریانی (flow content) یک دسته بندی گسترده است که شامل اکثر عناصری میشود که میتوانند درون عنصر قرار گیرند، از جمله عناصر عنوان، عناصر بخشبندی، عناصر عبارتبندی، عناصر جاسازی، عناصر تعاملی و عناصر مرتبط با فرم. همچنین شامل گرههای متنی (اما نه آنهایی که فقط از کاراکترهای فاصله سفید تشکیل شدهاند) نیز میشود. عناصر جریان عبارتند از:
<a>
<abbr>
<address>
<article>
<aside>
<audio>
<b>
<bdi>
<bdo>
<blockquote>
<br>
<button>
<canvas>
<cite>
<code>
<data>
<datalist>
<del>
<details>
<dfn>
<dialog>
<div>
<dl>
<em>
<embed>
<fieldset>
<figure>
<footer>
<form>
<geolocation>
<h1>-<h6>
<header>
<hgroup>
<hr>
<i>
<iframe>
<img>
<input>
<ins>
<kbd>
<label>
<main>
<map>
<mark>
<math>
<menu>
<meter>
<nav>
<noscript> <object>
<ol>
<output>
<p>
<picture>
<pre>
<progress>
<q>
<ruby>
<s>
<samp>
<script>
<search>
<select>
<slot>
<small>
<span>
<strong>
<sub>
<sup>
<svg>
<table>
<template>
<textarea>
<time>
<u>
<ul>
<var>
<video>
<wbr>
عناصر سفارشی مستقل
متن ساده
چند عنصر دیگر به این دسته تعلق دارند، اما فقط در صورتی که یک شرط خاص برقرار باشد:
، اگر از نوادگان یک عنصر باشد
، اگر ویژگی itemprop وجود داشته باشد
، اگر ویژگی itemprop وجود داشته باشد
محتوای بخش بندی کردن، زیرمجموعهای از محتوای جریانی، بخشی را در طرح کلی فعلی ایجاد میکند که دامنه عناصر و را تعریف میکند.
عناصر بخشبندی عبارتند از:
<article>
<aside>
<nav>
<section>
محتوای عنوان، زیرمجموعهای از محتوای جریان، عنوان یک بخش را تعریف میکند. این تعریف هم برای بخشهایی که توسط عناصر محتوای بخشبندی صریح مشخص شدهاند و هم برای بخشهایی که به طور ضمنی توسط خود محتوای عنوان تعریف شدهاند، اعمال میشود.
عناصر عنوان عبارتند از:
<h1>-<h6>
<hgroup>
توجه: اگرچه احتمالاً حاوی محتوای عنوان است، اما خود محتوای عنوان نیست.
محتوای جملهبندی شده phrase
محتوای عبارتبندیشده، زیرمجموعهای از محتوای جریانی، به متن و نشانهگذاری درون یک سند اشاره دارد. توالی محتوای عبارتبندیشده، پاراگرافها را تشکیل میدهد. عناصر عبارتبندی عبارتند از:
<abbr>
<audio>
<b>
<bdi>
<bdo>
<br>
<button>
<canvas>
<cite>
<code>
<data>
<datalist>
<dfn>
<em>
<embed>
<i>
<iframe>
<img>
<input>
<kbd>
<label>
<mark>
<math>
<meter>
<noscript>
<object>
<output>
<picture>
<progress>
<q>
<ruby>
<s>
<samp>
<script>
<select>
<slot>
<small>
<span>
<strong>
<sub>
<sup>
<svg>
<template>
<textarea>
<time>
<u>
<var>
<video>
<wbr>
عناصر سفارشی مستقل متن ساده
چند عنصر دیگر نیز به این دسته تعلق دارند، اما فقط در صورت برآورده شدن یک شرط خاص:
، اگر فقط شامل محتوای عبارتی باشد
، اگر از نوادگان یک عنصر باشد
، اگر فقط شامل محتوای عبارتی باشد
، اگر فقط شامل محتوای عبارتی باشد
، اگر ویژگی itemprop وجود داشته باشد
، اگر فقط شامل محتوای عبارتی باشد
، اگر ویژگی itemprop وجود داشته باشد
محتوای جاسازیشده، زیرمجموعهای از محتوای جریانی است که منبع دیگری را وارد میکند یا محتوایی را از زبان نشانهگذاری یا فضای نام دیگری در سند درج میکند.
عناصر محتوای جاسازیشده عبارتند از:
<audio>
<canvas>
<embed>
<iframe>
<img>
<math>
<object>
<picture>
<svg>
<video>
محتوای تعاملی interactive
محتوای تعاملی، زیرمجموعهای از محتوای جریانی، شامل عناصری است که بهطور خاص برای تعامل با کاربر طراحی شدهاند.
عناصر محتوای تعاملی عبارتند از:
<button>
<details>
<embed>
<iframe>
<label>
<select>
<textarea>
برخی از عناصر فقط تحت شرایط خاص به این دسته تعلق دارند:
، اگر ویژگی href وجود داشته باشد
، اگر ویژگی controls وجود داشته باشد
، اگر ویژگی usemap وجود داشته باشد
، اگر ویژگی type در حالت پنهان نباشد
، اگر ویژگی usemap وجود داشته باشد
، اگر ویژگی controls وجود داشته باشد
محتوای ملموس، محتوایی است که نه خالی است و نه پنهان؛ بلکه محتوایی است که رندر شده و واقعی است. محتوای ملموس برای تعریف مدلهای محتوا استفاده نمیشود، بلکه برای تعریف یک قانون کلی استفاده میشود: عناصری که مدل محتوای آنها اجازه هرگونه محتوای جریانی یا محتوای عبارتی را میدهد، باید حداقل یک گره در محتوای خود داشته باشند که محتوای ملموس باشد و ویژگی پنهان مشخص شده را نداشته باشد.
محتوای ملموس برای تعریف مدلهای محتوا استفاده نمیشود، بلکه برای تعریف یک قانون کلی استفاده میشود: عناصری که مدل محتوای آنها اجازه هرگونه محتوای جریانی یا محتوای عبارتی را میدهد، باید حداقل یک گره در محتوای خود داشته باشند که محتوای ملموس باشد و ویژگی پنهان مشخص شده را نداشته باشد. عناصر قابل لمس عبارتند از:
<a>
<abbr>
<address>
<article>
<aside>
<b>
<bdi>
<bdo>
<blockquote>
<button>
<canvas>
<cite>
<code>
<data>
<del>
<details>
<dfn>
<div>
<em>
<embed>
<fieldset>
<footer>
<figure>
<form>
<iframe>
<img>
<ins>
<kbd>
<label>
<main>
<map>
<mark>
<math>
<meter>
<object>
<p>
<picture>
<pre>
<progress>
<q>
<ruby>
<s>
<samp>
<search>
<section>
<select>
<small>
<span>
<strong>
<sub>
<sup>
<svg>
<table>
<textarea>
<time>
<u>
<var>
<video>
عناصر سفارشی مستقل
متن ساده که فضای خالی بین عناصر نیست
برخی از عناصر فقط تحت شرایط خاص به این دسته تعلق دارند:
، اگر ویژگی controls وجود داشته باشد
، اگر فرزندان عنصر حداقل شامل یک گروه name-value باشند
، اگر ویژگی type در حالت پنهان نباشد
، اگر فرزندان آن حداقل شامل یک عنصر باشند
، اگر فرزندان آن حداقل شامل یک عنصر باشند
چندین عنصر عضو هیچ دسته محتوایی نیستند. این موارد عبارتند از:
<caption>
<col>
<colgroup>
<dd>
<dt>
<figcaption>
<head>
<html>
<legend>
<li>
<optgroup>
<opam>
<rb>
<rp>
<rt>
<rtc>
<source>
<tbody>
<tfoot>
<th>
<thead>
<tr>
<track>
عناصر پشتیبان اسکریپت، عناصری هستند که مستقیماً در خروجی رندر شده یک سند نقشی ندارند. در عوض، آنها برای پشتیبانی از اسکریپتها عمل میکنند، یا با شامل کردن یا مشخص کردن مستقیم کد اسکریپت یا با مشخص کردن دادههایی که توسط اسکریپتها استفاده خواهند شد. تقریباً همه عناصر، از جمله آنهایی که فقط عناصر خاصی را میپذیرند (مانند که عناصر را میپذیرد)، میتوانند شامل عناصر پشتیبان اسکریپت باشند.
عناصر پشتیبان اسکریپت عبارتند از:
<script>
<template>
محتوای مرتبط با فرم زیرمجموعهای از محتوای جریان است که شامل عناصری است که دارای یک مالک فرم هستند و میتوانند در هر جایی که محتوای جریان مورد انتظار است، استفاده شوند. مالک فرم یا عنصر حاوی است یا که شناسه آن در ویژگی فرم عنصر مشخص شده است.
عناصر مرتبط با فرم عبارتند از:
<button>
<fieldset>
<input>
<object>
<output>
<select>
<textarea>
<img>
این دسته شامل چندین زیردسته است:
- listed
عناصری که در مجموعههای و فهرست شدهاند. شامل و میشود.
- submittable
عناصری که میتوانند برای ساخت مجموعه دادههای فرم هنگام ارسال فرم استفاده شوند. شامل و میشود.
- resettable
عناصری که میتوانند هنگام بازنشانی فرم تحت تأثیر قرار گیرند. شامل و میشود.
- autocapitalize-and-autocorrect-inheriting
عناصری که ویژگیهای autocapitalize و autocorrect را از صاحب فرم خود به ارث میبرند. شامل و میشود.
- labelable
عناصری که میتوانند با عناصر مرتبط شوند. شامل (همه انواع به جز hidden)، علاوه بر دستهبندیهای محتوای ذکر شده، مدل محتوای یک عنصر نیز میتواند به عنوان "شفاف" تعریف شود. اگر محتوای مجاز یک عنصر X "شفاف" باشد، به والد X نگاه میکنیم. محتوای مجاز والد X را با دستهبندیهای محتوای X تقاطع میدهیم و نتیجه همان چیزی است که "شفاف" در این زمینه به آن معنی است. اگر والد X نیز یک مدل محتوای شفاف داشته باشد، درخت را تا رسیدن به یک مدل محتوای غیرشفاف ادامه میدهیم. وقتی چنین والدی وجود نداشته باشد، "شفاف" به معنای "محتوای جریان" است.
به عنوان مثال، یک عنصر محتوای عبارتبندی شده را میپذیرد. عنصر زمانی از نوع محتوای عبارتبندی شده است که فقط حاوی محتوای عبارتبندی شده باشد. بنابراین، یک عنصر میتواند درون یک عنصر قرار گیرد. محتوای مجاز عنصر "شفاف" است که وقتی در تو در تو قرار میگیرد به معنای "محتوای عبارتبندی شده" است. با این حال، عناصر محتوای عبارتبندی شده نیستند. بنابراین، یک عنصر نمیتواند درون این عنصر تودرتو باشد، حتی اگر هر دو عنصر و بتوانند درون باشند و "شفاف" باشد.
شفاف یک مدل محتوا است، نه یک دسته محتوا، بنابراین فقط تعریف میکند که یک عنصر میتواند شامل چه چیزی باشد، نه اینکه عنصر کجا میتواند قرار گیرد. یعنی، هنگام تعیین مجوز فرزند یک عنصر، نمیتوانید «از میان» فرزندهای شفاف «ببینید». به عنوان مثال، یک عنصر فقط عناصر و عناصر پشتیبانیکننده اسکریپت را میپذیرد و یا را مجاز نمیداند، حتی اگر فقط شامل عناصر باشد.