Mam div 48x48 i wewnątrz jest element img, chcę dopasować go do div bez utraty żadnej części, w międzyczasie zachowany jest stosunek, czy można to osiągnąć używając html i css?
136
Będziesz potrzebował trochę JavaScript, aby zapobiec przycinaniu, jeśli nie znasz rozmiaru obrazu w momencie pisania CSS.
<div id="container">
<img src="something.jpg" alt="" />
</div>
<script type="text/javascript">
(function() {
var img = document.getElementById('container').firstChild;
img.onload = function() {
if(img.height > img.width) {
img.height = '100%';
img.width = 'auto';
}
};
}());
</script>
#container {
width: 48px;
height: 48px;
}
#container img {
width: 100%;
}
Jeśli korzystasz z biblioteki JavaScript, możesz chcieć z niej skorzystać.
Użyj
max-height:100%; max-width:100%;
dla obrazu wewnątrz div.źródło
overflow:scroll
div z dużym obrazem. Ciekawy. Jeszcze bardziej dziwne: rozwiązanie Maxa faktycznie to naprawia. Naprawdę mam dość CSS. Kiedyś był potężny i fajny. Teraz implementacje po prostu generują błędną niespójność po błędnej niespójności.Niestety max-width + max-height nie w pełni pokrywają moje zadanie ... Więc znalazłem inne rozwiązanie:
Aby zapisać proporcje obrazu podczas skalowania, możesz również użyć
object-fit
właściwości CSS3.Przydatny artykuł: Kontroluj proporcje obrazu za pomocą CSS3
Złe wieści: IE nie jest obsługiwany ( mogę używać )
źródło
object-fit: cover;
pracował dla mnie. Tutaj: stackoverflow.com/questions/9071830/…Korzystanie tylko z CSS:
źródło
HTML
CSS
Spowoduje to, że obraz rozszerzy się i wypełni jego rodzica, którego rozmiar jest ustawiony w
div
CSS.źródło
height: 100%
, to wypaczy współczynnik obrazu - OP chce zachować współczynnik.Miałem wiele problemów, aby to działało, każde znalezione rozwiązanie wydawało się nie działać.
Zdałem sobie sprawę, że muszę ustawić wyświetlanie div na flex, więc w zasadzie to jest mój CSS:
źródło
Wypróbuj CSS:
źródło
U mnie działał następujący CSS (przetestowany w Chrome, Firefox i Safari).
Istnieje wiele rzeczy działających razem:
max-height: 100%;
,max-width: 100%;
Iheight: auto;
,width: auto;
aby skalę IMG dowolny wymiarowania najpierw osiąga 100% przy zachowaniu proporcjiposition: relative;
w pojemniku iuposition: absolute;
dziecka razem z lewym górnym rogiem obrazu w pojemnikutop: 50%;
ileft: 50%;
wyśrodkuj gotransform: translate(-50%, -50%);
przesuwa obraz z powrotem w lewo i do góry o połowę, tym samym wyśrodkowując obraz w pojemnikuCSS:
źródło
Ustawienie zdjęcia jako obrazu tła da nam większą kontrolę nad rozmiarem i położeniem, pozostawiając tag img, aby służył innemu celowi ...
Poniżej, jeśli chcemy, aby element div miał taki sam współczynnik proporcji jak zdjęcie, to placeholder.png jest małym przezroczystym obrazkiem o takich samych proporcjach jak zdjęcie.jpg. Jeśli zdjęcie jest kwadratem, jest to element zastępczy 1px x 1px, jeśli zdjęcie jest miniaturą wideo, jest to element zastępczy 16x9 itd.
Jeśli chodzi o to pytanie, użyj symbolu zastępczego 1x1, aby zachować kwadratowy współczynnik div, a obraz tła za pomocą,
background-size
aby zachować proporcje zdjęcia.Użyłem
background-position: center center;
więc zdjęcie będzie wyśrodkowane w div. (Wyrównanie zdjęcia w pionie na środku lub na dole byłoby brzydkie w stosunku do zdjęcia w tagu img.)Aby uniknąć dodatkowego żądania http, przekonwertuj obraz zastępczy na adres URL danych .
źródło
możesz użyć klasy "img-fluid" dla nowszej wersji, np. Bootstrap v4 .
i może używać klasy „img-responsive” dla starszych wersji, takich jak Bootstrap v3 .
Użycie : -
img tag z: -
class = "img-fluid"
src = „...”
źródło
Oto podejście oparte na języku JavaScript. Skaluje obraz stopniowo w dół, aż będzie pasował prawidłowo. Ty wybierasz, jak bardzo chcesz ją zmniejszyć za każdym razem, gdy się nie powiedzie. Ten przykład zmniejsza go o 10% za każdym razem, gdy się nie powiedzie:
Zapraszam do bezpośredniego kopiowania i wklejania.
źródło
U mnie zadziałało:
inline-flex był wymagany, aby obrazy nie wychodziły poza obszar div.
źródło