Comment puis-je centre une image si elle est plus large que son contenant?
Normalement, vous de centre images avec display: block; margin: auto
, mais si l'image est plus grande que le conteneur, il déborde à droite. Comment puis-je faire déborder sur les deux côtés de la même manière? La largeur du conteneur est fixe et connu. La largeur de l'image est inconnue.
Vous devez vous connecter pour publier un commentaire.
HTML
CSS
jQuery
Voir sur jsFiddle: http://jsfiddle.net/4eYX9/30/
Un pur css solution
Nécessitant un adaptateur supplémentaire (testé dans FireFox, IE8, IE7):
Amélioration De La Réponse
Il y avait un problème avec l'original de la réponse (ci-dessous). Si l'image est plus grande que le conteneur qui
outer
est centrée sur avec lui de l'auto de marges, puis il tronque l'image sur la gauche et crée excessive de l'espace sur la droite, comme ce violon montre.On peut résoudre que par flottante
inner
à droite puis de centrage de la droite. Cette tronque toujours laimg
hors de la page à gauche, mais il le fait explicitement le poussant de cette façon et puis les centres de back-off de cette, dont la combinaison est ce qui empêche la supplémentaire de défilement horizontale sur la droite. Maintenant nous avons seulement obtenir autant de défilement de droite que nous avons besoin pour voir la partie droite de l'image.Violon Exemple (Les frontières de violon sont pour la démonstration seulement.)
Essentiel CSS
Si vous désirez pas de défilement de droite à l'échelle des images
Puis à l'aide de la ci-dessus, également en ce que l'élément enveloppements
outer
(commecorps
ou un troisième wrapper) pour avoiroverflow: hidden
.Idée originale (pour l'Histoire)
Violon Exemple (Les frontières de violon sont pour la démonstration seulement.)
HTML
CSS
float: left
nécessaire.inner
style?float: right
est nécessaire.bottom
ettop
mais il ne fonctionne pas. j'ai donc utilisémargin-top:50%' in
intérieure " etmargin-top:-50%
dansimg
et a travaillé dans de nouveaux chrome. vous pouvez essayer avec d'autres navigateurs.inner
classe autrement, à savoir l'image ne sera pas centré.width: 100%
etoverflow: hidden
? jsfiddle.net/WAxn3/226 - Vous devez également supprimerborder
, ou changer pouroutline
width: 300px
et bordure rouge sont montrant le petit conteneur dans mon violon, et de montrer que l'image est centrée sur elle. Maintenant, je suis l'obtention de certaines incohérences dans les problèmes avec la barre de défilement horizontale en Chrome pour mon violon, parfois, de ses spectacles, parfois pas). J'ai donc besoin de savoir si je peux le résoudre.overflow: hidden
ensemble, mais vous remarquerez dans ma réponse que j'adresse à l'aide deoverflow: hidden
sous "Si vous désirez aucun de défilement de droite à l'échelle des images" juste en dessous de mon css pour éliminer tout de défilement de l'image.a
(comme ils le devraient), de sorte que vous n'aurez pas une image "plus large que son conteneur" que cette solution est pour, correct?width
sur l'élément extérieur (div.outer
dans mon exemple), ce qui signifie essentiellement un ensemble de largeur sur votrea
élément. Je pense que pour n'importe quel flexible de la largeur de solution, vous devrez utiliser les l'un des javascript solutions.clear
flottante première vu ici. Ainsi, il peut s'afficher correctement.clear
flottante première vu ici. Ainsi, il peut s'afficher correctement.Voici un 2 ligne de CSS solution (quelques lignes qui pourraient être nécessaires pour la croix-prise en charge du navigateur):
Alternative pure CSS solution est d'utiliser
transform
attribut:HTML:
CSS:
Violon
Juste pour ajouter un
overflow:hidden
parentdiv
pour masquer la zone supplémentaire de l'image.Votre meilleur pari est de le définir comme image d'arrière-plan du conteneur à la place.
<body>
.En fait il est plus simple pur css/html façon (sans grand défilement horizontale) :
Html :
Css :
Si vous ne voulez pas voir l'image de débordement
Avec l'image de débordement visible
Un fond solution avec l'image de débordement visible :
Html :
Css :
en supposant extérieur est d'une largeur conteneur spécifié.
Je ne peux que penser à une solution d'activer Javascript depuis ce que vous devez faire est relativement position de l'image d'un montant négatif à la gauche de son conteneur:
jQuery
J'ai trouvé ceci pour être une solution plus élégante, sans flex, semblable à quelque chose au-dessus, mais plus généralisée (s'applique à la fois verticale et horizontale):
Je ne pense pas qu'il y est un pur CSS solution (Sauf pour la prochaine réponse :)). Cependant, avec Javascript, il serait juste une question de trouver la largeur de l'image, en soustrayant de la largeur du conteneur, en divisant par deux et vous avez la gauche du conteneur dont vous avez besoin.