Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to center crop an image (<img>) in fluid width container

How do I get an image to stay centered when its fluid width (percentage based) container is too small to show the whole image?

enter image description here

How can I center the image inside it's container

This means it should show the middle of the image instead of the sides when container is too small.

like image 766
Bryce Avatar asked Aug 15 '13 06:08

Bryce


People also ask

How do I crop an image to fit in a div?

By setting overflow:hidden to the div containing the image, and height:100% to the image, it will be resized to fill the height of the div, without distortion. Then we use jQuery to center the image with position:absolute .


2 Answers

When It Works

You might have a container that holds some content such as two <div>s that are 50% wide each, sitting next to each other. For this example, we can illustrate just one child of the container: enter image description here

We'll name outer rectangle .container, the inner rectangle .content and the image img. This arrangement is perfectly fine, as long as .content is always wider than img.

When It Breaks

Since we're dealing with percentages and probably working with a responsive design, this may not always be the case. If .content is ever thinner than img, cropping will occur:

enter image description here

The Problem

If the most interesting part of img is in the center, we need to get the browser to crop both edges evenly - leaving the best part of it visible, no matter what width of .content is.

enter image description here

The Solution

Fortunately, a solution is possible. Even better, no extra markup is required.

.content {     width: 90%; /* or whatever is required */     text-align: center; /* ensures the image is always in the h-middle */     overflow: hidden; /* hide the cropped portion */ }  img {     position: relative; /* allows repositioning */     left: 100%; /* move the whole width of the image to the right */     margin-left: -200%; /* magic! */ } 
like image 179
Bryce Avatar answered Sep 24 '22 23:09

Bryce


For new browsers, you can translate it

figure{     width: 100%;     text-align: center;     overflow: hidden; } img{     position: relative;     left: 50%;     transform: translate(-50%,0) } 

To support IE8, you can still use the technique presented above by @BryceHanscomb.

.no-csstransforms figure img {     left: 100%; /* move the whole width of the image to the right */     margin-left: -200%; /* magic! */ } 
like image 27
Gabriela Gabriel Avatar answered Sep 23 '22 23:09

Gabriela Gabriel