Gestaltung einer "Box" mit runden Ecken - wie?

Muckel1986

Erfahrenes Mitglied
Guten Abend zusammen,

bin dabei endlich mein eigenes Blog-Layout neu zugestalten, nach dem ein anderes Projekt abgeschlossen ist. Doch nun bin ich mal wieder bei dem Problem mit "runden Ecken" gelandet. Bis lang habe ich es so gelöst:
Ein Umgebenes DIV, mit dem man dann z.B. die Breite eingrenzen kann oder ähnliches. Dann folgen die DIVs für die Rundungen und für den eventuellen Rahmen zwischen den Ecken. Das DIV inahlt soll dafür sorgen, dass der Text genügend Abstand zu den Rahmen hat. Der HTML-Aufbau schaut dann so aus:
HTML:
<div class="box">
		<div class="om"><div class="um"><div class="ml"><div class="mr"><div class="ol"><div class="or"><div class="ul"><div class="ur">
			<div class="inhalt1"><strong>erste Box</strong>
				<p>Ein Absatz...</p>
			</div>
		</div></div></div></div></div></div></div></div>
	</div>
Die CSS-Eigenschaften dazu so:
Code:
.box {
	margin:0.25em 0em 0.25em 0em;
	padding:0em;
	background-color:#FFFFFF;
	border:none;
}

.inhalt1 {margin:0em; padding:0.25em; }
/* Rundungen */
.ol { background:url(Bilder/rundungen/01/ol.png) top left no-repeat; }
.or { background:url(Bilder/rundungen/01/or.png) top right no-repeat; }
.ul { background:url(Bilder/rundungen/01/ul.png) bottom left no-repeat; }
.ur { background:url(Bilder/rundungen/01/ur.png) bottom right no-repeat; }
.om { background:url(Bilder/rundungen/01/om.png) top center repeat-x }
.um { background:url(Bilder/rundungen/01/um.png) bottom center repeat-x }
.ml { background:url(Bilder/rundungen/01/ml.png) top left repeat-y }
.mr { background:url(Bilder/rundungen/01/mr.png) top right repeat-y }

Dabei stehen die Abkürzungen für folgendes: ol = oben-links / or = oben-rechts / ul = unten-links / ur = unten-rechts / om = oben-mitte / um = unten-mitte / ml = mitte-links / mr = mitte-rechts

Diese Lösung hat bis lang auch gut funktioniert und ist laut dem w3c auch valid. Bis lang habe ich Grafiken genommen, die mir so zugefallen sind, doch bei meinem eigenen, neuen Layout will ich alles korrekt machen. Im Grunde möchte ich mir eine Art "Box" basteln, wie sie bei dem Hauptmenü auf der Seite des DPB zu sehen ist.

Mein Anfang schaut so aus:
HTML:
<div class="box2">
    	<h1>Ein Men&uuml;</h1>
        <ul>
        	<li>Punkt 1</li>
            <li>Punkt 2</li>
            <li>Punkt 3</li>
            <li>Punkt 4</li>
            <li>Punkt 5</li>
        </ul>
    </div>
Dieser "Box" habe ich dann auch schon den roten Rahmen gegeben und die größe der Überschrift und des Inhaltes angepasst:
Code:
.box2 {
	display:block;
	margin: 0.5em 10% 0.5em 10%;
	padding:0em;
	border:0.20em solid #660000;
}

.box2 h1 {
	margin:0em;
	padding:0em;
	text-align:center;
	font-size:1.2em;
	color:#FFFFFF;
	background-color:#660000;
}
.box2 {font-size:0.9em;}

Doch ich habe dabei noch ein Problem. Und zwar habe ich eine Liste die ich nutze - die Punkte der Aufführungen werden leider außerhalb dieser Box dargestellt. Und das zweite Problem ist, dass mir da noch eine Idee für den Ansatz fehlt.

Die Rundungen könnte ich wieder wie bei dem ersten Beispiel erstellen, doch das bringt mich aktuell nicht weiter. Denn ich möchte in dieser "Box" zum Beispiel zwei verschiene Menüs anbieten, die durch eine Überschrift getrennt sind. Der Überschrift habe ich ja schon eine andere Schriftfarbe und die Hintergrundfarbe im Farbton des Rahmens gegeben. So hat man schon eine optische Abgrenzung. Schön wäre nun, wenn man eben bei den "Überschriften" eben wie bei der "Vorlage" eine Rundung hätte, da ich jenes schöner finde.

