Größenangabe für Links in Menü

Liebe/-r Experte/-in,

ich habe mich dazu entschlossen mein Layout und Inhalt zu trennen. Und versuche jetzt meine Seite via XHTML und CSS umzusetzen. Im Augenblick noch in der Testphase.

Als erstes habe ich eine Navigation erstellt.

Die Schriftart, und die Änderungen beim mouse_over (hover) werden korrekt dargestellt.

Das Funktioniert einwandfrei.

Nur der Rahmen um die Links wird abhängig vom Text angezeigt. Das heißt das die Rahmengröße vom Textinhalt des Links abhängig ist.

Ich möchte aber das egal was im Linktext steht, der Rahmen immer 150px breit und 50px hoch ist.

Mein XHTML:

Design Test

Im a href steht class=„sub“ aus irgendeinem Grund zeigt er hier den Quelltext nicht korrekt an (trotz prehtml tag) (target="_blank" rel=„nofollow“ ist nicht von mir das wird automatisch anstelle von class=„sub“ angezeigt. Obwohl in meinem Quelltext class=„sub“ steht. Keine Ahnung warum die Links bei der Anzeige so um geschrieben werden)

Mein CSS:

@charset „utf-8“;

/* Zurücksetzen der Innen- und Außenabstände */
* { margin: 0; padding: 0; }

body { margin: 0; padding: 0; }
/**
* @section Bilder
*/
img { vertical-align: bottom; }

/* Rahmen verlinkter Bilder entfernen */
a img { border: 0 none; }

/**
* @section div
*/
div { border: 0 none; overflow: hidden; }

/* Sub Navigation Container links --------------------------------------------------- */
div#startnavi {
position: absolute;
top: 0;
left: 0;
width: 150px;
height: 460px;
background-color:#ffffff;
}

#startnavi ul {
list-style-type: none;
}

#startnavi li {
list-style:none;
display: block;
vertical-align: middle;
line-height: 43px;
}

a.sub {
width: 150px;
height: 50px;
margin: 5px;
padding: 6px;
text-align: left;
font-family: Verdana, Arial, Helvetica, sans-serif;
font-size: 16px;
text-decoration: none;
border: 1px dotted rgb(153, 153, 153);
color: #000000;
}

a.sub:hover {
text-decoration: underline;
background-color: #999999;
}

Wo ist mein Fehler??

Für die Hilfe und die damit verbundene Mühe danke Ich euch im voraus.

Gruß Andreas

Hallo Andreas,

a ist ein Inline-Element, muss also, damit die Größenangaben greifen, auf
display:block; gesetzt werden
also

a.sub {
display:block;
width: 150px;
height: 50px;

}

Grüße, Dirk

Hallo Dirk,

a ist ein Inline-Element, muss also, damit die Größenangaben
greifen, auf

display:block; gesetzt werden

Die Info hab ich gebraucht. Jetzt Funktioniert es. Größe unabhängig vom Linktext.

Herzlichen Dank für deine schnelle und gute Hilfe

Grüße Andreas

Hallo Andreas.

EIn -Element ist immer ein Inline-Element, wie auch . Diese kennen keine Breite.

Entweder du machst es mittels „display: inline-block;“ zu einem solchen Feld, welches Inline aber zugleich auch Block ist. Nur leider hat da der IE bis einschl. Version 7 so seine Probleme mit, oder du machst es zu einem Block-Element und gibst ihm auch noch ein Float mit:

display: block;
width: 150px;
float: left;

Vergiss nicht, die nachfolgenden Elemente wieder mit normalen Textfluss zu versehen. Das geht mit „clear: left;“, da du ja ein Float left genommen hast.

Ansonsten schau dir das mal in einem Tutorial an:
http://de.selfhtml.org/css/eigenschaften/positionierung.htm
oder
http://www.css4you.de/posproperty.html

Viel Erfolg!!!
Matthias

Hallo,

inline-Elemente lassen sich keine Breitenangaben zuweisen. Wenn du das a-Element auf display: block setzt, dagegen schon. Dann werden die Links zwar riesig hoch, weil du height und line-height schon (vermutlich vergeblich) so weit raufgeschraubt hattest.

Gruß,

Amica

Hallo Andreas,

ich habe mich dazu entschlossen mein Layout und Inhalt zu
trennen. Und versuche jetzt meine Seite via XHTML und CSS
umzusetzen.

Warum nicht HTML5? Mir scheint, Du bist in HTML noch nicht so ganz sicher und wenn Du sowieso noch lernen musst, warum nicht gleich das neueste?

Als erstes habe ich eine Navigation erstellt.

Da hast Du mit dem schwersten angefangen. :smile:

Nur der Rahmen um die Links wird abhängig vom Text angezeigt.

