Problem mit dem Anordnen von Inhalten (float, display, clear)

Muckel1986

Erfahrenes Mitglied
Hallo zusammen,

habe vor einigen Tage ein Layout für meine Pfadfindergruppe erstellt. Zu erst habe ich es als reine html und css Datei erstellt, wie man hier sehen kann. Nachdem das funktioniert hat, habe ich es für das Wordpress angepasst und es erstmal auf meiner "Spielwiese" getestet. Dabei hat sich gezeigt, dass es ein Problem gibt, welches auf der "Fotoseite" und bei der "Syntax-Hervorhebung" deutlich wird.

Bei der Fotoseite gibt es das Problem, dass jene eine "definierte Liste" nutzt. In dem Shortcode für die Gallerie kann man angeben, wie viele Bilder nebeneinander (Spalten) dargestellt werden sollen. Am Ende von der "Spalten anzahl" gibt es ein
Code:
<br style="clear: both" />
Jenes hat zur Folge, dass es nicht nur einen normalen Zeilenumbruch gibt, sondern sich jener so auswirkt, dass die neuen Bilder erst am Ende der linken Menü Leiste auftauchen.

Dazu sollte ich vielleicht kurz den Aufbau der Seite schildern. Oben gibt es ein DIV in dem das Logo der Seite ist. Darunter kommt ein DIV, in dem das Menü der Seite zu sehen ist. Jenes habe ich durch display:block und den Außenabständen so angepasst, dass sie direkt unterhalb des Logos ist und das es etwas Rand zum Browser Ende hat. Auf der rechten Seite (also direkt neben der Menü Leiste" befindet sich ein weiteres DIV, in dem der Hauptinhalt der Seite sein soll. Jenes hat ebenfalls Außenabstände damit etwas Freiraum zum Browser Ende entsteht. In diesem DIV ist dann ein div mit der Klasse inhalt, damit ich den Inhalt der Seite gezielt gestalten kann.

Unter diesen beiden "Spalten" ist das letzte DIV, welches ich mit clear:both unter beiden angeordnet habe. In jenem sind nur die Angaben zu finden, um welche Webseite es sich handelt. Die CSS-Bereiche schauen so aus:
Code:
body {
	margin:0em; 
	padding:0em;
	background-color:#000000;
	color:#BFBFBF;
	font-family: Calibri, "Sans Serif", "Century Gothic";
	overflow:auto;
}

#oben {
	display:block;
	margin:0em 15% 0em 15%;
	padding:0em;
	text-align:center;
	border:none;
}

#links {
	display:block;
	float:left;
	min-width:10em;
	width:15%;
	background-color:#1F497D;
	margin:0em 2em 0em 15%;
	padding:0em;
	color:#BFBFBF;
	border-top:none;
	border-left:none;
	border-right:none;
	border-bottom:none;
}

#mitte {
	display:block;
	margin:0em 15% 0em 30%;
	padding:0em;
	border-top:none;
	border-left:none;
	border-right:none;
	border-bottom:none;
}

#unten {
	clear:both;
	display:block;
	margin:0em;
	padding:0em 15% 0.5em 15%;
	font-size:0.8em;
	text-align:center;
	border-top:#009900 solid 0.05em;
	border-left:none;
	border-right:none;
	border-bottom:none;
}

.inhalt {padding:0.5em}
Und der html-Aufbau wäre in Kurzform so:
HTML:
<!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=utf-8" />
<title>Pfadfinderstamm Ambronen im Deutschen Pfadfinderbund Hamburg e.V.</title>
<link rel="stylesheet" type="text/css" href="style.css" />
<link rel="shortcut icon" href="Bilder/buendisches/wappen/favicon.ico" type="image/x-icon" />
</head>
<body>
<div id="oben">
	<img src="Bilder/buendisches/wappen/oben.jpg" alt="Logo" />   
