CSS-Skalierung und quadratisches Bild zum Zuschneiden in der Mitte

Lesezeit: 4 Minuten

Benutzer-Avatar
Stollen

Ich habe also eine Sammlung von Miniaturansichten in meiner App, die die Größe von hat 200×200. Manchmal hat das Originalbild dieses Verhältnis nicht, also plane ich, dieses Bild auf ein Quadrat zuzuschneiden.

Derzeit wird das Bild nur so gestreckt, dass es in das Miniaturbild passt, also sagen wir, meine ursprüngliche Bildgröße ist 400 x 800, dann sieht das Bild sehr zerquetscht aus. Ich wollte dieses Bild so zuschneiden, dass es die kürzeste Breite/Höhe hat, und es dann auf ein Quadrat zuschneiden, also wird es in meinem obigen Beispiel auf a zugeschnitten 400 x 400.

Gibt es eine Möglichkeit, dies einfach über CSS zu tun, oder muss ich dafür eine Art JS verwenden?

  • Obwohl Sie Ihr Problem beschrieben haben, wird es sehr geschätzt, etwas Code sehen zu können. Erwägen Sie, etwas Code hinzuzufügen, damit Ihre Frage einen viel höheren Wert hat

    – Cody Guldner

    1. Mai 2013 um 0:15 Uhr

  • @CodyGuldner, ich denke, der Punkt hier ist, dass er nicht weiß, welchen Code er verwenden soll. Seine Frage scheint mir in Ordnung zu sein.

    – Jona

    1. Mai 2013 um 0:17 Uhr

  • @CodyGuldner Wenn ich Code hätte, würde ich ihn wirklich hier zeigen … aber ich habe zu diesem Zeitpunkt noch keinen

    – gang

    1. Mai 2013 um 0:19 Uhr

  • Dies ist leicht zu bewerkstelligen, wenn Sie das Bild zum Hintergrundbild eines div machen können. Hier ist ein Geige zeigen wie. Wenn Sie die verwenden müssen img tag, dann ist mein css-fu nicht gut genug, um dir zu helfen, aber ich wette, es ist möglich.

    – Matt Greer

    1. Mai 2013 um 0:20 Uhr

  • @Cody – Wenn Sie ein Bild zuschneiden, hat es nicht das gleiche Seitenverhältnis.

    – Samuel Liew

    1. Mai 2013 um 0:23 Uhr

Benutzer-Avatar
Samuel Liew

Sie können dies einfach in CSS tun, wenn Sie background-image verwenden.

.thumb {
    display: inline-block;
    width: 200px;
    height: 200px;
    margin: 5px;
    border: 3px solid #c99;
    background-position: center center;
    background-size: cover;
}

In dieser Geige ist das erste Bild 400 x 800, das zweite Bild 800 x 400:

http://jsfiddle.net/samliew/tx7sf

  • Vorsicht, dies funktioniert nicht in allen Browserversionen, dies ist CSS3-Markup. Wenn Sie also nicht an einen bestimmten Browser vermarkten, sollten Sie einen alternativen Ansatz in Betracht ziehen.

    – Kamera

    1. Mai 2013 um 12:55 Uhr

Benutzer-Avatar
der Frontender

Aktualisiert um Fälle zu behandeln, in denen die Bildbreite größer als die Höhe ist.

Sie können dies mit reinem CSS tun. Stellen Sie das Containerelement jedes Bildes auf eine feste Höhe und Breite ein und overflow: hidden. Stellen Sie dann das Bild ein, das Sie haben möchten min-width: 100%, min-height: 100%. Jede zusätzliche Höhe oder Breite wird den Container überfluten und ausgeblendet werden.

HTML

<div class="thumb">
    <img src="http://lorempixel.com/400/800" alt="" />
</div>

CSS

.thumb {
    display: block;
    overflow: hidden;
    height: 200px;
    width: 200px;
}

.thumb img {
    display: block; /* Otherwise it keeps some space around baseline */
    min-width: 100%;    /* Scale up to fill container width */
    min-height: 100%;   /* Scale up to fill container height */
    -ms-interpolation-mode: bicubic; /* Scaled images look a bit better in IE now */
}

Schau mal rein http://jsfiddle.net/thefrontender/XZP9U/5/

  • Was ist mit einem Bild, das breiter als hoch ist?

    – Leichtathletik

    1. Mai 2013 um 0:49 Uhr

  • @Mathletics dann aktualisieren wir einfach das CSS, um sowohl die Mindestbreite als auch die Mindesthöhe gemäß dieser aktualisierten Fiddle auf 100% zu setzen: jsfiddle.net/thefrontender/XZP9U/5 Ich habe auch die Antwort aktualisiert. Wir verlieren die Möglichkeit, ein Bild zu verkleinern, aber es ist immer noch eine gültige reine CSS-Lösung, die den quadratischen Raum ausfüllt, ohne das Originalbild zu verzerren

    – der Frontender

    1. Mai 2013 um 1:19 Uhr

  • Ist es möglich, zentrierte Bilder zu haben? Normalerweise sagt die obere linke Ecke nicht viel aus …

    – Vincent Wasteels

    23. Februar 2015 um 16:28 Uhr

Ich habe mir eine eigene Lösung ausgedacht und dachte, ich würde sie hier teilen, falls jemand anderes diesen Thread findet. Die Lösung background-size: cover ist die einfachste, aber ich brauchte etwas, das auch im IE7 funktioniert. Folgendes habe ich mir mit jQuery und CSS ausgedacht.

Hinweis: Meine Bilder waren “Profilbilder” und mussten auf Quadrate zugeschnitten werden. Daher einige der Funktionsnamen.

jQuery:

cropProfileImage = function(pic){
    var h = $(pic).height(),
        w = $(pic).width();

    if($(pic).parent('.profile-image-wrap').length === 0){
                     // wrap the image in a "cropping" div
         $(pic).wrap('<div class="profile-image-wrap"></div>');
    }

      if(h > w ){
          // pic is portrait
          $(pic).addClass('portrait');
          var m = -(((h/w) * 100)-100)/2; //math the negative margin
          $(pic).css('margin-top', m + '%');    
      }else if(w > h){ 
          // pic is landscape
          $(pic).addClass('landscape'); 
          var m = -(((w/h) * 100)-100)/2;  //math the negative margin
          $(pic).css('margin-left', m + '%');
      }else {
        // pic is square
        $(pic).addClass('square');
      }
 }

// Call the function for the images you want to crop
cropProfileImage('img.profile-image');

CSS

.profile-image { visibility: hidden; } /* prevent a flash of giant image before the image is wrapped by jQuery */

.profile-image-wrap { 
      /* whatever the dimensions you want the "cropped" image to be */
      height: 8em;
      width: 8em;
      overflow: hidden; 
 }

.profile-image-wrap img.square {
      visibility: visible;
      width: 100%;  
 }

 .profile-image-wrap img.portrait {
      visibility: visible;
      width: 100%;
      height: auto;
 }

 .profile-image-wrap img.landscape {
      visibility: visible;
      height: 100%;
      width: auto;
 }

1092970cookie-checkCSS-Skalierung und quadratisches Bild zum Zuschneiden in der Mitte

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy