Hier ist eine Technik zum gleichzeitigen horizontalen und vertikalen Ausrichten von Inline-Elementen innerhalb eines übergeordneten Elements :
Vertikale Ausrichtung
1) Bei diesem Ansatz erstellen wir ein inline-block
(Pseudo-) Element als erstes (oder letztes) Kind des Elternteils und setzen seine height
Eigenschaft so, dass 100%
es die gesamte Höhe seines Elternteils annimmt .
2) Beim Hinzufügen vertical-align: middle
bleiben die Inline-Elemente (-block) in der Mitte des Zeilenbereichs. Also fügen wir diese CSS-Deklaration sowohl dem ersten Kind als auch unserem Element (dem Bild ) hinzu.
3) Um das Leerzeichen zwischen Inline- Elementen (-block) zu entfernen , können Sie die Schriftgröße des übergeordneten Elements auf Null setzen font-size: 0;
.
Hinweis: Ich habe im Folgenden die Bildersetzungstechnik von Nicolas Gallagher verwendet .
Was sind die Vorteile?
- Der Container ( übergeordnet ) kann dynamische Dimensionen haben.
Die Abmessungen des Bildelements müssen nicht explizit angegeben werden.
Mit diesem Ansatz können wir ein <div>
Element auch vertikal ausrichten . die einen dynamischen Inhalt haben können (Höhe und / oder Breite). Beachten Sie jedoch, dass Sie die font-size
Eigenschaft von neu festlegen müssen div
, um den Innentext anzuzeigen. Online-Demo .
<div class="container">
<div id="element"> ... </div>
</div>
.container {
height: 300px;
text-align: center; /* align the inline(-block) elements horizontally */
font: 0/0 a; /* remove the gap between inline(-block) elements */
}
.container:before { /* create a full-height inline block pseudo=element */
content: ' ';
display: inline-block;
vertical-align: middle; /* vertical alignment of the inline element */
height: 100%;
}
#element {
display: inline-block;
vertical-align: middle; /* vertical alignment of the inline element */
font: 16px/1 Arial sans-serif; /* <-- reset the font property */
}
Die Ausgabe
Responsive Container
In diesem Abschnitt wird die Frage nicht beantwortet, da das OP bereits weiß, wie ein reaktionsfähiger Container erstellt wird. Ich werde jedoch erklären, wie es funktioniert.
Um die Höhe eines Containerelements mit seiner Breite zu ändern (unter Berücksichtigung des Seitenverhältnisses), können wir einen Prozentwert für die padding
Eigenschaft top / bottom verwenden .
Ein Prozentwert für die obere / untere Polsterung oder die Ränder ist relativ zur Breite des enthaltenen Blocks.
Zum Beispiel:
.responsive-container {
width: 60%;
padding-top: 60%; /* 1:1 Height is the same as the width */
padding-top: 100%; /* width:height = 60:100 or 3:5 */
padding-top: 45%; /* = 60% * 3/4 , width:height = 4:3 */
padding-top: 33.75%; /* = 60% * 9/16, width:height = 16:9 */
}
Hier ist die Online-Demo . Kommentieren Sie die Linien von unten aus und ändern Sie die Größe des Bedienfelds, um den Effekt zu sehen.
Wir könnten die padding
Eigenschaft auch auf ein Dummy- Kind oder :before
/ :after
Pseudo-Element anwenden , um das gleiche Ergebnis zu erzielen. Aber zur Kenntnis , dass in diesem Fall auf den Prozentwert padding
ist auf die relative Breite der .responsive-container
selbst.
<div class="responsive-container">
<div class="dummy"></div>
</div>
.responsive-container { width: 60%; }
.responsive-container .dummy {
padding-top: 100%; /* 1:1 square */
padding-top: 75%; /* w:h = 4:3 */
padding-top: 56.25%; /* w:h = 16:9 */
}
Demo # 1 .
Demo # 2 (Verwenden von :after
Pseudoelementen)
Hinzufügen des Inhalts
Die Verwendung von padding-top
Eigenschaften führt zu einem großen Platz am oberen oder unteren Rand des Inhalts im Container .
Um dies zu beheben, haben wir den Inhalt von einem Hüllenelement wickeln, das Element aus dem Dokument normalen Fluss entfernen durch Verwendung absolute Positionierung , und erweitert schließlich die Umhüllung (bu verwenden top
, right
, bottom
und left
Eigenschaften) , um den gesamten Raum der Mutter zu füllen, der Behälter .
Auf geht's:
.responsive-container {
width: 60%;
position: relative;
}
.responsive-container .wrapper {
position: absolute;
top: 0; right: 0; bottom: 0; left: 0;
}
Hier ist die Online-Demo .
Alles zusammen bekommen
<div class="responsive-container">
<div class="dummy"></div>
<div class="img-container">
<img src="http://placehold.it/150x150" alt="">
</div>
</div>
.img-container {
text-align:center; /* Align center inline elements */
font: 0/0 a; /* Hide the characters like spaces */
}
.img-container:before {
content: ' ';
display: inline-block;
vertical-align: middle;
height: 100%;
}
.img-container img {
vertical-align: middle;
display: inline-block;
}
Hier ist die ARBEITSDEMO .
Natürlich können Sie die Verwendung von ::before
Pseudoelementen aus Gründen der Browserkompatibilität vermeiden und ein Element als erstes untergeordnetes Element erstellen von .img-container
:
<div class="img-container">
<div class="centerer"></div>
<img src="http://placehold.it/150x150" alt="">
</div>
.img-container .centerer {
display: inline-block;
vertical-align: middle;
height: 100%;
}
AKTUALISIERTE DEMO .
Mit max-*
Eigenschaften
Um das Bild in der Box in geringerer Breite zu halten, können Sie Folgendes für das Bild festlegen max-height
und festlegen max-width
:
.img-container img {
vertical-align: middle;
display: inline-block;
max-height: 100%; /* <-- Set maximum height to 100% of its parent */
max-width: 100%; /* <-- Set maximum width to 100% of its parent */
}
Hier ist die AKTUALISIERTE DEMO .