molily: (Apache) Content-Type-Header bei PHP-Skripten

Beitrag lesen

Hallo,

JETZT sind es aber wirklich IDENTISCHE php und css Dateien, um die es hier geht (bis auf den MIME-Type).

Es ist nicht entscheidend, ob sie vom Code her identisch sind. Durch die unterschiedliche Kennzeichnung, text/html und application/xhtml+xml, werden die Dokumente gemäß unterschiedlicher Regeln verarbeitet. Ein und dieselbe Syntax hat in XHTML eine andere Bedeutung als in HTML.

Die application/xhtml+xml-Datei sieht so aus:

<div class="menu_line">
 <div id="menu_line_start" />
 <div class="menu_line_links"><a href="test.html" class="top_menu">Forum</a></div>
 <div class="menu_line_links"><a href="test.html" class="top_menu">Gästebuch</a></div>
 <div class="menu_line_links"><a href="test.html" class="top_menu">Fotos</a></div>
 <div class="menu_line_links"><a href="test.html" class="top_menu">Downloads</a></div>
 <div class="menu_line_links"><a href="test.html" class="top_menu">Privat</a></div>
 <div class="menu_line_links"><a href="test.html" class="top_menu">Webalizer</a></div>
 <div class="menu_line_links"><a href="test.html" class="top_menu">Info</a></div>
 <div class="menu_line_links"><a href="test.html" class="top_menu">News</a></div>
 <div id="menu_line_end" />
</div>
<div id="menu_left" />
<div id="menu_bottom_png" />

<div id="menu_line_start" /> usw. ist, wie du weißt, in XML äquivalent zu <div id="menu_line_start"></div>. Nicht aber, wenn das Dokument nicht als XML, sondern als HTML/SGML verarbeitet wird. Der Code mag zwar derselbe sein, er wird aber anders verarbeitet und führt zu einem anderen Elementbaum. Obiger Code erzeugt als HTML verarbetiet im Mozilla folgende Verschachtelung:

<div class="menu_line">
 <div id="menu_line_start">
  <div class="menu_line_links"><a href="test.html" class="top_menu">Forum</a></div>
  <div class="menu_line_links"><a href="test.html" class="top_menu">Gästebuch</a></div>
  <div class="menu_line_links"><a href="test.html" class="top_menu">Fotos</a></div>
  <div class="menu_line_links"><a href="test.html" class="top_menu">Downloads</a></div>
  <div class="menu_line_links"><a href="test.html" class="top_menu">Privat</a></div>
  <div class="menu_line_links"><a href="test.html" class="top_menu">Webalizer</a></div>
  <div class="menu_line_links"><a href="test.html" class="top_menu">Info</a></div>
  <div class="menu_line_links"><a href="test.html" class="top_menu">News</a></div>
  <div id="menu_line_end"></div>
  <div id="menu_left">
   <div id="menu_bottom_png"></div>
  </div>
 </div>
</div>

<div id="menu_line_start" /> usw. werden also als Start-Tags angesehen, nicht als gesamtes Element <div id="menu_line_start"></div>. Da bei dieser Interpretation am Ende die schließenden Tags fehlen, fügt sie Mozilla automatisch ein.
Es ist logisch, dass dein CSS mit diesem Elementbaum nicht funktioniert. Wie gesagt solltest du die XHTML 1.0-Kompatibilitätsrichlinien beachten. Dort wird darauf hingewiesen, dass <div /> und ähnliches nicht zu empfehlen ist: http://www.w3.org/TR/xhtml1/#C_3. Die triviale Lösung für dein Problem sollte also sein, <div id="menu_line_start"></div> usw. statt <div id="menu_line_start" /> zu notieren, dann sollte der Code auch bei Verarbeitung als HTML den Elementbaum erzeugen, den du beabsichtigst.

Mathias