CSS Afficher une Image Redimensionnée et Recadrée
Je veux afficher une image à partir d'une URL avec une certaine largeur et la hauteur, même si il a un autre rapport à sa taille.
Donc, je veux redimensionner (maintien du rapport) et de découper l'image à la taille que je veux.
Je peux redimensionner avec html img
bien et je peux le couper avec background-image
.
Comment puis-je faire les deux?
Exemple:
Cette image:
A la taille 800x600
pixels et je veux montrer une image de 200x100
pixels
Avec img
je peux redimensionner l'image 200x150px
:
<img
style="width: 200px; height: 150px;"
src="http://i.stack.imgur.com/wPh0S.jpg">
Qui me donne ceci:
<img style="width: 200px; height: 150px;" src="https://i.stack.imgur.com/wPh0S.jpg">
Et avec background-image
je peux couper l'image 200x100
pixels.
<div
style="background-image:
url('https://i.stack.imgur.com/wPh0S.jpg');
width:200px;
height:100px;
background-position:center;"> </div>
Me donne:
<div style="background-image:url('https://i.stack.imgur.com/wPh0S.jpg'); width:200px; height:100px; background-position:center;"> </div>
Comment puis-je faire les deux?
Redimensionner l'image, puis couper à la taille que je veux?
Vous devez vous connecter pour publier un commentaire.
Vous pouvez utiliser une combinaison de ces deux méthodes, par exemple.
CSS:
HTML:
Vous pouvez utiliser négatif
margin
pour déplacer l'image à l'intérieur de la<div/>
.js-hide-until-loaded
puis retirez la classe lorsque l'image de l'événement onload de feux.onload="doSomething(this); $(this).removeClass('js-hide-until-loaded')"
Avec CSS3, il est possible de modifier la taille d'une
background-image
avecbackground-size
, répondant à la fois à des objectifs à la fois.Il y a un tas d'exemples sur css3.info.
En fonction de votre exemple, à l'aide de donald_duck_4.jpg. Dans ce cas,
background-size: cover;
est juste ce que vous voulez - il s'adapte à labackground-image
pour couvrir toute la zone de l'contenant<div>
et des clips à l'excès (en fonction du ratio).CSS:
HTML:
css3 background-image background-size
img
tags?<img />
balises, regardeobject-fit: cover
et les valeurs correspondantes de la CSS Valeurs de l'Image et Remplacé le Contenu du Module Niveau 3 spécification.Avez-vous essayé de l'utiliser?
.centered-and-cropped { object-fit: cover }
J'avais besoin de redimensionner l'image, centre (à la fois verticalement et horizontalement) et de la recadrer.
J'ai été heureux de trouver, qu'il pourrait être réalisé en une seule css en ligne.
Vérifiez l'exemple ici: http://codepen.io/chrisnager/pen/azWWgr/?editors=110
Ici est la
CSS
etHTML
code de cet exemple:CSS:
HTML:
La div contenant essentiellement de recadrer l'image en masquant le trop-plein.
Grâce sanchothefat.
J'ai une amélioration de votre réponse. La culture est très adapté pour chaque image, cette définitions doivent être au format HTML au lieu de CSS.
Le code ci-dessous va recadrer votre image pour vous. Vous pouvez jouer avec object-fit
Dans la culture de la classe, lieu de la taille de l'image que vous souhaitez voir apparaître:
Le code html ressemblera:
Live Exemple:
https://jsfiddle.net/de4Lt57z/
HTML:
CSS:
Explication:
Ici, l'image est redimensionnée par la largeur et la hauteur de la valeur de l'image. Et la récolte est réalisée par le clip de la propriété.
Pour des détails sur la propriété clip suivre:
http://tympanus.net/codrops/2013/01/16/understanding-the-css-clip-property/
Vous pouvez mettre la balise img dans une balise div et de faire les deux, mais je déconseille de mise à l'échelle des images dans le navigateur. Il fait un mauvais travail la plupart du temps, car les navigateurs ont très simpliste de mise à l'échelle des algorithmes. De mieux à faire votre mise à l'échelle dans Photoshop ou ImageMagick d'abord, puis de le servir au client agréable et jolie.
Ce que j'ai fait est de créer un serveur de script côté qui va redimensionner et recadrer une image sur le serveur de fin donc ça va envoyer le moins de données sur l'interweb.
Il est assez trivial, mais si quelqu'un est intéressé, je peux creuser et afficher le code (asp.net)
Il y a services comme Filestack qui va le faire pour vous.
Ils prennent votre url de l'image et de vous permettre de redimensionner à l'aide de paramètres d'url. Il est assez facile.
Votre image devrait ressembler à ceci après le redimensionnement de 200x100, mais en gardant le ratio d'aspect
L'ensemble de l'url ressemble à ceci
mais l'important, c'est juste
Si vous êtes en utilisant Bootstrap, essayez d'utiliser
{ background-size: cover;
pour la}
<div>
peut-être donner le div de classe disent<div class="example" style=url('../your_image.jpeg');>
de sorte qu'il devientdiv.example{
background-size: cover}
J'avais besoin de le faire récemment. Je voulais faire une image-lien vers un graphique de la NOAA. Depuis leur graphique peut changer à tout moment, je voulais que ma vignette pour changer avec lui. Mais il y a un problème avec leur graphique: il a un énorme bordure blanche en haut, donc si vous venez de changer l'échelle pour faire de la vignette, vous vous retrouvez avec des étrangers espaces dans le document.
Voici comment je l'ai résolu:
http://sealevel.info/example_css_scale_and_crop.html
J'ai d'abord besoin de faire un peu d'arithmétique. L'image d'origine de la NOAA est de 960 × 720 pixels, mais le haut de soixante-dix pixels sont un superflu blanc zone frontalière. J'avais besoin d'une 348 × 172 vignettes, sans frontières supplémentaires au-dessus. Cela signifie que la partie souhaitée de l'image d'origine est de 720 70 = 650 pixels de haut. J'avais besoin de l'échelle jusqu'à 172 pixels, c'est à dire, 172 /650 = 26.5%. Cela signifiait que 26,5% des 70 = 19 lignes de pixels nécessaires pour être supprimé à partir du haut de l'image à l'échelle.
Donc...
Régler la hauteur = 172 + 19 = 191 pixels:
hauteur=191
Définir la marge inférieure à -19 pixels (raccourcissement de l'image à 172 pixels de haut):
margin-bottom:-19px
Définir la position de tête à -19 pixels (décalage de l'image vers le haut, de sorte que le top 19 des pixels des lignes de débordement & sont cachés au lieu de celles du bas):
haut: 19px
Le HTML résultant ressemble à ceci:
Comme vous pouvez le voir, j'ai choisi de style qui contient <a> tag, mais vous pourriez le style a <div>, à la place.
Un artefact de cette approche est que si vous montrez de la frontière, la frontière supérieure sera absent. Depuis que j'utilise border=0 en tout cas, ce n'était pas un problème pour moi.