HTML ръководство: XHTML 1.0 Strict справочник

v111p F1-bg Webmisc XHTML CSS Server-side

# XHTML ръководство, уроци и tutorial по HTML

За този документ: Предназначение, Състояние (Какво ново?), Авторски права, Начин на ползване. Помогни!

Фон: бял жълт св. сив сив
Шрифт: Arial Verdana sans-serif serif
Размер на шрифта: по подразбиране (CSS2) 12 14 16 18

Благодаря за всички коментари! Имайте в предвид че няма ли коментари - няма и ъпдейти!

## За този документ

### Предназначение

HTML справочник. XHTML уроци подходящи както за начинаещи, така и за напреднали.

### Състояние

Трябва да се добавят/завършат секциите за таблици и карти-изображения. И разбира се, трябва да се поправят всички грешки и неточности. :)

#### Какво ново?

12 ноември 2007
  Промяна в секция "Авторски права": уточнение, че можете да посочите източника ако искате.
10 септември 2007
  Промяна в секция "Авторски права": вече не се изисква сочене на v111p.com като източник.
11 януари 2005
  Публикуване в WWW!

### Авторски права

Авторските права за страницата и това HTML ръководство принадлежат на v111p.com. Материалите могат да се копират свободно при условие че в копието ясно е посочен източника - v111p.com.

Можете да използвате тази информация свободно и не се изисква да цитирате v111p.com като източник. (10 септември 2007 г.) Ако обаче искате да посочите източник (например за да не ви обвинят че представяте чужда работа за своя или просто от благодарност) можете да го направите като използвате точния адрес на страницата или просто ''v111p.com''

### Начин на ползване

- Секциите в този документ са основно предназначени за последователно четене.
- Препратки водещи към външни сайтове са означени с знак за по-голямо>.
- Ако искате да си запишете тази страница за offline четене, не забравяйте и css файла! Редактирайте кода на страницата като замените `"/style.css"` със `"style.css"`.
- За принтиране е зададен стил само с черен цвят на текста и минимални полета! При мен обаче това предизвиква грешка в IE6 при опит за принтиране или Print Preview.

### Всяка помощ е добре дошла!

Всички коментари, предложения, връзки към полезна информация, поправки на фактологични, правописни и/или печатни грешки са добре дошли. Ако е възможно приложете и доказателства. За контакти можете да използвате формуляра за коментари намиращ се на дъното на всяка страница или да пишете на адрес v111p (at) v111p.com (за предпочитане, за да мога да отговоря).

# XHTML 1.0 Strict пълен справочник

## Въведение

XHTML 1.0 Strict е съвместим с по-стари браузъри които разбират само HTML, и в същото време от него са премахнати много елементи и атрибути от които вече няма нужда (вместо някои от тях се използва CSS).

### Визуализирането в по-стари браузъри

Все още на много места се използва HTML 4 / XHTML 1 Transitional защото CSS не се поддържа от старите браузъри, а дори и в новите поддръжката може да е непълна (какъвто е и случая с HTML/XHTML между другото). Максимално добрия външен вид дори и в най-старите браузъри може да е важен за един комерсиален сайт. За непрофесионалните сайтове обаче доста важни са удобствата които XHTML и CSS предлагат - максимално добър изглед във всеки един браузър и лесен и бърз начин за промяна на облика на сайта без да е необходимо да се променя самия HTML.

Накратко имате две възможности - в бързо развиващия се свят на технологиите и Интернет да учите и използвате отдавна непрепоръчвани от стандарта елементи и атрибути (непрепоръчвани още от 1997 г - HTML 4), или да правите дизайна с CSS - език който старите браузъри не разбират, но да оформяте информацията с XHTML 1 Strict и според стандартите, така че тя да е максимално съвместима с настояще, минало и бъдеще.

### XHTML документа като HTML, XHTML или XML

XHTML 1.0 позволява документа да се изпраща като HTML, XHTML или XML. За да сме съвместими със старите браузъри трябва да изпращаме документите като HTML, което има неясни практически недостатъци (ако знаете за такива - пишете!).

Забележка: Според W3C XHTML документ изпратен от сървъра като XHTML се поддържа от всички модерни браузъри, но не и от MS Internet Explorer (версия не се споменава).В тези HTML уроци ще разглеждаме само случаи при които файла се изпраща като HTML. (Ако файлът има разширение .html той ще бъде изпратен като HTML - това зависи от настройките на сървъра.)

XHTML Media Types>

Разлика между application/xhtml+xml и text/html в Mozilla>

## Елементи, етикети и коментари

### Елементи

Елементи в този документ ще наричаме неща като параграфи, заглавия, списъци, под-точки, препратки, които са обградени с HTML етикети, както и такива обекти които използват само един етикет, като картинки например. Спорно е дали `meta` декларациите например е правилно да се наричат елементи.

### Етикети (tags)

Етикетите се използват за обозначаване на елементите в документ на HTML. Всички етикети започват със знак за по-малко и завършват със знак за по-голямо. Имената на етикетите и атрибутите се изписват изцяло с малки букви. Повечето етикети имат кореспондиращ затварящ етикет. Затварящият етикет се различава по това че започва със знак за по-малко и наклонена на дясно черта.

Пример: `<p>`Параграф`</p>`

Не е задължително отварящият и затварящият етикет да са на един ред (макар че е препоръчително в някои случаи заради различните разбирания на браузърите):
`<p>
`Параграф`
</p>`

Също така не е задължително един етикет да е на един ред. Редовете могат да се прекъсват между името на етикета и атрибутите (ако има такива) и между самите атрибути (ако са повече от един), но прекъсване на реда вътре в стойността на атрибут не се препоръчва защото може да доведе до непредвидени резултати в някои браузъри. На тази страница много етикети са написани на няколко реда за да се съберат на екрана. Това обаче не е необходимо в HTML документа.

В HTML някой етикети нямаха съответен затварящ етикет - например етикета за нов ред `<br>`. В XHTML всички етикети трябва да се затварят. Имате два варианта: стандартния начин `<br></br>` или ето така: `<br/>`. За съвместимост с по-старите браузъри обаче се препоръчва следното - използвайте втория вариант като оставяте интервал между името на етикета и наклонената черта: `<br />`. Пак по същата причина използвайте този метод само за елементи които по принцип винаги са празни. Пример: не използвайте `<p />` или `<script />`

Много е важно тук да разберете, че етикетите не се използват за да придават някакъв определен външен вид на текста. Всички елементи си имат зададен в браузъра външен вид (размер, шрифт, полета и т. н.), но вие можете да го промените много лесно (чрез CSS).

#### Едни елементи могат да съдържат други

Едни елементи могат да съдържат други елементи с определени изключения. Елементите обаче не трябва да се застъпват.

Пример 1: (правилно): `<strong><em>`. . .`</em>``</strong>`

Пример 2: (грешно): `<strong><em>`. . .`</strong></em>`

### Коментари

Можете да поставяте коментари навсякъде в документа извън другите етикети. Коментарите се виждат само когато се вижда изходният код на документа и нямат никакъв ефект върху представянето му. Началото на коментар се означава с знак за по-малко последван от удивителен знак и две тирета. Краят на коментара се означава с две тирета и знак за по-голямо. Коментара може да обхваща един или повече реда.

Примери:

`<!-- `Това е коментар на един ред.` -->`

`<!-- `Това е коментар,
който обхваща няколко реда.`
`<p>Този параграф
няма да бъде показан в браузъра</p>`
-->`

## Текст, бели полета и специални символи

### Бели полета

Бели полета (white spaces) в XML/XHTML са нормалния ASCII интервал, табулаторa, line feed (специален символ за нов ред) и carriage return (също специален символ за нов ред). В XHTML, както и в HTML, всяко бяло поле в текста (независимо от колко символа е съставено) се показва по подразбиране като един интервал. Например ако напишем една дума на един ред и друга на втори ред, двете думи в браузъра ще бъдат показани една до друга, с един интервал между тях.