Da dies so vielleicht nicht umsetzbar ist, dachte ich, dass ich es so mache, wie bei der funktionierenden Variante, die ich oben bereits erwähnt habe. Dann ändert sich aber der HTML-Aufbau so, dass man für jede "Abteilung" so eine "Box" erzeugt. Denn dann könnte man wiederum mit den DIVs die vier ecken anordnen. Der Aufbau würde dann so aussehen:
HTML:
<div class="box2"><div class="ol"><div class="or"><div class="ul"><div class="ur">
    	<h1>Ein Men&uuml;</h1>
        <div class="inhalt1"><ul>
        	<li>Punkt 1</li>
            <li>Punkt 2<ul>
            	<li>Punkt 2.1</li>
                <li>Punkt 2.2</li>
                <li>Punkt 2.3</li></ul></li>
            <li>Punkt 3</li>
            <li>Punkt 4<ol>
            	<li>Punkt 4.1</li>
                <li>Punkt 4.2</li>
                <li>Punkt 4.3</li></ol></li>
            <li>Punkt 5</li>
        </ul>
        Normaler Text</div>
	</div></div></div></div></div>
    <div class="box2"><div class="ol"><div class="or"><div class="ul"><div class="ur">
    <h1>zweites Men&uuml;</h1>
        <div class="inhalt1"><ol>
        	<li>Punkt 1</li>
            <li>Punkt 2<ol>
            	<li>Punkt 2.1</li>
                <li>Punkt 2.2</li>
                <li>Punkt 2.3</li></ol></li>
            <li>Punkt 3</li>
            <li>Punkt 4<ul>
            	<li>Punkt 4.1</li>
                <li>Punkt 4.2</li>
                <li>Punkt 4.3</li></ul></li>
            <li>Punkt 5</li>
        </ol>
        Normaler Text</div>
    </div></div></div></div></div>

Nur leider ist es so, dass die Grafiken dann von der "Überschrift" und dem DIV des Inhaltes überlagert werden und man sie daher nicht sieht. Raus gefunden dass sie überlagert werden habe ich, da ich den Bereichen einen Außenabstand gegeben habe.

Setzte ich die DIV-Bereiche zum Beispiel erst nach der Überschrift, so werden sie leider auch erst unter jener angezeigt, was ich so nicht möchte. Auf den beiden Bildern im Anhang kann man das Problem sehen oder alternativ auf meiner Test-Seite. Würde mich freuen, falls jemand eine Idee zu diesem Problem kennt und mir somit sagen kann, wie ich es lösen kann.

Liebe Grüße
Muckel
 

Anhänge

  • spalte.png
    spalte.png
    9,2 KB · Aufrufe: 61
  • spalte2.png
    spalte2.png
    7,1 KB · Aufrufe: 59
Hi,

die von dir genutzte Technik ist aber noch lange nicht das Ende der Fahnenstange für Boxen mit runden Ecken:


Und im Gegensatz zu en linken Boxen verwendeat du in der rechten funktionstüchtigen abgerundeten Box 8 ineinander verschachtelte DIV-Blöcke.

Desweiteren solltest du vielleicht nochmal dein Thema Problem mit dem Gestalten einer Box (valid xhtml und css) aufschlagen, wo hela und ich dir schon hilfreiche Tipps zu der Aufgabenstellung genannt hatten.

Oder willst du ein halbes Jahr später wieder von vorne beginnen? :rolleyes:

mfg Maik
 
Guten Abend zusammen,

durch den alten Thread habe ich ja die Lösung mit den insgesamt 8 DIVs gefunden. Eben erste die Geraden der vier Seiten einfügen und anschließend die Ecken. Dies klappt auch ganz gut, wenn man eben eine komplette "Box" erstellen möchte oder wie bei der Stammesseite (Layout von mir) nur eine Ecke abrunden möchte.

Auch kann man ja mit entsprechendem CSS Ecken abrunden, was aber leider noch nicht von allen Browser unterstützt wird, wie man dieser Quelle entnehmen kann.

