• Jetzt anmelden. Es dauert nur 2 Minuten und ist kostenlos!

Kein Hintergrund für Menü

J@nnik

Neues Mitglied
Ich hab schon zweimal kleine Seiten nur mit HTML und Tabellen gemacht und wollte jetzt mal eine mit CSS versuche. Ich hab erstmal nen kleinen Grundaufbau gemacht und alles sieht noch ziemlich langweilig aus und auch die Farben passen nicht zusammen, aber es soll ja auch nur leicht den Grundaufbau vorgeben.

Ich hab die Seite jetzt mal auf einen alten Webspace von mir hochgeladen: Titel der neuen Website

Der schwarze Teil soll jetzt aber nur das Menü an der Seite umschließen, ich krieg das aber nicht hin. Wäre schön, wenn sich mal jemand den Quellcode angucken könnte.

[Im head sind noch zwei externe css und js Datein angeben, davon aber nicht stören lassen, die beziehn sich nur aufs Menü]
 
Werbung:
Bevor Du mit CSS anfängst, solltest Du HTML beherrschen. Davon sieht man bei Dir noch nicht viel (zugegeben, ist ja auch fast kein Inhalt da).

Der erste Schritt ist eigentlich der Inhalt. Diesen zeichnet man dann mit HTML aus. Vielleicht weißt Du, dass HTML dazu da ist, dem Inhalt eine logische Bedeutung zu geben, d.h. Du zeichnest Überschriften aus, Textabsätze, Menüs (Listen), wichtige Textpassagen, Adressen, Zitate, usw.
Alles einfach in <div> zu packen ist der falsche Weg, das Ergebnis ist um keinen Deut besser, als Tabellen zu etwas anderem zu verwenden, als zur Auszeichnung tabellarischer Daten. Deine Überschrift (das Image) sollte als <h1> ausgezeichnet sein, Dein Menü als <ul>.

Außerdem solltest Du HTML-Code immer mit The W3C Markup Validation Service auf Fehler prüfen lassen.
Besser, weil Du da weniger Fehler machen darfst, wäre als Doctype XHTML 1.0 Strict. Damit lernst Du saubereres Arbeiten.

Dann noch ein paar Tipps zu CSS. Es gibt die Pseudoklasse ":hover", die im Gegensatz zum JavaScript "onmouseover" nicht abschaltbar ist. D.h. Du kannst Hover-Effekte einfach mit dieser Pseudoklasse machen und musst dafür nicht die Klasse eines Elements mit JavaScript ändern.

Was Du mit "nur an der Seite umschließen" meinst, verstehe ich gerade nicht.
Entweder Du willst, dass die mainsection unter das Menü fließt, dann verzichtest Du in der mainsection auf das margin-left.
Oder Du willst, dass sich irgendein Hintergrund bis nach unten zieht, dann verwendest Du "Faux Columns".
 
HTML behersche ich eigentlich. Gelernt hab ich das halt mit verschiedenen Anleitungen im Internet und da hieß es immer, dass man das Design am besten mit CSS macht. Deswegen wollte ich jetzt das Design auch komplett mit CSS machen und dann später wo jetzt noch "Das hier ist wird dann später das Feld mit dem Text!" steht, meine Texte, Bilder usw. einfügen.

Jetzt nochmal zu meinen Problem: War vieleicht etwas schlecht von mir erklärt, also hier nochmal: Das Menü an der Linken Seite steht ja in einem schwarzen Kasten. Dieser schwarze Kasten zieht sich dann rüber bis auf die rechte Seite, dies sieht man am schwarzen Strich ganz rechts und ganz unten über der Copyright-Zeile ist auch noch was schwarzes. Jetzt will ich aber, dass dieser schwarze Kasten nur um das Menü drumrum ist. Mit width und height krieg ich das aber nicht hin.

Und nochmal danke an Efchen für die Idee mit ":hover". Werde ich gleich mal ausprobieren.
 
Zuletzt bearbeitet:
Werbung:
Hi Jannik,
mach doch einfach eine Div Box, die du dann mit Css bearbeitest. Das geht sehr gut. Ich mache auf meiner Website Div Boxen für Header, Menu, Hauptteil und Footer. Nacher wirst du dich freuen das ich dir den Tip gegeben habe, da du mit dieser Art und Weise später mit php deinen Code viel kleiner machen kannst.


