HTML & CSS

element์˜ ์ข…ํšก๋น„ ์œ ์ง€

presentKey 2023. 11. 24. 00:54

๐Ÿšฉ ๊ธฐ์กด ์• ๋‹ˆ์นด๋“œ ๋””์ž์ธ

๊ธฐ์กด ์• ๋‹ˆ์นด๋“œ๋Š” 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
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์—์„œ๋Š” ์‚ฌ์šฉํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค!

 

๐Ÿšฉ ์ฐธ๊ณ