### Изписване на важни за HTML символи

Ако искаме да използваме знаците за по-голямо (>) и по-малко (<) или амперсанда (&) в HTML документ (вкл. в стойностите на атрибутите), трябва да използваме техните кодове - съответно `&gt;` (от greater than - по-голямо), `&lt;` (от less than - по-малко) и `&amp;` (ampersand - амперсанд). В допълнение, ако искаме да използваме кавички (") в стойност на атрибут, трябва да използваме кода за кавички - `&quot;`

### Други символи

Някои символи от Unicode имат зададени имена в HTML - като `gt` или `amp` например. Но в HTML могат да се използват всички символи от Unicode чрез техните номера. Например символът за евро - €, може да се зададе както с неговото име (&euro;), така и с неговия десетичен номер 8364 - `&#8364;`, или чрез шестнадесетичния му номер 20AC - `&#x20AC;` (Пред шестнадесетичните числа се поставя "x").

Забележка: Ако използвате Unicode можете направо да включвате самия символ в документа, вместо неговото кодово име. Това обаче прави документа по-труден за редактиране.

В Unicode има различни видове контролни символи като например за указване промяна посоката на текста. Препоръчва се вместо тези контролни символи да се използва средствата достъпни чрез HTML - например за промяна посоката на текста - елемента `bdo`. Няма гаранция как ще работят контролните символи в различните браузъри, освен това ако те не се виждат в редактора се усложнява и редактирането.

Забележка: Използването на грешен символ в дадена дума може да предизвика редица проблеми, например невъзможност думата да бъде преведена с електронен речник. За да разберете как да избегнете този проблем, вижте секцията използвайте правилния символ.

интервала не позволяващ прекъсване на реда
  `&nbsp; &#160; &#xA0;`
`“`Леви и десни кавички`”`
  `&ldquo;` и `&rdquo;`
`«`Двойни ъглови кавички`»`
  `&laquo;` и `&raquo;`
Меко тире1
  `&shy;`
Търговска марка `™`
  `&trade; &#8482;`
Регистрирана марка `®`
  `&reg;`
Знак за авторско право `©`
  `&copy;`
Евро `€`
  `&euro; &#8364; &#x20AC;`
Тежко ударение (за български език)2: `а̀ ѐ ѝ о̀ у̀ ъ̀ ю̀ я̀ А̀ Ѐ Ѝ О̀ У̀ Ъ̀ Ю̀ Я̀`
  `и&#768;` `и&#x300;`
Остро ударение (за някои други езици)2: `á Á`
  `a&#769;` `a&#x301;`

1Мекото тире указва на браузъра място в дума където тя може да бъде пренесена. Тирето не се показва на екрана ако не се наложи думата да бъде пренесена.

2За ударения по принцип трябва да се използва самата буква и веднага след нея - кода за ударението. По последни данни от БАН в българския език трябва да се използва само тежкото ударение. За съжаление резултатът при визуализирането не е особено добър засега - ударението може да се показва като отделен символ до буквата. Засега не ви препоръчвам да ползвате тази техника.

Секцията от XHTML DTD за наименованите символи: XHTML Entity Sets>.

## Атрибути на елементите

Елементите могат да имат един или повече атрибути. Атрибутите се пишат вътре в отварящия етикет във формат `атрибут="стойност"` като се отделят с интервал от името на етикета и помежду си (ако са повече от един). Обърнете внимание, че стойността трябва да е в кавички.

Пример:
`<p id="p1" lang="bg">`Параграф`</p>`

Някои елементи имат атрибути само с по една възможна стойност, която съответства на името на атрибута. HTML 4 позволяваше тези атрибути да се използват без стойност, т. е. без частта `="стойност"`. В XML всички атрибути трябва да имат стойност и затова се налага този подход. За съжаление някои стари браузъри няма да могат да разпознат тези атрибути.

Има няколко групи атрибути които са едни и същи за много елементи.

### Основни атрибути (coreattrs)

`id`
  Уникално за документа име. Може да се зададе за да може обекта да бъде манипулиран чрез скрипт или за да може да бъде цел на препратка.
`class`
  Име на предварително зададен стилов клас - вижте страницата за CSS.
`style`1
  Стил - вижте секция "Стилове".
`title`
  Заглавие. Това заглавие обикновено се показва когато потребителят посочи обекта с този атрибут с показалеца на мишката.

1 - Документи които използват атрибута `style` трябва да задават и стилов език по подразбиране - вижте секцията "стилов език по подразбиране".

### Атрибути за интернационализация (i18n)

Атрибутът за езика в HTML е `lang`, в XML е `xml:lang`. XHTML 1.0 трябва да използва и двата. Стойността трябва да бъде двубуквения код на езика на текста в елемента (ако езика няма двубуквен код, използва се трибуквения). Съкращенията за езиците> се определят от стандарта ISO639-(1 и 2).

Има още един атрибут свързан с езика който определя посоката в която трябва да тече текста - `dir`. Този атрибут може да има само две стойности: `ltr` (отляво надясно - по подразбиране) и `rtl` (отдясно наляво). Този атрибут за сега като че ли не се поддържа извън етикета `bdo` (вижте секцията елементи на текстово ниво).

Атрибутите за език не служи за нищо на пръв поглед. Те обаче може да бъде полезен - например за търсачките, за програми които превеждат страници от един език на друг, за браузъри които четат текста в страниците на глас и т. н.

Атрибутът `lang` е премахнат в XHTML 1.1 в полза на `xml:lang`.

i18n е съкращение от "internationalization". Числото 18 означава че има 18 символа между първото i и последното n в думата.

### Атрибути за събития в потребителския интерфейс (events)

Стойността на тези атрибути трябва да бъде скрипт, който да бъде изпълнен при настъпване на определеното събитие.

Забележка: Документи които използват тези атрибути трябва задължително да задават и скриптов език по подразбиране. Вижте секцията "скриптов език по подразбиране" за повече информация.

`onclick`
  Бутонът на мишката е бил щракнат (бил е натиснат и отпуснат)
`ondblclick`
  Бутонът на мишката е бил щракнат два пъти
`onmousedown`
  Бутонът на мишката е бил натиснат
`onmouseup`
  Бутонът на мишката е бил отпуснат
`onmousemove`
  Показалецът на мишката е бил (пре)местен върху елемента
`onmouseout`
  Показалецът на мишката е бил преместен извън елемента
`onkeypress`
  Клавиш е бил натиснат и отпуснат
`onkeydown`
  Клавиш е бил натиснат
`onkeyup`
  Клавиш е бил отпуснат

### Атрибути за елементи които могат да получават фокуса (focus)

`accesskey`
  буква или символ за лесен достъп. (поддържа се само в някои браузъри)
`tabindex`
  позиция в реда за табулиране. (поддържа се само в някои браузъри)
`onfocus`1
  стойността трябва да е скрипт, който да бъде изпълнен когато обекта бъде фокусиран
`onblur`1
  стойността трябва да е скрипт, който да бъде изпълнен когато обекта загуби фокуса

1 Документи които използват атрибутите `onfocus` и/или `onblur` трябва задължително да задават и скриптов език по подразбиране. Вижте секцията "скриптов език по подразбиране" за повече информация.

## Декларации и <html>

### XML декларации

XML декларацията не е задължителна в XML документите ако те използват кодировките по подразбиране - UTF-8 или UTF-16. В случая с Уеб тази декларация не е задължителна и ако енкодинга се изпраща в HTTP header-а. W3C препоръчват да се използва във всички случаи, но и предупреждават че тя може да доведе до проблеми в някои по-стари браузъри.

XML декларацията винаги се поставя на първия ред на документа:

`<?xml version="1.0" encoding="UTF-8"?>`

където `UTF-8` е кодировката на документа.

Този ред, според W3C, пречи на Internet Explorer (версия?) да разпознае документа като XHTML и поради тази причина се препоръчва този ред да се пропуска, а документите да са с енкодинг UTF-8 или UTF-16. Ако документите се изпращат като `text/html` обаче, ние можем и да не се съобразяваме с правилата на XML (ако нямаме избор).

#### XML декларация за стилове

За пълнота тук трябва да се отбележи, че ако документа се предлага като "XHTML" или "XML" (а не като `text/html`), свързаните с документа стилове също трябва да се декларират със специални XML декларации:
`<?xml-stylesheet href="Адрес" type="text/css"?>`
Където `Адрес` трябва да бъде адреса на стила, като това може да бъде адреса на външен файл или идентификатора на `style` елемент (зададен с атрибута `id`), като пред идентификатора, когато се пише като адрес, се добавя знака за номер (`#`) , напр.: `href="`#style1`"`. За всеки използван стил трябва да се добави отделна XML декларация.

### DOCTYPE декларацията

DOCTYPE декларацията се поставя в началото на документа. Ето я декларацията за XHTML 1.0 Strict:

`<!DOCTYPE html
PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">`

`Strict` и `strict` трябва да се заменят с `Transitional` и `transitional` за XHTML 1.0 Transitional или с `Frameset` и `frameset` за XHTML 1.0 Frameset.

### <html>

Целият документ, с изключение на XML и DOCTYPE декларациите, трябва да бъде обграден с отварящия и затварящия етикет `html`.

Елемента `html` трябва да съдържа главата и тялото на документа, в тази последователност.

Атрибути на елемента:

[i18n]
  атрибутите за интернационализация
id
  уникално за документа име
xmlns
  XML Name Space - може да има само една определена стойност: `http://www.w3.org/1999/xhtml`. (Защо? - Namespaces in XML>). Това име е необходимо, защото XML позволява различни езици за маркиране да се вграждат в един документ, така че някъде в документа можем да имаме код написан на друг език, с друго име.

Пример:
`<html xmlns="http://www.w3.org/1999/xhtml"
lang="bg" xml:lang="bg">`
Където `bg` е двубуквения код на езика на текста в страницата.

## Главата на документа

- Главата на документа е предвидена за елементи които не се визуализират директно на страницата.
- Главата на документа се обгражда с отварящия и затварящия етикет `head`.
- Главата на документа може да съдържа само следните елементи: title, script, style, meta, link, object, base.
- Елементът `title` задължително трябва да присъства.
- Позволените атрибути за елемента `head` са (i18n), `id` и `profile`, (като последният не е предвиден да се използва от браузърите).

### Meta информация

`meta` етикета се използва за задаване на информация с широко приложение - от кодирането на символите в страницата до ключови думи за търсачките.

Атрибути:

(i18n)
  Атрибутите за интернационализация
`id`
  Уникално за документа име
`http-equiv`
  Еквивалент на стойност която може да се зададе чрез HTTP.
`name`
  Име
`content`*
  Съдържание/стойност. Този атрибут е задължителен.
`scheme`
  Система използвана за стойността на `content`.

Обикновено за елемента meta се задават атрибутите `http-equiv` или `name` + (и в двата случая) `content`. Варианта с `http-equiv` се използва за да се зададе стойност която има еквивалент в HTTP. Зададените чрез елемента `meta` стойности обаче имат по-нисък приоритет от зададените стойности чрез HTTP. Това означава, че ако една стойност е зададена чрез HTTP, съответстващ елемент `meta` ще бъде игнориран от браузъра.

#### Примери за използване на `meta`

Някои търсачки може да индексират документа по съдържанието на неговите `meta` етикети `description` (описание) и `keywords` (ключови думи):
`<meta name="description" content="HTML ръководство" />
<meta name="keywords" content="HTML, XHTML, CSS" />`

Стойността на `Content-Type` трябва да е вида на документа и енкодинга които трябва да бъде използван за да бъдат показани символите:
`<meta http-equiv="Content-Type"
content="text/html; charset=Windows-1251" />`

### Заглавие на документа (title)

Заглавие на страницата се задава с етикета `title`. Заглавието на страница обикновено се показва на заглавната лента на прозорците, когато страницата се отвори в браузъра, записва се в списъка bookmarks, когато се запазва адреса на страницата, и се показва при резултатите в търсещите машини.

- Всеки документ трябва да има точно един `title` елемент.
- Елементът `title` не може да съдържа други елементи.
- Атрибутите са (i18n) и `id`.

#### Съдържанието на `title`

Заглавието трябва да дава ясна представа за съдържанието на документа. Първите думи трябва да бъдат най-описателните за самата страница. Не започвайте заглавието с текст, който се среща на няколко различни страници, като име на сайт например, или с текст който няма смисъл извън контекста, например: "Първа част - XHTML етикети". Това има особено значение когато се гледат резултатите от търсене или се запаметяват адресите на страниците в bookmarks.

#### Дължината на `title`

Имайте в предвид че заглавието, ако е прекалено дълго, няма да бъде показано цялото в заглавния ред на прозореца, в списъка с bookmarks или в резултатите от търсене, затова можете да разчитате най-много на първата част на заглавието да предаде описанието на страницата. Препоръчва се заглавието да е дълго не повече от 40-60 символа.

### Базов адрес

Базов адрес на документа може да се зададе с етикета `base`. (От базовия адрес зависят релативните адреси - вижте Адресите в WWW).

Атрибутите са `href`* (този атрибут е задължителен) и `id`.

Пример: `<base href="../" />`
В този случай всички релативни адреси ще се държат така сякаш документа е в по-горната директория.

### <link>

Етикета `link` се използва за свързване на документа с други документи - например CSS.

Атрибути:

`charset`
  Кодировката на свързания документ. (Може да се наложи да се зададе ако кодировката на документите е различна и не е оказана от самия свързан документ).
`href`
  Адреса на документа който да бъде свързан.
`hreflang`
  Двубуквения код на езика на свързания документ.
`type`
  MIME тип на съдържанието на свързания документ.
`rel`
  Relationship - връзка (отношение) с документа
`rev`
  Показва че адреса в `href` води до предишния документ. (Например когато има поредица от свързани документи - `rel` може да указва следващия, а `rev` - предишния). Няма практически смисъл. (?)
`media`
  Списък от медии (screen, projection, print, ...) разделени със запетайки.

#### Примери за използването на `link`

За свързване на алтернативен документ, например - подходящ за принтиране - работи в IE! (версия 6):
`<link rel="alternate"
media="print" href="printme.html" />`
За свързване на икона (в IE работи само от време на време и трябва да е .ico файл, за повече подробности вижте напр. favicon.com>):
`<link rel="shortcut icon"
href="fav-icon.ico" type="image/x-icon" />`
За свързване на постоянен CSS документ:
`<link rel="stylesheet"
type="text/css" href="style.css" />`
(За повече подробности относно използването на етикета `link` за стилове - вижте страницата за CSS).

### Стилове

(X)HTML дава възможност към документите да се включва специален език за оформлението им. Това може да става по три начина - в отделен документ (който се свързва с елемента link), в главата на документа (в елемента style) или директно за всеки елемент (не се препоръчва) - чрез атрибута `style`, като в този случай е необходимо за документа да се зададе стилов език по подразбиране.

XHTML не е обвързан с който и да е език за стилове, но на практика съществува само един широко разпространен език и това е CSS.

#### Елемента `style`

За добавяне на стилове в главата на документа се използва елемента `style`. Ето ги и атрибутите му:

(i18n)
  Атрибутите за интернационализация.
`id`
  Уникално за документа име.
`type`*
  MIME тип на съдържанието. За CSS стойността ще е `text/css`. Този атрибут е задължителен.
`media`
  Списък от медии (screen, projection, print, ...) за които е предназначен стила, разделени със запетайки.
`title`
  Заглавие. (?)
`xml:space`
  Дали да се запазват белите полета. Стойността е `preserve` и не може да бъде променяна.

Пример:
`<style type="text/css" href="style.css" />`

В XHTML ако в стила се използват символите (`<`) или (`&`) той трябва или да бъде поставен в отделен файл, или да бъде маркиран като CDATA с `<[!CDATA[` и `]]>`

Пример:
`<style type="text/css">
/* <[!CDATA[ */
`CSS код тук`
/* ]]> */
</style>`

Браузъри, които не разпознават елемента `style`, най-вероятно ще покажат съдържанието му като текст. Единствения начин това да се предотврати е кода за стиловете да се поставя в отделен файл и да се свързва чрез етикета `link`.

Забележка: В HTML беше разрешено стиловете да се скриват в HTML коментари. На програмите поддържащи XML обаче им е разрешено да премахват коментарите от XML документи без да ги разглеждат. Ето защо кода за стиловете в XML/XHTML документи не бива да се крие в коментари.

#### Стилов език по подразбиране

Документи които използват атрибута `style` трябва да задават и стилов език по подразбиране. Това може да се направи по два начина - с `meta` декларация в главата на документа (което има по-висок приоритет):
`<meta http-equiv="Content-Style-Type" content="text/css" />`
или чрез HTTP (по-нисък приоритет). Ако езикът по подразбиране за стиловете не е зададен по един от тези два начина, езикът по подразбиране ще е `text/css`, но документа ще бъде неправилен по стандарта на W3C.

Забележка: За етикета `style` здължителният атрибут `type` трябва да се зададе дори и когато в документа е зададен стилов език по подразбиране и стила в елемента `style` е от този вид.

### Скриптове

Чрез този етикет към страницата може да се добави скрипт (малка програма). Този елемент може да се намира в главата на документа и най-често се поставя там, но е позволено да бъде и в тялото. Ако се използва за да свърже външен файл обаче, се поставя задължително в главата.

XHTML не е обвързан с който и да е език за скриптове/програмиране. Ограничението е в това какъв език се поддържа от браузърите. Повечето браузъри разбират някаква версия на езика JavaScript.

Атрибути:

`id`
  Уникално за документа име
`charset`
  Кодировката на свързания документ (когато скрипта е в отделен документ). Обикновено не се налага да се задава този атрибут, освен, може би, ако кодировката на HTML документа не е различна.
`type`*
  MIME тип на съдържанието. Този атрибут е задължителен.
`src`
  Адреса на свързания документ (когато скрипта е в отделен документ). Ако зададете този атрибут, всякакво съдържание на етикета би трябвало да бъде игнорирано от браузъра.
`defer`
  Стойността може да бъде само `defer`. Подсказва на браузъра че скрипта няма да генерира никакво съдържание за страницата, така че той може да продължи зареждането на страницата преди изпълнението на скрипта да е приключило. (Работи в IE 6, не работи в Mozilla FF 1 и в Opera 7.54).
`xml:space`
  Стойността е `preserve` и не може да бъде променяна.

Пример за свързване на отделен файл:
`<script type="text/javascript"
src="script.js"></script>`

В XHTML ако скрипта съдържа символите (`<`) или (`&`) той трябва или да бъде поставен в отделен файл, или да бъде маркиран като CDATA с `<[!CDATA[` и `]]>`

Пример:
`<script type="text/javascript">
// <[!CDATA[
`// JavaScript код тук`
// ]]>
</script>`

Забележка: в XHTML е забранено скриптовете да пишат по документа, както това става с JavaScript функцията `document.write()`. Съдържанието на документа може да бъде променяно по друг начин.

Браузъри, (много стари браузъри), които не разпознават елемента `script`, най-вероятно ще покажат съдържанието му като текст. Единствения начин да се предотврати това е скрипта да се поставя в отделен файл и да се свързва чрез атрибута `src`.

Забележка: В HTML беше разрешено скриптовете да се скриват в HTML коментари. На програмите поддържащи XML обаче им е разрешено да премахват коментарите от XML документи без да ги разглеждат. Ето защо скриптивете в XML/XHTML документи не бива да се крият в коментари.

#### Скриптов език по подразбиране

Документи които използват атрибути за събития от потребителския интерфейс (events) или атрибутите `onfocus` и `onblur` за елементи които могат да получават фокуса (виж атрибутите focus) трябва задължително да задават и скриптов език по подразбиране. Това може да стане по два начина: или чрез HTTP или с `meta` декларация в главата на документа (което има по-висок приоритет):
`<meta http-equiv="Content-Script-Type" content="text/javascript" />`
(Където `text/javascript` е MIME типа на скрипта.)

Документи които използват събития, а не задават скриптов език по подразбиране, са неправилни по стандарта на W3C.

Забележка: За етикета `script` здължителният атрибут `type` трябва да се зададе дори и когато в документа е зададен скриптов език по подразбиране и скрипта в елемента `script` е от този вид.

## Един "завършен" XHTML документ

`<!DOCTYPE html
PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"
lang="bg" xml:lang="bg">
<head>
<meta http-equiv="Content-Type"
content="text/html; charset=UTF-8" />
<title>`Заглавие`</title>
</head>
<body>
`Съдържане`
</body>
</html>`

Това е завършен XHTML документ, но без XML декларацията. В този случай според W3C трябва да се използва енкодинг UTF-8, но ако документа е изпратен не като XML, а като `text/html`, XML правилата за нас не важат. Също така трябва да се отбележи, че `meta` декларацията не е задължителна, но все пак трябва по някакъв начин да укажем енкодинга.

## Тяло на документа

Тялото на документа се обгражда с отварящия и затварящия етикет `body`. В тази част на документа се поставя това което ще се показва на екрана. Елемента `body` може да съдържа пряко само елементи на блоково ниво.

Атрибути:

(coreattrs)
  Основните атрибути
(i18n)
  Атрибутите за интернационализация
(events)
  Атрибутите за събития в потребителския интерфейс
`onload`
  скрипт който да бъде изпълнен когато страницата се зареди в браузъра
`onunload`
  скрипт който да бъде изпълнен когато потребителят напусне страницата

### Елементи на блоково ниво

- Заглавия: h1-h6
- Списъци: ul, ol, dl (виж секция Списъци)
- Блоков текст: pre, hr, blockquote, address
- Други: p, div, fieldset, table, noscript
- На блоково или текстово ниво: ins, del, script (Вижте секцията Елементи на текстово ниво)

Етикетите на всички елементи на блоково ниво, с изключение на `script`, могат да съдържат атрибутите (coreattrs), (i18n) и (events).

`<h1>`-`<h6>`
  Заглавията са на шест нива, като `h1` е най-главното, а `h6` - най-маловажното. Тези елементи могат да съдържат само елементи на текстово ниво.
`<p>`
  Огражда отделните параграфи в текста. Този елемента може да съдържа само елементи на текстово ниво.
`<hr />`
  (хоризонтална линия) може да се използва за разделител между различни части на документа. Този елемент не може да съдържа други елементи.
`<blockquote>`
  блоков цитат. Използва се за цитиране на един или повече параграфи. Обикновено се визуализира като отместен надясно текст. Този елемент може да съдържа пряко само елементи на блоково ниво. Има един допълнителен атрибут - `cite` със стойност която трябва да е адрес в Интернет (URI) указващ откъде е взет цитата. Този атрибут обаче няма никакво приложение в браузърите.
`<address>`
  Информация за автор според W3C. Използва се за информацията която стои на дъното на повечето страници в Уеб - Copyright, информация за контакти, и т. н. Този елемента може да съдържа само елементи на текстово ниво.
`<div>`
  използва се за да обгражда елементи на които искаме да поставим някакъв атрибут или стил (CSS). Може да съдържа елементи на блоково или текстово ниво.
`<pre>`
  (предварително форматиран текст) Оказва на браузъра че даден текст трябва да се покаже с всичките си интервали и без да се смесват редовете. Същото нещо може да се постигне с CSS за който и да е друг блоков елемент. Елементът `pre` може да съдържа елементи на текстово ниво с изключение на `img`, `object`, `big`, `small`, `sub` и `sup`
`<noscript>`
  Съдържанието на този елемент ще бъде показано в браузъра ако той не поддържа скриптове. По стандарт съдържанието на този елемент трябва да бъде показано ако браузъра не разбира езика на елемента `script`, който се намира по-нагоре в документа, но IE6 и MFF 1 не го разбират по този начин. (Работи в Opera 7.54). Може да съдържа пряко само други елементи на блоково ниво.

### Списъци

Списъците биват три вида: номерирани, неномерирани и дефиниционни.

При номерираните (`<ol>`) и неномерираните (`<ul>`) списъци точките се означават с `<li>`.

Примерен код:
`<ol>
<li>`HTML`</li>
<li>`XHTML`</li>
<li>`XML`</li>
</ol>`
Където `<ol>` ще бъде `<ul>` ако искаме списъка да не е номериран.

При дефиниционните списъци (`<dl>`) всяка точка е съставена от термин (`<dt>`) и определение (`<dd>`).

Пример:
`<dl>
<dt>`world-wide`</dt><dd>`световна`</dd>
<dt>`web`</dt><dd>`паяжина`</dd>
</dl>`

Елемента `dt` може да съдържа само елементи на текстово ниво, а `dd` и `li` могат пряко да съдържат елементи както на текстово, така и на блоково ниво (включително други списъци).

Етикетите на всички елементи за списъци могат да съдържат атрибутите (coreattrs), (i18n) и (events).

### Елементи на текстово ниво

- Специални: br, span, bdo, map, object, img
- Стил на шрифта: tt, i, b, big, small (тези са премахнати от XHTML 2.0 в полза на CSS)
- Фрази: em, strong, dfn, code, q, samp, kbd, var, cite, abbr, acronym, sub, sup
- Елементи на формуляр: input, select, textarea, label, button (вижте секция "Формуляри")
- Разни: ins, del, script (могат да се използват и на блоково и на текстово ниво)
- Котва: a (вижте секция "Препратки")

Етикетите на всички елементи от текстово ниво, с изключение на `br`, могат да съдържат атрибутите (coreattrs), (i18n) и (events).

Всички елементи от текстово ниво, с изключение на `br`, `object`, `img` и `script`, могат да съдържат (само) текст и елементи от текстово ниво.

`<br />`
  Принудително прекъсване на реда. Не бива да се използва като алтернатива на започването на нов абзац. (Този елемент е премахнат от XHTML 2.0 в полза на нов елемент за ред).
`<span>`
  Огражда текст върху който искаме да приложим стилове (CSS).
`<bdo>`
  (BiDi Over-ride) използва се за да укаже посоката на текста, например за да се изпише дума на писменост която се изписва в посока обратна на посоката по подразбиране за документа. Атрибута `dir`* (който е задължителен) има две възможни стойности `ltr` (от ляво на дясно) и `rtl` (от дясно на ляво). (Този елемент е премахнат от XHTML 2, където всички елементи могат да имат атрибута `dir` със същия резултат). Пример: ``<bdo dir="rtl">`Добре Дошли!`</bdo>``
`<map>`
  Използва се за изображения-карти.
`<object>`
  Използва се за вграждане на обекти в страницата - например Flash, Java аплети, различни видове файлове.
`<img>`
  Използва се за вграждане на картинки в страницата.
`<em>`
  emphasis - ударение, подчертаване, наблягане. Пример: `Napster `<em>`беше`</em>` страхотна програма.`
`<strong>`
  по-силно наблягане.
`<dfn>`
  дума или израз която следва да бъде дефинирана. Пример: ``<dfn>`HTTP`</dfn>` означава "протокол за прехвърляне на хипертекст".`
`<code>`
  програмен код. Елемент на текстово ниво е, но ако е написан на повече от един ред в кода повечето браузъри го показват както биха показали `pre`. (Дали работи така във всички браузъри, въпреки че е елемент на текстово ниво?) В XHTML 2.0 вече имаме елемент за код на блоково ниво.
`<q>`
  Трябва да поставя текста в кавички, но не се поддържа от IE (версия 6). Този елемент е заменен с нов в XHTML 2, където текста не би трябвало да бъде автоматично обграждан с кавички, това може да се промени и при `q` чрез CSS. Пример: ``<q>`Този текст в кавички ли е?`</q>``
`<samp>`
  примерен резултат от програма (??).
`<kbd>`
  нещо което потребителят би написал.
`<var>`
  променлива, като в програмен код. Пример: ``<var>`i`</var>``.
`<cite>`
  цитат. Пример: ``<cite>`Това тук е някакъв цитат`</cite>``.
`<abbr>`
  съкращение. Използва се с атрибута `title` за да се покаже какво означава съкращението. В някои браузъри думата се подчертава с прекъсната линия и когато се посочи с мишката се появява малко прозорче с текст (tool tip). IE (версия 6) не разпознава този етикет. Пример: ``<abbr title="страница">`стр.`</abbr>` 15694.` Съвет: Не разчитайте особено на елементите `abbr` и `acronym`, те нямат никакъв ефект в по-старите браузъри. Все още сигурен начин за даване на обяснение е чрез текст в скоби: `WWW (World Wide Web)`.
`<acronym>`
  дума, образувана от началните букви на други думи. Вижте `abbr` за начин на ползване. В XHTML 2.0 този елемент отпада в полза на `abbr`. Пример: ``<acronym title="World Wide Web">`WWW`</acronym>``
`<sub>`
  Показва текста малко по-надолу от останалия, като индекс. Пример: `H2O`
`<sup>`
  Показва текста малко по-нагоре от останалия, като степен. Пример: `22 = 4`
`<ins>`
  Обозначава текст или част от документа която е била добавена в последствие. Пример: `На сайта ще намерите много полезни неща `<ins>`и отскоро - безплатни уроци по XHTML!`</ins>``
`<del>`
  Обозначава текст или част от документа която все едно е била изтрита (вече не е валидна). Пример: `На сайта ще намерите много полезни неща и `<del>`безплатни`</del>` уроци по XHTML! (Промоцията свърши!)`
`<script>`
  Вижте секция "Скриптове".

### Препратки

С елемента `a` можете да поставяте в страниците препратки (още наричани "връзки") към други страници или към части в същата страница.

Елемента `a` може да съдържа други елементи от текстово ниво, в това число изображения, но не бива да съдържа други елементи `a`.

Забележка: Текста в елемента `a` в това ръководство ще наричаме "надпис на препратката". Надписът на препратките изпъква в страниците, обикновено е подчертан, има различен цвят и т. н. За улеснение на навигацията за посетителите, както и за евентуално по-добро представяне пред търсещите машини, се препоръчва надписът на препратките (или ако е картинка - картинката и атрибута ѝ `alt`) да отговаря на целта на препратката. Също така на една страница не бива да има две препратки с един надпис, но с различни цели и разбира се, препратки с една цел е добре да имат еднакъв надпис. Не използвайте надписи на препратките от вида: "тук", "щракнете тук", "вижте тук", "click here" и т. н. Посочените примери не подсказват по никакъв начин какво има на другия край на препратката. Понякога за да се избегнат такива феномени е необходимо да се промени малко изречението което съдържа връзката, но това не би трябвало да бъде голям проблем.

Атрибути:

(coreattrs)
  Основните атрибути
(i18n)
  Атрибутите за интернационализация
(events)
  Атрибутите за събития в потребителския интерфейс
(focus)
  Атрибутите за елементи които могат да получават фокуса
`charset`1
  Подсказва на браузъра каква кодировка на символите да използва за да покаже документа към който сочи връзката. Това обикновено няма да е необходимо (виж забележката под този списък).
`type`1
  MIME тип - например за HTML е `text/html`. Подсказва на браузъра какъв е вида файла към който сочи връзката. Това обикновено няма да е необходимо, защото сървъра ще му каже какъв е вида на файла (виж забележката под този списък).
`name`
  Уникално за документа име. Това име би трябвало да съвпада със стойността на атрибута `id` (вижте секцията Основни атрибути). (Атрибутът `name` на елемента `a` отпада от XHTML 1.1 в полза на атрибута `id`).
`href`
  Адреса до който да води препратката
`hreflang`1
  Езика на страницата или елемента към който води препратката (виж забележката под този списък).
`rel`
  Relationship - Вид на връзката между този и свързания документ. (Не служи за нищо тук?)
`rev`
  Вид на връзката между този и свързания (предишен в поредицата) документ. (Не служи за нищо тук?)
`shape`
  `rect`, `circle`, `poly` или `default`. Стойността по подразбиране е `rect`. Използва се за изображения-карти.
`coords`
  разделен със запетайки списък от дължини (в пиксели или проценти, пр.: `"50%,9,70%,4"`). Използва се за изображения-карти.

1 Забележка: `charset`, `type` и `hreflang` имат по-нисък приоритет в сравнение със стойностите зададени чрез HTTP или от самия свързан документ. Можете да видите страницата HREFLANG and TYPE considered harmful> за коментари защо не трябва да се използват тези атрибути.

Пример:
`<a href="http://www.w3.org/"
title="Сайта на W3C">w3.org</a>`

### Препратки към елементи в HTML документ

Цел на препратка може да бъде всеки елемент с зададено `id`. (В миналото само `a` елементи със зададен атрибут `name` са можели да бъдат цел на препратки).

За да се направи препратка към даден елемент използваме релативния или пълния адреса на документа + знака диез (`#`) + `id`-то на елемента-цел на препратката.

Пример: (препратка към елемент с `id="links"` в същия документ)

`<a href="#links">Препратки</a>`

### Вграждане на изображения

Чрез елемента `img` могат да се вграждат изображения в HTML документ. В HTML 4 е въведен нов, универсален елемент за включване на обекти в HTML-документа: `object`. Основният недостатък на стария, но все още широко използван метод - чрез елемента `img`, е че за алтернативно съдържание може да се използва само прост текст. (Елементът `img` е премахнат от XHTML 2, където всеки елемент може да бъде картинка).

Формати за изображения които работят в повечето браузъри и на повечето операционни системи са GIF, JPG и PNG, като PNG е сравнително нов формат.

Атрибути:

(coreattrs)
  Основните атрибути
(i18n)
  Атрибутите за интернационализация
(events)
  Атрибутите за събития в потребителския интерфейс
`src`*
  Адрес на изображението. Този атрибут е задължителен
`alt`*
  Алтернативно описание на изображението. Този атрибут е задължителен. За изображения за които няма практически смисъл да се предоставя алтернативен текст, стойността на `alt` атрибута може да се остави празна. Пример: `alt=""`.
`longdesc`
  Адрес на дълго алтернативно описание на изображението. Този атрибут не се поддържа от (повечето? от) браузърите.
`height`
  Височината на изображението в пиксели или проценти (като процент от наличното пространство в прозореца).
`width`
  Широчината на изображението в пиксели или проценти (като процент от наличното пространство в прозореца).
`usemap`
  Адрес на `map` елемент. Използва се за изображения-карти.
`ismap`
  Използва се за изображения-карти от страна на сървъра и единствената възможна стойност е `ismap`.

#### Размер на изображенията

Ако размера на изображението е известен, то може да е добра идея той да се зададе чрез атрибутите `width` и `height`. Това улеснява браузърите които могат тогава да заделят необходимото пространство на страницата и да покажат всичко останало там където трябва да бъде преди още да са се заредили целите изображения.

Чрез атрибутите за размера можете също така да окажете изображението да се покаже по-голямо от колкото е в действителност. Това разбира се най-вероятно ще развали качеството му.

Забележка: не указвайте по-малък размер на изображението от действителния. Ако искате изображението да се покаже по-малко, променете размера му чрез редактор за изображения, в противен случай хабите напразен трафик.

### Изображения-карти

[Тази секция не е завършена все още]

За сега можете да видите секцията Image maps> в ръководството за HTML 4 на сайта на W3C.

Елементът `map` задава изображение-карта от страна на клиента, която може да бъде свързана с елемент `img`, `object` (ако обекта е изображение) или `input` (също ако е изображение). Изображение-карта се асоциира с елемент чрез атрибута `usemap` на елемента.

Елемента `map` може да съдържа елементи на блоково ниво както и `area` елементи.

Атрибути за етикета `map`:

(coreattrs), `id`*
  Основните атрибути, като атрибута `id` е задължителен.
(i18n)
  Атрибутите за интернационализация
(events)
  Атрибутите за събития в потребителския интерфейс
`name`
  Уникално за документа име. Това име би трябвало да съвпада със стойността на атрибута `id` (вижте секцията Основни атрибути). (Атрибутът `name` на елемента `map` отпада от XHTML 1.1 в полза на атрибута `id`).

Елемента `area` (регион) не може да съдържа други елементи или текст.

Атрибути за елемента `area`:

(coreattrs)
  Основните атрибути.
(i18n)
  Атрибутите за интернационализация
(events)
  Атрибутите за събития в потребителския интерфейс
(focus)
  Атрибутите за елементи които могат да получават фокуса
`shape`
  Формата на региона. Стойността може да бъде `rect` (правоъгълник), `circle` (кръг), `poly` (списък от координати) или `default` ("определя целия регион"?). По подразбиране е `rect`.
`coords`
  Координати на региона. Разделен с запетайки списък от координати или дължини в пиксели или проценти. За форма `rect` - ляв x, горен y, десен x, долен y, за `circle` - център x, център y и радиус, за `poly` - x1, y1, x2, y2, ..., xN, yN, като последните x и y трябва да са същите като първите за да затворят областта.
`href`
  Адрес
`nohref`
  Показва че този регион не е активен. Единствената възможна стойност е `nohref`.
`alt`*
  Алтернативен текст. Този атрибут е задължителен.

#### Изображения-карти от страна на сървъра

Изображенията-карти от страна на сървъра (server-side image maps) изискват специална програма която работи на сървъра и не се препоръчва заради случаите в които браузъра не може да покаже изображението - например при текстови браузъри или когато визуализирането на изображения е забранено от опциите на браузъра. Когато потребителя щракне в/у изображение с атрибут `ismap` което се намира в `a` елемент, към адреса на връзката се прибавят координатите върху които е щракнато с мишката, като горният ляв ъгъл на изображението е с координати 0,0.

### Вграждане на обекти

Чрез елемента `object` в HTML документа могат да се вграждат различни файлове (включително други HTML файлове). Понякога тези файлове изискват допълнителни добавки към браузъра наречени плъгини.

За вграждане на различни видове обекти се използват различни атрибути. В ръководството за HTML 4.01 на W3C може да бъде намерена подробна информация за стандарта за елемента object> (en). За вграждане на определен вид файлове обаче може да се наложи да потърсите повече информация другаде.

Елемента `object` може да съдържа всякакви други елементи, включително други `object` елементи, като алтернативно съдържание. Ако обекта не може да бъде показан по някаква причина - например ако изисква плъгин който не е инсталиран или този вид обекти са забранени от опциите на браузъра, браузъра трябва да покаже алтернативното съдържание. За съжаление това не работи в някои браузъри. Например Internet Exploer (6) ще се опита да покаже и двата обекта при всички случаи.

Атрибути:

(coreattrs)
  Основните атрибути
(i18n)
  Атрибутите за интернационализация
(events)
  Атрибутите за събития в потребителския интерфейс
`declare`
  Този атрибут не се поддържа от браузърите (?). Указва на браузъра да не показва обекта преди той да е повикан (може да бъде повикан например с връзка към него). Единствената възможна стойност е `declare`.
`classid`
  Адрес на имплементация.
`codebase`
  Базов адрес за `classid`, `data`, `archive`.
`data`
  Адрес на данните на обекта.
`type`
  MIME тип за `data`.
`codetype`
  MIME тип за `classid`. Ако липсва, стойността по подразбиране ще е тази на атрибута `type`.
`archive`
  Списък от адреси на архивирани/компресирани файлове разделени с интервал.
`standby`
  Съобщение което да бъде показвано от браузъра докато обекта се зарежда.
`height`
  Височината на обекта в пиксели. Може да се зададе също и чрез стилове.
`width`
  Широчината на обекта в пиксели. Може да се зададе също и чрез стилове.
`usemap`
  Адрес на `map` елемент. Използва се за изображения-карти, ако обекта е изображение.
`name`
  Име (когато се праща като част от формуляр).
`tabindex`
  Номер в реда за табулация (за обекти които могат да получават фокуса). Този атрибут не е широко поддържан.

Допълнителни параметри могат да се задават към обекта чрез етикета `param`. `param` етикетите трябва да бъдат непосредствено след отварящия етикет `object`. Тези параметри би трябвало да може да се задават и като атрибути в етикета `object`.

Атрибути на `param`:

`id`
  Уникално за документа име
`name`
  Име на параметъра. Този атрибут е задължителен.
`value`
  Стойност на параметъра.
`valuetype`
  Тип на стойността на атрибута `value`. Има три възможни стойности: `data` (текст - по подразбиране), `ref` (адрес) и `object` (`id` на друг обект в страницата).
`type`
  Само ако `valuetype` е `ref`: MIME тип на документа, чиито адрес е посочен във `value`.

Пример: (за вграждане на друг html документ)

`<object data="doc.html"
width="400" height="100">
`Грешка. Документа не може да бъде вграден.`
</object>`

### Таблици

тази секция предстои да бъде написана

    (caption?, (col*|colgroup*), thead?, tfoot?, (tbody+|tr+))

    Елементи:
    caption  %Inline;
    thead    (tr)+
    tfoot    (tr)+
    tbody    (tr)+
    colgroup (col)*
    col      EMPTY
    tr       (th|td)+
    th       %Flow;
    td       %Flow;

    Атрибути на table
      %attrs;
      summary     %Text;
      width       %Length;
      border      %Pixels;
      frame       %TFrame;
      rules       %TRules;
      cellspacing %Length;
      cellpadding %Length;

### Формуляри

Формулярите са части от документа, които съдържат нормални HTML етикети, специални етикети, наредчени контроли и надписи за тези контроли. След като попълнят формуляр, потребителите обикновено изпращат формуляра към уебсървър за обработка.

#### Атрибути за `form`

(coreattrs)
  Основните атрибути
(i18n)
  Атрибутите за интернационализация
(events)
  Атрибутите за събития в потребителския интерфейс
`action`*
  адрес към който информацията от формуляра да бъде изпратена. Ако стойността се остави празна (`""`), информацията се изпраща към документа съдържащ формуляра. Този атрибут е задължителен.
`method`
  Начин на изпращане - може да бъде `post` или `get`. По подразбиране е `get`. Вижте секцията "Изпращане на формуляр".
`enctype`
  MIME тип с който информацията се праща на сървъра. По подразбиране е `application/x-www-form-urlencoded`, но ако формуляра съдържа input елемент тип `file` трябва да се използва `multipart/form-data`.
`onsubmit`1
  Скрипт, който да бъде изпълнен преди формуляра да бъде изпратен.
`onreset`1
  Скрипт, който да бъде изпълнен преди формуляра да бъде изчистен (например чрез натискане на бутон `reset`).
`accept`
  Списък от MIME типове, разделени с запетайки, които сървъра може да обработи правилно. Браузърите могат да използват тази информация, като филтрират файловете когато позволяват на потребителя да избере файл за елемент `input` от тип `file`.
`accept-charset`
  Списък от енкодинги, разделени с интервали или запетайки, които сървъра приема. Сървъра може да приеме само един от тези енкодинги за един обект. По подразбиране браузърите могат да използват енкодинга използван за трансфера на документа съдържащ формуляра.

1 Документи които използват атрибутите `onsubmit` и/или `onreset` трябва задължително да задават и скриптов език по подразбиране. Вижте секцията "скриптов език по подразбиране" за повече информация.

#### Контроли

Елементите за контроли са:

`textarea`
  Кутия в която може да се въвежда текст. Първоначалната стойност може да се зададе между отварящия и затварящия етикет `textarea`. С атрибутите `rows`* и `cols`*, които са задължителни се задава големината на кутията (броя на редовете и колоните). Другите атрибути са: (coreattrs), (i18n), (events), (focus), `name`, `disabled`, `readonly`, `onselect` и `onchange`. Те са със същото значение като съответните атрибути за елемента `input`.
`select`
  Меню с опции. Този елемент може да съдържа (само) елементите `optgroup` и `option`. Изборите се представят с елемента `option`. Атрибутите за елемента `select` са: (coreattrs), (i18n), (events), tabindex, onfocus, onblur, `name`, `size`, `multiple`, `disabled` и `onchange`. С атрибута `size` се задава колко от опциите да бъдат видими наведнъж (обикновено се използва заедно с атрибута `multiple`). Атрибута `multiple`, с единствена възможна стойност "`multiple`", позволява на потребителя да избира повече от една опция наведнъж. Не всички потребители обаче може да знаят как да направят това. Например в Windows трябва да се задържи бутона Ctrl докато се правят изборите.
  `optgroup`
    Този елемент разделя опциите на подгрупи. Може да съдържа само елемента `option`. Атрибутите са: (coreattrs), (i18n), (events), `disabled` и `label`* (заглавие което да бъде показано в менюто) - този атрибут е задължителен.
  `option`
    С този елемент се задава опция. Заглавието което да се показва в менюто може да се зададе или с атрибута `label` (не се поддържа от IE6, FF1 и Opera7 / Win) или между отварящия и затварящия етикет на елемента. Стойността която да бъде изпратена на сървъра ако тази опция бъде избрана се задава чрез атрибута `value`. С атрибута `selected`, с единствена възможна стойност "`selected`", се указва, че тази опция трябва да бъде предварително избрана от браузъра. Ако в етикета на елемента `select` не е зададен атрибута `multiple` само една опция от менюто може да бъде предварително избрана. Когато не използвате `multiple` за предпочитане е винаги да задавате опция по подразбиране.
`button`
  Бутон, който може да бъде три вида: `button`, `submit` или `reset`, които имат същата функция като бутони от същите видове задавани чрез елемента `input`. Типа се задава чрез атрибута `type`, по подразбиране е `submit`. Другите възможни атрибути са `name`, `value` и `disabled` със същите значения като за елемента `input`. Преимуществото на елемента button е, че той може да съдържа и други елементи (на текстово или блоково ниво, с изключение на `a`, `form` и `form`-контроли).
`input`
  Чрез този елемент могат да се задават няколко различни видове контроли (Вида се задава чрез атрибута `type`):
  `text`
    Текстово поле позволяващо въвеждането на един ред текст.
  `password`
    Същото като текстовото поле, но скрива въвеждания текст. Реалната стойност си остава въведения от потребителя текст, а не това което браузъра показва на екрана.
  `checkbox`
    Кутийка със стойност "включено" или "изключено". С атрибута `checked` кутийката може да бъде включена по подразбиране. Атрибута `checked` може да има само една възможна стойност - "`checked`". Няколко `checkbox` контроли могат да се групират като им се зададе едно и също име (стойност на атрибута `name`).
  `radio`
    "Радиобутон". Могат да бъдат "включени" или "изключени". Когато няколко от тях имат еднакво име (стойността на атрибута `name`) те са взаимно изключващи се - когато един бъде включен, другите се изключват. Радиобутон може да бъде включен по подразбиране с атрибута `checked` със стойност "`checked`", Ако никой радиобутон от една група не е включен по подразбиране, браузърите трябва да избират първия бутон в групата. Не всички браузъри обаче спазват това правило, затова винаги изрично задавайте един бутон от всяка група като "включен".
  `submit`
    Бутон, чрез който се изпраща формуляра.
  `reset`
    Бутон, който връща стойностите по подразбиране на всички контроли във формуляра.
  `file`
    Позволява на потребителя да избере файл, който да бъде изпратен на сървъра.
  `hidden`
    Скрито поле. Използва се за информация която искаме да бъде изпратена към сървъра, но не искаме потребителя да може да променя.
  `image`
    Изображение, алтернатива на бутона `submit`. С атрибута `src` се задава адрес на файла с изображението, а с `alt` - алтернативен текст.
  `button`
    Бутон, който няма никакво зададено действие по подразбиране. Използва се за да стартира скрипт, който може да се зададе например в стойността на атрибута `onclick`.
`object`
  На теория разни обекти също могат да бъдат контроли във формуляр, но не е ясно точно коя е тяхната "стойност".

#### Атрибути за `input`

(coreattrs)
  Основните атрибути
(i18n)
  Атрибутите за интернационализация
(events)
  Атрибутите за събития в потребителския интерфейс
(focus)
  Атрибутите за елементи които могат да получават фокуса
`type`
  Вид на контролата (`text`, `password`, `checkbox`, `radio`, `submit`, `reset`, `file`, `hidden`, `image` или `button`). По подразбиране е `text`.
`name`(*)
  Име, което се изпраща към сървъра заедно със стойността. Този атрибут е задължителен за всички `input` контроли с изключение на `submit` и `reset`.
`value`
  Първоначална стойност. За `checkbox` и `radio` - постоянна стойност (потребителят не може да я променя). За бутоните това е текста, който се показва на бутона.
`checked`
  Само за `checkbox` и `radio` бутони - определя дали опцията е включена по подразбиране. Стойността може да бъде само "`checked`".
`disabled`
  (Забранен). Стойността може да бъде само "`disabled`".
`readonly`
  (Само за четене). За `text` и `password`. Стойността може да бъде само "`readonly`".
`size`
  Дължина на контролата в пиксели. За `text` и `password` - дължина в брой символи.
`maxlength`
  За текстови полета - максимален брой символи които потребителя да може да въведе.
`src`
  Само за `image`. Адреса на изображението.
`alt`
  Само за `image`. Алтернативен текст.
`usemap`
  Само за `image`. Адреса на карта. Вижте секцията за изображения-карти.
`onselect`
  Скрипт, който да бъде изпълнен когато текст в контролата бъде избран от потребителя.
`onchange`
  Скрипт, който да бъде изпълнен когато стойността на контролата бъде променена от потребителя.
`accept`
  Само за `file` - списък от MIME типове, които формуляра приема.

#### Какво се изпраща към сървъра?

Към сървъра в повечето случаи се изпращат двойките име-стойност (`name`-`value`) на контролите. Изключение са контроли които са забранени (`disabled`), неизбрани `checkbox` и `radio` контроли, `select` контроли в които не е избрана нито една опция, `reset` бутони и, ако формуляра има повече от един, ненатиснати `submit` бутони (или натиснат `submit` бутон без `name` атрибут). Имената и стойностите на тези контроли не се изпращат към сървъра. За `input` елемент `file`, към сървъра се изпраща съдържанието на файловете чиито адреси са въведени.

#### Надпис на контроли

С изключение на бутоните (където надписа се задава с атрибута `value`), за контролите може да се зададе надпис с етикета `label`. Има два начина надписа да се асоциира към дадена контрола. Единия начин е контролата да се напише като съдържание на елемента `label`, като самия надпис се постави преди или след контролата. Пример:
`<label>`Име:` <input type="text" name="name" /></label>`
Другия начин е да се използва атрибута `for`, чиято стойност трябва да бъде идентична със стойността на атрибута `id` на контролата. Пример:
`<label for="comments">`Коментари:`</label><br />
<textarea id="comments" name="comments" ></textarea>`

Един `label` елемент може да съдържа всякакви елементи от текстово ниво, но само една контрола и не може да съдържа други `label` елементи. Атрибутите са (coreattrs), (i18n), (events), `for`, accesskey, onfocus и onblur. Когато елемента `label` получи фокуса на клавиатурата, той трябва да го предаде на асоциираната с него контрола.

#### Групиране на контроли

Елемента `fieldset` позволява тематично групиране на контролите. Атрибутите са (coreattrs), (i18n) и (events). Заглавието на групата се задава чрез елемента `legend`. Атрибутите му са същите като за `fieldset`, плюс accesskey. Само един `legend` елемент е позволен в `fieldset` елемент и той не може да бъде предхождан от текст или други елементи.

#### Изпращане на формуляр

Начина на изпращане на формуляр се задава чрез атрибута `method` на елемента `form`. Стойността на този атрибут може да бъде `get` или `post`. При "`get`", информацията от формуляра се изпраща заедно с адреса. Ако във формуляра има дълъг текст (напр. от `textarea`), парола или файл, използвайте `post`. Също така ако информацията от формуляра се използва за да се правят промени на сървъра (напр. записване на файл) препоръчително е да се използва `post`.

кодировка и формуляри> (en)

#### Примерен код за формуляр

`<form action="">
<fieldset>
<legend>
`Лична информация` </legend> <label> `Име:`<br />
<input name="fname" />
</label>
<br />
<label>
`Фамилия:`<br />
<input name="lname" />
</label>
</fieldset>
<fieldset>
<legend>`Предпочитан шрифт`</legend>
<label>
<input type="radio" name="font"
value="serif" checked="checked" />
`Serif` </label> <label> <input type="radio" name="font" value="sansserif" /> `Sans-serif` </label> </fieldset> <fieldset> <legend>`Други предпочитания`</legend>
<label>`Цветове:`<br />
<select name="color"
multiple="multiple" size="5">
<optgroup label="Светли">
<option value="white">бял</option>
<option value="yellow">жълт</option>
</optgroup>
<optgroup label="Тъмни">
<option value="blue">син</option>
<option value="black">черен</option>
</optgroup>
</select>
</label>
<br />
<label>`Размер на текста:`<br />
<select name="textsize">
<option value="14"
selected="selected">14 px</option>
<option value="16">16 px</option>
</select>
</label>
<br />
<label>
<input type="checkbox" name="onesizeforall" />
`Използвай този размер за всички елементи` </label> </fieldset> <fieldset> <input type="submit" value="Изпрати" /> <input type="reset" value="Изчисти" /> </fieldset> </form>`

## Къде са Frames?

Frames позволяват на една страница да се покажат два или повече HTML документа. Frames не могат да се използват в XHTML 1.0 Strict, ако искате да ги използвате ще трябва да използвате XHTML 1.0 Frameset - за самия документ който обединява останалите, и XHTML 1.0 Transitional - за останалите.

XHTML 1.0 Transitional поддържа атрибута `target` на препратките, с който може да се определя в коя рамка да се зареди свързания документ. Например ако имате две рамки и искате препратките от документа в едната рамка да се отварят в другата, ще трябва да използвате този атрибут. Също така ако имате препратки към външен сайт, най-вероятно няма да искате да отворите новия сайт в една от вашите рамки (не се препоръчва) и пак ще трябва да използвате атрибута `target`.

Преди да решите дали да използвате Frames обаче, помислете дали наистина са ви необходими. Frames могат да бъдат полезни например ако имате един голям индекс който не искате да се зарежда с всяка страница по отделно.