</div>
<div id="links"><div class="ul"><div class="ur"><div class="inhalt2">
	<p>Hier ist die linke Spalte, die als Menue dienen soll.</p>
</div></div></div></div>
<div id="mitte"><div class="inhalt">
	<h1>Inhalt der Seite</h1>
	<p>In der Mitte dieser Website soll der Inhalt jener auftauchen...</p>
</div></div>
<div id="unten"><p><font size="+1"><strong>Name oder Titel der Seite</strong></font><br />
weitere Angaben die noch aufgefuert sein sollen</p></div>
</body>
</html>

Wie man oben auf den Links sehen kann, klappt dies soweit ja auch. Nur mit dem
Code:
clear:both;
bei der Fotogallerie gibt es das Problem, dass jenes auch die Menü-Spalte berücksichtigt. Gibt es eine Möglichkeit, dass ich jenes ändere? Denn immerhin befindet sich die clear-Angabe ja auf der Untersten-Ebene:
  • Start der Seite mit den 4 Haupt-DIV-Bereichen die alle als Block angezeigt werden.
    • Ein weiteres DIV (inhalt) in mittleren Bereich der Webseite.
      • clear-Angabe im Artikel

Kann man das so ändern, dass sie dieses unterstee clear-Anweisung sich nur innerhalb des DIV mitte auswirkt? Denn damit wäre das Problem dann behoben. Als System hinter unserer Webseite setzten wir das Wordpress-System ein. Jenes hat alle Funktionen die wir brauchen (erstellen von festen Seiten, erstellen von Artikeln die in Kategorien sortiert sind und durch Schlagworte optimiert werden können, Kommentarfunktion). Durch verschiedene PlugIns kann man die Funktionen des Blogs noch erweitern. Die Gallerie-Funktion ist aber schon bestandteil des Blogs und man nutzt jene über einen Shortcode und kann bei jenem eben auch die Anzahl der Spalten bestimmen, was dann so aussieht:
Code:
[gallery columns="3"]

Habe selbst zwar schon die Suchmachiene bemüht, aber leider keine Lösung für dieses Problem gefunden, weshalb ich hoffe, dass ihr mir helfen könnt.
Vielen Dank und ein schönes Wochenende
Muckel
 
Hi,

wenn in einem mehrspaltigen floatenden Seitenlayout innerhalb eines dieser Spaltenblöcke eine weitere Floatumgebung zum Einsatz kommt, die zum Abschluß "gecleart" wird, darf dieser Block seine benachbarte Spalte nicht mittels eines festgelegten Außenabstand umfliessen, wie es bei dir Fall ist, sondern muß grundsätzlich ebenfalls mit der float-Eigenschaft formatiert sein, damit es nicht zu deinem geschilderten Problem führt, wo sich die Inhalte im Anschluß des HTML-Elements mit der clear-Eigenschaft (bei dir <br>) unterhalb der daneben liegenden Spalte ausrichten, die ebenfalls die float:left-Deklaration besitzt.

mfg Maik
 
Hallo,

das heißt ich muss meiner "mitte" ebenfalls ein float zu weisen? Verstehe das Problem noch nicht so ganz. Was nur aufgefallen ist (bei dem Artikel wo die Syntax-Vorhebung ist, liegt es am
Code:
overflow-x:auto;
sobald dieses gesetzt ist, rutscht es auch nach unten).

Wenn ich Dich richtig verstanden habe, dann muss ich mein mittleres DIV auch floaten. Dies habe ich jetzt gemacht, ebenfalls links. Die linke Spalte hat aber weiterhin die Außenabstände, damit der Rand zum Browser-Ende da ist. Und auch für den Abstand zum mittleren Bereich. Ist es so also richtig:
Code:
#links {
	display:block;
	float:left;
	min-width:10em;
	width:15%;
	background-color:#1F497D;
	margin:0em 2em 0em 15%;
	padding:0em;
	color:#BFBFBF;
	border:none;
}

