CSS Layout - kleiner Fehler in Opera

DEYS

Neuling
Thread Starter
Mitglied seit
11.05.2004
Beiträge
646
Ort
Berlin
Hi, sitze grad an 'nem Design, das fast fertig gecodet ist. Beim letzten Check mit IE 7, FF 2.0.0.1 und Opera 9.2 zeigt mir nur Opera 'n kleinen Fehler an (IE und FF stellen alles wie gewünscht dar).

Hier mal der Quelltext der index. Schon mal vorneweg: Wichtig ist nur am Ende, das div mit der id "rc", in dem sich Sponsoren und Umfrage befinden. Bau ich deren DIVs nämlich ein, rutschen die Inhalte der Bereiche weiter rechts (also die Inhalte von "lc" und "mc") zwei Pixel nach unten.
Code:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
<title>Willkommen auf der Website vom S.C. Petershagen!</title>

<link rel="stylesheet" type="text/css" href="css/elements.css" />
<link rel="stylesheet" type="text/css" href="css/header.css">
<link rel="stylesheet" type="text/css" href="css/content.css">
<link rel="stylesheet" type="text/css" href="css/lc.css">
<link rel="stylesheet" type="text/css" href="css/mc.css">
<link rel="stylesheet" type="text/css" href="css/rc.css">

</head>

<body>

<div id="frame">
	
<div id="header">
	<div class="row">
		<div id="heol"></div>
		<div id="hor"></div>
		<div id="heor"></div>
	</div>
	<div id="header_main">
		<div id="header_bg">
			<hr id="hr_up" />
			<hr id="hr_down" />
		</div>
	</div>
</div>
	
<div id="content">
	<div id="lc">
		<div id="nav_h"></div>
		<div id="navi">
			<ul>
				<li id="nnews"><a href="#news" title="News"></a></li>
				<div class="nb"></div>
				<li id="ntrain"><a href="#train" title="Training"></a></li>
				<div class="nb"></div>
				<li id="nhb"><a href="#hb" title="Handball"></a></li>
				<div class="nb"></div>
				<li id="nbs"><a href="#bs" title="Breitensport"></a></li>
				<div class="nb"></div>
				<li id="nspons"><a href="#spons" title="Sponsoren"></a></li>
				<div class="nb"></div>
				<li id="nfoto"><a href="#foto" title="Fotos"></a></li>
				<div class="nb"></div>
				<li id="nfor"><a href="#for" title="Forum"></a></li>
				<div class="nb"></div>
				<li id="ngb"><a href="#gb" title="Gästebuch"></a></li>
				<div class="nb"></div>
				<li id="nkont"><a href="#kont" title="Kontakt"></a></li>
				<div class="nb"></div>
				<li id="nimpr"><a href="#impr" title="Impressum"></a></li>
			</ul>
		</div>
		
		<div id="login_h"></div>
		<div id="login">
			Login
		</div>
		
		<div id="partner_h"></div>
		<div id="partner">
			Partner
		</div>
	</div>
	
	
	<div id="pl"></div>
	<div id="mc">
	
		<div id="tab_cont">
			<div id="tab_h"></div>
			<div id="tab">
				<div class="th">
				</div>
				<div class="tds">
				Tabellenstand
				</div>
			</div>
		</div>
	
	
		<div id="nextg_cont">
			<div id="nextg_h"></div>
			<div id="nextg">
				<div class="th">
				</div>
				<div class="tds">
				nächste Spiele
				</div>
			</div>
		</div>
		
		<div id="news_h"></div>
			<div id="news">
				<div class="th">
				</div>
				News
			</div>
	</div>
	
	
	<div id="pr"></div>
	<div id="rc">
	
		<div id="spons_cont">
			<div id="spons_h"></div>
			Sponsoren
		</div>
		
		<div id="poll_cont">
			<div id="poll_h"></div>
			Umfrage
		</div>
	</div>
	
</div>

<div id="footer">
	<div class="row">
		<div id="feul"></div>
		<div id="fur"></div>
		<div id="feur"></div>
	</div>
</div>

