비율이 유지되는 반응형 item에서의 css 적용 방식 #204
-
과제와는 무관하고, grid를 이용한 card item list ui 를 반응형으로 만드는 연습을 하던 와중에 궁금한 것이 있어 질문드립니다! 코드는 다음과 같습니다. 너무 길어질 것 같아 db 변수는 코드로 첨부하지 않았는데, 타입은 아래와 같고 길이는 4입니다.
App.tsx 코드 내의 App Component, gridContainer Component, Card Component function App() {
return (
<div className="app">
<GridContainer></GridContainer>
</div>
);
}
function GridContainer() {
return (
<Container>
{db.map((card) => (
<Card key={card.id} {...card}></Card>
))}
</Container>
);
}
function Card({
title,
comment,
src
}: {
title: string;
comment: string;
src: string;
}) {
return (
<CardBox
onClick={() => {
alert('nyaa');
}}
>
<ImgBox>
<img src={src} alt="image" />
</ImgBox>
<ContentBox>
<TitleBox>
<b>{title}</b>
</TitleBox>
<CommentBox>{comment}</CommentBox>
</ContentBox>
</CardBox>
);
} App.tsx 내의 StyledComponent 코드 const Container = styled.div`
width: 100%;
max-width: 30rem;
display: grid;
grid-gap: 0.5rem;
grid-template-columns: 1fr 1fr;
grid-auto-rows: 1fr;
`;
const CardBox = styled.div`
position: relative;
padding-top: 100%;
width: 100%;
height: 0;
cursor: pointer;
background-color: #a9a9a9;
`;
const ImgBox = styled.div`
position: absolute;
top: 0;
width: 100%;
height: 50%;
img {
width: 100%;
height: 100%;
object-fit: cover;
}
`;
const ContentBox = styled.div`
width: 100%;
position: absolute;
top: 50%;
height: 50%;
display: flex;
flex-direction: column;
align-items: center;
`;
const TitleBox = styled.p`
width: 100%;
text-align: center;
margin: 0px;
`;
const CommentBox = styled.p`
padding-left: 0.3rem;
width: 100%;
margin: 0px;
font-size: 0.8rem;
flex-grow: 1;
overflow: hidden;
@media (max-width: 30rem) {
font-size: 0.7rem;
}
`;
실행 화면 gif로 첨부합니다. 질문 관련 css 코드만 짧게 설명하자면 다음과 같습니다.
질문 요지는 padding 값을 이용한 card item의 가로 세로의 너비 비율 조정 방식 말고 다른 대안이 있는지에 대해서 입니다. 감사합니다! |
Beta Was this translation helpful? Give feedback.
Replies: 1 comment 1 reply
-
아 제가 다시 찾아봤는데 답이 공식문서에 있었네요 https://developer.mozilla.org/en-US/docs/Web/CSS/aspect-ratio |
Beta Was this translation helpful? Give feedback.
오오 저도 프론트 3년 일하면서 한번도 안써봤어요 ㅋㅋㅋㅋㅋㅋㅋㅋ 종횡비를 유지할 일이 딱히 없었어서..
공유 감사합니다!