#mitte {
	display:block;
	float:left;
	width:55%;/*100 -15 -15 -15 = 55 */
	padding:0em;
	border:none;
}

Muss ich für den nervigen IE dabei etwas beachten?

Vielen Dank
Muckel
 
Das von dir nicht nachvollziehbare Problem liegt darin begründet, dass die Browser die clear-Eigenschaft innerhalb eines umfliessenden Elements (ohne float-Regel) auf das zu umfliessende benachbarte Element beziehen, das die float-Angabe besitzt, und den darauffolgenden Inhalt dann dort fortsetzen, wo dieses Element höhenmäßig endet, eben so, wie es halt der Sinn der clear-Eigenschaft ist, den Umfluß abzubrechen, und den Textfluß unterhalb des zu umfliessenden Elements fortzusetzen.

Was den (dich nervenden) IE angeht, mußt du halt schauen, wie seine einzelnen Versionen, die sich in den jüngeren Releases (IE7 / IE8) gegenüber denen aus dem letzten Jahrhundert (IE5.x / IE6) grundlegend in ihrer Interpretation der CSS-Spezifikation unterscheiden, mit deinem CSS umgehen.

mfg Maik
 
Guten Abend,

mir ist es jetzt schon nachvollziehbar. Nur die Erklärungen die wir zB im BBS Untericht bekommen haben, haben mir das Boxmodell eben anders zu verstehen gegeben. Aber an seinen Aufgaben wächst man ja schließlich und da ich am Ende Juni wohl viel Zeit haben werde dieses zu vertiefen, ist es gut, immer mal wieder etwas dazu zulernen. Im Moment bin ich mit meiner Ausbildung und meiner Gesundheit ausgelastet da bleibt gerade mal Luft um das alte Wissen anzueignen.

Da ich aber noch ein kleines "Projekt" habe, wäre es gut, dafür gleich richtig anzufangen. Hast Du eine gute Anleitung / Erklärung?

Vielen Dank
Muckel
 
Da ich aber noch ein kleines "Projekt" habe, wäre es gut, dafür gleich richtig anzufangen. Hast Du eine gute Anleitung / Erklärung?
Ich kann da zunächst mal die gängigen (deutschsprachigen) Nachschlagewerke empfehlen, die dir wohl weitesgehend bekannt sein dürften:


Bei spezifischeren technischen Fragen kann ich meine Bookmarks durchlaufen, ob hierzu in den vergangenen zehn Jahren etwas in ihnen gelandet ist.

Wenn nicht, hilft mir da eigentlich immer :google: weiter, interessante Artikel, Beispiele, u.ä. im globalen Dorf aufzuspüren :)

mfg Maik
 
Guten Morgen zusammen,

ein gezieltes Problem habe ich nun. Habe mir einiges im Netz angeschaut und dann versucht mein neues Layout zu erstellen. Den Versuch kann man auch online sehen. Bei diesem Layout habe ich nach dem "Bereich" mit den Bildern und dem Hauptmenü drei Spalten. Zwei die außen sind und dazwischen eben der Bereich, in dem der Hauptinhalt sein soll.

Am Anfang hatte ich ja das Problem, dass bei einem Zeilenumbruch mit clear Anweisung das ganze unter diese Spalte(n) rutscht. Dieses Problem habe ich nun nicht mehr. Im aktuellen Firefox, Opera, Google Chrome funktioniert auch alles. Nur bei dem Internet Explorer (Version 8.0.6001.18882) habe ich das Problem, dass der "Inhalt der Seite" erst unter der rechten Spalte beginnt. Und das verstehe ich nicht. Denn die beiden "Spalten" habe ich im Grunde gleich aufgebaut, mit dem Unterschied, dass die Text-Ausrichtung anders ist. Der CSS-Aufbau schaut so aus:
Code:
#links {
	display:block;
	float:left;
	width:20%;
	min-width:10em;
	margin:0em 0.5em 0.5em 0em;
	padding:0.15em;
	border-top:none;
	border-left:none;
	border-right:0.20em solid #666666;
	border-bottom:0.20em solid #666666;
}