</div>

</body>
</html>

content.css:
Code:
/* Layout im Contentbereich */

#lc, #mc, #rc {
	display:table-cell;
	border:1px solid #9b9797;
	padding:1px;
	}

* + html #lc, * + html #mc, * + html #rc {
	display:block;
	float:left;
	}

#pl, #pr {
	display:table-cell;
	width:1px;
	border:none;
	}
/* Platzhalter (pl: links, pr: rechts), damit lc, mc und rc 1px Abstand voneinander haben */

* + html #pl, * + html #pr {
	display:none;
	}

#lc {
	width:109px;
	}
/* Linke Spalte (Navi, Login, Partner) */

* + html #lc {
	width:109px;
	margin:0 1px 0 0;
	}

#mc {
	width:566px;
	height:200px;
	}
/* mittlere Spalte (Tabellenstant, nächste Spiele, News) */

* + html #mc {
	margin:0 1px 0 0;
	width:567px;
	}

#rc {
	width:231px;
	height:200px;
	}
/* rechte Spalte (Sponsoren, Umfrage) */

* + html #rc {
	width:230px;
	}

lc.css
Code:
/* linke Spalte (Navi, Login, Partner) */

#nav_h {
	width:107px;
	height:13px;
	background:url(../gfx/bhr.gif) repeat-x;
	border:1px solid #9b9797;
	margin:0 0 1px 0;
	}
/* Navi Header */
	
#navi {
	width:107px;
	border:1px solid #9b9797;
	margin:2px 0 2px 0;
	}
/* enthält Liste mit Navipunkten */
	
ul {
	margin:0;
	padding:0;
	}

#nnews, #ntrain, #nhb, #nbs, #nspons, #nfoto, #nfor, #ngb, #nkont, #nimpr, a {
	list-style:none;
	display:block;
	width:107px;
	height:16px;
	background:url(../gfx/nbr.gif) repeat-y;
	}
	
* + html #nnews, * + html #ntrain, * + html #nhb, * + html #nbs, * + html #nspons, * + html #nfoto, * + html #nfor, * + html #ngb, * + html #nkont, * + html #nimpr, * + html a {
	height:17px;
	}

* + html #nimpr {
	margin:-2px 0 0 0;
	}

.nb {
	width:107px;
	height:2px;
	background:url(../gfx/nb.gif);
	}
	
#login_h {
	width:107px;
	height:13px;
	background:url(../gfx/bhr.gif) repeat-x;
	border:1px solid #9b9797;
	margin:0 0 1px 0;
	}

#login {
	width:107px;
	height:70px;
	border:0;
	margin:0 0 1px 0;
	}
	
#partner_h {
	width:107px;
	height:13px;
	background:url(../gfx/bhr.gif) repeat-x;
	border:1px solid #9b9797;
	margin:0 0 3px 0;
	}
	
#partner {
	width:107px;
	height:100px;
	text-align:center;
	}

mc.css
Code:
/* mittlere Spalte (Tabellenstand, nächste Spiele, News) */

#row1 {
	border:0;
	padding:0;
	margin:0;
	}
/* enthält "Tabellenstand" und "nächste Spiele" */

#tab_cont {
	width:164px;
	border:0;
	margin:0;
	padding:0;
	float:left;
	}
/* Container "Tabellenstand" */

#tab_h {
	width:162px;
	height:13px;
	background:url(../gfx/bhr.gif) repeat-x;
	border:1px solid #9b9797;
	margin:0 0 1px 0;
	}
/* Header von "Tabellenstand" */

#tab {
	width:160px;
	height:77px;
	background-color:white;
	border:1px solid #9b9797;
	padding:1px;
	}
/* enthält "Tabellenstand" */

.th {
	background-color:#1e83e6;
	height:10px;
	width:100%;
	margin:0 0 1px 0;
	}
/* allg Subheader in Tabellen */

.tds {
	width:100%;
	height:66px;
	background-color:#e1e2e2;
	}
/* "Content in kleinen Zellen (tabs und nextg) */

