Unter der Annahme, dass das übergeordnete Element position: relative; hat, zentrieren diese vier Eigenschaften ein untergeordnetes Element sowohl horizontal als auch vertikal darin, unabhängig von der Breite oder Höhe von beiden.
@mixin centerer {
position: absolute;
top: 50%;
left: 50%;
transform: translate(-50%, -50%);
}
.parent {
position: relative;
}
.child {
@include centerer;
}
Siehe den Pen Centerer Mixin von Chris Coyier (@chriscoyier) auf CodePen.
Aber Vorsicht, wenn das zu zentrierende untergeordnete Element höher ist als das übergeordnete, könnte oben etwas abgeschnitten werden.
Ausgefallener
Wenn Sie nur in einer Richtung zentrieren möchten…
@mixin centerer($horizontal: true, $vertical: true) {
position: absolute;
@if ($horizontal and $vertical) {
top: 50%;
left: 50%;
transform: translate(-50%, -50%);
} @else if ($horizontal) {
left: 50%;
transform: translate(-50%, 0);
} @else if ($vertical) {
top: 50%;
transform: translate(0, -50%);
}
}
Siehe den Pen yybgZd von Chris Coyier (@chriscoyier) auf CodePen.
Was halten Sie davon, display: table; für das übergeordnete Element und display: table-cell; für das untergeordnete Element mit vertical-align usw. zu verwenden, um ein ähnliches Ergebnis zu erzielen?
Ich verwende diese Technik oft, aber sie fühlt sich ein wenig schmutzig an. Es wäre gut, eine andere Meinung zu sehen.
Gibt es einen bestimmten Grund, ein Mixin dafür zu verwenden und keinen Platzhalter-Selektor, oder ist das reine Geschmackssache?
Danke dafür, Chris. Kurzer Hinweis: Im Fancier-Teil fehlt ein % für den $vertical-Teil und zentriert daher im Beispiel nicht richtig.
Danke für das Mixin. Ich habe es etwas modifiziert, um rechts und unten zu zentrieren. Ich bin neu bei Sass, daher frage ich mich, ob es eine sauberere Möglichkeit gibt, dies zu tun
http://codepen.io/ilokano/pen/mJxJPL
Nettes Mixin!
Allerdings gibt es einen Tippfehler im else if-Teil
Sie haben das % vergessen. Sollte translate(0, -50%); sein.
Prost!
CSS transform muss für volle Browserunterstützung mit Präfix versehen werden.
http://shouldiprefix.com/#transforms
-webkit-transform: mytransform(); /* Ch <36, Saf 5.1+, iOS, An =<4.4.4 /
-ms-transform: mytransform(); / IE 9 /
transform: mytransform(); / IE 10, Fx 16+, Op 12.1+ */
Bitte verwenden Sie AutoPrefixer anstelle des Schreibens von Browserpräfixen.
Diese Technik funktioniert OK, aber wenn der Benutzer die Seite zoomt, ist sie nicht zu 100 % genau. Bitte versuchen Sie, diesen Pen zu zoomen: http://codepen.io/anon/pen/NxBXOP
Warum nicht das hier verwenden? Ich finde es viel besser geeignet.
Ihr übergeordnetes Element muss eine festgelegte Höhe haben, damit dies funktioniert, richtig?
Danke! In LESS konvertiert, falls jemand interessiert ist
http://codepen.io/leggomuhgreggo/pen/JXqgxP?editors=0100
Ich liebe Ihren Code! Ich habe das vorher mit drei separaten LESS-Mixins gemacht. Das hat mich davon befreit, Sass-Code auseinandernehmen zu müssen.
Ich habe es etwas angepasst, um es noch einfacher / lesbarer zu machen. Außerdem auf Mixins für Vendor-Präfixe umgestellt.
http://codepen.io/callaginn/pen/mAZmKE