Wanneer je een pagina wilt opdelen in verschillende vensters gebruik je frames. In HTML 4.0 werden frames vaak gebruikt om bijvoorbeeld een pagina te verdelen in een navigatievenster en het venster waar de inhoud in komt. Vanaf de XHTML standaard waren de frames niet meer zo populair en vond men met server-side scripting betere manieren.
In XHTML 1.0 mogen nog frames gebruikt worden wanneer de doctype wordt aangepast naar XHTML 1.0 Frameset DTD (zie: Doctype).
Frames zijn niet zoekmachine vriendelijk. Wanneer pagina's bestaande uit frames worden geïndexeerd door een bepaalde zoekmachine, zal de inhoud niet volledig worden opgenomen. Dit komt omdat de inhoud op verschillende pagina's is verdeeld, en zoekmachines hier niet goed met overweg kunnen.
Een ander nadeel van frames zijn de vervelende scrollbars die opduiken wanneer de inhoud te groot wordt om volledig getoond te worden op de pagina.
Om frames te kunnen gebruiken moet er een frame document worden aangemaakt. Een frame document bevat geen inhoud maar vertelt aan de browser hoe het venster moet verdeeld worden in verschillende frames en welk document moet worden geopend in elk frame.
Om dit te kunnen verwezelijken worden twee elementen gebruikt: frameset en frame.
Het frameset element bepaalt hoe een document wordt opgedeeld in frames. Tussen <frameset> en </frameset> worden de frames gedefinieerd met elk hun bestemming naar de pagina die in het venster wordt geladen.
Wanneer je het venster van de browser wilt verdelen in horizontale vensters voeg je het rows attribuut toe aan het frameset element.
<frameset rows="..."> ... </frameset>
Wanneer je het venster van de browser wilt verdelen in verticale vensters voeg je het cols attribuut toe aan het frameset element. Enkele voorbeelden:
<frameset cols="..."> ... </frameset>
Voorbeelden van mogelijke waarden die de attributen cols en rows kunnen bevatten.
cols="100, *"
Het venster wordt verdeeld in twee verticale vensters. Het linkse frame is 100 pixels breed, en het rechtse frame vult de rest van het scherm.
rows="*,*,*"
Het venster wordt verdeeld in drie horizontale frames met een gelijke hoogte.
cols="20%, 80%"
Het venster wordt verdeeld in twee verticale vensters. Het linkse frame is 20% breed, en het rechtse frame vult de rest van het scherm (80%). Wanneer de totale som groter is als 100% worden de waarden automatisch proportioneel verkleind.
Een frame wordt bepaald door het frame element. De bestemming van de pagina wordt bepaald in het src attribuut.
<frameset cols="20%, *"> <frame src="navigatie.html" /> <frame src="inhoud.html" /> </frameset>
name attribuut
Met het attribuut name kan aan een frame een naam gegeven worden. Door een frame een naam te geven kan een URI van een hyperlink geopend worden in een bepaald frame. De waarde van het target attribuut van het a element is dan gelijk aan de naam van het frame.
Het navigatie frame krijgt als naam "navigatie".
<frame src="navigatie.html" name="navigatie" />Door de waarde "navigatie" aan het target attribuut mee te geven, wordt de URI van de hyperlink geopend in het navigatie frame.
<a href="navigatie2.html" target="navigatie">Andere navigatie</a>
noresize attribuut
De gebruiker kan met de muis de balk tussen de frames verslepen waardoor de frames van afmetingen veranderen. Om deze optie uit te schakelen voeg je het noresize attribuut toe.
<frame src="navigatie.html" noresize="noresize" />