#nextg_cont {
	width:399px;
	border:0;
	padding:0;
	margin:0 0 0 1px;;
	float:left;
	}
/* Container "Nächste Spiele" */

#nextg_h {
	width:399px;
	height:13px;
	background:url(../gfx/bhr.gif) repeat-x;
	border:1px solid #9b9797;
	margin:0 0 1px 0;
	}
/* Header von "Nächste Spiele" */

* + html #nextg_h {
	width:400px;
	}

#nextg {
	width:397px;
	height:77px;
	background-color:white;
	border:1px solid #9b9797;
	padding:1px;
	}
/* enthält "nächste Spiele" */

* + html #nextg {
	width:398px;
	}
	
#news_h {	
	width:564px;
	height:13px;
	background:url(../gfx/bhr.gif) repeat-x;
	border:1px solid #9b9797;
	margin:1px 0 1px 0;
	float:left;
	}
/* News-Header */

* + html #news_h {
	width:565px;
	}

#news {
	width:562px;
	background-color:white;
	border:1px solid #9b9797;
	padding:1px;
	float:left;
	}
/* enthält "News" */

* + html #news {
	width:563px;
	}

rc.css
Code:
/* rechte Spalte (Sponsoren, Umfrage) */

#spons_cont {
	width:227px;
	border:1px solid #9b9797;
	padding:1px;
	float:left;
	margin:0 0 2px 0;
	}
/* Container "Sponsoren" */

* + html #spons_cont {
	width:226px;
	}

#spons_h {
	width:225px;
	height:13px;
	background:url(../gfx/bhr.gif) repeat-x;
	border:1px solid #9b9797;
	margin:0 0 1px 0;
	}
/* Header "Sponsoren" */

* + html #spons_h {
	width:224px;
	}
	
#poll_cont {
	width:227px;
	border:1px solid #9b9797;
	padding:1px;
	float:left;
	}
/* Container "Umfrage" */

* + html #poll_cont {
	width:226px;
	}
	
#poll_h {
	width:225px;
	height:13px;
	background:url(../gfx/bhr.gif) repeat-x;
	border:1px solid #9b9797;
	margin:0 0 1px 0;
	}
/* Header "Sponsoren" */

* + html #poll_h {
	width:224px;
	}
	
	}

Die content.css ist verantwortlich für das Layout im Content-bereich (also alles zw. Header und Footer).
lc.css, mc.css und rc.css bestimmen das Design innerhalb der gleichnamigen DIVs.
Glaub, das sind alle, die dafür wichtig sind. Wenn ihr mehr braucht, sagt bescheid.
Aber wär super, wenn mir jemand helfen könnte. Hab zwar schon geguckt, aber kann einfach an den falschen Stellen gewesen sein.

Ach ja: wenn ich das Padding von spons_cont (Container, der Header und Inhalt von Sponsoren beherbergt) auf 0 setze, gehen die falsch dargestellten Bereiche wieder 1px nach oben...


Die Website im aktuellen Zustand findet ihr hier.
 
Wenn Du diese Anzeige nicht sehen willst, registriere Dich und/oder logge Dich ein.
Wieso hast du überhaupt Container benutzt?
Der Kauderwelsch wäre mit Tabellen der selbe gewesen...

Zu deinem Problem: Wäre echt hilfreich, wenn du ein Bild zu dem Fehler hast.
 
Tabellen sind in der heutigen Zeit für Seitenlayouts absolutes NO GO ! Und das aus vielen guten Gründen !
Pack die Files mal auf nen Webserver, so dass man es Live sehen kann. Wobei ich keinen Opera habe und den auch nicht installieren möchte :d
 
Zuletzt bearbeitet:
Schon mal dran gedacht dein Bildschirm sauber zu machen ;-)

Nee, stell mal in Internet, hab Opera und würd den Fehler gern mal begutachten

MfG
Darker
 
Tabellen sind in der heutigen Zeit für Seitenlayouts absolutes NO GO ! Und das aus vielen guten Gründen !

Dann erklär mir die Gründe kurz und prägnant (ohne externe Links).
Danach ließt du bitte nochmal mein Post, und stellst dann bitte fest, dass ich auch kein Freund von Tabellenlayouts bin...
 
