2010-01-29 2 views
33

HTML-код base HTML является базой для относительных URI в HTML. Необходимо, чтобы JavaScript и CSS соблюдали его для относительных URI, выпущенных в них:Является ли HTML <base> тегом, также отмеченным скриптами и CSS?

E.g.

JavaScript:

location.href = "mypage.htm"` 

CSS:

h4 { 
    background-image: url(myimage.gif) 
} 

(в любом браузере?)

ответ

37

CSS пути всегда (кроме случаев, когда IE6 глючит и глупа и пытается загрузить .htc файлы указанные в CSS behavior атрибутах относительно документа) относительно самой таблицы стилей и не зависят от местоположения HTML. Для других вещей <base> повлияет на воспринимаемую текущую директорию HTML, как если бы файл находился в каталоге, определенном базой. Следовательно, это влияет на такие вещи, как location.href=...;. Кстати, встроенные стили и информация стиля в элементе <style> загружаются относительно местоположения документа. Разумеется, на них влияет тег <base>.

+0

Тщательное и concise.Thanks. –

12

Тег base действительно соблюдается относительными ссылками внутри HTML-документа сам.

Существует, однако, специфическая для IE6 ошибка, которую вы действительно должны учитывать при использовании тега <base> в HTML (а не в XHTML). <base> тег в HTML документированы как не имеющие конечный тег </base>, но IE6 ошибочно предположил, что это за истину, которая приведет к тому, что весь контент после<base> тег помещается в ребенка из <base> тега в его HTML DOM дерева , Это может вызвать на первый взгляд необъяснимые проблемы в Javascript/jQuery/CSS, то есть элементы полностью недоступны в определенных вариантах выбора (например, html>body), пока вы не обнаружите, что между ними есть base.

Нормальный IE6 исправление с помощью условных комментариев включить закрывающий тег:

<base href="http://example.com/"><!--[if lte IE 6]></base><![endif]--> 
+0

+1 для разъяснения IE6. –

+0

Есть ли причина не делать ? –

+1

@Marcus: Это не HTML4-действительный (хотя браузер принимает его). Но в HTML5 вы можете это сделать. – BalusC