#rechts {
	display:block;
	float:right;
	width:20%;
	min-width:10em;
	margin:0em 0em 0.5em 0.5em;
	padding:0em;
	text-align:right;
	border-top:none;
	border-left:0.20em solid #666666;
	border-right:none;
	border-bottom:0.20em solid #666666;
}

#mitte {
	display:block;
	float:left;
	width:58%;
	margin:0;
	padding:0;
	border:none;
}
Und gesamt kann man den CSS-Aufbau in der style.css sehen.

Der HTML-Aufbau schaut so aus (ohne den dummy Text usw.):
HTML:
<div id="umgeben">
<div id="BilderReihe">
    <!-- Hier sind die verschiedenen Bilder eingebunden -->
</div>
<div id="menue">
    <!-- Hier ist das Menue als Liste... -->
</div>
<div id="rechts">rechte Splate</div>
<div id="links">linke Splate</div>
<div id="oben"><!-- eigener Bereich um so evtl. den Titel der Webseite anders zu gestalten -->
	<div class="inhalt2">
		<h1>Titel der Webseite</h1>
		<p>kurze Beschreibung der Seite</p>
	</div>
</div>
<div id="mitte" class="inhalt3">Mitte</div>
<div style="clear:both;">&nbsp;</div><!-- Benoetigt damit das "umgebene DIV" bis unten gefuehrt wird. -->
</div><!-- schließen des umgebenen DIV -->
<div id="unten">Unten</div>

Das Problem besteht "nur" bei dem Internet Explorer. Würde mich freuen, falls ihr einen Fehler seht oder eine Idee habt, woran das liegen kann.

Liebe Grüße
Muckel
 
Moin,

IE8 hab ich hier (im Geschäft) nicht zur Verfügung, kann also mit ihm erst später daheim (14h +) einen Blick drauf werfen, aber im FF bricht der Inhalt ebenfalls unterhalb des rechten Spaltenblockinhalts um, wenn sein Viewport zu schmal ist.

Von daher würde ich mal eine min-width-Deklaration für #umgeben vorsehen, damit sich die Box beim Runterskalieren der Fensterbreite nicht vollends zusammenstauchen lässt, was zum Umbruch führt.

mfg Maik
 
Guten Tag,

ja das habe ich eben auch fest gestellt :(

Dabei habe ich mit Prozentwerten gearbeitet und verstehe daher leider nicht, wieso das dann passiert. Denn durch die Prozentwerte war ich der annahme, dass es "egal" sei, wenn es kleiner wird. Das Umgebene DIV hat nun auch Prozentwerte bekommen. Somit habe ich folgende Werte:

  • Umgeben: 5% links + 5% rechts = 10%
  • linke Spaltenbreite: 20% (außen Abstand 0em)
  • rechte Spaltenbreite: 20% (außen Abstand 0em)

Wenn ich nun davon ausgehe, dass Sichtbare Bereich 100% hat, so habe ich für den Mittleren Bereich 50% übrig. Doch sobald man die Auflösung ändert, passt diese "Rechnung" leider nicht mehr. Also habe ich wahrscheinlich schon ein "Problem" bei meinem Ansatz, oder?

Liebe Grüße
Muckel
 
min-width benötigt hier für #umgeben einen absoluten Wert - beispielsweise min-width:1640px.

Dass der Wert hier so hoch ausfällt, ist den horizontalen Bildern oben geschuldet, die so gesehen das Maß der Dinge sind.

Soll die Mindestbreite geringer ausfallen, müsstest du entweder die Grafikbreiten entsprechend herabsenken, oder das eine und andere entfernen.

mfg Maik
 
Zurück