Dann erklär mir die Gründe kurz und prägnant (ohne externe Links).
Danach ließt du bitte nochmal mein Post, und stellst dann bitte fest, dass ich auch kein Freund von Tabellenlayouts bin...

Ganz einfach. Eine Tabelle besteht aus Zeilen und Spalten. Man kann zwar allgemein das Layout der Tabelle ändern aber eins geht nicht. Man kann nicht die Zeilen und Spalten beliebig anordnen. Wenn man CSS Layout bis ins kleinste betreibt bzw es perfekt verwendet, darf man keine Tabellen verwenden. Dafür hat man dann aber die Möglichkeit eine Seite komplett umzugestalten in dem man einfach eine andere CSS Datei verwendet. Dann kann man verschiedene Skins anbieten, die sich nicht nur in der Hintergrundfarbe unterscheiden sondern man kann dann praktisch alles ändern und neu anordnen.
 
Diesen Vorteil setzt aber gewisse Struktur vorraus, und die fehlt heute leider bei sehr vielen. Alle meinen, sie könnten richtig supi dollen HTML-Code produzieren, der angeblich "schlank" und "übersichtlich" ist. Wenn ich dann sehe, was bei diesen Leuten raus kommt, reicht meine Gemütslage von lustig bis zu tiefster Trauer.

Beispiel von unserem Freund oben:
Eine Liste für die Navigation - schön und gut. Aber warum wird die Liste dann wiederum in ein div-Container gepackt?
Diese ganzen Boxen für die rechte und linke Seite ist doch nichts anderes, als die Tabellen-Tags von HTML "umzubennen".
Den Begriff der Semantik kennt wohl keiner mehr...eigentlich schade :(
 
Bei Tabellen wird die logische Struktur eines Dokumentes mit dem Layout vermischt. Und das ist nunmal nicht optimal, vor allem wenn andere Ausgabeformate als der normale Browser gewuenscht sind. Und genau das ist doch Semantik, oder? Logische Struktur von der grafischen Praesentation zu trennen.

Ich hab mir das Beispiel oben nicht genauer angeschaut, aber da ist auf jeden Fall viel zu viel da. Da hat Hotracer schon recht. Da ist genau wie Tabellen zu verwenden, und da laesst sich sowohl am HTML Code als auch am CSS einiges straffen. Diese ganzen leeren DIVs sind ja ein Graus.
 
Bei Tabellen wird die logische Struktur eines Dokumentes mit dem Layout vermischt. Und das ist nunmal nicht optimal, vor allem wenn andere Ausgabeformate als der normale Browser gewuenscht sind. Und genau das ist doch Semantik, oder? Logische Struktur von der grafischen Praesentation zu trennen.

Ich hab mir das Beispiel oben nicht genauer angeschaut, aber da ist auf jeden Fall viel zu viel da. Da hat Hotracer schon recht. Da ist genau wie Tabellen zu verwenden, und da laesst sich sowohl am HTML Code als auch am CSS einiges straffen. Diese ganzen leeren DIVs sind ja ein Graus.

Komplett richtig.
HTML ist nicht dafür da, Inhalte formatiert darzustellen, sondern sie zu beschreiben - wie jede andere Markup-Language auch.
Im Klartext heißt das: Für Listen nehme ich auch die von HTML bereit gestellten Listen-Tags á la ul, ol...für Zitate nehme ich q und blockquote. Für Überschriften h1, h2, ... entsprechend ihre Gewichtung; für Text p etc. etc.
Wenn man danach vorgeht, hat man wenigstens eine Struktur, die man dann für das Auge ansprechender per CSS gestalten kann.

Das passt zwar alles nicht zum Thema, aber ich musste einfach mal meinem Unmut darüber freien Lauf lassen :)
 
Zuletzt bearbeitet:
Ich würde dem Threadersteller mal das Buch CSS Mastery ans Herz legen - ist imho gut zu empfehlen. Dann wirds auch was mit dem Code ;)
 
