J'utilise object-fit: cover;
dans mes CSS pour les images d'une page spécifique, car elles doivent rester sur le même height
. Cela fonctionne très bien dans la plupart des navigateurs.
Mais lors de la mise à l'échelle de mon navigateur dans IE ou Edge), l'image est redimensionnée dans width
(et non par height
) au lieu d'un zoom. L'image est déformée.
Quelle règle CSS puis-je utiliser pour résoudre ce problème?
Voici le page
.row-fluid {
display: table;
}
.row-fluid .span6 {
display: table-cell;
vertical-align: top;
}
.vc_single_image-wrapper {
position: relative;
}
.vc_single_image-wrapper .image-wrapper {
position: absolute;
top: 0;
left: 0;
bottom: 0;
right: 0;
background-size: cover;
background-repeat: no-repeat;
background-position: 50% 50%;
}
<div class="vc_single_image-wrapper vc_box_border_grey">
<div class="image-wrapper" style="background-image: url(http://i0.wp.com/www.homedecor.nl/wp-content/uploads/2016/03/Gordijnen-Home-Decor-2.jpg?fit=952%2C480;"></div>
</div>
essayez ceci, ça devrait marcher. supprimer également float de .row-fluid .span6
J'ai eu le même problème. Je l'ai résolu avec seulement CSS .
Fondamentalement Object-fit: cover
ne fonctionnait pas dans IE et il prenait 100% de la largeur et 100% de la hauteur et les proportions étaient déformées. En d’autres termes, l’effet de zoom d’image n’était pas là ce que je voyais en chrome.
L’approche que j’ai choisie consistait à positionner l’image à l’intérieur du conteneur avec absolute , puis et placez-la au centre en utilisant la combinaison:
position: absolute;
top: 50%;
left: 50%;
transform: translate(-50%, -50%);
Une fois au centre, je donne à l'image,
// For vertical blocks (i.e., where height is greater than width)
height: 100%;
width: auto;
// For Horizontal blocks (i.e., where width is greater than height)
height: auto;
width: 100%;
Cela donne à l'image l'effet de Object-fit: cover.
https://jsfiddle.net/furqan_694/s3xLe1gp/
Cette logique fonctionne dans tous les navigateurs.
Il n’existe aucune règle permettant d’atteindre cet objectif avec CSS uniquement, à part le object-fit
(que vous utilisez actuellement), qui est partiellement pris en charge dans Edge 1 donc si vous voulez utiliser ceci dans IE, vous devez utiliser un object-fit polyfill au cas où vous voudriez utiliser uniquement l'élément img
, sinon vous devrez faire quelques solutions de contournement.
Vous pouvez voir le object-fit
support ici
1 - Edge a maintenant support partiel pour object-fit
depuis la version 16, et par partiel, cela signifie que ne fonctionne que dans l’élément img
(la version future 18 n’a toujours qu’un support partiel)
Vous pouvez utiliser un extrait de code JS simple pour détecter si le object-fit
est pris en charge puis remplace le img
par un svg
//for browsers which doesn't support object-fit (you can use babel to transpile to ES5)
if ('objectFit' in document.documentElement.style === false) {
document.addEventListener('DOMContentLoaded', () => {
Array.prototype.forEach.call(document.querySelectorAll('img[data-object-fit]'), image => {
(image.runtimeStyle || image.style).background = `url("${image.src}") no-repeat 50%/${image.currentStyle ? image.currentStyle['object-fit'] : image.getAttribute('data-object-fit')}`
image.src = `data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='${image.width}' height='${image.height}'%3E%3C/svg%3E`
})
})
}
img {
display: inline-flex;
width: 175px;
height: 175px;
margin-right: 10px;
border: 1px solid red
}
/*for browsers which support object fit */
[data-object-fit='cover'] {
object-fit: cover
}
[data-object-fit='contain'] {
object-fit: contain
}
<img data-object-fit='cover' src='//picsum.photos/1200/600' />
<img data-object-fit='contain' src='//picsum.photos/1200/600' />
<img src='//picsum.photos/1200/600' />
Vous pouvez utiliser ce code js. Il suffit de changer .post-thumb img
avec votre img
.
$('.post-thumb img').each(function(){ // Note: {.post-thumb img} is css selector of the image tag
var t = $(this),
s = 'url(' + t.attr('src') + ')',
p = t.parent(),
d = $('<div></div>');
t.hide();
p.append(d);
d.css({
'height' : 260, // Note: You can change it for your needs
'background-size' : 'cover',
'background-repeat' : 'no-repeat',
'background-position' : 'center',
'background-image' : s
});
});
Je viens d'utiliser le @ misir-jafarov et travaille maintenant avec:
voici mon code:
if (document.documentMode || /Edge/.test(navigator.userAgent)) {
jQuery('.art-img img').each(function(){
var t = jQuery(this),
s = 'url(' + t.attr('src') + ')',
p = t.parent(),
d = jQuery('<div></div>');
p.append(d);
d.css({
'height' : t.parent().css('height'),
'background-size' : 'cover',
'background-repeat' : 'no-repeat',
'background-position' : '50% 20%',
'background-image' : s
});
t.hide();
});
}
J'espère que ça aide.