Problem für mich ist zum Beispiel, dass ich von Grafikbearbeitung keine ahnung habe und daher nicht wirklich weiß, wie man sich selbst Runde-Ecken und die dazugehörigen "Geraden" erstellen kann, so dass sie auch richtig zusammen passen. Da ich auch "nur" auf Gimp zurückgreifen kann, habe ich bisweilen noch kein gutes Tutorial gefunden, habe aber dafür auch noch nicht so intensiv gesucht.

Aber heute stehe ich eben vor einem anderen Problem. Habe dort eben die linke Spalte. In der Spalte sollen die "festen Seiten" und Unterseiten aufgeführt werden und auch die "Artikel Kategorien" und dessen Unterkategorien. Da ich als "backend" das Wordpress-Blog nehme, ist es für mich am einfachsten, wenn man diese "Menüs" durch eine geordnete oder ungeordnete Liste erzeugt, da jene von dem System automatisch ausgegeben wird. Daher habe ich auch bei dem statischen Test eine Liste genommen. Um zu unterscheiden zu welchem Bereich die "Einträge" gehören, soll eben eine Überschrift darüber. Also habe ich mit dem entsprechenden h1-Tag bedient.

Sprich im Grunde habe ich nur das:
HTML:
<h1>ein Men&uuml;</h1>
<ul>
        	<li>Punkt 1</li>
            <li>Punkt 2<ul>
            	<li>Punkt 2.1</li>
                <li>Punkt 2.2</li>
                <li>Punkt 2.3</li></ul></li>
            <li>Punkt 3</li>
            <li>Punkt 4<ol>
            	<li>Punkt 4.1</li>
                <li>Punkt 4.2</li>
                <li>Punkt 4.3</li></ol></li>
            <li>Punkt 5</li>
        </ul>
Der ganze "Rest" ist Gestaltung. Gefallen tut mir eben die "Vorlage" auf der DPB-Seite. Jenes wollte ich nun versuchen nachzubilden, was mir leider noch nicht so wirklich gelungen ist. Problem bei meinem Ansatz ist eben, dass die "Ecken" von dem Inhalt der "Box" überlagert werden, da der "Inhalt" der Box eben nochmal eine Hintergrundfarbe bekommen hat.

Bei der funktionierenden Variante hat der Inhalt der Box keine Hintergrundfarbe, wodruch man die Hintergrundbilder sehen kann, da der Hintergrund des Inhaltes eben transparent ist. Viele Tutorials arbeiten mit einer festen Breite und daher mit nur einem oder zwei Hintergrundbildern, die dann der Größe des DIVs entsprechen. Das ist zwar einfacher, da man keine "Zwischen DIVs" einbauen muss, doch dadurch wird das Layout eben nicht mehr so flexibel. Und ich habe bis lang nur Prozentwerte oder die Einheit em verwendet (denn die em-Angabe kann man dann relativ leicht auf die Druckmedien umwandeln, da sich das em auf das Geviert bezieht (mehr bei Wikipedia dazu)).

Vielleicht mach ich mir das Leben durch meinen Anspruch an die "dynamic" besonders schwer, doch da ich mir das "scripten" noch weiter beibringen möchte, ich es zur Ablenkung meiner Gesundheitssituation nutze, ist es für mich in Ordnung, dass nicht alles sofort funktioniert.

Und auch bei dem aktuellen "Problem" sehe ich aktuell noch keine Lösung, da die Ecken eben von der Hintergrundfarbe überlagert werden. Dem Bild im Anhang kann man das entnehmen, da ich kurzzeitig die Farbe entfernt habe. Nun könnte ich auch für den Inhalt wieder ein Hintergrundbild nehmen, doch das möchte ich eigentlich nicht machen, da ich das Layout möglichst schlank halten wollte.

Des weiteren Frage ich mich gerade, wieso der "Inhalt" nicht innerhalb der Box angezeigt wird - sprich die Punkte der Liste ragen über die Box herraus, wenn ich dem "inhalts DIV" keinen außenabstand mehr gebe. Einen kleinen Innenabstand habe ich zugewiesen, um so einen Abstand zum "Rahmen" zu haben.

Muss mich nun erstmal hinlegen, der Wcker klingelt in fünf Stunden. Vielleicht fällt mir morgen noch eine Lösung ein.
Vielen Dank und eine gute Nacht
Muckel
 

Anhänge

  • spalte3.png
    spalte3.png
    6,4 KB · Aufrufe: 39
