Aber ich würde gerne die Navigationsleiste und die Titelzeile, die ja immer gleich sind, nicht in jede meiner Seiten einzeln einbauen, sondern sie als Teildateien auf meinem Server abrufen lassen.
Das lohnt nicht. Der Protokollüberhang, der nötig ist, um den Browser drei statt einer HTML-Datei abzurufen, dürfte rein rechnersich merklich sein. Außerdem müsste das per Javascript/DOM/Ajax vollbracht werden, was noch "schlimmer" wäre als die Frames, die du jetzt benutzt.
Außerdem brauche ich dann bei Änderungen der Navigation nur eine Teil-Datei zu ändern und nicht jede einzelne Seite.
Das ist der einzige (und vollkommen richtige) Grund, solche Seitenteile zentral an einer Stelle zu lagern.
Soweit ich verstanden habe, wäre "php" eine Möglichkeit, das zu verwirklichen, wenn der Server diese Möglichkeit anbietet.
PHP ist eine Möglichkeit, serverseitig eine HTML-Seite aus mehreren Teilen zusammenzusetzen. Du brauchst dazu lediglich an der gewünschten Stelle
<?php include("B.html"); ?>
in die Datei A einzufügen, um den Inhalt der Datei B dort erscheinen zu lassen. B.html ist dabei der gewünschte Dateiname.
Geht das nur im body-Teil oder auch im head-Teil der html-Datei?
PHP kümmert sich nicht um HTML, eine .php-Datei ist ein Programm, das zwar meist aussieht wie eine HTML-Datei, aber keine ist. Du kannst kreuz und quer PHP-Blöcke (<?php [Anweisungen] ?>) einstreuen, am Anfang, am Ende, mitten in einem HTML-Befehl, wie du lustig bist.
Endung ".php?!"
Soll der Server eine Datei als PHP-Datei erkennen, wird sie in aller Regel mit der Endung .php versehen, richtig.
PHP ist eine ziemlich vollständige Programmiersprache. Eine einfachere und deshalb für dich vielleicht überschaubarere Alternative sind Server-Side Includes (SSI). Im Apache sind sie mittels mod_include realisiert und in aller Regel selbst auf Servern vorhanden, auf denen es kein PHP gibt.
Mit SSI bindet man Dateien üblicherweise so ein:
<!--#include virtual="B.html" -->
Der wesentliche Unterschied ist hier nur, dass B.html in diesem Fall eine URL ist, kein Dateiname. Du gibst hier also einen (lokalen) URL-Pfad ein, so, wie du ihn in der Browser-Adressleiste eingeben würdest.
Die übliche Endung für SSI-Dateien ist .shtml.
Auch bei SSI ist es egal, wo die Anweisung erscheint. Auch wenn das jetzt für den Einstieg etwas zu hoch sein mag: <meta>-robots setze ich in meinen Seiten in etwa so:
<meta name="robots" content="<!--#echo var="robots" -->">
Tatsächlich steht da noch eine if-Abfrage drum herum, aber worauf es mir hier ankommt, ist zu zeigen, das SSI- und auch PHP-Anweisungen überall erscheinen können, so wie in diesem Fall mitten in einem HTML-Attribut die Variable robots ausgegeben wird.
SSI ist trotz seines geringen Umfangs recht flexibel, ich bastel' damit sogar eine Krümelnavi in Form einer <ul>-Liste zusammen. In Navigationsmenüs lässt sich ohne allzu große Umstände die aktive Seite hervorheben. Es muss also nicht unbedingt immer PHP sein.
Noch ein Tipp:
Richtest du alle deine Seiten-URLs als Verzeichnisse ein, also /kontakt/ statt zum Beispiel /kontakt.php, kannst du auch später noch zu anderen Techniken wechseln, ohne, dass die URLs sich wegen der Dateiendung ändern.