2010-01-29 3 views
33

L'elemento HTML base fornisce una base per URI relativi nell'HTML. È necessario che JavaScript e CSS lo rispettino anche per gli URI relativi emessi:Il tag HTML <base> è anche rispettato da script e CSS?

E.g.

JavaScript:

location.href = "mypage.htm"` 

CSS:

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

(in qualsiasi browser?)

risposta

37

percorsi CSS sono sempre (tranne quando IE6 è bacato e stupido e cerca di caricare .htc file specificato negli attributi CSS behavior relativi al documento) relativi al foglio di stile stesso e non dipendono dalla posizione HTML. Per altre cose, <base> influirà sulla directory corrente percepita dell'HTML come se il file fosse situato nella directory definita dalla base. Di conseguenza, influisce su cose come location.href=...;. A proposito, gli stili in linea e le informazioni di stile nell'elemento <style> vengono caricati relativamente alla posizione del documento. Quelli sono interessati dal tag <base>, ovviamente.

+0

approfondita e concise.Thanks. –

12

Il tag base è effettivamente onorato solo dai relativi collegamenti all'interno del documento HTML stesso.

Esiste tuttavia un bug specifico per IE6 che è necessario prendere in considerazione quando si utilizza il tag <base> in HTML (non in XHTML). Il tag <base> è in HTML documentato come non avere un tag di chiusura </base>, ma IE6 in modo errato presupposto per vero che causerà che l'intero contenuto dopo il tag <base> si pone come bambino del tag <base> nel suo albero DOM HTML . Ciò può causare a prima vista problemi inspiegabili in Javascript/jQuery/CSS, vale a dire che gli elementi sono completamente irraggiungibili in selezioni specifiche (ad esempio html>body) finché non si scopre che c'è in realtà uno base in mezzo.

Un normale correzione IE6 sta usando i commenti condizionali per includere il tag di chiusura:

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

+1 per il chiarimento IE6. –

+0

C'è qualche ragione per non fare ? –

+1

@Marcus: non è valido per HTML4 (sebbene i browser lo accettino). Ma in HTML5 puoi farlo perfettamente. – BalusC