Das gilt für alle Inline-Elemente - frag mal Google zu Inline-Elementen und Block-Level-Elementen.

Um es kurz zu sagen. Inline-Elemente fcließen mit dem Text mit. Sie sind exakt so großwie ihr Inhalt.

Block-Level-Elemente erstrecken sich standardmäßig über die gesamte Breite des Elternelementes. Wenn man das nicht möchte, kann man mit width die gewünschte Breite angeben. Bei einer Navigation am besten in em statt in Pixeln.

Damit ein Inline-Element sich so wie ein Block-Level-Element verhält, sagst du dem Browser, dass er es wie ein solches darstellen soll. Das geht mit display:block

Was ist das denn?

http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd“>

Wenn du strict verwendest, darfst du später kein target benutzen!

Gut, dass Du mit Listen arbeitest!

Klassen dienen dazu, gleichartige Elemente von anderen zu unterscheiden. Wenn Du allen dieselbe Klasse gibst, kannst Du sie nicht unabhängig voneinander gestalten und du brauchst eigentlich gar keine Klasse…

Ein HTML-Dokument beginnt mit der Doctype-Angabe, dann wird html geöffnet und mit dem schließen von html ist das Dokument zu Ende! Prehtml gibt es nicht.

Im a href steht class=„sub“ aus irgendeinem Grund zeigt er
hier den Quelltext nicht korrekt an (trotz prehtml tag)
(target="_blank" rel=„nofollow“ ist nicht von mir das wird
automatisch anstelle von class=„sub“ angezeigt. Obwohl in
meinem Quelltext class=„sub“ steht. Keine Ahnung warum die
Links bei der Anzeige so um geschrieben werden)

Wie heißt Dein Editor?

Mein CSS

@charset „utf-8“;

Muss als erstes stehen weg mit dem prehtml!!!

/* Zurücksetzen der Innen- und Außenabstände */

Wozu? Willst du alles selber machen?

div { border: 0 none; overflow: hidden; }

warum?

/* Sub Navigation Container links
--------------------------------------------------- */

div#startnavi {

position: absolute;

Absolut? Das ist aber mutig…

width: 150px;

height: 460px;

Wieso Pixel? Du solltest nur schreiben, was du begründen kannst!

vertical-align: middle;

Warum? Ist doch keine Tabellenzelle…

line-height: 43px;

width: 150px;

height: 50px;

margin: 5px;

padding: 6px;

Das passt aber nicht in ein 150 px breites DIV!!! Lies mal über das CSS-Box-Modell nach! Paddings werden zur Breite addiert!

font-family: Verdana, Arial, Helvetica, sans-serif;

font-size: 16px;

Das ist eh Standard. Benutz aber keine absoluten Größen, sondern relative.

Wo ist mein Fehler??

Siehe oben :smile:

Für die Hilfe und die damit verbundene Mühe danke Ich euch im
voraus.

Gern geschehen

Viele Grüße,

Marc

Hallo Andreas,

wenn du den Menüpunkten eine feste breite unabhängig vom Linktext geben möchtest (so hab ich das jetzt verstanden), musst du bei #startnavi li noch die deklaration „a“ für links dranhängen, sonst funktioniert das nur für den Text aber nicht den Rahmen!

also #startnavi li a{

}

In wieweit die Navigation noch für Untermenüs gilt hab ich nicht geprüft, wichtig ist, dass du immer der link-deklaration „a“ die gewünschte Breite zuweist (und ggf. den Rahmen etc.) und nicht nur der list deklaration!

Hier dein überarbeiteter Code an der entsprechenden Stelle, ich hoffe das war das was du meintest. falls nicht einfach nochmal fragen…

/* Sub Navigation Container links --------- */

#startnavi {
position: absolute;
top: 0;
left: 0;
width: 150px;
height: 460px;
background-color:#ffffff;
}

#startnavi ul {
list-style-type: none;

}

#startnavi li a{
list-style:none;
width: 150px;
border: 1px solid;
border-color: #339966;
display: block;
vertical-align: middle;
line-height: 43px;
}

a.sub {
width: 150px;
height: 50px;
margin: 5px;
padding: 6px;
text-align: left;
font-family: Verdana, Arial, Helvetica, sans-serif;
font-size: 16px;
text-decoration: none;
border: 1px dotted rgb(153, 153, 153);
color: #000000;
}

a.sub:hover {
text-decoration: underline;
background-color: #999999;
}

Hallo Matthias,

Das Hatte ich nicht gewust:

EIn -Element ist immer ein Inline-Element, wie auch .

Das war die Lösung:

display: block;

Vielen Dank für deine schnelle und gute Hilfe.

Sorry das ich so spät Antworte, ich musste wegen eines Hardwaredefektes meinen PC neu Aufsetzen.

Gruß Andreas

