2009-08-24 4 views
9

Ich habe eine Reihe von Bildern, die alle in eine 400px × 400px Box passen (das heißt, eine ihrer Dimensionen ist 400px und die andere ist kleiner). Ich würde gerne in der Lage sein, mit CSS, aber jquery/javascript wenn nötig, das Bild auf eine 200px um 200px Box, so dass zwei Kanten des Bildes die Box zu berühren, und es gibt eine Lücke zwischen den anderen beiden Kanten von die Kiste. Seitenverhältnis muss beibehalten werden.Wie kann ich Bilder mithilfe von CSS in eine 200-Pixel-Quadrat-Box einfügen?

Mein HTML ist wie folgt:

<div class="small"> 
    <img src="/images/photos/View.jpg" alt="View" /> 
</div> 

Und mein CSS ist:

div.images div.small 
{ 
    width:200px; 
    height:200px; 
    line-height:200px; 
    text-align:center; 
} 
div.images div.small img 
{ 
    vertical-align:middle; 
    max-width:200px; 
    max-height:200px; 
} 

Sie here eine Probe zu sehen.

Leider umarmen meine Landschaftsbilder das obere Ende der Box, während ich möchte, dass sie zentriert sind. Ich bin mir auch nicht sicher, ob die Wissenden sich auf max-width/max-height verlassen.

Wie kann ich meine Bilder in diesen Feldern zentrieren? mit

+0

Nur habe ich in der Lage vertikale Zentrierung zu tun ist, um die Größe der Eltern und die Größe der berechnen Kind und dann legen Sie die Position des Kindes relativ zu dem Eltern, so dass es zentriert ist. Max-Width & Max-Weight sind in Ordnung, wenn die Browser, auf die sie ausgerichtet sind, diese unterstützen. – JoshBerke

Antwort

12

Ich habe dies auf meinem Computer eingerichtet und es hat gut funktioniert. Nach dem Betrachten Ihrer Beispielseite liegt das Problem daran, dass Sie das Bild auf display:block festgelegt haben. Entfernen Sie entweder diese Regel aus dem allgemeinen img Regel (Seltsame global zu setzen, sowieso), oder das Bild Regel ändern Sie oben gepostet:

div.images div.small img 
{ 
    vertical-align: middle; 
    max-width: 200px; 
    max-height: 200px; 
    display: -moz-inline-box; /* Firefox 2 */ 
    display: inline-block; 
} 

standardmäßig das img Element und andere „ersetzt“ Elemente (Flash, etc) sind "Inline-Block" - das bedeutet, sie fließen inline wie Text, haben aber eine Breite und Höhe.

+0

Es scheint eine Pixelverschiebung oben auf den Porträtbildern zu geben (siehe vorherigen Link). Irgendwelche Ideen warum? – Eric

+0

Ich bin mir nicht 100% sicher, aber es wird etwas seltsam mit Text sein (obwohl es dort keinen Text gibt). Das Setzen von 'div.images div.small' auf' line-height: 98px; 'oder das Hinzufügen von' font-size: 1% 'zu' div.images div.small img' funktionierte für mich. – DisgruntledGoat

0

haben Sie versucht:

display:block; 
margin-left:auto; 
margin-right:auto; 

, die Elemente auf Blockebene

+0

Ich war unter dem Eindruck "" war ein Inline-Element. Auf jeden Fall funktioniert das nicht für die vertikale Zentrierung. – Eric

+0

oh mein Schlechter, es ist ein Inline-Element. meine Antwort bearbeitet. Wenn Ihr Container div eine feste Höhe hat, sollte "margin: auto;" vertikal zentriert sein. – knittl

+0

'margin: auto' zentriert nur horizontal, nicht vertikal. – DisgruntledGoat

1

ich vor einiger Zeit das gleiche tun musste Zentrum sollte, und ich fand eine gute Umsetzung in this link. "Zentrieren Sie ein Bild in einem div, vertikal und horizontal, ohne die Bildgröße zu kennen".

Es funktioniert für mich wie vorgesehen.

+0

Awesome, ich wusste nicht, dass Sie das tun könnten.height in CSS. – Zoidberg

+3

Ich würde mich von Äußerungen und anderen IE-Hacks fernhalten, ich bin mir nicht sicher, ob sie überhaupt notwendig sind. – DisgruntledGoat

+0

Das Hauptproblem ist, dass das Bild gestreckt werden muss, um die Box zu passen, während das Seitenverhältnis beibehalten wird. Ich bin mir ziemlich sicher, dass die Zentrierung mit 'line-height' erreicht werden kann. Mein Problem ist die Größe des Bildes. – Eric

1

ich in diese vertikale Zentrierung Problem lief einmal und in allen Browsern es richtig funktioniert werden, griff ich zu Javascript/jQuery:

$(document).ready(function() { 
    $('img').each(function() { 
     image_height = $(this).height(); 
     margin_top = (200 - image_height)/2; 
     $(this).css('margin-top', margin_top + 'px'); 
    }); 
}); 

Bitte beachten Sie, dass Sie $ benötigen (Fenster) .load statt $ (document) .ready, wenn die Bildmaße nicht im HTML-Format angegeben sind.

0

Hier ist eine Lösung, die funktioniert, egal welche Größe Sie wollen. Es wird herunterskaliert, aber nicht hochskaliert, vertikal und horizontal zentriert und verwendet nur CSS. Ich brauchte eine Weile, um es herauszufinden.

Setzen Sie Ihre <img> in eine <div>, dann positionieren Sie die Div wie Sie wollen (d. H., Gibt ihm die Größe, die Sie mögen, stellen Sie sicher, dass das position Attribut) setzen, dann dies gilt:

.mydiv > .myimg { 
    vertical-align: bottom; 
    max-height:  100%; 
    max-width:  100%; 
    position:  absolute; 
    margin:   auto; 
    top:   0; 
    right:   0; 
    bottom:   0; 
    left:   0; 
}