Mam następujący kod, który konfiguruje kontener, którego wysokość zmienia się wraz z szerokością, gdy przeglądarka jest zmieniana (aby zachować kwadratowy współczynnik proporcji).
HTML
<div class="responsive-container">
<div class="dummy"></div>
<div class="img-container">
<IMG HERE>
</div>
</div>
CSS
.responsive-container {
position: relative;
width: 100%;
border: 1px solid black;
}
.dummy {
padding-top: 100%; /* forces 1:1 aspect ratio */
}
.img-container {
position: absolute;
top: 0;
bottom: 0;
left: 0;
right: 0;
}
Jak mogę wyrównać w pionie IMG wewnątrz kontenera? Wszystkie moje obrazy mają zmienną wysokość, a kontener nie może mieć stałej wysokości / wysokości linii, ponieważ jest responsywny ... Proszę o pomoc!
html
css
responsive-design
vertical-alignment
user1794295
źródło
źródło
Odpowiedzi:
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 jegoheight
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?
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 .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łu
padding
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:
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 napadding
to w stosunku do szerokości od.responsive-container
siebie.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
ileft
właściwości), aby wypełnić całe miejsce jego rodzica pojemnik .No to ruszamy:
Oto demo online .
Wszyscy razem
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
:ZAKTUALIZOWANE DEMO .
Za pomocą
max-*
właściwościW celu utrzymania wnętrza obrazu w oknie w dolnej szerokości, można ustawić
max-height
imax-width
nieruchomość na zdjęcie:Oto ZAKTUALIZOWANA DEMO .
źródło
font-size: 0;
!Dzięki flexbox jest to łatwe:
SKRZYPCE
Po prostu dodaj następujące elementy do kontenera obrazu:
źródło
-webkit-
prefiksu lub wypróbuj bibliotekę, taką jak prefixfree.js :)Użyj tego css, ponieważ masz już do niego znaczniki:
Oto działający JsBin: http://jsbin.com/ihilUnI/1/edit
To rozwiązanie działa tylko w przypadku kwadratowych obrazów (ponieważ procentowa wartość górnego marginesu zależy od szerokości kontenera, a nie od wysokości). W przypadku obrazów o losowych rozmiarach możesz wykonać następujące czynności:
Działające rozwiązanie JsBin: http://jsbin.com/ihilUnI/2/edit
źródło
Możesz wyśrodkować obraz, zarówno w poziomie, jak iw pionie, używając
margin: auto
i pozycjonowania bezwzględnego. Również:źródło
Spróbuj tego
źródło
.img-container
jest absolutnie ustawiony - jest to konieczne, aby zachować kwadratowy współczynnik kształtu / dynamiczną wysokość.Oto technika, która pozwala wyśrodkować KAŻDĄ treść zarówno w pionie, jak iw poziomie!
Zasadniczo potrzebujesz tylko dwóch pojemników i upewnij się, że Twoje elementy spełniają następujące kryteria.
Zewnętrzny pojemnik:
display: table;
Pojemnik wewnętrzny:
display: table-cell;
vertical-align: middle;
text-align: center;
Pole zawartości:
display: inline-block;
Jeśli używasz tej techniki, po prostu dodaj swój obraz (wraz z innymi treściami, które chcesz z nim połączyć) do pola zawartości.
Próbny :
Zobacz też to Fiddle !
źródło
Natknąłem się na ten wątek w poszukiwaniu rozwiązania, które:
Testując niektóre z rozwiązań zamieszczonych powyżej, nie znalazłem rozwiązania spełniającego wszystkie te kryteria, więc zestawiłem to proste, które może być przydatne dla innych osób, które muszą zrobić to samo:
Przykład roboczy na JSFiddle
źródło
Próbować
HTML
CSS
źródło
Kod HTML
<div class="image-container"> <img src=""/> </div>
kod css
źródło
Utwórz kolejny element div i dodaj do niego zarówno „dummy”, jak i „img-container”
Wykonaj HTML i CSS w następujący sposób
Zamiast 100% dla „responsywnego kontenera” możesz podać żądaną wysokość.,
źródło