WCM Forum

WCM Forum (http://www.wcm.at/forum/index.php)
-   Programmierung (http://www.wcm.at/forum/forumdisplay.php?f=17)
-   -   Kleines html-Chaos? (http://www.wcm.at/forum/showthread.php?t=132927)

Satan_666 30.04.2004 18:09

Kleines html-Chaos?
 
Liebe Forenten!

Gefordert sind dieses Mal die HTML-Experten - siehe nachfolgende Problembeschreibung:


Meine Seiten gliedern sich in 4 horizontale Bereiche:

1. Seitenkopf
2. Navigationsleiste
3. Content (Inhalt)
4. Fußzeile


Meine Lösung sieht folgendermaßen aus:


<table border="0" width="100%" height="100%">
<tr height="90">
<td>

</td>
</tr>
<tr height="25">
<td>

</td>
</tr>
<tr>
<td>
<!-- hier ist der Seiteninhalt; da die Menge des Inhaltes unterschiedlich ist,
wurde hier auf den Parameter height in <tr> verzichtet. -->
</td>
</tr>
<tr height="25">
<td>

</td>
</tr>
</table>




An sich funktioniert dies sehr gut. Die Fußzeile befindet sich entweder genau am Ende der Seite (egal, wie groß das Fensterl ist) - oder darunter, falls der Seiteninhalt ein Scrollen der Seite notwendig macht. Ganz in meinem Sinne.


ABER: beim Opera 6.01 funktioniert's nicht. Dort wird scheinbar der height-Parameter total ignoriert. Zumindest sieht die Seite exakt gleich aus, auch wenn ich die height-Parameter nicht verwende. Gleiches Ergebnis gibt es übrigens auch, wenn ich die Höhe der Zeilen mittels CSS definiere (style="height:90px").


Bin dankbar für jeden Lösungsansatz, der an Frames vorbei geht - many thanks!!

hr_ralph 30.04.2004 18:37

Soweit ich weiß ist das height Attribut für den <tr>-Tag nicht in der Spezifikation (4.01). Es gibt aber die Möglichkeit den <td>-Tag eine height-Attribut zu hängen.

hr_ralph

Satan_666 30.04.2004 21:08

hi, hr_ralph!

das stimmt zwar, was du schreibst - nur hilft es leider nicht. wie geschrieben: das problem betrifft nur den (doofen?) opera!


:ms:

_m3 01.05.2004 07:47

Werter Satan_666, ein Layout mit Tabellen zu machen ist doch sehr 90er Retro. Warum nicht mit CSS?

Schoenes Beispiel:
http://www.csszengarden.com/

P.S.: das height-Attribut ist bereits in HTML 4.01 deprecated, sollte also nicht mehr verwendet werden. Ich denke mal, dass sich Opera da sehr genau an den Standard haelt.

Satan_666 01.05.2004 10:35

@_m3
 
hi, _m3!

Beleidigt? Ich meine, weil Du mich gar so förmlich anredest.... *lol*


Also: Wer lesen kann, ist klar im Vorteil! In meiner Anfrage steht doch klar geschrieben, dass ich dieses Verfahren auch mit

style="height:90px"

probiert habe; mit dem selben Erfolg! Somit KANN es meiner meinung nach gar nicht daran liegen, dass sich die anderen Browser nicht an die Norm halten.


Desweiteren habe ich nicht verstanden, was Du mir mit dem Link sagen willst....

Hannes0815 01.05.2004 11:33

Betrachte mal den Quellcode des Links ;)

Satan_666 01.05.2004 14:06

Irgendwie habe ich das Gefühl, dass ich mein Problem noch nicht verständlich artikulieren konnte. Daher mal einen anderen Ansatz:

Meine Vorgabe ist, die Fußzeile möglichst am Ende des Darstellungsbereiches anzuzeigen. Nehmen wir folgende Beispiele an:


1. Darstellungsbereich ist 550 Pixel hoch
In diesem Falle müsste der Contentbereich mit "min-height:410px" definiert werden: 550 - 90 (Logo) - 25 (Navigation) - 25 (Fußzeile) = 410

2. Darstellungsbereich ist 432 Pixel hoch
In diesem Falle müsste der Contentbereich mit "min-height:292px" definiert werden: 432 - 90 - 25 - 25 = 292

Damit sollte mein Problem klar sein: ich weiß nicht und kann es nicht wissen, wie groß der Darstellungsbereich im Browser ist, wenn die Seite angezeigt wird. Somit folgt, dass ich hier keinen fixen Wert in der Höhe definieren kann. Ganz abgesehen davon, dass bei einer fixen Höhenangabe auch keine automatische Anpassung vorgenommen wird, wenn sich die Fenstergröße ändert.


Meine Lösung ist deswegen "elegant", weil ich jene Rows, die eine fixe Höhe haben, entsprechend deklarieren kann und die restliche Row ohne Höhenangabe. Hat die Tabelle eine Höhe von 100%, dann funktioniert es (bei IE und Mozilla). Und zwar auch dann, wenn sich die Fenstergröße ändern sollte, weil der Browser intern die Größe des Contentbereiches neu errechnet, wenn sich die Fenstergröße ändert.

Ich fürchte, dass mir der Tag <div> kaum weiterhelfen kann, zumal ich hier ja auch nicht sagen kann, dass die Höhe abgängig von der Fenstergröße ist.


Möglich, dass das ganze mit JavaScript lösbar ist. Leider bin ich in JavaScript zu wenig firm.....

pong 01.05.2004 14:38

http://alistapart.com/articles/footers/

pong

_m3 01.05.2004 20:39

Re: @_m3
 
Zitat:

Original geschrieben von Satan_666

Also: Wer lesen kann, ist klar im Vorteil!

Ja, das sehe ich auch so. :ms:

Zitat:

In meiner Anfrage steht doch klar geschrieben, dass ich dieses Verfahren auch mit

style="height:90px"

probiert habe; mit dem selben Erfolg! Somit KANN es meiner meinung nach gar nicht daran liegen, dass sich die anderen Browser nicht an die Norm halten.


Desweiteren habe ich nicht verstanden, was Du mir mit dem Link sagen willst....

Was ich meinte ist, dass Du komplett auf Tabellen verzichten willst, und NUR mit CSS arbeiten solltest (div, span, ...).

Jaguar 01.05.2004 21:48

Re: Re: @_m3
 
Zitat:

Original geschrieben von _m3
Ja, das sehe ich auch so. :ms:

Was ich meinte ist, dass Du komplett auf Tabellen verzichten willst, und NUR mit CSS arbeiten solltest (div, span, ...).

Dem kann ich nur dringlichst Zustimmen! Tabellen waren mitte der 90er in. Layout = CSS, alles andere macht keinen Sinn.

Beim Link von Pong hast ein wunderschönes Beispiel. Das brauchst eigentlich eh nur mehr bei dir einfügen und fertig.

weila 01.05.2004 21:57

hab zwar wenig ahnung von HTML, aber hier mein Lösungsvorschlag:

Vergiss Opera 6.01 - der ist nicht mal aktuell

und wenn das Problem mit 7.5 immer noch hast darfst dich wieder melden :p

Jaguar 01.05.2004 22:01

*seufz* genau solche Aussagen sind nicht sehr hilfreich um den Leuten beizubringen sich an Standards zu halten. *kopfschüttel*

weila 02.05.2004 14:05

na so schlecht ist mein vorschlag doch auch wieder nicht.
denn wenn man sich an alten browserversionen orientiert müsste man auch die damaligen standards einhalten, was doch wirklich nicht alzu sinnvoll ist.

auserdem (ehrlich gesagt und zugegeben) war ich zu faul den thread zu lesen *schäm* - und wollte einfach nur eine Lösung vorschlagen.
Hirnwichsen nennt man sowas ;)

lg und bitte nicht böse sein...

ruffy_mike 03.05.2004 16:52

Zitat:

Original geschrieben von Jaguar
*seufz* genau solche Aussagen sind nicht sehr hilfreich um den Leuten beizubringen sich an Standards zu halten. *kopfschüttel*
Um weila ein bisschen Beistand zu leisten, hast du dir mal eine mit CSS formatierte Seite unter Netscape 4.x angesehen? Auch IE 5.x hat teilweise Probleme damit.

_m3 03.05.2004 17:00

Netscape 4 ist aber nichte mrh wirklich Stand der Dinge. Detto der IE 5.
Und mit CSS kann man sich die Seiten trotzdem ansehen, sehen halt nciht sooo toll aus. Nennt man dann "graceful degradation".
http://www.anybrowser.org/campaign/a...#degradability

ruffy_mike 03.05.2004 17:08

Ich wollte ja damit nicht unbedingt ausdrücken, dass NS4/IE5 Standardkonform sind, sondern dass weilas Rat schon so seine Berechtigung hat.

Im übrigen, nur weil ein Attribut 'deprecated' ist, sollte es nicht sofort vom Browser ignoriert werden.

_m3 03.05.2004 19:43

Zitat:

Original geschrieben von ruffy_mike
Im übrigen, nur weil ein Attribut 'deprecated' ist, sollte es nicht sofort vom Browser ignoriert werden.
Nein, aber vom Seitenschreiber nicht merh verwendet werden.

Satan_666 05.05.2004 20:02

Hi!

Danke für die rege Diskussion. Und sorry, dass ich mich erst jetzt wieder melde. Ich musste mich mal durch den mir ziemlich unverständlichen englischen Kauderwelsch durchkämpfen.


Schön langsam beginne ich, zu verstehen, wie die Lösung aussehen sollte. Dennoch - so ganz klar komme ich damit auch nicht.

Wieso? Nun, mein jetziger Code sieht so aus:

<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<title>Test 1</title>
<style type="text/css">
<!--
#logo {position:absolute; top:5px; left:5px; width:100%; height:75px; z-index:1}
#menu {position:absolute; top:90px; left:5px; width:100%; height:30px; z-index:2}
#inha {position:absolute; top:130px; left:5px; width:100%; height:10px; z-index:3}
#fuss {position:absolute; bottom:5px; left:5px; width:100%; height:30px; z-index:4}
-->
</style>
</head>
<body>
<div id="logo" style="background:#ccccff; border:solid 2px blue;">
<table border="0" cellspacing="0" cellpadding="0" width="100%">
<tr>
<td><h1>Hier wäre das Logo</h1></td>
<td align="right"><h3>Hier wäre das zweite Logo</h3></td>
</tr>
<tr>
<td>Hier wäre die Adresse</td>
<td align="right">Hier wäre die Zusatzinfo</td>
</tr>
</table>
</div>
<div id="menu" style="background:#ffffcc; border:solid 2px black;">
Home - Über mich - Was ist neu? - Nochwas
</div>
<div id="inha" style="background:#ffffff; border:solid 2px green;">
Hier ist der Content der Seite!
</div>
<div id="fuss" style="background:yellow; border:solid 2px red;" align="center">
Copyright-Angabe
</div>
</body>
</html>


So gut das auch aussehen mag (und mir sogar besser gefällt als die "veraltete" Lösung mit der Tabelle), so gleich ist trotzdem mein Problem. Der Grund: der Fuß-Bereich (mit der Copyright-Angabe) steht zwar schön brav ganz unten, jedoch wird dieser vom Content-Bereich überlappt, wenn dieser so groß ist, dass der Platz zwischen Menu und Fuss zu klein ist. Womit wir wieder exakt dort wären, wo ich begonnen habe. Ich muss also auch bei dieser Lösung wissen, wie viel Platz der Content-Bereich einnehmen wird, um den Fuß-Bereich korrekt platzieren zu können. Die Angabe "botton:??px" setzt diesen Block lediglich an die untere Kante des Browser-Fensters, nicht mehr und nicht weniger! Danach scrollt dieser einfach an dieser Position mit!

Fazit: für mich unbrauchbar, auch wenn es derzeit "state of the art" sein soll!


Weitere Ideen?

snowman 05.05.2004 20:13

es gibt auch

position: relative;

gruss,
snowman

Satan_666 05.05.2004 21:00

Stimmt - aber das hilft auch nicht, weil dann der Fuß-Bereich oben statt unten ist.

relativ bedeutet (wenn ich es richtig deute), dass es ein Eltern-Element geben muss, auf das es sich beziehen kann.....

Jaguar 05.05.2004 21:09

Was da eher gemeint war ist das du deine DIVS nicht mit absolut ausrichten sollst sondern mittels floating.. dann wird ein div nach dem andern angezeigt.. dh. wenn dein contentbereich aus ist kommt hinten dran die fußzeile..

heli2sky 05.05.2004 22:03

da ist aber das problem, dass wenn zu wenig text auf der seite ist, der footer nicht am ende der seite ist, sondern nur am ende des textes! das will er so nicht ;)

snowman 06.05.2004 15:12

dann soll er halt eine höhe im content-div angeben und wenns größer ist, wird der container gestreckt.

gruss,
snowman

Satan_666 06.05.2004 18:08

@snowman
 
Hi snowman!

Bitte mein Beispiel genau lesen: im Style-Tag habe ich eine Höhe angegeben!

Das Problem bleibt: die Höhe muss genau den Wert haben, der sich aufgrund der Fensterhöhe ergibt. Die Fensterhöhe weiß ich aber nicht, damit kann ich nur einen Pseudowert angeben. Und durch Zufall den richtigen Wert erwischen, aber den halte ich für ziemlich unwahrscheinlich. Also wird entweder die Fußzeile etwas höher oder tiefer stehen als geplant.

Auch wenn's depricated sein soll: mit der Tabelle funktionierts zumindest mit dem IE und auch mit dem Mozilla! Dass es keine andere Lösung geben soll, kann ich nicht glauben....


Alle Zeitangaben in WEZ +2. Es ist jetzt 08:26 Uhr.

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
© 2009 FSL Verlag