Wenn du Firefox benutzt kann ich dir Web Developer empfehlen, das ist ein Hammergeiles Add-on was einem die Daten über das jeweilige Elemenz der Website gibt.

Wenn du nicht Firefox benutzt kann ich dir den Browser nur empfehlen, da dieser Browser Sehr viele gute Add-ons hat.
 
HTML behersche ich eigentlich.
Nö. Dir fehlt, was den meisten fehlt: Das Verständnis, wofür HTML da ist. Nämlich für die Semantik. Mit HTML legst Du fest, was Dein Inhalt bedeuten soll. Das fehlt bei Dir noch völlig.

Gelernt hab ich das halt mit verschiedenen Anleitungen im Internet und da hieß es immer, dass man das Design am besten mit CSS macht.
Das ist auch richtig so. Aber ich bemängele ja auch nicht, dass das falsch wäre, ich bemängele Dein HTML. Keine Spur von Semantik. Im Moment machst Du Layout mit HTML, und ob das Tabellen sind oder <div>, ist beides gleich verkehrt. Das Element <div> dient zum Gruppieren mehrerer Elemente.

Deswegen wollte ich jetzt das Design auch komplett mit CSS machen und dann später wo jetzt noch "Das hier ist wird dann später das Feld mit dem Text!" steht, meine Texte, Bilder usw. einfügen.
Wenn man erst das Layout mit semantisch fehlehaftem HTML-Code aufstellt, gibts zwei Möglichkeiten: Entweder man verbessert dann erst die Semantik, muss dann aber u.U. auch wieder das Stylesheet mit anpassen. Oder aber, was leider am häufigsten auftritt, der HTML-Code wird nicht mehr verändert und ist somit semantisch falsch. Aus Faulheit oder einfach falscher Reihenfolge bei der Bearbeitung der Seite.
Als Experte kann man sich das erlauben. Anfänger sollten mit dem Inhalt anfangen, dann die Bedeutung auszeichnen und erst dann Layout und Design machen. Das ist einfacher, erspart doppelte Arbeit, ist logischer und man lernt leichter, worauf es ankommt.

Dieser schwarze Kasten zieht sich dann rüber bis auf die rechte Seite, dies sieht man am schwarzen Strich ganz rechts und ganz unten über der Copyright-Zeile ist auch noch was schwarzes. Jetzt will ich aber, dass dieser schwarze Kasten nur um das Menü drumrum ist.
Der Fehler liegt im HTML-Code, nicht im Stylesheet. Deine #mainsection ist Teil der schwarzen #navi. Daher umschließt #navi eben auch #mainsection.
Vermutlich willst Du #navi in eine ul umwandeln (Semantik), die dann mit "float:left" an den linken Rand legen und im HTML-Code darunter dann sofort die #mainsection kommen lassen. Zweispaltiges Layout in CSS.

Gruß,
-Efchen
 
@ xXxPeterPanxXx

