Użyłem układu CSS flex box, który wygląda jak poniżej:
Jeśli ekran się zmniejszy, zamieni się w to:
Problem polega na tym, że obrazy nie są zmieniane, zachowując współczynnik proporcji z oryginalnego obrazu.
Czy można użyć czystego CSS i układu flex box, aby umożliwić zmianę rozmiaru obrazów, jeśli ekran się zmniejszy?
Oto mój html:
<div class="content">
<div class="row">
<div class="cell">
<img src="http://i.imgur.com/OUla6mK.jpg"/>
</div>
<div class="cell">
<img src="http://i.imgur.com/M16WzMd.jpg"/>
</div>
</div>
</div>
mój CSS:
.content {
background-color: yellow;
}
.row {
display: -webkit-box;
display: -moz-box;
display: -ms-flexbox;
display: -webkit-flex;
display: flex;
-webkit-box-orient: horizontal;
-moz-box-orient: horizontal;
box-orient: horizontal;
flex-direction: row;
-webkit-box-pack: center;
-moz-box-pack: center;
box-pack: center;
justify-content: center;
-webkit-box-align: center;
-moz-box-align: center;
box-align: center;
align-items: center;
background-color: red;
}
.cell {
-webkit-box-flex: 1;
-moz-box-flex: 1;
box-flex: 1;
-webkit-flex: 1 1 auto;
flex: 1 1 auto;
padding: 10px;
margin: 10px;
background-color: green;
border: 1px solid red;
text-align: center;
}
height:100%;
doimg
css.height: 100vh
zrobi to, nieheight: 100%
. Stylizacja na wysokość jest zawsze trudna.Przyjechałem tutaj, szukając odpowiedzi na moje zniekształcone obrazy. Nie jestem do końca pewien, czego szuka operacja powyżej, ale stwierdziłem, że dodanie
align-items: center
go rozwiąże problem. Czytając dokumenty, sensowne jest zastąpienie tego, jeśli bezpośrednio zginasz obrazy, ponieważalign-items: stretch
jest to ustawienie domyślne. Innym rozwiązaniem jest umieszczenie najpierw na obrazach elementu div.źródło
Możesz wypróbować bardzo nową i prostą funkcję CSS3:
Zachowuje proporcje obrazu (jak w przypadku sztuczki z tłem-obrazem), aw moim przypadku działało dobrze w tym samym problemie.
Uważaj jednak, nie jest obsługiwany przez IE (zobacz szczegóły pomocy tutaj ).
źródło
Proponuję przyjrzeć się
background-size
opcjom dostosowania rozmiaru obrazu.Zamiast umieszczać obraz na stronie, jeśli masz go ustawiony jako obraz tła, możesz ustawić:
background-size: contain
lub
background-size: cover
Opcje te uwzględniają zarówno wysokość, jak i szerokość podczas skalowania obrazu. Będzie to działać w IE9 i wszystkich innych najnowszych przeglądarkach.
źródło
Na drugim obrazku wygląda na to, że chcesz, aby obraz wypełnił pole, ale utworzony przykład ZACHOWAJE proporcje (zwierzęta wyglądają normalnie, nie są szczupłe ani grube).
Nie mam pojęcia, czy jako przykład wykonałeś obróbkę zdjęć w Photoshopie, czy też drugi to „jak powinno być” (powiedziałeś, że jest, podczas gdy w pierwszym przykładzie powiedziałeś „powinno”)
W każdym razie muszę założyć:
Jeśli „obrazy nie są zmieniane z zachowaniem współczynnika proporcji” i pokazujesz mi obraz, który ZACHOWUJE proporcje pikseli, muszę założyć, że próbujesz osiągnąć proporcje obszaru „przycinania” (wewnętrzna część zielony) WILE z zachowaniem proporcji pikseli. Oznacza to, że chcesz wypełnić komórkę obrazem, powiększając i przycinając obraz.
Jeśli to jest twój problem, kod, który podałeś NIE odzwierciedla "twojego problemu", ale twój przykład początkowy.
Biorąc pod uwagę poprzednie dwa założenia, to, czego potrzebujesz, nie może zostać osiągnięte za pomocą rzeczywistych obrazów, jeśli wysokość ramki jest dynamiczna, ale z obrazami tła. Albo za pomocą „background-size: include” lub tych technik (inteligentne dopełnienia w procentach, które ograniczają kadrowanie lub maksymalne rozmiary w dowolnym miejscu): http://fofwebdesign.co.uk/template/_testing/scale-img/scale- img.htm
Jedynym sposobem, w jaki jest to możliwe w przypadku obrazów, jest to, że ZAPOMNIAMY o twoim drugim iimage, a komórki mają stałą wysokość, a NA PEWNO, sądząc po przykładowych obrazach, wysokość pozostaje taka sama!
Więc jeśli wysokość twojego kontenera się nie zmienia i chcesz, aby twoje obrazy były kwadratowe, wystarczy ustawić maksymalną wysokość obrazów na tę znaną wartość (minus wypełnienia lub obramowania, w zależności od właściwości rozmiaru pola komórki)
Lubię to:
Oraz CSS:
http://jsfiddle.net/z25heocL/
Twój kod jest nieprawidłowy (tagi otwierające są zamiast tagów zamykających, więc wyświetlają komórki ZAGNIEŻDŻONE, a nie rodzeństwo, użył ZRZUTU EKRANU twoich obrazów wewnątrz wadliwego kodu, a pole flex nie zawiera komórek, ale oba przykłady w kolumnie ( ustawiłeś "wiersz", ale uszkodzony kod zagnieżdżający jedną komórkę wewnątrz drugiej spowodował powstanie flexu wewnątrz flex, w końcu działając jako KOLUMNY. Nie mam pojęcia, co chciałeś osiągnąć i jak wymyśliłeś ten kod, ale ja ' Zgaduję, czego chcesz, to jest to.
Dodałem display: flex do komórek, więc obraz zostanie wyśrodkowany (myślę, że
display: table
można by było użyć tutaj również z tymi wszystkimi znacznikami)źródło
HTML:
CSS:
źródło
W ten sposób radziłbym sobie z różnymi obrazami (rozmiarami i proporcjami) w elastycznej siatce.
źródło
Używam jquery lub vw, aby zachować proporcje
jquery
vw
źródło