Oto technika wyrównywania elementów w wierszu wewnątrz elementu nadrzędnego , w poziomie i w pionie w tym samym czasie:
Wyrównanie w pionie
1) W tym podejściu tworzymy inline-block
(pseudo) element jako pierwsze (lub ostatnie) dziecko rodzica i ustawiamy jego height
właściwość na tak, 100%
aby przyjmowała całą wysokość jego rodzica .
2) Ponadto dodawanie vertical-align: middle
zachowuje elementy inline (-block) na środku przestrzeni między wierszami. Tak więc dodajemy tę deklarację CSS do pierwszego dziecka i naszego elementu ( obrazu ) zarówno.
3) Wreszcie, aby usunąć znak odstępu między elementami inline (-block) , możemy ustawić rozmiar czcionki rodzica na zero o font-size: 0;
.
Uwaga: W dalszej części użyłem techniki zastępowania obrazu Nicolasa Gallaghera .
Jakie są korzyści?
- Kontener ( element nadrzędny ) może mieć wymiary dynamiczne.
Nie ma potrzeby jawnego określania wymiarów elementu obrazu.
Możemy łatwo zastosować to podejście do wyrównania <div>
elementu również w pionie ; które mogą mieć dynamiczną zawartość (wysokość i / lub szerokość). Pamiętaj jednak, że musisz ponownie ustawić font-size
właściwość, div
aby wyświetlić tekst wewnętrzny. Demo online .
<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 */
}
Wyjście
Responsywny kontener
Ta sekcja nie odpowie na pytanie, ponieważ OP wie już, jak utworzyć responsywny kontener. Jednak wyjaśnię, jak to działa.
Aby wysokość elementu kontenera zmieniała się wraz z jego szerokością (z zachowaniem proporcji), możemy użyć wartości procentowej dla góry / dołupadding
właściwości .
Wartość procentowa w górnej / dolnej wyściółki lub marginesie jest w stosunku do szerokości, zawierającego blok.
Na przykład:
.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 */
}
Oto demo online . Skomentuj linie od dołu i zmień rozmiar panelu, aby zobaczyć efekt.
Możemy również zastosować tę padding
właściwość do fikcyjnego elementu potomnego lub :before
/ :after
pseudoelementu, aby osiągnąć ten sam wynik. Ale uwaga , że w tym przypadku wartość procentowa na padding
to w stosunku do szerokości od .responsive-container
siebie.
<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 nr 1 .
Demo nr 2 (przy użyciu :after
pseudoelementu)
Dodawanie treści
Korzystanie z padding-top
właściwości powoduje powstanie ogromnej przestrzeni na górze lub na dole treści, wewnątrz kontenera .
W celu ustalenia, że mamy owinąć Zawartość elementu owijającego, usunięcia tego elementu z dokumentu normalnym za pomocą pozycjonowania absolutnego , a na końcu rozszerzenie osłony (BU użyciu top
, right
, bottom
i left
właściwości), aby wypełnić całe miejsce jego rodzica pojemnik .
No to ruszamy:
.responsive-container {
width: 60%;
position: relative;
}
.responsive-container .wrapper {
position: absolute;
top: 0; right: 0; bottom: 0; left: 0;
}
Oto demo online .
Wszyscy razem
<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;
}
Oto DEMO PRACY .
Oczywiście można uniknąć używania ::before
pseudoelementu w celu zapewnienia zgodności z przeglądarkami i utworzyć element jako pierwsze dziecko .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%;
}
ZAKTUALIZOWANE DEMO .
Za pomocą max-*
właściwości
W celu utrzymania wnętrza obrazu w oknie w dolnej szerokości, można ustawić max-height
i max-width
nieruchomość na zdjęcie:
.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 */
}
Oto ZAKTUALIZOWANA DEMO .