Joar mach das ruhig.
Semantek hat übrings nichts mit der Lesbarkeit des Codes zu tun. Ein einfaches Beispiel: Eine Endlosschleife ist zwar Syntaktisch richtig aber Semantisch völliger schwachsinn. Ob der Quellcode dabei lesbar ist, ist unwichtig. Da HTML aber keine Programmiersprache ist lässt sich das darauf schlecht anwenden. Man könnte aber ein Div aus Position -100;-100 als syntaktisch Richtig aber semantisch Falsch bezeichnen.

Sollen wir jetzt alle wieder mit Tabellen arbeiten und die Möglichkeiten von CSS ignorieren blos weil es nicht jeder kann? Du hast nur gefragt warum Tabellen "out" sind und darauf hab ich dir geantwortet.
 
Die Website im aktuellen Zustand findet ihr hier.

Problem hat sich mitlerweile geklärt, aber danke trotzdem.


@ hotracer: Wo meinst du, sollte ich noch Container weglassen?
Ich hab schon versucht, inhaltlich unabhängige Teile in Container zu packen. Wo hab ich denn welche zuviel.
Ach, meinst du, dass ich zB die Titelleisten als h auszeichnen soll? Wenn es das ist, was noch?
Ich hab die Navi nach 'nem Tutorial nachgebaut und zwar deshalb weil ich bei 'nem etwas älteren Projekt selbst 'ne Liste gemacht hab (ohne extra Hilfe), die aber nicht mit allen Browsern funktioniert hat. Deshalb hab ich die Tut-Navi im Grunde nachgebaut, weil ich mir da sicher sein konnte, dass sie funktioniert. Ob da 'n DIV zuviel ist, darüber hab ich gar nicht nachgedacht. Aber ich werd gucken, dass ich das wegbekomm.
 
Joar mach das ruhig.
Semantek hat übrings nichts mit der Lesbarkeit des Codes zu tun. Ein einfaches Beispiel: Eine Endlosschleife ist zwar Syntaktisch richtig aber Semantisch völliger schwachsinn. Ob der Quellcode dabei lesbar ist, ist unwichtig. Da HTML aber keine Programmiersprache ist lässt sich das darauf schlecht anwenden. Man könnte aber ein Div aus Position -100;-100 als syntaktisch Richtig aber semantisch Falsch bezeichnen.

Sollen wir jetzt alle wieder mit Tabellen arbeiten und die Möglichkeiten von CSS ignorieren blos weil es nicht jeder kann? Du hast nur gefragt warum Tabellen "out" sind und darauf hab ich dir geantwortet.

Du vermischst hier einiges und hast auch nicht wirklich einen Überblick - zumindest habe ich den Eindruck, wenn ich dein Post lese.
1. Eine Endlosschleife ist semantisch in bestimmten Anwendungsgebieten völlig gehaltvoll. Bestes Beispiel: Prozess/Daemon.
2. Ich habe auch nie behauptet, semantischer Code ist zwangsläufig besser lesbar. In jedem Fall ist er aber besser zu verstehen.
3. Welche Position ein bestimmtes Element auf dem Bildschirm des Anwenders letztendlich einnimmt hat nichts, rein gar nichts mit der Semantik oder Syntaktik zu tun. Wenn es semantisch korrekt ist, dann wird der Inhalt des Elements durch das Element selbst beschrieben. Ist es syntaktisch korrekt, dann wurden die Spezifikation von HTML eingehalten.
4. Nein, aber letztendlich machen viele nichts anderes, außer die Tabellen in Container umzuschreiben.

Wenn ihr schon einmal mit XML gearbeitet habt, werdet ihr festellen, das HTML nichts anderes ist, als eine spezielle Form von XML.
Keiner versucht aber seine Daten in XML so in Elemente zu pressen, dass sie sich möglichst einfach mit Hilfe eines Stylesheets formatiert ausgeben lassen - das ist völliger Blödsinn.
Im Ruckschluss sollte das eben auch nicht bei HTML passieren.
Um auch auf DEYS Frage einzugehen: Man strukturiert mit HTML nicht die Ausgabe, sondern beschreibt den Inhalt. Für das strukturieren in der Ausgabe ist letztendlich CSS verantwortlich.

