Интерблог

Архив за Февраль 2009-го

Вайтфон
Автор: Коварный искусатель. Опубликовано: 16 Февраля 2009

Мяу... Все спрашивают, почему у нас в офисе такой необычный телефон. А что в нем такого странного? Вроде бы обычный iPhone от Apple, ни чем не отличающийся от других. А то, что телефон белый, так это очень просто объясняется. Постоянно звонят нам клиенты, вот и раскалился он до бела...

iPhone 3G

 

Метки: Мяу, Студия

Ошибки с картами изображений в XHTML 1.1
Автор: cyberacing. Опубликовано: 02 Февраля 2009

Недавно решил перейти со стандарта XHTML 1.0 Strict на XHTML 1.1. Это было не так сложно, так как различий между ними не так много. Но проверяя валидацию старых проектов, обнаружил, что слишком много ошибок возникает там, где в коде были использованы карты изображений (map и area). Я попытался устранить проблему в валидации согласно стандарту. После устранения ошибок карта изображений проходит валидацию, но... абсолютно не работает, ни в IE, ни в FF. Я решил выяснить, в чем может быть проблема.

Код, работающий корректно в XHTML 1.0 Strict, продолжает работать и в XHTML 1.1, но валидацию не проходит. Проверка возвращает следующие ошибки:

(1) There is no attribute "name".
(2) Character "#" is not allowed in the value of attribute "usemap".
(3) Non-existent ID "#mapName2".

Старый код под XHTML 1.0 Strict, который работает:

<map name="MapName2" id="MapName2">
<area shape="rect" coords="14,123,197,223" 
href="/contacts/" alt=""></area></map>
<img src="/img/imagemap.jpg" usemap="#mapName2" alt="image" />

Подсвечены области с ошибками. Посмотрим, что нам предлагают стандарты. XHTML 1.0 (Strict) DTD представляет нам следующее: 

<!ELEMENT img EMPTY>
<!ATTLIST img
  %attrs;
  src         %URI;          #REQUIRED
  alt         %Text;         #REQUIRED
  longdesc    %URI;          #IMPLIED
  height      %Length;       #IMPLIED
  width       %Length;       #IMPLIED
  usemap      %URI;          #IMPLIED
  ismap       (ismap)        #IMPLIED
>

<!ELEMENT map ((%block; | form | %misc;)+ | area+)>
<!ATTLIST map
  %i18n;
  %events;
  id          ID             #REQUIRED
  class       CDATA          #IMPLIED
  style       %StyleSheet    #IMPLIED
  title       %Text;         #IMPLIED
  name        NMTOKEN        #IMPLIED
>

Для элемента "img", как вы заметили, "usemap" определяется как %URI. Это означает, что знак # может быть использован, как указатель на фрагмент страницы. А для элемента "map" атрибут "id" должен быть обязательно, а для "name" указано, что он может быть использован по желанию. Что мы и делаем. 

Теперь обратимся к стандарту XHTML 1.1: 

<!ATTLIST %input.qname;
      usemap      IDREF                    #IMPLIED
><!ENTITY % map.attlist "INCLUDE" >
<![%map.attlist;[
<!ATTLIST %map.qname;
      %XHTML.xmlns.attrib;
      id         ID                        #REQUIRED
      %class.attrib;
      %title.attrib;
      %Core.extra.attrib;
      %I18n.attrib;
      %Events.attrib;
>

Заметьте, атрибут "usemap" элемента "map" в XHTML 1.1 DTD теперь определяется как IDREF, а не URI. Это означает, что значение "должно быть таким же, как и для ID других элементов". Вот почему # дает ошибку и почему она не может быть ссылкой на ID (т.к. ID не содержат #). Кроме того, элемент "map" больше не поддерживает атрибут "name". 

Теперь мы знаем правила и попробуем изменить наш код: 

<map id = "MapName2">
<area shape="rect" coords="14,123,197,223" 
href="/contacts/" alt=""></area></map>
<img src="/img/imagemap.jpg" usemap="mapName2" alt="image" />

После этого мне полегчало. Код соответствует стандартам и проходит валидацию. НО... эта конструкция отказывается работать в современных браузерах. Все дело в том, что браузеры не на 100% поддерживают рекомендации W3C по XHTML 1.1. Поэтому, если вы хотите, чтобы карты изображений функционировали, вы должны использовать нестандартный XHTML 1.1 и не обращать внимания на ошибки валидации. Вот такие дела.

 

Метки: XHTML, Кодинг

Популярные записи

Принцип неопределённости в РНР

Принцип неопределённости в MYSQL

Недолёт

А ещё AJAX нужен для...

Принцип неопределённости в PHP - праздник продолжается!

Эмуляция плавности в ActionScript.

Программная анимация в ActionScript

Анимация при наведении в ActionScript

Использование кодировки UTF-8

Буквицца

Архив записей  

2019

Янв  Фев  Мар  

2018

Янв  Фев  Мар  Апр  Май  Июн

Июл  Авг  Сен  Окт  Ноя  Дек

2017

Янв  Фев  Мар  Апр  Май  Июн

Июл  Авг  Сен  Окт  Ноя  Дек

2016

Янв  Фев  Мар  Апр  Май  Июн

Июл  Авг  Сен  Окт  Ноя  Дек

2015

Янв  Фев  Мар  Апр  Май  Июн

Июл  Авг  Сен  Окт  Ноя  Дек

2014

Янв  Фев  Мар  Апр  Май  Июн

Июл  Авг  Сен  Окт  Ноя  Дек

2013

Янв  Фев  Мар  Апр  Май  Июн

Июл  Авг  Сен  Окт  Ноя  Дек

2012

Янв  Фев  Мар  Апр  Май  Июн

Июл  Авг  Сен  Окт  Ноя  Дек

2011

Янв  Фев  Мар  Апр  Май  Июн

Июл  Авг  Сен  Окт  Ноя  Дек

2010

Янв  Фев  Мар  Апр  Май  Июн

Июл  Авг  Сен  Окт  Ноя  Дек

2009

Янв  Фев  Мар  Апр  Май  Июн

Июл  Авг  Сен  Окт  Ноя  Дек