CSS - Ausrichtung in der Mitte eines div - tags

  • Hallo,

    ich habe mir einen div Abschnitt festgelegt mit festgelegter Höhe und Breite. Jetzt möchte ich, dass mein Text sowohl bezogen auf die Breite als auch auf die Höhe des div Abschnitts mittig erscheint.

    text-align:center; funktioniert einmalig aber
    vertical-align:middle; ist ohne Wirkung.

    Ist das der falsche Befehl?

    Viele Grüße

  • Also als Warnung vorneweg:

    Auf der Website siehts etwas schlampig aus, weil ich gerade versuche mich zum ersten Mal mit CSS anzufreunden....

    Ganz genau mittig wird der Text auch nie werden, da ich ja mein Menü mit so nem 5px großen Rand umgeben habe um Abstand zwischen den einzelnen Button zu haben - aber es sind mehr als 5px Unterschied! Außerdem ändert sich nichts an der Ausrichtung, wenn ich statt "middle" "top" oder "bottom" angebe.

    Hier der Link
    http://www.10-fragen.de

    Vielen Dank fürs Fehler suchen,
    Questionmark

  • So, ich hab mal eben mein Wissen aufgefrischt:

    Es ist immer noch so: vertikale Zentrierung in Div-Tags geht nicht.
    Das soll u.U. mit CSS 3 kommen, da ist dann wieder die Frage, wann es auch die passenden Browser dazu gibt.

    Einzige Variante: Wenn der Text einzeilig ist, kannst du ein line-height mit der gleichen Angabe wie das height des Div setzen. Bei mehrzeiligem Text: Pech gehabt, geht nicht mehr vernünftig.

    Ansonsten: nimm eine Tabelle, schließlich sind die ja dafür da.
    Bei Tabellenzellen funktioniert das vertical-align.

    G.a.d.M.

    Ronald

  • Ohhhh, schade! :(

    Na, dann muss ich wohl oder übel wohl doch vorerst noch zu einer Tabelle greifen, obwohl ich doch hier im Forum gelernt habe, dass man Tabellen nur da verwendet, wo auch im geschriebenen Text eine Tabelle stehen würde....

    Damit muss ich mich dann wohl noch etwas gedulden.

    Trotzdem danke für deine Hilfe! :wink:

    Grüße,
    Questionmark

  • Zitat von Questionmark

    Na, dann muss ich wohl oder übel wohl doch vorerst noch zu einer Tabelle greifen, obwohl ich doch hier im Forum gelernt habe, dass man Tabellen nur da verwendet, wo auch im geschriebenen Text eine Tabelle stehen würde....

    Dazu mag ich bald nichts mehr sagen. hören kann ich es schon lange nicht mehr.

    Grundsätzlich:

    Tabellen für HTML wurde geschaffen um damit HTML-Seiten zu gestalten. Ob du in die Tabellen nun Text oder Grafiken packst, ob du Tabellenzellen längs oder quer miteinander verbindest - das alles ist die als Webemaster freigestellt, genau so, wie es dir am besten paßt.

    Alle Browser verstehen Tabellen. Es gibt für Tabellen unheimlich viele Styles, Head-, Body- und Foot-Tags, verschiedene Rahmen, as auch immer - Styles ohne Ende. Heute, in einer Zeit, wo Stylesheets langsam die HTML-Formatierungen ablösen, gibt es das alles auch in CSS.

    Nun möge mir jemand verraten, wozu das alles, wenn nur einer von 10.000 Webmaster irgendwelche Daten tabellarisch auf seine Internetseite packt?

    Leider gibt es aber ein paar User, die meinen, sie wissen mehr als andere. Diese paar User machen sich verdammt breit und erzählen allen, daß Tabellen nicht dafür geschaffen wurden, Webseiten zu stylen. Dabei zitieren sie sich dann fleißig gegenseitig und jeder weiß es noch ein wenig besser als der andere.

    Irgendwie erinnert mich das ein wenig an Till Eulenspiegel, an Atomkraftgegner, militante Nichtraucher, Wehrdienstverweigerer, Porschehasser - alle haben Argumente, aber alle eben nur einseitig.

    Auf wen du höen willst, entscheide bitte selbst - ich erstelle meine Internetseitenmit mit alledem, was HTML & Co. hergibt. Warum sollte ich auf Funktionen verzichten, die zwar vorgesehen sind, aber einigen wenigen Usern nicht passen?

    http://de.selfhtml.org/html/tabellen/layouts.htm

    G.a.d.M.

    Ronald

  • Zitat von Ronald


    Dazu mag ich bald nichts mehr sagen. hören kann ich es schon lange nicht mehr.

    Das tut mir Leid, nerven wollte ich nicht :oops:

    Da bin ich wohl einem oder auch mehreren Porsche hassenden Till Eulenspiegeln augesessen :roll:

    Vielen Dank für die Richtigstellung und den geschichtlichen Exkurs - werd jetzt wieder ohne schlechtes Gewissen Tabellen verwenden, natürlich gepaart mit CSS :) Kenn ja jetzt jemand Erfahrenen, auf den ich verweisen kann, wenn mich jemand anmault mit dem Hinweis, dass Tabellendesign nicht professionell genug ist....

    Es grüßt,
    Questionmark

  • Hi Questionmark,

    Du muss nicht gleich die flinte ins Korn werfen.....

    Es GIBT Lösungen, ein Div mittig mittig zu bekommen.

    Zitat

    Ronald schrieb:
    Es ist immer noch so: vertikale Zentrierung in Div-Tags geht nicht.
    Das soll u.U. mit CSS 3 kommen, da ist dann wieder die Frage, wann es auch die passenden Browser dazu gibt.

    Ronald das ist leider..... FALSCH

    Ganz korrekt und ohne Bastelei geht das schon über Netscape/Firefox...
    mit

    Vertical-Align !!!! :roll:

    allerdings, ist das dann wie eine Tabelle, und dann ist es wirklich leichter,
    das ganze direkt als echte tabelle mit <table> zu machen, dann funktioniert
    Vertical-align nämlich auch mit dem Internet Explorer , wie Roland bereits schrieb!!!!

    beim Explorer muss man ohne <table> etwas kräftiger in die Trickkiste greifen, aber es geht auch !!!

    hab ein bischen in Google gewühlt, und tatsächlich eine Lösung für den internet Explorer gefunden !!Hab eine kleine Modifikation vorgenommen, so dass es auch alles mittig mittig ist, und unter mein Tutorial gehängt !! :D

    Gruß Peter

    hab alles mal schön zusammengefasst und in HTML gebannt

    ;)

    http://<br>http://wow.bundderalten.servegame.org/tutorial_divs_vertikal_ausrichten.html</a><br>

  • Zitat von Peter


    Es GIBT Lösungen, ein Div mittig mittig zu bekommen.

    Danke für den Hinweis, Peter,

    hab mir das Ganze mal angeschaut, aber nach Ronalds letztem Post bin ich zu dem Schluss gekommen, nicht alles über CSS erzwingen zu müssen um dem modernen Webdesign zu genügen. Und wie du schon selbst gesagt hast, scheint mir in diesem Fall der <table>-Tag wirklich um einiges praktikabler...

    Grüße

  • Zitat von Peter

    Ronald das ist leider..... FALSCH

    Nein, es war schon genau richtig: innerhalb eines Div-Tag gibt es keine vertikale Zentrierung.

    Was du machst, ist Div-Tags so lange zu schachteln, bis es irgendwann wie eine vertkale Zentrierung ausieht.
    Das sind aber zwei verschiedene Schuhe.

    G.a.d.M.

    Ronald

  • Schau mal bitte den Quelltext im code block an :)
    (Bitte mit Firfox & Family anschauen !!) :!:


    Der inhalt ist doch mittig, oder was meinst du ??

    da beisst die Maus kein Faden ab.


    Es geht halt leider nunmal nur im Netscape/Firefox...
    Dass der Internet explorer zu doof ist heisst noch lange nicht, das es nicht geht, oder ? :wink:

    das mit dem IExplorer mittels <table> Div-inhalte mittig zu setzen sind ,war wirklich etwas unglücklich
    formuliert, gebe ich ehrlich zu

    Zitat


    Peter schrieb:
    das ganze direkt als echte tabelle mit <table> zu machen, dann funktioniert
    Vertical-align nämlich auch mit dem Internet Explorer , wie Roland bereits schrieb!!!!

    das stimmt leider nicht so ganz, asche über mein haupt , aber solange man beim DIV Container keine direkte Grössenangabe zur höhe macht, hat man in einem <Table> den gleichen optischen effekt im Internet explorer!!

    und wenn ich bei meinem Div rahmen abstand zum text haben möcht, verwende ich halt padding :wink:

    Wenn ich mit meinem Auto nicht direkt durch den Euro Tunnel von Frankreich nach England fahren kann, packe ich mein Auto halt auf einen Zug....
    So betrachtet fahre ich doch dann auch mit meinem Auto durch den Tunnel, oder ?? :wink:


  • Zitat von Peter

    Schau mal bitte den Quelltext im code block an :)
    (Bitte mit Firfox & Family anschauen !!) :!:


    Der inhalt ist doch mittig, oder was meinst du ??

    da beisst die Maus kein Faden ab.

    Klar ist der Text mittig - aber nicht mittig in einem Div-Tag, sondern mittig in einem Table-Tag: Mit "display:table-cell;" defenierst du, daß das div sich wie eine Tabellenzelle verhalten soll, dazu gehört aber dann auch, daß das Zellen-Tag (<tr>) in HTML mit definiert wurde. Eine Tabellenzelle kann immer nur innerhalb einer Tabelle (<table>) und der darunterliegenden Tabellenzeile (tr) dargestellt werden. Das CSS 'display' ist im Grunde nichts als ein Schalter.

    In deinem Beispiel fehlt jedoch die komplette Tablestruktur, und du erzeugst damit fehlerhaften HTML-Quelltext, was in diesem Fall die Validatoren nicht bemerken, da Stylesheets von Ihnen noch nicht (richtig) verarbeitet werden.

    So gesehen verhält sich in diesem Fall der IE richtig, Mozilla versucht deinen Fehler durch seine Fehlertoleranz auszugleichen.

    Auf jeden Fall ist der Sinn der display-Eigenschaft ein völlig anderer, als er von dir verwendet wird, lies mal z.B. bei SelfHTML nach.
    Richtig eingesetzt müßte das ganze z.B. so aussehen:


    und dann ist dein falscher Zauber vorbei.

    Es sind und bleiben zwei verschiedene Schuhe, auch wenn du noch so viele Krücken baust.

    In einem Div-Tag kann man zur Zeit noch keinen Text vertikal zentrieren, das soll erst mit CSS 3 kommen.
    Das war die Fragestellung des Threads.

    G.a.d.M.

    Ronald

  • ich will jetzt echt nicht mehr mit dir streiten....

    nur weil man mit speziellen css eigenschaften ein Div dazu bringt, sich wie eine tabelle zu verhalten, heisst noch lange nicht das da die klassische <table> Funktion dahinter steckt....es ist halt eine table funktion von CSS denn css soll ja bekanntlich eine Erweiterung oder Alternative zum klassischen HTML sein

    Zitat

    Roland schrieb
    Klar ist der Text mittig - aber nicht mittig in einem Div-Tag, sondern mittig in einem Table-Tag: Mit "display:table-cell;" defenierst du, daß das div sich wie eine Tabellenzelle verhalten soll, dazu gehört aber dann auch, daß das Zellen-Tag (<tr>) in HTML mit definiert wurde.

    und da du so gerne Self HTML zitierst, tue ich das hiermit auch mal:

    http://de.selfhtml.org/css/eigenschaf…ung.htm#display

    selfHTML Beispiel:


    Zitat

    SelfHTML schreibt:
    Erläuterung:
    Das Beispiel definiert Klassen für div-Elemente. Die Klassennamen heißen genauso wie bekannte HTML-Tabellenelemente. Das muss nicht so sein und ist hier nur zu Demonstrationszwecken so. Die jeweiligen Klassen erhalten mit Hilfe von display Eigenschaften, durch die sich die Elemente, denen sie zugewiesen werden, wie die entsprechenden HTML-Elemente für Tabellen verhalten. Innerhalb des Dateikörpers wird dann im Beispiel eine waschechte Tabelle aus div-Elementen mit class-Attributen zusammengebaut.

    Da wir es laut obriger Beschreibung wohl mit einem Zitat "waschechten Tabelle aus Divs" zu tuen haben, beziehen sich auch die evnt. verwendeten zusatzfunktionen wie z.B. Vertical-align auf diese Zitat "waschechten tabellen aus Divs", oder lügt SelfHTML etwa ???

    ergo: ein Div kann laut CSS beschreibung ein Vertical-align !!!!!
    Was der Browser draus macht, wissen wir bei vielen CSS sachen, ist eine andere Sache....

    und die sache mit dem einsamen Display:table-cell Div über das du dich so aufregst....

    Stimmt....ich hätte event. eine div verschachtlung machen müssen, um die klassische <table> funktion zu simulieren...
    aber ich hätte ja auch
    display:inline nehmen dürfen laut w3c:


    W3C hat recht, denn die machen die Regeln !!!!

    Sehe es doch einfach ein !!!

    Gruß,

    Peter


    ps: DISPLAY ist eine CSS 1.0 Funktion ; VERTICAL-ALIGN ist auch eine CSS 1.0 Funktion !!!!

  • Sorry, aber ich will wirklich nicht streiten.

    Du schmeist nur einfach alles durcheinander und dann paßt es schon.

    Die Frage war: Kann ein Div-Tag Text per CSS vertikal zentriert anzeigen?
    Die richtige Antwort lautet immer noch 'nein, das kann es nicht.'

    Du machst daraus jedoch die Frage: Kann ein Div-Tag per CSS die Eigenschaften einer Tabellenzelle annehmen?
    Diese Antwort lautet: ja, das kann es.

    Die dritte Frage wurde nie gestellt, denn die Antwort kennt jeder:
    Kann eine Tabellenzelle Text vertikal zentrert anzeigen? (ja).

    Kapierst du jetzt, was ich meine?

    Vielen Dank für deine Fleißarbeit, aber du liegst leider immer noch neben der Fragestellung.
    Außerdem nützt deine Notlösung nichts, wenn es nur Mozilla versteht, leider ist der größere Teil der User immer noch mit dem IE unterwegs.

    Gute Nacht

    Ronald
    ... für den das Thema hier beendet ist.

  • also ich will mich dann mal roland anschließen....

    ein div ansich kann nicht vertikal zentriert werden. geht einfach nicht.
    und genau das war gefragt...

    aber wie ja erwähnt ises zwar über tabel-cell möglich, allerdings nicht valide.

    und bevor wir jetzt nocht die schwerte rausholen mach ich det mal zu...