Um das auch nochmal klar zustellen: Es ist kein Weltuntergang, wenn man HTML nicht nach der Semantik der Inhalte benutzt. Die heutige Zeit gibt uns meist gar nicht die Möglichkeit, guten HTML Code zu erstellen, weil jeder zweite Design-Krümelkacker auf jeden Pixel wert legt und eine Webseite mittlerweile zu einem reinsten Bild mit ein paar klickbaren Textpassagen mutiert ist. Ich wollte das nurmal zur Sprache bringen, dass nur das reine Benutzen von Divs etc. nicht einen guten HTML-Code ausmachen, wie das viele annehmen.
 
Na dann bin ich zu 100% auf deiner Seite ;)
Das eine Endlosschleife auch gewollt sein kann ist keine Frage nur in den meisten Fällen war es am Ende doch nur ein Semantikfehler und ebenso würde ich das auf HTML anwenden. Der "Programmierer" möchte eine Bild auf der Website darstellen und wenn er das auf -100;-100 haut dann hat er ein Fehler gemacht. Ich denke aber das sowohl der Begriff der Syntaktik als auch Semantik auf HTML nicht anwendbar sind. HTML ist keine Programmiersprache und der IE interrressiert sich kaum ob man mal ein schließendes Tag vergessen hat. Jeder Compiler meckert aber sofort wenn man mal ein ; vergessen hat. Man kann also Äpfel schlecht mit Birnen vergleichen.

Semantischer Code ist auch nicht leichter zu verstehen. Wenn ich überhaupt nicht einrücke und alles auf eine Zeihle klatsche, dann ist der Code semantisch richtig, wenn das Programm genau das macht, was der Programmierer vorgesehen hat und nicht unter bestimmten Umständen Fehler macht. Wenn aber das Programm sich irgendwo verrechnet, dann ist da irgendwo ein Semantikfehler, den der Compiler nicht finden kann. Der erkennt nur Syntaktikfehler. Im Endefekt ist der Unterschied zwischen dem Code ohne Semantikfehler und mit Semantikfehler eventuell nur ein vertauschtes Rechchenzeichen. Das ändert aber so oder so nichts an der Lesbarkeit. Für die Lesbarkeit des Codes und damit auch das Verständniss gibt es andere und bessere Kritierien, die sich aber wiederum nicht auf HTML anwenden lassen.
 
Zuletzt bearbeitet:
Bin grad dabei, das Projekt semantisch zu korrigieren und will jetzt die Trennlinien zw. den Navipunkten als <hr> auszeichnen.
Die Umstellung in Opera und FF klappt problemlos. Nur IE7 zeigt diese 3D-Border (ähnlich dem Inset-Rahmen) an - selbst wenn ich Border auf 0 gesetzt hab. Onehin würde das Border-Attribut in IE7 nur 'nen zusätzlichen Rahmen zum Inset-Rahmen erschaffen.

Hat jemand da 'ne Lösung?


Komischerweise klappt's aber mit den hrs im Header...
Header-HR:
Code:
background-color:#889bae;
width:916px;
height:1px;
float:left;
border:none;
margin-top:0px;
margin-left:2px;

Navi-HR:
Code:
background:url(../gfx/nb.gif);
width:107px;
height:2px;
border:none;
margin:0;
display:block;
 
Zuletzt bearbeitet:
Hardwareluxx setzt keine externen Werbe- und Tracking-Cookies ein. Auf unserer Webseite finden Sie nur noch Cookies nach berechtigtem Interesse (Art. 6 Abs. 1 Satz 1 lit. f DSGVO) oder eigene funktionelle Cookies. Durch die Nutzung unserer Webseite erklären Sie sich damit einverstanden, dass wir diese Cookies setzen. Mehr Informationen und Möglichkeiten zur Einstellung unserer Cookies finden Sie in unserer Datenschutzerklärung.


Zurück
Oben Unten refresh