Hallo Amica,

Das war die Lösung:

inline-Elemente lassen sich keine Breitenangaben zuweisen.
Wenn du das a-Element auf display: block setzt, dagegen schon.

Vielen Dank für deine schnelle und gute Hilfe.

Sorry das ich so spät Antworte, ich musste wegen eines Hardwaredefektes meinen PC neu Aufsetzen.

Gruß Andreas

Hallo Marc,

habe

via CSS auf display: block gesetzt. Dann hat es funktioniert.

Warum nicht HTML5? Mir scheint, Du bist in HTML noch nicht so
ganz sicher und wenn Du sowieso noch lernen musst,

Ich habe 1996 HTML kennen und nutzen gelernt.

Habe es dann aus beruflichen Gründen ruhen lassen.

warum nicht
gleich das neueste?

Darum:

http://jendryschik.de/wsdev/einfuehrung/grundlagen/websprachen

Abschnitt: Warum sollten Webautoren heute auf XHTML setzen?

Was ist das denn?

Das hängt mit diesem Forum und der Anzeige von Quelltext zusammen:

http://www.wer-weiss-was.de/app/faqs/4/3090

Wie heißt Dein Editor?

http://www.phase5.info/

Danke für deine Hilfe

Sorry das ich so spät Antworte, ich musste wegen eines Hardwaredefektes meinen PC neu Aufsetzen.

Gruß Andreas

Hallo phoenix76,

habe

via CSS auf display: block gesetzt. Dann hat es funktioniert.

Herzlichen Dank für deine ausführliche Hilfe.

Sorry das ich so spät Antworte, ich musste wegen eines Hardwaredefektes meinen PC neu Aufsetzen.

Gruß Andreas

Hallo Andreas,

Am 02.02.2011 08:06, schrieb wer-weiss-was-Expertenanfrage [No Reply]:
>
> habe
>
> via CSS auf display: block gesetzt. Dann hat es funktioniert.

Sag ich doch :smile:

>
> :Warum nicht HTML5? Mir scheint, Du bist in HTML noch nicht so
> :ganz sicher und wenn Du sowieso noch lernen musst,
>
> Ich habe 1996 HTML kennen und nutzen gelernt.

Da gab es natürlich noch kein HTML5 - aber das schreibt sich genau wie HTML 3.2 und 4.01 - dann musst Du Dir keine XHTML-Syntax angewöhnen (obwohl die sauberer und klarer und leicht zu lernen ist).

Aber XHTML 2.0 wird es nicht geben und die Entwicklung geht in Richtung HTML ohne „X“ weiter, also HTML5 - Du darfst aber XHTML-kompatibel schreiben, wenn Dir das besser gefällt (mache ich auch so) - HTML5 ist zu beiden Standards abwärtskompatibel!

> Habe es dann aus beruflichen Gründen ruhen lassen.

Ja, für Webseiten-Pflege braucht man Zeit…

> :warum nicht
> :gleich das neueste?
>
> Darum:
>
> http://jendryschik.de/wsdev/einfuehrung/grundlagen/websprachen
>
> Abschnitt: Warum sollten Webautoren heute auf XHTML setzen?

Obwohl ich Jendryschik sehr schätze, rate ich Dir: schreibe von mir aus XHTML-konfromes HTML5, aber nutz die neuen Tags!

Unter http://www.haunschild.de schreibe ich hin und wieder etwas über das eine oder andere neue Element oder Attribut. So sind das leicht verdauliche kleine Häppchen. Wenn es Dir gefällt: man kann die neuen Posts abonnieren (per RSS).

Auch über andere (neue) Techniken gibt es da in unregelmäßigen Abständen was. Z. B. CSS3 und so.

> :
> :
> :
> :Was ist das denn?
>
> Das hängt mit diesem Forum und der Anzeige von Quelltext zusammen:
>
> http://www.wer-weiss-was.de/app/faqs/4/3090

Ja, habe es nach dem Absenden meiner Mail erst verstanden. Ich hatte befürchtet, dass fügt Dein Editor hinzu, deshalb meine Frage:

> :Wie heißt Dein Editor?
>
> http://www.phase5.info/

Guter Editor!

> Danke für deine Hilfe

Gerne!

>
> Sorry das ich so spät Antworte, ich musste wegen eines Hardwaredefektes meinen PC neu Aufsetzen.
>

Oh je, das ist ärgerlich. Gut, dass er wieder läuft!

Viele Grüße,

Marc

Hallo,

ein A-Tag ist ein Inline-Element und definiert seine Höhe und Breite daher abhängig von seinem Inhalt. Um eine feste Größe zu definieren musst du aus dem Element ein Block-Element machen:

a.sub {
 display: block;
 [...]
}

Viele Grüße,

Matthias