J'ai un site avec de nombreuses pages et différentes images de fond, et je les affiche depuis CSS comme:
body.page-8 {
background: url("../img/pic.jpg") no-repeat scroll center top #000;
background-size: cover;
}
Cependant, je veux montrer différentes images (plein écran) sur une page en utilisant des <img>
éléments, et je veux qu'elles aient les mêmes propriétés que la background-image: cover;
propriété ci-dessus (les images ne peuvent pas être affichées à partir de CSS, elles doivent être affichées à partir du document HTML).
J'utilise normalement:
div.mydiv img {
width: 100%;
}
Ou:
div.mydiv img {
width: auto;
}
pour rendre l'image complète et réactive. Cependant, l'image rétrécit trop ( width: 100%
) lorsque l'écran devient trop étroit et affiche la couleur d'arrière-plan du corps dans l'écran inférieur. L'autre méthode,width: auto;
ne fait que rendre l'image pleine taille et ne répond pas à la taille de l'écran.
Existe-t-il un moyen d'afficher l'image de la même manière background-size: cover
?
Réponses:
Solution # 1 - La propriété d'ajustement d'objet ( manque de support IE )
Mettez juste
object-fit: cover;
sur l'img.Voir MDN - concernant
object-fit: cover
:Voir aussi cette démo Codepen qui compare
object-fit: cover
appliqué à une image avecbackground-size: cover
appliqué à une image d'arrière-planSolution # 2 - Remplacez l'img par une image d'arrière-plan avec CSS
la source
Il existe en fait une solution CSS assez simple qui fonctionne même sur IE8:
la source
En supposant que vous pouvez vous arranger pour avoir un élément de conteneur que vous souhaitez remplir, cela semble fonctionner, mais semble un peu hackish. Essentiellement, je l'utilise simplement
min/max-width/height
sur une zone plus grande, puis redimensionne cette zone dans ses dimensions d'origine.la source
J'ai trouvé une solution simple pour émuler à la fois la couverture et le contenu, qui est purement CSS, et fonctionne pour les conteneurs avec des dimensions dynamiques, et ne fait aucune restriction sur le rapport d'image.
Notez que si vous n'avez pas besoin de prendre en charge IE ou Edge avant 16, vous feriez mieux d'utiliser l'ajustement d'objet.
taille de l'arrière-plan: couverture
Le 1000% est utilisé ici au cas où la taille naturelle de l'image est plus grande que la taille affichée. Par exemple, si l'image est 500x500, mais le conteneur est seulement 200x200. Avec cette solution, l'image sera redimensionnée à 2000x2000 (en raison de min-largeur / min-hauteur), puis réduite à 200x200 (en raison de
transform: scale(0.1)
).Le facteur x10 peut être remplacé par x100 ou x1000, mais il n'est généralement pas idéal d'avoir une image 2000x2000 rendue sur un div 20x20. :)
taille de l'arrière-plan: contenir
En suivant le même principe, vous pouvez également l'utiliser pour émuler
background-size: contain
:la source
transform
dans de nombreuses réponsesNon , vous ne pouvez pas l'obtenir comme
background-size:cover
mais ...Cette approche est sacrément proche: elle utilise JavaScript pour déterminer si l'image est en paysage ou en portrait, et applique des styles en conséquence.
JS
CSS
http://jsfiddle.net/b3PbT/
la source
J'avais besoin d'émuler
background-size: contain
, mais je n'ai pas pu l'utiliser enobject-fit
raison du manque de support. Mes images avaient des conteneurs avec des dimensions définies et cela a fini par fonctionner pour moi:la source
min-height: 100%; max-height:100%;
et obtenir l'équivalent de la taille d'arrière-plan: couverture;min-height: 100%; max-height:100%;
ne conserverait pas les proportions, donc pas exactement un équivalent.Essayez de régler les deux
min-height
etmin-width
, avecdisplay:block
:( violon )
À condition que l'élément contenant votre image soit
position:relative
ouposition:absolute
, l'image couvrira le conteneur. Cependant, il ne sera pas centré.Vous pouvez facilement centrer l'image si vous savez si elle débordera horizontalement (définir
margin-left:-50%
) ou verticalement (ensemblemargin-top:-50%
). Il peut être possible d'utiliser des requêtes de médias CSS (et quelques mathématiques) pour comprendre cela.la source
Avec CSS, vous pouvez simuler
object-fit: [cover|contain];
. C'est utilisertransform
et[max|min]-[width|height]
. Ce n'est pas parfait. Cela ne fonctionne pas dans un cas: si l'image est plus large et plus courte que le conteneur.la source
Ce que vous pourriez faire, c'est utiliser l'attribut 'style' pour ajouter l'image d'arrière-plan à l'élément, de cette façon, vous appellerez toujours l'image dans le code HTML, mais vous pourrez toujours utiliser le comportement CSS de background-size: cover:
HTML:
CSS:
Voici comment j'ajoute le comportement background-size: cover aux éléments que je dois charger dynamiquement en HTML. Vous pouvez ensuite utiliser des classes CSS impressionnantes comme background-position: center. boom
la source
Pour IE, vous devez également inclure la deuxième ligne - largeur: 100%;
la source
je ne suis pas autorisé à `` ajouter un commentaire '' en faisant cela, mais oui, ce qu'a fait Eru Penkman est à peu près sur place, pour obtenir une couverture de fond, tout ce que vous devez faire est de changer
À
la source
Je sais que c'est ancien, mais de nombreuses solutions que je vois ci-dessus ont un problème avec l'image / vidéo étant trop grande pour le conteneur, donc n'agissant pas réellement comme une couverture de taille d'arrière-plan. Cependant, j'ai décidé de créer des "classes utilitaires" afin que cela fonctionne pour les images et les vidéos. Vous donnez simplement au conteneur la classe .media-cover-wrapper et l'élément multimédia lui-même la classe .media-cover
Ensuite, vous avez le jQuery suivant:
Lors de l'appel, assurez-vous de prendre soin du redimensionnement de la page:
Ensuite, le CSS suivant:
Oui, cela peut nécessiter jQuery mais il répond assez bien et agit exactement comme la taille de l'arrière-plan: couverture et vous pouvez l'utiliser sur des images et / ou des vidéos pour obtenir cette valeur SEO supplémentaire.
la source
Nous pouvons adopter l'approche ZOOM. Nous pouvons supposer que max 30% (ou plus jusqu'à 100%) peut être l'effet de zoom si la hauteur ou la largeur de l'image d'aspect est inférieure à la hauteur OU largeur souhaitée. Nous pouvons masquer le reste de la zone non nécessaire avec débordement: caché.
Cela ajustera les images avec une largeur OU une hauteur différente.
la source
rencontré les mêmes symptômes exacts. ci-dessus a fonctionné pour moi.
la source