Genau so hatte (bzw. eigentlich hab) ich das auch vor. Nur einer meiner DIV-Bereiche (der für's Menü) soll einen schwarzen Hintergrund bekommen. Dieser zieht sich leider noch weiter über die Seite und ich kriegs nicht hin, das er nur beim Menü als Hintergrund bleibt.

@ Efchen

Anscheinend hast du viel Ahnung von HTML usw...ich bin noch nen Anfänger als sry, dass ich das hier noch nicht so ganz kapiere. Also du meintest ja, man soll erst den Inhalt und dann das Design machen. Ich hab das aber eigentlich so verstanden, dass man mit CSS den Inhalt unabhängig vom Design machen kann. Also




 
Werbung:
Also du meintest ja, man soll erst den Inhalt und dann das Design machen.
Ja, dann lernt man, HTML richtig anzuwenden und spart sich außerdem doppelte Arbeit. Denn wenn man zuerst das Design macht und noch keinen Inhalt hat, dann weiß man ja nicht, welche Tags man verwenden wird. Man benutzt also wahrscheinlich hauptsächlich divs, was aber semantsich gesehen eigentlich die letzte Wahl ist. Die meisten sparen sich dann nach dem Design die Arbeit, die divs durch richtige Tags zu ersetzen und produzieren so nur eine sogenannte div-Suppe, die im Sinne von HTML leider um keinen Deut besser ist, als Tabellenlayout.

Ich hab das aber eigentlich so verstanden, dass man mit CSS den Inhalt unabhängig vom Design machen kann.
Ja, bei CSS-Design befolgt man strikte Trennung von Inhalt und Layout. Alles was mit Inhalt/Semantik zu tun hat, wird in HTML gelöst, alles was Design/Layout angeht, mit CSS. Die "räumliche" Trennung, also ein externes Stylesheet wird das noch gefestigt. Wenn die Basis aus validen und semantisch korrektem HTML steht, brauchen Experten anschließend nur noch am Stylesheet zu arbeiten und müssen (im Idealfall) nie wieder in den HTML-Code eingreifen, um das Design dann fertig zu stellen.

Dein Schaubild ist schon prinzipiell richtig. Aber im Stylesheet referenziert man ja auf den HTML-Code. Deine Selektoren sehen dann z.B. so aus:
div#Content, ul#Menu, p.Absatz1, address

Wenn Du aber alles mit <div> schreibst, Dein Stylesheet dann fertig ist, und Du dann dran gehst, Semantik in Deinen HTML-Code zu bauen, dann wird aus einer Adresse, die Du vorher mit <div> ausgezeichnet hast richtigerweise ein <address>. Das gabs aber bisher nicht in Deinem Stylesheet. Es könnte also sein, dass sich HTML-Tags ändern und Deine Selektoren im Stylesheet dann nicht mehr stimmen. Hattest Du vorher ein div#Menu heißt das jetzt vielleicht ul#Menu (was richtig wäre) und je nachdem wie Du Dein Stylesheet aufgebaut hast, musst Du dann noch ein zweites Mal Änderungen daran vornehmen.

CSS baut immer auf einem fertigen, validen und semantisch korrekten HTML-Code auf. Aber beide sind voneinander getrennt, das ist richtig. Und wenn der HTML-Code gut durchdacht ist, kann man das komplette Layout und Design total abändern, indem man nur das Stylesheet austauscht. Das beste Beispiel dafür, was hier möglich ist, ist css Zen Garden: The Beauty in CSS Design

Dieser zieht sich leider noch weiter über die Seite und ich kriegs nicht hin, das er nur beim Menü als Hintergrund bleibt.
Ich hatte Dir schon gesagt, wo das Problem liegt. Woran hapert es denn nun noch?
 
Ich glaube, ich hab jetzt verstanden, wie das mit der Semantik und so meintest.

Und das mit dem schwarzen Rahmen um mein Menü hab ich, kurz nachdem ich den Beitrag geschrieben habe, auch geschafft. Mit float:left und dann noch erstmal das Java Sript rausgeschmissen und es hat gefunzt. Jetzt mache ich das Menü dann mit einer Tabelle und mit dem von dir vorgeschlagenen :hover .

thx
 
@efchen: Nich alle Div's sind schlecht. Man brauch die Div#s ja zum Gruppieren für z.b ein Menu. Diese kann man später mit php einbinden und man sprat eine menge Zeit und Arbeit.
 
Werbung:
Jetzt mache ich das Menü dann mit einer Tabelle und mit dem von dir vorgeschlagenen :hover .

thx

Hallo Jannik,

Tabellen sind gut für tabellarische Daten.
Ein Menü ist eine Auflistung von Links, daher ist da eine Liste sinnvoller:
Code:
<ul class="menu">
    <li><a href="#">Home</a></li>
    <li><a href="#">Link 1</a></li>
    <li><a href="#">Link 2</a></li>
</ul>
Wenn Du eines Tages beschließt, dass Du die Navi gerne horizontal haben willst,
änderst Du nur das Stylesheet.
Hast Du dazu aber eine Tabelle missbraucht, fängst Du bei Adam und Eva neu an...

Grüße
Bernhard
 
Genau so wollte ich das jetzt auch machen. Hab ich auch eigentlich. Jetzt, da ich das JS wieder rausgeworfen hab, hab ich aber zwei neue Probleme: [Hier nochmal die neue Website: Neue Website

1. In den ersten beiden Spalten des Menüs sind jetzt beides Links. Um diese zu benutzen muss man aber direkt auf den Link klicken (ist ja eigentlich auch logisch;-)). Jetzt würde ich das gerne irgendwie so machen, dass es auch reichen würde, wenn man auf den orangenen Kasten drumherum klickt. (Schätze mal, dass das mit reinem HTML+CSS nicht möglich ist :()

2. Mein Menü soll später Unterkategorien besitzen. Also das da z.B dass da steht "Kategorie 1" (diese Feld soll kein Link sein!). Darunter stehen dann z.B. 3 Links . Dann soll wieder so ein Kategorie Feld kommen und dadrunter dann z.B. wieder 3 Links. Ich benutze jetzt ja ":hover" für das Menü. Wenn ich jetzt so ein Kategorie Feld mache (auf der Seite ebenfalls schon vorhanden und als "Textfeld 1" und "Textfeld 2" bezeichnet.") dann wird der hover-Effekt übernommen. Da es garkein Link ist, soll das natürlich nicht sein. Ich denke, dafür muss ich irgendwie noch zwei IDs ins Menü einbauen. Hier mal der dafür zuständige Teil im Quellcode:

#navi {
background-color:#EE0000;
float:left;
width:210px;
height:750px;
margin-left:5px;
margin-right:5px;
font-family:Arial;
text-align:center;
}

#navi ul {
list-style:none;
}

#navi li {
background-color:#FFCC00;
border:3px #000077 solid;
margin-top:5px;
margin-right:5px;
margin-left:5px;
padding:8px;
color:#009999;
}


