Ich hatte mir den Kopf zerbrochen, um eine vertikale Ausrichtung in CSS zu erstellen
.base{
background-color:green;
width:200px;
height:200px;
overflow:auto;
position:relative;
}
.vert-align{
padding-top:50%;
height:50%;
}
<!-- and used the following div structure. -->
<div class="base">
<div class="vert-align">
Content Here
</div>
</div>
Während dies für diesen Fall zu funktionieren schien, war ich überrascht, dass die vertikale Ausrichtung einrasten würde, wenn ich die Breite meines Basis-Div vergrößerte oder verkleinerte. Ich hatte erwartet, dass beim Festlegen der Eigenschaft padding-top das Auffüllen als Prozentsatz der Höhe des übergeordneten Containers verwendet wird, was in unserem Fall die Basis ist, aber der obige Wert von 50 Prozent wird als Prozentsatz von berechnet Breite. :((
Gibt es eine Möglichkeit, die Auffüllung und / oder den Rand als Prozentsatz der Höhe festzulegen, ohne JavaScript zu verwenden?
quelle
top
eignet sich hervorragend zum Ändern der Größe basierend auf der Browser- / Fensterhöhe. Wie wäre es mit einem Div unter diesem Div? Wie können Sieclear
die 2. Div unter der Div sein, die um ein nach unten verschoben isttop:50%
?top: 50%
ist nicht sehr nützlich, wenn Sie den Inhalt an der eigenen Mitte ausrichten müssen.Eine Antwort auf eine etwas andere Frage: Sie können
vh
Einheiten verwenden, um Elemente in der Mitte des Ansichtsfensters aufzufüllen :quelle
vh
ist fast das gleiche wie Prozentsätze ... in einigen Fällen sogar noch schlimmer. Diese Antwort ist für die Frage irrelevantHier sind zwei Optionen, um das erforderliche Verhalten zu emulieren. Keine allgemeine Lösung, kann aber in einigen Fällen hilfreich sein. Der vertikale Abstand wird hier auf der Grundlage der Größe des äußeren Elements berechnet, nicht seines übergeordneten Elements. Diese Größe selbst kann jedoch relativ zum übergeordneten Element sein, und auf diese Weise wird auch der Abstand relativ.
Erste Option: Verwenden Sie Pseudoelemente, hier sind der vertikale und der horizontale Abstand relativ zum äußeren. Demo
Wenn Sie den horizontalen Abstand zum äußeren Element verschieben, wird er relativ zum übergeordneten Element des äußeren Elements. Demo
Zweite Option: Absolute Positionierung verwenden. Demo
quelle
Um das untergeordnete Element absolut von seinem übergeordneten Element zu positionieren, müssen Sie die relative Position auf dem übergeordneten Element UND die absolute Position auf dem untergeordneten Element festlegen.
Dann ist 'top' auf dem untergeordneten Element relativ zur Höhe des übergeordneten Elements. Sie müssen also auch das Kind 50% seiner eigenen Größe nach oben "übersetzen".
Es gibt eine andere Lösung mit Flexbox.
Sie finden Vor- und Nachteile für beide.
quelle
Dies kann mit der
writing-mode
Eigenschaft erreicht werden. Wenn Sie ein Elementwriting-mode
auf einen vertikalen Schreibmodus einstellen , zvertical-lr
werden die Prozentwerte seiner Nachkommen für Auffüllen und Rand in beiden Dimensionen relativ zur Höhe anstatt zur Breite.Aus der Spezifikation :
Die Definition der Inline-Größe :
Beispiel mit einem veränderbaren Element, bei dem horizontale Ränder relativ zur Breite und vertikale Ränder relativ zur Höhe sind.
Die Verwendung eines vertikalen Schreibmodus kann besonders nützlich sein, wenn das Seitenverhältnis eines Elements konstant bleiben soll, die Größe jedoch in Abhängigkeit von seiner Höhe anstelle der Breite skaliert werden soll.
quelle
-webkit-
Präfix benötigt, aber laut caniuse das Präfix seit Safari 11 nicht mehr benötigt hat. Haben Sie es mit einem Browser versucht, in dem es nicht funktioniert hat?Eine andere Möglichkeit, einen Zeilentext zu zentrieren, ist:
oder nur
quelle
Eine 50% ige Polsterung zentriert Ihr Kind nicht, sondern platziert es unterhalb der Mitte. Ich denke, Sie wollen wirklich eine Polsterung von 25%. Vielleicht geht Ihnen gerade der Speicherplatz aus, wenn Ihre Inhalte größer werden? Haben Sie auch versucht, die Randoberseite anstelle der Polsteroberseite festzulegen?
EDIT: Nevermind, heißt es auf der Website von w3schools
Vielleicht verwendet es immer die Breite? Ich hatte es nie bemerkt.
Was Sie tun, kann jedoch mit display: table erreicht werden (zumindest für moderne Browser). Die Technik wird hier erklärt .
quelle
line-height
, dh die Zeilenhöhe auf 200 Pixel festzulegen?Dies ist ein sehr interessanter Fehler. (Meiner Meinung nach ist es sowieso ein Fehler) Netter Fund!
In Bezug auf, wie es zu setzen, würde ich Camilo Martin Antwort empfehlen. Aber warum , ich würde das gerne ein bisschen erklären, wenn es euch nichts ausmacht.
In den CSS-Spezifikationen fand ich:
… Was komisch ist, aber okay.
Mit einem Elternteil
width: 210px
und einem Kindpadding-top: 50%
erhalte ich einen berechneten / berechneten Wert vonpadding-top: 96.5px
- was nicht der erwartete Wert ist105px
.Dies liegt daran, dass in Windows (ich bin mir bei anderen Betriebssystemen nicht sicher) die Größe der gängigen Bildlaufleisten standardmäßig
17px × 100%
(oder100% × 17px
für horizontale Balken) ist. Diese17px
werden vorher abgezogen Berechnung des50%
daher50% of 193px = 96.5px
.quelle