J'ai une image et je veux lui donner une largeur et une hauteur spécifiques (en pixels)
Mais si je règle la largeur et la hauteur à l'aide de css ( width:150px; height:100px
), l'image sera étirée et elle peut être moche.
Comment remplir des images à une taille spécifique en utilisant CSS, sans l'étirer ?
Exemple d'image de remplissage et d'étirement:
Image originale:
Image étirée:
Image remplie:
Veuillez noter que dans l'exemple d'image remplie ci-dessus: d'abord, l'image est redimensionnée à 150x255 (rapport d'aspect maintenu), puis elle est rognée à 150x100.
width
etheight
devrait ajuster en conséquenceRéponses:
Si vous souhaitez utiliser l'image comme arrière-plan CSS, il existe une solution élégante. Utilisez simplement
cover
oucontain
dans labackground-size
propriété CSS3.Tandis que
cover
vous donnera une image agrandie,contain
vous donnera une image réduite. Les deux conserveront le rapport hauteur / largeur des pixels.http://jsfiddle.net/uTHqs/ (en utilisant la couverture)
http://jsfiddle.net/HZ2FT/ (en utilisant contain)
Cette approche a l'avantage d'être conviviale avec les écrans Retina selon le guide rapide de Thomas Fuchs.
Il convient de mentionner que la prise en charge du navigateur pour les deux attributs exclut IE6-8.
la source
background-repeat: no-repeat;
? Si l'image recouvre son conteneur, elle ne se répétera pas de toute façon.Vous pouvez utiliser la propriété css
object-fit
.Voir l'exemple ici
Il existe un polyfill pour IE: https://github.com/anselmh/object-fit
la source
img
balises (pas seulement labackground-image
méthode décrite dans la réponse ci-dessus). Merci :)object-fit
n'est pas pris en charge dans de nombreux navigateurs .background-size
c'est rarement une solution viable dans mes projets. Vous êtes moins susceptible de bénéficier d'un avantage SEO et ne pouvez pas fournir une balise ALT, une légende, etc. pour accompagner l'image où vous pouvez fournir un contexte supplémentaire pour les lecteurs d'écran.object-fit: cover;
. Merci beaucoupAmélioration de la réponse ci - dessus par @afonsoduarte ( PAS celle acceptée) .
au cas où vous utilisez bootstrap
Il y a trois différences:
Fournir
width:100%
sur le style.Cela est utile si vous utilisez le bootstrap et souhaitez que l'image s'étire sur toute la largeur disponible.
La spécification de la
height
propriété est facultative, vous pouvez la supprimer / la conserver selon vos besoinsSoit dit en passant, il n'est PAS nécessaire de fournir les attributs
height
etwidth
sur l'image
élément car ils seront remplacés par le style.il suffit donc d'écrire quelque chose comme ça.
la source
La seule vraie façon est d'avoir un conteneur autour de votre image et d'utiliser
overflow:hidden
:HTML
CSS
C'est pénible en CSS de faire ce que l'on veut et de centrer l'image, il y a une solution rapide dans jquery comme:
http://jsfiddle.net/x86Q7/2/
la source
margin-top
image par exemple50px
(voir ceci: jsfiddle.net/x86Q7/1 ), mais comment la recadrer à partir du centre réel ? (Sans jQuery?)Solution CSS sans JS et sans image d'arrière-plan:
Méthode 1 "marge automatique" (IE8 + - PAS FF!):
http://jsfiddle.net/5xjr05dt/
Méthode 2 "transformer" (IE9 +):
http://jsfiddle.net/5xjr05dt/1/
La méthode 2 peut être utilisée pour centrer une image dans un conteneur à largeur / hauteur fixe. Les deux peuvent déborder - et si l'image est plus petite que le conteneur, elle sera toujours centrée.
http://jsfiddle.net/5xjr05dt/3/
Méthode 3 "double wrapper" (IE8 + - PAS FF!):
http://jsfiddle.net/5xjr05dt/5/
Méthode 4 "double wrapper ET double image" (IE8 +):
http://jsfiddle.net/5xjr05dt/26/
Les méthodes 1 et 3 ne semblent pas fonctionner avec Firefox
la source
Une autre solution consiste à mettre l'image dans un récipient de la largeur et de la hauteur souhaitées. En utilisant cette méthode, vous n'auriez pas à définir l'image comme image d'arrière-plan d'un élément.
Ensuite, vous pouvez le faire avec une
img
balise et définir simplement une largeur maximale et une hauteur maximale sur l'élément.CSS:
HTML:
Désormais, lorsque vous modifiez la taille du conteneur, l'image s'agrandit automatiquement autant qu'elle peut sans sortir des limites ni se déformer.
Si vous souhaitez centrer l'image verticalement et horizontalement, vous pouvez changer le conteneur CSS pour:
Voici un JS Fiddle http://jsfiddle.net/9kUYC/2/
la source
À partir de la réponse de @Dominic Green à l'aide de jQuery, voici une solution qui devrait fonctionner pour des images qui sont soit plus larges que hautes, soit plus hautes qu'elles ne sont larges.
http://jsfiddle.net/grZLR/4/
Il existe probablement une façon plus élégante de faire le JavaScript, mais cela fonctionne.
la source
Soyez prudent si vous utilisez un thème ou quelque chose, ils déclarent souvent img max-width à 100%. Tu dois en faire aucun. Testez-le :)
https://jsfiddle.net/o63u8sh4/
la source
J'ai aidé à construire un plugin jQuery appelé Fillmore , qui gère les
background-size: cover
navigateurs dans qui le prennent en charge, et a un shim pour ceux qui ne le font pas. Donnez-lui un coup d'oeil!la source
Je pense qu'il est assez tard pour cette réponse. Quoi qu'il en soit, j'espère que cela aidera quelqu'un à l'avenir. J'ai rencontré le problème de positionnement angulaire des cartes. Il y a des cartes affichées pour un éventail d'événements. Si la largeur de l'image de l'événement est grande pour la carte, l'image doit être affichée en recadrant des deux côtés et une hauteur de 100%. Si la hauteur de l'image est longue, la partie inférieure des images est rognée et la largeur est de 100%. Voici ma solution CSS pure pour cela:
HTML:
CSS
la source
Essayez quelque chose comme ceci: http://jsfiddle.net/D7E3E/4/
Utilisation d'un conteneur avec débordement: caché
EDIT: @Dominic Green m'a battu.
la source
Cela remplira les images à une taille spécifique, sans les étirer ni les recadrer
la source
Pour adapter l'image en plein écran, essayez ceci:
fond-répétition: rond;
la source
la source