#navi li:hover {
background-color:#FFFF33;
color:#000000;
}
 
1. In den ersten beiden Spalten des Menüs sind jetzt beides Links. Um diese zu benutzen muss man aber direkt auf den Link klicken (ist ja eigentlich auch logisch;-)). Jetzt würde ich das gerne irgendwie so machen, dass es auch reichen würde, wenn man auf den orangenen Kasten drumherum klickt. (Schätze mal, dass das mit reinem HTML+CSS nicht möglich ist :()
Schreib in die css datei:
Code:
#navi li {
display:block;
}
 
Werbung:
Funktioniert leider nicht. Habs hier einfach so eingefügt:

Code:
#navi {
  background-color:#EE0000;
  float:left;
  width:210px;
  height:750px;
  margin-left:5px;
  margin-right:5px;
  font-family:Arial;
  text-align:center;
 }

#navi ul {
  list-style:none;
 }

#navi li {
  background-color:#FFCC00;
  border:3px #000077 solid;
  margin-top:5px;
  margin-right:5px;
  margin-left:5px;               
  padding:8px;
  color:#009999; 
  display:block;
 }
 
#navi li:hover {
  background-color:#FFFF33;
  color:#000000;
 }
 
Super funktioniert!

Wenn mir jetzt noch jemand bei meinem zweiten Problem helfen könnte, wäre super ;-)

Edit: Habs zweite Problem jetzt selbst gelöstet. Ich musste den Links über "#navi li a" einfach andere Werte/Farben zuordnen und es funktioniert!
 
Zuletzt bearbeitet:
Werbung:
Naja, richtig funktionierts wohl doch nicht. (Hab wohl etwas vorschnell editiert...)

Hab jetzt mal zwei Versionen der Website gemacht:

Version 1: Neue Website
Version 2: Neue Website

Hier die beiden zuständigen Stellen im Quellcodes (Beim zweiten Quellcode fehlt nur eine Zeile, dafür hab ich jetzt einfach -------- hingeschrieben und in beiden Codes die Stelle rot makiert.):

Version 1:
Code:
#navi {
  background-color:#EE0000;
  float:left;
  width:210px;
  height:750px;
  margin-left:5px;
  margin-right:5px;
  font-family:Arial;
  text-align:center;
 }

#navi ul {
  list-style:none;
 }

#navi li {
  background-color:#FFCC00;
  border:3px #000077 solid;
  margin-top:5px;
  margin-right:5px;
  margin-left:5px;               
  [COLOR=Red]padding:8px;[/COLOR]
  color:#009999; 
 }

#navi li a {
  display:block;
  text-decoration:none;
  background-color:#6699CC;
  color:#660000;
  padding:8px;
 }
 
