Ich versuche, einen blauen Behälter in der Mitte eines rosa Behälters zu bekommen, aber vertical-align: middle;
in diesem Fall scheint dies nicht der Fall zu sein.
<div style="display: block; position: absolute; left: 50px; top: 50px;">
<div style="text-align: left; position: absolute;height: 56px;vertical-align: middle;background-color: pink;">
<div style="background-color: lightblue;">test</div>
</div>
</div>
Ergebnis:
Erwartung:
Bitte schlagen Sie vor, wie ich das erreichen kann.
html
css
vertical-alignment
absolute
Vladimirs
quelle
quelle
position: absolute
überall verwenden?vertical-align: middle;
arbeitet mitdisplay: inline-block
oder Tabellenlayoutmargin-top: calc((56px - 16px) / 2)
, wo56px - parent height
,16px - element height/font-size
- JSFiddleAntworten:
Beachten Sie zunächst, dass dies
vertical-align
nur für Tabellenzellen und Elemente auf Inline-Ebene gilt.Es gibt verschiedene Möglichkeiten, vertikale Ausrichtungen zu erzielen, die Ihren Anforderungen entsprechen oder nicht. Ich zeige Ihnen jedoch zwei Methoden aus meinen Favoriten:
1. Verwenden von
transform
undtop
Der entscheidende Punkt ist, dass ein Prozentwert für
top
relativ zum Wertheight
des enthaltenen Blocks ist. Während ein Prozentwert auftransform
s relativ zur Größe des Feldes selbst (des Begrenzungsrahmens) ist.Wenn Probleme beim Rendern von Schriftarten auftreten (verschwommene Schrift), müssen Sie
perspective(1px)
dertransform
Deklaration Folgendes hinzufügen :Es ist erwähnenswert, dass CSS
transform
in IE9 + unterstützt wird .2. Verwenden von
inline-block
(Pseudo-) ElementenBei dieser Methode haben wir zwei Geschwisterelemente
inline-block
, die durchvertical-align: middle
Deklaration vertikal in der Mitte ausgerichtet sind .Einer von ihnen hat eine
height
von100%
der Mutter und das andere ist unser gewünschtes Element , dessen wollten wir es in der Mitte auszurichten.Schließlich sollten wir eine der verfügbaren Methoden verwenden, um die Lücke zwischen Elementen auf Inline-Ebene zu entfernen .
quelle
valign
solltedisplay: block
transform: translateY(-50%);
Ich habe das noch nie gesehen, aber es funktioniert einwandfrei. Retter des wirklichen Lebens.benutze das :
Verweisen Sie auf diesen Link: https://www.smashingmagazine.com/2013/08/absolute-horizontal-vertical-centering-css/
quelle
height
Eigenschaft definiert werden muss (in px, em usw.), damit dies funktioniert.Verwenden Sie Flex Blox in Ihrem absout positionierten Div, um dessen Inhalt zu zentrieren.
Siehe Beispiel https://plnkr.co/edit/wJIX2NpbNhO34X68ZyoY?p=preview
quelle
Vertikal und horizontal zentrieren:
quelle
Sie können
display:table
/ verwendentable-cell;
quelle
.b
fehlt jedoch ,position: absolute;
was wichtig ist, um andere Eigenschaften anzuzeigen, die ich nicht aufgenommen habe, um den Code klarer zu halten. Ich weiß, dass es keinen Sinn macht, Tabellenzellen absolut zu positionieren, aber vielleicht gibt es einen anderen Ansatz, der es erlaubt,position: absolute;
sowohl in.a
als auch in.b
Klassen zu bleiben ?Hier ist eine einfache Möglichkeit, das Top-Objekt zu verwenden.
Beispiel: Wenn die absolute Elementgröße 60px beträgt.
quelle
calc
ist hilfreich, sollte jedoch so sein,top: calc(50% - 30px)
dass sie tatsächlich zentriert ist.Eine zusätzliche einfache Lösung
HTML:
CSS:
quelle
Bitte überprüfen Sie diese Antwort auf ein ähnliches Problem.
Dies ist bei weitem der einfachste Weg, den ich gefunden habe.
https://stackoverflow.com/a/26079837/4593442
HINWEIS. Ich habe display verwendet: -webkit-flex; statt Anzeige: flex; zum Testen innerhalb der Safari.
FUSSNOTE. Ich bin nur ein Anfänger und teile die Hilfe von jemandem, der eindeutig erfahren ist.
quelle
Sie können dies tun, indem Sie
display:table;
in parent div unddisplay: table-cell; vertical-align: middle;
in child div verwendenquelle