2016-06-07 2 views
0

Я пытаюсь проверить мой hxtml-файл, но есть проблема с элементом холста.Проверка холста XHTML

w3c errors

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

<canvas id="canvas" width="500" height="250" style="background-color:#303030;" > </canvas> 

Кто-нибудь есть идеи, как его преодолеть?

+1

canvas не является частью xhtml1, если вы хотите использовать html5, используйте html5 doctype – Kaiido

ответ

1

Как было сказано в комментариях, использование doctype для HTML5 (<!DOCTYPE html>) является разумным выбором.

Однако, возможно, вы застряли с XHTML 1 по любой причине. Одной из таких причин может быть, поскольку XHTML 1 имеет реальный DTD, он поддерживает использование ссылок на объекты, таких как &nbsp; и &thorn;. (XHTML5 не имеет такой роскоши!)

Если это так, вы могли заметить, что браузеры уже поддерживают более новые элементы, такие как canvas, поэтому вам действительно не нужно ничего делать, чтобы заставить его работать. Все, что вам нужно сделать, это удовлетворить валидатор!

Итак, вот трюк. Все, что вам нужно сделать, это добавить новые элементы в объявление doctype, как если бы они были частью DTD.

<?xml version="1.0" encoding="UTF-8"?> 
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd" 
    [ 
    <!ELEMENT canvas EMPTY> 
    <!ATTLIST canvas 
    id   ID    #IMPLIED 
    class  CDATA   #IMPLIED 
    style  CDATA   #IMPLIED 
    title  CDATA   #IMPLIED 
    lang  CDATA   #IMPLIED 
    xml:lang CDATA   #IMPLIED 
    dir   (ltr|rtl)  #IMPLIED 
    onclick  CDATA   #IMPLIED 
    ondblclick CDATA   #IMPLIED 
    onmousedown CDATA   #IMPLIED 
    onmouseup CDATA   #IMPLIED 
    onmouseover CDATA   #IMPLIED 
    onmousemove CDATA   #IMPLIED 
    onmouseout CDATA   #IMPLIED 
    onkeypress CDATA   #IMPLIED 
    onkeydown CDATA   #IMPLIED 
    onkeyup  CDATA   #IMPLIED 
    height  CDATA   #IMPLIED 
    width  CDATA   #IMPLIED 
    > 
    <!ENTITY % InlSpecial.class 
    " | audio | canvas | embed | iframe | img | math | object | svg | video"> 
    ] 
> 
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en-us"> 
<head> 
    <title>Element test</title> 
</head> 
<body> 
    <div> 
    <canvas id="canvas" width="500" height="250" style="background-color:#303030;"></canvas> 
    </div> 
</body> 
</html> 

Кстати, если вы думаете, что это многовато, помните, что вам нужно только сделать это, чтобы удовлетворить валидатор, так что вы можете удалить все атрибуты из ATTLIST за исключением тех, что вы на самом деле с помощью (в вашем примере id, width, height и style).

+0

, есть ли способ переместить расширение doctype в файл sepearate? – Dmitry

+0

@Dmitry Не так далеко, насколько я знаю. Конечно, вы всегда можете загрузить существующий DTD и добавить к нему эти новые элементы, а затем использовать его, но тогда он уже не будет формально XHTML 1! Поэтому я боюсь делать все это, так как это единственный жизнеспособный способ. –