Moin,

hast du mal auf der DPB-Seite nachgeschaut, wie dort die runde Box grafisch erzeugt wird?

  1. http://www.deutscher-pfadfinderbund.de/templates/dpb02/images/Menuebox_oben2.jpg
  2. http://www.deutscher-pfadfinderbund.de/templates/dpb02/images/Menuebox_unten2.jpg

Wenn du den inneren Blöcken eine Hintergrundfarbe zuordnest, und diese keinen Abstand zu den Äußeren besitzen, bleibt es auch nicht aus, dass sie deren Hintergrundbilder überdecken.

Dieser Lösungsansatz http://www.schillmania.com/projects/dialog2/ nutzt ein Hintergrundbild pro Box, und dennoch ist deren Breite variabel. Hierzu einfach mal die Fensterbreite skalieren.

Was das Erzeugen der runden Ecken in GIMP betrifft, steht dir hierfür der Befehl "Auswahl -> Abgerundetes Rechteck..." zur Verfügung.

Wenn du die Box anschliessend aufteilen / zerschneiden möchtest, lässt sich die Grafik über "Bild -> Leinwandgröße" in die einzelnen Segmente aufteilen. Hierfür nutzt du immer die Ausgangsdatei mit der kompletten Box, wählst den entsprechenden Bereich, und speicherst ihn als neue Datei ab.

mfg Maik
 
Guten Morgen zusammen,

habe mir nun die Grafiken mit Gimp erstellt, so wie Du es beschrieben hast. Die Grafiken habe ich dann wie bei den anderen "Boxen" eingebunden. Der HTML-Aufbau schaut so aus:
HTML:
 <div class="box2"><div class="mm2"><div class="om2"><div class="um2"><div class="ml2"><div class="mr2"><div class="ol2"><div class="or2"><div class="ul2"><div class="ur2">
    	<h1>Ein Men&uuml;</h1>
        <div class="inhalt1">normaler Text
        <ul>
        	<li>Punkt 1</li>
            <li>Punkt 2<ul>
            	<li>Punkt 2.1</li>
                <li>Punkt 2.2</li>
                <li>Punkt 2.3</li></ul></li>
            <li>Punkt 3</li>
            <li>Punkt 4<ol>
            	<li>Punkt 4.1</li>
                <li>Punkt 4.2</li>
                <li>Punkt 4.3</li></ol></li>
            <li>Punkt 5</li>
        </ul>
        Normaler Text</div>
	</div></div></div></div></div></div></div></div></div></div>
Und der CSS-Aufbau dazu schaut so aus:
Code:
.ol2 { background:url(Bilder/rundungen/05/ol.png) top left no-repeat; }
.or2 { background:url(Bilder/rundungen/05/or.png) top right no-repeat; }
.ul2 { background:url(Bilder/rundungen/05/ul.png) bottom left no-repeat; }
.ur2 { background:url(Bilder/rundungen/05/ur.png) bottom right no-repeat; }
.om2 { background:url(Bilder/rundungen/05/om.png) top center repeat-x; }
.um2 { background:url(Bilder/rundungen/05/um.png) bottom center repeat-x; }
.ml2 { background:url(Bilder/rundungen/05/ml.png) top left repeat-y; }
.mr2 { background:url(Bilder/rundungen/05/mr.png) top right repeat-y; }
.mm2 { background:url(Bilder/rundungen/05/mm.png) center center repeat; }

.box2 {
	display:block;
	margin: 0.5em 10% 0.5em 10%;
	padding:0em;
	color:#999999;
	border:none;
}

.inhalt1 {margin:1.5em; padding:0.25em; }

.box2 h1 {
	margin:0em;
	padding:0.25em 0em 0em 0em;
	text-align:center;
	font-size:1.2em;
	color:#FFFFFF;
}
.box2 {font-size:0.9em;}
Laut den Validierungsservice des W3C für XHTML und CSS ist das auch valid. Selbst konnte ich diese Variante mit dem aktuellen Firefox, Opera, Google Chroome und InternetExplorer testen. Bei dem IE (Version 8.0.6001.18882) gibt aber wiederum ein Problem mit dem floaten. Aber dazu gibt es ja schon einen Thread.

Vielen Dank für deine Hilfe!
Liebe Grüße
Muckel
 
Zurück