Przed podjęciem decyzji, czy użyć <base>tagu, czy nie, musisz zrozumieć, jak to działa, do czego może być użyty i jakie są tego konsekwencje, a na koniec przeważyć zalety / wady.
<base>Tag ułatwia głównie tworzenie względne linki w templating językach nie trzeba się martwić o obecnej sytuacji w każdym linkiem.
Możesz zrobić na przykład
<base href="${host}/${context}/${language}/">
...
<link rel="stylesheet" href="css/style.css" />
<script src="js/script.js"></script>
...
<a href="home">home</a>
<a href="faq">faq</a>
<a href="contact">contact</a>
...
<img src="img/logo.png" />
zamiast
<link rel="stylesheet" href="/${context}/${language}/css/style.css" />
<script src="/${context}/${language}/js/script.js"></script>
...
<a href="/${context}/${language}/home">home</a>
<a href="/${context}/${language}/faq">faq</a>
<a href="/${context}/${language}/contact">contact</a>
...
<img src="/${context}/${language}/img/logo.png" />
Uwaga: <base href>wartość kończy się ukośnikiem, w przeciwnym razie zostanie zinterpretowana względem ostatniej ścieżki.
Jeśli chodzi o zgodność przeglądarki, powoduje to tylko problemy w IE. <base>Tag HTML jest określona jako nie posiadające znacznik końcowy </base>, tak to prawda tylko do użytku <base>bez znacznika końcowego. Jednak IE6 myśli inaczej i cała zawartość po tym <base>tagu jest umieszczony w takim przypadku, jak dziecko z <base>elementu w drzewie DOM HTML. Może to powodować na pierwszy rzut oka niewyjaśnione problemy w Javascript / jQuery / CSS, tj. Elementy są całkowicie nieosiągalne w określonych selektorach html>body, dopóki nie odkryjesz w inspektorze DOM HTML, że pomiędzy nimi powinien być base(i head).
Typowa poprawka IE6 używa komentarza warunkowego IE w celu dołączenia znacznika końcowego:
<base href="http://example.com/en/"><!--[if lte IE 6]></base><![endif]-->
Jeśli nie zależy ci na walidatorze W3 lub korzystasz już z HTML5, możesz go po prostu zamknąć, każdy przeglądarka internetowa i tak go obsługuje:
<base href="http://example.com/en/" />
Zamknięcie <base>znacznika natychmiast naprawia również szaleństwo IE6 w WinXP SP3, aby żądać <script>zasobów ze względnym URI w srcnieskończonej pętli.
Kolejny potencjalny problem IE pojawi się, gdy użyjesz względnego identyfikatora URI w <base>znaczniku, takiego jak <base href="https://stackoverflow.com//example.com/somefolder/">lub <base href="https://stackoverflow.com/somefolder/">. To się nie powiedzie w IE6 / 7/8. Nie jest to jednak wina przeglądarki; używanie względnych identyfikatorów URI w <base>znaczniku jest błędne. W specyfikacji HTML4 podano, że powinien to być bezwzględny identyfikator URI, zaczynając od schematu http://lub https://. Zostało to usunięte w specyfikacji HTML5 . Jeśli więc używasz tylko HTML5 i docelowych przeglądarek zgodnych z HTML5, wszystko powinno być w porządku, używając względnego identyfikatora URI w <base>tagu.
Jeśli chodzi o stosowanie kotwic nazwanych / fragmentów mieszających, jak <a href="#anchor">, kotwicowych ciągów znaków podobnych <a href="?foo=bar">i kotwicowych fragmentów ścieżki podobnych <a href=";foo=bar">, za pomocą <base>znacznika zasadniczo deklarujesz wszystkie względne linki względem niego, w tym tego rodzaju kotwice. Żadne z odnośników relacyjnych nie jest już związane z bieżącym identyfikatorem URI żądania (jak by się to stało bez <base>tagu). To może być przede wszystkim mylące dla początkujących. Aby zbudować te kotwice we właściwy sposób, w zasadzie musisz dołączyć identyfikator URI,
<a href="${uri}#anchor">hash fragment</a>
<a href="${uri}?foo=bar">query string</a>
<a href="${uri};foo=bar">path fragment</a>
gdzie w ${uri}zasadzie tłumaczy się $_SERVER['REQUEST_URI']na PHP, ${pageContext.request.requestURI}JSP i #{request.requestURI}JSF. Należy zauważyć, że frameworki MVC, takie jak JSF, mają znaczniki zmniejszające cały ten szablon i eliminujące potrzebę <base>. Zobacz także m.in. Jakiego adresu URL użyć do połączenia / nawigacji do innych stron JSF .