2

I'm trying to display an image (6000px width, 300px height) at the end of the main-content like background image. The image should fit the width of the screen, but keep the origin height.

In other words somehow always crop the image at the center while the width of the x-crop is the screen width size and height crop is the origin height of the image.

I have made the image with 6000px width so that I can fit all the screens.

the code below does not work as expected its obvious, it just display the original img while scaling the height to keep the aspect ratio relative to the screen width.

newnewwaves.svg : http://svgshare.com/i/3DT.svg

how I want to be displayed: https://ibb.co/e80Ddw

HTML:

<div class="main-content">
       ...content
        <div id="header-waves">
            <img src="/assets/images/newnewwaves.svg" alt="">
        </div>
 </div>

CSS:

.main-content {
   position: relative;
}
#header-waves {
   position: absolute;
   left: 0;
   bottom: 0;
}
#header-waves img {
  width: 100%;
  height: auto;
  display: block;
}
Georgi Antonov
  • 1,581
  • 21
  • 40

4 Answers4

3

Try this:

.img-class {

    width: 100%;
    overflow: hidden;
    display: flex;
    justify-content: center;
    object-fit: cover; 
}

This will help in maintaining aspect ration by restricting the width and cropping the image to center it.

If that doesn't work, Please try this :

.img-class {
  width: 100%;
  height: 400px; /* Set your fixed Limit */
  background-size: cover;
}
HumbleBee
  • 191
  • 3
  • 8
1

You could place the image in a container with width: 100% and set the overflow property to hidden.

Use flexbox to center the image within this container.

Note that this snippet is easier to test if you make it full screen and resize the browser...

#header-waves {
  width: 100%;
  overflow: hidden;
  display: flex;
  justify-content: center;
}
<div class="main-content">
  <div id="header-waves">
    <img src="https://placehold.it/6000x300" alt="">
  </div>
</div>
sol
  • 22,311
  • 6
  • 42
  • 59
  • not working as expected will attach images so that its more clear – Georgi Antonov Sep 29 '17 at 14:11
  • @GeorgiAntonov Ok, it's difficult to help any further based on an image alone. The website you've linked is calculating height dynamically and is more complex than the snippet. – sol Sep 29 '17 at 14:21
  • Hi thanks I was able to get this to work for my use case by also applying **object-fit: cover;** to the img element. – Angus Grant Mar 13 '19 at 12:46
0

You can do it using background: url(...), like the example..

.main-content
{
  background: url('http://via.placeholder.com/6000x300');
  background-size: auto 100%;
  width:100%;
  height:300px;
}
<div class="main-content">
       ...content
 </div>
Renzo Calla
  • 7,486
  • 2
  • 22
  • 37
  • I dont want to set height of the .main-content since its an flex element and its height is reproduced relative to its siblings – Georgi Antonov Sep 29 '17 at 14:06
0

Something like this worked for me:

      <img
      src={userImageUrl}
      alt={userName}
      style={{
        borderRadius: "50%",
        width: "50px",
        height: "50px",
        objectFit: "cover",
      }}

I set the height and width both as I needed, and then added added objectFit: "cover" which helped fix it.

Amby
  • 21
  • 2
  • 8