#navi li a:hover {
  background-color:#0066CC;
  color:#000000;
  padding:8px;  
 }
Version 2:

Code:
#navi {
  background-color:#EE0000;
  float:left;
  width:210px;
  height:750px;
  margin-left:5px;
  margin-right:5px;
  font-family:Arial;
  text-align:center;
 }

#navi ul {
  list-style:none;
 }

#navi li {
  background-color:#FFCC00;
  border:3px #000077 solid;
  margin-top:5px;
  margin-right:5px;
  margin-left:5px;  
  [COLOR=Red]----------------  [/COLOR]           
  color:#009999; 
 }

#navi li a {
  display:block;
  text-decoration:none;
  background-color:#6699CC;
  color:#660000;
  padding:8px;
 }
 
#navi li a:hover {
  background-color:#0066CC;
  color:#000000;
  padding:8px;  
 }
Also das padding von "#navi li" wird noch bei "#navi li a" mit einbezogen. Das müsste ich irgendwie verhindern...


Edit: Wenn ich die Felder für die Kategorien als <p> auszeichne, dann kann ich das <p> nochmal einzeln definieren (sry, für die ganzen Edits ;)).
 
Zuletzt bearbeitet:
Ich glaube, ich hab jetzt verstanden, wie das mit der Semantik und so meintest.
Jetzt mache ich das Menü dann mit einer Tabelle
Dann hast Du nicht verstanden, was ich mit Semantik meine.
Ein Menü stellt keine tabellarischen Daten dar, also ist es falsch, das als Tabelle auszuzeichnen. Ein Menü ähnelt am ehesten einer Liste, also solltest Du es auch als Liste auszeichnen.

@efchen: Nich alle Div's sind schlecht. Man brauch die Div#s ja zum Gruppieren für z.b ein Menu. Diese kann man später mit php einbinden und man sprat eine menge Zeit und Arbeit.
divs sind nicht schlecht, Tabellen sind auch nicht schlecht. Jedes Tag hat eine Bedeutung. div verwendet man zum Gruppieren.
Ein Menü ist nur ein einzelnes Element und muss daher nicht gruppiert werden, für eine Gruppe braucht man immer mindestens zwei. Ein Menü wird als Liste asgezeichnet, nochmal ein div drum rum zu machen, ist überflüssig und verkehrt.
 
Dann hast Du nicht verstanden, was ich mit Semantik meine.
Ein Menü stellt keine tabellarischen Daten dar, also ist es falsch, das als Tabelle auszuzeichnen. Ein Menü ähnelt am ehesten einer Liste, also solltest Du es auch als Liste auszeichnen.

Ich bin ein Idiot...ich meinte natürlich eine Aufzählung.

Ein Menü wird als Liste asgezeichnet, nochmal ein div drum rum zu machen, ist überflüssig und verkehrt.

Aber auf meiner Seite hab ich jetzt dem DIV um das Menü die ID "navi" zugeordnet. Im Stylesheet steht dann bei Navi:

Code:
#navi {
  background-color:#EE0000;
  float:left;
  width:210px;
  height:750px;
  margin-left:5px;
  margin-right:5px;
  font-family:Arial;
  text-align:center;
  display:table;
 }

Diese Informationen sind für mein Menü wichtig, wenn ich also den DIV um das Menü wegmachen würde, dann würden diese Informationen nichtmehr mit eingebunden.
 
Werbung:
Diese Informationen sind für mein Menü wichtig, wenn ich also den DIV um das Menü wegmachen würde, dann würden diese Informationen nichtmehr mit eingebunden.
Was spricht dagegen, dem Menü (der Liste) diese ID zu geben und die entsprechend zu formatieren? div und ul sind beides Block-Elemente, sie reagieren beide gleich und können mit den gleichen Eigenschaften formatiert werden. Man muss die Liste nicht nochmal extra einpacken.
Geschenke packst Du ja auch nicht zweimal in Papier ein, oder?

Auch so ein Fehler, den CSS-Anfänger sehr oft begehen, von dem ich nicht verstehe, wie man überhaupt darauf kommt? CSS-Eigenschaften kann man jedem Element geben. Man muss es nicht in ein zusätzliches, überflüssiges Element einpacken um dann das zu formatieren.
 
Zurück
Oben