๐ฉ ๊ธฐ์กด ์ ๋์นด๋ ๋์์ธ
๊ธฐ์กด ์ ๋์นด๋๋ width: 100%, height: 152px ๊ณ ์ ๋์ด ์์ด์ ๋ถ์์ฐ์ค๋ฌ์ด ์ด๋ฏธ์ง๋ฅผ ๊ฐ์ง๊ณ ์์์ต๋๋ค.
๐ฉ ๋ณ๊ฒฝ๋ ์ ๋์นด๋ ๋์์ธ
์ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํด element์ ์ข ํก๋น๋ฅผ ์ ์งํ๋ ๋ฐฉํฅ์ผ๋ก ๋์์ธ์ด ๋ณ๊ฒฝ๋์์ต๋๋ค.
๐ฉ ์ข ํก๋น ์ ์ง 1: padding-bottom ํ์ฉ
- HTML
- <Image /> ์ด๋ฏธ์ง element
- ์ด๋ฏธ์ง๋ฅผ ๊ฐ์ธ๋ <div className='image-container' /> element
<AnimeCardContainer>
<div className="image-container">
<Image className="image" image={thumbnail} />
</div>
... // ์๋ต
</AnimeCardContainer>
- CSS
- .image-container
- padding-bottom: 70%๋ ๋ถ๋ชจ width์ 70% ๋น์จ์ height๋ก ๊ฐ์ง๋๋ค.
- padding-bottom: 100%๋ ๋ถ๋ชจ width์ 100% ๋น์จ์ height๋ก ๊ฐ์ง๊ธฐ ๋๋ฌธ์ ์ ์ฌ๊ฐํ์ด ๋ฉ๋๋ค.
- .image
- padding์ ๋ฐ๋ ค์๋ ์ด๋ฏธ์ง๋ฅผ ๋ณด์ด๊ธฐ ์ํด position: absolute๋ฅผ ํฉ๋๋ค.
- ๋น์จ ๊ณ์ฐ
- ์ธ๋ก/๊ฐ๋ก * 100
- .image-container
export const AnimeCardContainer = styled.div<Pick<AnimeCardProps, "display">>`
width: calc(50% - 4px);
&:nth-of-type(odd) {
margin-right: 8px;
}
& .image-container {
position: relative;
width: 100%;
padding-bottom: 70%; // ๋ถ๋ชจ width์ 70%๋ฅผ height๋ก ๊ฐ์ง
}
& .image {
position: absolute;
width: 100%;
height: 100%;
}
/* media-query md ์ฌ์ด์ฆ ์ด์ */
${({ theme }) => theme.mq("md")} {
width: calc(33% - 4px);
&:nth-of-type(odd) {
margin-right: 0;
}
&:not(:nth-of-type(3n)) {
margin-right: 8px;
}
}
`;
๐ฉ ์ข ํก๋น ์ ์ง 2: aspect-ratio ํ์ฉ
aspect-ratio๋ฅผ ์ฌ์ฉํ๋ฉด ์ ๋ฐฉ๋ฒ๋ณด๋ค๋ ๊ฐํธํ๊ฒ ๊ตฌํํ ์ ์์ง๋ง, IE์์๋ ์ฌ์ฉํ ์ ์์ต๋๋ค!
๐ฉ ์ฐธ๊ณ
- https://velog.io/@jsk3342/%EC%95%84%EB%8B%88-%EB%B0%98%EC%9D%91%ED%98%95-%EB%B9%84%EB%94%94%EC%98%A4-%EB%A7%8C%EB%93%9C%EB%8A%94%EB%8D%B0-padding-top%EC%9D%84-%EC%99%9C-%EC%93%B0%EB%8A%94%EA%B1%B0%EC%95%BC
- https://ddd120.tistory.com/m/2