By Chen Hui Jing / @hj_chen
The model is made up of four boxes, from inside to outside:
Ratio = Height / Width
1057 / 2560 = 0.41289 or 41.289%
Designer wants the masthead to maintain its aspect ratio regardless off screen size.
div {
background-size: contain;
padding-bottom: 41.289%;
}
contain
tells the browser to always show the entire image, even if it means there is empty space left in the container.
padding-bottom
value gives the container a height corresponding to the image ratio
div {
background-size: cover;
height: 41.289vw;
}
cover
tells the browser to always cover the entire container, even if the sides have to be cut off.
height
value gives the container a height corresponding to the image ratio, because of the relative unit viewport width.
img {
max-width: 100%;
}
If you use a content image, you don't need anything.
Maybe not entirely nothing. max-width: 100%
makes sure the image doesn't overflow the container.
May occur if you're working with a CMS.
Designer wants the masthead to have a minimum height (otherwise the magnificent image's focal point will end up too tiny to make sense).
background-position
div {
background-size: cover;
background-position: 75% 10%;
min-height: 480px;
}
For background images applied on a container, just use cover
.
Control the position of the "crop" based on percentage values along the x-axis and y-axis respectively.
object-fit
img {
width: 100%;
min-height: 480px;
object-fit: cover;
object-position: 75% 10%;
}
object-fit: cover
behaves similarly to background-size: cover
.
object-position
behaves similarly to background-position
.
Again, may be relevant if you're working with a CMS.
If it was up to me...
(╯°□°)╯︵ ┻━┻
position: absolute;
This removes the text from the normal document flow, so all the previous examples will work fine.
Just remember to set the position: relative
property on the parent container.
calc()
If your text is within the normal document flow, it takes up space in the div
.
This extra space needs to be offset, using calc()
is a good option.
h1 {
font-size: 5em;
}
.background {
background-size: cover;
height: calc(41.289vw - 5em);
}
Need to also account for margins and padding, if any.