Lassen Sie uns über die position-Eigenschaft sprechen. Ich weiß, dass Anfänger neugierig darauf sind. Hier ist eine Frage, die ich kürzlich erhalten habe
Ich bin ziemlich neu im Webdesign und habe die Unterschiede bei der Positionierung von Elementen noch nicht gemeistert. Ich kenne
absolute,fixedundrelative. Gibt es noch andere? Unterscheiden sie sich hauptsächlich? Und wann sollte man welche verwenden?
Kurze Antwort
Es gibt noch zwei weitere: static, was der Standard ist, und sticky, was eine ganz ausgefallene Sache ist. Ja, all diese unterscheiden sich maßgeblich! Jede von ihnen ist unglaublich nützlich und welche Sie verwenden sollten, hängt natürlich vom gewünschten Ergebnis ab.
Längere Antwort
Ein wichtiges Konzept, das man zuerst verstehen muss, ist, dass jedes einzelne Element auf einer Webseite ein Block ist. Buchstäblich ein Rechteck aus Pixeln. Das ist leicht zu verstehen, wenn Sie das Element auf display: block; setzen oder wenn dieses Element von Natur aus block-level ist, wie ein <div>. Das bedeutet, dass Sie eine width und eine height festlegen können und das Element diese respektiert. Aber Elemente, die display: inline; sind, wie ein <span> von Natur aus, sind *auch* Rechtecke, sie fließen nur anders auf die Seite, indem sie horizontal aneinandergereiht werden, wenn sie können.
Nun, da Sie sich jedes einzelne Seitenelement als Pixelblock vorstellen, können wir darüber sprechen, wie die Positionierung verwendet wird, um die Pixelblöcke genau dorthin zu bringen, wo Sie sie haben möchten.
.el {
position: static;
position: relative;
position: absolute;
position: fixed;
position: sticky;
position: inherit;
}
static
Dies ist der **Standard** für jedes einzelne Seitenelement. Verschiedene Elemente haben keine unterschiedlichen Standardwerte für die Positionierung, sie beginnen alle als static. Static bedeutet nicht viel; es bedeutet nur, dass das Element wie gewohnt in die Seite fließt. Der einzige Grund, warum Sie jemals ein Element auf position: static; setzen würden, ist, um eine Positionierung, die auf ein Element außerhalb Ihrer Kontrolle angewendet wurde, zwangsweise zu entfernen. Das ist ziemlich selten, da Positionierung nicht vererbt wird.
relative
Diese Art der Positionierung ist wahrscheinlich die verwirrendste und am häufigsten missbrauchte. Was es wirklich bedeutet ist "relativ zu sich selbst". Wenn Sie position: relative; auf ein Element setzen, aber keine anderen Positionierungsattribute (top, left, bottom oder right), hat dies keinerlei Auswirkung auf seine Positionierung, es wird genau so sein, als hätten Sie es als position: static; belassen. Aber wenn Sie ihm *doch* ein anderes Positionierungsattribut geben, sagen wir top: 10px;, wird es seine Position um 10 Pixel nach *unten* von seiner *normalen* Position verschieben. Ich bin sicher, Sie können sich vorstellen, dass die Fähigkeit, ein Element basierend auf seiner regulären Position zu verschieben, ziemlich nützlich ist. Ich benutze das oft, um Formularelemente auszurichten, die dazu neigen, sich nicht so auszurichten, wie ich es möchte.
Es gibt noch zwei andere Dinge, die passieren, wenn Sie position: relative; auf ein Element setzen, dessen Sie sich bewusst sein sollten. Erstens führt es die Fähigkeit ein, z-index auf diesem Element zu verwenden, was bei statisch positionierten Elementen nicht funktioniert. Selbst wenn Sie keinen z-index-Wert festlegen, wird dieses Element jetzt **über** jedem anderen statisch positionierten Element angezeigt. Sie können es nicht bekämpfen, indem Sie einen höheren z-index-Wert auf einem statisch positionierten Element festlegen.
Das andere, was passiert, ist, dass es **den Geltungsbereich von absolut positionierten Kindelementen einschränkt**. Jedes Element, das ein Kind des relativ positionierten Elements ist, kann innerhalb dieses Blocks absolut positioniert werden. Dies eröffnet einige mächtige Möglichkeiten, über die ich hier spreche.
absolute
Dies ist eine sehr mächtige Art der Positionierung, die es Ihnen ermöglicht, jedes Seitenelement buchstäblich genau dort zu platzieren, wo Sie es haben möchten. Sie verwenden die Positionierungsattribute top, left, bottom und right, um die Position festzulegen. Denken Sie daran, dass diese Werte relativ zum nächsten Elternelement mit relativer (oder absoluter) Positionierung sind. Wenn es keinen solchen Elternteil gibt, wird standardmäßig bis zum <html>-Element selbst zurückgegriffen, was bedeutet, dass es relativ zur Seite selbst platziert wird.
Der Kompromiss (und das Wichtigste, woran man sich erinnern muss) bei der absoluten Positionierung ist, dass diese Elemente **aus dem Fluss** der Elemente auf der Seite **entfernt** werden. Ein Element mit dieser Art von Positionierung wird von anderen Elementen nicht beeinflusst und beeinflusst andere Elemente nicht. Dies ist eine ernste Angelegenheit, die Sie jedes Mal berücksichtigen sollten, wenn Sie absolute Positionierung verwenden. Ihr übermäßiger oder unsachgemäßer Gebrauch kann die Flexibilität Ihrer Website einschränken.
fixed
Ein Element mit fixed Position wird relativ zum **Viewport** oder dem Browserfenster selbst positioniert. Der Viewport ändert sich nicht, wenn das Fenster gescrollt wird, daher bleibt ein fest positioniertes Element an seinem Platz, wenn die Seite gescrollt wird.
Dies könnte für etwas wie eine Navigationsleiste verwendet werden, die jederzeit sichtbar bleiben soll, unabhängig von der Scroll-Position der Seite. Die Sorge bei der festen Positionierung ist, dass sie Situationen verursachen kann, in denen das feste Element Inhalte überlappt, so dass es unzugänglich ist. Der Trick ist, genügend Platz zu haben, um dies zu vermeiden, und Tricks wie diese.
sticky
Sticky-Positionierung ist wirklich einzigartig! Ein sticky-Element verhält sich wie ein statisches Element, aber wenn Sie *daran* vorbeiscrollen, wird das Sticky-Element, wenn sein Elternelement Platz hat (normalerweise: zusätzliche Höhe), so behandelt, als wäre es fixed, bis dieses Elternelement keinen Platz mehr hat. Es klingt in Worten seltsam, aber es ist leicht zu sehen, was passiert in einer Demo.
Verwandte Konzepte
- Layout wie float, flexbox und grid.
- Das Box-Modell
Was mir wirklich geholfen hat, all diese Optionen zu verstehen, war, als ich anfing, CSSEdit von MacRabbit zu verwenden. Die Möglichkeit, eine Live-Vorschau der von Ihnen vorgenommenen Änderungen zu sehen, hilft wirklich, ein vollständiges Verständnis dafür zu bekommen, was jede Zeile Ihres CSS-Codes tatsächlich tut und wie sie sich auf den Rest des Layouts auswirkt.
PS – Nein, ich bin nicht mit MacRabbit verbunden, ich benutze das Produkt täglich für die Arbeit.
Das ist eine großartige Ressource für jeden, der in die Webdesign-Branche einsteigt.
Lieber Chris, bitte lerne den Unterschied zwischen „es ist“ und „sein“ (im englischen: its vs. it's). Danke.
Ehrlich gesagt, ich habe immer versucht, die Positionierung zu vermeiden, es sei denn, es war absolut notwendig. Danke, Chris, mein Geheimnis ist gelüftet und du gibst mir keine Ausrede mehr, es nicht vollständig zu verstehen.
Toller Artikel!
@Schwallex: Entschuldigung dafür, ich versuche wirklich darauf zu achten, aber ich habe mir schlechte Gewohnheiten angeeignet und es schleicht sich offensichtlich manchmal durch.
Solange wir uns gegenseitig auf schlechte Gewohnheiten hinweisen, sehe ich auf deiner Website, dass du jede deiner h2-Elemente in einen Div packst, der die Positionierung übernimmt. Das ist zusätzlicher unnötiger Code, da das h2 bereits ein Block-Level-Element ist, das genauso positioniert werden kann.
Toller Beitrag! Ich schätze seine Kürze und seinen Detailgrad. Danke!
Schöner Beitrag, Chris!
Ich habe vor einiger Zeit auch etwas darüber geschrieben
http://www.onyx-design.net/weblog2/css/css-positioning/
Ich habe auf so etwas gewartet.
Vielen Dank!
Danke Chris! Ich bin neu im Webdesign und werde wirklich verwirrt über die Unterschiede zwischen den dreien. Dieser Beitrag macht es für mein Verständnis klarer.
Gut erklärt, Chris! Das ist definitiv ein Ort, auf den ich meine CSS-Zöglinge verweisen werde!
Ich erinnere mich, dass die Positionierung mir Probleme bereitet hat, als ich mit CSS angefangen habe, daher bin ich sicher, dass dieser Artikel mehr als einem Aufschluss geben wird!
Wann ist es am besten, einen Float zu verwenden? Erreicht man nicht denselben Effekt wie ein Float, indem man absolute Positionen zu Elementen innerhalb von relativen Elementen setzt? Und indem man Elemente absolut positioniert, vermeidet man das Clearen von Floats?
Ich hoffe, ich erkläre meine Frage richtig! Danke für den Beitrag
Als jemand, den ich als "traditionellen" Coder bezeichne (im Wesentlichen arbeite ich hauptsächlich mit kompiliertem Code anstelle von interpretiertem Code), war dies für mich bei weitem der komplizierteste Aspekt von CSS, den es zu lernen galt. Dies liegt an den Unterschieden in Bezug auf den Kontext.
Danke für eine tolle Lektüre – es ist ein tolles Gefühl, weiter zu lernen!
Um fallsemo's Frage mit einem Rat zu beantworten: Mischen Sie Floats und Positionen **nicht, wenn Sie es vermeiden können.**
Das ist nur meine Meinung, und ich diskutiere keine ausgefallenen Tricks, die man zeigen kann. Ich rate nur davon ab, all die Probleme zu verursachen, die es mit sich bringen kann.
@fallsemo
Der wichtige Unterschied ist, dass gefloatete Elemente Teil des "Flusses" der Seite bleiben, wo absolut positionierte Elemente dies nicht tun. Daher können sie die "flexiblere" Wahl sein.
Hallo Chris,
wenn ich die Fenstergröße erhöhe, ist der Div-Container nicht an einer bestimmten Position fixiert. Ich habe auch eine absolute Position verwendet, aber sie funktioniert nicht. Hilf mir
Hallo, hier ist Finsta, danke für deine Hilfe! Jetzt verstehe ich die beängstigende Positionierung xD Du hast mir und vielen anderen geholfen. Auch dem Typen im Forum, ich habe seinen Namen vergessen
hey danke für den Artikel, sehr nützlich und wie eine Auffrischung dessen, was man vorher gelernt hat
nochmals danke
Guter Beitrag. Danke..
Danke für diesen Beitrag, Chris. Als ich anfing, für das Web zu entwickeln, hatte ich damit große Probleme. Um zu verstehen, was was tut, habe ich selbst recherchiert. Jetzt glaube ich, ich kenne den Unterschied und habe ein Einkaufszentrum mit einem festen Header und einer Sidebar entwickelt.
Wie üblich ein großartiger Artikel, Chris. Danke für die Informationen. Ich benutze normalerweise Floats, werde aber einige davon ausprobieren, um zu sehen, wer wann am besten passt (wenn das Sinn macht).
Hallo Chris, als Entwickler für die Bluelounge-Website, die Sie oben als Beispiel verwenden, hoffe ich, dass ich ein wenig von meiner Erfahrung teilen kann.
Als wir mit der Neugestaltung der Website begannen, gab es weniger Menüpunkte in der linken Navigation, sodass alles auch auf einem 800x600-Bildschirm sichtbar war. Aber mit dem Wachstum der Website wurde auch die Navigation länger und war für Browser mit kleineren Bildschirmen möglicherweise nicht am benutzerfreundlichsten. Ich bin mir dieser Problematik sehr bewusst und versuche, eine Lösung zu finden, ohne die Menüpunkte kürzen zu müssen. Vorschläge sind willkommen :-)
Fantastischer Artikel. Sie haben definitiv alles abgedeckt, was ich über Positionierung und ihre Verwendung lernen wollte. Danke, dass Sie es so einfach und prägnant gemacht haben.
Chris, eine wirklich ausgezeichnete Zusammenfassung der Positionierung – definitiv für mich gespeichert. Es ist immer nützlich, die Grundlagen zu wiederholen, da dies oft die Dinge sind, die ich vergesse und mit denen ich am meisten kämpfe!
Gute Übersicht, danke!
Ich dachte, position: fixed; würde etwas fest relativ zum nächstgelegenen Elternteil mit Position relativ (und standardmäßig zum Viewport (<html>)) setzen. Irgendeine Chance auf Bestätigung?
Danke für diese Chris. Ich hatte mich gefragt, warum Navigationselemente nicht öfter fest positioniert sind. Jetzt weiß ich, was ich vermeiden soll… glaube ich :)
Hallo Chris,
Danke für diesen Beitrag, Chris.
Ich habe dasselbe Problem mit der festen Position wie David oben gefragt hat.
Ich denke, die feste Position ist relativ zu und nicht zum Viewport (Bildschirm).
Ich habe eine Seite mit einem Frame darin erstellt.
Der Frame enthält eine Seite mit einem Ladebild, dessen CSS wie folgt lautet:
position:fixed; left:50%; right:50%; top:50%; bottom:50%; height:1px; width:1px;
Dieses Bild ist in der Mitte sichtbar, wenn ich die innere Seite separat durchsuche, aber es wird in der Mitte des iFrames und nicht des Bildschirms zentriert, wenn ich die übergeordnete Seite durchsuche, die den iFrame mit dieser Seite enthält.
Ich möchte, dass das Bild anstelle des iFrames in der Mitte des Bildschirms zentriert ist und habe es versucht, aber kein gewünschtes Ergebnis erzielt.
Gibt es eine Möglichkeit, das zu tun?
Ich habe <HTML> in einer Aussage vergessen.
Korrektur*
Ich denke, die feste Position ist relativ zu und nicht zum Viewport (Bildschirm) >> Ich denke, die feste Position ist relativ zu <HTML> und nicht zum Viewport (Bildschirm).
Vielen Dank, Chris. Ich weiß Ihre "mittlere Antwort" wirklich zu schätzen! Sie ist wirklich hilfreich!
Ich möchte hinzufügen, dass feste Elemente, wenn sie an ihre Grenzen gescrollt werden, ihre übergeordneten Elemente nicht weiter scrollen lassen. Sie hören einfach auf zu scrollen an ihren Grenzen, wie man es erwartet. Sie können eine gute Möglichkeit sein, mehrere verschachtelte Scroll-Bereiche zu erhalten, die sich nicht gegenseitig stören und unerwartetes Scrollen des Body-Elements verursachen.
Hallo Leute
wie lernt man Bootstrap.